@baruk/core 0.3.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.baruk-provenance.json +10 -0
- package/CHANGELOG.md +97 -0
- package/README.md +9 -2
- package/dist/auth/password-reset.d.ts +30 -1
- package/dist/auth/password-reset.d.ts.map +1 -1
- package/dist/auth/password-reset.js +139 -11
- package/dist/auth/password-reset.js.map +1 -1
- package/dist/auth/service.d.ts +39 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +75 -10
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +334 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +707 -0
- package/dist/billing/ar-repository.js.map +1 -0
- package/dist/billing/auto-generation.d.ts +87 -0
- package/dist/billing/auto-generation.d.ts.map +1 -0
- package/dist/billing/auto-generation.js +181 -0
- package/dist/billing/auto-generation.js.map +1 -0
- package/dist/billing/live-guard.d.ts +64 -0
- package/dist/billing/live-guard.d.ts.map +1 -0
- package/dist/billing/live-guard.js +68 -0
- package/dist/billing/live-guard.js.map +1 -0
- package/dist/billing/payment-means-catalog.d.ts +17 -0
- package/dist/billing/payment-means-catalog.d.ts.map +1 -0
- package/dist/billing/payment-means-catalog.js +21 -0
- package/dist/billing/payment-means-catalog.js.map +1 -0
- package/dist/billing/payment-means.d.ts +38 -0
- package/dist/billing/payment-means.d.ts.map +1 -0
- package/dist/billing/payment-means.js +29 -0
- package/dist/billing/payment-means.js.map +1 -0
- package/dist/billing/payment-rail.d.ts +118 -0
- package/dist/billing/payment-rail.d.ts.map +1 -0
- package/dist/billing/payment-rail.js +295 -0
- package/dist/billing/payment-rail.js.map +1 -0
- package/dist/billing/provider/asaas.d.ts +46 -1
- package/dist/billing/provider/asaas.d.ts.map +1 -1
- package/dist/billing/provider/asaas.js +194 -14
- package/dist/billing/provider/asaas.js.map +1 -1
- package/dist/billing/provider/manual.js +1 -1
- package/dist/billing/provider/manual.js.map +1 -1
- package/dist/billing/provider/types.d.ts +115 -8
- package/dist/billing/provider/types.d.ts.map +1 -1
- package/dist/billing/provider-account.d.ts +89 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +161 -0
- package/dist/billing/provider-account.js.map +1 -0
- package/dist/billing/provider-onboarding.d.ts +67 -0
- package/dist/billing/provider-onboarding.d.ts.map +1 -0
- package/dist/billing/provider-onboarding.js +234 -0
- package/dist/billing/provider-onboarding.js.map +1 -0
- package/dist/billing/receivable.d.ts +5 -1
- package/dist/billing/receivable.d.ts.map +1 -1
- package/dist/billing/reconcile.d.ts +58 -0
- package/dist/billing/reconcile.d.ts.map +1 -0
- package/dist/billing/reconcile.js +138 -0
- package/dist/billing/reconcile.js.map +1 -0
- package/dist/billing/repository.d.ts +90 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +148 -19
- package/dist/billing/repository.js.map +1 -1
- package/dist/cjs/auth/password-reset.js +141 -11
- package/dist/cjs/auth/password-reset.js.map +1 -1
- package/dist/cjs/auth/service.js +75 -9
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +728 -0
- package/dist/cjs/billing/ar-repository.js.map +1 -0
- package/dist/cjs/billing/auto-generation.js +186 -0
- package/dist/cjs/billing/auto-generation.js.map +1 -0
- package/dist/cjs/billing/live-guard.js +72 -0
- package/dist/cjs/billing/live-guard.js.map +1 -0
- package/dist/cjs/billing/payment-means-catalog.js +25 -0
- package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
- package/dist/cjs/billing/payment-means.js +33 -0
- package/dist/cjs/billing/payment-means.js.map +1 -0
- package/dist/cjs/billing/payment-rail.js +301 -0
- package/dist/cjs/billing/payment-rail.js.map +1 -0
- package/dist/cjs/billing/provider/asaas.js +194 -14
- package/dist/cjs/billing/provider/asaas.js.map +1 -1
- package/dist/cjs/billing/provider/manual.js +1 -1
- package/dist/cjs/billing/provider/manual.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +170 -0
- package/dist/cjs/billing/provider-account.js.map +1 -0
- package/dist/cjs/billing/provider-onboarding.js +239 -0
- package/dist/cjs/billing/provider-onboarding.js.map +1 -0
- package/dist/cjs/billing/reconcile.js +143 -0
- package/dist/cjs/billing/reconcile.js.map +1 -0
- package/dist/cjs/billing/repository.js +150 -18
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/repository.js +96 -20
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +140 -0
- package/dist/cjs/collection/branding.js.map +1 -0
- package/dist/cjs/collection/channel-accounts.js +137 -0
- package/dist/cjs/collection/channel-accounts.js.map +1 -0
- package/dist/cjs/collection/channel.js +17 -0
- package/dist/cjs/collection/channel.js.map +1 -0
- package/dist/cjs/collection/communication-bridge.js +140 -0
- package/dist/cjs/collection/communication-bridge.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +193 -0
- package/dist/cjs/collection/communication-runtime.js.map +1 -0
- package/dist/cjs/collection/consent-repository.js +84 -0
- package/dist/cjs/collection/consent-repository.js.map +1 -0
- package/dist/cjs/collection/copy.js +125 -0
- package/dist/cjs/collection/copy.js.map +1 -0
- package/dist/cjs/collection/delivery-callback.js +151 -0
- package/dist/cjs/collection/delivery-callback.js.map +1 -0
- package/dist/cjs/collection/email-layout.js +252 -0
- package/dist/cjs/collection/email-layout.js.map +1 -0
- package/dist/cjs/collection/engine.js +414 -0
- package/dist/cjs/collection/engine.js.map +1 -0
- package/dist/cjs/collection/format.js +76 -0
- package/dist/cjs/collection/format.js.map +1 -0
- package/dist/cjs/collection/payment-block.js +3 -0
- package/dist/cjs/collection/payment-block.js.map +1 -0
- package/dist/cjs/collection/policy.js +147 -0
- package/dist/cjs/collection/policy.js.map +1 -0
- package/dist/cjs/collection/repository.js +260 -0
- package/dist/cjs/collection/repository.js.map +1 -0
- package/dist/cjs/collection/subject.js +104 -0
- package/dist/cjs/collection/subject.js.map +1 -0
- package/dist/cjs/collection/template-catalog.js +165 -0
- package/dist/cjs/collection/template-catalog.js.map +1 -0
- package/dist/cjs/collection/template.js +78 -0
- package/dist/cjs/collection/template.js.map +1 -0
- package/dist/cjs/communication/adapters/email.js +132 -0
- package/dist/cjs/communication/adapters/email.js.map +1 -0
- package/dist/cjs/communication/adapters/sms.js +127 -0
- package/dist/cjs/communication/adapters/sms.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp.js +213 -0
- package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
- package/dist/cjs/communication/audit.js +61 -0
- package/dist/cjs/communication/audit.js.map +1 -0
- package/dist/cjs/communication/capabilities.js +76 -0
- package/dist/cjs/communication/capabilities.js.map +1 -0
- package/dist/cjs/communication/channel.js +53 -0
- package/dist/cjs/communication/channel.js.map +1 -0
- package/dist/cjs/communication/claim.js +228 -0
- package/dist/cjs/communication/claim.js.map +1 -0
- package/dist/cjs/communication/consent.js +43 -0
- package/dist/cjs/communication/consent.js.map +1 -0
- package/dist/cjs/communication/context.js +45 -0
- package/dist/cjs/communication/context.js.map +1 -0
- package/dist/cjs/communication/credentials.js +121 -0
- package/dist/cjs/communication/credentials.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +161 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
- package/dist/cjs/communication/dry-run.js +97 -0
- package/dist/cjs/communication/dry-run.js.map +1 -0
- package/dist/cjs/communication/engine.js +483 -0
- package/dist/cjs/communication/engine.js.map +1 -0
- package/dist/cjs/communication/graph.js +50 -0
- package/dist/cjs/communication/graph.js.map +1 -0
- package/dist/cjs/communication/idempotency.js +26 -0
- package/dist/cjs/communication/idempotency.js.map +1 -0
- package/dist/cjs/communication/identity.js +110 -0
- package/dist/cjs/communication/identity.js.map +1 -0
- package/dist/cjs/communication/index.js +135 -0
- package/dist/cjs/communication/index.js.map +1 -0
- package/dist/cjs/communication/onboarding.js +297 -0
- package/dist/cjs/communication/onboarding.js.map +1 -0
- package/dist/cjs/communication/policy.js +16 -0
- package/dist/cjs/communication/policy.js.map +1 -0
- package/dist/cjs/communication/routing.js +77 -0
- package/dist/cjs/communication/routing.js.map +1 -0
- package/dist/cjs/communication/sender-profile.js +128 -0
- package/dist/cjs/communication/sender-profile.js.map +1 -0
- package/dist/cjs/communication/status.js +86 -0
- package/dist/cjs/communication/status.js.map +1 -0
- package/dist/cjs/communication/stores/onboarding.js +135 -0
- package/dist/cjs/communication/stores/onboarding.js.map +1 -0
- package/dist/cjs/communication/stores/postgres.js +458 -0
- package/dist/cjs/communication/stores/postgres.js.map +1 -0
- package/dist/cjs/communication/stores/routing.js +334 -0
- package/dist/cjs/communication/stores/routing.js.map +1 -0
- package/dist/cjs/communication/stores/secrets.js +126 -0
- package/dist/cjs/communication/stores/secrets.js.map +1 -0
- package/dist/cjs/communication/template-provider.js +22 -0
- package/dist/cjs/communication/template-provider.js.map +1 -0
- package/dist/cjs/communication/template.js +63 -0
- package/dist/cjs/communication/template.js.map +1 -0
- package/dist/cjs/communication/webhook-subscription.js +258 -0
- package/dist/cjs/communication/webhook-subscription.js.map +1 -0
- package/dist/cjs/communication/webhook.js +292 -0
- package/dist/cjs/communication/webhook.js.map +1 -0
- package/dist/cjs/competence/repository.js +309 -0
- package/dist/cjs/competence/repository.js.map +1 -0
- package/dist/cjs/contacts/phone.js +192 -0
- package/dist/cjs/contacts/phone.js.map +1 -0
- package/dist/cjs/db/seed-catalog.js +48 -0
- package/dist/cjs/db/seed-catalog.js.map +1 -0
- package/dist/cjs/db/seed.js +15 -7
- package/dist/cjs/db/seed.js.map +1 -1
- package/dist/cjs/documents/repository.js +244 -0
- package/dist/cjs/documents/repository.js.map +1 -0
- package/dist/cjs/documents/requests.js +136 -0
- package/dist/cjs/documents/requests.js.map +1 -0
- package/dist/cjs/index.js +427 -48
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/company.js +36 -0
- package/dist/cjs/legal/company.js.map +1 -0
- package/dist/cjs/legal/documents.js +671 -0
- package/dist/cjs/legal/documents.js.map +1 -0
- package/dist/cjs/legal/index.js +15 -0
- package/dist/cjs/legal/index.js.map +1 -0
- package/dist/cjs/legal/types.js +34 -0
- package/dist/cjs/legal/types.js.map +1 -0
- package/dist/cjs/mail/auth-templates.js +29 -0
- package/dist/cjs/mail/auth-templates.js.map +1 -0
- package/dist/cjs/mail/dedup-store.js +12 -51
- package/dist/cjs/mail/dedup-store.js.map +1 -1
- package/dist/cjs/mail/index.js +16 -4
- package/dist/cjs/mail/index.js.map +1 -1
- package/dist/cjs/mail/provider.js +12 -247
- package/dist/cjs/mail/provider.js.map +1 -1
- package/dist/cjs/mail/resend.js +14 -18
- package/dist/cjs/mail/resend.js.map +1 -1
- package/dist/cjs/mail/sender-resolver.js +12 -11
- package/dist/cjs/mail/sender-resolver.js.map +1 -1
- package/dist/cjs/mail/template-renderer.js +11 -16
- package/dist/cjs/mail/template-renderer.js.map +1 -1
- package/dist/cjs/mail/transactional-outbound.js +117 -0
- package/dist/cjs/mail/transactional-outbound.js.map +1 -0
- package/dist/cjs/mail/types.js +8 -35
- package/dist/cjs/mail/types.js.map +1 -1
- package/dist/cjs/portal/provisioning.js +144 -0
- package/dist/cjs/portal/provisioning.js.map +1 -0
- package/dist/cjs/pricing-engine/canonical.js +42 -0
- package/dist/cjs/pricing-engine/canonical.js.map +1 -0
- package/dist/cjs/pricing-engine/errors.js +6 -1
- package/dist/cjs/pricing-engine/errors.js.map +1 -1
- package/dist/cjs/pricing-engine/index.js +12 -1
- package/dist/cjs/pricing-engine/index.js.map +1 -1
- package/dist/cjs/pricing-engine/pipeline.js +200 -26
- package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
- package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
- package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
- package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
- package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/cjs/rbac/authorize.js +28 -0
- package/dist/cjs/rbac/authorize.js.map +1 -1
- package/dist/cjs/rbac/catalog.js +67 -1
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/rbac/workload-provisioning.js +160 -0
- package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
- package/dist/cjs/rbac/workload.js +191 -0
- package/dist/cjs/rbac/workload.js.map +1 -0
- package/dist/cjs/storage/checksum.js +15 -0
- package/dist/cjs/storage/checksum.js.map +1 -0
- package/dist/cjs/storage/key.js +72 -0
- package/dist/cjs/storage/key.js.map +1 -0
- package/dist/cjs/storage/local.js +100 -0
- package/dist/cjs/storage/local.js.map +1 -0
- package/dist/cjs/storage/r2.js +181 -0
- package/dist/cjs/storage/r2.js.map +1 -0
- package/dist/cjs/storage/registry.js +41 -0
- package/dist/cjs/storage/registry.js.map +1 -0
- package/dist/cjs/storage/types.js +50 -0
- package/dist/cjs/storage/types.js.map +1 -0
- package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
- package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
- package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/registry.js +17 -0
- package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
- package/dist/cjs/subscription-billing/service.js +57 -8
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.js.map +1 -1
- package/dist/cjs/tenancy/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/users/repository.js +119 -2
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +81 -0
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/repository.d.ts +42 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +94 -21
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +72 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +136 -0
- package/dist/collection/branding.js.map +1 -0
- package/dist/collection/channel-accounts.d.ts +57 -0
- package/dist/collection/channel-accounts.d.ts.map +1 -0
- package/dist/collection/channel-accounts.js +133 -0
- package/dist/collection/channel-accounts.js.map +1 -0
- package/dist/collection/channel.d.ts +24 -0
- package/dist/collection/channel.d.ts.map +1 -0
- package/dist/collection/channel.js +16 -0
- package/dist/collection/channel.js.map +1 -0
- package/dist/collection/communication-bridge.d.ts +66 -0
- package/dist/collection/communication-bridge.d.ts.map +1 -0
- package/dist/collection/communication-bridge.js +134 -0
- package/dist/collection/communication-bridge.js.map +1 -0
- package/dist/collection/communication-runtime.d.ts +95 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +187 -0
- package/dist/collection/communication-runtime.js.map +1 -0
- package/dist/collection/consent-repository.d.ts +32 -0
- package/dist/collection/consent-repository.d.ts.map +1 -0
- package/dist/collection/consent-repository.js +79 -0
- package/dist/collection/consent-repository.js.map +1 -0
- package/dist/collection/copy.d.ts +50 -0
- package/dist/collection/copy.d.ts.map +1 -0
- package/dist/collection/copy.js +122 -0
- package/dist/collection/copy.js.map +1 -0
- package/dist/collection/delivery-callback.d.ts +49 -0
- package/dist/collection/delivery-callback.d.ts.map +1 -0
- package/dist/collection/delivery-callback.js +147 -0
- package/dist/collection/delivery-callback.js.map +1 -0
- package/dist/collection/email-layout.d.ts +45 -0
- package/dist/collection/email-layout.d.ts.map +1 -0
- package/dist/collection/email-layout.js +247 -0
- package/dist/collection/email-layout.js.map +1 -0
- package/dist/collection/engine.d.ts +177 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +407 -0
- package/dist/collection/engine.js.map +1 -0
- package/dist/collection/format.d.ts +32 -0
- package/dist/collection/format.d.ts.map +1 -0
- package/dist/collection/format.js +70 -0
- package/dist/collection/format.js.map +1 -0
- package/dist/collection/payment-block.d.ts +24 -0
- package/dist/collection/payment-block.d.ts.map +1 -0
- package/dist/collection/payment-block.js +2 -0
- package/dist/collection/payment-block.js.map +1 -0
- package/dist/collection/policy.d.ts +53 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +141 -0
- package/dist/collection/policy.js.map +1 -0
- package/dist/collection/repository.d.ts +129 -0
- package/dist/collection/repository.d.ts.map +1 -0
- package/dist/collection/repository.js +246 -0
- package/dist/collection/repository.js.map +1 -0
- package/dist/collection/subject.d.ts +66 -0
- package/dist/collection/subject.d.ts.map +1 -0
- package/dist/collection/subject.js +99 -0
- package/dist/collection/subject.js.map +1 -0
- package/dist/collection/template-catalog.d.ts +16 -0
- package/dist/collection/template-catalog.d.ts.map +1 -0
- package/dist/collection/template-catalog.js +162 -0
- package/dist/collection/template-catalog.js.map +1 -0
- package/dist/collection/template.d.ts +37 -0
- package/dist/collection/template.d.ts.map +1 -0
- package/dist/collection/template.js +73 -0
- package/dist/collection/template.js.map +1 -0
- package/dist/communication/adapters/email.d.ts +28 -0
- package/dist/communication/adapters/email.d.ts.map +1 -0
- package/dist/communication/adapters/email.js +129 -0
- package/dist/communication/adapters/email.js.map +1 -0
- package/dist/communication/adapters/sms.d.ts +95 -0
- package/dist/communication/adapters/sms.d.ts.map +1 -0
- package/dist/communication/adapters/sms.js +121 -0
- package/dist/communication/adapters/sms.js.map +1 -0
- package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
- package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-language.js +36 -0
- package/dist/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.js +97 -0
- package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/communication/adapters/whatsapp.d.ts +29 -0
- package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp.js +210 -0
- package/dist/communication/adapters/whatsapp.js.map +1 -0
- package/dist/communication/audit.d.ts +105 -0
- package/dist/communication/audit.d.ts.map +1 -0
- package/dist/communication/audit.js +56 -0
- package/dist/communication/audit.js.map +1 -0
- package/dist/communication/capabilities.d.ts +88 -0
- package/dist/communication/capabilities.d.ts.map +1 -0
- package/dist/communication/capabilities.js +72 -0
- package/dist/communication/capabilities.js.map +1 -0
- package/dist/communication/channel.d.ts +125 -0
- package/dist/communication/channel.d.ts.map +1 -0
- package/dist/communication/channel.js +47 -0
- package/dist/communication/channel.js.map +1 -0
- package/dist/communication/claim.d.ts +368 -0
- package/dist/communication/claim.d.ts.map +1 -0
- package/dist/communication/claim.js +224 -0
- package/dist/communication/claim.js.map +1 -0
- package/dist/communication/consent.d.ts +65 -0
- package/dist/communication/consent.d.ts.map +1 -0
- package/dist/communication/consent.js +40 -0
- package/dist/communication/consent.js.map +1 -0
- package/dist/communication/context.d.ts +48 -0
- package/dist/communication/context.d.ts.map +1 -0
- package/dist/communication/context.js +41 -0
- package/dist/communication/context.js.map +1 -0
- package/dist/communication/credentials.d.ts +74 -0
- package/dist/communication/credentials.d.ts.map +1 -0
- package/dist/communication/credentials.js +115 -0
- package/dist/communication/credentials.js.map +1 -0
- package/dist/communication/dry-run-scenario.d.ts +37 -0
- package/dist/communication/dry-run-scenario.d.ts.map +1 -0
- package/dist/communication/dry-run-scenario.js +158 -0
- package/dist/communication/dry-run-scenario.js.map +1 -0
- package/dist/communication/dry-run.d.ts +40 -0
- package/dist/communication/dry-run.d.ts.map +1 -0
- package/dist/communication/dry-run.js +92 -0
- package/dist/communication/dry-run.js.map +1 -0
- package/dist/communication/engine.d.ts +153 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +480 -0
- package/dist/communication/engine.js.map +1 -0
- package/dist/communication/graph.d.ts +38 -0
- package/dist/communication/graph.d.ts.map +1 -0
- package/dist/communication/graph.js +45 -0
- package/dist/communication/graph.js.map +1 -0
- package/dist/communication/idempotency.d.ts +33 -0
- package/dist/communication/idempotency.d.ts.map +1 -0
- package/dist/communication/idempotency.js +23 -0
- package/dist/communication/idempotency.js.map +1 -0
- package/dist/communication/identity.d.ts +127 -0
- package/dist/communication/identity.d.ts.map +1 -0
- package/dist/communication/identity.js +105 -0
- package/dist/communication/identity.js.map +1 -0
- package/dist/communication/index.d.ts +66 -0
- package/dist/communication/index.d.ts.map +1 -0
- package/dist/communication/index.js +42 -0
- package/dist/communication/index.js.map +1 -0
- package/dist/communication/onboarding.d.ts +223 -0
- package/dist/communication/onboarding.d.ts.map +1 -0
- package/dist/communication/onboarding.js +287 -0
- package/dist/communication/onboarding.js.map +1 -0
- package/dist/communication/policy.d.ts +99 -0
- package/dist/communication/policy.d.ts.map +1 -0
- package/dist/communication/policy.js +13 -0
- package/dist/communication/policy.js.map +1 -0
- package/dist/communication/routing.d.ts +99 -0
- package/dist/communication/routing.d.ts.map +1 -0
- package/dist/communication/routing.js +73 -0
- package/dist/communication/routing.js.map +1 -0
- package/dist/communication/sender-profile.d.ts +100 -0
- package/dist/communication/sender-profile.d.ts.map +1 -0
- package/dist/communication/sender-profile.js +123 -0
- package/dist/communication/sender-profile.js.map +1 -0
- package/dist/communication/status.d.ts +48 -0
- package/dist/communication/status.d.ts.map +1 -0
- package/dist/communication/status.js +79 -0
- package/dist/communication/status.js.map +1 -0
- package/dist/communication/stores/onboarding.d.ts +88 -0
- package/dist/communication/stores/onboarding.d.ts.map +1 -0
- package/dist/communication/stores/onboarding.js +127 -0
- package/dist/communication/stores/onboarding.js.map +1 -0
- package/dist/communication/stores/postgres.d.ts +81 -0
- package/dist/communication/stores/postgres.d.ts.map +1 -0
- package/dist/communication/stores/postgres.js +453 -0
- package/dist/communication/stores/postgres.js.map +1 -0
- package/dist/communication/stores/routing.d.ts +169 -0
- package/dist/communication/stores/routing.d.ts.map +1 -0
- package/dist/communication/stores/routing.js +324 -0
- package/dist/communication/stores/routing.js.map +1 -0
- package/dist/communication/stores/secrets.d.ts +89 -0
- package/dist/communication/stores/secrets.d.ts.map +1 -0
- package/dist/communication/stores/secrets.js +122 -0
- package/dist/communication/stores/secrets.js.map +1 -0
- package/dist/communication/template-provider.d.ts +85 -0
- package/dist/communication/template-provider.d.ts.map +1 -0
- package/dist/communication/template-provider.js +21 -0
- package/dist/communication/template-provider.js.map +1 -0
- package/dist/communication/template.d.ts +87 -0
- package/dist/communication/template.d.ts.map +1 -0
- package/dist/communication/template.js +59 -0
- package/dist/communication/template.js.map +1 -0
- package/dist/communication/webhook-subscription.d.ts +156 -0
- package/dist/communication/webhook-subscription.d.ts.map +1 -0
- package/dist/communication/webhook-subscription.js +252 -0
- package/dist/communication/webhook-subscription.js.map +1 -0
- package/dist/communication/webhook.d.ts +121 -0
- package/dist/communication/webhook.d.ts.map +1 -0
- package/dist/communication/webhook.js +283 -0
- package/dist/communication/webhook.js.map +1 -0
- package/dist/competence/repository.d.ts +147 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +294 -0
- package/dist/competence/repository.js.map +1 -0
- package/dist/contacts/phone.d.ts +70 -0
- package/dist/contacts/phone.d.ts.map +1 -0
- package/dist/contacts/phone.js +186 -0
- package/dist/contacts/phone.js.map +1 -0
- package/dist/db/migrate.js +17 -11
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/seed-catalog.d.ts +18 -0
- package/dist/db/seed-catalog.d.ts.map +1 -0
- package/dist/db/seed-catalog.js +45 -0
- package/dist/db/seed-catalog.js.map +1 -0
- package/dist/db/seed.js +16 -8
- package/dist/db/seed.js.map +1 -1
- package/dist/documents/repository.d.ts +97 -0
- package/dist/documents/repository.d.ts.map +1 -0
- package/dist/documents/repository.js +236 -0
- package/dist/documents/repository.js.map +1 -0
- package/dist/documents/requests.d.ts +73 -0
- package/dist/documents/requests.d.ts.map +1 -0
- package/dist/documents/requests.js +127 -0
- package/dist/documents/requests.js.map +1 -0
- package/dist/index.d.ts +113 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -8
- package/dist/index.js.map +1 -1
- package/dist/legal/company.d.ts +32 -0
- package/dist/legal/company.d.ts.map +1 -0
- package/dist/legal/company.js +33 -0
- package/dist/legal/company.js.map +1 -0
- package/dist/legal/documents.d.ts +30 -0
- package/dist/legal/documents.d.ts.map +1 -0
- package/dist/legal/documents.js +666 -0
- package/dist/legal/documents.js.map +1 -0
- package/dist/legal/index.d.ts +5 -0
- package/dist/legal/index.d.ts.map +1 -0
- package/dist/legal/index.js +4 -0
- package/dist/legal/index.js.map +1 -0
- package/dist/legal/types.d.ts +145 -0
- package/dist/legal/types.d.ts.map +1 -0
- package/dist/legal/types.js +31 -0
- package/dist/legal/types.js.map +1 -0
- package/dist/mail/auth-templates.d.ts +15 -0
- package/dist/mail/auth-templates.d.ts.map +1 -0
- package/dist/mail/auth-templates.js +26 -0
- package/dist/mail/auth-templates.js.map +1 -0
- package/dist/mail/dedup-store.d.ts +1 -24
- package/dist/mail/dedup-store.d.ts.map +1 -1
- package/dist/mail/dedup-store.js +9 -48
- package/dist/mail/dedup-store.js.map +1 -1
- package/dist/mail/index.d.ts +2 -1
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +13 -2
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +2 -30
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/mail/provider.js +10 -246
- package/dist/mail/provider.js.map +1 -1
- package/dist/mail/resend.d.ts +2 -12
- package/dist/mail/resend.d.ts.map +1 -1
- package/dist/mail/resend.js +11 -17
- package/dist/mail/resend.js.map +1 -1
- package/dist/mail/sender-resolver.d.ts +1 -7
- package/dist/mail/sender-resolver.d.ts.map +1 -1
- package/dist/mail/sender-resolver.js +11 -10
- package/dist/mail/sender-resolver.js.map +1 -1
- package/dist/mail/template-renderer.d.ts +1 -9
- package/dist/mail/template-renderer.d.ts.map +1 -1
- package/dist/mail/template-renderer.js +10 -15
- package/dist/mail/template-renderer.js.map +1 -1
- package/dist/mail/transactional-outbound.d.ts +115 -0
- package/dist/mail/transactional-outbound.d.ts.map +1 -0
- package/dist/mail/transactional-outbound.js +113 -0
- package/dist/mail/transactional-outbound.js.map +1 -0
- package/dist/mail/types.d.ts +2 -142
- package/dist/mail/types.d.ts.map +1 -1
- package/dist/mail/types.js +1 -33
- package/dist/mail/types.js.map +1 -1
- package/dist/portal/provisioning.d.ts +58 -0
- package/dist/portal/provisioning.d.ts.map +1 -0
- package/dist/portal/provisioning.js +139 -0
- package/dist/portal/provisioning.js.map +1 -0
- package/dist/pricing-engine/canonical.d.ts +14 -0
- package/dist/pricing-engine/canonical.d.ts.map +1 -0
- package/dist/pricing-engine/canonical.js +39 -0
- package/dist/pricing-engine/canonical.js.map +1 -0
- package/dist/pricing-engine/errors.d.ts.map +1 -1
- package/dist/pricing-engine/errors.js +6 -1
- package/dist/pricing-engine/errors.js.map +1 -1
- package/dist/pricing-engine/index.d.ts +12 -2
- package/dist/pricing-engine/index.d.ts.map +1 -1
- package/dist/pricing-engine/index.js +6 -1
- package/dist/pricing-engine/index.js.map +1 -1
- package/dist/pricing-engine/pipeline.d.ts.map +1 -1
- package/dist/pricing-engine/pipeline.js +202 -28
- package/dist/pricing-engine/pipeline.js.map +1 -1
- package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
- package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-adapter.js +75 -0
- package/dist/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/pricing-engine/shadow-diff.d.ts +26 -0
- package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-diff.js +52 -0
- package/dist/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/pricing-engine/shadow-facade.d.ts +42 -0
- package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-facade.js +82 -0
- package/dist/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.js +18 -0
- package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
- package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-metrics.js +31 -0
- package/dist/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.js +39 -0
- package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/pricing-engine/types.d.ts +2 -0
- package/dist/pricing-engine/types.d.ts.map +1 -1
- package/dist/rbac/authorize.d.ts +12 -0
- package/dist/rbac/authorize.d.ts.map +1 -1
- package/dist/rbac/authorize.js +27 -0
- package/dist/rbac/authorize.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +67 -1
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/rbac/workload-provisioning.d.ts +66 -0
- package/dist/rbac/workload-provisioning.d.ts.map +1 -0
- package/dist/rbac/workload-provisioning.js +153 -0
- package/dist/rbac/workload-provisioning.js.map +1 -0
- package/dist/rbac/workload.d.ts +124 -0
- package/dist/rbac/workload.d.ts.map +1 -0
- package/dist/rbac/workload.js +184 -0
- package/dist/rbac/workload.js.map +1 -0
- package/dist/storage/checksum.d.ts +9 -0
- package/dist/storage/checksum.d.ts.map +1 -0
- package/dist/storage/checksum.js +12 -0
- package/dist/storage/checksum.js.map +1 -0
- package/dist/storage/key.d.ts +37 -0
- package/dist/storage/key.d.ts.map +1 -0
- package/dist/storage/key.js +67 -0
- package/dist/storage/key.js.map +1 -0
- package/dist/storage/local.d.ts +40 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +96 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/r2.d.ts +43 -0
- package/dist/storage/r2.d.ts.map +1 -0
- package/dist/storage/r2.js +177 -0
- package/dist/storage/r2.js.map +1 -0
- package/dist/storage/registry.d.ts +23 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +37 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/types.d.ts +67 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +45 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/subscription-billing/provider/asaas.d.ts +14 -0
- package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
- package/dist/subscription-billing/provider/asaas.js +32 -7
- package/dist/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/subscription-billing/provider/disabled.d.ts +9 -0
- package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
- package/dist/subscription-billing/provider/disabled.js +8 -0
- package/dist/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/subscription-billing/provider/registry.d.ts +10 -0
- package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
- package/dist/subscription-billing/provider/registry.js +17 -0
- package/dist/subscription-billing/provider/registry.js.map +1 -1
- package/dist/subscription-billing/service.d.ts +17 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +57 -8
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/subscription-billing/types.d.ts +13 -0
- package/dist/subscription-billing/types.d.ts.map +1 -1
- package/dist/subscription-billing/types.js.map +1 -1
- package/dist/tenancy/provisioning.d.ts.map +1 -1
- package/dist/tenancy/provisioning.js +32 -8
- package/dist/tenancy/provisioning.js.map +1 -1
- package/dist/users/repository.d.ts +38 -0
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +118 -3
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +67 -0
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +78 -0
- package/dist/vault/repository.js.map +1 -1
- package/package.json +19 -4
- package/src/db/migrations/0023_user_invite_activation.sql +15 -0
- package/src/db/migrations/0024_set_user_password_function.sql +32 -0
- package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
- package/src/db/migrations/0026_documents_and_competence.sql +353 -0
- package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
- package/src/db/migrations/0028_collection_engine.sql +94 -0
- package/src/db/migrations/0029_payment_rail.sql +107 -0
- package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
- package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
- package/src/db/migrations/0032_settlement_reversal.sql +76 -0
- package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
- package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
- package/src/db/migrations/0035_payment_account_environments.sql +61 -0
- package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
- package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
- package/src/db/migrations/0038_notification_channels.sql +175 -0
- package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
- package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
- package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
- package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
- package/src/db/migrations/0043_workload_identity.sql +105 -0
- package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
- package/dist/cjs/mail/resend-client.js +0 -103
- package/dist/cjs/mail/resend-client.js.map +0 -1
- package/dist/mail/resend-client.d.ts +0 -16
- package/dist/mail/resend-client.d.ts.map +0 -1
- package/dist/mail/resend-client.js +0 -100
- package/dist/mail/resend-client.js.map +0 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensaio da régua da SC sobre uma carteira SINTÉTICA.
|
|
3
|
+
*
|
|
4
|
+
* Executa o motor real — mesmas portas, mesma ordem, mesmas recusas — sobre uma
|
|
5
|
+
* carteira montada para cobrir cada desfecho do relatório. Não é substituto do
|
|
6
|
+
* ensaio contra a carteira do escritório: aquele exige acesso ao banco de
|
|
7
|
+
* produção e autorização humana, e é o Bloco 9.
|
|
8
|
+
*
|
|
9
|
+
* O que ele prova, e que o ensaio real não provaria melhor: que cada contador do
|
|
10
|
+
* relatório corresponde a uma decisão distinta do motor, e que nenhuma delas
|
|
11
|
+
* alcança um adapter.
|
|
12
|
+
*/
|
|
13
|
+
import { type ChannelAccount, type ChannelKey, type CommunicationContext, type ConsentRecord, type DispatchResult, type TemplateRecord } from './index.js';
|
|
14
|
+
export interface DryRunClient {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
/** Como está no cadastro — inclusive torto, que é o ponto do ensaio. */
|
|
18
|
+
phone: string | null;
|
|
19
|
+
email: string | null;
|
|
20
|
+
consent: ConsentRecord[];
|
|
21
|
+
alreadySent?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface DryRunScenario {
|
|
24
|
+
ctx: CommunicationContext;
|
|
25
|
+
clients: readonly DryRunClient[];
|
|
26
|
+
accounts: readonly ChannelAccount[];
|
|
27
|
+
templates: readonly TemplateRecord[];
|
|
28
|
+
order: readonly ChannelKey[];
|
|
29
|
+
eventType: string;
|
|
30
|
+
}
|
|
31
|
+
export interface DryRunRun {
|
|
32
|
+
results: DispatchResult[];
|
|
33
|
+
/** Deve ser 0. Qualquer outro valor significa que o ensaio tocou um adapter. */
|
|
34
|
+
adapterCalls: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function runDryRunScenario(scenario: DryRunScenario): Promise<DryRunRun>;
|
|
37
|
+
//# sourceMappingURL=dry-run-scenario.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-scenario.d.ts","sourceRoot":"","sources":["../../src/communication/dry-run-scenario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,UAAU,EAEf,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAElB,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAuBD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAkJpF"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensaio da régua da SC sobre uma carteira SINTÉTICA.
|
|
3
|
+
*
|
|
4
|
+
* Executa o motor real — mesmas portas, mesma ordem, mesmas recusas — sobre uma
|
|
5
|
+
* carteira montada para cobrir cada desfecho do relatório. Não é substituto do
|
|
6
|
+
* ensaio contra a carteira do escritório: aquele exige acesso ao banco de
|
|
7
|
+
* produção e autorização humana, e é o Bloco 9.
|
|
8
|
+
*
|
|
9
|
+
* O que ele prova, e que o ensaio real não provaria melhor: que cada contador do
|
|
10
|
+
* relatório corresponde a uma decisão distinta do motor, e que nenhuma delas
|
|
11
|
+
* alcança um adapter.
|
|
12
|
+
*/
|
|
13
|
+
import { buildIdempotencyKey, createNullAuditSink, dispatch, NO_PROVIDER_GUARANTEES, } from './index.js';
|
|
14
|
+
/**
|
|
15
|
+
* Canal que nunca envia e registra que foi chamado.
|
|
16
|
+
*
|
|
17
|
+
* Se algum destes acumular chamadas durante um ensaio, o ensaio está enviando —
|
|
18
|
+
* e é melhor descobrir por um contador do que pela fatura.
|
|
19
|
+
*/
|
|
20
|
+
function inertChannel(key, calls) {
|
|
21
|
+
return {
|
|
22
|
+
key,
|
|
23
|
+
providerName: 'inert',
|
|
24
|
+
// Um canal inerte não fala com provider nenhum, então não há garantia
|
|
25
|
+
// externa que ele possa declarar. Ver `capabilities.ts`.
|
|
26
|
+
capabilities: NO_PROVIDER_GUARANTEES,
|
|
27
|
+
isConfigured: () => true,
|
|
28
|
+
async send() {
|
|
29
|
+
calls.count += 1;
|
|
30
|
+
return { kind: 'unavailable', code: 'inert', detail: 'canal inerte de ensaio' };
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export async function runDryRunScenario(scenario) {
|
|
35
|
+
const calls = { count: 0 };
|
|
36
|
+
const channels = Object.fromEntries(scenario.order.map((key) => [key, inertChannel(key, calls)]));
|
|
37
|
+
const accounts = {
|
|
38
|
+
async find(ctx, channel) {
|
|
39
|
+
return (scenario.accounts.find((a) => a.channel === channel &&
|
|
40
|
+
a.tenantId === ctx.tenantId &&
|
|
41
|
+
a.product === ctx.product &&
|
|
42
|
+
a.brand === ctx.brand) ?? null);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
const templates = {
|
|
46
|
+
async candidates(ctx, channel, eventType, locale) {
|
|
47
|
+
return scenario.templates.filter((t) => t.channel === channel &&
|
|
48
|
+
t.eventType === eventType &&
|
|
49
|
+
t.locale === locale &&
|
|
50
|
+
t.product === ctx.product &&
|
|
51
|
+
(t.tenantId === null || t.tenantId === ctx.tenantId) &&
|
|
52
|
+
(t.brand === null || t.brand === ctx.brand));
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
const byId = new Map(scenario.clients.map((c) => [c.id, c]));
|
|
56
|
+
// Chaves que a trilha já teria. Calculadas com a MESMA função do motor, e não
|
|
57
|
+
// simuladas depois sobre o resultado: um ensaio que fabrica o desfecho de
|
|
58
|
+
// "já enviado" testa o próprio cenário, não o motor.
|
|
59
|
+
const alreadySentKeys = new Set();
|
|
60
|
+
for (const client of scenario.clients) {
|
|
61
|
+
if (!client.alreadySent)
|
|
62
|
+
continue;
|
|
63
|
+
for (const channel of scenario.order) {
|
|
64
|
+
for (const tpl of scenario.templates.filter((t) => t.channel === channel && t.eventType === scenario.eventType)) {
|
|
65
|
+
alreadySentKeys.add(buildIdempotencyKey({
|
|
66
|
+
ctx: scenario.ctx,
|
|
67
|
+
channel,
|
|
68
|
+
eventType: scenario.eventType,
|
|
69
|
+
subjectRef: `receivable-${client.id}`,
|
|
70
|
+
templateVersion: tpl.version,
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const consent = {
|
|
76
|
+
async find(recipientRef, channel) {
|
|
77
|
+
return byId.get(recipientRef)?.consent.find((r) => r.channel === channel) ?? null;
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
const results = [];
|
|
81
|
+
for (const client of scenario.clients) {
|
|
82
|
+
results.push(await dispatch({
|
|
83
|
+
ctx: scenario.ctx,
|
|
84
|
+
eventType: scenario.eventType,
|
|
85
|
+
subjectRef: `receivable-${client.id}`,
|
|
86
|
+
recipientRef: client.id,
|
|
87
|
+
variables: {
|
|
88
|
+
clientName: client.name,
|
|
89
|
+
amount: 'R$ 1.200,00',
|
|
90
|
+
dueDate: '10/09/2026',
|
|
91
|
+
},
|
|
92
|
+
policy: { order: [...scenario.order] },
|
|
93
|
+
}, {
|
|
94
|
+
channels,
|
|
95
|
+
accounts,
|
|
96
|
+
templates,
|
|
97
|
+
consent,
|
|
98
|
+
// O telefone do cadastro é entregue CRU, sem limpeza prévia: é o motor
|
|
99
|
+
// que precisa recusar o que não serve, e um ensaio que normaliza antes
|
|
100
|
+
// esconderia exatamente o defeito que ele deveria encontrar.
|
|
101
|
+
resolveRecipient: async (ref, channel) => {
|
|
102
|
+
const c = byId.get(ref);
|
|
103
|
+
if (!c)
|
|
104
|
+
return null;
|
|
105
|
+
return channel === 'email' ? c.email : c.phone;
|
|
106
|
+
},
|
|
107
|
+
buildContent: (channel, tpl, ordered) => {
|
|
108
|
+
if (channel === 'email') {
|
|
109
|
+
return { kind: 'email', subject: tpl.subject ?? '', html: '', text: '' };
|
|
110
|
+
}
|
|
111
|
+
if (channel === 'whatsapp') {
|
|
112
|
+
if (!tpl.providerTemplateName)
|
|
113
|
+
return null;
|
|
114
|
+
return {
|
|
115
|
+
kind: 'whatsapp_template',
|
|
116
|
+
templateName: tpl.providerTemplateName,
|
|
117
|
+
language: tpl.locale,
|
|
118
|
+
variables: ordered,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return { kind: 'text', body: ordered.join(' ') };
|
|
122
|
+
},
|
|
123
|
+
/*
|
|
124
|
+
* Reserva do ensaio: LÊ, nunca toma.
|
|
125
|
+
*
|
|
126
|
+
* `claim` e `settle` lançam de propósito. Um dry-run que chegasse a
|
|
127
|
+
* reservar seria a execução real com o envio removido — e calaria a
|
|
128
|
+
* etapa de verdade —, então em vez de um no-op silencioso o cenário
|
|
129
|
+
* falha alto se o motor tentar. É o teste de mutação embutido no
|
|
130
|
+
* próprio ensaio: mover a porta de dry-run para depois do claim
|
|
131
|
+
* quebra este arquivo.
|
|
132
|
+
*/
|
|
133
|
+
claims: {
|
|
134
|
+
async claim() {
|
|
135
|
+
throw new Error('dry-run não reserva chave');
|
|
136
|
+
},
|
|
137
|
+
async settle() {
|
|
138
|
+
throw new Error('dry-run não assenta reserva');
|
|
139
|
+
},
|
|
140
|
+
async markProviderAttempt() {
|
|
141
|
+
// Marcar tentativa de provider num ensaio significaria que o
|
|
142
|
+
// ensaio está prestes a falar com o provider. Lança pela mesma
|
|
143
|
+
// razão que `claim`: é o oráculo de mutação embutido.
|
|
144
|
+
throw new Error('dry-run não marca tentativa de provider');
|
|
145
|
+
},
|
|
146
|
+
async resolveUnknownOutcome() {
|
|
147
|
+
throw new Error('dry-run não resolve desfecho desconhecido');
|
|
148
|
+
},
|
|
149
|
+
async peek(key) {
|
|
150
|
+
return alreadySentKeys.has(key) ? 'sent' : 'none';
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
audit: createNullAuditSink(),
|
|
154
|
+
}, { dryRun: true }));
|
|
155
|
+
}
|
|
156
|
+
return { results, adapterCalls: calls.count };
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=dry-run-scenario.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run-scenario.js","sourceRoot":"","sources":["../../src/communication/dry-run-scenario.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agregação de um ensaio.
|
|
3
|
+
*
|
|
4
|
+
* O dry-run só é útil se contar as recusas com a mesma granularidade das
|
|
5
|
+
* decisões: "12 não sairiam" não diz se o escritório precisa preencher
|
|
6
|
+
* cadastros, colher autorizações ou configurar um canal — e cada uma dessas
|
|
7
|
+
* respostas leva a um trabalho diferente.
|
|
8
|
+
*/
|
|
9
|
+
import type { ChannelKey } from './channel.js';
|
|
10
|
+
import type { DispatchResult } from './engine.js';
|
|
11
|
+
export interface DryRunReport {
|
|
12
|
+
/** Quantas mensagens sairiam por canal. */
|
|
13
|
+
wouldSend: Record<ChannelKey, number>;
|
|
14
|
+
skipNoPhone: number;
|
|
15
|
+
skipInvalidPhone: number;
|
|
16
|
+
skipOptOut: number;
|
|
17
|
+
skipConsentUnknown: number;
|
|
18
|
+
skipAlreadySent: number;
|
|
19
|
+
skipChannelNotReady: number;
|
|
20
|
+
skipNoTemplate: number;
|
|
21
|
+
/** Nem enviaria nem tem motivo classificado — sempre deve ser zero. */
|
|
22
|
+
unclassified: number;
|
|
23
|
+
examined: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function emptyDryRunReport(): DryRunReport;
|
|
26
|
+
/**
|
|
27
|
+
* Conta UM desfecho por intenção, não um por canal tentado.
|
|
28
|
+
*
|
|
29
|
+
* A distinção importa: uma intenção que pula WhatsApp por falta de telefone e
|
|
30
|
+
* sai por e-mail é UMA mensagem enviada, não "uma enviada e uma pulada". Somar
|
|
31
|
+
* as duas infla o relatório e faz o escritório procurar problema onde a régua
|
|
32
|
+
* se resolveu sozinha.
|
|
33
|
+
*
|
|
34
|
+
* O motivo registrado é o do PRIMEIRO canal recusado — o preferido, que é o que
|
|
35
|
+
* o escritório precisa consertar para a mensagem sair pela via que ele escolheu.
|
|
36
|
+
*/
|
|
37
|
+
export declare function summarizeDryRun(results: readonly DispatchResult[]): DryRunReport;
|
|
38
|
+
/** Linhas do relatório, no formato que o Bloco 8 exige. Sem PII, sem segredo. */
|
|
39
|
+
export declare function formatDryRunReport(report: DryRunReport): string[];
|
|
40
|
+
//# sourceMappingURL=dry-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/communication/dry-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,IAAI,YAAY,CAahD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,YAAY,CA4ChF;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAejE"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agregação de um ensaio.
|
|
3
|
+
*
|
|
4
|
+
* O dry-run só é útil se contar as recusas com a mesma granularidade das
|
|
5
|
+
* decisões: "12 não sairiam" não diz se o escritório precisa preencher
|
|
6
|
+
* cadastros, colher autorizações ou configurar um canal — e cada uma dessas
|
|
7
|
+
* respostas leva a um trabalho diferente.
|
|
8
|
+
*/
|
|
9
|
+
export function emptyDryRunReport() {
|
|
10
|
+
return {
|
|
11
|
+
wouldSend: { email: 0, whatsapp: 0, sms: 0, notification: 0 },
|
|
12
|
+
skipNoPhone: 0,
|
|
13
|
+
skipInvalidPhone: 0,
|
|
14
|
+
skipOptOut: 0,
|
|
15
|
+
skipConsentUnknown: 0,
|
|
16
|
+
skipAlreadySent: 0,
|
|
17
|
+
skipChannelNotReady: 0,
|
|
18
|
+
skipNoTemplate: 0,
|
|
19
|
+
unclassified: 0,
|
|
20
|
+
examined: 0,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Conta UM desfecho por intenção, não um por canal tentado.
|
|
25
|
+
*
|
|
26
|
+
* A distinção importa: uma intenção que pula WhatsApp por falta de telefone e
|
|
27
|
+
* sai por e-mail é UMA mensagem enviada, não "uma enviada e uma pulada". Somar
|
|
28
|
+
* as duas infla o relatório e faz o escritório procurar problema onde a régua
|
|
29
|
+
* se resolveu sozinha.
|
|
30
|
+
*
|
|
31
|
+
* O motivo registrado é o do PRIMEIRO canal recusado — o preferido, que é o que
|
|
32
|
+
* o escritório precisa consertar para a mensagem sair pela via que ele escolheu.
|
|
33
|
+
*/
|
|
34
|
+
export function summarizeDryRun(results) {
|
|
35
|
+
const report = emptyDryRunReport();
|
|
36
|
+
for (const result of results) {
|
|
37
|
+
report.examined += 1;
|
|
38
|
+
if (result.delivered) {
|
|
39
|
+
report.wouldSend[result.delivered] += 1;
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const first = result.attempts.find((a) => a.skipped);
|
|
43
|
+
switch (first?.skipped) {
|
|
44
|
+
case 'no_recipient':
|
|
45
|
+
report.skipNoPhone += 1;
|
|
46
|
+
break;
|
|
47
|
+
case 'invalid_recipient':
|
|
48
|
+
report.skipInvalidPhone += 1;
|
|
49
|
+
break;
|
|
50
|
+
case 'opted_out':
|
|
51
|
+
report.skipOptOut += 1;
|
|
52
|
+
break;
|
|
53
|
+
case 'consent_unknown':
|
|
54
|
+
report.skipConsentUnknown += 1;
|
|
55
|
+
break;
|
|
56
|
+
case 'already_sent':
|
|
57
|
+
report.skipAlreadySent += 1;
|
|
58
|
+
break;
|
|
59
|
+
case 'channel_not_registered':
|
|
60
|
+
case 'no_identity':
|
|
61
|
+
report.skipChannelNotReady += 1;
|
|
62
|
+
break;
|
|
63
|
+
case 'no_template':
|
|
64
|
+
report.skipNoTemplate += 1;
|
|
65
|
+
break;
|
|
66
|
+
default:
|
|
67
|
+
// Inclui o contexto inválido e as falhas de adapter. Num ensaio nenhum
|
|
68
|
+
// adapter é chamado, então qualquer valor aqui é defeito de integração
|
|
69
|
+
// — e é por isso que o campo existe em vez de o caso cair em silêncio.
|
|
70
|
+
report.unclassified += 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return report;
|
|
74
|
+
}
|
|
75
|
+
/** Linhas do relatório, no formato que o Bloco 8 exige. Sem PII, sem segredo. */
|
|
76
|
+
export function formatDryRunReport(report) {
|
|
77
|
+
return [
|
|
78
|
+
`WOULD_SEND_EMAIL=${report.wouldSend.email}`,
|
|
79
|
+
`WOULD_SEND_WHATSAPP=${report.wouldSend.whatsapp}`,
|
|
80
|
+
`WOULD_SEND_SMS=${report.wouldSend.sms}`,
|
|
81
|
+
`SKIP_NO_PHONE=${report.skipNoPhone}`,
|
|
82
|
+
`SKIP_INVALID_PHONE=${report.skipInvalidPhone}`,
|
|
83
|
+
`SKIP_OPT_OUT=${report.skipOptOut}`,
|
|
84
|
+
`SKIP_CONSENT_UNKNOWN=${report.skipConsentUnknown}`,
|
|
85
|
+
`SKIP_ALREADY_SENT=${report.skipAlreadySent}`,
|
|
86
|
+
`SKIP_CHANNEL_NOT_READY=${report.skipChannelNotReady}`,
|
|
87
|
+
`SKIP_NO_TEMPLATE=${report.skipNoTemplate}`,
|
|
88
|
+
`UNCLASSIFIED=${report.unclassified}`,
|
|
89
|
+
`EXAMINED=${report.examined}`,
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=dry-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/communication/dry-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;QAC7D,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,mBAAmB,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,OAAkC;IAChE,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,QAAQ,KAAK,EAAE,OAAO,EAAE,CAAC;YACvB,KAAK,cAAc;gBACjB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,mBAAmB;gBACtB,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,iBAAiB;gBACpB,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,wBAAwB,CAAC;YAC9B,KAAK,aAAa;gBAChB,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC3B,MAAM;YACR;gBACE,uEAAuE;gBACvE,uEAAuE;gBACvE,uEAAuE;gBACvE,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO;QACL,oBAAoB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QAC5C,uBAAuB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;QAClD,kBAAkB,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACxC,iBAAiB,MAAM,CAAC,WAAW,EAAE;QACrC,sBAAsB,MAAM,CAAC,gBAAgB,EAAE;QAC/C,gBAAgB,MAAM,CAAC,UAAU,EAAE;QACnC,wBAAwB,MAAM,CAAC,kBAAkB,EAAE;QACnD,qBAAqB,MAAM,CAAC,eAAe,EAAE;QAC7C,0BAA0B,MAAM,CAAC,mBAAmB,EAAE;QACtD,oBAAoB,MAAM,CAAC,cAAc,EAAE;QAC3C,gBAAgB,MAAM,CAAC,YAAY,EAAE;QACrC,YAAY,MAAM,CAAC,QAAQ,EAAE;KAC9B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor de comunicação compartilhado.
|
|
3
|
+
*
|
|
4
|
+
* INTENT → CONTEXT → POLICY → IDENTITY → CONSENT → RECIPIENT → TEMPLATE
|
|
5
|
+
* → CONTENT → CLAIM → [RECOVERY?] → FENCE → ADAPTER → SETTLE
|
|
6
|
+
*
|
|
7
|
+
* O consumidor declara a INTENÇÃO de negócio ("avisar este cliente sobre o
|
|
8
|
+
* recebível X, etapa D+3, preferindo WhatsApp"). O motor decide nada sobre o
|
|
9
|
+
* negócio e tudo sobre a entrega.
|
|
10
|
+
*
|
|
11
|
+
* Cada porta abaixo pode recusar, e **toda recusa tem motivo próprio**. Um motor
|
|
12
|
+
* que devolve "não enviado" sem dizer qual porta fechou obriga o escritório a
|
|
13
|
+
* adivinhar entre "o cliente pediu para não receber" e "ninguém cadastrou o
|
|
14
|
+
* telefone" — que exigem ações opostas de quem opera.
|
|
15
|
+
*
|
|
16
|
+
* **CLAIM é a penúltima porta, e é a mais importante.** Ela fica imediatamente
|
|
17
|
+
* antes do adapter porque é o único lugar onde uma reserva serve para alguma
|
|
18
|
+
* coisa: a proteção contra envio duplo tem de acontecer antes do efeito externo,
|
|
19
|
+
* nunca depois. Ver `claim.ts`.
|
|
20
|
+
*
|
|
21
|
+
* Entre CLAIM e ADAPTER existem duas etapas que a H2 acrescentou, e nenhuma das
|
|
22
|
+
* duas é opcional:
|
|
23
|
+
*
|
|
24
|
+
* RECOVERY quando a reserva foi retomada de um titular que já tinha falado com
|
|
25
|
+
* o provider, o desfecho anterior é DESCONHECIDO. O motor só reenvia
|
|
26
|
+
* se o adapter declarar idempotência de provider que ainda cubra a
|
|
27
|
+
* chave; sem isso, recusa e deixa a chave visível para quem opera.
|
|
28
|
+
* FENCE a marca durável de "vou chamar o provider agora", gravada antes da
|
|
29
|
+
* chamada — e, na MESMA operação, a prova de que quem vai chamar
|
|
30
|
+
* ainda é o titular da geração corrente. É ela que dá à próxima
|
|
31
|
+
* retomada como saber a diferença entre "morreu antes de enviar" e
|
|
32
|
+
* "morreu depois", e é ela que impede o titular vencido de alcançar
|
|
33
|
+
* o provider. Perdeu a autoridade, não chama: sem exceção.
|
|
34
|
+
*
|
|
35
|
+
* A trilha do CICLO DE VIDA do disparo (`dispatch_claimed`, `dispatch_sent`,
|
|
36
|
+
* `dispatch_failed`) é gravada pelo STORE, junto com a reserva, e não pelo
|
|
37
|
+
* `audit` daqui. A razão está em `claim.ts`: o `audit` do motor vive na transação
|
|
38
|
+
* de negócio de quem chamou, e um rollback dela apagava a narrativa de um envio
|
|
39
|
+
* que tinha acontecido de verdade.
|
|
40
|
+
*/
|
|
41
|
+
import { type ChannelKey, type ChannelRegistry, type MessageContent } from './channel.js';
|
|
42
|
+
import { type CommunicationAuditSink } from './audit.js';
|
|
43
|
+
import type { DispatchClaimStore } from './claim.js';
|
|
44
|
+
import { type CommunicationContext } from './context.js';
|
|
45
|
+
import { type ConsentPolicy, type ConsentStore } from './consent.js';
|
|
46
|
+
import { type ChannelAccountStore } from './identity.js';
|
|
47
|
+
import { type ChannelAttempt, type ChannelPolicy } from './policy.js';
|
|
48
|
+
import { type TemplateStore } from './template.js';
|
|
49
|
+
/** O que o produto declara querer comunicar. */
|
|
50
|
+
export interface CommunicationIntent {
|
|
51
|
+
ctx: CommunicationContext;
|
|
52
|
+
/** `billing.dunning.d3` — do vocabulário do consumidor, não do motor. */
|
|
53
|
+
eventType: string;
|
|
54
|
+
/** Referência do assunto no domínio do consumidor. Entra na idempotência. */
|
|
55
|
+
subjectRef: string;
|
|
56
|
+
/** Referência do destinatário no domínio do consumidor. NUNCA o telefone. */
|
|
57
|
+
recipientRef: string;
|
|
58
|
+
/** Valores das variáveis, por nome. O template define a ordem. */
|
|
59
|
+
variables: Record<string, string>;
|
|
60
|
+
policy?: ChannelPolicy;
|
|
61
|
+
locale?: string;
|
|
62
|
+
}
|
|
63
|
+
export interface DispatchDeps {
|
|
64
|
+
channels: ChannelRegistry;
|
|
65
|
+
accounts: ChannelAccountStore;
|
|
66
|
+
templates: TemplateStore;
|
|
67
|
+
consent: ConsentStore;
|
|
68
|
+
consentPolicy?: ConsentPolicy;
|
|
69
|
+
/**
|
|
70
|
+
* Reserva atômica do direito de enviar. **Obrigatória.**
|
|
71
|
+
*
|
|
72
|
+
* Não é opcional, e a ausência de `?` é a decisão de desenho: enquanto era
|
|
73
|
+
* `alreadySent?`, todo consumidor que esquecesse de passá-la ganhava um motor
|
|
74
|
+
* sem proteção nenhuma contra envio duplo — em silêncio, com os testes
|
|
75
|
+
* passando. Agora o compilador recusa o consumidor incompleto.
|
|
76
|
+
*/
|
|
77
|
+
claims: DispatchClaimStore;
|
|
78
|
+
/** Trilha estruturada. Obrigatória pela mesma razão que `claims`. */
|
|
79
|
+
audit: CommunicationAuditSink;
|
|
80
|
+
/**
|
|
81
|
+
* Endereço do destinatário PARA ESTE CANAL, já normalizado, ou `null`.
|
|
82
|
+
*
|
|
83
|
+
* Do produto, porque só ele sabe onde o contato do cliente mora. A
|
|
84
|
+
* normalização canônica de telefone é do motor (`contacts/phone.ts`) e o
|
|
85
|
+
* produto deve usá-la — dois normalizadores é como o mesmo cliente recebe SMS
|
|
86
|
+
* e não recebe WhatsApp.
|
|
87
|
+
*/
|
|
88
|
+
resolveRecipient: (recipientRef: string, channel: ChannelKey) => Promise<string | null>;
|
|
89
|
+
/** Monta o conteúdo para o canal escolhido. Do produto: é ele que tem o texto. */
|
|
90
|
+
buildContent: (channel: ChannelKey, template: {
|
|
91
|
+
providerTemplateName?: string;
|
|
92
|
+
body?: string;
|
|
93
|
+
subject?: string;
|
|
94
|
+
locale: string;
|
|
95
|
+
}, ordered: string[], variables: Record<string, string>) => MessageContent | null;
|
|
96
|
+
}
|
|
97
|
+
export interface DispatchResult {
|
|
98
|
+
/** Canal que efetivamente entregou, ou `null` quando nenhum entregou. */
|
|
99
|
+
delivered: ChannelKey | null;
|
|
100
|
+
providerRef?: string;
|
|
101
|
+
/** Tudo que foi tentado, na ordem, com o motivo de cada recusa. */
|
|
102
|
+
attempts: ChannelAttempt[];
|
|
103
|
+
/** Chave usada. Devolvida para o consumidor gravar na trilha. */
|
|
104
|
+
idempotencyKey: string;
|
|
105
|
+
/** Contexto rejeitado na borda — nenhum canal chegou a ser tentado. */
|
|
106
|
+
invalidContext?: 'tenant' | 'product' | 'brand';
|
|
107
|
+
/**
|
|
108
|
+
* Quantas vezes `adapter.send` foi chamado nesta execução.
|
|
109
|
+
*
|
|
110
|
+
* Existe para ser ASSERTADO. A prova de que a reserva funciona não é "o
|
|
111
|
+
* segundo dispatch devolveu `already_sent`" — é que o adapter foi acionado uma
|
|
112
|
+
* vez só. Contar aqui, dentro do motor, torna a afirmação verificável sem
|
|
113
|
+
* depender de o teste espionar o adapter certo.
|
|
114
|
+
*
|
|
115
|
+
* **Conta o ADAPTER, não a rede.** Um adapter que recusa antes de qualquer
|
|
116
|
+
* chamada externa — a trava `liveSend` do WhatsApp, por exemplo — soma 1 aqui
|
|
117
|
+
* e não falou com ninguém. A prova de que nada real saiu é a trava do adapter,
|
|
118
|
+
* verificada em `communication-real-send-guard.test.ts`; este contador prova
|
|
119
|
+
* outra coisa, que é a ausência de disparo duplo.
|
|
120
|
+
*/
|
|
121
|
+
providerSendCalls: number;
|
|
122
|
+
/**
|
|
123
|
+
* A reserva foi tomada de um titular cujo prazo venceu — há risco real de o
|
|
124
|
+
* titular anterior ter enviado antes de morrer. Ver `claim.ts`.
|
|
125
|
+
*/
|
|
126
|
+
recoveredFromExpiredClaim?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* O reenvio aconteceu sob garantia de idempotência do PROVIDER.
|
|
129
|
+
*
|
|
130
|
+
* `true` quer dizer: a tentativa anterior falou com o provider, este envio
|
|
131
|
+
* repetiu a MESMA chave, e a deduplicação é do outro lado. O adapter foi
|
|
132
|
+
* chamado; a mensagem, não necessariamente saiu duas vezes — é a distinção
|
|
133
|
+
* entre `providerSendCalls` e efeito externo, e ela precisa ser visível para
|
|
134
|
+
* quem audita.
|
|
135
|
+
*/
|
|
136
|
+
providerIdempotentReplay?: boolean;
|
|
137
|
+
}
|
|
138
|
+
export interface DispatchOptions {
|
|
139
|
+
/**
|
|
140
|
+
* `true` percorre todas as portas e relata o que ACONTECERIA, sem chamar
|
|
141
|
+
* nenhum adapter e **sem tomar reserva nenhuma**.
|
|
142
|
+
*
|
|
143
|
+
* A decisão de desenho é onde o dry-run corta: depois de resolver identidade,
|
|
144
|
+
* consentimento, destinatário, template e conteúdo — e antes de `claim`.
|
|
145
|
+
* Cortar antes disso produziria um ensaio que aprova o que a execução real
|
|
146
|
+
* recusa, que é pior que não ensaiar
|
|
147
|
+
* (`feedback_dont_swap_the_measuring_instrument`). Cortar DEPOIS do claim
|
|
148
|
+
* seria pior ainda: o ensaio consumiria a chave e calaria a etapa de verdade.
|
|
149
|
+
*/
|
|
150
|
+
dryRun?: boolean;
|
|
151
|
+
}
|
|
152
|
+
export declare function dispatch(intent: CommunicationIntent, deps: DispatchDeps, options?: DispatchOptions): Promise<DispatchResult>;
|
|
153
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/communication/engine.ts"],"names":[],"mappings":"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"}
|