@baruk/core 0.3.1 → 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 +85 -0
- 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 +406 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +125 -3
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/types.js +1 -0
- package/dist/cjs/legal/types.js.map +1 -1
- 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 +109 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -8
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +125 -3
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +1 -1
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/types.d.ts +32 -1
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js +1 -0
- package/dist/legal/types.js.map +1 -1
- 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 +13 -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,113 @@
|
|
|
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 { createHash } from 'node:crypto';
|
|
49
|
+
import { sendEmailWithResult } from './resend.js';
|
|
50
|
+
/**
|
|
51
|
+
* A chave que o provider vai deduplicar.
|
|
52
|
+
*
|
|
53
|
+
* Derivada do CONTEÚDO — destinatário, assunto, remetente e corpo — e não de um
|
|
54
|
+
* identificador de negócio. A escolha decide o comportamento em produção:
|
|
55
|
+
*
|
|
56
|
+
* • retry idêntico (duplo-clique, reexecução de cron) produz a MESMA chave, e o
|
|
57
|
+
* Resend devolve a resposta original sem mandar a segunda mensagem;
|
|
58
|
+
* • reconvite legítimo carrega um token novo no corpo, logo uma chave nova, e
|
|
59
|
+
* sai normalmente.
|
|
60
|
+
*
|
|
61
|
+
* Derivar de `kind + destinatário` faria o oposto e seria pior que não ter chave:
|
|
62
|
+
* o reconvite legítimo seria silenciosamente descartado pelo provider dentro da
|
|
63
|
+
* janela de 24 h, e ninguém veria — a resposta de um replay é `200`.
|
|
64
|
+
*
|
|
65
|
+
* `sha256` hexadecimal, 64 caracteres, dentro do limite de 1 a 256 do provider.
|
|
66
|
+
*/
|
|
67
|
+
function identityFor(req) {
|
|
68
|
+
/*
|
|
69
|
+
* Serializado como ARRAY, e não concatenado com um separador.
|
|
70
|
+
*
|
|
71
|
+
* Concatenar campos com um caractere qualquer é ambíguo: `to='a b'` com
|
|
72
|
+
* `from='c'` produz a mesma cadeia que `to='a'` com `from='b c'`, e duas
|
|
73
|
+
* mensagens diferentes ganhariam a mesma chave — o provider descartaria a
|
|
74
|
+
* segunda como replay. `JSON.stringify` de um array escapa os campos e o
|
|
75
|
+
* comprimento fica implícito na estrutura, então nenhum conteúdo consegue
|
|
76
|
+
* imitar a fronteira entre dois campos.
|
|
77
|
+
*/
|
|
78
|
+
const material = JSON.stringify([
|
|
79
|
+
req.kind,
|
|
80
|
+
req.message.to,
|
|
81
|
+
req.message.from,
|
|
82
|
+
req.message.subject,
|
|
83
|
+
req.message.html,
|
|
84
|
+
req.message.text ?? null,
|
|
85
|
+
]);
|
|
86
|
+
return createHash('sha256').update(material, 'utf8').digest('hex');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Envia, com o desfecho detalhado.
|
|
90
|
+
*
|
|
91
|
+
* Best-effort como sempre foi: devolve o resultado, nunca lança. Quem chama
|
|
92
|
+
* decide o que fazer — e continua podendo distinguir "o provider recusou" de "a
|
|
93
|
+
* mensagem saiu", que é a distinção que fez o Portal ficar meses sem acesso
|
|
94
|
+
* ativo quando ela não existia.
|
|
95
|
+
*/
|
|
96
|
+
export async function sendTransactionalOutboundWithResult(req) {
|
|
97
|
+
return sendEmailWithResult(req.apiKey ?? process.env.RESEND_API_KEY, req.message, {
|
|
98
|
+
idempotencyKey: identityFor(req),
|
|
99
|
+
fetchImpl: req.fetchImpl,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Envia e devolve só se saiu.
|
|
104
|
+
*
|
|
105
|
+
* A forma que os quatro chamadores legados já usavam (`boolean`), preservada para
|
|
106
|
+
* que a consolidação não mude a resposta de nenhuma rota — nem o `201` do
|
|
107
|
+
* convite, nem o campo `invitationEmailSent` que a tela lê.
|
|
108
|
+
*/
|
|
109
|
+
export async function sendTransactionalOutbound(req) {
|
|
110
|
+
const result = await sendTransactionalOutboundWithResult(req);
|
|
111
|
+
return result.ok;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=transactional-outbound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactional-outbound.js","sourceRoot":"","sources":["../../src/mail/transactional-outbound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAA2C,MAAM,aAAa,CAAC;AAqD3F;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,WAAW,CAAC,GAA8B;IACjD;;;;;;;;;OASG;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,GAAG,CAAC,IAAI;QACR,GAAG,CAAC,OAAO,CAAC,EAAE;QACd,GAAG,CAAC,OAAO,CAAC,IAAI;QAChB,GAAG,CAAC,OAAO,CAAC,OAAO;QACnB,GAAG,CAAC,OAAO,CAAC,IAAI;QAChB,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI;KACzB,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,GAA8B;IAE9B,OAAO,mBAAmB,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE;QAChF,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC;QAChC,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAA8B;IAC5E,MAAM,MAAM,GAAG,MAAM,mCAAmC,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC"}
|
package/dist/mail/types.d.ts
CHANGED
|
@@ -1,143 +1,3 @@
|
|
|
1
|
-
export type EmailAddress
|
|
2
|
-
|
|
3
|
-
export type DeliveryStatus = 'sent' | 'failed' | 'skipped';
|
|
4
|
-
/**
|
|
5
|
-
* Códigos organizados por retryability (RFC §5), não por causa técnica:
|
|
6
|
-
* - transitório (retry seguro): "timeout" | "provider-unavailable"
|
|
7
|
-
* - permanente (retry nunca resolve): "invalid-recipient" | "provider-rejected"
|
|
8
|
-
* - "unknown" trata-se como permanente por padrão
|
|
9
|
-
*/
|
|
10
|
-
export type DeliveryErrorCode = 'timeout' | 'provider-unavailable' | 'invalid-recipient' | 'provider-rejected' | 'unknown';
|
|
11
|
-
export interface DeliveryResult {
|
|
12
|
-
status: DeliveryStatus;
|
|
13
|
-
/** id retornado pelo provider (ex.: id do Resend), presente apenas quando status === 'sent'. */
|
|
14
|
-
providerId?: string;
|
|
15
|
-
/**
|
|
16
|
-
* status === 'skipped' DEVE ser tratado pelo consumidor como "não entregue" (falha suave),
|
|
17
|
-
* nunca como sucesso (RFC §5, R2).
|
|
18
|
-
*/
|
|
19
|
-
error?: {
|
|
20
|
-
code: DeliveryErrorCode;
|
|
21
|
-
/** Nunca contém a credencial do provider (invariante, RFC §4.2). */
|
|
22
|
-
message: string;
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
export interface SendTransactionalEmailInput {
|
|
26
|
-
to: EmailAddress;
|
|
27
|
-
/** id resolvido pelo TemplateRenderer do consumidor (RFC §4.3). */
|
|
28
|
-
template: string;
|
|
29
|
-
data: Record<string, unknown>;
|
|
30
|
-
/**
|
|
31
|
-
* Dedup só se aplica quando fornecida explicitamente (RFC §4.2, G2).
|
|
32
|
-
* Sem idempotencyKey, nenhuma deduplicação é feita.
|
|
33
|
-
*/
|
|
34
|
-
idempotencyKey?: string;
|
|
35
|
-
tag?: string;
|
|
36
|
-
/** Maior precedência de resolução de remetente (RFC §4.5). */
|
|
37
|
-
from?: EmailAddress;
|
|
38
|
-
/** Usado pelo SenderResolver quando `from` não é fornecido (RFC §4.5). */
|
|
39
|
-
brand?: string;
|
|
40
|
-
replyTo?: EmailAddress;
|
|
41
|
-
}
|
|
42
|
-
export interface TransactionalEmailCapability {
|
|
43
|
-
sendTransactionalEmail(input: SendTransactionalEmailInput): Promise<DeliveryResult>;
|
|
44
|
-
}
|
|
45
|
-
export interface RenderedEmail {
|
|
46
|
-
subject: string;
|
|
47
|
-
html: string;
|
|
48
|
-
text?: string;
|
|
49
|
-
}
|
|
50
|
-
/** Ponto de extensão plugável — motor de template fica fora do core (RFC §4.3). */
|
|
51
|
-
export interface TemplateRenderer {
|
|
52
|
-
render(template: string, data: Record<string, unknown>): RenderedEmail;
|
|
53
|
-
}
|
|
54
|
-
/** Ponto de extensão plugável — resolução de remetente por marca/tenant (RFC §4.5). */
|
|
55
|
-
export interface SenderResolver {
|
|
56
|
-
resolveFrom(brand?: string | undefined): EmailAddress;
|
|
57
|
-
}
|
|
58
|
-
/** Ponto de extensão plugável — tracking/observação fica fora do core (RFC §4.8). */
|
|
59
|
-
export interface DeliveryHook {
|
|
60
|
-
beforeSend?(input: SendTransactionalEmailInput): SendTransactionalEmailInput;
|
|
61
|
-
afterSend?(input: SendTransactionalEmailInput, result: DeliveryResult): void;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* "shared": store comum entre instâncias — garante o invariante de dedup de fato.
|
|
65
|
-
* "in-memory": cache local por instância — best-effort, NÃO garante dedup sob múltiplas réplicas
|
|
66
|
-
* (RFC §4.2 exige que essa distinção seja declarada explicitamente, não assumida).
|
|
67
|
-
*/
|
|
68
|
-
export type DedupStoreMode = 'shared' | 'in-memory';
|
|
69
|
-
export interface DedupEntry {
|
|
70
|
-
result: DeliveryResult;
|
|
71
|
-
expiresAt: number;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Resultado de `DedupStore.reserve` (Bloqueador 2 — Auditoria Codex, RFC §4.2, refinado na
|
|
75
|
-
* Certification Round 2 — 2026-07-21).
|
|
76
|
-
* `acquired: true` — este chamador se tornou o dono do envio: deve enviar e, ao final,
|
|
77
|
-
* chamar `set` com o resultado (sucesso ou falha) para liberar a reserva.
|
|
78
|
-
* `acquired: false` — já existe uma entrada: `entry` traz o resultado assentado quando
|
|
79
|
-
* disponível, ou `null` quando outra chamada está em andamento e ainda não terminou
|
|
80
|
-
* (só pode ocorrer entre processos/réplicas diferentes — dentro do mesmo processo Node,
|
|
81
|
-
* `reserve` nunca retorna `entry: null`, porque o Provider já resolve a coalescência
|
|
82
|
-
* local antes de chegar a chamar `reserve` uma segunda vez para a mesma chave).
|
|
83
|
-
*
|
|
84
|
-
* **Contrato real do Provider canônico para `entry: null`** (Certification Round 2 —
|
|
85
|
-
* antes desta versão, o Provider tratava esse caso como "pode enviar", o que reenviava
|
|
86
|
-
* às cegas e quebrava o próprio invariante de dedup): o Provider aguarda de forma limitada
|
|
87
|
-
* (`remoteReservationPollIntervalMs`/`remoteReservationMaxWaitMs`) por um resultado assentado
|
|
88
|
-
* antes de decidir qualquer coisa; se o tempo se esgota, tenta assumir a reserva (presumindo-a
|
|
89
|
-
* órfã) e, falhando isso também, devolve `DeliveryResult` `failed`/`provider-unavailable`
|
|
90
|
-
* (retryable) em vez de enviar de novo. Uma implementação `mode: 'shared'` real precisa expirar
|
|
91
|
-
* reservas órfãs via TTL no próprio store para que a segunda tentativa de `reserve` funcione.
|
|
92
|
-
*/
|
|
93
|
-
export type DedupReservation = {
|
|
94
|
-
acquired: true;
|
|
95
|
-
} | {
|
|
96
|
-
acquired: false;
|
|
97
|
-
entry: DedupEntry | null;
|
|
98
|
-
};
|
|
99
|
-
export interface DedupStore {
|
|
100
|
-
readonly mode: DedupStoreMode;
|
|
101
|
-
/** DEVE retornar `null` para entradas já expiradas — o Provider não reconfere `expiresAt`. */
|
|
102
|
-
get(key: string): Promise<DedupEntry | null> | DedupEntry | null;
|
|
103
|
-
set(key: string, entry: DedupEntry): Promise<void> | void;
|
|
104
|
-
/**
|
|
105
|
-
* Operação atômica de "reservar ou ler" — é o mecanismo real de deduplicação sob
|
|
106
|
-
* concorrência (Bloqueador 2). Implementações `mode: 'shared'` DEVEM usar um primitivo
|
|
107
|
-
* atômico do próprio store (ex.: `SETNX`/Lua no Redis, `INSERT ... ON CONFLICT DO NOTHING`
|
|
108
|
-
* no Postgres) para que a garantia valha entre processos/réplicas, não só dentro de um
|
|
109
|
-
* processo Node. `InMemoryDedupStore` (`mode: 'in-memory'`) só garante atomicidade dentro
|
|
110
|
-
* do mesmo processo — nunca prometa mais que isso para um store que não seja distribuído.
|
|
111
|
-
*/
|
|
112
|
-
reserve(key: string, ttlMs: number): Promise<DedupReservation> | DedupReservation;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Versão do contrato público desta capability (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 §12, SemVer próprio
|
|
116
|
-
* de capability — independente da versão do pacote `@baruk/core`, que versiona o motor inteiro, não uma
|
|
117
|
-
* capability isolada). `0.2.1`: hardening pré-certificação (Capability Certification 001, Auditoria Codex)
|
|
118
|
-
* — sanitização de segredos, dedup atômica, validação de endereço, exceções internas contidas. `0.2.2`:
|
|
119
|
-
* hardening pós-Certification Round 2 — sanitização genérica estendida (URI-embedded credentials, token
|
|
120
|
-
* estruturado, alta entropia) e coalescência distribuída real (espera limitada por reserva remota em
|
|
121
|
-
* andamento, nunca reenvio às cegas). Nenhuma das duas mudou assinatura pública (patch, não minor/major).
|
|
122
|
-
*/
|
|
123
|
-
export declare const TRANSACTIONAL_EMAIL_CONTRACT_VERSION = "0.2.2";
|
|
124
|
-
/** Janela mínima de deduplicação exigida pela RFC §4.2 (24h) — implementações podem manter por mais tempo, nunca menos. */
|
|
125
|
-
export declare const MIN_DEDUP_WINDOW_MS: number;
|
|
126
|
-
/** Timeout padrão do Provider (RFC §5 — herdado empiricamente da implementação mais madura do inventário). */
|
|
127
|
-
export declare const DEFAULT_TIMEOUT_MS = 12000;
|
|
128
|
-
/**
|
|
129
|
-
* Default de poll ao aguardar uma reserva remota em andamento num `DedupStore` `mode: 'shared'`
|
|
130
|
-
* (Bloqueador 2 — Certification Round 2). Baixo o suficiente para não atrasar percebivelmente
|
|
131
|
-
* o caso comum (reserva local, sem espera nenhuma).
|
|
132
|
-
*/
|
|
133
|
-
export declare const DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = 200;
|
|
134
|
-
/**
|
|
135
|
-
* Default de tempo máximo de espera por uma reserva remota antes de tentar assumi-la e,
|
|
136
|
-
* falhando isso, devolver falha determinística retryable (Bloqueador 2 — Certification Round 2).
|
|
137
|
-
* Maior que `DEFAULT_TIMEOUT_MS` — dá à instância dona tempo de terminar o próprio envio
|
|
138
|
-
* (que pode levar até `DEFAULT_TIMEOUT_MS`) antes desta instância desistir de esperar.
|
|
139
|
-
*/
|
|
140
|
-
export declare const DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = 15000;
|
|
141
|
-
/** Utilitário de conveniência para o consumidor decidir retry — não usado internamente pelo core (RFC §5). */
|
|
142
|
-
export declare function isRetryableError(code: DeliveryErrorCode): boolean;
|
|
1
|
+
export type { EmailAddress, DeliveryStatus, DeliveryErrorCode, DeliveryResult, SendTransactionalEmailInput, TransactionalEmailCapability, RenderedEmail, TemplateRenderer, SenderResolver, DeliveryHook, DedupStoreMode, DedupEntry, DedupReservation, DedupStore, } from '@baruk/communication';
|
|
2
|
+
export { DEFAULT_TIMEOUT_MS, MIN_DEDUP_WINDOW_MS, TRANSACTIONAL_EMAIL_CONTRACT_VERSION, DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS, DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS, isRetryableError, } from '@baruk/communication';
|
|
143
3
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/mail/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mail/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/mail/types.ts"],"names":[],"mappings":"AAUA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oCAAoC,EACpC,2CAA2C,EAC3C,sCAAsC,EACtC,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
|
package/dist/mail/types.js
CHANGED
|
@@ -1,34 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
// Ver docs/governance/RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001.md no repo baruk-ecosystem.
|
|
3
|
-
/**
|
|
4
|
-
* Versão do contrato público desta capability (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 §12, SemVer próprio
|
|
5
|
-
* de capability — independente da versão do pacote `@baruk/core`, que versiona o motor inteiro, não uma
|
|
6
|
-
* capability isolada). `0.2.1`: hardening pré-certificação (Capability Certification 001, Auditoria Codex)
|
|
7
|
-
* — sanitização de segredos, dedup atômica, validação de endereço, exceções internas contidas. `0.2.2`:
|
|
8
|
-
* hardening pós-Certification Round 2 — sanitização genérica estendida (URI-embedded credentials, token
|
|
9
|
-
* estruturado, alta entropia) e coalescência distribuída real (espera limitada por reserva remota em
|
|
10
|
-
* andamento, nunca reenvio às cegas). Nenhuma das duas mudou assinatura pública (patch, não minor/major).
|
|
11
|
-
*/
|
|
12
|
-
export const TRANSACTIONAL_EMAIL_CONTRACT_VERSION = '0.2.2';
|
|
13
|
-
/** Janela mínima de deduplicação exigida pela RFC §4.2 (24h) — implementações podem manter por mais tempo, nunca menos. */
|
|
14
|
-
export const MIN_DEDUP_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
15
|
-
/** Timeout padrão do Provider (RFC §5 — herdado empiricamente da implementação mais madura do inventário). */
|
|
16
|
-
export const DEFAULT_TIMEOUT_MS = 12_000;
|
|
17
|
-
/**
|
|
18
|
-
* Default de poll ao aguardar uma reserva remota em andamento num `DedupStore` `mode: 'shared'`
|
|
19
|
-
* (Bloqueador 2 — Certification Round 2). Baixo o suficiente para não atrasar percebivelmente
|
|
20
|
-
* o caso comum (reserva local, sem espera nenhuma).
|
|
21
|
-
*/
|
|
22
|
-
export const DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = 200;
|
|
23
|
-
/**
|
|
24
|
-
* Default de tempo máximo de espera por uma reserva remota antes de tentar assumi-la e,
|
|
25
|
-
* falhando isso, devolver falha determinística retryable (Bloqueador 2 — Certification Round 2).
|
|
26
|
-
* Maior que `DEFAULT_TIMEOUT_MS` — dá à instância dona tempo de terminar o próprio envio
|
|
27
|
-
* (que pode levar até `DEFAULT_TIMEOUT_MS`) antes desta instância desistir de esperar.
|
|
28
|
-
*/
|
|
29
|
-
export const DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = 15_000;
|
|
30
|
-
/** Utilitário de conveniência para o consumidor decidir retry — não usado internamente pelo core (RFC §5). */
|
|
31
|
-
export function isRetryableError(code) {
|
|
32
|
-
return code === 'timeout' || code === 'provider-unavailable';
|
|
33
|
-
}
|
|
1
|
+
export { DEFAULT_TIMEOUT_MS, MIN_DEDUP_WINDOW_MS, TRANSACTIONAL_EMAIL_CONTRACT_VERSION, DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS, DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS, isRetryableError, } from '@baruk/communication';
|
|
34
2
|
//# sourceMappingURL=types.js.map
|
package/dist/mail/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mail/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/mail/types.ts"],"names":[],"mappings":"AA0BA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,oCAAoC,EACpC,2CAA2C,EAC3C,sCAAsC,EACtC,gBAAgB,GACjB,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provisionamento de usuário do Portal do Contribuinte.
|
|
4
|
+
*
|
|
5
|
+
* Fecha um gap que a Discovery encontrou e que tornava o Portal inoperável em
|
|
6
|
+
* produção: `inviteUser` grava `'staff'` literal, `POST /v1/users` não aceita
|
|
7
|
+
* `userType`, e `ensurePortalAccess` só era chamada por seeds e testes. Não
|
|
8
|
+
* existia caminho de produto para dar um único usuário ao Portal — só SQL
|
|
9
|
+
* manual.
|
|
10
|
+
*
|
|
11
|
+
* A diferença para `inviteUser` não é cosmética: além de `user_type`, um usuário
|
|
12
|
+
* de portal exige o vínculo em `client_portal_access`, que é o que a RLS usa
|
|
13
|
+
* para resolver `app.current_client`. Sem ele, o login funciona e o portal fica
|
|
14
|
+
* vazio.
|
|
15
|
+
*/
|
|
16
|
+
export interface InvitePortalUserInput {
|
|
17
|
+
clientId: string;
|
|
18
|
+
email: string;
|
|
19
|
+
fullName: string;
|
|
20
|
+
invitedBy: string;
|
|
21
|
+
}
|
|
22
|
+
export interface InvitePortalUserResult {
|
|
23
|
+
userId: string;
|
|
24
|
+
email: string;
|
|
25
|
+
fullName: string;
|
|
26
|
+
clientId: string;
|
|
27
|
+
/**
|
|
28
|
+
* Emitido para usuário novo e para quem foi convidado e ainda não ativou
|
|
29
|
+
* (reenvio). Quem já ativou usa a própria senha e não recebe token — convite
|
|
30
|
+
* não é caminho para redefinir senha de conta ativa.
|
|
31
|
+
*/
|
|
32
|
+
activationToken: string | null;
|
|
33
|
+
/** true quando o acesso já existia e nada foi criado. */
|
|
34
|
+
alreadyHadAccess: boolean;
|
|
35
|
+
/** true quando o convite reemitiu token para quem ainda não havia ativado. */
|
|
36
|
+
isReinvite: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function invitePortalUser(tx: Tx, input: InvitePortalUserInput): Promise<InvitePortalUserResult>;
|
|
39
|
+
export interface PortalUserSummary {
|
|
40
|
+
userId: string;
|
|
41
|
+
email: string;
|
|
42
|
+
fullName: string;
|
|
43
|
+
status: string;
|
|
44
|
+
accessStatus: string;
|
|
45
|
+
lastLoginAt: string | null;
|
|
46
|
+
}
|
|
47
|
+
export declare function listPortalUsers(tx: Tx, clientId: string): Promise<PortalUserSummary[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Revoga o acesso. Não apaga o usuário nem a trilha: quem enviou um documento
|
|
50
|
+
* continua identificável depois de perder o acesso — é justamente isso que
|
|
51
|
+
* torna a prova utilizável meses depois.
|
|
52
|
+
*/
|
|
53
|
+
export declare function revokePortalAccess(tx: Tx, input: {
|
|
54
|
+
clientId: string;
|
|
55
|
+
userId: string;
|
|
56
|
+
revokedBy: string;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
//# sourceMappingURL=provisioning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.d.ts","sourceRoot":"","sources":["../../src/portal/provisioning.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAK1C;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yDAAyD;IACzD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8EAA8E;IAC9E,UAAU,EAAE,OAAO,CAAC;CACrB;AAID,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC,CA+FjC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B5F;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { ConflictError, NotFoundError, uuidv7 } from '@baruk/shared';
|
|
2
|
+
import { appendAudit } from '../audit/audit.js';
|
|
3
|
+
import { createActivationToken } from '../auth/password-reset.js';
|
|
4
|
+
import { setUserRole } from '../users/repository.js';
|
|
5
|
+
const PORTAL_ROLE_KEY = 'client_titular';
|
|
6
|
+
export async function invitePortalUser(tx, input) {
|
|
7
|
+
const tenantId = await currentTenantId(tx);
|
|
8
|
+
// O cliente precisa existir NESTE tenant. A RLS já garantiria, mas uma
|
|
9
|
+
// mensagem clara vale mais que um erro de FK.
|
|
10
|
+
const client = await tx `
|
|
11
|
+
SELECT id FROM client WHERE id = ${input.clientId} AND deleted_at IS NULL
|
|
12
|
+
`;
|
|
13
|
+
if (!client[0])
|
|
14
|
+
throw new NotFoundError('Cliente não encontrado');
|
|
15
|
+
const existing = await tx `
|
|
16
|
+
SELECT id, full_name, user_type, status FROM "user"
|
|
17
|
+
WHERE email = ${input.email} AND deleted_at IS NULL
|
|
18
|
+
`;
|
|
19
|
+
let userId;
|
|
20
|
+
let fullName;
|
|
21
|
+
let isNewUser;
|
|
22
|
+
// Reconvidar quem ainda não ativou precisa emitir um token novo. Sem isto o
|
|
23
|
+
// usuário fica preso: o primeiro convite não chegou (ou expirou) e nenhum
|
|
24
|
+
// reenvio produz link, porque só o cadastro inicial emitia token.
|
|
25
|
+
let isPendingActivation = false;
|
|
26
|
+
if (existing[0]) {
|
|
27
|
+
// Um e-mail de staff não vira acesso de portal por convite. Os dois tipos
|
|
28
|
+
// têm superfícies e escopos distintos, e converter silenciosamente daria a
|
|
29
|
+
// um colaborador do escritório uma sessão de cliente.
|
|
30
|
+
if (existing[0].user_type !== 'client_portal') {
|
|
31
|
+
throw new ConflictError('Este e-mail já pertence a um usuário interno. Use um e-mail diferente para o acesso do cliente.');
|
|
32
|
+
}
|
|
33
|
+
userId = existing[0].id;
|
|
34
|
+
fullName = existing[0].full_name;
|
|
35
|
+
isNewUser = false;
|
|
36
|
+
// Só quem ainda não ativou recebe token novo. Emitir para um usuário já
|
|
37
|
+
// ativo transformaria o convite em redefinição de senha à revelia do
|
|
38
|
+
// cliente — quem convida não pode provocar isso.
|
|
39
|
+
isPendingActivation = existing[0].status === 'invited';
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
userId = uuidv7();
|
|
43
|
+
fullName = input.fullName;
|
|
44
|
+
isNewUser = true;
|
|
45
|
+
await tx `
|
|
46
|
+
INSERT INTO "user" (id, email, full_name, user_type, status, auth_provider)
|
|
47
|
+
VALUES (${userId}, ${input.email}, ${input.fullName}, 'client_portal', 'invited', 'password')
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
// Membership no tenant — sem ela o usuário não resolve tenant no login.
|
|
51
|
+
const membership = await tx `
|
|
52
|
+
SELECT id FROM membership
|
|
53
|
+
WHERE user_id = ${userId} AND tenant_id = ${tenantId} AND deleted_at IS NULL
|
|
54
|
+
`;
|
|
55
|
+
if (!membership[0]) {
|
|
56
|
+
await tx `
|
|
57
|
+
INSERT INTO membership (id, tenant_id, user_id, status, invited_by)
|
|
58
|
+
VALUES (${uuidv7()}, ${tenantId}, ${userId}, 'invited', ${input.invitedBy})
|
|
59
|
+
`;
|
|
60
|
+
await setUserRole(tx, userId, PORTAL_ROLE_KEY);
|
|
61
|
+
}
|
|
62
|
+
// O vínculo com o cliente. Idempotente: reconvidar não duplica.
|
|
63
|
+
const access = await tx `
|
|
64
|
+
INSERT INTO client_portal_access (id, tenant_id, user_id, client_id, status)
|
|
65
|
+
VALUES (${uuidv7()}, ${tenantId}, ${userId}, ${input.clientId}, 'active')
|
|
66
|
+
ON CONFLICT (tenant_id, user_id, client_id) DO UPDATE SET status = 'active'
|
|
67
|
+
RETURNING id
|
|
68
|
+
`;
|
|
69
|
+
let activationToken = null;
|
|
70
|
+
if (isNewUser || isPendingActivation) {
|
|
71
|
+
const activation = await createActivationToken(tx, { userId, tenantId });
|
|
72
|
+
activationToken = activation.token;
|
|
73
|
+
}
|
|
74
|
+
await appendAudit(tx, {
|
|
75
|
+
actorId: input.invitedBy,
|
|
76
|
+
action: 'portal_user_invited',
|
|
77
|
+
resourceType: 'client_portal_access',
|
|
78
|
+
resourceId: access[0].id,
|
|
79
|
+
// O token nunca entra na auditoria, nem em metadata: o registro é lido por
|
|
80
|
+
// gente que não deve poder assumir a conta do cliente.
|
|
81
|
+
metadata: { email: input.email, clientId: input.clientId, isNewUser, isPendingActivation },
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
userId,
|
|
85
|
+
email: input.email,
|
|
86
|
+
fullName,
|
|
87
|
+
clientId: input.clientId,
|
|
88
|
+
activationToken,
|
|
89
|
+
alreadyHadAccess: !isNewUser && membership.length > 0,
|
|
90
|
+
isReinvite: isPendingActivation,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export async function listPortalUsers(tx, clientId) {
|
|
94
|
+
const rows = await tx `
|
|
95
|
+
SELECT u.id AS user_id, u.email, u.full_name, u.status,
|
|
96
|
+
cpa.status AS access_status, u.last_login_at
|
|
97
|
+
FROM client_portal_access cpa
|
|
98
|
+
JOIN "user" u ON u.id = cpa.user_id
|
|
99
|
+
WHERE cpa.client_id = ${clientId} AND u.deleted_at IS NULL
|
|
100
|
+
ORDER BY u.full_name
|
|
101
|
+
`;
|
|
102
|
+
return rows.map((r) => ({
|
|
103
|
+
userId: r.user_id,
|
|
104
|
+
email: r.email,
|
|
105
|
+
fullName: r.full_name,
|
|
106
|
+
status: r.status,
|
|
107
|
+
accessStatus: r.access_status,
|
|
108
|
+
lastLoginAt: r.last_login_at ? r.last_login_at.toISOString() : null,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Revoga o acesso. Não apaga o usuário nem a trilha: quem enviou um documento
|
|
113
|
+
* continua identificável depois de perder o acesso — é justamente isso que
|
|
114
|
+
* torna a prova utilizável meses depois.
|
|
115
|
+
*/
|
|
116
|
+
export async function revokePortalAccess(tx, input) {
|
|
117
|
+
const rows = await tx `
|
|
118
|
+
UPDATE client_portal_access
|
|
119
|
+
SET status = 'revoked'
|
|
120
|
+
WHERE client_id = ${input.clientId} AND user_id = ${input.userId} AND status = 'active'
|
|
121
|
+
RETURNING id
|
|
122
|
+
`;
|
|
123
|
+
if (!rows[0])
|
|
124
|
+
throw new NotFoundError('Acesso ativo não encontrado');
|
|
125
|
+
await appendAudit(tx, {
|
|
126
|
+
actorId: input.revokedBy,
|
|
127
|
+
action: 'portal_access_revoked',
|
|
128
|
+
resourceType: 'client_portal_access',
|
|
129
|
+
resourceId: rows[0].id,
|
|
130
|
+
metadata: { clientId: input.clientId, userId: input.userId },
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async function currentTenantId(tx) {
|
|
134
|
+
const rows = await tx `
|
|
135
|
+
SELECT current_setting('app.current_tenant')::uuid AS tenant_id
|
|
136
|
+
`;
|
|
137
|
+
return rows[0].tenant_id;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../src/portal/provisioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialização canônica (RFC-CAPABILITY-PRICING-ENGINE-001 §22.1 F2) — usada
|
|
3
|
+
* exclusivamente para compor o `fingerprint`/`quoteId` (nunca para persistir
|
|
4
|
+
* ou transportar dados). `JSON.stringify` cru depende da ordem de inserção
|
|
5
|
+
* das chaves do objeto — dois `PricingRequest` economicamente idênticos, mas
|
|
6
|
+
* construídos com `addonQuantities`/Records em ordem de chave diferente,
|
|
7
|
+
* produziam hashes diferentes antes deste módulo (achado do Design Review,
|
|
8
|
+
* §22.1). `canonicalize` ordena chaves recursivamente em qualquer nível de
|
|
9
|
+
* objeto/Record/Map aninhado — arrays preservam ordem (a ordem de array é
|
|
10
|
+
* semanticamente relevante quando existe; coleções sem ordem própria, como
|
|
11
|
+
* `bundleRules`, são pré-ordenadas pelo chamador antes de chegar aqui).
|
|
12
|
+
*/
|
|
13
|
+
export declare function canonicalStringify(value: unknown): string;
|
|
14
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../src/pricing-engine/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyBH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialização canônica (RFC-CAPABILITY-PRICING-ENGINE-001 §22.1 F2) — usada
|
|
3
|
+
* exclusivamente para compor o `fingerprint`/`quoteId` (nunca para persistir
|
|
4
|
+
* ou transportar dados). `JSON.stringify` cru depende da ordem de inserção
|
|
5
|
+
* das chaves do objeto — dois `PricingRequest` economicamente idênticos, mas
|
|
6
|
+
* construídos com `addonQuantities`/Records em ordem de chave diferente,
|
|
7
|
+
* produziam hashes diferentes antes deste módulo (achado do Design Review,
|
|
8
|
+
* §22.1). `canonicalize` ordena chaves recursivamente em qualquer nível de
|
|
9
|
+
* objeto/Record/Map aninhado — arrays preservam ordem (a ordem de array é
|
|
10
|
+
* semanticamente relevante quando existe; coleções sem ordem própria, como
|
|
11
|
+
* `bundleRules`, são pré-ordenadas pelo chamador antes de chegar aqui).
|
|
12
|
+
*/
|
|
13
|
+
function canonicalize(value) {
|
|
14
|
+
if (value instanceof Map) {
|
|
15
|
+
const entries = Array.from(value.entries())
|
|
16
|
+
.map(([k, v]) => [String(k), canonicalize(v)])
|
|
17
|
+
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
18
|
+
const record = {};
|
|
19
|
+
for (const [k, v] of entries)
|
|
20
|
+
record[k] = v;
|
|
21
|
+
return record;
|
|
22
|
+
}
|
|
23
|
+
if (Array.isArray(value)) {
|
|
24
|
+
return value.map(canonicalize);
|
|
25
|
+
}
|
|
26
|
+
if (value !== null && typeof value === 'object') {
|
|
27
|
+
const record = value;
|
|
28
|
+
const result = {};
|
|
29
|
+
for (const key of Object.keys(record).sort()) {
|
|
30
|
+
result[key] = canonicalize(record[key]);
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
export function canonicalStringify(value) {
|
|
37
|
+
return JSON.stringify(canonicalize(value));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/pricing-engine/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/pricing-engine/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GACxB,2BAA2B,GAC3B,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,GAChB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,6BAA6B,GAC7B,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/pricing-engine/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,gBAAgB,GACxB,2BAA2B,GAC3B,iBAAiB,GACjB,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,gBAAgB,GAChB,uBAAuB,GACvB,gBAAgB,GAChB,gBAAgB,GAChB,qBAAqB,GACrB,mBAAmB,GACnB,mBAAmB,GACnB,6BAA6B,GAC7B,oBAAoB,GACpB,qBAAqB,GACrB,wBAAwB,CAAC;AAE7B;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAC3B,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,WAAW,GAAG,sBAAsB,CAAC;AAqBrF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAEf,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO;IAQ3E,MAAM,IAAI;QACR,IAAI,EAAE,gBAAgB,CAAC;QACvB,UAAU,EAAE,iBAAiB,CAAC;QAC9B,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;CAQF"}
|
|
@@ -38,7 +38,12 @@ export class PricingEngineError extends Error {
|
|
|
38
38
|
this.ruleIds = ruleIds;
|
|
39
39
|
}
|
|
40
40
|
toJSON() {
|
|
41
|
-
return {
|
|
41
|
+
return {
|
|
42
|
+
code: this.code,
|
|
43
|
+
errorClass: this.errorClass,
|
|
44
|
+
message: this.message,
|
|
45
|
+
ruleIds: this.ruleIds,
|
|
46
|
+
};
|
|
42
47
|
}
|
|
43
48
|
}
|
|
44
49
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/pricing-engine/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/pricing-engine/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8BH,MAAM,WAAW,GAAgD;IAC/D,2BAA2B,EAAE,eAAe;IAC5C,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAAE,YAAY;IAChC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,WAAW;IACpC,gBAAgB,EAAE,YAAY;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,YAAY;IACjC,6BAA6B,EAAE,eAAe;IAC9C,oBAAoB,EAAE,eAAe;IACrC,qBAAqB,EAAE,WAAW;IAClC,wBAAwB,EAAE,YAAY;CACvC,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAmB;IACvB,UAAU,CAAoB;IACvC,2EAA2E;IAClE,OAAO,CAAW;IAE3B,YAAY,IAAsB,EAAE,OAAe,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QAMJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF"}
|