@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,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gestão de template no WhatsApp — adapter da Meta Cloud API.
|
|
3
|
+
*
|
|
4
|
+
* Implementa `TemplateManagementProvider`. Todo o vocabulário da Meta mora
|
|
5
|
+
* aqui: `components`, `BODY`, `example.body_text`, categorias em maiúsculas,
|
|
6
|
+
* `POST /{waba-id}/message_templates`. O domínio não conhece nenhum deles.
|
|
7
|
+
*/
|
|
8
|
+
import { graphUrl } from '../graph.js';
|
|
9
|
+
import { metaLanguageCode } from './whatsapp-language.js';
|
|
10
|
+
const TIMEOUT_MS = 20_000;
|
|
11
|
+
/** O domínio fala minúsculo; a Meta espera maiúsculo. A tradução mora aqui. */
|
|
12
|
+
const CATEGORY = {
|
|
13
|
+
utility: 'UTILITY',
|
|
14
|
+
marketing: 'MARKETING',
|
|
15
|
+
authentication: 'AUTHENTICATION',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Classificação do erro da Meta.
|
|
19
|
+
*
|
|
20
|
+
* `duplicate_name` merece classe própria porque é o desfecho ESPERADO de uma
|
|
21
|
+
* resubmissão — quem chama trata como "já existe", relê e segue, em vez de
|
|
22
|
+
* tratar como falha e tentar de novo.
|
|
23
|
+
*/
|
|
24
|
+
function classify(status, code, subcode) {
|
|
25
|
+
if (code === 190 || code === 200 || code === 10 || code === 3)
|
|
26
|
+
return 'unauthorized';
|
|
27
|
+
// 2388023 / subcode 2388024: nome de template já em uso na conta.
|
|
28
|
+
if (code === 2388023 || subcode === 2388024)
|
|
29
|
+
return 'duplicate_name';
|
|
30
|
+
if (code === 4 || code === 80007 || status === 429)
|
|
31
|
+
return 'rate_limited';
|
|
32
|
+
if (status >= 500)
|
|
33
|
+
return 'network';
|
|
34
|
+
if (code === 100 || code === 132000)
|
|
35
|
+
return 'invalid_content';
|
|
36
|
+
return 'provider_error';
|
|
37
|
+
}
|
|
38
|
+
export function createWhatsAppTemplateProvider(config) {
|
|
39
|
+
const doFetch = config.fetchImpl ?? fetch;
|
|
40
|
+
return {
|
|
41
|
+
channel: 'whatsapp',
|
|
42
|
+
async submit(submission) {
|
|
43
|
+
const body = {
|
|
44
|
+
name: submission.name,
|
|
45
|
+
language: metaLanguageCode(submission.language),
|
|
46
|
+
category: CATEGORY[submission.category],
|
|
47
|
+
components: [
|
|
48
|
+
{
|
|
49
|
+
type: 'BODY',
|
|
50
|
+
text: submission.bodyText,
|
|
51
|
+
// `body_text` é uma lista de listas: uma linha de exemplos por
|
|
52
|
+
// conjunto de variáveis do corpo. Omitido quando não há variável —
|
|
53
|
+
// um `example` vazio é recusado.
|
|
54
|
+
...(submission.bodyExample && submission.bodyExample.length > 0
|
|
55
|
+
? { example: { body_text: [submission.bodyExample] } }
|
|
56
|
+
: {}),
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
let res;
|
|
61
|
+
try {
|
|
62
|
+
res = await doFetch(graphUrl(`${encodeURIComponent(config.wabaId)}/message_templates`, config.env), {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
authorization: `Bearer ${config.accessToken}`,
|
|
66
|
+
'content-type': 'application/json',
|
|
67
|
+
},
|
|
68
|
+
body: JSON.stringify(body),
|
|
69
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Nada da exceção é propagado: em algumas implementações de `fetch` a
|
|
74
|
+
// mensagem inclui a URL, e a URL leva o token no header — mas o corpo
|
|
75
|
+
// do erro também pode ecoar cabeçalhos em proxies.
|
|
76
|
+
return { ok: false, reason: 'network' };
|
|
77
|
+
}
|
|
78
|
+
const payload = (await res.json().catch(() => null));
|
|
79
|
+
if (!res.ok) {
|
|
80
|
+
const err = (payload?.error ?? {});
|
|
81
|
+
return { ok: false, reason: classify(res.status, err.code, err.error_subcode) };
|
|
82
|
+
}
|
|
83
|
+
const id = payload?.id;
|
|
84
|
+
const status = payload?.status;
|
|
85
|
+
const category = payload?.category;
|
|
86
|
+
return {
|
|
87
|
+
ok: true,
|
|
88
|
+
...(typeof id === 'string' ? { providerRef: id } : {}),
|
|
89
|
+
// Sem `status` no corpo, o desfecho honesto é "submetido, revisão
|
|
90
|
+
// pendente" — e não inventar `APPROVED`.
|
|
91
|
+
status: typeof status === 'string' ? status : 'PENDING',
|
|
92
|
+
...(typeof category === 'string' ? { category } : {}),
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=whatsapp-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp-templates.js","sourceRoot":"","sources":["../../../src/communication/adapters/whatsapp-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter de WhatsApp — Meta Cloud API.
|
|
3
|
+
*
|
|
4
|
+
* O provider é escolha desta implementação, não do domínio: o consumidor pede
|
|
5
|
+
* `channel: 'whatsapp'` e nunca vê `wamid`, `phoneNumberId` nem código de erro
|
|
6
|
+
* da Meta. Trocar por Twilio ou Zenvia é escrever outro arquivo deste tamanho e
|
|
7
|
+
* registrar outro adapter — nenhuma linha de régua muda.
|
|
8
|
+
*
|
|
9
|
+
* **Trava de envio real.** Enquanto `liveSend` não for explicitamente ligado, o
|
|
10
|
+
* adapter recusa com `unavailable` ANTES de qualquer rede. A trava é do código,
|
|
11
|
+
* não do processo: uma frente que promete "não enviar mensagem real" e depende
|
|
12
|
+
* de ninguém chamar a função errada não prometeu nada.
|
|
13
|
+
*/
|
|
14
|
+
import type { CommunicationChannel } from '../channel.js';
|
|
15
|
+
import type { ChannelAccount } from '../identity.js';
|
|
16
|
+
export interface WhatsAppAdapterConfig {
|
|
17
|
+
account: ChannelAccount;
|
|
18
|
+
resolveCredential: (ref: string) => Promise<string | undefined>;
|
|
19
|
+
/**
|
|
20
|
+
* Sem isto, nada sai. Ligar é um ato deliberado, feito uma vez, com
|
|
21
|
+
* autorização humana — e o padrão `false` significa que esquecer de ligar
|
|
22
|
+
* falha fechado, que é a direção certa para falhar.
|
|
23
|
+
*/
|
|
24
|
+
liveSend?: boolean;
|
|
25
|
+
/** Injetável para teste. Nenhum teste deve alcançar a rede real. */
|
|
26
|
+
fetchImpl?: typeof fetch;
|
|
27
|
+
}
|
|
28
|
+
export declare function createWhatsAppChannel(config: WhatsAppAdapterConfig): CommunicationChannel;
|
|
29
|
+
//# sourceMappingURL=whatsapp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.d.ts","sourceRoot":"","sources":["../../../src/communication/adapters/whatsapp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,oBAAoB,EAAoC,MAAM,eAAe,CAAC;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoCrD,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AA6CD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,oBAAoB,CAkGzF"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter de WhatsApp — Meta Cloud API.
|
|
3
|
+
*
|
|
4
|
+
* O provider é escolha desta implementação, não do domínio: o consumidor pede
|
|
5
|
+
* `channel: 'whatsapp'` e nunca vê `wamid`, `phoneNumberId` nem código de erro
|
|
6
|
+
* da Meta. Trocar por Twilio ou Zenvia é escrever outro arquivo deste tamanho e
|
|
7
|
+
* registrar outro adapter — nenhuma linha de régua muda.
|
|
8
|
+
*
|
|
9
|
+
* **Trava de envio real.** Enquanto `liveSend` não for explicitamente ligado, o
|
|
10
|
+
* adapter recusa com `unavailable` ANTES de qualquer rede. A trava é do código,
|
|
11
|
+
* não do processo: uma frente que promete "não enviar mensagem real" e depende
|
|
12
|
+
* de ninguém chamar a função errada não prometeu nada.
|
|
13
|
+
*/
|
|
14
|
+
import { graphUrl } from '../graph.js';
|
|
15
|
+
import { metaLanguageCode } from './whatsapp-language.js';
|
|
16
|
+
/**
|
|
17
|
+
* O que a Meta Cloud API garante, e o que este adapter exerce.
|
|
18
|
+
*
|
|
19
|
+
* **Sem idempotência de provider.** A referência da Cloud API não documenta
|
|
20
|
+
* cabeçalho de idempotência nem parâmetro equivalente; o `wamid` é identificador
|
|
21
|
+
* de mensagem devolvido DEPOIS do aceite, que é outra coisa — ele não impede a
|
|
22
|
+
* segunda chamada de virar a segunda mensagem.
|
|
23
|
+
*
|
|
24
|
+
* A consequência prática está no motor, não aqui: uma reserva de WhatsApp retomada
|
|
25
|
+
* de um titular que já tinha chamado a Meta **não é reenviada**. Ela para em
|
|
26
|
+
* `unknown_outcome`, visível para quem opera. Inventar uma chave que a Meta não lê
|
|
27
|
+
* daria a aparência da proteção sem nada por trás — que é pior que não ter.
|
|
28
|
+
*
|
|
29
|
+
* `supportsDeliveryWebhook` é `true` porque a rota de callback da Meta existe e é
|
|
30
|
+
* exercida (`routes/communication-webhooks.ts`); `supportsReadReceipt` também,
|
|
31
|
+
* porque `read` é um dos status que ela trata.
|
|
32
|
+
*/
|
|
33
|
+
const META_CLOUD_CAPABILITIES = {
|
|
34
|
+
supportsProviderIdempotency: false,
|
|
35
|
+
supportsMessageLookup: false,
|
|
36
|
+
supportsDeliveryWebhook: true,
|
|
37
|
+
supportsReadReceipt: true,
|
|
38
|
+
};
|
|
39
|
+
/*
|
|
40
|
+
* A versão da Graph API mora em `../graph.ts`, e não aqui.
|
|
41
|
+
*
|
|
42
|
+
* Este arquivo declarava `v21.0` — de 2024-10, no fim da janela de dois anos em
|
|
43
|
+
* que a Meta mantém uma versão viva. Duas versões no mesmo runtime não falham
|
|
44
|
+
* quando divergem: falham quando a mais velha é desativada, e o sintoma é meio
|
|
45
|
+
* canal parado enquanto o resto funciona.
|
|
46
|
+
*/
|
|
47
|
+
const TIMEOUT_MS = 10_000;
|
|
48
|
+
/**
|
|
49
|
+
* Classificação dos códigos de erro da Meta.
|
|
50
|
+
*
|
|
51
|
+
* A distinção que mais importa não é temporário × permanente — é **problema do
|
|
52
|
+
* destinatário × problema nosso**. Um token expirado (190) devolvido como
|
|
53
|
+
* `permanent` marcaria o CLIENTE como contato inválido e o tiraria da régua para
|
|
54
|
+
* sempre, quando o defeito é uma credencial nossa que alguém precisa renovar.
|
|
55
|
+
* Por isso erro de configuração vira `unavailable`: não gasta tentativa, não
|
|
56
|
+
* acusa o cliente, e aparece na tela como pendência do escritório.
|
|
57
|
+
*/
|
|
58
|
+
function classify(code, subcode) {
|
|
59
|
+
// Credencial/permissão/configuração — nosso problema, não do destinatário.
|
|
60
|
+
if (code === 190 || code === 200 || code === 10 || code === 3)
|
|
61
|
+
return 'unavailable';
|
|
62
|
+
if (code === 100 && subcode === 33)
|
|
63
|
+
return 'unavailable';
|
|
64
|
+
// Limites de taxa — sempre vale tentar de novo.
|
|
65
|
+
if (code === 4 || code === 80007 || code === 130429 || code === 131048 || code === 131056) {
|
|
66
|
+
return 'temporary';
|
|
67
|
+
}
|
|
68
|
+
// Falhas internas da plataforma.
|
|
69
|
+
if (code === 1 || code === 2 || code === 131000)
|
|
70
|
+
return 'temporary';
|
|
71
|
+
// Destinatário: não tem WhatsApp, número inexistente, recusa de entrega.
|
|
72
|
+
if (code === 131026 || code === 131052 || code === 133010)
|
|
73
|
+
return 'permanent';
|
|
74
|
+
// Fora da janela de sessão sem template válido, e problemas de template.
|
|
75
|
+
if (code === 131047 || (code >= 132000 && code <= 132015))
|
|
76
|
+
return 'permanent';
|
|
77
|
+
// Parâmetro inválido é defeito de integração; retry repetiria o mesmo erro.
|
|
78
|
+
if (code === 100)
|
|
79
|
+
return 'permanent';
|
|
80
|
+
// Código desconhecido: `temporary`. Um erro novo da Meta tratado como
|
|
81
|
+
// permanente removeria o cliente da régua em definitivo por algo que ninguém
|
|
82
|
+
// ainda entendeu — o dano de tentar de novo é muito menor.
|
|
83
|
+
return 'temporary';
|
|
84
|
+
}
|
|
85
|
+
export function createWhatsAppChannel(config) {
|
|
86
|
+
const doFetch = config.fetchImpl ?? fetch;
|
|
87
|
+
return {
|
|
88
|
+
key: 'whatsapp',
|
|
89
|
+
providerName: 'meta_cloud',
|
|
90
|
+
capabilities: META_CLOUD_CAPABILITIES,
|
|
91
|
+
isConfigured(_ctx) {
|
|
92
|
+
return (config.account.status === 'active' &&
|
|
93
|
+
Boolean(config.account.meta?.phoneNumberId) &&
|
|
94
|
+
Boolean(config.account.senderId));
|
|
95
|
+
},
|
|
96
|
+
async send(message) {
|
|
97
|
+
if (!config.liveSend) {
|
|
98
|
+
return {
|
|
99
|
+
kind: 'unavailable',
|
|
100
|
+
code: 'live_send_disabled',
|
|
101
|
+
detail: 'envio real de WhatsApp não autorizado neste ambiente',
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const phoneNumberId = config.account.meta?.phoneNumberId;
|
|
105
|
+
if (!phoneNumberId) {
|
|
106
|
+
return {
|
|
107
|
+
kind: 'unavailable',
|
|
108
|
+
code: 'no_phone_number_id',
|
|
109
|
+
detail: 'conta sem phoneNumberId',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
const token = await config.resolveCredential(config.account.credentialRef);
|
|
113
|
+
if (!token) {
|
|
114
|
+
return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
|
|
115
|
+
}
|
|
116
|
+
const body = buildBody(message);
|
|
117
|
+
if (!body) {
|
|
118
|
+
return {
|
|
119
|
+
kind: 'permanent',
|
|
120
|
+
code: 'content_mismatch',
|
|
121
|
+
detail: 'conteúdo inválido para WhatsApp',
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
let res;
|
|
125
|
+
try {
|
|
126
|
+
res = await doFetch(graphUrl(`${encodeURIComponent(phoneNumberId)}/messages`), {
|
|
127
|
+
method: 'POST',
|
|
128
|
+
headers: {
|
|
129
|
+
authorization: `Bearer ${token}`,
|
|
130
|
+
'content-type': 'application/json',
|
|
131
|
+
},
|
|
132
|
+
body: JSON.stringify(body),
|
|
133
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Timeout e falha de rede nunca carregam a causa real do lado do
|
|
138
|
+
// provider — e a mensagem da exceção pode conter a URL com credencial
|
|
139
|
+
// embutida em algumas implementações. Não propaga nada dela.
|
|
140
|
+
return { kind: 'temporary', code: 'network', detail: 'falha de rede ao chamar o provider' };
|
|
141
|
+
}
|
|
142
|
+
if (res.ok) {
|
|
143
|
+
const payload = (await res.json().catch(() => null));
|
|
144
|
+
const providerRef = payload?.messages?.[0]?.id;
|
|
145
|
+
// `sent` = a Meta aceitou. NÃO é entrega: quem afirma entrega é o
|
|
146
|
+
// webhook, depois. Ver `status.ts`.
|
|
147
|
+
return { kind: 'sent', providerRef };
|
|
148
|
+
}
|
|
149
|
+
const err = (await res
|
|
150
|
+
.json()
|
|
151
|
+
.then((b) => typeof b === 'object' && b !== null && 'error' in b
|
|
152
|
+
? (b.error ?? {})
|
|
153
|
+
: {})
|
|
154
|
+
.catch(() => ({})));
|
|
155
|
+
const code = err.code ?? res.status;
|
|
156
|
+
const kind = res.status >= 500 ? 'temporary' : classify(code, err.error_subcode);
|
|
157
|
+
return {
|
|
158
|
+
kind,
|
|
159
|
+
code: `meta_${code}`,
|
|
160
|
+
// Só a mensagem do provider, truncada. Nunca o corpo enviado (carrega as
|
|
161
|
+
// variáveis do template, que são PII) e nunca os headers.
|
|
162
|
+
detail: (err.message ?? `HTTP ${res.status}`).slice(0, 200),
|
|
163
|
+
};
|
|
164
|
+
},
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function buildBody(message) {
|
|
168
|
+
const to = message.to.replace(/^\+/, '');
|
|
169
|
+
if (message.content.kind === 'whatsapp_template') {
|
|
170
|
+
const { templateName, language, variables } = message.content;
|
|
171
|
+
return {
|
|
172
|
+
messaging_product: 'whatsapp',
|
|
173
|
+
recipient_type: 'individual',
|
|
174
|
+
to,
|
|
175
|
+
type: 'template',
|
|
176
|
+
template: {
|
|
177
|
+
name: templateName,
|
|
178
|
+
// A Meta escreve `pt_BR`; o domínio, `pt-BR`. A tradução é do adapter.
|
|
179
|
+
language: { code: metaLanguageCode(language) },
|
|
180
|
+
// `components` só entra quando há variável: um template sem parâmetro
|
|
181
|
+
// recebendo `parameters: []` é recusado pela Meta.
|
|
182
|
+
...(variables.length > 0
|
|
183
|
+
? {
|
|
184
|
+
components: [
|
|
185
|
+
{
|
|
186
|
+
type: 'body',
|
|
187
|
+
parameters: variables.map((text) => ({ type: 'text', text })),
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
}
|
|
191
|
+
: {}),
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
if (message.content.kind === 'text') {
|
|
196
|
+
// Texto livre só é aceito DENTRO da janela de 24h aberta pelo cliente. O
|
|
197
|
+
// motor não tem como saber se a janela está aberta — e por isso este caminho
|
|
198
|
+
// existe para resposta a conversa iniciada pelo cliente, nunca para
|
|
199
|
+
// cobrança ativa, que é sempre template.
|
|
200
|
+
return {
|
|
201
|
+
messaging_product: 'whatsapp',
|
|
202
|
+
recipient_type: 'individual',
|
|
203
|
+
to,
|
|
204
|
+
type: 'text',
|
|
205
|
+
text: { preview_url: false, body: message.content.body },
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=whatsapp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../src/communication/adapters/whatsapp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trilha de comunicação — o que o motor decidiu, e por quê.
|
|
3
|
+
*
|
|
4
|
+
* **Não é log.** Log é texto que alguém talvez leia; isto é registro estruturado
|
|
5
|
+
* e consultável, com um vocabulário fechado de eventos. A diferença aparece na
|
|
6
|
+
* pergunta que o escritório faz de verdade: "por que este cliente não recebeu?".
|
|
7
|
+
* Um `console.warn` responde isso para quem estiver com o terminal aberto no
|
|
8
|
+
* instante certo; uma trilha responde seis meses depois.
|
|
9
|
+
*
|
|
10
|
+
* A trilha financeira (`dunning_event`) continua sendo o estado da ETAPA da
|
|
11
|
+
* régua. Esta é o histórico da INTENÇÃO de comunicar — que é outra coisa: uma
|
|
12
|
+
* etapa pode ter uma intenção recusada por consentimento, outra por telefone
|
|
13
|
+
* inválido e uma terceira entregue, e `dunning_event` só guarda o desfecho final
|
|
14
|
+
* de uma delas.
|
|
15
|
+
*
|
|
16
|
+
* O que NUNCA entra aqui: valor de credencial, corpo de mensagem, telefone,
|
|
17
|
+
* e-mail. O destinatário aparece como referência lógica (`recipientRef`), que já
|
|
18
|
+
* é o vocabulário do consumidor.
|
|
19
|
+
*/
|
|
20
|
+
import type { ChannelKey } from './channel.js';
|
|
21
|
+
import type { CommunicationContext } from './context.js';
|
|
22
|
+
import type { SkipReason } from './policy.js';
|
|
23
|
+
import type { DeliveryStatus } from './status.js';
|
|
24
|
+
/**
|
|
25
|
+
* Vocabulário fechado. União de literais, e não `string`, de propósito: um tipo
|
|
26
|
+
* aberto vira dez grafias do mesmo evento e nenhuma métrica agregável.
|
|
27
|
+
*/
|
|
28
|
+
export type CommunicationEventKind =
|
|
29
|
+
/** O consumidor pediu uma comunicação. Uma por `dispatch`, antes de qualquer porta. */
|
|
30
|
+
'intent_created'
|
|
31
|
+
/** A reserva de envio foi concedida a ESTA execução. */
|
|
32
|
+
| 'dispatch_claimed'
|
|
33
|
+
/** Um canal foi pulado. `skipReason` diz qual porta fechou. */
|
|
34
|
+
| 'dispatch_skipped'
|
|
35
|
+
/** O provider aceitou. NÃO é entrega — ver `status.ts`. */
|
|
36
|
+
| 'dispatch_sent'
|
|
37
|
+
/** O provider recusou, ou a rede falhou. */
|
|
38
|
+
| 'dispatch_failed'
|
|
39
|
+
/** Opt-out registrado barrou o canal. Recorte de `dispatch_skipped` porque tem consequência jurídica. */
|
|
40
|
+
| 'consent_blocked'
|
|
41
|
+
/** Contato ausente ou inutilizável. Recorte porque a ação é cadastral, não técnica. */
|
|
42
|
+
| 'invalid_contact'
|
|
43
|
+
/** Callback do provider: chegou ao aparelho. */
|
|
44
|
+
| 'callback_delivered'
|
|
45
|
+
/** Callback do provider: foi aberta. Só canais que reportam leitura. */
|
|
46
|
+
| 'callback_read'
|
|
47
|
+
/** Callback do provider: falhou depois de aceita. */
|
|
48
|
+
| 'callback_failed'
|
|
49
|
+
/** O destinatário pediu para não receber, por qualquer via. */
|
|
50
|
+
| 'opt_out';
|
|
51
|
+
export interface CommunicationEvent {
|
|
52
|
+
kind: CommunicationEventKind;
|
|
53
|
+
ctx: CommunicationContext;
|
|
54
|
+
channel: ChannelKey | null;
|
|
55
|
+
eventType: string;
|
|
56
|
+
/** Assunto no domínio do consumidor (recebível, fatura). Nunca PII. */
|
|
57
|
+
subjectRef: string | null;
|
|
58
|
+
/** Destinatário como REFERÊNCIA lógica (id do cliente). Nunca telefone nem e-mail. */
|
|
59
|
+
recipientRef: string | null;
|
|
60
|
+
idempotencyKey: string | null;
|
|
61
|
+
/** Identificador da mensagem no provider, quando existe. Nunca credencial. */
|
|
62
|
+
providerRef?: string | null;
|
|
63
|
+
skipReason?: SkipReason | null;
|
|
64
|
+
status?: DeliveryStatus | null;
|
|
65
|
+
/** Rótulo curto e estável para métrica. snake_case. */
|
|
66
|
+
code?: string | null;
|
|
67
|
+
/** Detalhe legível, truncado pelo sink. Nunca PII, nunca segredo. */
|
|
68
|
+
detail?: string | null;
|
|
69
|
+
/** Número da tentativa desta chave, quando a reserva foi concedida. */
|
|
70
|
+
attempt?: number | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Destino da trilha. Implementado pelo produto.
|
|
74
|
+
*
|
|
75
|
+
* `Promise<void>` e nunca lança: uma trilha que derruba o envio troca um
|
|
76
|
+
* problema de observabilidade por um de entrega. O produto que a implementa é
|
|
77
|
+
* quem decide o que fazer quando a gravação falha — e a implementação de
|
|
78
|
+
* referência engole e segue.
|
|
79
|
+
*/
|
|
80
|
+
export interface CommunicationAuditSink {
|
|
81
|
+
record(event: CommunicationEvent): Promise<void>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Sink que não grava nada.
|
|
85
|
+
*
|
|
86
|
+
* Existe para consumidores que ainda não têm armazenamento, e é EXPLÍCITO de
|
|
87
|
+
* propósito: um sink opcional viraria `deps.audit?.record(...)` espalhado pelo
|
|
88
|
+
* motor, e a diferença entre "não configurou trilha" e "esqueceu de chamar"
|
|
89
|
+
* deixaria de ser visível.
|
|
90
|
+
*/
|
|
91
|
+
export declare function createNullAuditSink(): CommunicationAuditSink;
|
|
92
|
+
/** Coleta em memória — para teste e para o relatório de dry-run. */
|
|
93
|
+
export declare function createRecordingAuditSink(): CommunicationAuditSink & {
|
|
94
|
+
readonly events: readonly CommunicationEvent[];
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* De qual evento de trilha um pulo é.
|
|
98
|
+
*
|
|
99
|
+
* Três motivos ganham nome próprio porque exigem ações operacionais opostas:
|
|
100
|
+
* opt-out é decisão do cliente (e ninguém no escritório deve "resolver"), falta
|
|
101
|
+
* de contato é cadastro, e o resto é ambiente. Colapsá-los em `dispatch_skipped`
|
|
102
|
+
* mandaria o escritório procurar no lugar errado nos dois primeiros casos.
|
|
103
|
+
*/
|
|
104
|
+
export declare function eventKindForSkip(reason: SkipReason): CommunicationEventKind;
|
|
105
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/communication/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,sBAAsB;AAChC,uFAAuF;AACrF,gBAAgB;AAClB,wDAAwD;GACtD,kBAAkB;AACpB,+DAA+D;GAC7D,kBAAkB;AACpB,2DAA2D;GACzD,eAAe;AACjB,4CAA4C;GAC1C,iBAAiB;AACnB,yGAAyG;GACvG,iBAAiB;AACnB,uFAAuF;GACrF,iBAAiB;AACnB,gDAAgD;GAC9C,oBAAoB;AACtB,wEAAwE;GACtE,eAAe;AACjB,qDAAqD;GACnD,iBAAiB;AACnB,+DAA+D;GAC7D,SAAS,CAAC;AAEd,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,sFAAsF;IACtF,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,8EAA8E;IAC9E,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,sBAAsB,CAE5D;AAED,oEAAoE;AACpE,wBAAgB,wBAAwB,IAAI,sBAAsB,GAAG;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAChD,CAQA;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,sBAAsB,CAI3E"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trilha de comunicação — o que o motor decidiu, e por quê.
|
|
3
|
+
*
|
|
4
|
+
* **Não é log.** Log é texto que alguém talvez leia; isto é registro estruturado
|
|
5
|
+
* e consultável, com um vocabulário fechado de eventos. A diferença aparece na
|
|
6
|
+
* pergunta que o escritório faz de verdade: "por que este cliente não recebeu?".
|
|
7
|
+
* Um `console.warn` responde isso para quem estiver com o terminal aberto no
|
|
8
|
+
* instante certo; uma trilha responde seis meses depois.
|
|
9
|
+
*
|
|
10
|
+
* A trilha financeira (`dunning_event`) continua sendo o estado da ETAPA da
|
|
11
|
+
* régua. Esta é o histórico da INTENÇÃO de comunicar — que é outra coisa: uma
|
|
12
|
+
* etapa pode ter uma intenção recusada por consentimento, outra por telefone
|
|
13
|
+
* inválido e uma terceira entregue, e `dunning_event` só guarda o desfecho final
|
|
14
|
+
* de uma delas.
|
|
15
|
+
*
|
|
16
|
+
* O que NUNCA entra aqui: valor de credencial, corpo de mensagem, telefone,
|
|
17
|
+
* e-mail. O destinatário aparece como referência lógica (`recipientRef`), que já
|
|
18
|
+
* é o vocabulário do consumidor.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Sink que não grava nada.
|
|
22
|
+
*
|
|
23
|
+
* Existe para consumidores que ainda não têm armazenamento, e é EXPLÍCITO de
|
|
24
|
+
* propósito: um sink opcional viraria `deps.audit?.record(...)` espalhado pelo
|
|
25
|
+
* motor, e a diferença entre "não configurou trilha" e "esqueceu de chamar"
|
|
26
|
+
* deixaria de ser visível.
|
|
27
|
+
*/
|
|
28
|
+
export function createNullAuditSink() {
|
|
29
|
+
return { async record() { } };
|
|
30
|
+
}
|
|
31
|
+
/** Coleta em memória — para teste e para o relatório de dry-run. */
|
|
32
|
+
export function createRecordingAuditSink() {
|
|
33
|
+
const events = [];
|
|
34
|
+
return {
|
|
35
|
+
events,
|
|
36
|
+
async record(event) {
|
|
37
|
+
events.push(event);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* De qual evento de trilha um pulo é.
|
|
43
|
+
*
|
|
44
|
+
* Três motivos ganham nome próprio porque exigem ações operacionais opostas:
|
|
45
|
+
* opt-out é decisão do cliente (e ninguém no escritório deve "resolver"), falta
|
|
46
|
+
* de contato é cadastro, e o resto é ambiente. Colapsá-los em `dispatch_skipped`
|
|
47
|
+
* mandaria o escritório procurar no lugar errado nos dois primeiros casos.
|
|
48
|
+
*/
|
|
49
|
+
export function eventKindForSkip(reason) {
|
|
50
|
+
if (reason === 'opted_out')
|
|
51
|
+
return 'consent_blocked';
|
|
52
|
+
if (reason === 'no_recipient' || reason === 'invalid_recipient')
|
|
53
|
+
return 'invalid_contact';
|
|
54
|
+
return 'dispatch_skipped';
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/communication/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAqEH;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,KAAK,CAAC,MAAM,KAAmB,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,wBAAwB;IAGtC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,OAAO;QACL,MAAM;QACN,KAAK,CAAC,MAAM,CAAC,KAAyB;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAkB;IACjD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,iBAAiB,CAAC;IACrD,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,iBAAiB,CAAC;IAC1F,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O que o PROVIDER por trás de um canal garante — declarado pelo adapter.
|
|
3
|
+
*
|
|
4
|
+
* Existe para que o motor possa tomar uma decisão que depende do provider sem
|
|
5
|
+
* nunca saber qual provider é. A alternativa é a que o certificador proibiu
|
|
6
|
+
* explicitamente:
|
|
7
|
+
*
|
|
8
|
+
* if (provider === 'resend') { ...reenvia... } else { ...não reenvia... }
|
|
9
|
+
*
|
|
10
|
+
* Espalhado pelo núcleo, esse `if` transforma "trocar de provider" em mudança de
|
|
11
|
+
* regra de negócio, e faz o motor compartilhado carregar o catálogo de fornecedor
|
|
12
|
+
* de cada produto. Aqui o adapter DECLARA a garantia e o motor lê a declaração.
|
|
13
|
+
*
|
|
14
|
+
* **Toda capability nasce `false`.** O default não é conservadorismo estético: um
|
|
15
|
+
* campo opcional que o adapter esquece de declarar viraria uma garantia
|
|
16
|
+
* imaginária, e a consequência de imaginar idempotência que não existe é o
|
|
17
|
+
* cliente recebendo a mesma cobrança duas vezes. Quem tem a garantia declara; o
|
|
18
|
+
* silêncio significa ausência.
|
|
19
|
+
*
|
|
20
|
+
* **A declaração descreve o que ESTE ADAPTER exerce, não o que o provider anuncia
|
|
21
|
+
* no site.** O Resend publica webhooks de entrega; o adapter de e-mail daqui não
|
|
22
|
+
* consome nenhum, então `supportsDeliveryWebhook` é `false` para ele. Declarar a
|
|
23
|
+
* capacidade do fornecedor em vez da capacidade do código seria documentar uma
|
|
24
|
+
* integração que não existe — que é o defeito `DOCUMENTATION_MATCHES_RUNTIME`.
|
|
25
|
+
*/
|
|
26
|
+
export interface ChannelCapabilities {
|
|
27
|
+
/**
|
|
28
|
+
* O provider deduplica chamadas que trazem a MESMA chave de idempotência.
|
|
29
|
+
*
|
|
30
|
+
* É a segunda camada, nunca a primeira: a reserva interna (`claim.ts`) continua
|
|
31
|
+
* obrigatória, porque a idempotência do provider só protege depois que a
|
|
32
|
+
* chamada externa já saiu daqui.
|
|
33
|
+
*/
|
|
34
|
+
supportsProviderIdempotency: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Por quanto tempo a chave vale no provider. Obrigatório quando
|
|
37
|
+
* `supportsProviderIdempotency` é `true` — uma janela desconhecida é
|
|
38
|
+
* indistinguível de janela nenhuma no instante em que ela importa.
|
|
39
|
+
*/
|
|
40
|
+
providerIdempotencyWindowMs?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Dá para PERGUNTAR ao provider se uma mensagem saiu, a partir do que temos
|
|
43
|
+
* guardado.
|
|
44
|
+
*
|
|
45
|
+
* "A partir do que temos guardado" é a parte que decide: um provider com
|
|
46
|
+
* consulta por identificador de mensagem não serve aqui, porque o caso em que
|
|
47
|
+
* a consulta seria útil é justamente aquele em que o processo morreu antes de
|
|
48
|
+
* guardar o identificador.
|
|
49
|
+
*/
|
|
50
|
+
supportsMessageLookup: boolean;
|
|
51
|
+
/** O adapter recebe callback de entrega deste provider por uma rota existente. */
|
|
52
|
+
supportsDeliveryWebhook: boolean;
|
|
53
|
+
/** O provider reporta LEITURA, e o adapter consome esse relato. */
|
|
54
|
+
supportsReadReceipt: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Nenhuma garantia externa. É o que vale para todo canal que não declare o
|
|
58
|
+
* contrário — e é o que faz um adapter novo nascer seguro em vez de nascer
|
|
59
|
+
* otimista.
|
|
60
|
+
*/
|
|
61
|
+
export declare const NO_PROVIDER_GUARANTEES: ChannelCapabilities;
|
|
62
|
+
/**
|
|
63
|
+
* Reenviar com a MESMA chave é seguro agora?
|
|
64
|
+
*
|
|
65
|
+
* Chamado quando o desfecho da tentativa anterior é desconhecido — o titular da
|
|
66
|
+
* reserva chamou o provider e morreu antes de assentar. A pergunta não é "o
|
|
67
|
+
* provider tem idempotência", é "a chave que eu usei ainda está viva lá".
|
|
68
|
+
*
|
|
69
|
+
* Fora da janela, a chave já não significa nada para o provider: a segunda
|
|
70
|
+
* chamada seria uma mensagem nova, e o cliente receberia duas. Por isso a
|
|
71
|
+
* expiração devolve `false` — e o motor, sem cobertura, não reenvia.
|
|
72
|
+
*
|
|
73
|
+
* **Recebe IDADE, não instante.** A diferença não é estética: o instante da
|
|
74
|
+
* primeira chamada é medido pelo relógio de quem guardou o dado (o `now()` do
|
|
75
|
+
* banco), e compará-lo com o `Date.now()` do processo mistura dois relógios que
|
|
76
|
+
* não têm obrigação de concordar. Numa deriva de poucos segundos isso passa
|
|
77
|
+
* despercebido; num processo com relógio adiantado, "dentro da janela" vira
|
|
78
|
+
* "fora" e o motor deixa de reenviar o que podia — ou o contrário. Quem guarda o
|
|
79
|
+
* dado calcula a idade, e a comparação acontece numa escala só.
|
|
80
|
+
*
|
|
81
|
+
* `ageMs` ausente significa que nenhuma chamada externa foi registrada, e aí não
|
|
82
|
+
* há o que cobrir: quem pergunta nesse estado está perguntando a coisa errada,
|
|
83
|
+
* então a resposta é `false`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function providerIdempotencyCovers(capabilities: ChannelCapabilities, ageMs: number | null): boolean;
|
|
86
|
+
/** Janela de idempotência do Resend: 24 horas. Ver `adapters/email.ts`. */
|
|
87
|
+
export declare const RESEND_IDEMPOTENCY_WINDOW_MS: number;
|
|
88
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/communication/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,2BAA2B,EAAE,OAAO,CAAC;IACrC;;;;OAIG;IACH,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;;;;;;;OAQG;IACH,qBAAqB,EAAE,OAAO,CAAC;IAC/B,kFAAkF;IAClF,uBAAuB,EAAE,OAAO,CAAC;IACjC,mEAAmE;IACnE,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,mBAKpC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,mBAAmB,EACjC,KAAK,EAAE,MAAM,GAAG,IAAI,GACnB,OAAO,CAMT;AAED,2EAA2E;AAC3E,eAAO,MAAM,4BAA4B,QAAsB,CAAC"}
|