eb443232fb
Subscription billing: - POST /api/stripe/checkout — creates Stripe Checkout session - POST /api/stripe/webhook — handles lifecycle events (raw body) - POST /api/stripe/portal — customer self-service management - GET /api/stripe/status — current subscription info Founder code system: - Validates codes against env var list with expiry date - Routes to founder Stripe Price IDs (locked rate for life) - 4 price objects: analyst, analyst-founder, desk, desk-founder Webhook events handled: - checkout.session.completed → tier update + founder status - customer.subscription.deleted → revert to free tier - invoice.payment_failed → logged Lazy Stripe init (no API key required at import time). Raw body middleware for webhook signature verification. 16 new tests, 237 total (210 Node.js + 27 Python), all passing. Phase 3 Web MVP COMPLETE. All roadmap features shipped. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
41 lines
908 B
JSON
41 lines
908 B
JSON
{
|
|
"name": "betonblk",
|
|
"version": "1.0.0",
|
|
"description": "",
|
|
"main": "index.js",
|
|
"directories": {
|
|
"doc": "docs",
|
|
"test": "tests"
|
|
},
|
|
"scripts": {
|
|
"test": "jest --verbose",
|
|
"test:unit": "jest tests/unit --verbose",
|
|
"test:integration": "jest tests/integration --verbose"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/kev3109/betonblk.git"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"type": "commonjs",
|
|
"bugs": {
|
|
"url": "https://github.com/kev3109/betonblk/issues"
|
|
},
|
|
"homepage": "https://github.com/kev3109/betonblk#readme",
|
|
"dependencies": {
|
|
"@supabase/supabase-js": "^2.99.3",
|
|
"axios": "^1.13.6",
|
|
"dotenv": "^17.3.1",
|
|
"express": "^5.2.1",
|
|
"ioredis": "^5.10.1",
|
|
"postgres": "^3.4.8",
|
|
"stripe": "^20.4.1"
|
|
},
|
|
"devDependencies": {
|
|
"jest": "^30.3.0",
|
|
"supertest": "^7.2.2"
|
|
}
|
|
}
|