@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
|
@@ -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,sDAAmE;AAA1D,4HAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* A porta ÚNICA de e-mail para os fluxos que não passam pelo motor multicanal.
|
|
4
|
+
*
|
|
5
|
+
* ## O bloqueador que este arquivo fecha
|
|
6
|
+
*
|
|
7
|
+
* `SINGLE_DISPATCH_AUTHORITY=FAIL`. O guard da rodada anterior varria só
|
|
8
|
+
* `packages/core/src` e não enxergava o que estava do lado de fora:
|
|
9
|
+
*
|
|
10
|
+
* apps/api/src/routes/admin.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
11
|
+
* apps/api/src/routes/documents.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
12
|
+
* apps/api/src/routes/auth.ts → sendEmail(process.env.RESEND_API_KEY, …)
|
|
13
|
+
* packages/core/src/subscription-billing/service.ts → sendEmail(cfg.resendApiKey, …)
|
|
14
|
+
*
|
|
15
|
+
* Quatro caminhos de APLICAÇÃO chamando o transporte direto, cada um lendo a
|
|
16
|
+
* credencial e o remetente por conta própria. Não é um cliente provider paralelo
|
|
17
|
+
* — é o mesmo transporte —, mas é código de domínio alcançando a borda de envio
|
|
18
|
+
* sem passar por autoridade nenhuma, que é o que o adendo §12 proíbe.
|
|
19
|
+
*
|
|
20
|
+
* ## O que ela NÃO é
|
|
21
|
+
*
|
|
22
|
+
* **Não é o motor multicanal, e não finge ser.** Convite, reconvite, acesso ao
|
|
23
|
+
* Portal e recuperação de senha são comunicação de IDENTIDADE: acontecem antes de
|
|
24
|
+
* existir cliente, antes de existir consentimento de contribuinte, e — no caso do
|
|
25
|
+
* `forgot-password` — antes de existir sessão de onde tirar um tenant. Passá-los
|
|
26
|
+
* pelo `dispatch` exigiria inventar `recipientRef`, `subjectRef`, template
|
|
27
|
+
* aprovado e conta de canal para cada um; a fase que fizer isso é própria, e
|
|
28
|
+
* `AUTH_EMAIL_NOT_ON_SHARED_ENGINE` fica registrada como dívida.
|
|
29
|
+
*
|
|
30
|
+
* O que ela é: um **adapter de entrada** (§13). Fluxo legado sem cliente provider
|
|
31
|
+
* próprio, com uma porta só, nominal e vigiada.
|
|
32
|
+
*
|
|
33
|
+
* ## O que ela acrescenta de verdade
|
|
34
|
+
*
|
|
35
|
+
* Uma barreira que só renomeia o caminho não é correção. Estes fluxos ganham,
|
|
36
|
+
* aqui, três coisas que nenhum deles tinha:
|
|
37
|
+
*
|
|
38
|
+
* 1. **Idempotência de provider.** Nenhum dos quatro mandava `Idempotency-Key`.
|
|
39
|
+
* Duplo-clique em "convidar" ou retry de cron produzia duas mensagens
|
|
40
|
+
* idênticas na caixa de quem recebe. A chave é derivada do CONTEÚDO (ver
|
|
41
|
+
* `identityFor`), então retry idêntico dedupe e reconvite legítimo — que
|
|
42
|
+
* carrega um token novo — passa.
|
|
43
|
+
* 2. **Um lugar só para a credencial.** `process.env.RESEND_API_KEY` deixa de
|
|
44
|
+
* ser lido em quatro arquivos. Quatro leituras é onde uma delas fica para
|
|
45
|
+
* trás no dia da rotação.
|
|
46
|
+
* 3. **Um alvo só para o guard.** O guard de fronteira global proíbe `sendEmail*`
|
|
47
|
+
* em todo o repositório exceto no transporte, nos adapters do motor e aqui.
|
|
48
|
+
*/
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.sendTransactionalOutboundWithResult = sendTransactionalOutboundWithResult;
|
|
51
|
+
exports.sendTransactionalOutbound = sendTransactionalOutbound;
|
|
52
|
+
const node_crypto_1 = require("node:crypto");
|
|
53
|
+
const resend_js_1 = require("./resend.js");
|
|
54
|
+
/**
|
|
55
|
+
* A chave que o provider vai deduplicar.
|
|
56
|
+
*
|
|
57
|
+
* Derivada do CONTEÚDO — destinatário, assunto, remetente e corpo — e não de um
|
|
58
|
+
* identificador de negócio. A escolha decide o comportamento em produção:
|
|
59
|
+
*
|
|
60
|
+
* • retry idêntico (duplo-clique, reexecução de cron) produz a MESMA chave, e o
|
|
61
|
+
* Resend devolve a resposta original sem mandar a segunda mensagem;
|
|
62
|
+
* • reconvite legítimo carrega um token novo no corpo, logo uma chave nova, e
|
|
63
|
+
* sai normalmente.
|
|
64
|
+
*
|
|
65
|
+
* Derivar de `kind + destinatário` faria o oposto e seria pior que não ter chave:
|
|
66
|
+
* o reconvite legítimo seria silenciosamente descartado pelo provider dentro da
|
|
67
|
+
* janela de 24 h, e ninguém veria — a resposta de um replay é `200`.
|
|
68
|
+
*
|
|
69
|
+
* `sha256` hexadecimal, 64 caracteres, dentro do limite de 1 a 256 do provider.
|
|
70
|
+
*/
|
|
71
|
+
function identityFor(req) {
|
|
72
|
+
/*
|
|
73
|
+
* Serializado como ARRAY, e não concatenado com um separador.
|
|
74
|
+
*
|
|
75
|
+
* Concatenar campos com um caractere qualquer é ambíguo: `to='a b'` com
|
|
76
|
+
* `from='c'` produz a mesma cadeia que `to='a'` com `from='b c'`, e duas
|
|
77
|
+
* mensagens diferentes ganhariam a mesma chave — o provider descartaria a
|
|
78
|
+
* segunda como replay. `JSON.stringify` de um array escapa os campos e o
|
|
79
|
+
* comprimento fica implícito na estrutura, então nenhum conteúdo consegue
|
|
80
|
+
* imitar a fronteira entre dois campos.
|
|
81
|
+
*/
|
|
82
|
+
const material = JSON.stringify([
|
|
83
|
+
req.kind,
|
|
84
|
+
req.message.to,
|
|
85
|
+
req.message.from,
|
|
86
|
+
req.message.subject,
|
|
87
|
+
req.message.html,
|
|
88
|
+
req.message.text ?? null,
|
|
89
|
+
]);
|
|
90
|
+
return (0, node_crypto_1.createHash)('sha256').update(material, 'utf8').digest('hex');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Envia, com o desfecho detalhado.
|
|
94
|
+
*
|
|
95
|
+
* Best-effort como sempre foi: devolve o resultado, nunca lança. Quem chama
|
|
96
|
+
* decide o que fazer — e continua podendo distinguir "o provider recusou" de "a
|
|
97
|
+
* mensagem saiu", que é a distinção que fez o Portal ficar meses sem acesso
|
|
98
|
+
* ativo quando ela não existia.
|
|
99
|
+
*/
|
|
100
|
+
async function sendTransactionalOutboundWithResult(req) {
|
|
101
|
+
return (0, resend_js_1.sendEmailWithResult)(req.apiKey ?? process.env.RESEND_API_KEY, req.message, {
|
|
102
|
+
idempotencyKey: identityFor(req),
|
|
103
|
+
fetchImpl: req.fetchImpl,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Envia e devolve só se saiu.
|
|
108
|
+
*
|
|
109
|
+
* A forma que os quatro chamadores legados já usavam (`boolean`), preservada para
|
|
110
|
+
* que a consolidação não mude a resposta de nenhuma rota — nem o `201` do
|
|
111
|
+
* convite, nem o campo `invitationEmailSent` que a tela lê.
|
|
112
|
+
*/
|
|
113
|
+
async function sendTransactionalOutbound(req) {
|
|
114
|
+
const result = await sendTransactionalOutboundWithResult(req);
|
|
115
|
+
return result.ok;
|
|
116
|
+
}
|
|
117
|
+
//# 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;;AAuGH,kFAOC;AASD,8DAGC;AAxHD,6CAAyC;AACzC,2CAA2F;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,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,mCAAmC,CACvD,GAA8B;IAE9B,OAAO,IAAA,+BAAmB,EAAC,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;AACI,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/cjs/mail/types.js
CHANGED
|
@@ -1,38 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// cap.communication.transactional-email — contrato canônico (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 v0.2).
|
|
3
|
-
// Ver docs/governance/RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001.md no repo baruk-ecosystem.
|
|
4
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = exports.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* estruturado, alta entropia) e coalescência distribuída real (espera limitada por reserva remota em
|
|
14
|
-
* andamento, nunca reenvio às cegas). Nenhuma das duas mudou assinatura pública (patch, não minor/major).
|
|
15
|
-
*/
|
|
16
|
-
exports.TRANSACTIONAL_EMAIL_CONTRACT_VERSION = '0.2.2';
|
|
17
|
-
/** Janela mínima de deduplicação exigida pela RFC §4.2 (24h) — implementações podem manter por mais tempo, nunca menos. */
|
|
18
|
-
exports.MIN_DEDUP_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
19
|
-
/** Timeout padrão do Provider (RFC §5 — herdado empiricamente da implementação mais madura do inventário). */
|
|
20
|
-
exports.DEFAULT_TIMEOUT_MS = 12_000;
|
|
21
|
-
/**
|
|
22
|
-
* Default de poll ao aguardar uma reserva remota em andamento num `DedupStore` `mode: 'shared'`
|
|
23
|
-
* (Bloqueador 2 — Certification Round 2). Baixo o suficiente para não atrasar percebivelmente
|
|
24
|
-
* o caso comum (reserva local, sem espera nenhuma).
|
|
25
|
-
*/
|
|
26
|
-
exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = 200;
|
|
27
|
-
/**
|
|
28
|
-
* Default de tempo máximo de espera por uma reserva remota antes de tentar assumi-la e,
|
|
29
|
-
* falhando isso, devolver falha determinística retryable (Bloqueador 2 — Certification Round 2).
|
|
30
|
-
* Maior que `DEFAULT_TIMEOUT_MS` — dá à instância dona tempo de terminar o próprio envio
|
|
31
|
-
* (que pode levar até `DEFAULT_TIMEOUT_MS`) antes desta instância desistir de esperar.
|
|
32
|
-
*/
|
|
33
|
-
exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = 15_000;
|
|
34
|
-
/** Utilitário de conveniência para o consumidor decidir retry — não usado internamente pelo core (RFC §5). */
|
|
35
|
-
function isRetryableError(code) {
|
|
36
|
-
return code === 'timeout' || code === 'provider-unavailable';
|
|
37
|
-
}
|
|
3
|
+
exports.isRetryableError = exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = exports.TRANSACTIONAL_EMAIL_CONTRACT_VERSION = exports.MIN_DEDUP_WINDOW_MS = exports.DEFAULT_TIMEOUT_MS = void 0;
|
|
4
|
+
var communication_1 = require("@baruk/communication");
|
|
5
|
+
Object.defineProperty(exports, "DEFAULT_TIMEOUT_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_TIMEOUT_MS; } });
|
|
6
|
+
Object.defineProperty(exports, "MIN_DEDUP_WINDOW_MS", { enumerable: true, get: function () { return communication_1.MIN_DEDUP_WINDOW_MS; } });
|
|
7
|
+
Object.defineProperty(exports, "TRANSACTIONAL_EMAIL_CONTRACT_VERSION", { enumerable: true, get: function () { return communication_1.TRANSACTIONAL_EMAIL_CONTRACT_VERSION; } });
|
|
8
|
+
Object.defineProperty(exports, "DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS; } });
|
|
9
|
+
Object.defineProperty(exports, "DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS; } });
|
|
10
|
+
Object.defineProperty(exports, "isRetryableError", { enumerable: true, get: function () { return communication_1.isRetryableError; } });
|
|
38
11
|
//# sourceMappingURL=types.js.map
|
|
@@ -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,sDAO8B;AAN5B,mHAAA,kBAAkB,OAAA;AAClB,oHAAA,mBAAmB,OAAA;AACnB,qIAAA,oCAAoC,OAAA;AACpC,4IAAA,2CAA2C,OAAA;AAC3C,uIAAA,sCAAsC,OAAA;AACtC,iHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.invitePortalUser = invitePortalUser;
|
|
4
|
+
exports.listPortalUsers = listPortalUsers;
|
|
5
|
+
exports.revokePortalAccess = revokePortalAccess;
|
|
6
|
+
const shared_1 = require("@baruk/shared");
|
|
7
|
+
const audit_js_1 = require("../audit/audit.js");
|
|
8
|
+
const password_reset_js_1 = require("../auth/password-reset.js");
|
|
9
|
+
const repository_js_1 = require("../users/repository.js");
|
|
10
|
+
const PORTAL_ROLE_KEY = 'client_titular';
|
|
11
|
+
async function invitePortalUser(tx, input) {
|
|
12
|
+
const tenantId = await currentTenantId(tx);
|
|
13
|
+
// O cliente precisa existir NESTE tenant. A RLS já garantiria, mas uma
|
|
14
|
+
// mensagem clara vale mais que um erro de FK.
|
|
15
|
+
const client = await tx `
|
|
16
|
+
SELECT id FROM client WHERE id = ${input.clientId} AND deleted_at IS NULL
|
|
17
|
+
`;
|
|
18
|
+
if (!client[0])
|
|
19
|
+
throw new shared_1.NotFoundError('Cliente não encontrado');
|
|
20
|
+
const existing = await tx `
|
|
21
|
+
SELECT id, full_name, user_type, status FROM "user"
|
|
22
|
+
WHERE email = ${input.email} AND deleted_at IS NULL
|
|
23
|
+
`;
|
|
24
|
+
let userId;
|
|
25
|
+
let fullName;
|
|
26
|
+
let isNewUser;
|
|
27
|
+
// Reconvidar quem ainda não ativou precisa emitir um token novo. Sem isto o
|
|
28
|
+
// usuário fica preso: o primeiro convite não chegou (ou expirou) e nenhum
|
|
29
|
+
// reenvio produz link, porque só o cadastro inicial emitia token.
|
|
30
|
+
let isPendingActivation = false;
|
|
31
|
+
if (existing[0]) {
|
|
32
|
+
// Um e-mail de staff não vira acesso de portal por convite. Os dois tipos
|
|
33
|
+
// têm superfícies e escopos distintos, e converter silenciosamente daria a
|
|
34
|
+
// um colaborador do escritório uma sessão de cliente.
|
|
35
|
+
if (existing[0].user_type !== 'client_portal') {
|
|
36
|
+
throw new shared_1.ConflictError('Este e-mail já pertence a um usuário interno. Use um e-mail diferente para o acesso do cliente.');
|
|
37
|
+
}
|
|
38
|
+
userId = existing[0].id;
|
|
39
|
+
fullName = existing[0].full_name;
|
|
40
|
+
isNewUser = false;
|
|
41
|
+
// Só quem ainda não ativou recebe token novo. Emitir para um usuário já
|
|
42
|
+
// ativo transformaria o convite em redefinição de senha à revelia do
|
|
43
|
+
// cliente — quem convida não pode provocar isso.
|
|
44
|
+
isPendingActivation = existing[0].status === 'invited';
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
userId = (0, shared_1.uuidv7)();
|
|
48
|
+
fullName = input.fullName;
|
|
49
|
+
isNewUser = true;
|
|
50
|
+
await tx `
|
|
51
|
+
INSERT INTO "user" (id, email, full_name, user_type, status, auth_provider)
|
|
52
|
+
VALUES (${userId}, ${input.email}, ${input.fullName}, 'client_portal', 'invited', 'password')
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
// Membership no tenant — sem ela o usuário não resolve tenant no login.
|
|
56
|
+
const membership = await tx `
|
|
57
|
+
SELECT id FROM membership
|
|
58
|
+
WHERE user_id = ${userId} AND tenant_id = ${tenantId} AND deleted_at IS NULL
|
|
59
|
+
`;
|
|
60
|
+
if (!membership[0]) {
|
|
61
|
+
await tx `
|
|
62
|
+
INSERT INTO membership (id, tenant_id, user_id, status, invited_by)
|
|
63
|
+
VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, 'invited', ${input.invitedBy})
|
|
64
|
+
`;
|
|
65
|
+
await (0, repository_js_1.setUserRole)(tx, userId, PORTAL_ROLE_KEY);
|
|
66
|
+
}
|
|
67
|
+
// O vínculo com o cliente. Idempotente: reconvidar não duplica.
|
|
68
|
+
const access = await tx `
|
|
69
|
+
INSERT INTO client_portal_access (id, tenant_id, user_id, client_id, status)
|
|
70
|
+
VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, ${input.clientId}, 'active')
|
|
71
|
+
ON CONFLICT (tenant_id, user_id, client_id) DO UPDATE SET status = 'active'
|
|
72
|
+
RETURNING id
|
|
73
|
+
`;
|
|
74
|
+
let activationToken = null;
|
|
75
|
+
if (isNewUser || isPendingActivation) {
|
|
76
|
+
const activation = await (0, password_reset_js_1.createActivationToken)(tx, { userId, tenantId });
|
|
77
|
+
activationToken = activation.token;
|
|
78
|
+
}
|
|
79
|
+
await (0, audit_js_1.appendAudit)(tx, {
|
|
80
|
+
actorId: input.invitedBy,
|
|
81
|
+
action: 'portal_user_invited',
|
|
82
|
+
resourceType: 'client_portal_access',
|
|
83
|
+
resourceId: access[0].id,
|
|
84
|
+
// O token nunca entra na auditoria, nem em metadata: o registro é lido por
|
|
85
|
+
// gente que não deve poder assumir a conta do cliente.
|
|
86
|
+
metadata: { email: input.email, clientId: input.clientId, isNewUser, isPendingActivation },
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
userId,
|
|
90
|
+
email: input.email,
|
|
91
|
+
fullName,
|
|
92
|
+
clientId: input.clientId,
|
|
93
|
+
activationToken,
|
|
94
|
+
alreadyHadAccess: !isNewUser && membership.length > 0,
|
|
95
|
+
isReinvite: isPendingActivation,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function listPortalUsers(tx, clientId) {
|
|
99
|
+
const rows = await tx `
|
|
100
|
+
SELECT u.id AS user_id, u.email, u.full_name, u.status,
|
|
101
|
+
cpa.status AS access_status, u.last_login_at
|
|
102
|
+
FROM client_portal_access cpa
|
|
103
|
+
JOIN "user" u ON u.id = cpa.user_id
|
|
104
|
+
WHERE cpa.client_id = ${clientId} AND u.deleted_at IS NULL
|
|
105
|
+
ORDER BY u.full_name
|
|
106
|
+
`;
|
|
107
|
+
return rows.map((r) => ({
|
|
108
|
+
userId: r.user_id,
|
|
109
|
+
email: r.email,
|
|
110
|
+
fullName: r.full_name,
|
|
111
|
+
status: r.status,
|
|
112
|
+
accessStatus: r.access_status,
|
|
113
|
+
lastLoginAt: r.last_login_at ? r.last_login_at.toISOString() : null,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Revoga o acesso. Não apaga o usuário nem a trilha: quem enviou um documento
|
|
118
|
+
* continua identificável depois de perder o acesso — é justamente isso que
|
|
119
|
+
* torna a prova utilizável meses depois.
|
|
120
|
+
*/
|
|
121
|
+
async function revokePortalAccess(tx, input) {
|
|
122
|
+
const rows = await tx `
|
|
123
|
+
UPDATE client_portal_access
|
|
124
|
+
SET status = 'revoked'
|
|
125
|
+
WHERE client_id = ${input.clientId} AND user_id = ${input.userId} AND status = 'active'
|
|
126
|
+
RETURNING id
|
|
127
|
+
`;
|
|
128
|
+
if (!rows[0])
|
|
129
|
+
throw new shared_1.NotFoundError('Acesso ativo não encontrado');
|
|
130
|
+
await (0, audit_js_1.appendAudit)(tx, {
|
|
131
|
+
actorId: input.revokedBy,
|
|
132
|
+
action: 'portal_access_revoked',
|
|
133
|
+
resourceType: 'client_portal_access',
|
|
134
|
+
resourceId: rows[0].id,
|
|
135
|
+
metadata: { clientId: input.clientId, userId: input.userId },
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function currentTenantId(tx) {
|
|
139
|
+
const rows = await tx `
|
|
140
|
+
SELECT current_setting('app.current_tenant')::uuid AS tenant_id
|
|
141
|
+
`;
|
|
142
|
+
return rows[0].tenant_id;
|
|
143
|
+
}
|
|
144
|
+
//# 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,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Serialização canônica (RFC-CAPABILITY-PRICING-ENGINE-001 §22.1 F2) — usada
|
|
4
|
+
* exclusivamente para compor o `fingerprint`/`quoteId` (nunca para persistir
|
|
5
|
+
* ou transportar dados). `JSON.stringify` cru depende da ordem de inserção
|
|
6
|
+
* das chaves do objeto — dois `PricingRequest` economicamente idênticos, mas
|
|
7
|
+
* construídos com `addonQuantities`/Records em ordem de chave diferente,
|
|
8
|
+
* produziam hashes diferentes antes deste módulo (achado do Design Review,
|
|
9
|
+
* §22.1). `canonicalize` ordena chaves recursivamente em qualquer nível de
|
|
10
|
+
* objeto/Record/Map aninhado — arrays preservam ordem (a ordem de array é
|
|
11
|
+
* semanticamente relevante quando existe; coleções sem ordem própria, como
|
|
12
|
+
* `bundleRules`, são pré-ordenadas pelo chamador antes de chegar aqui).
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.canonicalStringify = canonicalStringify;
|
|
16
|
+
function canonicalize(value) {
|
|
17
|
+
if (value instanceof Map) {
|
|
18
|
+
const entries = Array.from(value.entries())
|
|
19
|
+
.map(([k, v]) => [String(k), canonicalize(v)])
|
|
20
|
+
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
21
|
+
const record = {};
|
|
22
|
+
for (const [k, v] of entries)
|
|
23
|
+
record[k] = v;
|
|
24
|
+
return record;
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
return value.map(canonicalize);
|
|
28
|
+
}
|
|
29
|
+
if (value !== null && typeof value === 'object') {
|
|
30
|
+
const record = value;
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const key of Object.keys(record).sort()) {
|
|
33
|
+
result[key] = canonicalize(record[key]);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function canonicalStringify(value) {
|
|
40
|
+
return JSON.stringify(canonicalize(value));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/pricing-engine/canonical.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAyBH,gDAEC;AAzBD,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,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -41,7 +41,12 @@ class PricingEngineError extends Error {
|
|
|
41
41
|
this.ruleIds = ruleIds;
|
|
42
42
|
}
|
|
43
43
|
toJSON() {
|
|
44
|
-
return {
|
|
44
|
+
return {
|
|
45
|
+
code: this.code,
|
|
46
|
+
errorClass: this.errorClass,
|
|
47
|
+
message: this.message,
|
|
48
|
+
ruleIds: this.ruleIds,
|
|
49
|
+
};
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
52
|
exports.PricingEngineError = PricingEngineError;
|
|
@@ -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,MAAa,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;AA3BD,gDA2BC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.compareQuotes = exports.normalizeCanonicalQuote = exports.computePricingQuote = exports.computeProration = exports.resolveBundleDiscount = exports.freeModuleCodesForBundle = exports.assertBundleModulesCovered = exports.PRICING_RULE_STEPS_IN_ORDER = exports.PRICING_ENGINE_VERSION = exports.PricingEngineError = exports.clampNonNegative = exports.prorateByDays = exports.applyPercent = exports.multiplyByQuantity = exports.subtractCents = exports.addCents = exports.centsToReais = exports.reaisToCents = exports.roundHalfEven = void 0;
|
|
3
|
+
exports.runShadowComparison = exports.computeShadowMetrics = exports.categorizeDiffs = exports.normalizeLegacyQuote = exports.toPricingRequest = exports.STORAGE_ADDON_TARGET_CODE = exports.compareQuotes = exports.normalizeCanonicalQuote = exports.computePricingQuote = exports.computeProration = exports.resolveBundleDiscount = exports.freeModuleCodesForBundle = exports.assertBundleModulesCovered = exports.PRICING_RULE_STEPS_IN_ORDER = exports.PRICING_ENGINE_VERSION = exports.PricingEngineError = exports.clampNonNegative = exports.prorateByDays = exports.applyPercent = exports.multiplyByQuantity = exports.subtractCents = exports.addCents = exports.centsToReais = exports.reaisToCents = exports.roundHalfEven = void 0;
|
|
4
4
|
var money_js_1 = require("./money.js");
|
|
5
5
|
Object.defineProperty(exports, "roundHalfEven", { enumerable: true, get: function () { return money_js_1.roundHalfEven; } });
|
|
6
6
|
Object.defineProperty(exports, "reaisToCents", { enumerable: true, get: function () { return money_js_1.reaisToCents; } });
|
|
@@ -27,4 +27,15 @@ Object.defineProperty(exports, "computePricingQuote", { enumerable: true, get: f
|
|
|
27
27
|
var shadow_js_1 = require("./shadow.js");
|
|
28
28
|
Object.defineProperty(exports, "normalizeCanonicalQuote", { enumerable: true, get: function () { return shadow_js_1.normalizeCanonicalQuote; } });
|
|
29
29
|
Object.defineProperty(exports, "compareQuotes", { enumerable: true, get: function () { return shadow_js_1.compareQuotes; } });
|
|
30
|
+
var shadow_adapter_js_1 = require("./shadow-adapter.js");
|
|
31
|
+
Object.defineProperty(exports, "STORAGE_ADDON_TARGET_CODE", { enumerable: true, get: function () { return shadow_adapter_js_1.STORAGE_ADDON_TARGET_CODE; } });
|
|
32
|
+
Object.defineProperty(exports, "toPricingRequest", { enumerable: true, get: function () { return shadow_adapter_js_1.toPricingRequest; } });
|
|
33
|
+
var shadow_normalizer_js_1 = require("./shadow-normalizer.js");
|
|
34
|
+
Object.defineProperty(exports, "normalizeLegacyQuote", { enumerable: true, get: function () { return shadow_normalizer_js_1.normalizeLegacyQuote; } });
|
|
35
|
+
var shadow_diff_js_1 = require("./shadow-diff.js");
|
|
36
|
+
Object.defineProperty(exports, "categorizeDiffs", { enumerable: true, get: function () { return shadow_diff_js_1.categorizeDiffs; } });
|
|
37
|
+
var shadow_metrics_js_1 = require("./shadow-metrics.js");
|
|
38
|
+
Object.defineProperty(exports, "computeShadowMetrics", { enumerable: true, get: function () { return shadow_metrics_js_1.computeShadowMetrics; } });
|
|
39
|
+
var shadow_facade_js_1 = require("./shadow-facade.js");
|
|
40
|
+
Object.defineProperty(exports, "runShadowComparison", { enumerable: true, get: function () { return shadow_facade_js_1.runShadowComparison; } });
|
|
30
41
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pricing-engine/index.ts"],"names":[],"mappings":";;;AACA,uCAUoB;AATlB,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAIlB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAsB3B,uCAAiF;AAAxE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAE5D,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pricing-engine/index.ts"],"names":[],"mappings":";;;AACA,uCAUoB;AATlB,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAIlB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAsB3B,uCAAiF;AAAxE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAE5D,yCAIqB;AAHnB,uHAAA,0BAA0B,OAAA;AAC1B,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AAEvB,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAQ5B,yCAAqE;AAA5D,oHAAA,uBAAuB,OAAA;AAAE,0GAAA,aAAa,OAAA;AAgB/C,yDAAkF;AAAzE,8HAAA,yBAAyB,OAAA;AAAE,qHAAA,gBAAgB,OAAA;AACpD,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAE7B,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AAExB,yDAA2D;AAAlD,yHAAA,oBAAoB,OAAA;AAE7B,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA"}
|