SMS Orchestrator — Local Dev Setup
Status: populated Owner: Platform Engineering Last updated: 2026-04-18
1. docker-compose
From repo root (application monorepo): docker compose -f docker-compose.dev.yml up -d postgres redis nats kong.
Relevant services:
postgres:16withorchschema auto-createdredis:7-alpinenats:2.10-alpineJetStream enabledkong:3.7DB-less, mountsops/kong/kong.yaml
2. Environment
Copy .env.example → .env:
PORT=3010
DATABASE_URL=postgresql://orch:orch@localhost:5432/ghasi_sms?schema=orch
REDIS_URL=redis://localhost:6379/1
NATS_URL=nats://localhost:4222
ROUTING_ENGINE_GRPC=localhost:50051
IDEMPOTENCY_TTL_SECONDS=172800
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
LOG_LEVEL=debug
3. Install + migrate
pnpm install
pnpm --filter @ghasi/service-sms-orchestrator prisma migrate dev
pnpm --filter @ghasi/service-sms-orchestrator prisma db seed
pnpm --filter @ghasi/service-sms-orchestrator dev
4. Smoke test
Via Kong (local):
curl -X POST http://localhost:8000/v1/sms/send \
-H "Authorization: Bearer $(./scripts/dev/mint-jwt.sh)" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"to": "+447700900123",
"from": "+447700900999",
"body": "hello from local",
"messageType": "SMS"
}'
Direct (bypass Kong):
curl -X POST http://localhost:3010/v1/sms/send -H "X-Tenant-Id: 550e8400-..." -H "X-Account-Id: ..." ...
5. Seed data
prisma/seed.ts creates:
- 1 tenant, 1 account, 1 API key (for Kong)
- Routing-engine stub returns operator
op-dev-001 - NATS streams:
SMS_OUTBOUND,SMPP_OUTBOUND,SMS_EVENTS,SMS_RETRY,SMS_DLQ
6. Common commands
pnpm lint
pnpm typecheck
pnpm test # unit
pnpm test:int # testcontainers
pnpm test:e2e # requires Kong up
pnpm prisma studio