Working multi-tenant SaaS control plane for Eon Chat, with a native Node HTTP server, browser UI, execution worker, Stripe wiring, and provider-account orchestration.
This service is the future home for:
- tenant-aware auth
- tenant and workspace management
- Stripe tenant billing
- provider account configuration
- run orchestration and execution
- audit logs
- browser-based operator and tenant UI
cp .env.example .env
npm install
docker compose up -d postgres
npm run migrate
npm start
npm run worker
npm run email-workerThen open http://localhost:4080.
Current live Stripe account: Orbita (acct_1T4qRjLHsKvnkVcs)
- Starter product:
prod_UOymG6XAaHji2e - Starter monthly price:
price_1TQApNLHsKvnkVcsUljPhNsd(USD 0/month) - Pro product:
prod_ULvsQ2UlbASAvP - Pro monthly price:
price_1TNE0MLHsKvnkVcsM8eimsCT(USD 9/month) - Enterprise product:
prod_UOymoyqLRQRD09 - Enterprise price: none, handled as custom evaluation
Use .env.live.example as the baseline for production wiring.
GET /healthGET /v1/contextPOST /v1/auth/signupPOST /v1/auth/signinPOST /v1/auth/signoutPOST /v1/auth/request-email-verificationPOST /v1/auth/verify-emailPOST /v1/tenants/bootstrapGET /v1/tenants/meGET /v1/workspacesGET /v1/membersPOST /v1/members/invitesPOST /v1/members/accept-inviteGET /v1/billing/summaryGET /v1/billing/healthPOST /v1/billing/checkoutPOST /v1/billing/portalPOST /v1/billing/webhookGET /v1/enterprise-evaluationsPOST /v1/enterprise-evaluationsPATCH /v1/enterprise-evaluations/:evaluationIdGET /v1/providers/catalogGET /v1/ops/queue-healthPOST /v1/ops/retry-emailPOST /v1/ops/requeue-runGET /v1/provider-accountsPOST /v1/provider-accountsGET /v1/chat/sessionsPOST /v1/chat/sessionsGET /v1/chat/sessions/:sessionId/messagesGET /v1/chat/sessions/:sessionId/runsGET /v1/chat/sessions/:sessionId/runs/:runId/eventsPOST /v1/chat/sessions/:sessionId/runs
- Node-native HTTP server in
src/server.js - static browser client in
public/ - queue worker in
scripts/worker.js - email outbox worker in
scripts/email-worker.js - runtime directories written under
runtime/ - queue health panel for runs and emails via
src/services/ops-service.js - safe retry/requeue controls for failed emails and runs with audit log writes
byok: tenant stores its own secret, encrypted locallyplatform_managed: the control plane usesPLATFORM_MANAGED_OPENAI_API_KEYorPLATFORM_MANAGED_ANTHROPIC_API_KEY
- sensitive write actions now require a verified email, but read-only browsing still works for signed-in users
- real successful provider execution still depends on valid upstream credentials being configured
- Stripe is fully wired in code, but live/test checkout still depends on real secret keys, webhook secret, and price IDs
- email verification and invite delivery now have an
email_outboxworker, but delivery is still localconsole/artifact based until an SMTP or API provider is plugged in - secrets are encrypted locally with an app key, but not yet backed by KMS/HSM
- there is no websocket/SSE stream yet; the UI currently polls runs, messages, and run events