@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,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telefone brasileiro em formato canônico.
|
|
3
|
+
*
|
|
4
|
+
* Existe UMA vez, e não uma por canal, porque WhatsApp e SMS discordariam no
|
|
5
|
+
* primeiro caso de borda — e discordar aqui significa uma mensagem chegar e a
|
|
6
|
+
* outra não, para o mesmo cliente, sem que nada no sistema explique por quê.
|
|
7
|
+
*
|
|
8
|
+
* O que este módulo NÃO faz: dizer se o número existe, se está ativo, ou se tem
|
|
9
|
+
* WhatsApp. Nada disso é derivável do formato. Ele responde uma pergunta só —
|
|
10
|
+
* "isto tem a FORMA de um número brasileiro discável?" — e a resposta negativa
|
|
11
|
+
* é confiável, enquanto a positiva é apenas necessária, nunca suficiente.
|
|
12
|
+
*/
|
|
13
|
+
/** Como o provider quer receber: `+55DDNNNNNNNNN`, sem separador. */
|
|
14
|
+
export type E164 = string;
|
|
15
|
+
export type PhoneKind = 'mobile' | 'landline';
|
|
16
|
+
export type PhoneRejection =
|
|
17
|
+
/** Vazio ou só separadores. */
|
|
18
|
+
'empty'
|
|
19
|
+
/** Dígitos de menos ou de mais para qualquer formato brasileiro. */
|
|
20
|
+
| 'length'
|
|
21
|
+
/** DDD que não existe no plano de numeração. */
|
|
22
|
+
| 'ddd'
|
|
23
|
+
/** DDI presente e diferente de 55 — fora do escopo desta normalização. */
|
|
24
|
+
| 'foreign'
|
|
25
|
+
/** Nono dígito ausente ou inicial inválida para celular. */
|
|
26
|
+
| 'not_dialable';
|
|
27
|
+
export type PhoneParse = {
|
|
28
|
+
ok: true;
|
|
29
|
+
e164: E164;
|
|
30
|
+
kind: PhoneKind;
|
|
31
|
+
areaCode: string;
|
|
32
|
+
national: string;
|
|
33
|
+
} | {
|
|
34
|
+
ok: false;
|
|
35
|
+
reason: PhoneRejection;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Normaliza um telefone digitado por gente.
|
|
39
|
+
*
|
|
40
|
+
* Aceita o que o operador realmente digita: `(62) 99999-8888`, `62999998888`,
|
|
41
|
+
* `+55 62 99999 8888`, `55 62 9999-8888`, com espaço, ponto, barra ou traço.
|
|
42
|
+
*
|
|
43
|
+
* A ambiguidade real é o `55`: ele é DDI (Brasil) e também DDD (Rio Grande do
|
|
44
|
+
* Sul). `5551999998888` tem 13 dígitos e é `+55 51 99999-8888`; `5599998888`
|
|
45
|
+
* tem 10 e é `(55) 9999-8888`, um fixo gaúcho. O tamanho resolve — e é por isso
|
|
46
|
+
* que a decisão é tomada pelo COMPRIMENTO antes de olhar o prefixo, nunca ao
|
|
47
|
+
* contrário.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseBrazilPhone(raw: string | null | undefined): PhoneParse;
|
|
50
|
+
/**
|
|
51
|
+
* O número serve para WhatsApp/SMS?
|
|
52
|
+
*
|
|
53
|
+
* Só celular. Fixo é discável e válido — e é exatamente por isso que precisa de
|
|
54
|
+
* uma checagem própria: ele passa em `parseBrazilPhone`, o provider aceita a
|
|
55
|
+
* requisição, e a mensagem nunca chega. Um "erro" que não aparece em lugar
|
|
56
|
+
* nenhum, mês após mês.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isMessagingCapable(parsed: PhoneParse): boolean;
|
|
59
|
+
/** Conveniência para gravar em `client.phone_e164`. `null` quando não dá. */
|
|
60
|
+
export declare function toE164OrNull(raw: string | null | undefined): E164 | null;
|
|
61
|
+
/**
|
|
62
|
+
* Versão para log e tela: `+55 (62) 9****-**88`.
|
|
63
|
+
*
|
|
64
|
+
* A trilha precisa provar PARA ONDE foi, e um telefone inteiro em log é PII que
|
|
65
|
+
* vaza em screenshot, exportação e print de suporte. Os quatro caracteres
|
|
66
|
+
* visíveis bastam para o operador reconhecer o número que ele mesmo cadastrou,
|
|
67
|
+
* e não bastam para discar.
|
|
68
|
+
*/
|
|
69
|
+
export declare function maskPhone(e164: string): string;
|
|
70
|
+
//# sourceMappingURL=phone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.d.ts","sourceRoot":"","sources":["../../src/contacts/phone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qEAAqE;AACrE,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAE1B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE9C,MAAM,MAAM,cAAc;AACxB,+BAA+B;AAC7B,OAAO;AACT,oEAAoE;GAClE,QAAQ;AACV,gDAAgD;GAC9C,KAAK;AACP,0EAA0E;GACxE,SAAS;AACX,4DAA4D;GAC1D,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAClB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAiF1C;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAiD3E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAE9D;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAGxE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telefone brasileiro em formato canônico.
|
|
3
|
+
*
|
|
4
|
+
* Existe UMA vez, e não uma por canal, porque WhatsApp e SMS discordariam no
|
|
5
|
+
* primeiro caso de borda — e discordar aqui significa uma mensagem chegar e a
|
|
6
|
+
* outra não, para o mesmo cliente, sem que nada no sistema explique por quê.
|
|
7
|
+
*
|
|
8
|
+
* O que este módulo NÃO faz: dizer se o número existe, se está ativo, ou se tem
|
|
9
|
+
* WhatsApp. Nada disso é derivável do formato. Ele responde uma pergunta só —
|
|
10
|
+
* "isto tem a FORMA de um número brasileiro discável?" — e a resposta negativa
|
|
11
|
+
* é confiável, enquanto a positiva é apenas necessária, nunca suficiente.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* DDDs válidos no Plano Nacional de Numeração.
|
|
15
|
+
*
|
|
16
|
+
* Lista explícita, e não `[1-9][1-9]`, porque a faixa admite combinações que não
|
|
17
|
+
* existem (20, 23, 25, 26, 29, 30, 36, 39, 40, 50, 52, 56, 57, 58, 59, 60, 70,
|
|
18
|
+
* 72, 76, 78, 80, 90). Aceitar um DDD inexistente produz um E.164 bem formado
|
|
19
|
+
* que o provider aceita, cobra e nunca entrega — a pior combinação possível,
|
|
20
|
+
* porque falha silenciosa custa dinheiro e parece sucesso.
|
|
21
|
+
*/
|
|
22
|
+
const VALID_AREA_CODES = new Set([
|
|
23
|
+
'11',
|
|
24
|
+
'12',
|
|
25
|
+
'13',
|
|
26
|
+
'14',
|
|
27
|
+
'15',
|
|
28
|
+
'16',
|
|
29
|
+
'17',
|
|
30
|
+
'18',
|
|
31
|
+
'19',
|
|
32
|
+
'21',
|
|
33
|
+
'22',
|
|
34
|
+
'24',
|
|
35
|
+
'27',
|
|
36
|
+
'28',
|
|
37
|
+
'31',
|
|
38
|
+
'32',
|
|
39
|
+
'33',
|
|
40
|
+
'34',
|
|
41
|
+
'35',
|
|
42
|
+
'37',
|
|
43
|
+
'38',
|
|
44
|
+
'41',
|
|
45
|
+
'42',
|
|
46
|
+
'43',
|
|
47
|
+
'44',
|
|
48
|
+
'45',
|
|
49
|
+
'46',
|
|
50
|
+
'47',
|
|
51
|
+
'48',
|
|
52
|
+
'49',
|
|
53
|
+
'51',
|
|
54
|
+
'53',
|
|
55
|
+
'54',
|
|
56
|
+
'55',
|
|
57
|
+
'61',
|
|
58
|
+
'62',
|
|
59
|
+
'63',
|
|
60
|
+
'64',
|
|
61
|
+
'65',
|
|
62
|
+
'66',
|
|
63
|
+
'67',
|
|
64
|
+
'68',
|
|
65
|
+
'69',
|
|
66
|
+
'71',
|
|
67
|
+
'73',
|
|
68
|
+
'74',
|
|
69
|
+
'75',
|
|
70
|
+
'77',
|
|
71
|
+
'79',
|
|
72
|
+
'81',
|
|
73
|
+
'82',
|
|
74
|
+
'83',
|
|
75
|
+
'84',
|
|
76
|
+
'85',
|
|
77
|
+
'86',
|
|
78
|
+
'87',
|
|
79
|
+
'88',
|
|
80
|
+
'89',
|
|
81
|
+
'91',
|
|
82
|
+
'92',
|
|
83
|
+
'93',
|
|
84
|
+
'94',
|
|
85
|
+
'95',
|
|
86
|
+
'96',
|
|
87
|
+
'97',
|
|
88
|
+
'98',
|
|
89
|
+
'99',
|
|
90
|
+
]);
|
|
91
|
+
/**
|
|
92
|
+
* Normaliza um telefone digitado por gente.
|
|
93
|
+
*
|
|
94
|
+
* Aceita o que o operador realmente digita: `(62) 99999-8888`, `62999998888`,
|
|
95
|
+
* `+55 62 99999 8888`, `55 62 9999-8888`, com espaço, ponto, barra ou traço.
|
|
96
|
+
*
|
|
97
|
+
* A ambiguidade real é o `55`: ele é DDI (Brasil) e também DDD (Rio Grande do
|
|
98
|
+
* Sul). `5551999998888` tem 13 dígitos e é `+55 51 99999-8888`; `5599998888`
|
|
99
|
+
* tem 10 e é `(55) 9999-8888`, um fixo gaúcho. O tamanho resolve — e é por isso
|
|
100
|
+
* que a decisão é tomada pelo COMPRIMENTO antes de olhar o prefixo, nunca ao
|
|
101
|
+
* contrário.
|
|
102
|
+
*/
|
|
103
|
+
export function parseBrazilPhone(raw) {
|
|
104
|
+
if (!raw)
|
|
105
|
+
return { ok: false, reason: 'empty' };
|
|
106
|
+
// Um `+` em qualquer posição só importa no começo; o resto é ruído de
|
|
107
|
+
// digitação. Guardamos a intenção de DDI antes de descartar tudo que não é
|
|
108
|
+
// dígito, porque depois disso `+55…` e `55…` seriam indistinguíveis.
|
|
109
|
+
const trimmed = raw.trim();
|
|
110
|
+
const hadPlus = trimmed.startsWith('+');
|
|
111
|
+
const digits = trimmed.replace(/\D/g, '');
|
|
112
|
+
if (!digits)
|
|
113
|
+
return { ok: false, reason: 'empty' };
|
|
114
|
+
// Com `+` explícito, o DDI é o que veio. `+1` não é problema nosso: recusar é
|
|
115
|
+
// honesto, adivinhar seria inventar um número.
|
|
116
|
+
if (hadPlus && !digits.startsWith('55'))
|
|
117
|
+
return { ok: false, reason: 'foreign' };
|
|
118
|
+
let national;
|
|
119
|
+
if (digits.length === 12 || digits.length === 13) {
|
|
120
|
+
// DDI + DDD + 8 ou 9 dígitos.
|
|
121
|
+
if (!digits.startsWith('55'))
|
|
122
|
+
return { ok: false, reason: 'foreign' };
|
|
123
|
+
national = digits.slice(2);
|
|
124
|
+
}
|
|
125
|
+
else if (digits.length === 10 || digits.length === 11) {
|
|
126
|
+
// DDD + 8 ou 9 dígitos, sem DDI.
|
|
127
|
+
national = digits;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
return { ok: false, reason: 'length' };
|
|
131
|
+
}
|
|
132
|
+
const areaCode = national.slice(0, 2);
|
|
133
|
+
if (!VALID_AREA_CODES.has(areaCode))
|
|
134
|
+
return { ok: false, reason: 'ddd' };
|
|
135
|
+
const subscriber = national.slice(2);
|
|
136
|
+
if (subscriber.length === 9) {
|
|
137
|
+
// Celular: nono dígito é sempre 9, e o dígito seguinte nunca é 0 nem 1.
|
|
138
|
+
if (subscriber[0] !== '9')
|
|
139
|
+
return { ok: false, reason: 'not_dialable' };
|
|
140
|
+
if (subscriber[1] === '0' || subscriber[1] === '1') {
|
|
141
|
+
return { ok: false, reason: 'not_dialable' };
|
|
142
|
+
}
|
|
143
|
+
return { ok: true, e164: `+55${national}`, kind: 'mobile', areaCode, national };
|
|
144
|
+
}
|
|
145
|
+
// Oito dígitos: fixo. Celular de 8 dígitos não existe mais desde a
|
|
146
|
+
// implantação do nono dígito, e RECUSAR é melhor do que completar com um `9`
|
|
147
|
+
// — completar significa mandar mensagem para um número que o escritório nunca
|
|
148
|
+
// digitou, e que pode pertencer a outra pessoa.
|
|
149
|
+
const first = subscriber[0];
|
|
150
|
+
if (first === '0' || first === '1')
|
|
151
|
+
return { ok: false, reason: 'not_dialable' };
|
|
152
|
+
return { ok: true, e164: `+55${national}`, kind: 'landline', areaCode, national };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* O número serve para WhatsApp/SMS?
|
|
156
|
+
*
|
|
157
|
+
* Só celular. Fixo é discável e válido — e é exatamente por isso que precisa de
|
|
158
|
+
* uma checagem própria: ele passa em `parseBrazilPhone`, o provider aceita a
|
|
159
|
+
* requisição, e a mensagem nunca chega. Um "erro" que não aparece em lugar
|
|
160
|
+
* nenhum, mês após mês.
|
|
161
|
+
*/
|
|
162
|
+
export function isMessagingCapable(parsed) {
|
|
163
|
+
return parsed.ok && parsed.kind === 'mobile';
|
|
164
|
+
}
|
|
165
|
+
/** Conveniência para gravar em `client.phone_e164`. `null` quando não dá. */
|
|
166
|
+
export function toE164OrNull(raw) {
|
|
167
|
+
const parsed = parseBrazilPhone(raw);
|
|
168
|
+
return parsed.ok ? parsed.e164 : null;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Versão para log e tela: `+55 (62) 9****-**88`.
|
|
172
|
+
*
|
|
173
|
+
* A trilha precisa provar PARA ONDE foi, e um telefone inteiro em log é PII que
|
|
174
|
+
* vaza em screenshot, exportação e print de suporte. Os quatro caracteres
|
|
175
|
+
* visíveis bastam para o operador reconhecer o número que ele mesmo cadastrou,
|
|
176
|
+
* e não bastam para discar.
|
|
177
|
+
*/
|
|
178
|
+
export function maskPhone(e164) {
|
|
179
|
+
const digits = e164.replace(/\D/g, '');
|
|
180
|
+
if (digits.length < 6)
|
|
181
|
+
return '***';
|
|
182
|
+
const tail = digits.slice(-2);
|
|
183
|
+
const areaCode = digits.startsWith('55') ? digits.slice(2, 4) : digits.slice(0, 2);
|
|
184
|
+
return `+55 (${areaCode}) *****-**${tail}`;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=phone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.js","sourceRoot":"","sources":["../../src/contacts/phone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAuBH;;;;;;;;GAQG;AACH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAA8B;IAC7D,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAEhD,sEAAsE;IACtE,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE1C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAEnD,8EAA8E;IAC9E,+CAA+C;IAC/C,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAEjF,IAAI,QAAgB,CAAC;IACrB,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACjD,8BAA8B;QAC9B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QACtE,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxD,iCAAiC;QACjC,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAEzE,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,wEAAwE;QACxE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACxE,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACnD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAClF,CAAC;IAED,mEAAmE;IACnE,6EAA6E;IAC7E,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IAC7B,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACjF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,OAAO,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC/C,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAA8B;IACzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,OAAO,QAAQ,QAAQ,aAAa,IAAI,EAAE,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import { type DataProvenance } from '../pilot/milestone.js';
|
|
3
|
+
/**
|
|
4
|
+
* O painel do piloto — as perguntas que o responsável faz todo dia.
|
|
5
|
+
*
|
|
6
|
+
* ## O critério de inclusão
|
|
7
|
+
*
|
|
8
|
+
* Cada número aqui existe porque alguém precisa decidir algo com ele hoje de
|
|
9
|
+
* manhã. Um painel decorativo não é neutro: ele ocupa a tela onde deveria estar
|
|
10
|
+
* o que importa, e ensina a não olhar.
|
|
11
|
+
*
|
|
12
|
+
* Tudo é derivado de dado real do sistema, na consulta. Nada é gravado como
|
|
13
|
+
* contador — um contador é um segundo lugar para a verdade morar, e ele fica
|
|
14
|
+
* errado exatamente quando ninguém está olhando.
|
|
15
|
+
*
|
|
16
|
+
* ## O que este arquivo NÃO responde
|
|
17
|
+
*
|
|
18
|
+
* "Quantos clientes estão sem regime tributário?" e "quais certificados
|
|
19
|
+
* digitais vencem?" são perguntas de contabilidade, e as tabelas que as
|
|
20
|
+
* respondem (`accounting_regime`, `digital_certificate`) pertencem à vertical.
|
|
21
|
+
* O Core não as consulta — nem por import, nem por SQL. O teste de fronteira
|
|
22
|
+
* só enxerga imports, mas uma consulta SQL a tabela de vertical seria a mesma
|
|
23
|
+
* violação, e quebraria de verdade num tenant que não tem o produto contábil.
|
|
24
|
+
* Essas duas seções vêm de `@baruk/contabil` e são compostas na borda, como
|
|
25
|
+
* `getCoreStats` já fazia.
|
|
26
|
+
*
|
|
27
|
+
* ## As duas colunas que costumam faltar
|
|
28
|
+
*
|
|
29
|
+
* `clientesSemCanalAutomatico` e `obrigacoesSemResponsavel` existem porque são
|
|
30
|
+
* ausências, e ausência não aparece em lista: um cliente sem e-mail nunca vira
|
|
31
|
+
* linha na fila de cobrança, e uma obrigação sem responsável nunca vira tarefa
|
|
32
|
+
* de ninguém. Sem um número que as conte, elas somem — que é exatamente o que
|
|
33
|
+
* aconteceu na carteira de QA da Fase 3.
|
|
34
|
+
*/
|
|
35
|
+
export interface PilotPanel {
|
|
36
|
+
/**
|
|
37
|
+
* De que lado da fronteira estão os números deste painel.
|
|
38
|
+
*
|
|
39
|
+
* Enquanto o piloto real não é declarado, **tudo** é pré-produtivo — QA,
|
|
40
|
+
* demonstração, App Review. Um painel que anuncia "2 clientes ativos" sem
|
|
41
|
+
* dizer isso convida a ler indicador de teste como indicador de operação, e
|
|
42
|
+
* o erro é irreversível: depois de misturados, ninguém separa.
|
|
43
|
+
*/
|
|
44
|
+
provenance: DataProvenance;
|
|
45
|
+
clientes: {
|
|
46
|
+
ativos: number;
|
|
47
|
+
emOnboarding: number;
|
|
48
|
+
semCanalAutomatico: number;
|
|
49
|
+
semResponsavel: number;
|
|
50
|
+
/**
|
|
51
|
+
* Têm e-mail e ninguém liberou ainda.
|
|
52
|
+
*
|
|
53
|
+
* É a terceira ausência que não aparece em fila nenhuma: estes clientes
|
|
54
|
+
* parecem alcançáveis (têm endereço) e a régua não os toca. Sem o número,
|
|
55
|
+
* o escritório concluiria que a cobrança está rodando quando ela está
|
|
56
|
+
* parada — que é o modo de falha oposto ao dos 81 e-mails, e igualmente
|
|
57
|
+
* silencioso.
|
|
58
|
+
*/
|
|
59
|
+
aguardandoLiberacao: number;
|
|
60
|
+
};
|
|
61
|
+
obrigacoes: {
|
|
62
|
+
venceHoje: number;
|
|
63
|
+
venceEm7Dias: number;
|
|
64
|
+
atrasadas: number;
|
|
65
|
+
semResponsavel: number;
|
|
66
|
+
aguardandoCliente: number;
|
|
67
|
+
};
|
|
68
|
+
documentos: {
|
|
69
|
+
pendentes: number;
|
|
70
|
+
vencidos: number;
|
|
71
|
+
aguardandoValidacao: number;
|
|
72
|
+
};
|
|
73
|
+
solicitacoes: {
|
|
74
|
+
aguardandoCliente: number;
|
|
75
|
+
aguardandoEquipe: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Delegado a `financialSummary`, e não recalculado aqui.
|
|
79
|
+
*
|
|
80
|
+
* A régua do financeiro desconta pagamentos confirmados e usa o status
|
|
81
|
+
* EFETIVO (derivado da data), não o gravado. Uma segunda consulta escrita
|
|
82
|
+
* neste arquivo responderia a mesma pergunta com outro número — e o painel
|
|
83
|
+
* discordaria da tela de recebíveis sem que nada explicasse por quê.
|
|
84
|
+
*/
|
|
85
|
+
financeiro: {
|
|
86
|
+
recebiveisVencidos: number;
|
|
87
|
+
valorVencido: number;
|
|
88
|
+
aVencerEm7Dias: number;
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Uma consulta por bloco, não uma por número.
|
|
93
|
+
*
|
|
94
|
+
* `count(*) FILTER (WHERE …)` faz o Postgres varrer a tabela uma vez e devolver
|
|
95
|
+
* todos os recortes. Doze `SELECT count(*)` separados dariam o mesmo resultado
|
|
96
|
+
* com doze varreduras — e, pior, com doze instantes diferentes: dois números do
|
|
97
|
+
* mesmo painel poderiam discordar entre si.
|
|
98
|
+
*/
|
|
99
|
+
export declare function getPilotPanel(tx: Tx): Promise<PilotPanel>;
|
|
100
|
+
//# sourceMappingURL=pilot-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pilot-panel.d.ts","sourceRoot":"","sources":["../../src/dashboard/pilot-panel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;;;OAOG;IACH,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC;QACvB;;;;;;;;WAQG;QACH,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,YAAY,EAAE;QACZ,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF;;;;;;;OAOG;IACH,UAAU,EAAE;QACV,kBAAkB,EAAE,MAAM,CAAC;QAC3B,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CA0F/D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { financialSummary } from '../billing/ar-repository.js';
|
|
2
|
+
import { dataProvenance } from '../pilot/milestone.js';
|
|
3
|
+
/**
|
|
4
|
+
* Uma consulta por bloco, não uma por número.
|
|
5
|
+
*
|
|
6
|
+
* `count(*) FILTER (WHERE …)` faz o Postgres varrer a tabela uma vez e devolver
|
|
7
|
+
* todos os recortes. Doze `SELECT count(*)` separados dariam o mesmo resultado
|
|
8
|
+
* com doze varreduras — e, pior, com doze instantes diferentes: dois números do
|
|
9
|
+
* mesmo painel poderiam discordar entre si.
|
|
10
|
+
*/
|
|
11
|
+
export async function getPilotPanel(tx) {
|
|
12
|
+
const [clientes] = await tx `
|
|
13
|
+
SELECT
|
|
14
|
+
count(*) FILTER (WHERE c.status = 'active')::int AS ativos,
|
|
15
|
+
count(*) FILTER (WHERE c.status = 'prospect')::int AS onboarding,
|
|
16
|
+
count(*) FILTER (WHERE c.status = 'active' AND c.email IS NULL)::int AS sem_canal,
|
|
17
|
+
count(*) FILTER (WHERE c.status = 'active'
|
|
18
|
+
AND c.responsible_user_id IS NULL)::int AS sem_resp,
|
|
19
|
+
count(*) FILTER (WHERE c.status = 'active'
|
|
20
|
+
AND c.email IS NOT NULL
|
|
21
|
+
AND c.communication_cleared_at IS NULL)::int AS sem_liberacao
|
|
22
|
+
FROM client c
|
|
23
|
+
WHERE c.deleted_at IS NULL
|
|
24
|
+
`;
|
|
25
|
+
const [obrigacoes] = await tx `
|
|
26
|
+
SELECT
|
|
27
|
+
count(*) FILTER (WHERE due_date = current_date)::int AS hoje,
|
|
28
|
+
count(*) FILTER (WHERE due_date > current_date
|
|
29
|
+
AND due_date <= current_date + 7)::int AS sete,
|
|
30
|
+
count(*) FILTER (WHERE due_date < current_date)::int AS atraso,
|
|
31
|
+
count(*) FILTER (WHERE responsible_user_id IS NULL)::int AS sem_resp,
|
|
32
|
+
count(*) FILTER (WHERE status = 'awaiting_client')::int AS aguardando
|
|
33
|
+
FROM recurring_instance
|
|
34
|
+
WHERE deleted_at IS NULL
|
|
35
|
+
AND status NOT IN ('done', 'not_applicable', 'canceled')
|
|
36
|
+
`;
|
|
37
|
+
const [documentos] = await tx `
|
|
38
|
+
SELECT
|
|
39
|
+
count(*) FILTER (WHERE status = 'requested')::int AS pendentes,
|
|
40
|
+
count(*) FILTER (WHERE status = 'requested'
|
|
41
|
+
AND due_date IS NOT NULL AND due_date < current_date)::int AS vencidos,
|
|
42
|
+
count(*) FILTER (WHERE status = 'received')::int AS validar
|
|
43
|
+
FROM document_request
|
|
44
|
+
WHERE deleted_at IS NULL
|
|
45
|
+
`;
|
|
46
|
+
const [solicitacoes] = await tx `
|
|
47
|
+
SELECT
|
|
48
|
+
count(*) FILTER (WHERE status IN ('sent', 'viewed', 'awaiting_client'))::int AS cliente,
|
|
49
|
+
count(*) FILTER (WHERE status IN ('answered', 'in_review'))::int AS equipe
|
|
50
|
+
FROM service_request
|
|
51
|
+
WHERE deleted_at IS NULL
|
|
52
|
+
`;
|
|
53
|
+
const financeiro = await financialSummary(tx);
|
|
54
|
+
const provenance = await dataProvenance(tx);
|
|
55
|
+
return {
|
|
56
|
+
provenance,
|
|
57
|
+
clientes: {
|
|
58
|
+
ativos: clientes?.ativos ?? 0,
|
|
59
|
+
emOnboarding: clientes?.onboarding ?? 0,
|
|
60
|
+
semCanalAutomatico: clientes?.sem_canal ?? 0,
|
|
61
|
+
semResponsavel: clientes?.sem_resp ?? 0,
|
|
62
|
+
aguardandoLiberacao: clientes?.sem_liberacao ?? 0,
|
|
63
|
+
},
|
|
64
|
+
obrigacoes: {
|
|
65
|
+
venceHoje: obrigacoes?.hoje ?? 0,
|
|
66
|
+
venceEm7Dias: obrigacoes?.sete ?? 0,
|
|
67
|
+
atrasadas: obrigacoes?.atraso ?? 0,
|
|
68
|
+
semResponsavel: obrigacoes?.sem_resp ?? 0,
|
|
69
|
+
aguardandoCliente: obrigacoes?.aguardando ?? 0,
|
|
70
|
+
},
|
|
71
|
+
documentos: {
|
|
72
|
+
pendentes: documentos?.pendentes ?? 0,
|
|
73
|
+
vencidos: documentos?.vencidos ?? 0,
|
|
74
|
+
aguardandoValidacao: documentos?.validar ?? 0,
|
|
75
|
+
},
|
|
76
|
+
solicitacoes: {
|
|
77
|
+
aguardandoCliente: solicitacoes?.cliente ?? 0,
|
|
78
|
+
aguardandoEquipe: solicitacoes?.equipe ?? 0,
|
|
79
|
+
},
|
|
80
|
+
financeiro: {
|
|
81
|
+
recebiveisVencidos: financeiro.overdueCount,
|
|
82
|
+
valorVencido: financeiro.totalOverdue,
|
|
83
|
+
aVencerEm7Dias: financeiro.totalDueSoon,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=pilot-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pilot-panel.js","sourceRoot":"","sources":["../../src/dashboard/pilot-panel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAuB,MAAM,uBAAuB,CAAC;AA2F5E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAM;IACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAQ1B;;;;;;;;;;;;GAYA,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,CAE5B;;;;;;;;;;;GAWA,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,EAAE,CAA4D;;;;;;;;GAQxF,CAAC;IAEF,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,EAAE,CAAuC;;;;;;GAMrE,CAAC;IAEF,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;IAE5C,OAAO;QACL,UAAU;QACV,QAAQ,EAAE;YACR,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;YAC7B,YAAY,EAAE,QAAQ,EAAE,UAAU,IAAI,CAAC;YACvC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,IAAI,CAAC;YAC5C,cAAc,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC;YACvC,mBAAmB,EAAE,QAAQ,EAAE,aAAa,IAAI,CAAC;SAClD;QACD,UAAU,EAAE;YACV,SAAS,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC;YAChC,YAAY,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC;YACnC,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;YAClC,cAAc,EAAE,UAAU,EAAE,QAAQ,IAAI,CAAC;YACzC,iBAAiB,EAAE,UAAU,EAAE,UAAU,IAAI,CAAC;SAC/C;QACD,UAAU,EAAE;YACV,SAAS,EAAE,UAAU,EAAE,SAAS,IAAI,CAAC;YACrC,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,CAAC;YACnC,mBAAmB,EAAE,UAAU,EAAE,OAAO,IAAI,CAAC;SAC9C;QACD,YAAY,EAAE;YACZ,iBAAiB,EAAE,YAAY,EAAE,OAAO,IAAI,CAAC;YAC7C,gBAAgB,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;SAC5C;QACD,UAAU,EAAE;YACV,kBAAkB,EAAE,UAAU,CAAC,YAAY;YAC3C,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,cAAc,EAAE,UAAU,CAAC,YAAY;SACxC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChF;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4CtE"}
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
export async function getCoreStats(tx) {
|
|
2
|
+
// "Clientes ativos" precisa contar clientes ATIVOS.
|
|
3
|
+
//
|
|
4
|
+
// Contava todo registro não removido, inativos inclusive — e o card se chama
|
|
5
|
+
// "Clientes ativos". Com dois clientes inativados, a mesma tela mostrava
|
|
6
|
+
// `Carteira → Clientes ativos = 0` e `Resumo geral → Clientes ativos = 2`,
|
|
7
|
+
// porque o painel de carteira filtra por `status` e este não filtrava.
|
|
8
|
+
//
|
|
9
|
+
// Duas consultas respondendo à mesma pergunta com definições diferentes é
|
|
10
|
+
// como um painel perde a confiança de quem o lê: não há como saber qual dos
|
|
11
|
+
// dois números está certo sem abrir o código.
|
|
2
12
|
const [clients] = await tx `
|
|
3
|
-
SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL
|
|
13
|
+
SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL AND status = 'active'
|
|
4
14
|
`;
|
|
5
15
|
const [users] = await tx `
|
|
6
16
|
SELECT count(*)::int AS n FROM membership WHERE status = 'active' AND deleted_at IS NULL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAE1C,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAExC,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;GAIvC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;;;GAM1C,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAgE;;;GAGtF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QACxB,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;QAC1B,YAAY,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;QAC1B,eAAe,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/dashboard/repository.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM;IACvC,oDAAoD;IACpD,EAAE;IACF,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,uEAAuE;IACvE,EAAE;IACF,0EAA0E;IAC1E,4EAA4E;IAC5E,8CAA8C;IAC9C,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAE1C,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAExC,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;GAIvC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;;;GAM1C,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAgE;;;GAGtF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QACxB,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;QAC1B,YAAY,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;QAC1B,eAAe,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
package/dist/db/client.d.ts
CHANGED
|
@@ -15,5 +15,50 @@ export interface DbOptions {
|
|
|
15
15
|
* - OWNER: roda migrations/seed (cria schema).
|
|
16
16
|
* - APP (baruk_app): runtime da aplicação — NOSUPERUSER, NOBYPASSRLS, sujeito à RLS.
|
|
17
17
|
*/
|
|
18
|
+
/**
|
|
19
|
+
* Política de TLS da conexão.
|
|
20
|
+
*
|
|
21
|
+
* ## O que mudou, e por quê
|
|
22
|
+
*
|
|
23
|
+
* A versão anterior decidia por uma **allowlist de host**:
|
|
24
|
+
*
|
|
25
|
+
* ssl = /sslmode=require|render\.com|neon\.tech|supabase|amazonaws|\.cloud/
|
|
26
|
+
* ? { rejectUnauthorized: false } : undefined
|
|
27
|
+
*
|
|
28
|
+
* Dois defeitos, medidos em 2026-09-05:
|
|
29
|
+
*
|
|
30
|
+
* 1. **`rejectUnauthorized: false` desliga a validação do certificado.** A
|
|
31
|
+
* conexão fica cifrada e não autenticada — um MITM ativo entre a aplicação e
|
|
32
|
+
* o banco passa despercebido. Não havia necessidade técnica: uma sonda contra
|
|
33
|
+
* o provedor real conectou com `verify-full`, com `rejectUnauthorized: true`
|
|
34
|
+
* e com a validação padrão do Node. Era receita copiada.
|
|
35
|
+
*
|
|
36
|
+
* 2. **A allowlist decidia o lado errado do fail.** Um host gerenciado FORA da
|
|
37
|
+
* lista — Azure, GCP, um domínio próprio sem `sslmode` na string — caía em
|
|
38
|
+
* `ssl: undefined`, ou seja **sem TLS nenhum**, em silêncio. A produção de
|
|
39
|
+
* hoje não é afetada (a URL casa por dois motivos), mas trocar o host
|
|
40
|
+
* quebraria a cifra sem quebrar a conexão, que é o pior desfecho possível.
|
|
41
|
+
*
|
|
42
|
+
* ## A política agora
|
|
43
|
+
*
|
|
44
|
+
* **TLS validado é o padrão.** Fica de fora apenas o que é comprovadamente
|
|
45
|
+
* local, ou o que declara `sslmode=disable` — o mecanismo do próprio Postgres
|
|
46
|
+
* para dizer "esta conexão não usa TLS", e não uma invenção nossa. Host novo
|
|
47
|
+
* entra seguro sem ninguém precisar lembrar de adicioná-lo a uma lista.
|
|
48
|
+
*
|
|
49
|
+
* CA privada entra por `PGSSLROOTCERT`, a variável padrão do libpq — mesmo nome
|
|
50
|
+
* que `psql` e todo o ecossistema já usam, para que não exista um segundo jeito
|
|
51
|
+
* de configurar a mesma coisa.
|
|
52
|
+
*/
|
|
53
|
+
export interface TlsDecision {
|
|
54
|
+
/** O que vai para o driver. `undefined` = conexão em texto claro. */
|
|
55
|
+
ssl: {
|
|
56
|
+
rejectUnauthorized: boolean;
|
|
57
|
+
ca?: string;
|
|
58
|
+
} | undefined;
|
|
59
|
+
/** Por que — usado por diagnóstico e teste. Nunca contém a connection string. */
|
|
60
|
+
reason: 'local' | 'explicitly-disabled' | 'verified';
|
|
61
|
+
}
|
|
62
|
+
export declare function resolveTls(connectionString: string, env?: NodeJS.ProcessEnv): TlsDecision;
|
|
18
63
|
export declare function createDb(connectionString: string, opts?: DbOptions): Db;
|
|
19
64
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/db/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACrD,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC;AAEhC,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,GAAE,SAAc,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AACrD,MAAM,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,gEAAgE;AAChE,MAAM,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC;AAEhC,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;CACxB;AAED;;;;;GAKG;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,GAAG,EAAE;QAAE,kBAAkB,EAAE,OAAO,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC9D,iFAAiF;IACjF,MAAM,EAAE,OAAO,GAAG,qBAAqB,GAAG,UAAU,CAAC;CACtD;AAKD,wBAAgB,UAAU,CACxB,gBAAgB,EAAE,MAAM,EACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,CAUb;AAED,wBAAgB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,GAAE,SAAc,GAAG,EAAE,CAU3E"}
|
package/dist/db/client.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import postgres from 'postgres';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
const LOCAL_HOST = /@(localhost|127\.0\.0\.1|host\.docker\.internal|\[?::1\]?)[:/]/;
|
|
3
|
+
const SSL_DISABLED = /[?&]sslmode=disable(&|$)/;
|
|
4
|
+
export function resolveTls(connectionString, env = process.env) {
|
|
5
|
+
if (LOCAL_HOST.test(connectionString))
|
|
6
|
+
return { ssl: undefined, reason: 'local' };
|
|
7
|
+
if (SSL_DISABLED.test(connectionString)) {
|
|
8
|
+
return { ssl: undefined, reason: 'explicitly-disabled' };
|
|
9
|
+
}
|
|
10
|
+
const ca = env['PGSSLROOTCERT_PEM']?.trim();
|
|
11
|
+
return {
|
|
12
|
+
ssl: ca ? { rejectUnauthorized: true, ca } : { rejectUnauthorized: true },
|
|
13
|
+
reason: 'verified',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
8
16
|
export function createDb(connectionString, opts = {}) {
|
|
9
|
-
|
|
10
|
-
// Postgres local. Detecta pelo host/flag da URL.
|
|
11
|
-
const isLocal = /@(localhost|127\.0\.0\.1|host\.docker\.internal|\[?::1\]?)[:/]/.test(connectionString);
|
|
12
|
-
const wantsSsl = !isLocal && /sslmode=require|render\.com|neon\.tech|supabase|amazonaws|\.cloud/.test(connectionString);
|
|
17
|
+
const { ssl } = resolveTls(connectionString);
|
|
13
18
|
return postgres(connectionString, {
|
|
14
19
|
max: opts.max ?? 10,
|
|
15
20
|
// UUIDs são gerados na aplicação (uuidv7); datas em UTC.
|
|
16
21
|
prepare: true,
|
|
17
|
-
ssl
|
|
22
|
+
ssl,
|
|
18
23
|
onnotice: () => { }, // silencia NOTICEs verbosos de DO-blocks/IF EXISTS
|
|
19
24
|
});
|
|
20
25
|
}
|
package/dist/db/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/db/client.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA8DhC,MAAM,UAAU,GAAG,gEAAgE,CAAC;AACpF,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEhD,MAAM,UAAU,UAAU,CACxB,gBAAwB,EACxB,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClF,IAAI,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC3D,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC5C,OAAO;QACL,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE;QACzE,MAAM,EAAE,UAAU;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,gBAAwB,EAAE,OAAkB,EAAE;IACrE,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAE7C,OAAO,QAAQ,CAAC,gBAAgB,EAAE;QAChC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,yDAAyD;QACzD,OAAO,EAAE,IAAI;QACb,GAAG;QACH,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,mDAAmD;KACxE,CAAC,CAAC;AACL,CAAC"}
|
package/dist/db/migrate.d.ts
CHANGED
|
@@ -1,2 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
import { type Db } from './client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extrai os nomes de tabela criados pelas migrations do Office.
|
|
4
|
+
*
|
|
5
|
+
* Esta é a ALLOWLIST de privilégio do runtime. Ela nasce da mesma fonte que cria
|
|
6
|
+
* as tabelas — o próprio SQL das migrations — e não de um manifesto paralelo, que
|
|
7
|
+
* alguém esqueceria de atualizar ao criar a tabela seguinte.
|
|
8
|
+
*
|
|
9
|
+
* Por que existe: até 0044 o runner concedia `ON ALL TABLES IN SCHEMA public`.
|
|
10
|
+
* Em um banco onde o schema do Office coabita com o de outro produto — o caso do
|
|
11
|
+
* `neondb` em produção, que carrega 187 tabelas de um schema Prisma anterior —
|
|
12
|
+
* "ALL TABLES" entrega ao papel de runtime do Office SELECT/INSERT/UPDATE/DELETE
|
|
13
|
+
* sobre dados que não são dele. O escopo do GRANT tem de ser o schema que este
|
|
14
|
+
* repositório cria, não o schema que este banco por acaso contém.
|
|
15
|
+
*/
|
|
16
|
+
export declare function officeTablesFromSql(sqls: readonly string[]): string[];
|
|
17
|
+
export interface LeastPrivilegeResult {
|
|
18
|
+
/** Tabelas fora do Office das quais o privilégio de `baruk_app` foi revogado. */
|
|
19
|
+
revoked: string[];
|
|
20
|
+
/** Papéis cujo DEFAULT PRIVILEGES para `baruk_app` foi removido. */
|
|
21
|
+
defaultsCleared: string[];
|
|
22
|
+
/** Papéis cujo DEFAULT PRIVILEGES não pôde ser removido com o papel atual. */
|
|
23
|
+
defaultsResidual: string[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Aplica least privilege ao papel de runtime.
|
|
27
|
+
*
|
|
28
|
+
* Concede DML nas tabelas do Office, revoga em tudo o que não é do Office, e
|
|
29
|
+
* remove o DEFAULT PRIVILEGES que faria a próxima tabela criada no schema nascer
|
|
30
|
+
* alcançável. Idempotente: em banco limpo não há estrangeiras e a função é um
|
|
31
|
+
* no-op além do GRANT.
|
|
32
|
+
*
|
|
33
|
+
* Recebe a allowlist em vez de descobri-la para que o teste possa exercitar a
|
|
34
|
+
* contenção sem depender do conteúdo real das migrations.
|
|
35
|
+
*/
|
|
36
|
+
export declare function enforceRuntimeLeastPrivilege(sql: Db, officeTables: readonly string[]): Promise<LeastPrivilegeResult>;
|
|
2
37
|
//# sourceMappingURL=migrate.d.ts.map
|
package/dist/db/migrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAY,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAmDhD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAwCrE;AAOD,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oEAAoE;IACpE,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,EAAE,EACP,YAAY,EAAE,SAAS,MAAM,EAAE,GAC9B,OAAO,CAAC,oBAAoB,CAAC,CAoG/B"}
|