@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,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Catálogo de templates da COBRANÇA — do produto, não do motor.
|
|
4
|
+
*
|
|
5
|
+
* O motor sabe resolver template (escopo, versão, aprovação); ele não conhece
|
|
6
|
+
* nenhum. Os textos e os nomes registrados no provider vivem aqui, ao lado da
|
|
7
|
+
* régua que os usa.
|
|
8
|
+
*
|
|
9
|
+
* O corpo dos e-mails continua vindo de `copy.ts`/`email-layout.ts`: este
|
|
10
|
+
* catálogo declara QUAL template vale para cada etapa e canal, e as variáveis
|
|
11
|
+
* que ele consome. Duplicar o texto aqui criaria duas fontes para a mesma
|
|
12
|
+
* mensagem, e a segunda ficaria para trás na primeira correção.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createCollectionTemplateStore = createCollectionTemplateStore;
|
|
16
|
+
const communication_bridge_js_1 = require("./communication-bridge.js");
|
|
17
|
+
const LOCALE = 'pt-BR';
|
|
18
|
+
/**
|
|
19
|
+
* Variáveis da cobrança, na ordem em que os templates de WhatsApp as declaram.
|
|
20
|
+
*
|
|
21
|
+
* A ordem é contrato com o template aprovado no provider: `{{1}}` é o nome,
|
|
22
|
+
* `{{2}}` o valor, `{{3}}` o vencimento. Trocar a ordem aqui sem re-aprovar o
|
|
23
|
+
* template lá manda o valor no lugar do nome — e a Meta aceita, porque para ela
|
|
24
|
+
* são três strings.
|
|
25
|
+
*/
|
|
26
|
+
const COLLECTION_VARS = ['clientName', 'amount', 'dueDate'];
|
|
27
|
+
/**
|
|
28
|
+
* Sufixo do nome REGISTRADO NO PROVIDER.
|
|
29
|
+
*
|
|
30
|
+
* Muda **somente** quando um template novo é submetido e aprovado do lado da
|
|
31
|
+
* Meta. Mexer aqui sem submeter faz o despacho pedir um nome que não existe — e
|
|
32
|
+
* a Meta responde `132001`, que fala de "translation" e manda quem investiga
|
|
33
|
+
* procurar no lugar errado.
|
|
34
|
+
*/
|
|
35
|
+
const PROVIDER_TEMPLATE_SUFFIX = 'v1';
|
|
36
|
+
/**
|
|
37
|
+
* Revisão INTERNA do catálogo de WhatsApp. **Nunca chega ao provider.**
|
|
38
|
+
*
|
|
39
|
+
* Entra na chave de idempotência (`buildIdempotencyKey` recebe
|
|
40
|
+
* `templateVersion`), e é o único jeito legítimo de dizer "esta é outra
|
|
41
|
+
* tentativa lógica" sem tocar no template aprovado.
|
|
42
|
+
*
|
|
43
|
+
* ## Por que os dois existem separados
|
|
44
|
+
*
|
|
45
|
+
* Eram dois literais `'v1'` — um em `version`, outro dentro da interpolação de
|
|
46
|
+
* `providerTemplateName` —, independentes de fato e idênticos na aparência. A
|
|
47
|
+
* primeira pessoa que precisasse de uma chave nova bumparia o que estivesse
|
|
48
|
+
* mais à mão, e havia 50% de chance de o despacho passar a pedir
|
|
49
|
+
* `billing_dunning_dplus3_v2` à Meta, que não tem esse template.
|
|
50
|
+
*
|
|
51
|
+
* `v2` aqui porque a revisão `v1` foi consumida: em 2026-09-01 a primeira
|
|
52
|
+
* tentativa real assentou a chave como `failed_permanent`, e o motor recusa
|
|
53
|
+
* repetição sobre chave assentada — corretamente. O template aprovado continua
|
|
54
|
+
* sendo `billing_dunning_dplus3_v1`.
|
|
55
|
+
*
|
|
56
|
+
* E-mail e SMS **não** bumpam: os dois têm despacho real em produção, e mudar a
|
|
57
|
+
* versão deles reabriria chaves já assentadas de 89 avisos que já saíram.
|
|
58
|
+
*/
|
|
59
|
+
const WHATSAPP_CATALOG_REVISION = 'v2';
|
|
60
|
+
/**
|
|
61
|
+
* E-mail: sempre disponível, porque o corpo é montado pelo produto.
|
|
62
|
+
*
|
|
63
|
+
* `approved` aqui não significa "aprovado por um provider" — e-mail não tem
|
|
64
|
+
* registro prévio. Significa "utilizável", que é o que o motor precisa saber.
|
|
65
|
+
*/
|
|
66
|
+
function emailTemplate(eventType) {
|
|
67
|
+
return {
|
|
68
|
+
tenantId: null,
|
|
69
|
+
product: communication_bridge_js_1.SC_PRODUCT,
|
|
70
|
+
brand: null,
|
|
71
|
+
channel: 'email',
|
|
72
|
+
eventType,
|
|
73
|
+
locale: LOCALE,
|
|
74
|
+
version: 'v1',
|
|
75
|
+
status: 'approved',
|
|
76
|
+
variables: [...COLLECTION_VARS],
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* WhatsApp: só existe se o escritório tiver registrado o template no provider.
|
|
81
|
+
*
|
|
82
|
+
* O nome segue o evento (`billing.dunning.dplus3` → `billing_dunning_dplus3_v1`)
|
|
83
|
+
* porque é a única convenção que não exige uma segunda tabela de-para que
|
|
84
|
+
* alguém precisaria manter sincronizada com o painel da Meta.
|
|
85
|
+
*
|
|
86
|
+
* **Não é declarado aprovado por padrão.** Um template que este código afirma
|
|
87
|
+
* existir e que ninguém registrou vira recusa do provider a cada etapa da régua
|
|
88
|
+
* — e a recusa chega como falha de entrega, sugerindo problema no cliente.
|
|
89
|
+
*/
|
|
90
|
+
function whatsappTemplate(eventType, approved) {
|
|
91
|
+
return {
|
|
92
|
+
tenantId: null,
|
|
93
|
+
product: communication_bridge_js_1.SC_PRODUCT,
|
|
94
|
+
brand: null,
|
|
95
|
+
channel: 'whatsapp',
|
|
96
|
+
eventType,
|
|
97
|
+
locale: LOCALE,
|
|
98
|
+
// Revisão interna — some antes da fronteira do provider.
|
|
99
|
+
version: WHATSAPP_CATALOG_REVISION,
|
|
100
|
+
status: approved ? 'approved' : 'pending_approval',
|
|
101
|
+
// Nome no provider — o sufixo é o do TEMPLATE APROVADO, não o da revisão.
|
|
102
|
+
providerTemplateName: `${eventType.replace(/\./g, '_')}_${PROVIDER_TEMPLATE_SUFFIX}`,
|
|
103
|
+
variables: [...COLLECTION_VARS],
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function smsTemplate(eventType, approved) {
|
|
107
|
+
return {
|
|
108
|
+
tenantId: null,
|
|
109
|
+
product: communication_bridge_js_1.SC_PRODUCT,
|
|
110
|
+
brand: null,
|
|
111
|
+
channel: 'sms',
|
|
112
|
+
eventType,
|
|
113
|
+
locale: LOCALE,
|
|
114
|
+
version: 'v1',
|
|
115
|
+
status: approved ? 'approved' : 'pending_approval',
|
|
116
|
+
variables: [...COLLECTION_VARS],
|
|
117
|
+
// Curto de propósito: cada segmento é cobrado, e o link é o que faz o
|
|
118
|
+
// cliente agir. Sem link, a mensagem só informa.
|
|
119
|
+
body: '{{clientName}}, consta {{amount}} com vencimento {{dueDate}}.',
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Quais eventos o escritório tem registrados em cada canal.
|
|
124
|
+
*
|
|
125
|
+
* Vem de `tenant.settings.channels.<canal>.approvedEvents`. Ausente = nenhum, e
|
|
126
|
+
* o e-mail segue funcionando: ligar um canal novo nunca pode desligar o que já
|
|
127
|
+
* funcionava.
|
|
128
|
+
*/
|
|
129
|
+
// `tenant` não tem RLS — é a tabela raiz, define a fronteira em vez de ser
|
|
130
|
+
// protegida por ela. Toda leitura dela exige a amarra explícita na GUC da
|
|
131
|
+
// sessão; sem isso, o `tenantId` do parâmetro é a única coisa que separa um
|
|
132
|
+
// escritório do outro, e um parâmetro não é uma fronteira.
|
|
133
|
+
async function approvedEvents(tx, tenantId, channel) {
|
|
134
|
+
const rows = await tx `
|
|
135
|
+
SELECT settings FROM tenant
|
|
136
|
+
WHERE id = ${tenantId}
|
|
137
|
+
AND id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
138
|
+
LIMIT 1
|
|
139
|
+
`;
|
|
140
|
+
const channels = (rows[0]?.settings?.channels ?? {});
|
|
141
|
+
const list = channels[channel]?.approvedEvents;
|
|
142
|
+
return new Set(Array.isArray(list) ? list.filter((v) => typeof v === 'string') : []);
|
|
143
|
+
}
|
|
144
|
+
function createCollectionTemplateStore(tx) {
|
|
145
|
+
return {
|
|
146
|
+
async candidates(ctx, channel, eventType, locale) {
|
|
147
|
+
if (ctx.product !== communication_bridge_js_1.SC_PRODUCT || locale !== LOCALE)
|
|
148
|
+
return [];
|
|
149
|
+
if (channel === 'email')
|
|
150
|
+
return [emailTemplate(eventType)];
|
|
151
|
+
if (channel === 'whatsapp') {
|
|
152
|
+
const approved = await approvedEvents(tx, ctx.tenantId, 'whatsapp');
|
|
153
|
+
return [whatsappTemplate(eventType, approved.has(eventType))];
|
|
154
|
+
}
|
|
155
|
+
if (channel === 'sms') {
|
|
156
|
+
const approved = await approvedEvents(tx, ctx.tenantId, 'sms');
|
|
157
|
+
return [smsTemplate(eventType, approved.has(eventType))];
|
|
158
|
+
}
|
|
159
|
+
// `notification` é evento interno e não passa pelo motor: a régua o
|
|
160
|
+
// resolve antes, escalando para a fila humana sem mensagem ao cliente.
|
|
161
|
+
return [];
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=template-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-catalog.js","sourceRoot":"","sources":["../../../src/collection/template-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_TEMPLATES = exports.TEMPLATE_VARIABLES = void 0;
|
|
4
|
+
exports.resolveTemplate = resolveTemplate;
|
|
5
|
+
exports.renderTemplate = renderTemplate;
|
|
6
|
+
exports.TEMPLATE_VARIABLES = [
|
|
7
|
+
'clientName',
|
|
8
|
+
'officeName',
|
|
9
|
+
'dueDate',
|
|
10
|
+
'outstandingAmount',
|
|
11
|
+
'reference',
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Textos padrão por tom.
|
|
15
|
+
*
|
|
16
|
+
* Nenhum deles ameaça, cita medida judicial, negativação ou consequência legal.
|
|
17
|
+
* Cobrança automatizada que produz esse tipo de texto sem revisão humana é risco
|
|
18
|
+
* jurídico e de relacionamento — a etapa mais dura da régua padrão escala para
|
|
19
|
+
* uma pessoa em vez de escrever por conta própria.
|
|
20
|
+
*/
|
|
21
|
+
const DEFAULT_TEMPLATES = {
|
|
22
|
+
'collection.reminder': {
|
|
23
|
+
subject: 'Lembrete: vencimento em {{dueDate}}',
|
|
24
|
+
body: 'Olá, {{clientName}}.\n\n' +
|
|
25
|
+
'Passando para lembrar que o valor de {{outstandingAmount}} vence em {{dueDate}}.\n' +
|
|
26
|
+
'Referência: {{reference}}.\n\n' +
|
|
27
|
+
'Se já tiver pago, desconsidere esta mensagem.\n\n{{officeName}}',
|
|
28
|
+
},
|
|
29
|
+
'collection.due': {
|
|
30
|
+
subject: 'Vence hoje: {{outstandingAmount}}',
|
|
31
|
+
body: 'Olá, {{clientName}}.\n\n' +
|
|
32
|
+
'O valor de {{outstandingAmount}} vence hoje ({{dueDate}}).\n' +
|
|
33
|
+
'Referência: {{reference}}.\n\n' +
|
|
34
|
+
'Se já tiver pago, desconsidere esta mensagem.\n\n{{officeName}}',
|
|
35
|
+
},
|
|
36
|
+
'collection.overdue_soft': {
|
|
37
|
+
subject: 'Pendência em aberto — {{reference}}',
|
|
38
|
+
body: 'Olá, {{clientName}}.\n\n' +
|
|
39
|
+
'Consta em aberto o valor de {{outstandingAmount}}, com vencimento em {{dueDate}}.\n' +
|
|
40
|
+
'Se o pagamento já foi feito, por favor nos avise para darmos baixa.\n\n' +
|
|
41
|
+
'Qualquer dúvida, estamos à disposição.\n\n{{officeName}}',
|
|
42
|
+
},
|
|
43
|
+
'collection.overdue': {
|
|
44
|
+
subject: 'Pendência em aberto desde {{dueDate}}',
|
|
45
|
+
body: 'Olá, {{clientName}}.\n\n' +
|
|
46
|
+
'O valor de {{outstandingAmount}}, vencido em {{dueDate}}, segue em aberto.\n' +
|
|
47
|
+
'Referência: {{reference}}.\n\n' +
|
|
48
|
+
'Pedimos que entre em contato para regularizarmos ou combinarmos a melhor forma.\n\n' +
|
|
49
|
+
'{{officeName}}',
|
|
50
|
+
},
|
|
51
|
+
// Interno: nunca vai ao cliente. Ver a nota em `policy.ts`.
|
|
52
|
+
'collection.escalate': {
|
|
53
|
+
subject: 'Cobrança escalada para atendimento humano — {{clientName}}',
|
|
54
|
+
body: 'A régua automática chegou ao fim para {{clientName}} ({{reference}}), com ' +
|
|
55
|
+
'{{outstandingAmount}} em aberto desde {{dueDate}}. A partir daqui a condução é humana.',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
exports.DEFAULT_TEMPLATES = DEFAULT_TEMPLATES;
|
|
59
|
+
const TONE_FALLBACK = {
|
|
60
|
+
reminder: 'collection.reminder',
|
|
61
|
+
due_notice: 'collection.due',
|
|
62
|
+
friendly_collection: 'collection.overdue_soft',
|
|
63
|
+
overdue_collection: 'collection.overdue',
|
|
64
|
+
human_escalation: 'collection.escalate',
|
|
65
|
+
};
|
|
66
|
+
/** Resolve o template; cai no padrão do tom quando o tenant não tem o seu. */
|
|
67
|
+
function resolveTemplate(templateKey, tone, overrides) {
|
|
68
|
+
return (overrides?.[templateKey] ??
|
|
69
|
+
DEFAULT_TEMPLATES[templateKey] ??
|
|
70
|
+
DEFAULT_TEMPLATES[TONE_FALLBACK[tone]]);
|
|
71
|
+
}
|
|
72
|
+
/** Substitui `{{var}}` pelas variáveis da allowlist. O resto fica literal. */
|
|
73
|
+
function renderTemplate(text, vars) {
|
|
74
|
+
return text.replace(/\{\{\s*([a-zA-Z]+)\s*\}\}/g, (whole, name) => exports.TEMPLATE_VARIABLES.includes(name)
|
|
75
|
+
? String(vars[name] ?? '')
|
|
76
|
+
: whole);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/collection/template.ts"],"names":[],"mappings":";;;AA6FA,0CAUC;AAGD,wCAMC;AA5FY,QAAA,kBAAkB,GAAoC;IACjE,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,mBAAmB;IACnB,WAAW;CACZ,CAAC;AAOF;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAuC;IAC5D,qBAAqB,EAAE;QACrB,OAAO,EAAE,qCAAqC;QAC9C,IAAI,EACF,0BAA0B;YAC1B,oFAAoF;YACpF,gCAAgC;YAChC,iEAAiE;KACpE;IACD,gBAAgB,EAAE;QAChB,OAAO,EAAE,mCAAmC;QAC5C,IAAI,EACF,0BAA0B;YAC1B,8DAA8D;YAC9D,gCAAgC;YAChC,iEAAiE;KACpE;IACD,yBAAyB,EAAE;QACzB,OAAO,EAAE,qCAAqC;QAC9C,IAAI,EACF,0BAA0B;YAC1B,qFAAqF;YACrF,yEAAyE;YACzE,0DAA0D;KAC7D;IACD,oBAAoB,EAAE;QACpB,OAAO,EAAE,uCAAuC;QAChD,IAAI,EACF,0BAA0B;YAC1B,8EAA8E;YAC9E,gCAAgC;YAChC,qFAAqF;YACrF,gBAAgB;KACnB;IACD,4DAA4D;IAC5D,qBAAqB,EAAE;QACrB,OAAO,EAAE,4DAA4D;QACrE,IAAI,EACF,4EAA4E;YAC5E,wFAAwF;KAC3F;CACF,CAAC;AAgCO,8CAAiB;AA9B1B,MAAM,aAAa,GAA6B;IAC9C,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE,gBAAgB;IAC5B,mBAAmB,EAAE,yBAAyB;IAC9C,kBAAkB,EAAE,oBAAoB;IACxC,gBAAgB,EAAE,qBAAqB;CACxC,CAAC;AAEF,8EAA8E;AAC9E,SAAgB,eAAe,CAC7B,WAAmB,EACnB,IAAc,EACd,SAA8C;IAE9C,OAAO,CACL,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,iBAAiB,CAAC,WAAW,CAAC;QAC9B,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAE,CACxC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,SAAgB,cAAc,CAAC,IAAY,EAAE,IAAkB;IAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACvE,0BAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC;QACtD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAA0B,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,KAAK,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter de e-mail — envelope do envio que o Office já usa.
|
|
4
|
+
*
|
|
5
|
+
* **Nenhum motor novo de e-mail.** Convites, ativação, recuperação de senha e a
|
|
6
|
+
* régua de cobrança já passam por `mail/resend.ts`. Este adapter apenas o expõe
|
|
7
|
+
* sob o contrato multicanal, para que o e-mail seja UM canal entre outros em vez
|
|
8
|
+
* de o caminho especial que todos os outros tentam imitar.
|
|
9
|
+
*
|
|
10
|
+
* A supressão em teste continua onde estava, no `sendEmail` do core: uma guarda
|
|
11
|
+
* que mora no adapter é uma guarda que o próximo adapter esquece.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.createEmailChannel = createEmailChannel;
|
|
15
|
+
const resend_js_1 = require("../../mail/resend.js");
|
|
16
|
+
const capabilities_js_1 = require("../capabilities.js");
|
|
17
|
+
/**
|
|
18
|
+
* O que o Resend garante, e o que este adapter exerce.
|
|
19
|
+
*
|
|
20
|
+
* `supportsProviderIdempotency` é `true` porque o adapter MANDA a chave, não
|
|
21
|
+
* porque a documentação do fornecedor a menciona: a declaração descreve o código
|
|
22
|
+
* daqui. Enquanto a chave não era repassada — o estado que a segunda
|
|
23
|
+
* certificação encontrou —, declarar `true` teria sido documentar uma proteção
|
|
24
|
+
* inexistente.
|
|
25
|
+
*
|
|
26
|
+
* Os outros três são `false` por ausência de integração, não por ausência do
|
|
27
|
+
* fornecedor. O Resend publica webhooks de entrega e relata abertura; nenhuma
|
|
28
|
+
* rota daqui os consome hoje (a rota de callback existente é da Meta). Declarar a
|
|
29
|
+
* capacidade do fornecedor em vez da capacidade do código produziria exatamente
|
|
30
|
+
* a divergência entre documento e runtime que reprovou a rodada anterior.
|
|
31
|
+
*/
|
|
32
|
+
const RESEND_CAPABILITIES = {
|
|
33
|
+
supportsProviderIdempotency: true,
|
|
34
|
+
providerIdempotencyWindowMs: capabilities_js_1.RESEND_IDEMPOTENCY_WINDOW_MS,
|
|
35
|
+
supportsMessageLookup: false,
|
|
36
|
+
supportsDeliveryWebhook: false,
|
|
37
|
+
supportsReadReceipt: false,
|
|
38
|
+
};
|
|
39
|
+
function createEmailChannel(config) {
|
|
40
|
+
return {
|
|
41
|
+
key: 'email',
|
|
42
|
+
providerName: 'resend',
|
|
43
|
+
capabilities: RESEND_CAPABILITIES,
|
|
44
|
+
isConfigured(_ctx) {
|
|
45
|
+
return config.account.status === 'active' && Boolean(config.account.senderId);
|
|
46
|
+
},
|
|
47
|
+
async send(message) {
|
|
48
|
+
if (message.content.kind !== 'email') {
|
|
49
|
+
return { kind: 'permanent', code: 'content_mismatch', detail: 'conteúdo não é e-mail' };
|
|
50
|
+
}
|
|
51
|
+
const apiKey = await config.resolveCredential(config.account.credentialRef);
|
|
52
|
+
if (!apiKey) {
|
|
53
|
+
// Ausência de credencial é canal indisponível, não falha de entrega: não
|
|
54
|
+
// gasta tentativa e não marca o cliente como problema de cadastro.
|
|
55
|
+
return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
|
|
56
|
+
}
|
|
57
|
+
const from = config.account.displayName
|
|
58
|
+
? `${config.account.displayName.replace(/["<>\\]/g, '').trim()} <${config.account.senderId}>`
|
|
59
|
+
: config.account.senderId;
|
|
60
|
+
const result = await (0, resend_js_1.sendEmailWithResult)(apiKey, {
|
|
61
|
+
from,
|
|
62
|
+
to: message.to,
|
|
63
|
+
subject: message.content.subject,
|
|
64
|
+
html: message.content.html,
|
|
65
|
+
text: message.content.text,
|
|
66
|
+
}, {
|
|
67
|
+
/*
|
|
68
|
+
* A chave do MOTOR, repassada ao provider.
|
|
69
|
+
*
|
|
70
|
+
* É a mesma em toda tentativa técnica do mesmo envio, porque é derivada
|
|
71
|
+
* da intenção (tenant, produto, marca, canal, evento, assunto, versão
|
|
72
|
+
* de template) e não da tentativa. Derivá-la aqui, ou embaralhá-la com
|
|
73
|
+
* um contador de retry, teria o mecanismo ligado e proteção nenhuma: o
|
|
74
|
+
* provider trataria cada retry como mensagem nova.
|
|
75
|
+
*
|
|
76
|
+
* Cabe no limite do provider por construção — a chave é um sha256 em
|
|
77
|
+
* hexadecimal, 64 caracteres, e o Resend aceita de 1 a 256.
|
|
78
|
+
*/
|
|
79
|
+
idempotencyKey: message.idempotencyKey,
|
|
80
|
+
fetchImpl: config.fetchImpl,
|
|
81
|
+
});
|
|
82
|
+
if (result.ok)
|
|
83
|
+
return { kind: 'sent', providerRef: result.providerRef };
|
|
84
|
+
/*
|
|
85
|
+
* `409` é o mecanismo de idempotência falando, e a leitura correta não é
|
|
86
|
+
* "falhou".
|
|
87
|
+
*
|
|
88
|
+
* `invalid_idempotent_request`: esta chave já foi usada nas últimas 24h com
|
|
89
|
+
* um corpo diferente. Ou seja — houve uma chamada anterior aceita para esta
|
|
90
|
+
* mesma intenção. A mensagem SAIU. Tratar como falha devolveria a chave e a
|
|
91
|
+
* próxima rodada mandaria a segunda cobrança, que é precisamente o que a
|
|
92
|
+
* chave existe para impedir.
|
|
93
|
+
*
|
|
94
|
+
* `concurrent_idempotent_requests`: outra chamada com a mesma chave está em
|
|
95
|
+
* curso agora. Não é nosso caso comum (a reserva interna já barra isso
|
|
96
|
+
* antes), mas se acontecer, quem está enviando é a outra chamada — e
|
|
97
|
+
* reenviar por cima é o mesmo erro.
|
|
98
|
+
*/
|
|
99
|
+
if (result.status === 409) {
|
|
100
|
+
return {
|
|
101
|
+
kind: 'sent',
|
|
102
|
+
code: 'provider_idempotent_replay',
|
|
103
|
+
detail: 'provider já havia aceito esta chave',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Chave fora do formato aceito é defeito de integração nosso, não do
|
|
107
|
+
// destinatário. `permanent` para não repetir a mesma chamada inválida em
|
|
108
|
+
// loop; o rótulo diz onde olhar.
|
|
109
|
+
if (result.errorCode === 'invalid_idempotency_key') {
|
|
110
|
+
return {
|
|
111
|
+
kind: 'permanent',
|
|
112
|
+
code: 'invalid_idempotency_key',
|
|
113
|
+
detail: 'chave de idempotência recusada pelo provider',
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// Sem credencial o canal está indisponível, não falho: não gasta tentativa
|
|
117
|
+
// e não acusa o cadastro do cliente.
|
|
118
|
+
if (result.localReason === 'no_credential') {
|
|
119
|
+
return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
|
|
120
|
+
}
|
|
121
|
+
// O resto — recusa do provider, supressão em teste, falha de rede — é
|
|
122
|
+
// TEMPORÁRIO. Marcar permanente encerraria a cobrança por algo que pode ser
|
|
123
|
+
// infraestrutura, e desistir cedo demais é pior que tentar de novo.
|
|
124
|
+
return {
|
|
125
|
+
kind: 'temporary',
|
|
126
|
+
code: result.errorCode ?? result.localReason ?? 'not_confirmed',
|
|
127
|
+
detail: 'provider não confirmou o envio',
|
|
128
|
+
};
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../src/communication/adapters/email.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter de SMS — provider-agnostic por construção.
|
|
4
|
+
*
|
|
5
|
+
* Nenhum provider está contratado, e este arquivo não escolhe um. Ele define o
|
|
6
|
+
* TRANSPORTE que qualquer provider precisa implementar e deixa a escolha para o
|
|
7
|
+
* dia em que houver decisão comercial — Twilio, Zenvia, Infobip, o que for.
|
|
8
|
+
*
|
|
9
|
+
* A separação entre "canal" e "transporte" existe porque SMS tem regras próprias
|
|
10
|
+
* que valem para TODOS os providers (segmentação por tamanho, remetente
|
|
11
|
+
* alfanumérico proibido no Brasil, ausência de status `read`) e que não deveriam
|
|
12
|
+
* ser reimplementadas por cada adapter concreto. O canal cuida disso; o
|
|
13
|
+
* transporte só entrega bytes.
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.isGsm7 = isGsm7;
|
|
17
|
+
exports.countSegments = countSegments;
|
|
18
|
+
exports.createSmsChannel = createSmsChannel;
|
|
19
|
+
exports.createRecordingSmsTransport = createRecordingSmsTransport;
|
|
20
|
+
const capabilities_js_1 = require("../capabilities.js");
|
|
21
|
+
/**
|
|
22
|
+
* Limite de um segmento GSM-7. Acima disso a mensagem é dividida e **cobrada por
|
|
23
|
+
* segmento** — cada provider com sua própria contagem.
|
|
24
|
+
*
|
|
25
|
+
* Com qualquer caractere fora do alfabeto GSM-7 (o `ç` de "cobrança", o `ã` de
|
|
26
|
+
* "atenção", qualquer emoji) a codificação inteira vira UCS-2 e o limite cai
|
|
27
|
+
* para 70. É por isso que a contagem não pode ser um `length > 160` ingênuo: um
|
|
28
|
+
* texto de 150 caracteres com um acento custa três segmentos, não um.
|
|
29
|
+
*/
|
|
30
|
+
const GSM7_SINGLE = 160;
|
|
31
|
+
const GSM7_MULTI = 153;
|
|
32
|
+
const UCS2_SINGLE = 70;
|
|
33
|
+
const UCS2_MULTI = 67;
|
|
34
|
+
const GSM7_EXTRA = '^{}\\[~]|€';
|
|
35
|
+
const GSM7_BASE = '@£$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&\'()*+,-./0123456789:;<=>?' +
|
|
36
|
+
'¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà\n\r';
|
|
37
|
+
function isGsm7(text) {
|
|
38
|
+
for (const ch of text) {
|
|
39
|
+
if (!GSM7_BASE.includes(ch) && !GSM7_EXTRA.includes(ch))
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
/** Quantos segmentos este texto custa. É o que vira dinheiro na fatura. */
|
|
45
|
+
function countSegments(text) {
|
|
46
|
+
if (text.length === 0)
|
|
47
|
+
return 0;
|
|
48
|
+
const gsm = isGsm7(text);
|
|
49
|
+
// Caracteres da tabela estendida ocupam DOIS septetos.
|
|
50
|
+
const units = gsm
|
|
51
|
+
? [...text].reduce((n, ch) => n + (GSM7_EXTRA.includes(ch) ? 2 : 1), 0)
|
|
52
|
+
: [...text].length;
|
|
53
|
+
const single = gsm ? GSM7_SINGLE : UCS2_SINGLE;
|
|
54
|
+
const multi = gsm ? GSM7_MULTI : UCS2_MULTI;
|
|
55
|
+
return units <= single ? 1 : Math.ceil(units / multi);
|
|
56
|
+
}
|
|
57
|
+
function createSmsChannel(config) {
|
|
58
|
+
const maxSegments = config.maxSegments ?? 3;
|
|
59
|
+
return {
|
|
60
|
+
key: 'sms',
|
|
61
|
+
providerName: config.transport.name,
|
|
62
|
+
/*
|
|
63
|
+
* As garantias vêm do TRANSPORTE, e o default é nenhuma.
|
|
64
|
+
*
|
|
65
|
+
* Nenhum provider de SMS está contratado. A garantia de idempotência depende
|
|
66
|
+
* de qual for escolhido, e o canal não tem como saber antes — por isso ele
|
|
67
|
+
* não afirma nada por conta própria: quem implementar o transporte declara o
|
|
68
|
+
* que aquele provider realmente faz, e o silêncio significa ausência.
|
|
69
|
+
*
|
|
70
|
+
* Enquanto isso, o efeito no motor é o correto e conservador: uma reserva de
|
|
71
|
+
* SMS retomada de um titular que já falou com o provider para em
|
|
72
|
+
* `unknown_outcome` em vez de reenviar às cegas.
|
|
73
|
+
*/
|
|
74
|
+
capabilities: config.transport.capabilities ?? capabilities_js_1.NO_PROVIDER_GUARANTEES,
|
|
75
|
+
isConfigured(_ctx) {
|
|
76
|
+
return config.account.status === 'active' && Boolean(config.account.senderId);
|
|
77
|
+
},
|
|
78
|
+
async send(message) {
|
|
79
|
+
if (!config.liveSend) {
|
|
80
|
+
return {
|
|
81
|
+
kind: 'unavailable',
|
|
82
|
+
code: 'live_send_disabled',
|
|
83
|
+
detail: 'envio real de SMS não autorizado neste ambiente',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (message.content.kind !== 'text') {
|
|
87
|
+
return { kind: 'permanent', code: 'content_mismatch', detail: 'SMS aceita apenas texto' };
|
|
88
|
+
}
|
|
89
|
+
const segments = countSegments(message.content.body);
|
|
90
|
+
if (segments > maxSegments) {
|
|
91
|
+
return {
|
|
92
|
+
kind: 'permanent',
|
|
93
|
+
code: 'too_many_segments',
|
|
94
|
+
detail: `mensagem custaria ${segments} segmentos (teto ${maxSegments})`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const result = await config.transport.send({
|
|
98
|
+
to: message.to,
|
|
99
|
+
from: config.account.senderId,
|
|
100
|
+
body: message.content.body,
|
|
101
|
+
idempotencyKey: message.idempotencyKey,
|
|
102
|
+
});
|
|
103
|
+
if (result.ok)
|
|
104
|
+
return { kind: 'sent', providerRef: result.providerRef };
|
|
105
|
+
return { kind: result.kind, code: result.code, detail: result.detail };
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Transporte de ensaio — registra o que teria enviado e nunca alcança rede.
|
|
111
|
+
*
|
|
112
|
+
* Serve ao dry-run e aos testes, e é o que permite exercitar segmentação, custo
|
|
113
|
+
* e isolamento sem provider contratado. Não simula entrega para o motor: quem
|
|
114
|
+
* decide se houve envio é a trava `liveSend`, não este objeto.
|
|
115
|
+
*/
|
|
116
|
+
function createRecordingSmsTransport() {
|
|
117
|
+
const sent = [];
|
|
118
|
+
return {
|
|
119
|
+
name: 'recording',
|
|
120
|
+
sent,
|
|
121
|
+
async send(req) {
|
|
122
|
+
sent.push(req);
|
|
123
|
+
return { ok: true, providerRef: `rec_${sent.length}` };
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=sms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sms.js","sourceRoot":"","sources":["../../../../src/communication/adapters/sms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* O código de idioma como a Meta o escreve.
|
|
4
|
+
*
|
|
5
|
+
* ## O defeito que este módulo existe para não repetir
|
|
6
|
+
*
|
|
7
|
+
* O domínio fala BCP-47 (`pt-BR`), que é a forma correta para um catálogo de
|
|
8
|
+
* templates que um dia terá outros providers. A Meta escreve `pt_BR`, com
|
|
9
|
+
* underscore, e recusa qualquer outra grafia.
|
|
10
|
+
*
|
|
11
|
+
* Enquanto não havia um ponto único de tradução, as duas pontas escolheram
|
|
12
|
+
* convenções diferentes sozinhas: a submissão registrou o template como
|
|
13
|
+
* `pt_BR` e o despacho pediu `pt-BR`. O primeiro envio real do produto morreu
|
|
14
|
+
* exatamente aí, em 2026-09-01, com
|
|
15
|
+
* `(#132001) Template name does not exist in the translation` — uma mensagem
|
|
16
|
+
* que fala de tradução e parece falar de template inexistente.
|
|
17
|
+
*
|
|
18
|
+
* A conversão mora no ADAPTER porque é detalhe de provider, como o
|
|
19
|
+
* `UTILITY` maiúsculo de `whatsapp-templates.ts`. Colocá-la no catálogo faria o
|
|
20
|
+
* domínio carregar a grafia da Meta, e o próximo provider herdaria um `pt_BR`
|
|
21
|
+
* que não significa nada para ele.
|
|
22
|
+
*
|
|
23
|
+
* Este arquivo não fala com rede nenhuma — é tradução pura, e o guard de
|
|
24
|
+
* fronteira em `communication-provider-boundary.test.ts` exige que continue
|
|
25
|
+
* assim.
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.metaLanguageCode = metaLanguageCode;
|
|
29
|
+
/**
|
|
30
|
+
* `pt-BR` → `pt_BR`. Idempotente: o que já está na forma da Meta passa igual.
|
|
31
|
+
*
|
|
32
|
+
* Não valida: um idioma que a Meta não conhece é recusado por ela, com o código
|
|
33
|
+
* dela, e inventar uma lista aqui significaria mantê-la sincronizada com um
|
|
34
|
+
* catálogo que muda sem avisar.
|
|
35
|
+
*/
|
|
36
|
+
function metaLanguageCode(locale) {
|
|
37
|
+
return locale.replace(/-/g, '_');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=whatsapp-language.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp-language.js","sourceRoot":"","sources":["../../../../src/communication/adapters/whatsapp-language.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AASH,4CAEC;AATD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
|