agmission/Development/server/README.md

225 lines
7.8 KiB
Markdown

# AgMission Server
📚 **[Documentation Index](docs/DOCUMENTATION_INDEX.md)** | 🔄 **[Partner Integration](README_PARTNER_INTEGRATION.md)** | 📝 **[DLQ System](docs/DLQ_INDEX.md)**
## Quick Links
- [Partner Integration Guide](./README_PARTNER_INTEGRATION.md) - Complete guide for partner system integration
- [DLQ Documentation](./docs/DLQ_INDEX.md) - Dead Letter Queue management (all queues)
- [DLQ Quick Start](./docs/DLQ_QUICKSTART.md) - Get started with DLQ in 5 minutes
- [Payment Failure Handling](./docs/PAYMENT_FAILURE_HANDLING.md) - **CRITICAL**: Billing security and failed payment handling
- [Payment Failure Fix Summary](./docs/PAYMENT_FAILURE_FIX_SUMMARY.md) - Recent fix documentation and testing guide
- [API Documentation](./docs/API_SPECIFICATION.md) - RESTful API reference
- [Architecture Overview](./docs/ARCHITECTURE_SUMMARY.md) - System architecture documentation
## Environment keys
| Syntax | Description |
| ----------------- | --------------------------------- |
| AGM_PORT | BackEnd endpoint port |
| PRODUCTION | Whether runnung in production mode |
| DEBUG | debug pattern. E.g: |
| AGM_PORT | BackEnd endpoint port DEBUG=agm:* |
| STRIPE_SECRET_KEY | Stripe secret key |
| STRIPE_PUBLISHABLE_KEY | Stripe publishable key |
| STRIPE_API_VERSION | Stripe API Version |
| STRIPE_WH_SEC | Stripe Webhooks Endpoint secret |
| [Package]_[Number]| Stripe package in uppercased 3-first character and number. E.g: ESS_1 for essential package 1 |
## Partner Integration Environment Keys
| Syntax | Description |
| ----------------- | --------------------------------- |
| SATLOC_API_ENDPOINT | SatLoc API base URL |
| SATLOC_API_TIMEOUT | Request timeout in milliseconds |
| SATLOC_RETRY_ATTEMPTS | Number of API retry attempts |
| SATLOC_RATE_LIMIT | API requests per second limit |
| PARTNER_SYNC_INTERVAL | Partner data sync interval (ms) |
| PARTNER_HEALTH_CHECK_INTERVAL | Health check interval (ms) |
| PARTNER_MAX_CONCURRENT_JOBS | Max concurrent partner jobs |
| PARTNER_ENCRYPT_CREDENTIALS | Whether to encrypt partner credentials |
| QUEUE_NAME_PARTNER | Partner task queue name (auto-prefixes with 'dev_' in development, defaults to 'partner_tasks' in production) |
| PARTNER_MAX_RETRIES | Maximum retry attempts before DLQ (default: 5) |
| DLQ_CHECK_INTERVAL | DLQ monitoring interval (default: 5 min) |
*Note: Partner authentication now uses customer-specific credentials stored in PartnerSystemUser records, not global environment variables.*
*For complete partner integration setup, see [README_PARTNER_INTEGRATION.md](./README_PARTNER_INTEGRATION.md)*
## Debug Stripe Webhook
### Prerequisites
1. Install Stripe CLI: https://stripe.com/docs/stripe-cli
2. Make sure your server is running locally
3. Have your Stripe account credentials ready
### Setup Steps
1. **Login to Stripe CLI**
```bash
stripe login
```
2. **Forward webhook events to your local server**
```bash
# Forward to local development server (default port 3000)
stripe listen --forward-to https://localhost:4100/stripe_webhooks --skip-verify
# Or specify custom port if your AGM_PORT is different
stripe listen --forward-to localhost:YOUR_AGM_PORT/webhook/stripe
```
3. **Get the webhook signing secret**
When you run the `stripe listen` command, it will output a webhook signing secret like:
```
> Ready! Your webhook signing secret is whsec_1234567890abcdef...
```
4. **Update your environment variables**
Add or update the webhook secret in your `.env` file:
```bash
STRIPE_WH_SEC=whsec_1234567890abcdef...
```
5. **Enable debug logging**
Set the DEBUG environment variable to see webhook processing logs:
```bash
DEBUG=agm:* npm start
# Or specifically for webhook debugging:
DEBUG=agm:webhook,agm:stripe npm start
```
### Testing Webhook Events
1. **Trigger test events from Stripe CLI**
```bash
# Test subscription created event
stripe trigger invoice.payment_succeeded
# Test subscription updated event
stripe trigger customer.subscription.updated
# Test payment failed event
stripe trigger invoice.payment_failed
# Test subscription cancelled event
stripe trigger customer.subscription.deleted
```
2. **Create test events from Stripe Dashboard**
- Go to your Stripe Dashboard
- Navigate to Developers > Webhooks
- Click "Send test webhook"
- Select the event type you want to test
### Debug Output
When debugging is enabled, you should see output like:
```
agm:webhook Received Stripe webhook: invoice.payment_succeeded
agm:stripe Processing subscription payment for customer: cus_...
agm:db -> MongoDB connected - Main Application ready
```
### Common Issues
1. **Webhook signature verification failed**
- Make sure `STRIPE_WH_SEC` matches the secret from `stripe listen`
- Ensure the webhook endpoint path is correct (`/webhook/stripe`)
2. **Connection refused**
- Verify your server is running on the correct port
- Check that the `--forward-to` URL matches your server address
3. **No webhook events received**
- Confirm `stripe listen` is still running
- Check that events are being sent to the correct endpoint
- Verify your webhook endpoint is accessible
### Production Webhook Setup
For production, configure webhooks directly in your Stripe Dashboard:
1. Go to Developers > Webhooks
2. Click "Add endpoint"
3. Set endpoint URL: `https://yourdomain.com/webhook/stripe`
4. Select events to listen for
5. Copy the signing secret to your production `STRIPE_WH_SEC` environment variable
## DLQ (Dead Letter Queue) Monitoring
The DLQ system provides **global queue-native operations** for managing failed tasks across **all queue types**.
### Documentation
Complete DLQ documentation: **[docs/DLQ_INDEX.md](./docs/DLQ_INDEX.md)**
Quick links:
- [Quick Start Guide](./docs/DLQ_QUICKSTART.md) - Get started in 5 minutes
- [API Reference](./docs/DLQ_API_REFERENCE.md) - Complete API documentation
- [Operations Guide](./docs/DLQ_OPERATIONS.md) - Advanced operations
### Web Dashboard
```
http://localhost:4100/dlq-monitor.html
```
Features:
- Real-time DLQ statistics for all queues
- View failed messages with error details
- One-click retry operations
- Queue selection dropdown
- Auto-refresh every 30 seconds
### Quick API Examples
**View DLQ Messages:**
```bash
curl http://localhost:4100/api/dlq/partner_tasks/messages?limit=20 \
-H "Authorization: Bearer $TOKEN"
```
**Retry All Messages:**
```bash
curl -X POST http://localhost:4100/api/dlq/partner_tasks/retryAll \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxMessages": 50}'
```
**Multiple Queue Support:**
```bash
# Partner queue
POST /api/dlq/partner_tasks/retryAll
# Job queue
POST /api/dlq/dev_jobs/retryAll
# Future queues (no code changes needed!)
POST /api/dlq/notifications/retryAll
```
### API Endpoints
Global DLQ endpoints (work for ANY queue):
- `GET /api/dlq/:queueName/messages` - View DLQ messages
- `GET /api/dlq/:queueName/stats` - Get DLQ statistics
- `POST /api/dlq/:queueName/retryAll` - Retry all messages
- `POST /api/dlq/:queueName/retryByPosition` - Retry by position range
- `POST /api/dlq/:queueName/retryByHeader` - Retry by header match
- `DELETE /api/dlq/:queueName/purge` - Purge queue ⚠️
For complete API documentation, see [docs/DLQ_API_REFERENCE.md](./docs/DLQ_API_REFERENCE.md)
### Automated Processing
**Use the web dashboard** at `http://localhost:4100/dlq-monitor.html` or API endpoints:
```bash
# Retry all DLQ messages
curl -X POST http://localhost:4100/api/dlq/partner_tasks/retryAll \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"maxMessages": 100}'
```