@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,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Onboarding de conta de canal — Embedded Signup da Meta.
|
|
3
|
+
*
|
|
4
|
+
* Este módulo é a fronteira entre "o operador clicou em Conectar" e "existe um
|
|
5
|
+
* vínculo de canal com credencial no cofre". Ele não escreve no banco e não lê
|
|
6
|
+
* configuração: recebe o que precisa e devolve o que descobriu, para que o
|
|
7
|
+
* produto decida o que persistir.
|
|
8
|
+
*
|
|
9
|
+
* ── A regra que este arquivo existe para cumprir ────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* **Nenhum token é digitado por humano.** O caminho anterior — e o que ainda
|
|
12
|
+
* está no cofre desta casa, sob `PROPOSAL_COMM_WA_ACCESS_TOKEN` — é um token de
|
|
13
|
+
* USUÁRIO gerado no painel da Meta e colado numa variável de ambiente. Ele
|
|
14
|
+
* expirou em 2026-07-21 e derrubou o canal sem que nada avisasse, porque um
|
|
15
|
+
* token colado não tem dono, não tem renovação e não tem trilha: ninguém sabe
|
|
16
|
+
* quem o gerou nem quando ele morre.
|
|
17
|
+
*
|
|
18
|
+
* **Aquela credencial é de OUTRO app** — "Baruk Communication Sandbox", do motor
|
|
19
|
+
* de propostas — e **não deve ser reutilizada aqui em hipótese nenhuma**. O app
|
|
20
|
+
* canônico deste caminho é o "Baruk Comunicação". A distinção está escrita
|
|
21
|
+
* porque os dois têm nome parecido e a mesma cara no cofre, e reaproveitar o
|
|
22
|
+
* errado é a regressão mais barata de cometer nesta frente.
|
|
23
|
+
*
|
|
24
|
+
* O Embedded Signup devolve, para o servidor, um `code` trocável por um
|
|
25
|
+
* **business integration system user access token** — escopado ao cliente que
|
|
26
|
+
* autorizou, de vida longa, revogável por ele, e que nunca passa pelo teclado
|
|
27
|
+
* de ninguém.
|
|
28
|
+
*
|
|
29
|
+
* ── O que NÃO está aqui ─────────────────────────────────────────────────────
|
|
30
|
+
*
|
|
31
|
+
* O `client_secret` do App. Ele entra por parâmetro, vindo do ambiente do
|
|
32
|
+
* processo, e nunca é logado, devolvido nem embutido em mensagem de erro. Pelo
|
|
33
|
+
* mesmo motivo, nenhuma função deste arquivo devolve a mensagem de erro da
|
|
34
|
+
* Meta: ela carrega, com frequência, o nome e o identificador do negócio do
|
|
35
|
+
* cliente — que é PII de terceiro dentro de um log nosso.
|
|
36
|
+
*/
|
|
37
|
+
import { createHash, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
38
|
+
import { graphUrl } from './graph.js';
|
|
39
|
+
/**
|
|
40
|
+
* 32 bytes de aleatoriedade criptográfica.
|
|
41
|
+
*
|
|
42
|
+
* Não é um uuid de propósito: um uuidv7 carrega o instante de criação e é
|
|
43
|
+
* parcialmente previsível, e a única função deste valor é ser impossível de
|
|
44
|
+
* adivinhar.
|
|
45
|
+
*/
|
|
46
|
+
export function createSignupState() {
|
|
47
|
+
const state = randomBytes(32).toString('base64url');
|
|
48
|
+
return { state, stateHash: hashSignupState(state) };
|
|
49
|
+
}
|
|
50
|
+
export function hashSignupState(state) {
|
|
51
|
+
return createHash('sha256').update(state, 'utf8').digest('hex');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Comparação de hashes em tempo constante.
|
|
55
|
+
*
|
|
56
|
+
* A busca no banco é por igualdade de índice e já vaza tempo por natureza; esta
|
|
57
|
+
* função existe para o segundo confronto, feito em memória depois da leitura,
|
|
58
|
+
* onde a comparação ingênua compara byte a byte e para no primeiro que difere.
|
|
59
|
+
*/
|
|
60
|
+
export function sameStateHash(a, b) {
|
|
61
|
+
if (typeof a !== 'string' || typeof b !== 'string')
|
|
62
|
+
return false;
|
|
63
|
+
const ba = Buffer.from(a, 'utf8');
|
|
64
|
+
const bb = Buffer.from(b, 'utf8');
|
|
65
|
+
if (ba.length !== bb.length)
|
|
66
|
+
return false;
|
|
67
|
+
return timingSafeEqual(ba, bb);
|
|
68
|
+
}
|
|
69
|
+
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
70
|
+
/**
|
|
71
|
+
* Traduz o erro da Meta para uma classe nossa.
|
|
72
|
+
*
|
|
73
|
+
* `100`/`191` sobre um `code` significam código gasto ou redirect divergente —
|
|
74
|
+
* os dois são "refaça o fluxo", não "conserte a configuração". `190` e `200`
|
|
75
|
+
* são credencial/permissão do App: refazer o fluxo não resolve nada, e mostrar
|
|
76
|
+
* "tente de novo" ao operador o faria repetir para sempre um passo que nunca
|
|
77
|
+
* vai funcionar.
|
|
78
|
+
*/
|
|
79
|
+
function classifySignupError(status, err) {
|
|
80
|
+
const code = err?.code;
|
|
81
|
+
if (code === 190 || code === 200 || code === 10 || code === 3)
|
|
82
|
+
return 'unauthorized_app';
|
|
83
|
+
if (code === 100 || code === 191)
|
|
84
|
+
return 'invalid_code';
|
|
85
|
+
if (code === 4 || code === 17 || code === 80007 || code === 613)
|
|
86
|
+
return 'rate_limited';
|
|
87
|
+
if (status === 429)
|
|
88
|
+
return 'rate_limited';
|
|
89
|
+
if (status >= 500)
|
|
90
|
+
return 'network';
|
|
91
|
+
return 'provider_error';
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Uma chamada à Graph API, com a resposta já reduzida a `ok`/classe de erro.
|
|
95
|
+
*
|
|
96
|
+
* Centraliza três cuidados que, escritos em cada chamada, um dia divergiriam:
|
|
97
|
+
* o timeout (uma chamada sem teto pendura o request do operador), o descarte
|
|
98
|
+
* total da exceção de rede (ela pode carregar a URL, e a URL de troca carrega
|
|
99
|
+
* o `client_secret` na query), e a leitura do corpo de erro sem propagá-lo.
|
|
100
|
+
*/
|
|
101
|
+
async function graphCall(call, opts) {
|
|
102
|
+
const doFetch = opts.fetchImpl ?? fetch;
|
|
103
|
+
let res;
|
|
104
|
+
try {
|
|
105
|
+
res = await doFetch(call.url, {
|
|
106
|
+
method: call.method,
|
|
107
|
+
headers: {
|
|
108
|
+
...(call.bearer ? { authorization: `Bearer ${call.bearer}` } : {}),
|
|
109
|
+
...(call.body ? { 'content-type': 'application/json' } : {}),
|
|
110
|
+
},
|
|
111
|
+
...(call.body ? { body: JSON.stringify(call.body) } : {}),
|
|
112
|
+
signal: AbortSignal.timeout(opts.timeoutMs ?? DEFAULT_TIMEOUT_MS),
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// Nada da exceção é propagado. Em algumas implementações de `fetch` a
|
|
117
|
+
// mensagem inclui a URL — e a URL da troca de código carrega o segredo do
|
|
118
|
+
// App na query string.
|
|
119
|
+
return { ok: false, reason: 'network' };
|
|
120
|
+
}
|
|
121
|
+
const payload = (await res.json().catch(() => null));
|
|
122
|
+
if (!res.ok) {
|
|
123
|
+
const err = (payload?.error ?? null);
|
|
124
|
+
return { ok: false, reason: classifySignupError(res.status, err) };
|
|
125
|
+
}
|
|
126
|
+
return { ok: true, value: (payload ?? {}) };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Troca o `code` do Embedded Signup pelo token de negócio do cliente.
|
|
130
|
+
*
|
|
131
|
+
* **Server-to-server, sempre.** O `client_secret` do App não pode existir no
|
|
132
|
+
* navegador: quem o tiver consegue trocar códigos de qualquer cliente e falar
|
|
133
|
+
* pela conta dele. É por isso que o front devolve `code` e não token, e é por
|
|
134
|
+
* isso que esta função vive no servidor.
|
|
135
|
+
*/
|
|
136
|
+
export async function exchangeSignupCode(input, opts = {}) {
|
|
137
|
+
const code = input.code?.trim() ?? '';
|
|
138
|
+
const appId = input.appId?.trim() ?? '';
|
|
139
|
+
const appSecret = typeof input.appSecret === 'string' ? input.appSecret : '';
|
|
140
|
+
if (!code || !appId || !appSecret)
|
|
141
|
+
return { ok: false, reason: 'unauthorized_app' };
|
|
142
|
+
const url = new URL(graphUrl('oauth/access_token', opts.env));
|
|
143
|
+
url.searchParams.set('client_id', appId);
|
|
144
|
+
url.searchParams.set('client_secret', appSecret);
|
|
145
|
+
url.searchParams.set('code', code);
|
|
146
|
+
const res = await graphCall({ url: url.toString(), method: 'GET' }, opts);
|
|
147
|
+
if (!res.ok)
|
|
148
|
+
return res;
|
|
149
|
+
const token = res.value.access_token;
|
|
150
|
+
// Resposta 200 sem token é resposta inválida, não sucesso vazio. Deixá-la
|
|
151
|
+
// passar gravaria uma credencial em branco no cofre e o canal falharia
|
|
152
|
+
// depois, longe daqui.
|
|
153
|
+
if (typeof token !== 'string' || token.length < 20) {
|
|
154
|
+
return { ok: false, reason: 'provider_error' };
|
|
155
|
+
}
|
|
156
|
+
return {
|
|
157
|
+
ok: true,
|
|
158
|
+
value: {
|
|
159
|
+
accessToken: token,
|
|
160
|
+
...(typeof res.value.expires_in === 'number' && res.value.expires_in > 0
|
|
161
|
+
? { expiresInSeconds: res.value.expires_in }
|
|
162
|
+
: {}),
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/* ── 2. Assinatura do App na WABA do cliente ────────────────────────────── */
|
|
167
|
+
/**
|
|
168
|
+
* Assina o App do motor nos webhooks da WABA do cliente.
|
|
169
|
+
*
|
|
170
|
+
* Sem isto o vínculo existe, o envio funciona e **nenhum status volta**: a
|
|
171
|
+
* mensagem fica presa em `sent` para sempre e a tela do escritório não sabe
|
|
172
|
+
* dizer se o cliente recebeu. É a diferença entre um canal que funciona e um
|
|
173
|
+
* canal que parece funcionar.
|
|
174
|
+
*
|
|
175
|
+
* Idempotente do lado da Meta — assinar duas vezes não é erro.
|
|
176
|
+
*/
|
|
177
|
+
export async function subscribeAppToWaba(input, opts = {}) {
|
|
178
|
+
const wabaId = input.wabaId?.trim() ?? '';
|
|
179
|
+
if (!wabaId)
|
|
180
|
+
return { ok: false, reason: 'provider_error' };
|
|
181
|
+
const res = await graphCall({
|
|
182
|
+
url: graphUrl(`${encodeURIComponent(wabaId)}/subscribed_apps`, opts.env),
|
|
183
|
+
method: 'POST',
|
|
184
|
+
bearer: input.accessToken,
|
|
185
|
+
}, opts);
|
|
186
|
+
if (!res.ok)
|
|
187
|
+
return res;
|
|
188
|
+
return { ok: true, value: { subscribed: res.value.success !== false } };
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Estado do número, do ponto de vista da Meta.
|
|
192
|
+
*
|
|
193
|
+
* Leitura pura. É o que permite à tela dizer `attention_required` com um motivo
|
|
194
|
+
* — "número não verificado", "conta restrita" — em vez do genérico "erro", que
|
|
195
|
+
* obriga o escritório a abrir o painel da Meta para descobrir o quê.
|
|
196
|
+
*/
|
|
197
|
+
export async function readPhoneNumber(input, opts = {}) {
|
|
198
|
+
const id = input.phoneNumberId?.trim() ?? '';
|
|
199
|
+
if (!id)
|
|
200
|
+
return { ok: false, reason: 'provider_error' };
|
|
201
|
+
const url = new URL(graphUrl(encodeURIComponent(id), opts.env));
|
|
202
|
+
url.searchParams.set('fields', 'display_phone_number,verified_name,code_verification_status,status,quality_rating,platform_type');
|
|
203
|
+
const res = await graphCall({ url: url.toString(), method: 'GET', bearer: input.accessToken }, opts);
|
|
204
|
+
if (!res.ok)
|
|
205
|
+
return res;
|
|
206
|
+
const v = res.value;
|
|
207
|
+
return {
|
|
208
|
+
ok: true,
|
|
209
|
+
value: {
|
|
210
|
+
...(str(v.display_phone_number) ? { displayPhoneNumber: str(v.display_phone_number) } : {}),
|
|
211
|
+
...(str(v.verified_name) ? { verifiedName: str(v.verified_name) } : {}),
|
|
212
|
+
...(str(v.code_verification_status)
|
|
213
|
+
? { codeVerificationStatus: str(v.code_verification_status) }
|
|
214
|
+
: {}),
|
|
215
|
+
...(str(v.status) ? { status: str(v.status) } : {}),
|
|
216
|
+
...(str(v.quality_rating) ? { qualityRating: str(v.quality_rating) } : {}),
|
|
217
|
+
...(str(v.platform_type) ? { platformType: str(v.platform_type) } : {}),
|
|
218
|
+
},
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Lista os templates da WABA do cliente. **Somente leitura.**
|
|
223
|
+
*
|
|
224
|
+
* Existe porque `approvedEvents` é uma lista mantida à mão em
|
|
225
|
+
* `tenant.settings`, e uma lista declarada por humano diverge da realidade da
|
|
226
|
+
* Meta no dia em que alguém aprova, pausa ou reprova um template lá. Um template
|
|
227
|
+
* marcado "aprovado" aqui e reprovado lá gasta a tentativa de envio e volta erro
|
|
228
|
+
* permanente — que a régua interpreta como problema do destinatário.
|
|
229
|
+
*
|
|
230
|
+
* Devolver a lista permite que a decisão de configurar `approvedEvents` seja
|
|
231
|
+
* tomada contra o que a Meta diz, e não contra o que alguém lembrou.
|
|
232
|
+
*/
|
|
233
|
+
export async function listWabaTemplates(input, opts = {}) {
|
|
234
|
+
const wabaId = input.wabaId?.trim() ?? '';
|
|
235
|
+
if (!wabaId)
|
|
236
|
+
return { ok: false, reason: 'provider_error' };
|
|
237
|
+
const url = new URL(graphUrl(`${encodeURIComponent(wabaId)}/message_templates`, opts.env));
|
|
238
|
+
url.searchParams.set('fields', 'name,language,status,category');
|
|
239
|
+
url.searchParams.set('limit', '100');
|
|
240
|
+
const res = await graphCall({ url: url.toString(), method: 'GET', bearer: input.accessToken }, opts);
|
|
241
|
+
if (!res.ok)
|
|
242
|
+
return res;
|
|
243
|
+
const items = Array.isArray(res.value.data) ? res.value.data : [];
|
|
244
|
+
return {
|
|
245
|
+
ok: true,
|
|
246
|
+
// Só os quatro campos que interessam. O payload da Meta traz `components`
|
|
247
|
+
// com o TEXTO do template, e o texto de um template de cobrança carrega a
|
|
248
|
+
// forma como o escritório fala com o cliente — não precisa atravessar o
|
|
249
|
+
// domínio para responder "está aprovado?".
|
|
250
|
+
value: items.flatMap((t) => {
|
|
251
|
+
const name = str(t.name);
|
|
252
|
+
const language = str(t.language);
|
|
253
|
+
const status = str(t.status);
|
|
254
|
+
if (!name || !language || !status)
|
|
255
|
+
return [];
|
|
256
|
+
const category = str(t.category);
|
|
257
|
+
return [{ name, language, status, ...(category ? { category } : {}) }];
|
|
258
|
+
}),
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Registra o número do cliente na Cloud API.
|
|
263
|
+
*
|
|
264
|
+
* Implementado e **não chamado** por nenhum caminho automático desta fase. O
|
|
265
|
+
* gate de autorização humana está no parâmetro, e não numa convenção de
|
|
266
|
+
* chamada: uma trava que depende de ninguém chamar a função errada não é trava.
|
|
267
|
+
*/
|
|
268
|
+
export async function registerPhoneNumber(input, opts = {}) {
|
|
269
|
+
if (input.authorized !== true)
|
|
270
|
+
return { ok: false, reason: 'not_authorized' };
|
|
271
|
+
const pin = input.pin?.trim() ?? '';
|
|
272
|
+
if (!/^\d{6}$/.test(pin))
|
|
273
|
+
return { ok: false, reason: 'invalid_pin' };
|
|
274
|
+
const res = await graphCall({
|
|
275
|
+
url: graphUrl(`${encodeURIComponent(input.phoneNumberId)}/register`, opts.env),
|
|
276
|
+
method: 'POST',
|
|
277
|
+
bearer: input.accessToken,
|
|
278
|
+
body: { messaging_product: 'whatsapp', pin },
|
|
279
|
+
}, opts);
|
|
280
|
+
if (!res.ok)
|
|
281
|
+
return { ok: false, reason: res.reason };
|
|
282
|
+
return { ok: true };
|
|
283
|
+
}
|
|
284
|
+
function str(v) {
|
|
285
|
+
return typeof v === 'string' && v.trim().length > 0 ? v.trim().slice(0, 120) : undefined;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=onboarding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/communication/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Política de canais — qual canal tentar, em que ordem, e quando desistir.
|
|
3
|
+
*
|
|
4
|
+
* A política é DADO do consumidor, nunca constante do motor. O adendo §12 é
|
|
5
|
+
* explícito: `D-3`, `D0`, `D+3` e a escolha de canal pertencem à régua da SC. O
|
|
6
|
+
* motor recebe uma intenção que já diz "tente WhatsApp, depois e-mail" e a
|
|
7
|
+
* executa; ele nunca decide que cobrança de contabilidade começa por WhatsApp.
|
|
8
|
+
*/
|
|
9
|
+
import type { ChannelKey } from './channel.js';
|
|
10
|
+
export interface ChannelPolicy {
|
|
11
|
+
/**
|
|
12
|
+
* Canais em ordem de preferência. O primeiro que estiver utilizável ganha.
|
|
13
|
+
*
|
|
14
|
+
* Lista, e não canal único com `fallback` opcional, porque a segunda escolha
|
|
15
|
+
* também pode falhar — e a alternativa seria aninhar fallback dentro de
|
|
16
|
+
* fallback até alguém parar de aninhar no nível errado.
|
|
17
|
+
*/
|
|
18
|
+
order: readonly ChannelKey[];
|
|
19
|
+
/**
|
|
20
|
+
* Continuar para o próximo canal depois de uma falha TEMPORÁRIA?
|
|
21
|
+
*
|
|
22
|
+
* Padrão `false`, e o padrão é o ponto: numa falha temporária a mensagem ainda
|
|
23
|
+
* pode sair no canal preferido na próxima tentativa. Cair para o próximo
|
|
24
|
+
* imediatamente entrega DOIS avisos ao cliente pelo preço de uma instabilidade
|
|
25
|
+
* de rede — e num aviso de cobrança isso não é redundância simpática, é o
|
|
26
|
+
* escritório parecendo insistente.
|
|
27
|
+
*/
|
|
28
|
+
fallbackOnTemporary?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Por que um canal foi pulado. Cada motivo leva a uma ação operacional diferente
|
|
32
|
+
* na tela da régua, e por isso nenhum deles é "erro".
|
|
33
|
+
*/
|
|
34
|
+
export type SkipReason =
|
|
35
|
+
/** Canal não registrado no ambiente. */
|
|
36
|
+
'channel_not_registered'
|
|
37
|
+
/** Sem conta/credencial deste tenant para o canal. */
|
|
38
|
+
| 'no_identity'
|
|
39
|
+
/** Destinatário sem endereço/telefone utilizável para este canal. */
|
|
40
|
+
| 'no_recipient'
|
|
41
|
+
/** Telefone presente mas inválido, ou fixo onde só celular serve. */
|
|
42
|
+
| 'invalid_recipient'
|
|
43
|
+
/** Opt-out registrado. */
|
|
44
|
+
| 'opted_out'
|
|
45
|
+
/** Sem permissão registrada e a política do produto é fail-safe. */
|
|
46
|
+
| 'consent_unknown'
|
|
47
|
+
/**
|
|
48
|
+
* O endereço existe, mas **ninguém do escritório o liberou** para comunicação
|
|
49
|
+
* externa.
|
|
50
|
+
*
|
|
51
|
+
* Distinto de `consent_unknown` em quem decide, e a diferença é o ponto:
|
|
52
|
+
* consentimento é a vontade do DESTINATÁRIO — "esta pessoa aceita ser
|
|
53
|
+
* contatada?" — e para cobrança transacional a relação contratual já
|
|
54
|
+
* responde. Este é a conferência do REMETENTE: "alguém daqui olhou este
|
|
55
|
+
* endereço e liberou este cliente?". Um cliente recém-importado tem os dois
|
|
56
|
+
* estados diferentes: a relação contratual existe, e a conferência não
|
|
57
|
+
* aconteceu.
|
|
58
|
+
*
|
|
59
|
+
* Sem esta separação, importar a carteira ligaria a régua de cobrança para
|
|
60
|
+
* todo mundo no primeiro cron, sobre dados que ninguém conferiu.
|
|
61
|
+
*/
|
|
62
|
+
| 'recipient_not_confirmed'
|
|
63
|
+
/** Sem template aprovado para o evento neste canal. */
|
|
64
|
+
| 'no_template'
|
|
65
|
+
/** Já enviado — a reserva desta chave está assentada como entregue. */
|
|
66
|
+
| 'already_sent'
|
|
67
|
+
/**
|
|
68
|
+
* Outra execução está com a reserva desta chave AGORA.
|
|
69
|
+
*
|
|
70
|
+
* Distinto de `already_sent`: ali a mensagem saiu, aqui ela pode estar
|
|
71
|
+
* saindo neste instante em outro worker. Um só rótulo faria a trilha
|
|
72
|
+
* afirmar entrega que ninguém confirmou — e faria a régua parar de
|
|
73
|
+
* distinguir "o sistema funcionou" de "duas execuções disputaram".
|
|
74
|
+
*/
|
|
75
|
+
| 'claim_in_flight'
|
|
76
|
+
/**
|
|
77
|
+
* Esta execução TINHA a reserva e a perdeu antes de chamar o provider.
|
|
78
|
+
*
|
|
79
|
+
* O caso concreto: o processo travou (GC longo, `SIGSTOP`, VM suspensa) por
|
|
80
|
+
* mais tempo que o prazo da reserva, outro worker a retomou, e o primeiro
|
|
81
|
+
* acordou achando que ainda era o titular. O fencing pré-provider o barra na
|
|
82
|
+
* última fronteira persistente, e este é o rótulo.
|
|
83
|
+
*
|
|
84
|
+
* Distinto de `claim_in_flight` em quem é o sujeito: ali a reserva NUNCA foi
|
|
85
|
+
* concedida a esta execução; aqui ela foi, e expirou no meio. A diferença
|
|
86
|
+
* importa para quem investiga — `claim_in_flight` em massa é concorrência
|
|
87
|
+
* saudável, `claim_lost` em massa é prazo curto demais para o tempo real de
|
|
88
|
+
* envio, ou instância sofrendo pausa.
|
|
89
|
+
*/
|
|
90
|
+
| 'claim_lost'
|
|
91
|
+
/**
|
|
92
|
+
* A chave está assentada como falha permanente. Retentar repetiria o mesmo
|
|
93
|
+
* erro; o que falta é ação humana, não outra tentativa.
|
|
94
|
+
*/
|
|
95
|
+
| 'permanently_failed'
|
|
96
|
+
/**
|
|
97
|
+
* O desfecho da tentativa anterior é DESCONHECIDO — alguém chamou o provider e
|
|
98
|
+
* morreu antes de assentar — e não há garantia externa que torne o reenvio
|
|
99
|
+
* seguro.
|
|
100
|
+
*
|
|
101
|
+
* Distinto de `permanently_failed` em tudo que importa para quem opera: ali a
|
|
102
|
+
* mensagem comprovadamente não saiu, aqui ninguém sabe. Um só rótulo mandaria
|
|
103
|
+
* o escritório reenviar o que talvez já tenha chegado.
|
|
104
|
+
*/
|
|
105
|
+
| 'unknown_outcome';
|
|
106
|
+
/** Uma tentativa por canal, na ordem — o registro do que o motor fez e por quê. */
|
|
107
|
+
export interface ChannelAttempt {
|
|
108
|
+
channel: ChannelKey;
|
|
109
|
+
skipped?: SkipReason;
|
|
110
|
+
outcome?: 'sent' | 'temporary' | 'permanent' | 'opted_out' | 'unavailable';
|
|
111
|
+
providerRef?: string;
|
|
112
|
+
detail?: string;
|
|
113
|
+
}
|
|
114
|
+
export declare const DEFAULT_POLICY: ChannelPolicy;
|
|
115
|
+
//# sourceMappingURL=policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/communication/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B;;;;;;OAMG;IACH,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B;;;;;;;;OAQG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,MAAM,UAAU;AACpB,wCAAwC;AACtC,wBAAwB;AAC1B,sDAAsD;GACpD,aAAa;AACf,qEAAqE;GACnE,cAAc;AAChB,qEAAqE;GACnE,mBAAmB;AACrB,0BAA0B;GACxB,WAAW;AACb,oEAAoE;GAClE,iBAAiB;AACnB;;;;;;;;;;;;;;GAcG;GACD,yBAAyB;AAC3B,uDAAuD;GACrD,aAAa;AACf,uEAAuE;GACrE,cAAc;AAChB;;;;;;;GAOG;GACD,iBAAiB;AACnB;;;;;;;;;;;;;GAaG;GACD,YAAY;AACd;;;GAGG;GACD,oBAAoB;AACtB;;;;;;;;GAQG;GACD,iBAAiB,CAAC;AAEtB,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,aAAa,CAAC;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,cAAc,EAAE,aAG5B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Política de canais — qual canal tentar, em que ordem, e quando desistir.
|
|
3
|
+
*
|
|
4
|
+
* A política é DADO do consumidor, nunca constante do motor. O adendo §12 é
|
|
5
|
+
* explícito: `D-3`, `D0`, `D+3` e a escolha de canal pertencem à régua da SC. O
|
|
6
|
+
* motor recebe uma intenção que já diz "tente WhatsApp, depois e-mail" e a
|
|
7
|
+
* executa; ele nunca decide que cobrança de contabilidade começa por WhatsApp.
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_POLICY = {
|
|
10
|
+
order: ['email'],
|
|
11
|
+
fallbackOnTemporary: false,
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/communication/policy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+GH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,mBAAmB,EAAE,KAAK;CAC3B,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Roteamento de webhook de entrada — de quem é este evento?
|
|
3
|
+
*
|
|
4
|
+
* **Este módulo existe por causa da topologia do provider, não por gosto de
|
|
5
|
+
* abstração.** Sob um Meta App único do motor — que é a topologia oficial de
|
|
6
|
+
* Tech Provider —, a URL de callback e o verify token pertencem ao APP, não à
|
|
7
|
+
* conta do cliente. A Meta entrega os eventos de TODAS as WABAs assinadas no
|
|
8
|
+
* mesmo endereço, e não tem como saber o nosso `tenantId`.
|
|
9
|
+
*
|
|
10
|
+
* A rota anterior embutia `:tenantId` no path. Isso só funciona quando cada
|
|
11
|
+
* tenant tem o próprio App e o próprio webhook — uma topologia que a plataforma
|
|
12
|
+
* suporta, mas que não é a que o motor vai operar, e que não oferece
|
|
13
|
+
* coexistência com o WhatsApp Business App. Com um App só, o tenant tem de sair
|
|
14
|
+
* do PAYLOAD.
|
|
15
|
+
*
|
|
16
|
+
* O que decide é `metadata.phone_number_id`. O WABA (`entry.id`) é **conferência
|
|
17
|
+
* de coerência**, nunca segunda chave: um número que resolve para um registro
|
|
18
|
+
* cujo WABA discorda significa cadastro errado ou payload forjado, e os dois
|
|
19
|
+
* merecem recusa em vez de palpite. É a mesma conclusão a que o registry do
|
|
20
|
+
* Paid Media Engine já tinha chegado, e ela é reaproveitada aqui de propósito.
|
|
21
|
+
*
|
|
22
|
+
* Nunca decidem: telefone do remetente, nome do contato, texto da mensagem,
|
|
23
|
+
* nome de campanha. São entrada não autenticada ou ambígua — o mesmo telefone
|
|
24
|
+
* pode falar com dois tenants.
|
|
25
|
+
*/
|
|
26
|
+
/** Provedores cujo webhook este módulo sabe rotear. */
|
|
27
|
+
export type RoutedProvider = 'meta_whatsapp';
|
|
28
|
+
/**
|
|
29
|
+
* A origem declarada por um evento de entrada.
|
|
30
|
+
*
|
|
31
|
+
* `providerAccountRef` é o identificador de ROTEAMENTO (na Meta,
|
|
32
|
+
* `phone_number_id`). `providerParentRef` é o agrupador (a WABA), usado só para
|
|
33
|
+
* conferir coerência.
|
|
34
|
+
*/
|
|
35
|
+
export interface WebhookOrigin {
|
|
36
|
+
provider: RoutedProvider;
|
|
37
|
+
providerAccountRef: string;
|
|
38
|
+
providerParentRef?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Vínculo entre uma conta do provider e um tenant/produto.
|
|
42
|
+
*
|
|
43
|
+
* **Sem segredo.** Só identificadores emitidos pelo provider e o dono. A
|
|
44
|
+
* credencial correspondente é resolvida depois, dentro do contexto do tenant,
|
|
45
|
+
* por referência lógica.
|
|
46
|
+
*/
|
|
47
|
+
export interface ChannelRoute {
|
|
48
|
+
provider: RoutedProvider;
|
|
49
|
+
providerAccountRef: string;
|
|
50
|
+
providerParentRef?: string;
|
|
51
|
+
tenantId: string;
|
|
52
|
+
product: string;
|
|
53
|
+
brand: string;
|
|
54
|
+
bindingId: string;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fonte de rotas.
|
|
58
|
+
*
|
|
59
|
+
* Consultada ANTES de existir contexto de tenant — é o que a distingue do
|
|
60
|
+
* `ChannelAccountStore`, que só responde dentro de um tenant já conhecido.
|
|
61
|
+
*/
|
|
62
|
+
export interface ChannelRouteStore {
|
|
63
|
+
findByProviderAccount(provider: RoutedProvider, providerAccountRef: string): Promise<ChannelRoute | null>;
|
|
64
|
+
}
|
|
65
|
+
export type RouteRejection =
|
|
66
|
+
/** O payload não declarou de qual conta veio. */
|
|
67
|
+
'missing_origin'
|
|
68
|
+
/** Nenhum tenant reivindicou esta conta. NUNCA vira tenant padrão. */
|
|
69
|
+
| 'unknown_account'
|
|
70
|
+
/** A conta existe, mas o agrupador declarado discorda do registrado. */
|
|
71
|
+
| 'parent_mismatch'
|
|
72
|
+
/** O vínculo existe e não está ativo. */
|
|
73
|
+
| 'not_active';
|
|
74
|
+
export type RouteResolution = {
|
|
75
|
+
ok: true;
|
|
76
|
+
route: ChannelRoute;
|
|
77
|
+
} | {
|
|
78
|
+
ok: false;
|
|
79
|
+
reason: RouteRejection;
|
|
80
|
+
detail: string;
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Resolve a origem de um evento para um tenant.
|
|
84
|
+
*
|
|
85
|
+
* **Fail-closed por construção.** Não existe neste arquivo nenhum caminho que
|
|
86
|
+
* devolva uma rota que não tenha sido encontrada pela chave exata do provider:
|
|
87
|
+
* não há tenant padrão, não há "primeiro tenant", não há fallback por marca. Um
|
|
88
|
+
* número desconhecido resolve para recusa, e quem chama audita e para.
|
|
89
|
+
*/
|
|
90
|
+
export declare function resolveRoute(store: ChannelRouteStore, origin: WebhookOrigin): Promise<RouteResolution>;
|
|
91
|
+
/**
|
|
92
|
+
* Duas origens são a mesma?
|
|
93
|
+
*
|
|
94
|
+
* Um POST da Meta pode trazer eventos de mais de uma conta. Agrupar por origem
|
|
95
|
+
* antes de abrir contexto de tenant é o que impede o evento de um escritório de
|
|
96
|
+
* ser aplicado dentro da transação de outro.
|
|
97
|
+
*/
|
|
98
|
+
export declare function sameOrigin(a: WebhookOrigin, b: WebhookOrigin): boolean;
|
|
99
|
+
//# sourceMappingURL=routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.d.ts","sourceRoot":"","sources":["../../src/communication/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,uDAAuD;AACvD,MAAM,MAAM,cAAc,GAAG,eAAe,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CACnB,QAAQ,EAAE,cAAc,EACxB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,cAAc;AACxB,iDAAiD;AAC/C,gBAAgB;AAClB,sEAAsE;GACpE,iBAAiB;AACnB,wEAAwE;GACtE,iBAAiB;AACnB,yCAAyC;GACvC,YAAY,CAAC;AAEjB,MAAM,MAAM,eAAe,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5F;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,eAAe,CAAC,CA+B1B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAMtE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Roteamento de webhook de entrada — de quem é este evento?
|
|
3
|
+
*
|
|
4
|
+
* **Este módulo existe por causa da topologia do provider, não por gosto de
|
|
5
|
+
* abstração.** Sob um Meta App único do motor — que é a topologia oficial de
|
|
6
|
+
* Tech Provider —, a URL de callback e o verify token pertencem ao APP, não à
|
|
7
|
+
* conta do cliente. A Meta entrega os eventos de TODAS as WABAs assinadas no
|
|
8
|
+
* mesmo endereço, e não tem como saber o nosso `tenantId`.
|
|
9
|
+
*
|
|
10
|
+
* A rota anterior embutia `:tenantId` no path. Isso só funciona quando cada
|
|
11
|
+
* tenant tem o próprio App e o próprio webhook — uma topologia que a plataforma
|
|
12
|
+
* suporta, mas que não é a que o motor vai operar, e que não oferece
|
|
13
|
+
* coexistência com o WhatsApp Business App. Com um App só, o tenant tem de sair
|
|
14
|
+
* do PAYLOAD.
|
|
15
|
+
*
|
|
16
|
+
* O que decide é `metadata.phone_number_id`. O WABA (`entry.id`) é **conferência
|
|
17
|
+
* de coerência**, nunca segunda chave: um número que resolve para um registro
|
|
18
|
+
* cujo WABA discorda significa cadastro errado ou payload forjado, e os dois
|
|
19
|
+
* merecem recusa em vez de palpite. É a mesma conclusão a que o registry do
|
|
20
|
+
* Paid Media Engine já tinha chegado, e ela é reaproveitada aqui de propósito.
|
|
21
|
+
*
|
|
22
|
+
* Nunca decidem: telefone do remetente, nome do contato, texto da mensagem,
|
|
23
|
+
* nome de campanha. São entrada não autenticada ou ambígua — o mesmo telefone
|
|
24
|
+
* pode falar com dois tenants.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Resolve a origem de um evento para um tenant.
|
|
28
|
+
*
|
|
29
|
+
* **Fail-closed por construção.** Não existe neste arquivo nenhum caminho que
|
|
30
|
+
* devolva uma rota que não tenha sido encontrada pela chave exata do provider:
|
|
31
|
+
* não há tenant padrão, não há "primeiro tenant", não há fallback por marca. Um
|
|
32
|
+
* número desconhecido resolve para recusa, e quem chama audita e para.
|
|
33
|
+
*/
|
|
34
|
+
export async function resolveRoute(store, origin) {
|
|
35
|
+
const accountRef = origin.providerAccountRef?.trim();
|
|
36
|
+
if (!accountRef) {
|
|
37
|
+
return { ok: false, reason: 'missing_origin', detail: 'evento sem conta de origem' };
|
|
38
|
+
}
|
|
39
|
+
const route = await store.findByProviderAccount(origin.provider, accountRef);
|
|
40
|
+
if (!route) {
|
|
41
|
+
return {
|
|
42
|
+
ok: false,
|
|
43
|
+
reason: 'unknown_account',
|
|
44
|
+
detail: `conta ${origin.provider} não vinculada a nenhum tenant`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Conferência de coerência — só quando os dois lados declaram o agrupador.
|
|
48
|
+
// Exigi-lo quando o payload não o traz recusaria evento legítimo; ignorá-lo
|
|
49
|
+
// quando ambos existem e discordam aceitaria cadastro corrompido.
|
|
50
|
+
if (origin.providerParentRef &&
|
|
51
|
+
route.providerParentRef &&
|
|
52
|
+
origin.providerParentRef !== route.providerParentRef) {
|
|
53
|
+
return {
|
|
54
|
+
ok: false,
|
|
55
|
+
reason: 'parent_mismatch',
|
|
56
|
+
detail: 'agrupador do evento discorda do vínculo registrado',
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return { ok: true, route };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Duas origens são a mesma?
|
|
63
|
+
*
|
|
64
|
+
* Um POST da Meta pode trazer eventos de mais de uma conta. Agrupar por origem
|
|
65
|
+
* antes de abrir contexto de tenant é o que impede o evento de um escritório de
|
|
66
|
+
* ser aplicado dentro da transação de outro.
|
|
67
|
+
*/
|
|
68
|
+
export function sameOrigin(a, b) {
|
|
69
|
+
return (a.provider === b.provider &&
|
|
70
|
+
a.providerAccountRef === b.providerAccountRef &&
|
|
71
|
+
(a.providerParentRef ?? '') === (b.providerParentRef ?? ''));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing.js","sourceRoot":"","sources":["../../src/communication/routing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA6DH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAwB,EACxB,MAAqB;IAErB,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,SAAS,MAAM,CAAC,QAAQ,gCAAgC;SACjE,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,kEAAkE;IAClE,IACE,MAAM,CAAC,iBAAiB;QACxB,KAAK,CAAC,iBAAiB;QACvB,MAAM,CAAC,iBAAiB,KAAK,KAAK,CAAC,iBAAiB,EACpD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,oDAAoD;SAC7D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAAgB,EAAE,CAAgB;IAC3D,OAAO,CACL,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QACzB,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;QAC7C,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAC5D,CAAC;AACJ,CAAC"}
|