4.3 KiB
4.3 KiB
Tasks — @suaveplan/sms enterprise migration
1. Package scaffold
- Create
packages/communication/messaging/sms/withpackage.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, typedSmsErrorbase, 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-compatSmsErrorclass with the upstreamSmsErrorCodeunion + 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 forSmsMessage,SmsTemplate,SmsDeliveryReport,SmsServiceOptions;parseSmsMessage/parseSmsTemplatethrowSmsInvalidConfigError.
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—RateLimitertoken-bucket with injectableClock.retry/retry.ts—RetryPolicyexponential w/ jitter, abort-aware.scheduler/scheduler.ts—MessageSchedulerwith injectableTimers.delivery-tracker/delivery-tracker.ts— bounded LRU receipt cache.
6. In-memory provider
in-memory-provider/in-memory-provider.ts—InMemorySmsProviderimplementingSmsProvider; records sent messages, configurable per-send outcome (queued/sent/delivered/failed/undelivered), supportssimulateFailure, supportsadvancefor delivery state transitions.
7. OTel
otel/metrics.ts— counterssms.sent_total,sms.failed_total,sms.retry_total; histogramsms.send_duration_ms;refreshSmsMeters().
8. Service orchestrator
service/sms-service.ts—SmsServiceextends/wrapsEventBus<SmsEventMap>; constructor acceptsSmsServiceOptions(Zod-validated); legacyon/off/emitmirrors against the bus; integrates rate-limiter + retry + scheduler + delivery-tracker; honoursAbortSignal.service/sms-service.test.ts— full pipeline tests againstInMemorySmsProvider.
9. Hono helper
routes/problem-json.ts—respondProblemJson+PROBLEM_JSON_CONTENT_TYPE, mappingSuaveplanError/HttpError/ unknown → problem+json.
10. Index barrel + sibling docs
src/index.ts— explicit named re-exports of every public symbol.- Sibling
.mdper.ts(≥200 words, 6 sections). - Package-root
README.mdwith quick start, modules table, install.
11. Verification
bunx turbo lint typecheck test build --filter=@suaveplan/smsgreen.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
.mdpresent;README.mdpresent.
12. Manifest + STATUS
bun scripts/folder-reorg/generate-manifest.tsto refreshMANIFEST.md.- STATUS.md: flip
@suaveplan/sms–→✅, decrement Pending, increment Migrated.
13. Spec finalisation
- Fold
specs/sms/spec.mdintoopenspec/specs/sms/spec.md. - Move change folder to
openspec/archive/2026-05-25-enterprise-sms/.