@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,458 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reserva de envio e trilha, sobre PostgreSQL.
|
|
4
|
+
*
|
|
5
|
+
* O CONTRATO (`claim.ts`, `audit.ts`) é agnóstico de armazenamento. Esta é uma
|
|
6
|
+
* implementação — a que qualquer produto sobre o schema do Baruk usa —, e ela
|
|
7
|
+
* mora ao lado do contrato em vez de dentro do produto porque a atomicidade da
|
|
8
|
+
* reserva é propriedade do MOTOR: um produto que a reimplementasse por conta
|
|
9
|
+
* própria reintroduziria a janela que ela existe para fechar, e o defeito
|
|
10
|
+
* apareceria só sob concorrência real.
|
|
11
|
+
*
|
|
12
|
+
* **Cada operação abre a própria transação, curta, e commita.**
|
|
13
|
+
*
|
|
14
|
+
* Não é detalhe. A régua de cobrança roda o ciclo inteiro dentro de uma
|
|
15
|
+
* transação longa; se a reserva vivesse nela, ela só ficaria visível para os
|
|
16
|
+
* outros workers no COMMIT — ou seja, depois de todos os envios. Um segundo
|
|
17
|
+
* worker ficaria bloqueado no lock da linha durante o ciclo inteiro do primeiro,
|
|
18
|
+
* e um `statement_timeout` transformaria a proteção em falha de cobrança.
|
|
19
|
+
*
|
|
20
|
+
* Commitar a reserva de imediato tem a consequência certa também no caminho
|
|
21
|
+
* infeliz: se a transação da régua fizer rollback DEPOIS de a mensagem ter
|
|
22
|
+
* saído, a reserva permanece `sent` — porque a mensagem realmente saiu, e
|
|
23
|
+
* ressuscitar a chave junto com o rollback mandaria a cobrança de novo.
|
|
24
|
+
*/
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.createPostgresDispatchClaimStore = createPostgresDispatchClaimStore;
|
|
27
|
+
exports.createPostgresAuditSink = createPostgresAuditSink;
|
|
28
|
+
exports.listCommunicationTrail = listCommunicationTrail;
|
|
29
|
+
const node_crypto_1 = require("node:crypto");
|
|
30
|
+
const context_js_1 = require("../../db/context.js");
|
|
31
|
+
const claim_js_1 = require("../claim.js");
|
|
32
|
+
/** Truncagem única para tudo que é texto livre vindo de provider. */
|
|
33
|
+
const MAX_DETAIL = 300;
|
|
34
|
+
const trim = (v) => v === null || v === undefined ? null : v.slice(0, MAX_DETAIL);
|
|
35
|
+
/**
|
|
36
|
+
* Store de reserva do tenant.
|
|
37
|
+
*
|
|
38
|
+
* Recebe o `Db` (pool), e não uma `Tx`, exatamente para poder abrir transação
|
|
39
|
+
* própria. Um store que recebesse `Tx` herdaria o tempo de vida da transação de
|
|
40
|
+
* quem chama — que é o defeito descrito no cabeçalho.
|
|
41
|
+
*/
|
|
42
|
+
function createPostgresDispatchClaimStore(db, tenantId, options = {}) {
|
|
43
|
+
const ttlSeconds = Math.max(1, Math.round((options.ttlMs ?? claim_js_1.DEFAULT_CLAIM_TTL_MS) / 1000));
|
|
44
|
+
/**
|
|
45
|
+
* Grava um evento de ciclo de vida na transação que estiver aberta.
|
|
46
|
+
*
|
|
47
|
+
* Recebe a `Tx` de quem chama — sempre a mesma transação curta da reserva.
|
|
48
|
+
* É isso, e só isso, que dá a garantia que a certificação exigiu: `sent` e
|
|
49
|
+
* `dispatch_sent` caem ou sobrevivem juntos, porque são uma escrita só.
|
|
50
|
+
*/
|
|
51
|
+
const writeLifecycle = async (tx, ctx, event) => {
|
|
52
|
+
await tx `
|
|
53
|
+
INSERT INTO communication_event (
|
|
54
|
+
id, tenant_id, product, brand, kind, channel, event_type, subject_ref,
|
|
55
|
+
recipient_ref, idempotency_key, provider_ref, skip_reason, status,
|
|
56
|
+
code, detail, attempt
|
|
57
|
+
) VALUES (
|
|
58
|
+
${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${ctx.product}, ${ctx.brand},
|
|
59
|
+
${event.kind}, ${ctx.channel}, ${ctx.eventType}, ${ctx.subjectRef},
|
|
60
|
+
${ctx.recipientRef}, ${ctx.idempotencyKey}, ${event.providerRef ?? null},
|
|
61
|
+
${event.skipReason ?? null}, ${event.status ?? null},
|
|
62
|
+
${trim(event.code)}, ${trim(event.detail)}, ${ctx.attempt}
|
|
63
|
+
)
|
|
64
|
+
`;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Recupera o envelope da trilha a partir da própria linha de reserva.
|
|
68
|
+
*
|
|
69
|
+
* `settle` recebe só o handle; produto, marca, canal e destinatário vivem na
|
|
70
|
+
* linha. Ler dali, na mesma transação, evita ter de carregá-los no handle e
|
|
71
|
+
* evita que o motor possa passar um envelope divergente do que foi reservado —
|
|
72
|
+
* a trilha descreve o que o banco tem, não o que o chamador lembra.
|
|
73
|
+
*/
|
|
74
|
+
const envelopeFor = async (tx, claimId) => {
|
|
75
|
+
const [row] = await tx `
|
|
76
|
+
SELECT product, brand, channel, event_type, subject_ref, recipient_ref,
|
|
77
|
+
idempotency_key, attempts
|
|
78
|
+
FROM communication_dispatch
|
|
79
|
+
WHERE id = ${claimId}
|
|
80
|
+
LIMIT 1
|
|
81
|
+
`;
|
|
82
|
+
if (!row)
|
|
83
|
+
return null;
|
|
84
|
+
return {
|
|
85
|
+
product: row.product,
|
|
86
|
+
brand: row.brand,
|
|
87
|
+
channel: row.channel,
|
|
88
|
+
eventType: row.event_type,
|
|
89
|
+
subjectRef: row.subject_ref,
|
|
90
|
+
recipientRef: row.recipient_ref,
|
|
91
|
+
idempotencyKey: row.idempotency_key,
|
|
92
|
+
attempt: row.attempts,
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
async claim(req) {
|
|
97
|
+
if (req.ctx.tenantId !== tenantId) {
|
|
98
|
+
// O store é de UM tenant. Um pedido de outro contexto não é "não
|
|
99
|
+
// autorizado": é defeito de integração, e devolver `in_flight` o
|
|
100
|
+
// esconderia atrás de um motivo plausível.
|
|
101
|
+
throw new Error('claim pedido para tenant diferente do store');
|
|
102
|
+
}
|
|
103
|
+
return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
104
|
+
/*
|
|
105
|
+
* A operação inteira em UMA instrução.
|
|
106
|
+
*
|
|
107
|
+
* `INSERT ... ON CONFLICT DO UPDATE ... WHERE` é atômico por
|
|
108
|
+
* construção: o segundo worker a chegar bloqueia no lock da linha em
|
|
109
|
+
* conflito até o primeiro commitar, e só então reavalia o `WHERE`. Se o
|
|
110
|
+
* primeiro deixou a linha `in_flight` dentro do prazo, o `WHERE` do
|
|
111
|
+
* segundo é falso, o UPDATE não acontece e o `RETURNING` volta vazio —
|
|
112
|
+
* que é a reserva negada.
|
|
113
|
+
*
|
|
114
|
+
* Escrever isto como SELECT + UPDATE, mesmo dentro de uma transação,
|
|
115
|
+
* reabriria a janela sob READ COMMITTED (o padrão): o SELECT de um não
|
|
116
|
+
* enxerga o INSERT não commitado do outro.
|
|
117
|
+
*
|
|
118
|
+
* No SET, `communication_dispatch.status` ainda é o valor ANTIGO — é
|
|
119
|
+
* assim que `recovered_from_expired` sabe que a reserva foi tomada de um
|
|
120
|
+
* titular vencido em vez de concedida sobre uma falha retentável.
|
|
121
|
+
*
|
|
122
|
+
* `unknown_outcome` não aparece no `WHERE`, e a ausência é a regra: uma
|
|
123
|
+
* chave cujo desfecho ninguém conhece não volta a ser reservável sozinha.
|
|
124
|
+
* Sai de lá por `resolveUnknownOutcome`, que é um ato explícito.
|
|
125
|
+
*
|
|
126
|
+
* `provider_attempts` e `provider_first_attempt_at` NÃO são tocados aqui.
|
|
127
|
+
* Por isso o `RETURNING` os devolve com o valor do titular anterior — que
|
|
128
|
+
* é exatamente a pergunta que o motor precisa responder antes de decidir
|
|
129
|
+
* se pode reenviar.
|
|
130
|
+
*/
|
|
131
|
+
const rows = await tx `
|
|
132
|
+
INSERT INTO communication_dispatch (
|
|
133
|
+
id, tenant_id, product, brand, channel, event_type, subject_ref,
|
|
134
|
+
recipient_ref, idempotency_key, status, claim_id, claimed_at,
|
|
135
|
+
claim_expires_at, recovered_from_expired, attempts
|
|
136
|
+
) VALUES (
|
|
137
|
+
${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${req.ctx.product}, ${req.ctx.brand},
|
|
138
|
+
${req.channel}, ${req.eventType}, ${req.subjectRef},
|
|
139
|
+
${req.recipientRef}, ${req.idempotencyKey}, 'in_flight', ${(0, node_crypto_1.randomUUID)()},
|
|
140
|
+
now(), now() + make_interval(secs => ${ttlSeconds}), false, 1
|
|
141
|
+
)
|
|
142
|
+
ON CONFLICT (tenant_id, idempotency_key) DO UPDATE
|
|
143
|
+
SET status = 'in_flight',
|
|
144
|
+
claim_id = ${(0, node_crypto_1.randomUUID)()},
|
|
145
|
+
claimed_at = now(),
|
|
146
|
+
claim_expires_at = now() + make_interval(secs => ${ttlSeconds}),
|
|
147
|
+
recovered_from_expired = (communication_dispatch.status = 'in_flight'),
|
|
148
|
+
attempts = communication_dispatch.attempts + 1,
|
|
149
|
+
recipient_ref = ${req.recipientRef},
|
|
150
|
+
updated_at = now()
|
|
151
|
+
WHERE communication_dispatch.status = 'failed_retryable'
|
|
152
|
+
OR (communication_dispatch.status = 'in_flight'
|
|
153
|
+
AND communication_dispatch.claim_expires_at <= now())
|
|
154
|
+
RETURNING id, claim_id, attempts, recovered_from_expired, provider_attempts,
|
|
155
|
+
(EXTRACT(EPOCH FROM (now() - provider_first_attempt_at)) * 1000)::bigint
|
|
156
|
+
AS provider_first_attempt_age_ms
|
|
157
|
+
`;
|
|
158
|
+
const granted = rows[0];
|
|
159
|
+
if (granted) {
|
|
160
|
+
// Retomada de titular vencido que JÁ tinha falado com o provider é
|
|
161
|
+
// desfecho desconhecido. Retomada de quem morreu antes disso não é.
|
|
162
|
+
const previousReachedProvider = granted.recovered_from_expired && granted.provider_attempts > 0;
|
|
163
|
+
const claim = {
|
|
164
|
+
claimId: granted.id,
|
|
165
|
+
// A GERAÇÃO da reserva, não a linha. `id` é o mesmo para o titular
|
|
166
|
+
// vencido e para quem o substituiu; usá-lo como trava deixaria o
|
|
167
|
+
// zumbi assentar por cima de quem está enviando agora.
|
|
168
|
+
claimToken: granted.claim_id,
|
|
169
|
+
idempotencyKey: req.idempotencyKey,
|
|
170
|
+
attempt: granted.attempts,
|
|
171
|
+
recoveredFromExpiredClaim: granted.recovered_from_expired,
|
|
172
|
+
previousAttemptReachedProvider: previousReachedProvider,
|
|
173
|
+
providerFirstAttemptAgeMs: granted.provider_first_attempt_age_ms === null
|
|
174
|
+
? null
|
|
175
|
+
: Number(granted.provider_first_attempt_age_ms),
|
|
176
|
+
};
|
|
177
|
+
await writeLifecycle(tx, {
|
|
178
|
+
product: req.ctx.product,
|
|
179
|
+
brand: req.ctx.brand,
|
|
180
|
+
channel: req.channel,
|
|
181
|
+
eventType: req.eventType,
|
|
182
|
+
subjectRef: req.subjectRef,
|
|
183
|
+
recipientRef: req.recipientRef,
|
|
184
|
+
idempotencyKey: req.idempotencyKey,
|
|
185
|
+
attempt: granted.attempts,
|
|
186
|
+
}, {
|
|
187
|
+
kind: 'dispatch_claimed',
|
|
188
|
+
code: previousReachedProvider
|
|
189
|
+
? 'recovered_unknown_outcome'
|
|
190
|
+
: granted.recovered_from_expired
|
|
191
|
+
? 'recovered_from_expired_claim'
|
|
192
|
+
: null,
|
|
193
|
+
});
|
|
194
|
+
return { granted: true, claim };
|
|
195
|
+
}
|
|
196
|
+
// Nada foi reservado. O motivo vem da linha que barrou — e cada motivo
|
|
197
|
+
// leva a uma leitura operacional diferente, então nenhum deles pode
|
|
198
|
+
// virar um "não deu" genérico.
|
|
199
|
+
const [current] = await tx `
|
|
200
|
+
SELECT status, (claim_expires_at <= now()) AS expired
|
|
201
|
+
FROM communication_dispatch
|
|
202
|
+
WHERE idempotency_key = ${req.idempotencyKey}
|
|
203
|
+
LIMIT 1
|
|
204
|
+
`;
|
|
205
|
+
if (!current) {
|
|
206
|
+
// Linha some entre o INSERT e o SELECT só se alguém a apagou. Não é
|
|
207
|
+
// reserva concedida, e afirmar `in_flight` seria inventar um titular.
|
|
208
|
+
return { granted: false, reason: 'in_flight', detail: 'estado da reserva indisponível' };
|
|
209
|
+
}
|
|
210
|
+
if (current.status === 'sent')
|
|
211
|
+
return { granted: false, reason: 'already_sent' };
|
|
212
|
+
if (current.status === 'failed_permanent') {
|
|
213
|
+
return { granted: false, reason: 'permanently_failed' };
|
|
214
|
+
}
|
|
215
|
+
if (current.status === 'unknown_outcome') {
|
|
216
|
+
return {
|
|
217
|
+
granted: false,
|
|
218
|
+
reason: 'unknown_outcome',
|
|
219
|
+
detail: 'desfecho da tentativa anterior é desconhecido',
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
return { granted: false, reason: 'in_flight' };
|
|
223
|
+
});
|
|
224
|
+
},
|
|
225
|
+
async markProviderAttempt(claim) {
|
|
226
|
+
return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
227
|
+
/*
|
|
228
|
+
* Transação PRÓPRIA e commitada antes da chamada externa.
|
|
229
|
+
*
|
|
230
|
+
* Se esta gravação vivesse na transação de quem chama, ela ficaria
|
|
231
|
+
* invisível até o commit — e o processo que morre no meio é justamente o
|
|
232
|
+
* que nunca commita. A marca precisa sobreviver à morte do processo que
|
|
233
|
+
* a escreveu, senão ela não marca nada.
|
|
234
|
+
*
|
|
235
|
+
* `claim_id` na trava: só o titular da geração corrente marca tentativa.
|
|
236
|
+
* `status = 'in_flight'`: uma chave assentada não recebe marca nova nem
|
|
237
|
+
* quando a geração por acaso coincide (`settle` preserva o `claim_id`).
|
|
238
|
+
*
|
|
239
|
+
* **O `RETURNING` é a parte nova, e é o bloqueador inteiro.** A trava já
|
|
240
|
+
* estava aqui e já funcionava; o que faltava era o motor SABER que ela
|
|
241
|
+
* disparou. Sem `RETURNING`, `UPDATE` que casa zero linhas e `UPDATE` que
|
|
242
|
+
* casa uma são indistinguíveis para o chamador — e o chamador seguia
|
|
243
|
+
* para `adapter.send()` nos dois casos.
|
|
244
|
+
*/
|
|
245
|
+
const fenced = await tx `
|
|
246
|
+
UPDATE communication_dispatch
|
|
247
|
+
SET provider_attempts = provider_attempts + 1,
|
|
248
|
+
provider_first_attempt_at = COALESCE(provider_first_attempt_at, now()),
|
|
249
|
+
provider_last_attempt_at = now(),
|
|
250
|
+
updated_at = now()
|
|
251
|
+
WHERE id = ${claim.claimId}
|
|
252
|
+
AND claim_id = ${claim.claimToken}
|
|
253
|
+
AND status = 'in_flight'
|
|
254
|
+
RETURNING id
|
|
255
|
+
`;
|
|
256
|
+
// Uma linha atualizada = a geração corrente é a de quem chamou.
|
|
257
|
+
if (fenced[0])
|
|
258
|
+
return { authority: 'held' };
|
|
259
|
+
/*
|
|
260
|
+
* Zero linhas. A DECISÃO já está tomada — foi o `UPDATE` que a tomou,
|
|
261
|
+
* atomicamente — e este `SELECT` serve só para o RÓTULO. Não há TOCTOU
|
|
262
|
+
* aqui: o que ele lê depois não pode reautorizar um envio que o `UPDATE`
|
|
263
|
+
* já recusou.
|
|
264
|
+
*/
|
|
265
|
+
const [current] = await tx `
|
|
266
|
+
SELECT status, (claim_expires_at <= now()) AS expired
|
|
267
|
+
FROM communication_dispatch
|
|
268
|
+
WHERE id = ${claim.claimId}
|
|
269
|
+
LIMIT 1
|
|
270
|
+
`;
|
|
271
|
+
if (!current) {
|
|
272
|
+
return { authority: 'lost', detail: 'linha de reserva não existe mais' };
|
|
273
|
+
}
|
|
274
|
+
if (current.status !== 'in_flight') {
|
|
275
|
+
return {
|
|
276
|
+
authority: 'already_final',
|
|
277
|
+
state: current.status,
|
|
278
|
+
detail: `chave já assentada como ${current.status}`,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
return { authority: 'lost', detail: 'reserva retomada por outra execução' };
|
|
282
|
+
});
|
|
283
|
+
},
|
|
284
|
+
async settle(claim, outcome, event) {
|
|
285
|
+
await (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
286
|
+
/*
|
|
287
|
+
* `WHERE claim_id = ...` é a trava que faz o titular vencido não poder
|
|
288
|
+
* assentar por cima de quem está enviando agora.
|
|
289
|
+
*
|
|
290
|
+
* Até a H2 a comparação era por `id` — o identificador da LINHA, que
|
|
291
|
+
* sobrevive intacto à retomada. Ou seja: a trava estava escrita no
|
|
292
|
+
* comentário e não no código, e o processo que ressuscitava depois do
|
|
293
|
+
* prazo assentava por cima do titular novo sem que nada reclamasse. O
|
|
294
|
+
* que desqualifica o zumbi é não ter a GERAÇÃO corrente, e é ela que
|
|
295
|
+
* entra no `WHERE`.
|
|
296
|
+
*/
|
|
297
|
+
const status = outcome.kind === 'sent'
|
|
298
|
+
? 'sent'
|
|
299
|
+
: outcome.kind === 'unknown'
|
|
300
|
+
? 'unknown_outcome'
|
|
301
|
+
: outcome.kind === 'failed'
|
|
302
|
+
? outcome.permanent
|
|
303
|
+
? 'failed_permanent'
|
|
304
|
+
: 'failed_retryable'
|
|
305
|
+
: 'failed_retryable';
|
|
306
|
+
const code = outcome.kind === 'released'
|
|
307
|
+
? outcome.reason
|
|
308
|
+
: outcome.kind === 'sent'
|
|
309
|
+
? null
|
|
310
|
+
: (outcome.code ?? null);
|
|
311
|
+
const detail = outcome.kind === 'sent' || outcome.kind === 'released' ? null : outcome.detail;
|
|
312
|
+
const updated = await tx `
|
|
313
|
+
UPDATE communication_dispatch
|
|
314
|
+
SET status = ${status},
|
|
315
|
+
settled_at = now(),
|
|
316
|
+
sent_at = ${outcome.kind === 'sent' ? tx `now()` : tx `sent_at`},
|
|
317
|
+
provider_ref = ${outcome.kind === 'sent'
|
|
318
|
+
? tx `COALESCE(${outcome.providerRef ?? null}, provider_ref)`
|
|
319
|
+
: tx `provider_ref`},
|
|
320
|
+
-- Enviado e desconhecido mantêm a reserva encerrada; os demais
|
|
321
|
+
-- devolvem a chave imediatamente. Esperar o prazo vencer num
|
|
322
|
+
-- motivo já conhecido calaria a etapa por dez minutos à toa.
|
|
323
|
+
claim_expires_at = ${outcome.kind === 'sent' ? tx `claim_expires_at` : tx `now()`},
|
|
324
|
+
last_code = ${trim(code)},
|
|
325
|
+
last_detail = ${trim(detail)},
|
|
326
|
+
updated_at = now()
|
|
327
|
+
WHERE id = ${claim.claimId} AND claim_id = ${claim.claimToken}
|
|
328
|
+
RETURNING id
|
|
329
|
+
`;
|
|
330
|
+
// Zumbi recusado: nenhuma linha mudou, e nenhum evento é gravado. Uma
|
|
331
|
+
// trilha escrita por quem perdeu o direito de agir descreveria um envio
|
|
332
|
+
// que o titular atual não fez.
|
|
333
|
+
if (!updated[0])
|
|
334
|
+
return;
|
|
335
|
+
const envelope = await envelopeFor(tx, claim.claimId);
|
|
336
|
+
if (envelope)
|
|
337
|
+
await writeLifecycle(tx, envelope, event);
|
|
338
|
+
});
|
|
339
|
+
},
|
|
340
|
+
async peek(idempotencyKey) {
|
|
341
|
+
return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
342
|
+
const [row] = await tx `
|
|
343
|
+
SELECT status, (claim_expires_at <= now()) AS expired
|
|
344
|
+
FROM communication_dispatch
|
|
345
|
+
WHERE idempotency_key = ${idempotencyKey}
|
|
346
|
+
LIMIT 1
|
|
347
|
+
`;
|
|
348
|
+
if (!row)
|
|
349
|
+
return 'none';
|
|
350
|
+
// Reserva vencida não é "em andamento": ninguém está com ela. Relatar
|
|
351
|
+
// `in_flight` faria o ensaio anunciar um envio que já morreu.
|
|
352
|
+
if (row.status === 'in_flight')
|
|
353
|
+
return row.expired ? 'failed_retryable' : 'in_flight';
|
|
354
|
+
return row.status;
|
|
355
|
+
});
|
|
356
|
+
},
|
|
357
|
+
async resolveUnknownOutcome(idempotencyKey, resolution, detail) {
|
|
358
|
+
await (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
359
|
+
// Só sai de `unknown_outcome`. Aplicar isto sobre uma chave em outro
|
|
360
|
+
// estado seria uma via lateral para reabrir um envio já assentado — e a
|
|
361
|
+
// reserva deixaria de ser a única autoridade sobre o direito de enviar.
|
|
362
|
+
const [row] = await tx `
|
|
363
|
+
UPDATE communication_dispatch
|
|
364
|
+
SET status = ${resolution === 'sent' ? 'sent' : 'failed_retryable'},
|
|
365
|
+
sent_at = ${resolution === 'sent' ? tx `COALESCE(sent_at, now())` : tx `sent_at`},
|
|
366
|
+
settled_at = now(),
|
|
367
|
+
claim_expires_at = now(),
|
|
368
|
+
last_code = ${`unknown_resolved_${resolution}`},
|
|
369
|
+
last_detail = ${trim(detail)},
|
|
370
|
+
updated_at = now()
|
|
371
|
+
WHERE idempotency_key = ${idempotencyKey}
|
|
372
|
+
AND status = 'unknown_outcome'
|
|
373
|
+
RETURNING id
|
|
374
|
+
`;
|
|
375
|
+
if (!row)
|
|
376
|
+
return;
|
|
377
|
+
const envelope = await envelopeFor(tx, row.id);
|
|
378
|
+
if (envelope) {
|
|
379
|
+
await writeLifecycle(tx, envelope, {
|
|
380
|
+
kind: resolution === 'sent' ? 'dispatch_sent' : 'dispatch_failed',
|
|
381
|
+
status: resolution === 'sent' ? 'sent' : null,
|
|
382
|
+
code: `unknown_resolved_${resolution}`,
|
|
383
|
+
detail: detail ?? null,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
},
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Trilha sobre `communication_event`.
|
|
392
|
+
*
|
|
393
|
+
* Recebe `Tx` — e aqui a escolha é OPOSTA à da reserva, de propósito. A trilha
|
|
394
|
+
* descreve o que a transação de negócio fez; se ela commitasse à parte, um
|
|
395
|
+
* rollback deixaria eventos narrando um envio que o banco desfez. A reserva
|
|
396
|
+
* precisa sobreviver ao rollback (a mensagem saiu de verdade); a narrativa, não.
|
|
397
|
+
*/
|
|
398
|
+
function createPostgresAuditSink(tx, tenantId) {
|
|
399
|
+
return {
|
|
400
|
+
async record(event) {
|
|
401
|
+
// Contexto de outro tenant nunca vira linha deste. Silenciar seria pior
|
|
402
|
+
// que gravar errado, então a checagem existe e falha alto.
|
|
403
|
+
if (event.ctx.tenantId !== tenantId) {
|
|
404
|
+
throw new Error('evento de comunicação de tenant diferente do sink');
|
|
405
|
+
}
|
|
406
|
+
await tx `
|
|
407
|
+
INSERT INTO communication_event (
|
|
408
|
+
id, tenant_id, product, brand, kind, channel, event_type, subject_ref,
|
|
409
|
+
recipient_ref, idempotency_key, provider_ref, skip_reason, status,
|
|
410
|
+
code, detail, attempt
|
|
411
|
+
) VALUES (
|
|
412
|
+
${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${event.ctx.product}, ${event.ctx.brand},
|
|
413
|
+
${event.kind}, ${event.channel}, ${event.eventType}, ${event.subjectRef},
|
|
414
|
+
${event.recipientRef}, ${event.idempotencyKey}, ${event.providerRef ?? null},
|
|
415
|
+
${event.skipReason ?? null}, ${event.status ?? null},
|
|
416
|
+
${trim(event.code)}, ${trim(event.detail)}, ${event.attempt ?? null}
|
|
417
|
+
)
|
|
418
|
+
`;
|
|
419
|
+
},
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Leitura da trilha. É o que torna a auditoria CONSULTÁVEL — sem isto, o
|
|
424
|
+
* registro estruturado seria só uma tabela que ninguém abre.
|
|
425
|
+
*/
|
|
426
|
+
async function listCommunicationTrail(tx, filter = {}) {
|
|
427
|
+
const limit = Math.min(Math.max(filter.limit ?? 100, 1), 500);
|
|
428
|
+
const rows = await tx `
|
|
429
|
+
SELECT id, kind, channel, event_type, subject_ref, recipient_ref,
|
|
430
|
+
idempotency_key, provider_ref, skip_reason, status, code, detail,
|
|
431
|
+
attempt, occurred_at
|
|
432
|
+
FROM communication_event
|
|
433
|
+
WHERE true
|
|
434
|
+
${filter.subjectRef ? tx `AND subject_ref = ${filter.subjectRef}` : tx ``}
|
|
435
|
+
${filter.recipientRef ? tx `AND recipient_ref = ${filter.recipientRef}` : tx ``}
|
|
436
|
+
${filter.idempotencyKey ? tx `AND idempotency_key = ${filter.idempotencyKey}` : tx ``}
|
|
437
|
+
${filter.kind ? tx `AND kind = ${filter.kind}` : tx ``}
|
|
438
|
+
ORDER BY occurred_at DESC, created_at DESC
|
|
439
|
+
LIMIT ${limit}
|
|
440
|
+
`;
|
|
441
|
+
return rows.map((r) => ({
|
|
442
|
+
id: r.id,
|
|
443
|
+
kind: r.kind,
|
|
444
|
+
channel: r.channel,
|
|
445
|
+
eventType: r.event_type,
|
|
446
|
+
subjectRef: r.subject_ref,
|
|
447
|
+
recipientRef: r.recipient_ref,
|
|
448
|
+
idempotencyKey: r.idempotency_key,
|
|
449
|
+
providerRef: r.provider_ref,
|
|
450
|
+
skipReason: r.skip_reason,
|
|
451
|
+
status: r.status,
|
|
452
|
+
code: r.code,
|
|
453
|
+
detail: r.detail,
|
|
454
|
+
attempt: r.attempt,
|
|
455
|
+
occurredAt: r.occurred_at.toISOString(),
|
|
456
|
+
}));
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../../src/communication/stores/postgres.ts"],"names":[],"mappings":"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"}
|