@baruk/core 0.3.1 → 0.5.0
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 +127 -0
- package/dist/audit/repository.d.ts +33 -1
- package/dist/audit/repository.d.ts.map +1 -1
- package/dist/audit/repository.js +41 -7
- package/dist/audit/repository.js.map +1 -1
- 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 +60 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +121 -11
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +374 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +783 -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 +127 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +217 -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 +134 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +193 -20
- package/dist/billing/repository.js.map +1 -1
- package/dist/cjs/audit/repository.js +41 -7
- package/dist/cjs/audit/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 +121 -10
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +804 -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 +229 -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 +197 -19
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/ibge.js +103 -0
- package/dist/cjs/clients/ibge.js.map +1 -0
- package/dist/cjs/clients/repository.js +276 -23
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +330 -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/clearance-store.js +74 -0
- package/dist/cjs/collection/clearance-store.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 +256 -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 +434 -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 +175 -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/clearance.js +18 -0
- package/dist/cjs/communication/clearance.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 +166 -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 +495 -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/business-days.js +155 -0
- package/dist/cjs/competence/business-days.js.map +1 -0
- package/dist/cjs/competence/catalog-validation.js +174 -0
- package/dist/cjs/competence/catalog-validation.js.map +1 -0
- package/dist/cjs/competence/obligation-preview.js +190 -0
- package/dist/cjs/competence/obligation-preview.js.map +1 -0
- package/dist/cjs/competence/repository.js +622 -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/dashboard/pilot-panel.js +90 -0
- package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
- package/dist/cjs/dashboard/repository.js +11 -1
- package/dist/cjs/dashboard/repository.js.map +1 -1
- package/dist/cjs/db/client.js +17 -11
- package/dist/cjs/db/client.js.map +1 -1
- package/dist/cjs/db/provision-e2e-identity.js +111 -0
- package/dist/cjs/db/provision-e2e-identity.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/fiscal/applicability.js +164 -0
- package/dist/cjs/fiscal/applicability.js.map +1 -0
- package/dist/cjs/fiscal/conditions.js +198 -0
- package/dist/cjs/fiscal/conditions.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
- package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/cjs/fiscal/coverage/model.js +127 -0
- package/dist/cjs/fiscal/coverage/model.js.map +1 -0
- package/dist/cjs/fiscal/coverage/requests.js +99 -0
- package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
- package/dist/cjs/fiscal/credentials/material.js +168 -0
- package/dist/cjs/fiscal/credentials/material.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +163 -0
- package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
- package/dist/cjs/fiscal/eligibility.js +199 -0
- package/dist/cjs/fiscal/eligibility.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
- package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
- package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/direction.js +36 -0
- package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
- package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
- package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/provider.js +51 -0
- package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/repository.js +132 -0
- package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
- package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
- package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
- package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/cjs/fiscal/repository.js +470 -0
- package/dist/cjs/fiscal/repository.js.map +1 -0
- package/dist/cjs/fiscal/sync/circuit.js +124 -0
- package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
- package/dist/cjs/fiscal/sync/intervention.js +140 -0
- package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
- package/dist/cjs/fiscal/sync/lease.js +146 -0
- package/dist/cjs/fiscal/sync/lease.js.map +1 -0
- package/dist/cjs/fiscal/sync/observability.js +244 -0
- package/dist/cjs/fiscal/sync/observability.js.map +1 -0
- package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
- package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/cjs/fiscal/sync/policy.js +143 -0
- package/dist/cjs/fiscal/sync/policy.js.map +1 -0
- package/dist/cjs/fiscal/sync/reprocess.js +241 -0
- package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
- package/dist/cjs/fiscal/sync/retry.js +183 -0
- package/dist/cjs/fiscal/sync/retry.js.map +1 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
- package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/cjs/fiscal/transport/https.js +309 -0
- package/dist/cjs/fiscal/transport/https.js.map +1 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
- package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/cjs/fiscal/transport/types.js +93 -0
- package/dist/cjs/fiscal/transport/types.js.map +1 -0
- package/dist/cjs/import/br-documents.js +85 -0
- package/dist/cjs/import/br-documents.js.map +1 -0
- package/dist/cjs/import/clients-import.js +347 -40
- package/dist/cjs/import/clients-import.js.map +1 -1
- package/dist/cjs/index.js +711 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +224 -17
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/index.js +3 -1
- package/dist/cjs/legal/index.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/onboarding/persistence.js +4 -4
- package/dist/cjs/onboarding/persistence.js.map +1 -1
- package/dist/cjs/pilot/go-live-checklist.js +212 -0
- package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
- package/dist/cjs/pilot/milestone.js +79 -0
- package/dist/cjs/pilot/milestone.js.map +1 -0
- package/dist/cjs/platform/capabilities.js +144 -0
- package/dist/cjs/platform/capabilities.js.map +1 -0
- package/dist/cjs/platform/job-contract.js +411 -0
- package/dist/cjs/platform/job-contract.js.map +1 -0
- 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 +101 -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/index.js +2 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- 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 +208 -83
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.js.map +1 -1
- package/dist/cjs/tenancy/features.js +131 -0
- package/dist/cjs/tenancy/features.js.map +1 -0
- package/dist/cjs/tenancy/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/tenancy/settings.js +224 -0
- package/dist/cjs/tenancy/settings.js.map +1 -0
- package/dist/cjs/users/repository.js +143 -3
- 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/ibge.d.ts +17 -0
- package/dist/clients/ibge.d.ts.map +1 -0
- package/dist/clients/ibge.js +98 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/repository.d.ts +196 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +270 -24
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +137 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +322 -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/clearance-store.d.ts +39 -0
- package/dist/collection/clearance-store.d.ts.map +1 -0
- package/dist/collection/clearance-store.js +69 -0
- package/dist/collection/clearance-store.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 +132 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +249 -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 +200 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +427 -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 +78 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +168 -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/clearance.d.ts +53 -0
- package/dist/communication/clearance.d.ts.map +1 -0
- package/dist/communication/clearance.js +15 -0
- package/dist/communication/clearance.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 +163 -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 +163 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +492 -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 +115 -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/business-days.d.ts +51 -0
- package/dist/competence/business-days.d.ts.map +1 -0
- package/dist/competence/business-days.js +145 -0
- package/dist/competence/business-days.js.map +1 -0
- package/dist/competence/catalog-validation.d.ts +86 -0
- package/dist/competence/catalog-validation.d.ts.map +1 -0
- package/dist/competence/catalog-validation.js +168 -0
- package/dist/competence/catalog-validation.js.map +1 -0
- package/dist/competence/obligation-preview.d.ts +103 -0
- package/dist/competence/obligation-preview.d.ts.map +1 -0
- package/dist/competence/obligation-preview.js +184 -0
- package/dist/competence/obligation-preview.js.map +1 -0
- package/dist/competence/repository.d.ts +285 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +602 -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/dashboard/pilot-panel.d.ts +100 -0
- package/dist/dashboard/pilot-panel.d.ts.map +1 -0
- package/dist/dashboard/pilot-panel.js +87 -0
- package/dist/dashboard/pilot-panel.js.map +1 -0
- package/dist/dashboard/repository.d.ts.map +1 -1
- package/dist/dashboard/repository.js +11 -1
- package/dist/dashboard/repository.js.map +1 -1
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +16 -11
- package/dist/db/client.js.map +1 -1
- package/dist/db/migrate.d.ts +36 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +208 -35
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/provision-e2e-identity.d.ts +2 -0
- package/dist/db/provision-e2e-identity.d.ts.map +1 -0
- package/dist/db/provision-e2e-identity.js +109 -0
- package/dist/db/provision-e2e-identity.js.map +1 -0
- 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/fiscal/applicability.d.ts +73 -0
- package/dist/fiscal/applicability.d.ts.map +1 -0
- package/dist/fiscal/applicability.js +160 -0
- package/dist/fiscal/applicability.js.map +1 -0
- package/dist/fiscal/conditions.d.ts +99 -0
- package/dist/fiscal/conditions.d.ts.map +1 -0
- package/dist/fiscal/conditions.js +190 -0
- package/dist/fiscal/conditions.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
- package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
- package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
- package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
- package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
- package/dist/fiscal/coverage/model.d.ts +86 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -0
- package/dist/fiscal/coverage/model.js +120 -0
- package/dist/fiscal/coverage/model.js.map +1 -0
- package/dist/fiscal/coverage/requests.d.ts +70 -0
- package/dist/fiscal/coverage/requests.d.ts.map +1 -0
- package/dist/fiscal/coverage/requests.js +95 -0
- package/dist/fiscal/coverage/requests.js.map +1 -0
- package/dist/fiscal/credentials/material.d.ts +81 -0
- package/dist/fiscal/credentials/material.d.ts.map +1 -0
- package/dist/fiscal/credentials/material.js +164 -0
- package/dist/fiscal/credentials/material.js.map +1 -0
- package/dist/fiscal/credentials/readiness.d.ts +92 -0
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
- package/dist/fiscal/credentials/readiness.js +159 -0
- package/dist/fiscal/credentials/readiness.js.map +1 -0
- package/dist/fiscal/eligibility.d.ts +106 -0
- package/dist/fiscal/eligibility.d.ts.map +1 -0
- package/dist/fiscal/eligibility.js +194 -0
- package/dist/fiscal/eligibility.js.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
- package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
- package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/adn-transport.js +220 -0
- package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
- package/dist/fiscal/ingestion/direction.d.ts +60 -0
- package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
- package/dist/fiscal/ingestion/direction.js +32 -0
- package/dist/fiscal/ingestion/direction.js.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
- package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
- package/dist/fiscal/ingestion/nfse-adn.js +222 -0
- package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
- package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
- package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
- package/dist/fiscal/ingestion/pipeline.js +699 -0
- package/dist/fiscal/ingestion/pipeline.js.map +1 -0
- package/dist/fiscal/ingestion/provider.d.ts +206 -0
- package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/provider.js +47 -0
- package/dist/fiscal/ingestion/provider.js.map +1 -0
- package/dist/fiscal/ingestion/repository.d.ts +82 -0
- package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
- package/dist/fiscal/ingestion/repository.js +127 -0
- package/dist/fiscal/ingestion/repository.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
- package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
- package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
- package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
- package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
- package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
- package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
- package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
- package/dist/fiscal/ingestion/xml-reader.js +112 -0
- package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
- package/dist/fiscal/repository.d.ts +220 -0
- package/dist/fiscal/repository.d.ts.map +1 -0
- package/dist/fiscal/repository.js +449 -0
- package/dist/fiscal/repository.js.map +1 -0
- package/dist/fiscal/sync/circuit.d.ts +86 -0
- package/dist/fiscal/sync/circuit.d.ts.map +1 -0
- package/dist/fiscal/sync/circuit.js +118 -0
- package/dist/fiscal/sync/circuit.js.map +1 -0
- package/dist/fiscal/sync/intervention.d.ts +81 -0
- package/dist/fiscal/sync/intervention.d.ts.map +1 -0
- package/dist/fiscal/sync/intervention.js +135 -0
- package/dist/fiscal/sync/intervention.js.map +1 -0
- package/dist/fiscal/sync/lease.d.ts +118 -0
- package/dist/fiscal/sync/lease.d.ts.map +1 -0
- package/dist/fiscal/sync/lease.js +139 -0
- package/dist/fiscal/sync/lease.js.map +1 -0
- package/dist/fiscal/sync/observability.d.ts +148 -0
- package/dist/fiscal/sync/observability.d.ts.map +1 -0
- package/dist/fiscal/sync/observability.js +239 -0
- package/dist/fiscal/sync/observability.js.map +1 -0
- package/dist/fiscal/sync/orchestrator.d.ts +132 -0
- package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
- package/dist/fiscal/sync/orchestrator.js +487 -0
- package/dist/fiscal/sync/orchestrator.js.map +1 -0
- package/dist/fiscal/sync/policy.d.ts +87 -0
- package/dist/fiscal/sync/policy.d.ts.map +1 -0
- package/dist/fiscal/sync/policy.js +136 -0
- package/dist/fiscal/sync/policy.js.map +1 -0
- package/dist/fiscal/sync/reprocess.d.ts +76 -0
- package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
- package/dist/fiscal/sync/reprocess.js +237 -0
- package/dist/fiscal/sync/reprocess.js.map +1 -0
- package/dist/fiscal/sync/retry.d.ts +82 -0
- package/dist/fiscal/sync/retry.d.ts.map +1 -0
- package/dist/fiscal/sync/retry.js +176 -0
- package/dist/fiscal/sync/retry.js.map +1 -0
- package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
- package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
- package/dist/fiscal/sync/secret-boundary.js +116 -0
- package/dist/fiscal/sync/secret-boundary.js.map +1 -0
- package/dist/fiscal/transport/https.d.ts +86 -0
- package/dist/fiscal/transport/https.d.ts.map +1 -0
- package/dist/fiscal/transport/https.js +303 -0
- package/dist/fiscal/transport/https.js.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.js +323 -0
- package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
- package/dist/fiscal/transport/types.d.ts +134 -0
- package/dist/fiscal/transport/types.d.ts.map +1 -0
- package/dist/fiscal/transport/types.js +88 -0
- package/dist/fiscal/transport/types.js.map +1 -0
- package/dist/import/br-documents.d.ts +26 -0
- package/dist/import/br-documents.d.ts.map +1 -0
- package/dist/import/br-documents.js +78 -0
- package/dist/import/br-documents.js.map +1 -0
- package/dist/import/clients-import.d.ts +122 -4
- package/dist/import/clients-import.d.ts.map +1 -1
- package/dist/import/clients-import.js +341 -41
- package/dist/import/clients-import.js.map +1 -1
- package/dist/index.d.ts +217 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +196 -11
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts +12 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +222 -16
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +2 -2
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/index.js +1 -1
- package/dist/legal/index.js.map +1 -1
- package/dist/legal/types.d.ts +69 -3
- 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/onboarding/persistence.d.ts +10 -1
- package/dist/onboarding/persistence.d.ts.map +1 -1
- package/dist/onboarding/persistence.js +4 -4
- package/dist/onboarding/persistence.js.map +1 -1
- package/dist/pilot/go-live-checklist.d.ts +41 -0
- package/dist/pilot/go-live-checklist.d.ts.map +1 -0
- package/dist/pilot/go-live-checklist.js +209 -0
- package/dist/pilot/go-live-checklist.js.map +1 -0
- package/dist/pilot/milestone.d.ts +56 -0
- package/dist/pilot/milestone.d.ts.map +1 -0
- package/dist/pilot/milestone.js +74 -0
- package/dist/pilot/milestone.js.map +1 -0
- package/dist/platform/capabilities.d.ts +88 -0
- package/dist/platform/capabilities.d.ts.map +1 -0
- package/dist/platform/capabilities.js +140 -0
- package/dist/platform/capabilities.js.map +1 -0
- package/dist/platform/job-contract.d.ts +232 -0
- package/dist/platform/job-contract.d.ts.map +1 -0
- package/dist/platform/job-contract.js +403 -0
- package/dist/platform/job-contract.js.map +1 -0
- 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 +101 -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/index.d.ts +6 -5
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +3 -3
- package/dist/subscription-billing/index.js.map +1 -1
- 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 +38 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +147 -23
- 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/features.d.ts +69 -0
- package/dist/tenancy/features.d.ts.map +1 -0
- package/dist/tenancy/features.js +123 -0
- package/dist/tenancy/features.js.map +1 -0
- 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/tenancy/settings.d.ts +63 -0
- package/dist/tenancy/settings.d.ts.map +1 -0
- package/dist/tenancy/settings.js +218 -0
- package/dist/tenancy/settings.js.map +1 -0
- package/dist/users/repository.d.ts +54 -1
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +142 -4
- 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 +20 -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/src/db/migrations/0045_role_write_scope.sql +122 -0
- package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
- package/src/db/migrations/0047_recipient_clearance.sql +89 -0
- package/src/db/migrations/0048_item_type_note.sql +16 -0
- package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
- package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
- package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
- package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
- package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
- package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
- package/src/db/migrations/0055_job_capability_contract.sql +300 -0
- package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
- package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
- package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
- package/src/db/migrations/0059_fiscal_contract_version.sql +59 -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,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Reserva atômica do direito de enviar.
|
|
4
|
+
*
|
|
5
|
+
* O desenho anterior era, em substância:
|
|
6
|
+
*
|
|
7
|
+
* alreadySent(key) → adapter.send() → markSent(key)
|
|
8
|
+
*
|
|
9
|
+
* Três passos, e o intervalo entre o primeiro e o terceiro é uma janela aberta:
|
|
10
|
+
* dois workers que perguntam "já enviei?" ao mesmo tempo recebem "não" os dois,
|
|
11
|
+
* e os dois chamam o provider. O cliente recebe a mesma cobrança duas vezes. A
|
|
12
|
+
* marcação posterior não conserta nada — o dinheiro do envio já saiu, e a
|
|
13
|
+
* mensagem também.
|
|
14
|
+
*
|
|
15
|
+
* Aqui a ordem é outra:
|
|
16
|
+
*
|
|
17
|
+
* claim(key) → markProviderAttempt → [só o vencedor] send() → settle
|
|
18
|
+
*
|
|
19
|
+
* `claim` é uma operação ÚNICA e atômica no armazenamento: ou ela devolve a
|
|
20
|
+
* reserva, ou devolve o motivo de não ter devolvido. Não existe estado
|
|
21
|
+
* intermediário observável entre "verifiquei" e "reservei", porque não há dois
|
|
22
|
+
* momentos. Quem não ganhou a reserva não chama o provider — nem para "tentar de
|
|
23
|
+
* novo mais rápido".
|
|
24
|
+
*
|
|
25
|
+
* **A reserva vem ANTES do efeito externo, e essa é a regra inteira.** Qualquer
|
|
26
|
+
* proteção que aconteça depois de `send` é contabilidade do que já foi feito,
|
|
27
|
+
* não controle.
|
|
28
|
+
*
|
|
29
|
+
* ## O que a H2 acrescentou, e por quê
|
|
30
|
+
*
|
|
31
|
+
* A reserva tem prazo, porque processo morre segurando reserva e uma etapa calada
|
|
32
|
+
* para sempre é pior que uma duplicata rara. Mas retomar por prazo vencido, do
|
|
33
|
+
* jeito que estava, era retomar **às cegas**: o motor não tinha como distinguir
|
|
34
|
+
*
|
|
35
|
+
* (a) o titular anterior morreu ANTES de falar com o provider — nada saiu, e
|
|
36
|
+
* reenviar é obviamente certo;
|
|
37
|
+
* (b) o titular anterior morreu DEPOIS de falar com o provider — pode ter saído,
|
|
38
|
+
* e reenviar duplica.
|
|
39
|
+
*
|
|
40
|
+
* Os dois casos chegavam aqui com a mesma cara. `markProviderAttempt` é o que os
|
|
41
|
+
* separa: uma marca durável, gravada IMEDIATAMENTE antes da chamada externa, em
|
|
42
|
+
* fronteira própria. Quem retoma uma reserva que já tinha essa marca sabe que o
|
|
43
|
+
* desfecho é **desconhecido**, não "não enviado" — e desconhecido não autoriza
|
|
44
|
+
* reenvio cego.
|
|
45
|
+
*
|
|
46
|
+
* A marca é conservadora de propósito: gravar antes de chamar significa que um
|
|
47
|
+
* processo que morre entre a marca e a chamada é classificado como "pode ter
|
|
48
|
+
* enviado" quando não enviou. Erra para o lado de calar uma mensagem, nunca para
|
|
49
|
+
* o lado de mandar duas.
|
|
50
|
+
*/
|
|
51
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
52
|
+
exports.DEFAULT_CLAIM_TTL_MS = void 0;
|
|
53
|
+
exports.createInMemoryDispatchClaimStore = createInMemoryDispatchClaimStore;
|
|
54
|
+
/** Prazo da reserva. Ver `createInMemoryDispatchClaimStore` para o raciocínio. */
|
|
55
|
+
exports.DEFAULT_CLAIM_TTL_MS = 10 * 60 * 1000;
|
|
56
|
+
/**
|
|
57
|
+
* Reserva em memória — **um processo só**.
|
|
58
|
+
*
|
|
59
|
+
* Serve a testes e a consumidores que rodam em instância única. Não serve a
|
|
60
|
+
* produção com mais de um worker, e a limitação está aqui em vez de num
|
|
61
|
+
* comentário do consumidor porque é o consumidor que erra: "por enquanto é uma
|
|
62
|
+
* instância" é verdade até o dia do primeiro redeploy com sobreposição.
|
|
63
|
+
*
|
|
64
|
+
* É atômica dentro do processo porque a decisão inteira acontece sem `await` no
|
|
65
|
+
* meio — em JavaScript isso basta para que dois `dispatch` concorrentes não se
|
|
66
|
+
* intercalem no ponto de decisão. Essa propriedade é o que o teste de
|
|
67
|
+
* concorrência in-process exercita; a prova de múltiplos processos é do store
|
|
68
|
+
* SQL.
|
|
69
|
+
*
|
|
70
|
+
* O prazo (`ttlMs`) existe pela mesma razão do store SQL: processo que morre
|
|
71
|
+
* segurando reserva não pode calar a etapa para sempre. Dez minutos é muito
|
|
72
|
+
* maior que qualquer timeout de provider (o mais longo aqui é 10 s) e muito
|
|
73
|
+
* menor que o intervalo entre ciclos da régua (24 h).
|
|
74
|
+
*/
|
|
75
|
+
function createInMemoryDispatchClaimStore(options = {}) {
|
|
76
|
+
const ttl = options.ttlMs ?? exports.DEFAULT_CLAIM_TTL_MS;
|
|
77
|
+
const now = options.now ?? (() => Date.now());
|
|
78
|
+
const entries = new Map();
|
|
79
|
+
let seq = 0;
|
|
80
|
+
const write = async (entry, event) => {
|
|
81
|
+
if (!options.audit)
|
|
82
|
+
return;
|
|
83
|
+
await options.audit.record({
|
|
84
|
+
kind: event.kind,
|
|
85
|
+
ctx: entry.req.ctx,
|
|
86
|
+
channel: entry.req.channel,
|
|
87
|
+
eventType: entry.req.eventType,
|
|
88
|
+
subjectRef: entry.req.subjectRef,
|
|
89
|
+
recipientRef: entry.req.recipientRef,
|
|
90
|
+
idempotencyKey: entry.req.idempotencyKey,
|
|
91
|
+
providerRef: event.providerRef ?? null,
|
|
92
|
+
skipReason: event.skipReason ?? null,
|
|
93
|
+
status: event.status ?? null,
|
|
94
|
+
code: event.code ?? null,
|
|
95
|
+
detail: event.detail ?? null,
|
|
96
|
+
attempt: entry.attempt,
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
return {
|
|
100
|
+
async claim(req) {
|
|
101
|
+
// NENHUM `await` daqui até o `entries.set`. Um `await` aqui reabriria
|
|
102
|
+
// exatamente a janela que este módulo existe para fechar.
|
|
103
|
+
const current = entries.get(req.idempotencyKey);
|
|
104
|
+
const at = now();
|
|
105
|
+
if (current) {
|
|
106
|
+
if (current.state === 'sent')
|
|
107
|
+
return { granted: false, reason: 'already_sent' };
|
|
108
|
+
if (current.state === 'failed_permanent') {
|
|
109
|
+
return { granted: false, reason: 'permanently_failed' };
|
|
110
|
+
}
|
|
111
|
+
if (current.state === 'unknown_outcome') {
|
|
112
|
+
return {
|
|
113
|
+
granted: false,
|
|
114
|
+
reason: 'unknown_outcome',
|
|
115
|
+
detail: 'desfecho da tentativa anterior é desconhecido',
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (current.state === 'in_flight' && current.expiresAt > at) {
|
|
119
|
+
return { granted: false, reason: 'in_flight' };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const attempt = (current?.attempt ?? 0) + 1;
|
|
123
|
+
const recovered = current?.state === 'in_flight' && current.expiresAt <= at;
|
|
124
|
+
const providerAttempts = current?.providerAttempts ?? 0;
|
|
125
|
+
const claimId = current?.claimId ?? `mem-${++seq}`;
|
|
126
|
+
const claimToken = `tok-${++seq}`;
|
|
127
|
+
const entry = {
|
|
128
|
+
claimId,
|
|
129
|
+
claimToken,
|
|
130
|
+
state: 'in_flight',
|
|
131
|
+
attempt,
|
|
132
|
+
expiresAt: at + ttl,
|
|
133
|
+
providerAttempts,
|
|
134
|
+
providerFirstAttemptAt: current?.providerFirstAttemptAt ?? null,
|
|
135
|
+
req,
|
|
136
|
+
};
|
|
137
|
+
entries.set(req.idempotencyKey, entry);
|
|
138
|
+
const claim = {
|
|
139
|
+
claimId,
|
|
140
|
+
claimToken,
|
|
141
|
+
idempotencyKey: req.idempotencyKey,
|
|
142
|
+
attempt,
|
|
143
|
+
recoveredFromExpiredClaim: recovered,
|
|
144
|
+
// Retomada só é DESCONHECIDA se o titular anterior chegou a falar com o
|
|
145
|
+
// provider. Recuperar uma reserva que morreu antes disso é seguro, e
|
|
146
|
+
// tratá-la como desconhecida calaria a etapa sem motivo.
|
|
147
|
+
previousAttemptReachedProvider: recovered && providerAttempts > 0,
|
|
148
|
+
providerFirstAttemptAgeMs: entry.providerFirstAttemptAt === null ? null : at - entry.providerFirstAttemptAt,
|
|
149
|
+
};
|
|
150
|
+
await write(entry, {
|
|
151
|
+
kind: 'dispatch_claimed',
|
|
152
|
+
code: claim.previousAttemptReachedProvider
|
|
153
|
+
? 'recovered_unknown_outcome'
|
|
154
|
+
: recovered
|
|
155
|
+
? 'recovered_from_expired_claim'
|
|
156
|
+
: null,
|
|
157
|
+
});
|
|
158
|
+
return { granted: true, claim };
|
|
159
|
+
},
|
|
160
|
+
async markProviderAttempt(claim) {
|
|
161
|
+
const current = entries.get(claim.idempotencyKey);
|
|
162
|
+
// Linha sumiu, ou a geração é outra: quem chamou perdeu a reserva. A marca
|
|
163
|
+
// NÃO é gravada — gravá-la contaria uma tentativa externa do titular atual
|
|
164
|
+
// para o zumbi, e a próxima retomada leria o número errado.
|
|
165
|
+
if (!current || current.claimToken !== claim.claimToken) {
|
|
166
|
+
return { authority: 'lost', detail: 'reserva retomada por outra execução' };
|
|
167
|
+
}
|
|
168
|
+
if (current.state !== 'in_flight') {
|
|
169
|
+
return {
|
|
170
|
+
authority: 'already_final',
|
|
171
|
+
state: current.state,
|
|
172
|
+
detail: `chave já assentada como ${current.state}`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
current.providerAttempts += 1;
|
|
176
|
+
current.providerFirstAttemptAt = current.providerFirstAttemptAt ?? now();
|
|
177
|
+
return { authority: 'held' };
|
|
178
|
+
},
|
|
179
|
+
async settle(claim, outcome, event) {
|
|
180
|
+
const current = entries.get(claim.idempotencyKey);
|
|
181
|
+
// Reserva já tomada por outro (prazo vencido): quem perdeu o direito não
|
|
182
|
+
// assenta o desfecho. A comparação é pelo TOKEN da geração, não pelo id da
|
|
183
|
+
// linha — o id sobrevive à retomada, o token não.
|
|
184
|
+
if (!current || current.claimToken !== claim.claimToken)
|
|
185
|
+
return;
|
|
186
|
+
if (outcome.kind === 'sent') {
|
|
187
|
+
current.state = 'sent';
|
|
188
|
+
}
|
|
189
|
+
else if (outcome.kind === 'failed') {
|
|
190
|
+
current.state = outcome.permanent ? 'failed_permanent' : 'failed_retryable';
|
|
191
|
+
current.expiresAt = 0;
|
|
192
|
+
}
|
|
193
|
+
else if (outcome.kind === 'unknown') {
|
|
194
|
+
current.state = 'unknown_outcome';
|
|
195
|
+
current.expiresAt = 0;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
// `released`: a chave volta a estar livre, sem contar como falha. O
|
|
199
|
+
// `attempt` permanece — é histórico, e serve para ver insistência.
|
|
200
|
+
current.state = 'failed_retryable';
|
|
201
|
+
current.expiresAt = 0;
|
|
202
|
+
}
|
|
203
|
+
await write(current, event);
|
|
204
|
+
},
|
|
205
|
+
async peek(idempotencyKey) {
|
|
206
|
+
const current = entries.get(idempotencyKey);
|
|
207
|
+
if (!current)
|
|
208
|
+
return 'none';
|
|
209
|
+
if (current.state === 'in_flight' && current.expiresAt <= now())
|
|
210
|
+
return 'failed_retryable';
|
|
211
|
+
return current.state;
|
|
212
|
+
},
|
|
213
|
+
async resolveUnknownOutcome(idempotencyKey, resolution, detail) {
|
|
214
|
+
const current = entries.get(idempotencyKey);
|
|
215
|
+
if (!current || current.state !== 'unknown_outcome')
|
|
216
|
+
return;
|
|
217
|
+
current.state = resolution === 'sent' ? 'sent' : 'failed_retryable';
|
|
218
|
+
current.expiresAt = 0;
|
|
219
|
+
await write(current, {
|
|
220
|
+
kind: resolution === 'sent' ? 'dispatch_sent' : 'dispatch_failed',
|
|
221
|
+
status: resolution === 'sent' ? 'sent' : null,
|
|
222
|
+
code: `unknown_resolved_${resolution}`,
|
|
223
|
+
detail: detail ?? null,
|
|
224
|
+
});
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/communication/claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CLEARANCE_NOT_REQUIRED = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Loja que libera tudo — para fluxos em que o destinatário **é** o remetente.
|
|
6
|
+
*
|
|
7
|
+
* O caso legítimo: notificação para a equipe do próprio escritório, teste de
|
|
8
|
+
* canal para o endereço de quem está configurando, ensaio sem envio. Ali não há
|
|
9
|
+
* terceiro a proteger, e exigir liberação seria cerimônia sem objeto.
|
|
10
|
+
*
|
|
11
|
+
* Existe com nome explícito, e não como default do motor, para que usá-la seja
|
|
12
|
+
* uma escolha visível na chamada em vez de o que acontece quando alguém
|
|
13
|
+
* esquece.
|
|
14
|
+
*/
|
|
15
|
+
exports.CLEARANCE_NOT_REQUIRED = {
|
|
16
|
+
find: async () => ({ cleared: true, clearedAt: null }),
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=clearance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearance.js","sourceRoot":"","sources":["../../../src/communication/clearance.ts"],"names":[],"mappings":";;;AA2CA;;;;;;;;;;GAUG;AACU,QAAA,sBAAsB,GAA4B;IAC7D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;CACvD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Permissão de contato por canal.
|
|
4
|
+
*
|
|
5
|
+
* O motor implementa o MECANISMO (registrar, consultar, recusar). A POLÍTICA —
|
|
6
|
+
* o que fazer quando ninguém decidiu ainda — é do produto, porque a resposta
|
|
7
|
+
* depende da relação: um escritório cobrando honorário de cliente contratado
|
|
8
|
+
* não está na mesma posição de quem manda promoção para uma lista.
|
|
9
|
+
*
|
|
10
|
+
* O que o motor não faz, em nenhuma configuração: inventar consentimento.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.evaluateConsent = evaluateConsent;
|
|
14
|
+
/**
|
|
15
|
+
* `denied` é absoluto.
|
|
16
|
+
*
|
|
17
|
+
* Nenhuma política do produto reverte um opt-out — não há parâmetro para isso, e
|
|
18
|
+
* é deliberado. Um `denied` vindo de `customer_reply` (o cliente respondeu SAIR
|
|
19
|
+
* no WhatsApp) é o registro mais forte que existe no sistema, e o dia em que
|
|
20
|
+
* alguém puder configurar "ignorar opt-out para cobrança" é o dia em que a
|
|
21
|
+
* configuração vai estar ligada em algum tenant.
|
|
22
|
+
*/
|
|
23
|
+
function evaluateConsent(channel, record, policy = {}) {
|
|
24
|
+
if (record?.state === 'denied') {
|
|
25
|
+
return {
|
|
26
|
+
allowed: false,
|
|
27
|
+
reason: 'opted_out',
|
|
28
|
+
detail: `destinatário recusou o canal ${channel}`,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (record?.state === 'granted')
|
|
32
|
+
return { allowed: true };
|
|
33
|
+
// Sem registro, ou registro `unknown`: a política do produto decide.
|
|
34
|
+
const onUnknown = policy.onUnknown?.[channel] ?? 'fail_safe';
|
|
35
|
+
if (onUnknown === 'allow')
|
|
36
|
+
return { allowed: true };
|
|
37
|
+
return {
|
|
38
|
+
allowed: false,
|
|
39
|
+
reason: 'consent_unknown',
|
|
40
|
+
detail: `sem permissão registrada para ${channel}`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=consent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consent.js","sourceRoot":"","sources":["../../../src/communication/consent.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AA+CH,0CAwBC;AAjCD;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,OAAmB,EACnB,MAA4B,EAC5B,SAAwB,EAAE;IAE1B,IAAI,MAAM,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,gCAAgC,OAAO,EAAE;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE1D,qEAAqE;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC;IAC7D,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEpD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,iCAAiC,OAAO,EAAE;KACnD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contexto de toda operação de comunicação do ecossistema.
|
|
4
|
+
*
|
|
5
|
+
* Existe porque o motor é UM e os consumidores são vários. Sem contexto
|
|
6
|
+
* explícito, "envie esta mensagem" é ambíguo em três dimensões que só aparecem
|
|
7
|
+
* quando já é tarde: de qual escritório, sob qual marca, com qual número.
|
|
8
|
+
*
|
|
9
|
+
* Nenhum campo tem valor padrão, e nenhum é inferido do ambiente. Um default
|
|
10
|
+
* aqui seria a porta pela qual um produto envia com a identidade de outro — e
|
|
11
|
+
* seria justamente no caso que ninguém testou, porque o caminho feliz sempre
|
|
12
|
+
* passa o contexto certo.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.validateContext = validateContext;
|
|
16
|
+
exports.contextRef = contextRef;
|
|
17
|
+
const SLUG = /^[a-z][a-z0-9-]{1,62}[a-z0-9]$/;
|
|
18
|
+
/**
|
|
19
|
+
* Valida o contexto na BORDA do motor.
|
|
20
|
+
*
|
|
21
|
+
* Rejeitar aqui, e não no adapter, é o que garante que nenhum caminho de envio
|
|
22
|
+
* exista sem contexto: o adapter recebe um contexto já validado ou não é
|
|
23
|
+
* chamado. Um adapter que valida por conta própria é um adapter que pode
|
|
24
|
+
* esquecer.
|
|
25
|
+
*/
|
|
26
|
+
function validateContext(ctx) {
|
|
27
|
+
if (!ctx.tenantId || !ctx.tenantId.trim())
|
|
28
|
+
return 'tenant';
|
|
29
|
+
if (!SLUG.test(ctx.product))
|
|
30
|
+
return 'product';
|
|
31
|
+
if (!SLUG.test(ctx.brand))
|
|
32
|
+
return 'brand';
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Forma canônica do contexto para chave e trilha: `tenant/product/brand`.
|
|
37
|
+
*
|
|
38
|
+
* Não é PII e não é segredo — é o que aparece em log e em métrica, e é o que
|
|
39
|
+
* permite atribuir custo por tenant, produto e marca depois, sem que nada
|
|
40
|
+
* precise ser reinstrumentado.
|
|
41
|
+
*/
|
|
42
|
+
function contextRef(ctx) {
|
|
43
|
+
return `${ctx.tenantId}/${ctx.product}/${ctx.brand}`;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/communication/context.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAkCH,0CAKC;AASD,gCAEC;AAnCD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAW9C;;;;;;;GAOG;AACH,SAAgB,eAAe,CAAC,GAAyB;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,GAAyB;IAClD,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Resolução de credencial de canal — do NOME lógico ao segredo.
|
|
4
|
+
*
|
|
5
|
+
* **O motor nunca vê o segredo antes da borda do adapter.** O que atravessa o
|
|
6
|
+
* domínio é `credentialRef`, um nome; o valor só é materializado no último
|
|
7
|
+
* passo, e a trava por conta (`credentialResolverFor`) garante que o adapter só
|
|
8
|
+
* consiga abrir a referência DAQUELA conta.
|
|
9
|
+
*
|
|
10
|
+
* O que muda nesta fase é de onde o valor vem.
|
|
11
|
+
*
|
|
12
|
+
* O resolvedor anterior traduzia um punhado de nomes fixos de variável de
|
|
13
|
+
* ambiente. Isso funciona para um tenant e falha de duas maneiras para dois:
|
|
14
|
+
* ou os dois apontam para o mesmo nome e COMPARTILHAM o token — a WABA de uma
|
|
15
|
+
* marca respondendo pelo comportamento de outra —, ou apontam para nomes
|
|
16
|
+
* distintos e nenhum resolve. Nenhuma das duas é aceitável num canal em que o
|
|
17
|
+
* bloqueio se propaga.
|
|
18
|
+
*
|
|
19
|
+
* A saída não é uma tabela nova de segredos: o ecossistema já tem o Vault
|
|
20
|
+
* Engine (migração 0012) — AES-256-GCM, chave-mestra fora do banco, tenant como
|
|
21
|
+
* dado autenticado adicional da cifra, RLS FORCE, vencimento e rotação. Um
|
|
22
|
+
* segundo cofre seria um segundo lugar para errar.
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.createChannelCredentialResolver = createChannelCredentialResolver;
|
|
26
|
+
exports.isVaultRef = isVaultRef;
|
|
27
|
+
exports.isAcceptableForNewBinding = isAcceptableForNewBinding;
|
|
28
|
+
exports.noCredentialResolver = noCredentialResolver;
|
|
29
|
+
/** Esquema das referências que apontam para o cofre. */
|
|
30
|
+
const VAULT_SCHEME = 'vault://';
|
|
31
|
+
/**
|
|
32
|
+
* Nomes de variável de ambiente ainda aceitos — **legado, em remoção**.
|
|
33
|
+
*
|
|
34
|
+
* `RESEND_API_KEY` continua porque a SC entrega e-mail em produção por ela
|
|
35
|
+
* hoje, e desligá-la para exigir configuração por escritório pararia a régua de
|
|
36
|
+
* quem está cobrando agora. Removê-la não é hardening, é interrupção de serviço.
|
|
37
|
+
*
|
|
38
|
+
* `WHATSAPP_ACCESS_TOKEN` e `SMS_API_KEY` **saíram**. Nenhum tenant os usa —
|
|
39
|
+
* não há canal de telefone configurado em lugar nenhum —, então a remoção não
|
|
40
|
+
* quebra nada e fecha a porta antes de o primeiro tenant entrar por ela. Um
|
|
41
|
+
* token global de WhatsApp que "ainda ninguém usa" é exatamente o tipo de
|
|
42
|
+
* conveniência que vira padrão no dia em que alguém tem pressa.
|
|
43
|
+
*
|
|
44
|
+
* @deprecated Novos tenants devem usar `vault://`. Plano de remoção: quando a
|
|
45
|
+
* credencial de e-mail da plataforma migrar para o cofre, esta lista some junto
|
|
46
|
+
* com esta função.
|
|
47
|
+
*/
|
|
48
|
+
const LEGACY_ENV_NAMES = new Set(['RESEND_API_KEY']);
|
|
49
|
+
/** Canais para os quais uma referência de ambiente nunca é aceitável. */
|
|
50
|
+
const ENV_FORBIDDEN_PREFIXES = ['WHATSAPP_', 'SMS_', 'META_'];
|
|
51
|
+
/**
|
|
52
|
+
* Resolvedor composto: cofre primeiro, ambiente só para o legado declarado.
|
|
53
|
+
*
|
|
54
|
+
* A ordem importa e é fixa. Se o ambiente viesse primeiro, uma variável com o
|
|
55
|
+
* nome certo passaria na frente do cofre do tenant sem que ninguém percebesse —
|
|
56
|
+
* e o sintoma seria o pior possível: envio bem-sucedido, pela conta errada.
|
|
57
|
+
*/
|
|
58
|
+
function createChannelCredentialResolver(tenantId, secrets, env = process.env) {
|
|
59
|
+
return async (ref) => {
|
|
60
|
+
const trimmed = ref?.trim() ?? '';
|
|
61
|
+
if (!trimmed)
|
|
62
|
+
return undefined;
|
|
63
|
+
if (trimmed.startsWith(VAULT_SCHEME)) {
|
|
64
|
+
if (!secrets)
|
|
65
|
+
return undefined;
|
|
66
|
+
const name = trimmed.slice(VAULT_SCHEME.length).trim();
|
|
67
|
+
// Um nome vazio depois do esquema resolveria para "qualquer coisa" na
|
|
68
|
+
// implementação errada do store. Recusa antes de chegar lá.
|
|
69
|
+
if (!name)
|
|
70
|
+
return undefined;
|
|
71
|
+
return secrets.reveal(tenantId, name);
|
|
72
|
+
}
|
|
73
|
+
// A partir daqui é o caminho legado, e ele é fechado por allowlist de NOME.
|
|
74
|
+
// Filtrar por "o que parece segredo" deixaria `DATABASE_URL` passar inteiro,
|
|
75
|
+
// e `credentialRef` é editável por quem administra o escritório.
|
|
76
|
+
const name = trimmed.split('/').pop() ?? '';
|
|
77
|
+
if (ENV_FORBIDDEN_PREFIXES.some((p) => name.startsWith(p)))
|
|
78
|
+
return undefined;
|
|
79
|
+
if (!LEGACY_ENV_NAMES.has(name))
|
|
80
|
+
return undefined;
|
|
81
|
+
return env[name];
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* A referência aponta para o cofre?
|
|
86
|
+
*
|
|
87
|
+
* Usado por guard e por tela: um vínculo novo com referência de ambiente é
|
|
88
|
+
* dívida sendo criada, e deve ser visível no momento do cadastro, não seis meses
|
|
89
|
+
* depois.
|
|
90
|
+
*/
|
|
91
|
+
function isVaultRef(ref) {
|
|
92
|
+
return typeof ref === 'string' && ref.trim().startsWith(VAULT_SCHEME);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Referência aceitável para um vínculo NOVO?
|
|
96
|
+
*
|
|
97
|
+
* `NO_GLOBAL_WHATSAPP_CREDENTIAL_FOR_NEW_TENANTS` deixa de ser promessa de
|
|
98
|
+
* documento e vira predicado que um teste consegue exercer.
|
|
99
|
+
*/
|
|
100
|
+
function isAcceptableForNewBinding(channel, ref) {
|
|
101
|
+
if (channel === 'whatsapp' || channel === 'sms')
|
|
102
|
+
return isVaultRef(ref);
|
|
103
|
+
return isVaultRef(ref) || LEGACY_ENV_NAMES.has((ref ?? '').split('/').pop() ?? '');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolvedor que não abre NADA — nem cofre, nem ambiente.
|
|
107
|
+
*
|
|
108
|
+
* Existe para as composições que montam o motor só para LER configuração
|
|
109
|
+
* (quais canais estão registrados, qual o remetente, qual o `credentialRef`) e
|
|
110
|
+
* nunca despacham. `GET /v1/communication/channels` é exatamente esse caso.
|
|
111
|
+
*
|
|
112
|
+
* Passar o resolvedor de envio ali seria dar à rota de leitura a capacidade de
|
|
113
|
+
* decifrar, ainda que ela não a exerça hoje. Capacidade que não é exercida é
|
|
114
|
+
* capacidade que alguém exerce depois, na primeira mudança que parecer
|
|
115
|
+
* inofensiva — e a diferença entre "não usa" e "não pode" é a única que sobrevive
|
|
116
|
+
* a essa mudança.
|
|
117
|
+
*/
|
|
118
|
+
function noCredentialResolver() {
|
|
119
|
+
return async () => undefined;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../../src/communication/credentials.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;AAiDH,0EA0BC;AASD,gCAEC;AAQD,8DAGC;AAeD,oDAEC;AAjGD,wDAAwD;AACxD,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAE1E,yEAAyE;AACzE,MAAM,sBAAsB,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9D;;;;;;GAMG;AACH,SAAgB,+BAA+B,CAC7C,QAAgB,EAChB,OAAiC,EACjC,MAAyB,OAAO,CAAC,GAAG;IAEpC,OAAO,KAAK,EAAE,GAAW,EAA+B,EAAE;QACxD,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAE/B,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,sEAAsE;YACtE,4DAA4D;YAC5D,IAAI,CAAC,IAAI;gBAAE,OAAO,SAAS,CAAC;YAC5B,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,4EAA4E;QAC5E,6EAA6E;QAC7E,iEAAiE;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QAC7E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QAClD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,GAAW;IACpC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,OAAe,EAAE,GAAW;IACpE,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;IACxE,OAAO,UAAU,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,oBAAoB;IAClC,OAAO,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Ensaio da régua da SC sobre uma carteira SINTÉTICA.
|
|
4
|
+
*
|
|
5
|
+
* Executa o motor real — mesmas portas, mesma ordem, mesmas recusas — sobre uma
|
|
6
|
+
* carteira montada para cobrir cada desfecho do relatório. Não é substituto do
|
|
7
|
+
* ensaio contra a carteira do escritório: aquele exige acesso ao banco de
|
|
8
|
+
* produção e autorização humana, e é o Bloco 9.
|
|
9
|
+
*
|
|
10
|
+
* O que ele prova, e que o ensaio real não provaria melhor: que cada contador do
|
|
11
|
+
* relatório corresponde a uma decisão distinta do motor, e que nenhuma delas
|
|
12
|
+
* alcança um adapter.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.runDryRunScenario = runDryRunScenario;
|
|
16
|
+
const clearance_js_1 = require("./clearance.js");
|
|
17
|
+
const index_js_1 = require("./index.js");
|
|
18
|
+
/**
|
|
19
|
+
* Canal que nunca envia e registra que foi chamado.
|
|
20
|
+
*
|
|
21
|
+
* Se algum destes acumular chamadas durante um ensaio, o ensaio está enviando —
|
|
22
|
+
* e é melhor descobrir por um contador do que pela fatura.
|
|
23
|
+
*/
|
|
24
|
+
function inertChannel(key, calls) {
|
|
25
|
+
return {
|
|
26
|
+
key,
|
|
27
|
+
providerName: 'inert',
|
|
28
|
+
// Um canal inerte não fala com provider nenhum, então não há garantia
|
|
29
|
+
// externa que ele possa declarar. Ver `capabilities.ts`.
|
|
30
|
+
capabilities: index_js_1.NO_PROVIDER_GUARANTEES,
|
|
31
|
+
isConfigured: () => true,
|
|
32
|
+
async send() {
|
|
33
|
+
calls.count += 1;
|
|
34
|
+
return { kind: 'unavailable', code: 'inert', detail: 'canal inerte de ensaio' };
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
async function runDryRunScenario(scenario) {
|
|
39
|
+
const calls = { count: 0 };
|
|
40
|
+
const channels = Object.fromEntries(scenario.order.map((key) => [key, inertChannel(key, calls)]));
|
|
41
|
+
const accounts = {
|
|
42
|
+
async find(ctx, channel) {
|
|
43
|
+
return (scenario.accounts.find((a) => a.channel === channel &&
|
|
44
|
+
a.tenantId === ctx.tenantId &&
|
|
45
|
+
a.product === ctx.product &&
|
|
46
|
+
a.brand === ctx.brand) ?? null);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const templates = {
|
|
50
|
+
async candidates(ctx, channel, eventType, locale) {
|
|
51
|
+
return scenario.templates.filter((t) => t.channel === channel &&
|
|
52
|
+
t.eventType === eventType &&
|
|
53
|
+
t.locale === locale &&
|
|
54
|
+
t.product === ctx.product &&
|
|
55
|
+
(t.tenantId === null || t.tenantId === ctx.tenantId) &&
|
|
56
|
+
(t.brand === null || t.brand === ctx.brand));
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const byId = new Map(scenario.clients.map((c) => [c.id, c]));
|
|
60
|
+
// Chaves que a trilha já teria. Calculadas com a MESMA função do motor, e não
|
|
61
|
+
// simuladas depois sobre o resultado: um ensaio que fabrica o desfecho de
|
|
62
|
+
// "já enviado" testa o próprio cenário, não o motor.
|
|
63
|
+
const alreadySentKeys = new Set();
|
|
64
|
+
for (const client of scenario.clients) {
|
|
65
|
+
if (!client.alreadySent)
|
|
66
|
+
continue;
|
|
67
|
+
for (const channel of scenario.order) {
|
|
68
|
+
for (const tpl of scenario.templates.filter((t) => t.channel === channel && t.eventType === scenario.eventType)) {
|
|
69
|
+
alreadySentKeys.add((0, index_js_1.buildIdempotencyKey)({
|
|
70
|
+
ctx: scenario.ctx,
|
|
71
|
+
channel,
|
|
72
|
+
eventType: scenario.eventType,
|
|
73
|
+
subjectRef: `receivable-${client.id}`,
|
|
74
|
+
templateVersion: tpl.version,
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const consent = {
|
|
80
|
+
async find(recipientRef, channel) {
|
|
81
|
+
return byId.get(recipientRef)?.consent.find((r) => r.channel === channel) ?? null;
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
const results = [];
|
|
85
|
+
for (const client of scenario.clients) {
|
|
86
|
+
results.push(await (0, index_js_1.dispatch)({
|
|
87
|
+
ctx: scenario.ctx,
|
|
88
|
+
eventType: scenario.eventType,
|
|
89
|
+
subjectRef: `receivable-${client.id}`,
|
|
90
|
+
recipientRef: client.id,
|
|
91
|
+
variables: {
|
|
92
|
+
clientName: client.name,
|
|
93
|
+
amount: 'R$ 1.200,00',
|
|
94
|
+
dueDate: '10/09/2026',
|
|
95
|
+
},
|
|
96
|
+
policy: { order: [...scenario.order] },
|
|
97
|
+
}, {
|
|
98
|
+
channels,
|
|
99
|
+
accounts,
|
|
100
|
+
templates,
|
|
101
|
+
consent,
|
|
102
|
+
// Ensaio não envia nada: a liberação do destinatário não tem objeto
|
|
103
|
+
// aqui, e exigi-la esconderia os pulos que o ensaio existe para
|
|
104
|
+
// mostrar.
|
|
105
|
+
clearance: clearance_js_1.CLEARANCE_NOT_REQUIRED,
|
|
106
|
+
// O telefone do cadastro é entregue CRU, sem limpeza prévia: é o motor
|
|
107
|
+
// que precisa recusar o que não serve, e um ensaio que normaliza antes
|
|
108
|
+
// esconderia exatamente o defeito que ele deveria encontrar.
|
|
109
|
+
resolveRecipient: async (ref, channel) => {
|
|
110
|
+
const c = byId.get(ref);
|
|
111
|
+
if (!c)
|
|
112
|
+
return null;
|
|
113
|
+
return channel === 'email' ? c.email : c.phone;
|
|
114
|
+
},
|
|
115
|
+
buildContent: (channel, tpl, ordered) => {
|
|
116
|
+
if (channel === 'email') {
|
|
117
|
+
return { kind: 'email', subject: tpl.subject ?? '', html: '', text: '' };
|
|
118
|
+
}
|
|
119
|
+
if (channel === 'whatsapp') {
|
|
120
|
+
if (!tpl.providerTemplateName)
|
|
121
|
+
return null;
|
|
122
|
+
return {
|
|
123
|
+
kind: 'whatsapp_template',
|
|
124
|
+
templateName: tpl.providerTemplateName,
|
|
125
|
+
language: tpl.locale,
|
|
126
|
+
variables: ordered,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return { kind: 'text', body: ordered.join(' ') };
|
|
130
|
+
},
|
|
131
|
+
/*
|
|
132
|
+
* Reserva do ensaio: LÊ, nunca toma.
|
|
133
|
+
*
|
|
134
|
+
* `claim` e `settle` lançam de propósito. Um dry-run que chegasse a
|
|
135
|
+
* reservar seria a execução real com o envio removido — e calaria a
|
|
136
|
+
* etapa de verdade —, então em vez de um no-op silencioso o cenário
|
|
137
|
+
* falha alto se o motor tentar. É o teste de mutação embutido no
|
|
138
|
+
* próprio ensaio: mover a porta de dry-run para depois do claim
|
|
139
|
+
* quebra este arquivo.
|
|
140
|
+
*/
|
|
141
|
+
claims: {
|
|
142
|
+
async claim() {
|
|
143
|
+
throw new Error('dry-run não reserva chave');
|
|
144
|
+
},
|
|
145
|
+
async settle() {
|
|
146
|
+
throw new Error('dry-run não assenta reserva');
|
|
147
|
+
},
|
|
148
|
+
async markProviderAttempt() {
|
|
149
|
+
// Marcar tentativa de provider num ensaio significaria que o
|
|
150
|
+
// ensaio está prestes a falar com o provider. Lança pela mesma
|
|
151
|
+
// razão que `claim`: é o oráculo de mutação embutido.
|
|
152
|
+
throw new Error('dry-run não marca tentativa de provider');
|
|
153
|
+
},
|
|
154
|
+
async resolveUnknownOutcome() {
|
|
155
|
+
throw new Error('dry-run não resolve desfecho desconhecido');
|
|
156
|
+
},
|
|
157
|
+
async peek(key) {
|
|
158
|
+
return alreadySentKeys.has(key) ? 'sent' : 'none';
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
audit: (0, index_js_1.createNullAuditSink)(),
|
|
162
|
+
}, { dryRun: true }));
|
|
163
|
+
}
|
|
164
|
+
return { results, adapterCalls: calls.count };
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=dry-run-scenario.js.map
|