Files
rosalia-nightsong/DOCS.md
T
naomi 2b19ecf1bf
Code Analysis / SonarQube (push) Failing after 16s
Node.js CI / Lint and Test (push) Failing after 30s
chore: add chibika
2025-07-19 16:22:38 -07:00

224 lines
6.4 KiB
Markdown

---
title: Rosalia Nightsong
---
Rosalia Nightsong (hereinafter the "Application") is a centralized alert server that receives and forwards application logs, errors, uptime notifications, Discord entitlements, and Stripe payment events to both email and Discord channels for real-time monitoring and notification purposes.
## 1. User Documentation
:::note
This section is coming soon!
:::
This section is for those interacting with a live instance of the Application.
### Overview
Rosalia Nightsong serves as a webhook endpoint and notification hub for various services. The application accepts HTTP POST requests containing structured data and forwards them as formatted notifications to configured email addresses and Discord channels.
### API Endpoints
The Application provides several webhook endpoints:
- **GET /** - Returns the application's homepage with basic information
- **POST /log** - Accepts application log messages
- **POST /error** - Accepts error reports with stack traces
- **POST /uptime** - Accepts uptime/health check notifications
- **POST /entitlement** - Handles Discord entitlement purchase notifications
- **POST /stripe** - Processes Stripe payment webhook events
### Authentication
All POST endpoints (except Stripe webhooks) require authentication via the `Authorization` header containing a valid API token. Discord entitlements use Ed25519 signature verification for security.
### Supported Applications
The server maintains a registry of supported Discord applications with their respective verification keys for entitlement webhook validation.
## 2. Technical Documentation
:::note
This section is coming soon!
:::
This section is for those interested in running their own instance of the Application.
### Architecture
Rosalia Nightsong is built using:
- **Runtime**: Node.js with TypeScript
- **Web Framework**: Fastify for high-performance HTTP handling
- **Email**: Nodemailer with SMTP transport
- **Discord Integration**: Discord API v10 for channel messaging
- **Payment Processing**: Stripe SDK for webhook handling
- **Webhook Verification**: discord-verify for Ed25519 signature validation
### Environment Configuration
The application requires the following environment variables:
```env
MATRIX_ACCESS_TOKEN="matrix_access_token"
MATRIX_ROOM_ID="matrix_room_id"
API_AUTH="api_authentication_token"
EMAIL_PASSWORD="smtp_password"
DISCORD_WEBHOOK_URL="discord_webhook_url"
STRIPE_SECRET_KEY="stripe_secret_key"
STRIPE_WEBHOOK_SECRET="stripe_webhook_secret"
DISCORD_TOKEN="discord_bot_token"
```
### Installation and Setup
1. **Prerequisites**
- Node.js 18+ with pnpm package manager
- TypeScript compiler
- Access to SMTP server for email notifications
- Discord bot token and channel access
- Stripe account with webhook configuration (if using payment features)
2. **Installation**
```bash
pnpm install
```
3. **Build**
```bash
pnpm run build
```
4. **Start**
```bash
pnpm start
```
The server will listen on port 5003 by default.
### API Schema Validation
The application uses JSON schema validation for incoming requests:
#### Log Endpoint (`/log`)
```typescript
{
application: string;
level: string;
message: string;
}
```
#### Error Endpoint (`/error`)
```typescript
{
application: string;
context: string;
message: string;
stack: string;
}
```
#### Uptime Endpoint (`/uptime`)
```typescript
{
application: string;
message: string;
}
```
### Notification Formats
**Email Notifications**: Plain text format sent to configured SMTP recipient
**Discord Notifications**: Rich embed format with structured components and markdown support
### Security Features
- API token authentication for log/error/uptime endpoints
- Ed25519 signature verification for Discord entitlements
- Stripe webhook signature validation
- Request body validation against JSON schemas
- Error handling with notification forwarding
### Monitoring and Logging
The application includes comprehensive error handling that forwards internal errors to the configured notification channels, ensuring operational visibility and quick incident response.
## 3. Legal Documentation
:::note
This section is coming soon!
:::
This section is for expansions to our legal policies specific to the Application.
### License
This software is licensed under Naomi's Public License. Copyright held by Naomi Carrigan.
### Data Handling
The Application processes and forwards notification data but does not persistently store user data. All webhook payloads are processed in memory and forwarded to configured notification channels.
### Third-Party Services
The Application integrates with:
- Discord API for message delivery
- Stripe API for payment webhook processing
- SMTP servers for email delivery
Users should review the privacy policies and terms of service for these third-party services.
## 4. Contributing Documentation
:::note
This section is coming soon!
:::
This section is for documentation related to contributing to the Application's codebase.
### Development Setup
1. **Clone the repository**
2. **Install dependencies**: `pnpm install`
3. **Configure environment variables** in `prod.env`
4. **Run linting**: `pnpm run lint`
5. **Build the project**: `pnpm run build`
6. **Start development server**: `pnpm start`
### Code Structure
```
src/
├── config/ # Application configuration and data
├── interfaces/ # TypeScript interface definitions
├── modules/ # Core functionality modules
├── schemas/ # JSON schema validation definitions
├── server/ # Fastify server setup and routing
└── utils/ # Utility functions
```
### Development Guidelines
- Follow the existing ESLint configuration (`@nhcarrigan/eslint-config`)
- Use TypeScript strict mode
- Include comprehensive error handling
- Add appropriate JSDoc comments for public functions
- Maintain the existing code style and structure
### Testing
Currently, no automated tests are configured. Contributors are encouraged to manually test all endpoints and error scenarios.
### Pull Request Process
1. Review the [contributing guidelines](CONTRIBUTING.md)
2. Follow the [Code of Conduct](CODE_OF_CONDUCT.md)
3. Create a feature branch from main
4. Make your changes with appropriate commit messages
5. Ensure linting passes
6. Submit a pull request with a clear description
### Contact
For questions or support, contact through the [Chat Server](http://chat.nhcarrigan.com) or email `contact@nhcarrigan.com`.