| .. | ||
| .github | ||
| .vscode | ||
| apidoc | ||
| controllers | ||
| docs | ||
| emails | ||
| helpers | ||
| job-uploads | ||
| locales | ||
| middlewares | ||
| model | ||
| public | ||
| reports | ||
| routes | ||
| scripts | ||
| services | ||
| tests | ||
| workers | ||
| .eslintrc.json | ||
| .npmrc | ||
| apidoc.json | ||
| db-scripts.js | ||
| package-lock.json | ||
| package.json | ||
| PINO_MODULE_FILTERING_GUIDE.md | ||
| README_PARTNER_INTEGRATION.md | ||
| README.md | ||
| server.js | ||
| setup_partners.js | ||
| start_workers.js | ||
| test_satloc_pattern_brief.js | ||
AgMission Server
📚 Documentation Index | 🔄 Partner Integration | 📝 DLQ System
Quick Links
- Partner Integration Guide - Complete guide for partner system integration
- DLQ Documentation - Dead Letter Queue management (all queues)
- DLQ Quick Start - Get started with DLQ in 5 minutes
- Payment Failure Handling - CRITICAL: Billing security and failed payment handling
- Payment Failure Fix Summary - Recent fix documentation and testing guide
- API Documentation - RESTful API reference
- Architecture Overview - 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
Debug Stripe Webhook
Prerequisites
- Install Stripe CLI: https://stripe.com/docs/stripe-cli
- Make sure your server is running locally
- Have your Stripe account credentials ready
Setup Steps
-
Login to Stripe CLI
stripe login -
Forward webhook events to your local server
# 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 -
Get the webhook signing secret When you run the
stripe listencommand, it will output a webhook signing secret like:> Ready! Your webhook signing secret is whsec_1234567890abcdef... -
Update your environment variables Add or update the webhook secret in your
.envfile:STRIPE_WH_SEC=whsec_1234567890abcdef... -
Enable debug logging Set the DEBUG environment variable to see webhook processing logs:
DEBUG=agm:* npm start # Or specifically for webhook debugging: DEBUG=agm:webhook,agm:stripe npm start
Testing Webhook Events
-
Trigger test events from Stripe CLI
# 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 -
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
-
Webhook signature verification failed
- Make sure
STRIPE_WH_SECmatches the secret fromstripe listen - Ensure the webhook endpoint path is correct (
/webhook/stripe)
- Make sure
-
Connection refused
- Verify your server is running on the correct port
- Check that the
--forward-toURL matches your server address
-
No webhook events received
- Confirm
stripe listenis still running - Check that events are being sent to the correct endpoint
- Verify your webhook endpoint is accessible
- Confirm
Production Webhook Setup
For production, configure webhooks directly in your Stripe Dashboard:
- Go to Developers > Webhooks
- Click "Add endpoint"
- Set endpoint URL:
https://yourdomain.com/webhook/stripe - Select events to listen for
- Copy the signing secret to your production
STRIPE_WH_SECenvironment 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
Quick links:
- Quick Start Guide - Get started in 5 minutes
- API Reference - Complete API documentation
- Operations Guide - 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:
curl http://localhost:4100/api/dlq/partner_tasks/messages?limit=20 \
-H "Authorization: Bearer $TOKEN"
Retry All Messages:
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:
# 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 messagesGET /api/dlq/:queueName/stats- Get DLQ statisticsPOST /api/dlq/:queueName/retryAll- Retry all messagesPOST /api/dlq/:queueName/retryByPosition- Retry by position rangePOST /api/dlq/:queueName/retryByHeader- Retry by header matchDELETE /api/dlq/:queueName/purge- Purge queue ⚠️
For complete API documentation, see docs/DLQ_API_REFERENCE.md
Automated Processing
Use the web dashboard at http://localhost:4100/dlq-monitor.html or API endpoints:
# 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}'