@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,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contas de canal do escritório, para o motor compartilhado.
|
|
3
|
+
*
|
|
4
|
+
* Moram em `tenant.settings.channels` (jsonb que já existia) — sem tabela nem
|
|
5
|
+
* migration, pela mesma razão que o branding mora lá: o Office resolve
|
|
6
|
+
* configuração de tenant por esse caminho, e um segundo mecanismo para a mesma
|
|
7
|
+
* coisa é uma divergência esperando acontecer.
|
|
8
|
+
*
|
|
9
|
+
* **Nenhum valor de credencial passa por aqui.** O que o tenant configura é o
|
|
10
|
+
* NOME lógico do segredo no cofre (`credentialRef`); quem resolve o valor é a
|
|
11
|
+
* borda do adapter, com o resolvedor que o processo injeta.
|
|
12
|
+
*/
|
|
13
|
+
import { SC_PRODUCT } from './communication-bridge.js';
|
|
14
|
+
const STATUSES = new Set(['not_configured', 'pending_validation', 'active', 'paused', 'error']);
|
|
15
|
+
function text(v, max = 200) {
|
|
16
|
+
if (typeof v !== 'string')
|
|
17
|
+
return undefined;
|
|
18
|
+
const t = v.trim();
|
|
19
|
+
return t && t.length <= max ? t : undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Metadados sem segredo, e a checagem é por ALLOWLIST de chave.
|
|
23
|
+
*
|
|
24
|
+
* Filtrar por "o que parece segredo" deixaria passar o que não parece — e o
|
|
25
|
+
* `meta` de um canal é jsonb editável por quem configura o tenant, então
|
|
26
|
+
* qualquer coisa pode ter sido colada ali. Só o que o adapter precisa entra.
|
|
27
|
+
*/
|
|
28
|
+
const META_ALLOWED = new Set(['phoneNumberId', 'wabaId', 'businessId', 'region']);
|
|
29
|
+
function meta(v) {
|
|
30
|
+
if (typeof v !== 'object' || v === null)
|
|
31
|
+
return undefined;
|
|
32
|
+
const out = {};
|
|
33
|
+
for (const [k, raw] of Object.entries(v)) {
|
|
34
|
+
if (!META_ALLOWED.has(k))
|
|
35
|
+
continue;
|
|
36
|
+
const value = text(raw, 120);
|
|
37
|
+
if (value)
|
|
38
|
+
out[k] = value;
|
|
39
|
+
}
|
|
40
|
+
return Object.keys(out).length > 0 ? out : undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Store de contas do tenant corrente.
|
|
44
|
+
*
|
|
45
|
+
* **A amarra é a GUC da sessão, não o parâmetro.**
|
|
46
|
+
*
|
|
47
|
+
* A versão anterior consultava `WHERE id = ctx.tenantId` e depois comparava
|
|
48
|
+
* `row.id !== ctx.tenantId` — uma comparação que nunca pode falhar, porque o
|
|
49
|
+
* `WHERE` já usou o mesmo valor. Ela parecia ser a tranca contra "pedir o tenant
|
|
50
|
+
* errado dentro da transação certa" e não era nenhuma tranca: bastava um
|
|
51
|
+
* chamador passar um contexto alheio para ler a configuração de canal de outro
|
|
52
|
+
* escritório, `credentialRef` inclusive.
|
|
53
|
+
*
|
|
54
|
+
* `tenant` é a tabela RAIZ e não tem RLS — ela define a fronteira, não é
|
|
55
|
+
* protegida por ela —, então a política que cobre todas as outras tabelas não
|
|
56
|
+
* cobria esta consulta. A correção é exigir que o tenant PEDIDO seja o mesmo da
|
|
57
|
+
* sessão: quem quiser ler a configuração de outro escritório precisa abrir a
|
|
58
|
+
* transação dele, que é justamente o que a fronteira significa.
|
|
59
|
+
*/
|
|
60
|
+
export function createTenantChannelAccountStore(tx) {
|
|
61
|
+
return {
|
|
62
|
+
async find(ctx, channel) {
|
|
63
|
+
if (ctx.product !== SC_PRODUCT)
|
|
64
|
+
return null;
|
|
65
|
+
const rows = await tx `
|
|
66
|
+
SELECT id, settings FROM tenant
|
|
67
|
+
WHERE id = ${ctx.tenantId}
|
|
68
|
+
AND id = NULLIF(current_setting('app.current_tenant', true), '')::uuid
|
|
69
|
+
LIMIT 1
|
|
70
|
+
`;
|
|
71
|
+
const row = rows[0];
|
|
72
|
+
if (!row)
|
|
73
|
+
return null;
|
|
74
|
+
const channels = (row.settings?.channels ?? {});
|
|
75
|
+
const raw = channels[channel];
|
|
76
|
+
if (!raw)
|
|
77
|
+
return null;
|
|
78
|
+
const senderId = text(raw.senderId);
|
|
79
|
+
const credentialRef = text(raw.credentialRef);
|
|
80
|
+
// Sem remetente ou sem referência de credencial não há conta utilizável.
|
|
81
|
+
// Devolver uma conta pela metade faria o motor tentar e o provider recusar,
|
|
82
|
+
// gastando uma tentativa da régua para descobrir o que já se sabia aqui.
|
|
83
|
+
if (!senderId || !credentialRef)
|
|
84
|
+
return null;
|
|
85
|
+
const status = text(raw.status);
|
|
86
|
+
return {
|
|
87
|
+
channel,
|
|
88
|
+
tenantId: ctx.tenantId,
|
|
89
|
+
product: ctx.product,
|
|
90
|
+
brand: ctx.brand,
|
|
91
|
+
senderId,
|
|
92
|
+
displayName: text(raw.displayName, 120),
|
|
93
|
+
credentialRef,
|
|
94
|
+
// Estado desconhecido nunca vira `active`: configuração que ninguém
|
|
95
|
+
// reconhece não autoriza envio.
|
|
96
|
+
status: status && STATUSES.has(status) ? status : 'not_configured',
|
|
97
|
+
meta: meta(raw.meta),
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Fallback de plataforma da cobrança — **e-mail apenas**.
|
|
104
|
+
*
|
|
105
|
+
* Existe porque a SC já entrega e-mail em produção hoje pela chave da
|
|
106
|
+
* plataforma, e desligar isso para exigir configuração por escritório pararia a
|
|
107
|
+
* régua de quem está cobrando agora. Removê-lo não é hardening, é interrupção de
|
|
108
|
+
* serviço.
|
|
109
|
+
*
|
|
110
|
+
* O que muda em relação ao que o Codex reprovou é o que sai na mensagem: o NOME
|
|
111
|
+
* exibido passa a ser o do escritório que está cobrando, sempre. O endereço
|
|
112
|
+
* continua sendo o do domínio verificado — trocá-lo quebraria a entrega —, mas
|
|
113
|
+
* quem lê vê "SC Organização Contábil", não uma marca alheia.
|
|
114
|
+
*
|
|
115
|
+
* Nada de WhatsApp nem SMS aqui, e a proibição não é por omissão: o motor recusa
|
|
116
|
+
* fallback nesses canais por construção (`sender-profile.ts`). Um número de
|
|
117
|
+
* telefone compartilhado entre marcas é o caminho para uma marca ser bloqueada
|
|
118
|
+
* pelo comportamento de outra.
|
|
119
|
+
*/
|
|
120
|
+
export function collectionSenderFallback(branding, platformEmail) {
|
|
121
|
+
// O endereço vem do remetente base configurado; `senderFor` já sabe extrair só
|
|
122
|
+
// o endereço de um `Nome <end@dominio>`.
|
|
123
|
+
const address = /<([^>]+)>/.exec(platformEmail.senderId)?.[1] ?? platformEmail.senderId;
|
|
124
|
+
const displayName = branding.officeName.replace(/["<>\\]/g, '').trim() || undefined;
|
|
125
|
+
return {
|
|
126
|
+
email: {
|
|
127
|
+
senderId: address,
|
|
128
|
+
credentialRef: platformEmail.credentialRef,
|
|
129
|
+
displayNameFor: () => displayName,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=channel-accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel-accounts.js","sourceRoot":"","sources":["../../src/collection/channel-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vocabulário de canal da régua de cobrança.
|
|
3
|
+
*
|
|
4
|
+
* **Só o vocabulário.** Este arquivo já carregou uma abstração de canal inteira
|
|
5
|
+
* — `CollectionChannel`, `CollectionMessage`, `resolveChannel` e um adapter de
|
|
6
|
+
* e-mail — e foi por ela que a cobrança tinha um SEGUNDO caminho de envio,
|
|
7
|
+
* paralelo ao motor compartilhado, com idempotência própria que não era gravada
|
|
8
|
+
* em lugar nenhum. Cron e rota manual usavam vias diferentes e não se
|
|
9
|
+
* enxergavam.
|
|
10
|
+
*
|
|
11
|
+
* O caminho de entrega agora é um só: `communication/`. O que restou aqui é o
|
|
12
|
+
* nome do canal que a política do escritório declara por etapa, que é dado de
|
|
13
|
+
* régua e não tem nada a ver com provider.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Canal declarado por etapa da régua.
|
|
17
|
+
*
|
|
18
|
+
* Subconjunto de `ChannelKey` do motor. `sms` ainda não aparece porque a régua
|
|
19
|
+
* não tem como declará-lo hoje — está registrado como dívida não bloqueante, e
|
|
20
|
+
* alargar o tipo sem alargar a validação da política gravaria passo que o motor
|
|
21
|
+
* aceita e a tela não sabe exibir.
|
|
22
|
+
*/
|
|
23
|
+
export type CollectionChannelKey = 'email' | 'whatsapp' | 'notification';
|
|
24
|
+
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/collection/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vocabulário de canal da régua de cobrança.
|
|
3
|
+
*
|
|
4
|
+
* **Só o vocabulário.** Este arquivo já carregou uma abstração de canal inteira
|
|
5
|
+
* — `CollectionChannel`, `CollectionMessage`, `resolveChannel` e um adapter de
|
|
6
|
+
* e-mail — e foi por ela que a cobrança tinha um SEGUNDO caminho de envio,
|
|
7
|
+
* paralelo ao motor compartilhado, com idempotência própria que não era gravada
|
|
8
|
+
* em lugar nenhum. Cron e rota manual usavam vias diferentes e não se
|
|
9
|
+
* enxergavam.
|
|
10
|
+
*
|
|
11
|
+
* O caminho de entrega agora é um só: `communication/`. O que restou aqui é o
|
|
12
|
+
* nome do canal que a política do escritório declara por etapa, que é dado de
|
|
13
|
+
* régua e não tem nada a ver com provider.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/collection/channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import type { RecipientClearanceStore } from '../communication/clearance.js';
|
|
3
|
+
/**
|
|
4
|
+
* Liberação lida da ficha do cliente.
|
|
5
|
+
*
|
|
6
|
+
* `recipientRef` é o id do cliente — a mesma referência que o consentimento e a
|
|
7
|
+
* idempotência usam. A liberação é do CLIENTE, não do canal: quem confere o
|
|
8
|
+
* cadastro confere a pessoa, e um escritório que liberou o e-mail e não o
|
|
9
|
+
* WhatsApp está descrevendo qual canal quer usar, não quem já foi conferido.
|
|
10
|
+
* Se um dia a distinção por canal for necessária, ela entra aqui sem mexer no
|
|
11
|
+
* motor.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createClientClearanceStore(tx: Tx): RecipientClearanceStore;
|
|
14
|
+
export interface ClearanceResult {
|
|
15
|
+
clientId: string;
|
|
16
|
+
cleared: boolean;
|
|
17
|
+
clearedAt: string | null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Libera (ou revoga) um cliente para comunicação externa.
|
|
21
|
+
*
|
|
22
|
+
* Revogar é possível e deliberado: um endereço que voltou errado precisa poder
|
|
23
|
+
* sair da régua sem que alguém tenha de apagar o e-mail do cadastro — apagar o
|
|
24
|
+
* dado para parar o envio destrói a informação de contato junto.
|
|
25
|
+
*/
|
|
26
|
+
export declare function setClientClearance(tx: Tx, input: {
|
|
27
|
+
clientId: string;
|
|
28
|
+
cleared: boolean;
|
|
29
|
+
actorId: string | null;
|
|
30
|
+
}): Promise<ClearanceResult>;
|
|
31
|
+
export interface ClearanceSummary {
|
|
32
|
+
total: number;
|
|
33
|
+
cleared: number;
|
|
34
|
+
pending: number;
|
|
35
|
+
/** Não liberados que TÊM e-mail — os que a régua alcançaria se fosse liberada. */
|
|
36
|
+
pendingWithEmail: number;
|
|
37
|
+
}
|
|
38
|
+
export declare function clearanceSummary(tx: Tx): Promise<ClearanceSummary>;
|
|
39
|
+
//# sourceMappingURL=clearance-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearance-store.d.ts","sourceRoot":"","sources":["../../src/collection/clearance-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,KAAK,EAAsB,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAEjG;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,EAAE,GAAG,uBAAuB,CAc1E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACpE,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBxE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Liberação lida da ficha do cliente.
|
|
3
|
+
*
|
|
4
|
+
* `recipientRef` é o id do cliente — a mesma referência que o consentimento e a
|
|
5
|
+
* idempotência usam. A liberação é do CLIENTE, não do canal: quem confere o
|
|
6
|
+
* cadastro confere a pessoa, e um escritório que liberou o e-mail e não o
|
|
7
|
+
* WhatsApp está descrevendo qual canal quer usar, não quem já foi conferido.
|
|
8
|
+
* Se um dia a distinção por canal for necessária, ela entra aqui sem mexer no
|
|
9
|
+
* motor.
|
|
10
|
+
*/
|
|
11
|
+
export function createClientClearanceStore(tx) {
|
|
12
|
+
return {
|
|
13
|
+
async find(recipientRef, _channel) {
|
|
14
|
+
const rows = await tx `
|
|
15
|
+
SELECT communication_cleared_at
|
|
16
|
+
FROM client
|
|
17
|
+
WHERE id = ${recipientRef} AND deleted_at IS NULL
|
|
18
|
+
`;
|
|
19
|
+
// Cliente inexistente ou apagado não é "liberado por omissão": é um
|
|
20
|
+
// destinatário que o sistema não conhece, e o motor deve pular.
|
|
21
|
+
const at = rows[0]?.communication_cleared_at ?? null;
|
|
22
|
+
return { cleared: at !== null, clearedAt: at?.toISOString() ?? null };
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Libera (ou revoga) um cliente para comunicação externa.
|
|
28
|
+
*
|
|
29
|
+
* Revogar é possível e deliberado: um endereço que voltou errado precisa poder
|
|
30
|
+
* sair da régua sem que alguém tenha de apagar o e-mail do cadastro — apagar o
|
|
31
|
+
* dado para parar o envio destrói a informação de contato junto.
|
|
32
|
+
*/
|
|
33
|
+
export async function setClientClearance(tx, input) {
|
|
34
|
+
const rows = await tx `
|
|
35
|
+
UPDATE client
|
|
36
|
+
SET communication_cleared_at = ${input.cleared ? new Date() : null},
|
|
37
|
+
communication_cleared_by = ${input.cleared ? input.actorId : null},
|
|
38
|
+
updated_at = now()
|
|
39
|
+
WHERE id = ${input.clientId} AND deleted_at IS NULL
|
|
40
|
+
RETURNING id, communication_cleared_at
|
|
41
|
+
`;
|
|
42
|
+
const row = rows[0];
|
|
43
|
+
if (!row)
|
|
44
|
+
throw new Error('Cliente não encontrado neste escritório.');
|
|
45
|
+
return {
|
|
46
|
+
clientId: row.id,
|
|
47
|
+
cleared: row.communication_cleared_at !== null,
|
|
48
|
+
clearedAt: row.communication_cleared_at?.toISOString() ?? null,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function clearanceSummary(tx) {
|
|
52
|
+
const [r] = await tx `
|
|
53
|
+
SELECT count(*)::int AS total,
|
|
54
|
+
count(*) FILTER (WHERE communication_cleared_at IS NOT NULL)::int AS cleared,
|
|
55
|
+
count(*) FILTER (WHERE communication_cleared_at IS NULL
|
|
56
|
+
AND email IS NOT NULL)::int AS pending_email
|
|
57
|
+
FROM client
|
|
58
|
+
WHERE deleted_at IS NULL AND status = 'active'
|
|
59
|
+
`;
|
|
60
|
+
const total = r?.total ?? 0;
|
|
61
|
+
const cleared = r?.cleared ?? 0;
|
|
62
|
+
return {
|
|
63
|
+
total,
|
|
64
|
+
cleared,
|
|
65
|
+
pending: total - cleared,
|
|
66
|
+
pendingWithEmail: r?.pending_email ?? 0,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=clearance-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clearance-store.js","sourceRoot":"","sources":["../../src/collection/clearance-store.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,EAAM;IAC/C,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,YAAoB,EAAE,QAAoB;YACnD,MAAM,IAAI,GAAG,MAAM,EAAE,CAA6C;;;sBAGlD,YAAY;OAC3B,CAAC;YACF,oEAAoE;YACpE,gEAAgE;YAChE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,wBAAwB,IAAI,IAAI,CAAC;YACrD,OAAO,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;QACxE,CAAC;KACF,CAAC;AACJ,CAAC;AAQD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAM,EACN,KAAqE;IAErE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAyD;;wCAExC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;wCACjC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;;kBAE1D,KAAK,CAAC,QAAQ;;GAE7B,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACtE,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,EAAE;QAChB,OAAO,EAAE,GAAG,CAAC,wBAAwB,KAAK,IAAI;QAC9C,SAAS,EAAE,GAAG,CAAC,wBAAwB,EAAE,WAAW,EAAE,IAAI,IAAI;KAC/D,CAAC;AACJ,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAM;IAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAA6D;;;;;;;GAOhF,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC;IAChC,OAAO;QACL,KAAK;QACL,OAAO;QACP,OAAO,EAAE,KAAK,GAAG,OAAO;QACxB,gBAAgB,EAAE,CAAC,EAAE,aAAa,IAAI,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A régua da SC como CONSUMIDORA do motor compartilhado.
|
|
3
|
+
*
|
|
4
|
+
* Esta é a fronteira do adendo §14, e ela cai deste lado: tudo aqui é regra da
|
|
5
|
+
* SC — quais eventos existem, quais variáveis a cobrança expõe, como o texto do
|
|
6
|
+
* escritório vira conteúdo de cada canal. Nada disto entra em
|
|
7
|
+
* `communication/`, porque no dia em que a Dental for o segundo consumidor o
|
|
8
|
+
* motor não pode ter aprendido contabilidade.
|
|
9
|
+
*
|
|
10
|
+
* O caminho inverso também vale: nenhuma linha deste arquivo sabe o que é Meta,
|
|
11
|
+
* Resend ou Twilio.
|
|
12
|
+
*/
|
|
13
|
+
import { type ChannelKey, type CommunicationContext, type MessageContent } from '../communication/index.js';
|
|
14
|
+
import type { TenantBranding } from './branding.js';
|
|
15
|
+
import type { EmailBlock } from './email-layout.js';
|
|
16
|
+
/** Slug do produto no ecossistema. Estável — entra em toda chave de idempotência. */
|
|
17
|
+
export declare const SC_PRODUCT = "sc-organizacao-contabil";
|
|
18
|
+
/**
|
|
19
|
+
* Evento de negócio a partir da etapa da régua.
|
|
20
|
+
*
|
|
21
|
+
* Deriva de `stepKey` (`D-3`, `D0`, `D+7`), que é o identificador que o tenant
|
|
22
|
+
* configura e que já garante a idempotência do agendamento. Assim o vocabulário
|
|
23
|
+
* de evento acompanha a régua do escritório em vez de ser uma segunda lista que
|
|
24
|
+
* alguém precisa lembrar de atualizar junto.
|
|
25
|
+
*/
|
|
26
|
+
export declare function collectionEventType(stepKey: string): string;
|
|
27
|
+
/** Contexto da SC para um tenant. A marca é a do próprio escritório. */
|
|
28
|
+
export declare function collectionContext(tenantId: string, brand: string): CommunicationContext;
|
|
29
|
+
export interface CollectionVariablesInput {
|
|
30
|
+
clientName: string;
|
|
31
|
+
officeName: string;
|
|
32
|
+
outstandingAmount: number;
|
|
33
|
+
dueDate: string | null;
|
|
34
|
+
reference: string | null;
|
|
35
|
+
paymentUrl?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Variáveis expostas à camada de template, por NOME.
|
|
39
|
+
*
|
|
40
|
+
* O motor as reordena conforme o template declara — a ordem posicional que o
|
|
41
|
+
* WhatsApp exige é resolvida lá, não aqui. Amarrar a ordem neste ponto faria
|
|
42
|
+
* cada template novo do escritório exigir mudança de código.
|
|
43
|
+
*/
|
|
44
|
+
export declare function collectionVariables(input: CollectionVariablesInput): Record<string, string>;
|
|
45
|
+
export interface ContentBuilderInput {
|
|
46
|
+
branding: TenantBranding;
|
|
47
|
+
/** Conteúdo estruturado já produzido por `renderCopy`. */
|
|
48
|
+
subject: string;
|
|
49
|
+
block: EmailBlock;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Constrói o conteúdo do canal escolhido — **depois** de o canal ser escolhido.
|
|
53
|
+
*
|
|
54
|
+
* É aqui que o gap G1 da auditoria se fecha. A abstração anterior
|
|
55
|
+
* (`collection/channel.ts`) exigia `subject` + `html` no payload: um adapter de
|
|
56
|
+
* WhatsApp receberia HTML renderizado e teria de desmontá-lo em texto. Agora o
|
|
57
|
+
* e-mail é renderizado só quando o canal é e-mail, e o WhatsApp recebe o que o
|
|
58
|
+
* WhatsApp aceita — template aprovado com variáveis posicionais.
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildCollectionContent(input: ContentBuilderInput): (channel: ChannelKey, template: {
|
|
61
|
+
providerTemplateName?: string;
|
|
62
|
+
body?: string;
|
|
63
|
+
subject?: string;
|
|
64
|
+
locale: string;
|
|
65
|
+
}, ordered: string[], variables: Record<string, string>) => MessageContent | null;
|
|
66
|
+
//# sourceMappingURL=communication-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-bridge.d.ts","sourceRoot":"","sources":["../../src/collection/communication-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACpB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,qFAAqF;AACrF,eAAO,MAAM,UAAU,4BAA4B,CAAC;AAEpD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ3D;AAED,wEAAwE;AACxE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB,CAEvF;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAa3F;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,CAAC;IACzB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,mBAAmB,GACzB,CACD,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE;IAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAC5F,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,cAAc,GAAG,IAAI,CAkCzB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A régua da SC como CONSUMIDORA do motor compartilhado.
|
|
3
|
+
*
|
|
4
|
+
* Esta é a fronteira do adendo §14, e ela cai deste lado: tudo aqui é regra da
|
|
5
|
+
* SC — quais eventos existem, quais variáveis a cobrança expõe, como o texto do
|
|
6
|
+
* escritório vira conteúdo de cada canal. Nada disto entra em
|
|
7
|
+
* `communication/`, porque no dia em que a Dental for o segundo consumidor o
|
|
8
|
+
* motor não pode ter aprendido contabilidade.
|
|
9
|
+
*
|
|
10
|
+
* O caminho inverso também vale: nenhuma linha deste arquivo sabe o que é Meta,
|
|
11
|
+
* Resend ou Twilio.
|
|
12
|
+
*/
|
|
13
|
+
import {} from '../communication/index.js';
|
|
14
|
+
import { renderCollectionEmail, renderCollectionText } from './email-layout.js';
|
|
15
|
+
import { formatBRL, formatDateBR } from './format.js';
|
|
16
|
+
/** Slug do produto no ecossistema. Estável — entra em toda chave de idempotência. */
|
|
17
|
+
export const SC_PRODUCT = 'sc-organizacao-contabil';
|
|
18
|
+
/**
|
|
19
|
+
* Evento de negócio a partir da etapa da régua.
|
|
20
|
+
*
|
|
21
|
+
* Deriva de `stepKey` (`D-3`, `D0`, `D+7`), que é o identificador que o tenant
|
|
22
|
+
* configura e que já garante a idempotência do agendamento. Assim o vocabulário
|
|
23
|
+
* de evento acompanha a régua do escritório em vez de ser uma segunda lista que
|
|
24
|
+
* alguém precisa lembrar de atualizar junto.
|
|
25
|
+
*/
|
|
26
|
+
export function collectionEventType(stepKey) {
|
|
27
|
+
const slug = stepKey
|
|
28
|
+
.toLowerCase()
|
|
29
|
+
.replace(/\+/g, 'plus')
|
|
30
|
+
.replace(/-/g, 'minus')
|
|
31
|
+
.replace(/[^a-z0-9]+/g, '_')
|
|
32
|
+
.replace(/^_+|_+$/g, '');
|
|
33
|
+
return `billing.dunning.${slug || 'step'}`;
|
|
34
|
+
}
|
|
35
|
+
/** Contexto da SC para um tenant. A marca é a do próprio escritório. */
|
|
36
|
+
export function collectionContext(tenantId, brand) {
|
|
37
|
+
return { tenantId, product: SC_PRODUCT, brand };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Variáveis expostas à camada de template, por NOME.
|
|
41
|
+
*
|
|
42
|
+
* O motor as reordena conforme o template declara — a ordem posicional que o
|
|
43
|
+
* WhatsApp exige é resolvida lá, não aqui. Amarrar a ordem neste ponto faria
|
|
44
|
+
* cada template novo do escritório exigir mudança de código.
|
|
45
|
+
*/
|
|
46
|
+
export function collectionVariables(input) {
|
|
47
|
+
const vars = {
|
|
48
|
+
clientName: input.clientName,
|
|
49
|
+
officeName: input.officeName,
|
|
50
|
+
amount: formatBRL(input.outstandingAmount),
|
|
51
|
+
dueDate: formatDateBR(input.dueDate),
|
|
52
|
+
reference: input.reference ?? '',
|
|
53
|
+
};
|
|
54
|
+
// Só entra quando existe. Uma variável vazia num template de WhatsApp faz a
|
|
55
|
+
// Meta recusar a mensagem inteira — melhor o template não pedir o campo do que
|
|
56
|
+
// o campo chegar em branco.
|
|
57
|
+
if (input.paymentUrl)
|
|
58
|
+
vars.paymentUrl = input.paymentUrl;
|
|
59
|
+
return vars;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Constrói o conteúdo do canal escolhido — **depois** de o canal ser escolhido.
|
|
63
|
+
*
|
|
64
|
+
* É aqui que o gap G1 da auditoria se fecha. A abstração anterior
|
|
65
|
+
* (`collection/channel.ts`) exigia `subject` + `html` no payload: um adapter de
|
|
66
|
+
* WhatsApp receberia HTML renderizado e teria de desmontá-lo em texto. Agora o
|
|
67
|
+
* e-mail é renderizado só quando o canal é e-mail, e o WhatsApp recebe o que o
|
|
68
|
+
* WhatsApp aceita — template aprovado com variáveis posicionais.
|
|
69
|
+
*/
|
|
70
|
+
export function buildCollectionContent(input) {
|
|
71
|
+
return (channel, template, ordered, variables) => {
|
|
72
|
+
if (channel === 'email') {
|
|
73
|
+
return {
|
|
74
|
+
kind: 'email',
|
|
75
|
+
subject: template.subject ?? input.subject,
|
|
76
|
+
html: renderCollectionEmail(input.branding, input.block),
|
|
77
|
+
text: renderCollectionText(input.branding, input.block),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
if (channel === 'whatsapp') {
|
|
81
|
+
// Sem template registrado no provider não há envio ativo possível: fora da
|
|
82
|
+
// janela de 24h o WhatsApp só aceita template aprovado. Devolver texto
|
|
83
|
+
// livre aqui produziria uma recusa do provider que pareceria falha do
|
|
84
|
+
// destinatário.
|
|
85
|
+
if (!template.providerTemplateName)
|
|
86
|
+
return null;
|
|
87
|
+
return {
|
|
88
|
+
kind: 'whatsapp_template',
|
|
89
|
+
templateName: template.providerTemplateName,
|
|
90
|
+
language: template.locale,
|
|
91
|
+
variables: ordered,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (channel === 'sms' || channel === 'notification') {
|
|
95
|
+
const body = template.body
|
|
96
|
+
? renderPlain(template.body, variables)
|
|
97
|
+
: plainFromBlock(input.block);
|
|
98
|
+
return { kind: 'text', body };
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Substituição por ALLOWLIST das variáveis fornecidas — `{{x}}` só resolve se
|
|
105
|
+
* `x` existir. Qualquer outra coisa fica literal e visível.
|
|
106
|
+
*
|
|
107
|
+
* Mesma regra do `template.ts` da cobrança, e pela mesma razão: o texto vem de
|
|
108
|
+
* configuração de tenant, e interpolação livre sobre dado editável pelo usuário
|
|
109
|
+
* é execução arbitrária. Falha à vista é melhor que falha silenciosa.
|
|
110
|
+
*/
|
|
111
|
+
function renderPlain(text, vars) {
|
|
112
|
+
return text.replace(/\{\{\s*([a-zA-Z][a-zA-Z0-9]*)\s*\}\}/g, (whole, name) => Object.prototype.hasOwnProperty.call(vars, name) ? vars[name] : whole);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Texto curto a partir do conteúdo estruturado, quando o tenant não configurou
|
|
116
|
+
* corpo próprio.
|
|
117
|
+
*
|
|
118
|
+
* Deliberadamente enxuto: em SMS cada segmento é cobrado, e o corpo de um e-mail
|
|
119
|
+
* de cobrança inteiro custaria cinco. Leva a saudação, o essencial do valor e o
|
|
120
|
+
* link de pagamento quando existe — que é o que faz o cliente agir.
|
|
121
|
+
*/
|
|
122
|
+
function plainFromBlock(block) {
|
|
123
|
+
const parts = [block.greeting];
|
|
124
|
+
if (block.highlight) {
|
|
125
|
+
parts.push(`${block.highlight.label}: ${block.highlight.amount} (${block.highlight.dueValue}).`);
|
|
126
|
+
}
|
|
127
|
+
else if (block.paragraphs[0]) {
|
|
128
|
+
parts.push(block.paragraphs[0]);
|
|
129
|
+
}
|
|
130
|
+
if (block.payment?.url)
|
|
131
|
+
parts.push(block.payment.url);
|
|
132
|
+
return parts.join(' ');
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=communication-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-bridge.js","sourceRoot":"","sources":["../../src/collection/communication-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Montagem ÚNICA do consumo do motor compartilhado pela cobrança da SC.
|
|
3
|
+
*
|
|
4
|
+
* Este arquivo existe por causa de um defeito de arquitetura, não de código: até
|
|
5
|
+
* aqui havia dois caminhos capazes de mandar mensagem ao cliente.
|
|
6
|
+
*
|
|
7
|
+
* `collection-cron.ts` montava o motor compartilhado — mas SÓ quando o
|
|
8
|
+
* escritório tinha conta de WhatsApp ou SMS. Sem
|
|
9
|
+
* elas, caía no adapter legado.
|
|
10
|
+
* `routes/collections.ts` montava o adapter legado SEMPRE. A rota manual
|
|
11
|
+
* nunca passou pelo motor compartilhado.
|
|
12
|
+
*
|
|
13
|
+
* Dois caminhos com duas idempotências diferentes: o legado usava
|
|
14
|
+
* `receivableId:stepKey` e não gravava nada, o compartilhado usava a chave
|
|
15
|
+
* composta pelo motor. Um cron e um clique no botão "rodar agora", no mesmo
|
|
16
|
+
* minuto, não se enxergavam — e a proteção de cada um era invisível para o
|
|
17
|
+
* outro. É o `LEGACY_SHARED_COEXISTENCE=BLOCKING` do certificador.
|
|
18
|
+
*
|
|
19
|
+
* A correção é ter UM lugar que monta o consumo, e ambos chamarem este. Não é
|
|
20
|
+
* organização de código: é o que faz "existe uma única autoridade de envio" ser
|
|
21
|
+
* uma propriedade verificável em vez de uma intenção.
|
|
22
|
+
*/
|
|
23
|
+
import type { Db, Tx } from '../db/client.js';
|
|
24
|
+
import { type ChannelKey, type SmsTransport } from '../communication/index.js';
|
|
25
|
+
import type { TenantBranding } from './branding.js';
|
|
26
|
+
import { SC_PRODUCT } from './communication-bridge.js';
|
|
27
|
+
import type { CollectionCommunication } from './engine.js';
|
|
28
|
+
/**
|
|
29
|
+
* Slug estável da marca do escritório, para o contexto do motor.
|
|
30
|
+
*
|
|
31
|
+
* Vive aqui, e não no cron, porque entra na chave de idempotência: duas
|
|
32
|
+
* derivações do mesmo nome produziriam duas chaves para o mesmo aviso, e a
|
|
33
|
+
* proteção contra envio duplo evaporaria entre o cron e a rota manual sem que
|
|
34
|
+
* nada parecesse errado.
|
|
35
|
+
*/
|
|
36
|
+
export declare function brandKeyFor(branding: TenantBranding): string;
|
|
37
|
+
/**
|
|
38
|
+
* Nome canônico da credencial de e-mail no cofre do escritório.
|
|
39
|
+
*
|
|
40
|
+
* Um nome só, igual para todos os tenants — o que muda é DE QUEM é o cofre. Um
|
|
41
|
+
* nome por tenant faria a resolução depender de convenção, e convenção é o que
|
|
42
|
+
* ninguém confere no dia do incidente.
|
|
43
|
+
*/
|
|
44
|
+
export declare const TENANT_EMAIL_CREDENTIAL_NAME = "resend-api-key";
|
|
45
|
+
/**
|
|
46
|
+
* Referência de credencial de e-mail: cofre do tenant quando existe, plataforma
|
|
47
|
+
* quando não.
|
|
48
|
+
*
|
|
49
|
+
* ## O problema que isto resolve (P0-C)
|
|
50
|
+
*
|
|
51
|
+
* Nenhum escritório tinha conta de e-mail própria configurada, então todos
|
|
52
|
+
* caíam no fallback de plataforma — cujo `credentialRef` é o nome de uma
|
|
53
|
+
* variável de ambiente do processo. Dois escritórios mandavam pela MESMA conta
|
|
54
|
+
* do provedor: bloqueio e reputação atingem os dois juntos, e o histórico de
|
|
55
|
+
* envio no provedor mistura clientes de escritórios diferentes.
|
|
56
|
+
*
|
|
57
|
+
* Não era vazamento de segredo — o cofre sempre foi isolado por RLS, e nenhum
|
|
58
|
+
* tenant lê a credencial do outro. Era ausência de isolamento de CONTA.
|
|
59
|
+
*
|
|
60
|
+
* ## Por que ler o cofre aqui, e não exigir configuração
|
|
61
|
+
*
|
|
62
|
+
* A SC já tem `resend-api-key` no cofre desde a rotação de agosto; o caminho de
|
|
63
|
+
* e-mail é que não a consumia. Preferir o cofre quando ele existe corrige a SC
|
|
64
|
+
* hoje, sem pedir nada a ninguém, e faz todo tenant novo nascer isolado assim
|
|
65
|
+
* que grava a própria chave.
|
|
66
|
+
*
|
|
67
|
+
* Só o NOME é consultado — `reveal` não é chamado aqui. O segredo continua
|
|
68
|
+
* sendo materializado uma única vez, na borda do adapter.
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolveTenantEmailCredentialRef(tx: Tx, platformRef: string): Promise<{
|
|
71
|
+
ref: string;
|
|
72
|
+
origin: 'tenant-vault' | 'platform-fallback';
|
|
73
|
+
}>;
|
|
74
|
+
export interface CollectionCommunicationOptions {
|
|
75
|
+
/**
|
|
76
|
+
* Pool. Usado SÓ pela reserva de envio, que precisa de transação própria e
|
|
77
|
+
* curta para ficar visível a outros workers antes do fim do ciclo.
|
|
78
|
+
*/
|
|
79
|
+
db: Db;
|
|
80
|
+
/** Transação do ciclo. Templates, consentimento e trilha vivem nela. */
|
|
81
|
+
tx: Tx;
|
|
82
|
+
tenantId: string;
|
|
83
|
+
branding: TenantBranding;
|
|
84
|
+
/**
|
|
85
|
+
* Remetente de e-mail da plataforma — o fallback governado.
|
|
86
|
+
*
|
|
87
|
+
* Explícito no chamador de propósito: enquanto era `process.env.RESEND_*` lido
|
|
88
|
+
* lá dentro, o fallback global era invisível para quem lia a montagem.
|
|
89
|
+
*/
|
|
90
|
+
platformEmail: {
|
|
91
|
+
senderId: string;
|
|
92
|
+
credentialRef: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Traduz referência lógica de credencial em segredo. O valor nunca volta ao
|
|
96
|
+
* domínio; morre dentro do adapter.
|
|
97
|
+
*/
|
|
98
|
+
resolveCredential: (ref: string) => Promise<string | undefined>;
|
|
99
|
+
/**
|
|
100
|
+
* Trava de envio real de WhatsApp. **Desligada por omissão** e ligada só por
|
|
101
|
+
* ato humano com autorização. Ver `adapters/whatsapp.ts`.
|
|
102
|
+
*/
|
|
103
|
+
whatsappLiveSend?: boolean;
|
|
104
|
+
/** Transporte de SMS. Ausente = canal não registrado, que é a verdade hoje. */
|
|
105
|
+
smsTransport?: SmsTransport;
|
|
106
|
+
/** Percorre tudo e relata, sem chamar adapter nenhum e sem reservar chave. */
|
|
107
|
+
dryRun?: boolean;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Monta o consumo do motor para UM tenant.
|
|
111
|
+
*
|
|
112
|
+
* Devolve sempre — nunca `undefined`. O desenho anterior devolvia `undefined`
|
|
113
|
+
* quando não havia canal de telefone configurado, e era isso que empurrava o
|
|
114
|
+
* e-mail de volta para o caminho legado. O e-mail é UM canal entre outros; se
|
|
115
|
+
* ele fosse o caso especial, todo canal novo teria de imitá-lo.
|
|
116
|
+
*/
|
|
117
|
+
export declare function buildCollectionCommunication(options: CollectionCommunicationOptions): Promise<CollectionCommunication>;
|
|
118
|
+
/**
|
|
119
|
+
* Referência lógica → segredo, a partir do ambiente do processo.
|
|
120
|
+
*
|
|
121
|
+
* O que o tenant configura é o NOME (`RESEND_API_KEY`, `vault://.../whatsapp`);
|
|
122
|
+
* o valor vem daqui e não atravessa o domínio. A allowlist por FORMA do nome
|
|
123
|
+
* (maiúsculas, dígitos e `_`) impede que um `credentialRef` colado no jsonb de
|
|
124
|
+
* configuração de tenant leia qualquer coisa do ambiente do processo — o jsonb é
|
|
125
|
+
* editável por quem administra o escritório, e `PATH` ou `DATABASE_URL` também
|
|
126
|
+
* são variáveis de ambiente.
|
|
127
|
+
*/
|
|
128
|
+
export declare function environmentCredentialResolver(): (ref: string) => Promise<string | undefined>;
|
|
129
|
+
/** Canais que este produto sabe operar. Consultado por tela e por teste. */
|
|
130
|
+
export declare const SC_SUPPORTED_CHANNELS: readonly ChannelKey[];
|
|
131
|
+
export { SC_PRODUCT };
|
|
132
|
+
//# sourceMappingURL=communication-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"communication-runtime.d.ts","sourceRoot":"","sources":["../../src/collection/communication-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,EAWL,KAAK,UAAU,EAEf,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAqB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAG1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAY5D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,mBAAmB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,+BAA+B,CACnD,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,mBAAmB,CAAA;CAAE,CAAC,CAcxE;AAED,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,EAAE,EAAE,EAAE,CAAC;IACP,wEAAwE;IACxE,EAAE,EAAE,EAAE,CAAC;IACP,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB;;;;;OAKG;IACH,aAAa,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D;;;OAGG;IACH,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChE;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,uBAAuB,CAAC,CAoHlC;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,IAAI,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAoB5F;AAED,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,EAAE,SAAS,UAAU,EAAiC,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,CAAC"}
|