Initial Commit

This commit is contained in:
2026-05-27 23:29:53 +01:00
commit fbc70f96e6
10000 changed files with 1102152 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
# Tasks — `@suaveplan/sms` enterprise migration
## 1. Package scaffold
- [ ] Create `packages/communication/messaging/sms/` with `package.json`, `tsconfig.lib.json`, `vite.config.ts`, `README.md`.
- [ ] Add deps: `@suaveplan/error`, `@suaveplan/events`, `@suaveplan/types`, `@opentelemetry/api`, `tslib`, `zod`; devdeps: `@suaveplan/testing`, `@opentelemetry/sdk-metrics`, `@vitest/coverage-istanbul`, `vitest`, `vite`, `vite-plugin-dts`, `typescript`.
- [ ] Subpath exports for every feature module + `./types`, `./routes/problem-json`.
## 2. Error codes
- [ ] `error-codes/error-codes.ts` — `defineCodes("SMS", [...])` with 13 codes, typed `SmsError` base, 12 leaf classes.
- [ ] `error-codes/error-codes.test.ts` — registry sort assertion + reachability test (every code raised from a real call site).
- [ ] `error-codes/error-codes.md`.
## 3. Legacy compatibility
- [ ] `legacy-errors/legacy-errors.ts` — back-compat `SmsError` class with the upstream `SmsErrorCode` union + factories (`invalidPhoneNumber`, `sendFailed`, `templateNotFound`, `recipientOptedOut`, `providerNotConfigured`).
- [ ] `legacy-errors/legacy-errors.test.ts`.
- [ ] `legacy-metadata/legacy-metadata.ts` — `SMS_ERROR_METADATA` + `registerSmsErrorCodes()` + `SmsRegisteredErrorCode`; eager-register on import.
- [ ] `legacy-metadata/legacy-metadata.test.ts`.
## 4. Types + schemas
- [ ] `types/sms.types.ts` — `SmsDeliveryStatus`, `SmsMessage`, `SmsDeliveryReport`, `SmsProvider`, `OptOutEntry`, `SmsTemplate`, `SmsEventMap`, `SmsServiceOptions`, `ScheduledMessage`, `ScheduleHandle`.
- [ ] `schemas/schemas.ts` — Zod for `SmsMessage`, `SmsTemplate`, `SmsDeliveryReport`, `SmsServiceOptions`; `parseSmsMessage` / `parseSmsTemplate` throw `SmsInvalidConfigError`.
## 5. Pipeline primitives
- [ ] `validation/phone.ts` — `isValidE164`.
- [ ] `templates/templates.ts` — `TemplateRegistry`, `renderTemplate(template, vars, defaults?)`.
- [ ] `opt-out/opt-out.ts` — `OptOutRegistry` (set/clear/check/bulk).
- [ ] `rate-limiter/rate-limiter.ts` — `RateLimiter` token-bucket with injectable `Clock`.
- [ ] `retry/retry.ts` — `RetryPolicy` exponential w/ jitter, abort-aware.
- [ ] `scheduler/scheduler.ts` — `MessageScheduler` with injectable `Timers`.
- [ ] `delivery-tracker/delivery-tracker.ts` — bounded LRU receipt cache.
## 6. In-memory provider
- [ ] `in-memory-provider/in-memory-provider.ts` — `InMemorySmsProvider` implementing `SmsProvider`; records sent messages, configurable per-send outcome (queued/sent/delivered/failed/undelivered), supports `simulateFailure`, supports `advance` for delivery state transitions.
## 7. OTel
- [ ] `otel/metrics.ts` — counters `sms.sent_total`, `sms.failed_total`, `sms.retry_total`; histogram `sms.send_duration_ms`; `refreshSmsMeters()`.
## 8. Service orchestrator
- [ ] `service/sms-service.ts` — `SmsService` extends/wraps `EventBus<SmsEventMap>`; constructor accepts `SmsServiceOptions` (Zod-validated); legacy `on/off/emit` mirrors against the bus; integrates rate-limiter + retry + scheduler + delivery-tracker; honours `AbortSignal`.
- [ ] `service/sms-service.test.ts` — full pipeline tests against `InMemorySmsProvider`.
## 9. Hono helper
- [ ] `routes/problem-json.ts` — `respondProblemJson` + `PROBLEM_JSON_CONTENT_TYPE`, mapping `SuaveplanError` / `HttpError` / unknown → problem+json.
## 10. Index barrel + sibling docs
- [ ] `src/index.ts` — explicit named re-exports of every public symbol.
- [ ] Sibling `.md` per `.ts` (≥200 words, 6 sections).
- [ ] Package-root `README.md` with quick start, modules table, install.
## 11. Verification
- [ ] `bunx turbo lint typecheck test build --filter=@suaveplan/sms` green.
- [ ] `bunx turbo test:coverage --filter=@suaveplan/sms` ≥ 100/100/100/100.
- [ ] Banned-pattern scan zero output (`TODO`, `FIXME`, `ts-ignore`, `.skip`, `.only`, `any`, `biome-ignore`).
- [ ] Test-runner-import scan zero output (`from "vitest"|"bun:test"`).
- [ ] All sibling `.md` present; `README.md` present.
## 12. Manifest + STATUS
- [ ] `bun scripts/folder-reorg/generate-manifest.ts` to refresh `MANIFEST.md`.
- [ ] STATUS.md: flip `@suaveplan/sms` `–` → `✅`, decrement Pending, increment Migrated.
## 13. Spec finalisation
- [ ] Fold `specs/sms/spec.md` into `openspec/specs/sms/spec.md`.
- [ ] Move change folder to `openspec/archive/2026-05-25-enterprise-sms/`.