@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
package/dist/mail/provider.js
CHANGED
|
@@ -1,248 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return EMAIL_PATTERN.test(address);
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Valida os endereços que o Provider efetivamente usará na chamada ao provider externo
|
|
14
|
-
* (Correção 3 — Auditoria Codex). Roda depois de `from` resolvido, para pegar também
|
|
15
|
-
* remetentes vindos do `SenderResolver`/`defaultFrom`, não só o `input.from` explícito.
|
|
1
|
+
/*
|
|
2
|
+
* RE-EXPORT — a implementação vive em `@baruk/communication`.
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
|
|
5
|
+
* mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
|
|
6
|
+
* comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
|
|
7
|
+
* consumidor receber o comportamento antigo.
|
|
8
|
+
*
|
|
9
|
+
* O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
|
|
16
10
|
*/
|
|
17
|
-
|
|
18
|
-
const invalidFields = [];
|
|
19
|
-
if (!isValidEmailAddress(fields.to))
|
|
20
|
-
invalidFields.push('to');
|
|
21
|
-
if (!isValidEmailAddress(fields.from))
|
|
22
|
-
invalidFields.push('from');
|
|
23
|
-
if (fields.replyTo !== undefined && !isValidEmailAddress(fields.replyTo))
|
|
24
|
-
invalidFields.push('replyTo');
|
|
25
|
-
if (invalidFields.length === 0)
|
|
26
|
-
return undefined;
|
|
27
|
-
return {
|
|
28
|
-
code: 'invalid-recipient',
|
|
29
|
-
message: `Endereço(s) de e-mail inválido(s): ${invalidFields.join(', ')}.`,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Provider canônico de `cap.communication.transactional-email` (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 v0.2).
|
|
34
|
-
* Extensões (`templateRenderer`/`senderResolver`/`hooks`/`dedupStore`) são injetadas na construção,
|
|
35
|
-
* nunca descobertas por convenção (RFC §4.7).
|
|
36
|
-
*/
|
|
37
|
-
export function createTransactionalEmailProvider(config) {
|
|
38
|
-
const templateRenderer = config.templateRenderer ?? new PassthroughTemplateRenderer();
|
|
39
|
-
const senderResolver = config.senderResolver ?? new StaticSenderResolver(config.defaultFrom);
|
|
40
|
-
const hooks = config.hooks ?? [];
|
|
41
|
-
const dedupStore = config.dedupStore ?? new InMemoryDedupStore();
|
|
42
|
-
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
43
|
-
const remoteReservationPollIntervalMs = config.remoteReservationPollIntervalMs ?? DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS;
|
|
44
|
-
const remoteReservationMaxWaitMs = config.remoteReservationMaxWaitMs ?? DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS;
|
|
45
|
-
const apiKey = config.apiKey;
|
|
46
|
-
/**
|
|
47
|
-
* Nenhuma chamada ao `DedupStore` (`reserve`/`get`/`set`) pode escapar sem tratamento
|
|
48
|
-
* (Bloqueador 1 — Certification Round 2: sanitização não pode se limitar ao `DeliveryResult`;
|
|
49
|
-
* uma implementação de store real — Redis/Postgres — pode lançar erros de rede/conexão cuja
|
|
50
|
-
* mensagem contém credenciais, ex.: uma connection string). Toda chamada passa por aqui:
|
|
51
|
-
* nunca propaga a exceção, sempre loga sanitizado, sempre devolve um fallback seguro.
|
|
52
|
-
*/
|
|
53
|
-
async function safeDedupCall(operation, fn, fallback) {
|
|
54
|
-
try {
|
|
55
|
-
return await fn();
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
logSanitized(`[transactional-email] DedupStore.${operation} falhou (ignorado):`, errorMessage(err), [apiKey]);
|
|
59
|
-
return fallback;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
function sleep(ms) {
|
|
63
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Aguarda, de forma limitada, o resultado de uma reserva mantida por outra instância/réplica
|
|
67
|
-
* (`DedupStore` `mode: 'shared'`) — é o mecanismo real de coalescência distribuída (Bloqueador 2).
|
|
68
|
-
* Nunca espera indefinidamente: `maxWaitMs` limita o tempo total, sempre com um valor determinístico
|
|
69
|
-
* ao final (achou o resultado, ou desistiu — nunca fica pendurado).
|
|
70
|
-
*/
|
|
71
|
-
async function waitForRemoteResult(dedupKey, pollIntervalMs, maxWaitMs) {
|
|
72
|
-
const deadline = Date.now() + maxWaitMs;
|
|
73
|
-
while (Date.now() < deadline) {
|
|
74
|
-
await sleep(pollIntervalMs);
|
|
75
|
-
const entry = await safeDedupCall('get', () => dedupStore.get(dedupKey), null);
|
|
76
|
-
if (entry)
|
|
77
|
-
return entry;
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Coalescência local de envios em andamento por `dedupKey` (Bloqueador 2 — Auditoria Codex).
|
|
83
|
-
* A checagem (`get`) e a reserva (criar e guardar a Promise) acontecem no mesmo trecho
|
|
84
|
-
* síncrono — sem `await` entre elas — então duas chamadas concorrentes (`Promise.all`)
|
|
85
|
-
* nunca observam um estado intermediário: a segunda sempre encontra a Promise da primeira
|
|
86
|
-
* já registrada e aguarda o mesmo resultado, em vez de disparar um segundo envio.
|
|
87
|
-
* Garantia real: só dentro deste processo Node (mesma instância do Provider). Atomicidade
|
|
88
|
-
* entre processos/réplicas depende do `dedupStore.reserve` fornecido (RFC §4.2).
|
|
89
|
-
*/
|
|
90
|
-
const localSendsInFlight = new Map();
|
|
91
|
-
/** Resolve `from` e renderiza o template com segurança (Correção 4) — nunca deixa exceção escapar do contrato. */
|
|
92
|
-
function prepareSend(input) {
|
|
93
|
-
let from;
|
|
94
|
-
try {
|
|
95
|
-
from = input.from ?? senderResolver.resolveFrom(input.brand);
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
logSanitized('[transactional-email] SenderResolver falhou:', errorMessage(err), [apiKey]);
|
|
99
|
-
return {
|
|
100
|
-
status: 'failed',
|
|
101
|
-
error: { code: 'unknown', message: 'Falha ao resolver o remetente do e-mail.' },
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
const addressError = validateAddresses({ to: input.to, from, replyTo: input.replyTo });
|
|
105
|
-
if (addressError) {
|
|
106
|
-
return { status: 'failed', error: addressError };
|
|
107
|
-
}
|
|
108
|
-
let rendered;
|
|
109
|
-
try {
|
|
110
|
-
rendered = templateRenderer.render(input.template, input.data);
|
|
111
|
-
}
|
|
112
|
-
catch (err) {
|
|
113
|
-
logSanitized('[transactional-email] TemplateRenderer falhou:', errorMessage(err), [apiKey]);
|
|
114
|
-
return {
|
|
115
|
-
status: 'failed',
|
|
116
|
-
error: { code: 'unknown', message: 'Falha ao renderizar o template do e-mail.' },
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
return { from, rendered };
|
|
120
|
-
}
|
|
121
|
-
async function performSend(input) {
|
|
122
|
-
const prepared = prepareSend(input);
|
|
123
|
-
if ('status' in prepared) {
|
|
124
|
-
return prepared;
|
|
125
|
-
}
|
|
126
|
-
return sendViaResend({
|
|
127
|
-
apiKey: apiKey,
|
|
128
|
-
from: prepared.from,
|
|
129
|
-
to: input.to,
|
|
130
|
-
replyTo: input.replyTo,
|
|
131
|
-
tag: input.tag,
|
|
132
|
-
rendered: prepared.rendered,
|
|
133
|
-
timeoutMs,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
async function sendDeduplicated(input, dedupKey) {
|
|
137
|
-
const existingInFlight = localSendsInFlight.get(dedupKey);
|
|
138
|
-
if (existingInFlight) {
|
|
139
|
-
return existingInFlight;
|
|
140
|
-
}
|
|
141
|
-
const sendPromise = (async () => {
|
|
142
|
-
try {
|
|
143
|
-
let reservation = await safeDedupCall('reserve', () => dedupStore.reserve(dedupKey, MIN_DEDUP_WINDOW_MS), { acquired: true });
|
|
144
|
-
if (!reservation.acquired && reservation.entry) {
|
|
145
|
-
return reservation.entry.result;
|
|
146
|
-
}
|
|
147
|
-
if (!reservation.acquired) {
|
|
148
|
-
// Reserva de outra instância/réplica em andamento, sem resultado ainda disponível
|
|
149
|
-
// (só ocorre com um DedupStore `mode: 'shared'` real — `InMemoryDedupStore` nunca
|
|
150
|
-
// devolve esse caso, ver seu jsdoc). Bloqueador 2 (Certification Round 2): a versão
|
|
151
|
-
// anterior caía direto em `performSend` aqui, reenviando às cegas. Agora espera de
|
|
152
|
-
// forma limitada pelo resultado real da outra instância antes de decidir qualquer coisa.
|
|
153
|
-
const remoteEntry = await waitForRemoteResult(dedupKey, remoteReservationPollIntervalMs, remoteReservationMaxWaitMs);
|
|
154
|
-
if (remoteEntry) {
|
|
155
|
-
return remoteEntry.result;
|
|
156
|
-
}
|
|
157
|
-
// Esgotado o tempo de espera: a reserva remota pode estar órfã (a instância que a
|
|
158
|
-
// detinha morreu sem liberar) — tenta assumir. Se o TTL da reserva remota já expirou
|
|
159
|
-
// no store, esta chamada adquire; caso contrário, ainda pertence a outra instância viva.
|
|
160
|
-
reservation = await safeDedupCall('reserve', () => dedupStore.reserve(dedupKey, MIN_DEDUP_WINDOW_MS), { acquired: true });
|
|
161
|
-
if (!reservation.acquired) {
|
|
162
|
-
if (reservation.entry) {
|
|
163
|
-
return reservation.entry.result;
|
|
164
|
-
}
|
|
165
|
-
// Ainda sem dono claro após a espera + nova tentativa: nunca reenviar às cegas
|
|
166
|
-
// (romperia o invariante de dedup). Falha determinística e retryable — o consumidor
|
|
167
|
-
// decide se tenta de novo (RFC §5, taxonomia por retryability).
|
|
168
|
-
return {
|
|
169
|
-
status: 'failed',
|
|
170
|
-
error: {
|
|
171
|
-
code: 'provider-unavailable',
|
|
172
|
-
message: 'Coordenação de deduplicação não respondeu a tempo; tente novamente.',
|
|
173
|
-
},
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// `reservation.acquired === true`: este chamador é o dono do envio.
|
|
178
|
-
const result = await performSend(input);
|
|
179
|
-
await safeDedupCall('set', () => dedupStore.set(dedupKey, { result, expiresAt: Date.now() + MIN_DEDUP_WINDOW_MS }), undefined);
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
182
|
-
finally {
|
|
183
|
-
localSendsInFlight.delete(dedupKey);
|
|
184
|
-
}
|
|
185
|
-
})();
|
|
186
|
-
localSendsInFlight.set(dedupKey, sendPromise);
|
|
187
|
-
return sendPromise;
|
|
188
|
-
}
|
|
189
|
-
async function sendTransactionalEmail(rawInput) {
|
|
190
|
-
let input = rawInput;
|
|
191
|
-
for (const hook of hooks) {
|
|
192
|
-
if (hook.beforeSend) {
|
|
193
|
-
input = runSafely(() => hook.beforeSend(input), apiKey) ?? input;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
const startedAt = Date.now();
|
|
197
|
-
if (!apiKey) {
|
|
198
|
-
const result = { status: 'skipped' };
|
|
199
|
-
logOutcome(input, result, startedAt, apiKey);
|
|
200
|
-
notifyAfterSend(hooks, input, result, apiKey);
|
|
201
|
-
return result;
|
|
202
|
-
}
|
|
203
|
-
const dedupKey = input.idempotencyKey
|
|
204
|
-
? buildDedupKey(input.to, input.template, input.idempotencyKey)
|
|
205
|
-
: null;
|
|
206
|
-
const result = dedupKey ? await sendDeduplicated(input, dedupKey) : await performSend(input);
|
|
207
|
-
logOutcome(input, result, startedAt, apiKey);
|
|
208
|
-
notifyAfterSend(hooks, input, result, apiKey);
|
|
209
|
-
return result;
|
|
210
|
-
}
|
|
211
|
-
return { sendTransactionalEmail };
|
|
212
|
-
}
|
|
213
|
-
function errorMessage(err) {
|
|
214
|
-
return err instanceof Error ? err.message : String(err);
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Log estruturado mínimo de observabilidade (validação operacional pré-certificação).
|
|
218
|
-
* Sempre sanitizado — nunca inclui a apiKey nem o corpo bruto do provider (Bloqueador 1).
|
|
219
|
-
* Não inclui identificador de correlação porque o contrato atual (`SendTransactionalEmailInput`)
|
|
220
|
-
* não define um — não é inventado aqui (RFC não estende o contrato nesta correção).
|
|
221
|
-
*/
|
|
222
|
-
function logOutcome(input, result, startedAt, apiKey) {
|
|
223
|
-
logSanitizedInfo('[transactional-email] outcome', {
|
|
224
|
-
status: result.status,
|
|
225
|
-
errorCode: result.error?.code,
|
|
226
|
-
durationMs: Date.now() - startedAt,
|
|
227
|
-
template: input.template,
|
|
228
|
-
deduplicated: Boolean(input.idempotencyKey),
|
|
229
|
-
}, [apiKey]);
|
|
230
|
-
}
|
|
231
|
-
/** Hooks nunca podem quebrar o envio principal — falha de um hook é ignorada (logada), não propagada. */
|
|
232
|
-
function runSafely(fn, apiKey) {
|
|
233
|
-
try {
|
|
234
|
-
return fn();
|
|
235
|
-
}
|
|
236
|
-
catch (err) {
|
|
237
|
-
logSanitized('[transactional-email] hook falhou (ignorado):', errorMessage(err), [apiKey]);
|
|
238
|
-
return undefined;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
function notifyAfterSend(hooks, input, result, apiKey) {
|
|
242
|
-
for (const hook of hooks) {
|
|
243
|
-
if (hook.afterSend) {
|
|
244
|
-
runSafely(() => hook.afterSend(input, result), apiKey);
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
}
|
|
11
|
+
export { createTransactionalEmailProvider } from '@baruk/communication';
|
|
248
12
|
//# sourceMappingURL=provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/mail/resend.d.ts
CHANGED
|
@@ -1,13 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* decide se/como enviar). Best-effort: retorna false sem lançar se indisponível
|
|
4
|
-
* ou domínio não verificado — o fluxo de reset não deve quebrar por causa do e-mail.
|
|
5
|
-
*/
|
|
6
|
-
export interface EmailMessage {
|
|
7
|
-
from: string;
|
|
8
|
-
to: string;
|
|
9
|
-
subject: string;
|
|
10
|
-
html: string;
|
|
11
|
-
}
|
|
12
|
-
export declare function sendEmail(apiKey: string | undefined, msg: EmailMessage): Promise<boolean>;
|
|
1
|
+
export { sendEmail, sendEmailWithResult } from '@baruk/communication';
|
|
2
|
+
export type { EmailMessage, SendEmailOptions, SendEmailResult } from '@baruk/communication';
|
|
13
3
|
//# sourceMappingURL=resend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/mail/resend.js
CHANGED
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return res.ok;
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
* RE-EXPORT — a implementação vive em `@baruk/communication`.
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
|
|
5
|
+
* mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
|
|
6
|
+
* comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
|
|
7
|
+
* consumidor receber o comportamento antigo.
|
|
8
|
+
*
|
|
9
|
+
* O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
|
|
10
|
+
*/
|
|
11
|
+
export { sendEmail, sendEmailWithResult } from '@baruk/communication';
|
|
18
12
|
//# sourceMappingURL=resend.js.map
|
package/dist/mail/resend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resend.js","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resend.js","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/** Default — sempre retorna o `from` configurado no Provider, ignorando `brand` (RFC §4.5, precedência 3). */
|
|
3
|
-
export declare class StaticSenderResolver implements SenderResolver {
|
|
4
|
-
private readonly defaultFrom;
|
|
5
|
-
constructor(defaultFrom: EmailAddress);
|
|
6
|
-
resolveFrom(): EmailAddress;
|
|
7
|
-
}
|
|
1
|
+
export { StaticSenderResolver } from '@baruk/communication';
|
|
8
2
|
//# sourceMappingURL=sender-resolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender-resolver.d.ts","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sender-resolver.d.ts","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
/*
|
|
2
|
+
* RE-EXPORT — a implementação vive em `@baruk/communication`.
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
|
|
5
|
+
* mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
|
|
6
|
+
* comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
|
|
7
|
+
* consumidor receber o comportamento antigo.
|
|
8
|
+
*
|
|
9
|
+
* O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
|
|
10
|
+
*/
|
|
11
|
+
export { StaticSenderResolver } from '@baruk/communication';
|
|
11
12
|
//# sourceMappingURL=sender-resolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sender-resolver.js","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sender-resolver.js","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* Default — escape hatch para consumidores sem motor de template (RFC §4.3, melhoria recomendada).
|
|
4
|
-
* `data` já deve chegar como `{ subject, html, text? }` pronto; `template` é usado só como
|
|
5
|
-
* rótulo opaco (logging/tag), nunca resolvido.
|
|
6
|
-
*/
|
|
7
|
-
export declare class PassthroughTemplateRenderer implements TemplateRenderer {
|
|
8
|
-
render(template: string, data: Record<string, unknown>): RenderedEmail;
|
|
9
|
-
}
|
|
1
|
+
export { PassthroughTemplateRenderer } from '@baruk/communication';
|
|
10
2
|
//# sourceMappingURL=template-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
1
|
+
/*
|
|
2
|
+
* RE-EXPORT — a implementação vive em `@baruk/communication`.
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
|
|
5
|
+
* mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
|
|
6
|
+
* comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
|
|
7
|
+
* consumidor receber o comportamento antigo.
|
|
8
|
+
*
|
|
9
|
+
* O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
|
|
5
10
|
*/
|
|
6
|
-
export
|
|
7
|
-
render(template, data) {
|
|
8
|
-
const subject = data['subject'];
|
|
9
|
-
const html = data['html'];
|
|
10
|
-
const text = data['text'];
|
|
11
|
-
if (typeof subject !== 'string' || typeof html !== 'string') {
|
|
12
|
-
throw new Error(`PassthroughTemplateRenderer: template "${template}" exige data.subject e data.html como string`);
|
|
13
|
-
}
|
|
14
|
-
return { subject, html, text: typeof text === 'string' ? text : undefined };
|
|
15
|
-
}
|
|
16
|
-
}
|
|
11
|
+
export { PassthroughTemplateRenderer } from '@baruk/communication';
|
|
17
12
|
//# sourceMappingURL=template-renderer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A porta ÚNICA de e-mail para os fluxos que não passam pelo motor multicanal.
|
|
3
|
+
*
|
|
4
|
+
* ## O bloqueador que este arquivo fecha
|
|
5
|
+
*
|
|
6
|
+
* `SINGLE_DISPATCH_AUTHORITY=FAIL`. O guard da rodada anterior varria só
|
|
7
|
+
* `packages/core/src` e não enxergava o que estava do lado de fora:
|
|
8
|
+
*
|
|
9
|
+
* apps/api/src/routes/admin.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
10
|
+
* apps/api/src/routes/documents.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
11
|
+
* apps/api/src/routes/auth.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
12
|
+
* packages/core/src/subscription-billing/service.ts → sendEmail(cfg.resendApiKey, …)
|
|
13
|
+
*
|
|
14
|
+
* Quatro caminhos de APLICAÇÃO chamando o transporte direto, cada um lendo a
|
|
15
|
+
* credencial e o remetente por conta própria. Não é um cliente provider paralelo
|
|
16
|
+
* — é o mesmo transporte —, mas é código de domínio alcançando a borda de envio
|
|
17
|
+
* sem passar por autoridade nenhuma, que é o que o adendo §12 proíbe.
|
|
18
|
+
*
|
|
19
|
+
* ## O que ela NÃO é
|
|
20
|
+
*
|
|
21
|
+
* **Não é o motor multicanal, e não finge ser.** Convite, reconvite, acesso ao
|
|
22
|
+
* Portal e recuperação de senha são comunicação de IDENTIDADE: acontecem antes de
|
|
23
|
+
* existir cliente, antes de existir consentimento de contribuinte, e — no caso do
|
|
24
|
+
* `forgot-password` — antes de existir sessão de onde tirar um tenant. Passá-los
|
|
25
|
+
* pelo `dispatch` exigiria inventar `recipientRef`, `subjectRef`, template
|
|
26
|
+
* aprovado e conta de canal para cada um; a fase que fizer isso é própria, e
|
|
27
|
+
* `AUTH_EMAIL_NOT_ON_SHARED_ENGINE` fica registrada como dívida.
|
|
28
|
+
*
|
|
29
|
+
* O que ela é: um **adapter de entrada** (§13). Fluxo legado sem cliente provider
|
|
30
|
+
* próprio, com uma porta só, nominal e vigiada.
|
|
31
|
+
*
|
|
32
|
+
* ## O que ela acrescenta de verdade
|
|
33
|
+
*
|
|
34
|
+
* Uma barreira que só renomeia o caminho não é correção. Estes fluxos ganham,
|
|
35
|
+
* aqui, três coisas que nenhum deles tinha:
|
|
36
|
+
*
|
|
37
|
+
* 1. **Idempotência de provider.** Nenhum dos quatro mandava `Idempotency-Key`.
|
|
38
|
+
* Duplo-clique em "convidar" ou retry de cron produzia duas mensagens
|
|
39
|
+
* idênticas na caixa de quem recebe. A chave é derivada do CONTEÚDO (ver
|
|
40
|
+
* `identityFor`), então retry idêntico dedupe e reconvite legítimo — que
|
|
41
|
+
* carrega um token novo — passa.
|
|
42
|
+
* 2. **Um lugar só para a credencial.** `process.env.RESEND_API_KEY` deixa de
|
|
43
|
+
* ser lido em quatro arquivos. Quatro leituras é onde uma delas fica para
|
|
44
|
+
* trás no dia da rotação.
|
|
45
|
+
* 3. **Um alvo só para o guard.** O guard de fronteira global proíbe `sendEmail*`
|
|
46
|
+
* em todo o repositório exceto no transporte, nos adapters do motor e aqui.
|
|
47
|
+
*/
|
|
48
|
+
import { type EmailMessage, type SendEmailResult } from './resend.js';
|
|
49
|
+
/**
|
|
50
|
+
* De qual fluxo o e-mail é. Vocabulário FECHADO, e é o ponto.
|
|
51
|
+
*
|
|
52
|
+
* Um parâmetro `string` livre transformaria esta porta num `sendEmail` com outro
|
|
53
|
+
* nome: qualquer chamador novo entraria sem que ninguém revisasse. Acrescentar um
|
|
54
|
+
* membro aqui é uma linha de diff que aparece na revisão — que é exatamente o
|
|
55
|
+
* atrito desejado, porque o destino certo de um fluxo novo é o motor
|
|
56
|
+
* compartilhado, não esta lista.
|
|
57
|
+
*/
|
|
58
|
+
export type TransactionalEmailKind =
|
|
59
|
+
/** Convite de usuário interno do escritório (staff). */
|
|
60
|
+
'staff_invite'
|
|
61
|
+
/** Reemissão do convite de staff — invalida o link anterior. */
|
|
62
|
+
| 'staff_reinvite'
|
|
63
|
+
/** Convite de acesso ao Portal do Contribuinte. */
|
|
64
|
+
| 'portal_invite'
|
|
65
|
+
/** Recuperação de senha. Pré-sessão: não há tenant de onde derivar contexto. */
|
|
66
|
+
| 'password_reset'
|
|
67
|
+
/**
|
|
68
|
+
* Cobrança da ASSINATURA do escritório (BILL-01).
|
|
69
|
+
*
|
|
70
|
+
* É o Baruk cobrando o cliente do Baruk — o outro lado do balcão, sem régua de
|
|
71
|
+
* etapas, sem consentimento de contribuinte e sem multi-marca. Migrá-lo para o
|
|
72
|
+
* motor é trabalho próprio e está registrado como dívida NÃO bloqueante.
|
|
73
|
+
*/
|
|
74
|
+
| 'subscription_dunning';
|
|
75
|
+
export interface TransactionalEmailRequest {
|
|
76
|
+
kind: TransactionalEmailKind;
|
|
77
|
+
message: EmailMessage;
|
|
78
|
+
/**
|
|
79
|
+
* Credencial do provider.
|
|
80
|
+
*
|
|
81
|
+
* Explícita quando o chamador já a tem injetada (o cron de assinatura recebe a
|
|
82
|
+
* dele por configuração); omitida quando o chamador é uma rota HTTP, e nesse
|
|
83
|
+
* caso vale a do ambiente. O valor entra e morre aqui: nunca é devolvido,
|
|
84
|
+
* logado nem anexado ao resultado.
|
|
85
|
+
*/
|
|
86
|
+
apiKey?: string;
|
|
87
|
+
/**
|
|
88
|
+
* Transporte injetável. **Nenhum teste deve alcançar a rede real.**
|
|
89
|
+
*
|
|
90
|
+
* Mesmo ponto de injeção que `EmailAdapterConfig` do motor multicanal já
|
|
91
|
+
* expõe, e pela mesma razão: a alternativa seria o teste exportar
|
|
92
|
+
* `RESEND_ALLOW_IN_TEST=1`, que vale para o PROCESSO inteiro e desligaria a
|
|
93
|
+
* supressão de todas as suítes que rodam ao lado — inclusive as que chamam a
|
|
94
|
+
* rota real de convite.
|
|
95
|
+
*/
|
|
96
|
+
fetchImpl?: typeof fetch;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Envia, com o desfecho detalhado.
|
|
100
|
+
*
|
|
101
|
+
* Best-effort como sempre foi: devolve o resultado, nunca lança. Quem chama
|
|
102
|
+
* decide o que fazer — e continua podendo distinguir "o provider recusou" de "a
|
|
103
|
+
* mensagem saiu", que é a distinção que fez o Portal ficar meses sem acesso
|
|
104
|
+
* ativo quando ela não existia.
|
|
105
|
+
*/
|
|
106
|
+
export declare function sendTransactionalOutboundWithResult(req: TransactionalEmailRequest): Promise<SendEmailResult>;
|
|
107
|
+
/**
|
|
108
|
+
* Envia e devolve só se saiu.
|
|
109
|
+
*
|
|
110
|
+
* A forma que os quatro chamadores legados já usavam (`boolean`), preservada para
|
|
111
|
+
* que a consolidação não mude a resposta de nenhuma rota — nem o `201` do
|
|
112
|
+
* convite, nem o campo `invitationEmailSent` que a tela lê.
|
|
113
|
+
*/
|
|
114
|
+
export declare function sendTransactionalOutbound(req: TransactionalEmailRequest): Promise<boolean>;
|
|
115
|
+
//# sourceMappingURL=transactional-outbound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactional-outbound.d.ts","sourceRoot":"","sources":["../../src/mail/transactional-outbound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EAAuB,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3F;;;;;;;;GAQG;AACH,MAAM,MAAM,sBAAsB;AAChC,wDAAwD;AACtD,cAAc;AAChB,gEAAgE;GAC9D,gBAAgB;AAClB,mDAAmD;GACjD,eAAe;AACjB,gFAAgF;GAC9E,gBAAgB;AAClB;;;;;;GAMG;GACD,sBAAsB,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAyCD;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,GAAG,EAAE,yBAAyB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAK1B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhG"}
|