@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,411 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KNOWN_JOBS = exports.FISCAL_SYNC_JOB = exports.SAAS_BILLING_JOB = exports.COLLECTION_CYCLE_JOB = exports.TEMPORARY_BACKOFF_MS = exports.JOB_CONTRACT_VERSION = void 0;
|
|
4
|
+
exports.probePlatformCapabilities = probePlatformCapabilities;
|
|
5
|
+
exports.evaluateJobReadiness = evaluateJobReadiness;
|
|
6
|
+
exports.runGuardedJob = runGuardedJob;
|
|
7
|
+
exports.recordJobRun = recordJobRun;
|
|
8
|
+
exports.recordJobRunBestEffort = recordJobRunBestEffort;
|
|
9
|
+
const shared_1 = require("@baruk/shared");
|
|
10
|
+
const context_js_1 = require("../db/context.js");
|
|
11
|
+
/**
|
|
12
|
+
* O contrato de capacidade entre um WORKER e o schema que ele opera.
|
|
13
|
+
*
|
|
14
|
+
* ## O que isto fecha, e por que não bastava o contrato HTTP
|
|
15
|
+
*
|
|
16
|
+
* `platform/capabilities.ts` protege a superfície HTTP: a tela pergunta à API
|
|
17
|
+
* se aquele build sabe responder o que ela vai pedir. Um cron não tem tela e
|
|
18
|
+
* não fala com a API — ele fala com o BANCO. A contraparte é outra, então o
|
|
19
|
+
* contrato é outro, e o registro vive no próprio banco (migration 0055).
|
|
20
|
+
*
|
|
21
|
+
* A janela é real e não é hipótese: os crons publicam na Render como serviços
|
|
22
|
+
* SEPARADOS do serviço web, e as migrations rodam no `preDeployCommand` do
|
|
23
|
+
* serviço web. A ordem entre "a imagem nova do cron subiu" e "o schema novo foi
|
|
24
|
+
* aplicado" não é garantida por nada.
|
|
25
|
+
*
|
|
26
|
+
* ## Cinco estados, não dois
|
|
27
|
+
*
|
|
28
|
+
* A primeira forma óbvia disto seria um booleano `podeRodar`. Ela colapsa dois
|
|
29
|
+
* problemas que exigem tratamentos opostos:
|
|
30
|
+
*
|
|
31
|
+
* `READY` compatível — executa.
|
|
32
|
+
* `INCOMPATIBLE` o schema é anterior ao que este worker exige.
|
|
33
|
+
* Fecha, e **não** merece retry: nenhuma
|
|
34
|
+
* quantidade de tentativas aplica uma migration.
|
|
35
|
+
* `TEMPORARILY_UNAVAILABLE` não deu para perguntar (banco fora, timeout).
|
|
36
|
+
* Fecha também — mas com backoff, porque volta
|
|
37
|
+
* sozinho.
|
|
38
|
+
* `DISABLED` desligado por configuração do processo.
|
|
39
|
+
* `BLOCKED_BY_TENANT_CONFIG` o escritório não habilitou.
|
|
40
|
+
*
|
|
41
|
+
* A distinção entre os dois primeiros bloqueios é a mesma que o contrato HTTP
|
|
42
|
+
* já paga: lá, tratar timeout como "não suportado" faria a tela mentir sobre um
|
|
43
|
+
* deploy antigo toda vez que a API hibernasse. Aqui, tratar banco fora como
|
|
44
|
+
* incompatível faria o cron desistir de um dia inteiro por uma queda de rede de
|
|
45
|
+
* trinta segundos — e tratar incompatível como indisponível faria ele martelar
|
|
46
|
+
* um schema que não vai mudar sozinho.
|
|
47
|
+
*
|
|
48
|
+
* ## Fail-closed é sobre VERSÃO
|
|
49
|
+
*
|
|
50
|
+
* Quando não é `READY`, nada é escrito: zero mutação, cursor intocado, nenhum
|
|
51
|
+
* item marcado como processado. E o bloqueio é REGISTRADO (`job_run`) — um job
|
|
52
|
+
* que para em silêncio é indistinguível de um job que rodou e não achou nada.
|
|
53
|
+
*
|
|
54
|
+
* A garantia não depende deste arquivo: `job_run` tem CHECK que torna
|
|
55
|
+
* ingravável um run bloqueado com mutação ou cursor avançado. O TypeScript
|
|
56
|
+
* ordena; o banco garante.
|
|
57
|
+
*/
|
|
58
|
+
/** Versão do FORMATO do registro. Ver `platform_capability.contract_version`. */
|
|
59
|
+
exports.JOB_CONTRACT_VERSION = 1;
|
|
60
|
+
/**
|
|
61
|
+
* Backoff do que volta sozinho.
|
|
62
|
+
*
|
|
63
|
+
* Cinco minutos: longo o bastante para uma reinicialização de banco caber
|
|
64
|
+
* dentro, curto o bastante para o ciclo diário ainda sair no mesmo dia.
|
|
65
|
+
*/
|
|
66
|
+
exports.TEMPORARY_BACKOFF_MS = 5 * 60_000;
|
|
67
|
+
/**
|
|
68
|
+
* Códigos do PostgreSQL que significam "este schema é anterior ao worker".
|
|
69
|
+
*
|
|
70
|
+
* `42P01` tabela inexistente, `42703` coluna inexistente, `42883` função
|
|
71
|
+
* inexistente. São afirmações do servidor sobre o que ele TEM — não sobre a
|
|
72
|
+
* rede —, e é exatamente essa a fronteira entre `absent` e `unknown`.
|
|
73
|
+
*/
|
|
74
|
+
const OLD_SCHEMA_SQLSTATES = new Set(['42P01', '42703', '42883']);
|
|
75
|
+
/**
|
|
76
|
+
* Lê o registro de capacidades do schema. Nunca lança; classifica a falha.
|
|
77
|
+
*
|
|
78
|
+
* A classificação é o ponto inteiro da função. Um `catch` que devolvesse
|
|
79
|
+
* "incompatível" para qualquer erro transformaria toda queda de rede em uma
|
|
80
|
+
* afirmação falsa sobre a versão do schema — o mesmo defeito que quase entrou
|
|
81
|
+
* em produção no contrato HTTP.
|
|
82
|
+
*/
|
|
83
|
+
async function probePlatformCapabilities(tx) {
|
|
84
|
+
let rows;
|
|
85
|
+
try {
|
|
86
|
+
rows = await tx `
|
|
87
|
+
SELECT key, contract_version FROM platform_capability ORDER BY key
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
const code = err?.code;
|
|
92
|
+
if (code && OLD_SCHEMA_SQLSTATES.has(code)) {
|
|
93
|
+
// A tabela não existe: este banco é anterior à 0055. É a assinatura
|
|
94
|
+
// exata do schema velho, e o caso inteiro pelo qual isto existe.
|
|
95
|
+
return { status: 'absent', detail: `registro ausente no schema (sqlstate ${code})` };
|
|
96
|
+
}
|
|
97
|
+
// Conexão recusada, timeout, permissão momentaneamente negada: nada disto
|
|
98
|
+
// informa a VERSÃO do schema.
|
|
99
|
+
return { status: 'unknown', detail: `consulta falhou (sqlstate ${code ?? 'desconhecido'})` };
|
|
100
|
+
}
|
|
101
|
+
if (rows.length === 0) {
|
|
102
|
+
// Tabela existe e está vazia. Um schema que não declara nada não pode
|
|
103
|
+
// satisfazer exigência nenhuma — e "vazio" não é "tudo permitido".
|
|
104
|
+
return { status: 'absent', detail: 'registro de capacidades vazio' };
|
|
105
|
+
}
|
|
106
|
+
// Versões de contrato divergentes na mesma tabela seriam um registro que não
|
|
107
|
+
// se sabe ler inteiro. Fecha, em vez de escolher uma.
|
|
108
|
+
const versions = new Set(rows.map((r) => r.contract_version));
|
|
109
|
+
if (versions.size > 1) {
|
|
110
|
+
return { status: 'absent', detail: 'registro com versões de contrato divergentes' };
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
status: 'declared',
|
|
114
|
+
contract: rows[0].contract_version,
|
|
115
|
+
capabilities: rows.map((r) => r.key),
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* A sondagem satisfaz o que este worker exige?
|
|
120
|
+
*
|
|
121
|
+
* Função pura: recebe a sondagem já feita e devolve a decisão. É essa separação
|
|
122
|
+
* que permite fixar o contrato para o lote inteiro (ver `runGuardedJob`) — a
|
|
123
|
+
* decisão de cada item usa a MESMA sondagem, não uma nova.
|
|
124
|
+
*/
|
|
125
|
+
function evaluateJobReadiness(def, probe, opts = {}) {
|
|
126
|
+
const blocked = (readiness, detail, extra = {}) => ({
|
|
127
|
+
readiness,
|
|
128
|
+
canMutate: false,
|
|
129
|
+
retryable: readiness === 'TEMPORARILY_UNAVAILABLE',
|
|
130
|
+
backoffMs: readiness === 'TEMPORARILY_UNAVAILABLE' ? exports.TEMPORARY_BACKOFF_MS : null,
|
|
131
|
+
contractVersion: null,
|
|
132
|
+
observed: [],
|
|
133
|
+
missing: [],
|
|
134
|
+
detail,
|
|
135
|
+
...extra,
|
|
136
|
+
});
|
|
137
|
+
// Desligado pelo processo vem primeiro: não faz sentido perguntar ao banco se
|
|
138
|
+
// um worker desligado é compatível, e a resposta não mudaria nada.
|
|
139
|
+
if (opts.disabled)
|
|
140
|
+
return blocked('DISABLED', 'worker desligado por configuração');
|
|
141
|
+
if (def.requires.length === 0) {
|
|
142
|
+
// Erro de programação, tratado como bloqueio e não como exceção: um worker
|
|
143
|
+
// mal declarado não pode virar um worker sem portão.
|
|
144
|
+
return blocked('INCOMPATIBLE', `job "${def.name}" não declara capacidade exigida`);
|
|
145
|
+
}
|
|
146
|
+
if (probe.status === 'unknown')
|
|
147
|
+
return blocked('TEMPORARILY_UNAVAILABLE', probe.detail);
|
|
148
|
+
if (probe.status === 'absent') {
|
|
149
|
+
return blocked('INCOMPATIBLE', probe.detail, { missing: [...def.requires] });
|
|
150
|
+
}
|
|
151
|
+
if (probe.contract < def.minContractVersion) {
|
|
152
|
+
return blocked('INCOMPATIBLE', `contrato ${probe.contract} anterior ao mínimo ${def.minContractVersion}`, { contractVersion: probe.contract, observed: probe.capabilities, missing: [...def.requires] });
|
|
153
|
+
}
|
|
154
|
+
if (probe.contract > exports.JOB_CONTRACT_VERSION) {
|
|
155
|
+
// Schema mais novo do que este worker sabe ler. Simétrico ao caso acima, e
|
|
156
|
+
// igualmente fechado: reinterpretar um formato desconhecido é como um
|
|
157
|
+
// worker velho corrompe dado novo.
|
|
158
|
+
return blocked('INCOMPATIBLE', `contrato ${probe.contract} posterior ao que este worker lê (${exports.JOB_CONTRACT_VERSION})`, { contractVersion: probe.contract, observed: probe.capabilities });
|
|
159
|
+
}
|
|
160
|
+
// Continência de conjunto, não igualdade: o schema pode declarar MAIS do que
|
|
161
|
+
// este worker exige, e é isso que torna `worker velho + schema novo` seguro.
|
|
162
|
+
const missing = def.requires.filter((k) => !probe.capabilities.includes(k));
|
|
163
|
+
if (missing.length > 0) {
|
|
164
|
+
return blocked('INCOMPATIBLE', `capacidade ausente: ${missing.join(', ')}`, {
|
|
165
|
+
contractVersion: probe.contract,
|
|
166
|
+
observed: probe.capabilities,
|
|
167
|
+
missing,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
// O bloqueio por configuração do escritório vem por ÚLTIMO, depois de a
|
|
171
|
+
// compatibilidade estar provada: assim o registro distingue "o schema não
|
|
172
|
+
// serve" de "este escritório não quis", que são conversas diferentes.
|
|
173
|
+
if (opts.tenantBlocked) {
|
|
174
|
+
return blocked('BLOCKED_BY_TENANT_CONFIG', opts.tenantBlocked, {
|
|
175
|
+
contractVersion: probe.contract,
|
|
176
|
+
observed: probe.capabilities,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return {
|
|
180
|
+
readiness: 'READY',
|
|
181
|
+
canMutate: true,
|
|
182
|
+
retryable: false,
|
|
183
|
+
backoffMs: null,
|
|
184
|
+
contractVersion: probe.contract,
|
|
185
|
+
observed: probe.capabilities,
|
|
186
|
+
missing: [],
|
|
187
|
+
detail: 'compatível',
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Executa `handler` sob o portão, dentro do contexto de tenant.
|
|
192
|
+
*
|
|
193
|
+
* A ordem importa e é o mecanismo inteiro:
|
|
194
|
+
*
|
|
195
|
+
* 1. sonda (ou usa a sondagem fixada) e decide — ANTES de qualquer escrita;
|
|
196
|
+
* 2. se não for `READY`, grava o `job_run` bloqueado e RETORNA. O handler não
|
|
197
|
+
* é chamado, então não existe caminho pelo qual ele mute;
|
|
198
|
+
* 3. se for `READY`, lê o cursor, chama o handler, e só então grava o run e
|
|
199
|
+
* avança o cursor.
|
|
200
|
+
*
|
|
201
|
+
* Cursor e run são gravados na MESMA transação do handler: um lote que estourou
|
|
202
|
+
* no meio não deixa cursor avançado, porque o rollback leva os dois junto.
|
|
203
|
+
*/
|
|
204
|
+
async function runGuardedJob(db, tenantId, def, handler, opts = {}) {
|
|
205
|
+
const probe = opts.probe ?? (await (0, context_js_1.withContext)(db, { tenantId }, (tx) => probePlatformCapabilities(tx)));
|
|
206
|
+
const decision = evaluateJobReadiness(def, probe, {
|
|
207
|
+
disabled: opts.disabled,
|
|
208
|
+
tenantBlocked: opts.tenantBlocked,
|
|
209
|
+
});
|
|
210
|
+
if (!decision.canMutate) {
|
|
211
|
+
const record = await (0, context_js_1.withContext)(db, { tenantId }, (tx) => recordJobRun(tx, tenantId, def, decision, {
|
|
212
|
+
status: 'blocked',
|
|
213
|
+
mutations: 0,
|
|
214
|
+
cursorAdvanced: false,
|
|
215
|
+
}));
|
|
216
|
+
return { record, result: null, decision };
|
|
217
|
+
}
|
|
218
|
+
let mutations = 0;
|
|
219
|
+
let nextCursor = null;
|
|
220
|
+
try {
|
|
221
|
+
return await (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
|
|
222
|
+
const [cur] = await tx `
|
|
223
|
+
SELECT position, contract_version FROM job_cursor WHERE job_name = ${def.name}
|
|
224
|
+
`;
|
|
225
|
+
if (cur && cur.contract_version > exports.JOB_CONTRACT_VERSION) {
|
|
226
|
+
// Cursor gravado sob contrato que este worker não sabe ler. Reinterpretar
|
|
227
|
+
// a posição com outra semântica é pior do que não andar.
|
|
228
|
+
const stale = evaluateJobReadiness(def, {
|
|
229
|
+
status: 'absent',
|
|
230
|
+
detail: `cursor gravado sob contrato ${cur.contract_version}, posterior a ${exports.JOB_CONTRACT_VERSION}`,
|
|
231
|
+
});
|
|
232
|
+
const record = await recordJobRun(tx, tenantId, def, stale, {
|
|
233
|
+
status: 'blocked',
|
|
234
|
+
mutations: 0,
|
|
235
|
+
cursorAdvanced: false,
|
|
236
|
+
});
|
|
237
|
+
return { record, result: null, decision: stale };
|
|
238
|
+
}
|
|
239
|
+
const ctx = {
|
|
240
|
+
decision,
|
|
241
|
+
cursor: cur?.position ?? null,
|
|
242
|
+
recordMutation: (n = 1) => {
|
|
243
|
+
mutations += n;
|
|
244
|
+
},
|
|
245
|
+
advanceCursorTo: (position) => {
|
|
246
|
+
nextCursor = position;
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
const result = await handler(tx, ctx);
|
|
250
|
+
if (nextCursor !== null) {
|
|
251
|
+
await tx `
|
|
252
|
+
INSERT INTO job_cursor (id, tenant_id, job_name, position, contract_version, updated_at)
|
|
253
|
+
VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${def.name}, ${nextCursor},
|
|
254
|
+
${decision.contractVersion ?? exports.JOB_CONTRACT_VERSION}, now())
|
|
255
|
+
ON CONFLICT (tenant_id, job_name)
|
|
256
|
+
DO UPDATE SET position = EXCLUDED.position,
|
|
257
|
+
contract_version = EXCLUDED.contract_version,
|
|
258
|
+
updated_at = now()
|
|
259
|
+
`;
|
|
260
|
+
}
|
|
261
|
+
const record = await recordJobRun(tx, tenantId, def, decision, {
|
|
262
|
+
status: 'completed',
|
|
263
|
+
mutations,
|
|
264
|
+
cursorAdvanced: nextCursor !== null,
|
|
265
|
+
});
|
|
266
|
+
return { record, result, decision };
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
catch (err) {
|
|
270
|
+
// O lote falhou: a transação já reverteu mutação e cursor. O registro da
|
|
271
|
+
// falha vai em transação NOVA, senão ele voltaria junto e a falha ficaria
|
|
272
|
+
// invisível — que é o modo de falha que esta tabela existe para eliminar.
|
|
273
|
+
//
|
|
274
|
+
// E se o próprio registro falhar (banco fora, que é uma causa provável do
|
|
275
|
+
// erro original), o erro ORIGINAL é o que sobe. Trocá-lo pelo erro de
|
|
276
|
+
// gravar a trilha esconderia a causa atrás do sintoma.
|
|
277
|
+
let record;
|
|
278
|
+
try {
|
|
279
|
+
record = await (0, context_js_1.withContext)(db, { tenantId }, (tx) => recordJobRun(tx, tenantId, def, { ...decision, detail: describeFailure(err) }, { status: 'failed', mutations: 0, cursorAdvanced: false }));
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
throw err;
|
|
283
|
+
}
|
|
284
|
+
return { record, result: null, decision };
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/** Mensagem de falha sem PII e sem segredo: só a classe e o sqlstate. */
|
|
288
|
+
function describeFailure(err) {
|
|
289
|
+
const code = err?.code;
|
|
290
|
+
const name = err instanceof Error ? err.name : 'erro';
|
|
291
|
+
return code ? `${name} (sqlstate ${code})` : name;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Grava o desfecho de um run.
|
|
295
|
+
*
|
|
296
|
+
* Público porque os dois crons existentes não são baseados em cursor — eles são
|
|
297
|
+
* idempotentes por índice único e rodam duas transações por tenant de
|
|
298
|
+
* propósito. Forçá-los para dentro de `runGuardedJob` colapsaria essas duas
|
|
299
|
+
* transações em uma, e um erro na régua passaria a desfazer recebíveis
|
|
300
|
+
* legitimamente gerados. Eles usam o mesmo portão e a mesma trilha; o que não
|
|
301
|
+
* usam é o cursor, que não têm.
|
|
302
|
+
*/
|
|
303
|
+
async function recordJobRun(tx, tenantId, def, decision, outcome) {
|
|
304
|
+
const id = (0, shared_1.uuidv7)();
|
|
305
|
+
await tx `
|
|
306
|
+
INSERT INTO job_run (
|
|
307
|
+
id, tenant_id, job_name, job_version, readiness, status, contract_version,
|
|
308
|
+
required_capabilities, observed_capabilities, missing_capabilities,
|
|
309
|
+
mutations, cursor_advanced, detail, finished_at
|
|
310
|
+
) VALUES (
|
|
311
|
+
${id}, ${tenantId}, ${def.name}, ${def.version}, ${decision.readiness}, ${outcome.status},
|
|
312
|
+
${decision.contractVersion}, ${[...def.requires]}, ${[...decision.observed]},
|
|
313
|
+
${[...decision.missing]}, ${outcome.mutations}, ${outcome.cursorAdvanced},
|
|
314
|
+
${decision.detail}, now()
|
|
315
|
+
)
|
|
316
|
+
`;
|
|
317
|
+
return {
|
|
318
|
+
id,
|
|
319
|
+
readiness: decision.readiness,
|
|
320
|
+
status: outcome.status,
|
|
321
|
+
mutations: outcome.mutations,
|
|
322
|
+
cursorAdvanced: outcome.cursorAdvanced,
|
|
323
|
+
detail: decision.detail,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Grava a trilha tolerando a ausência da própria tabela.
|
|
328
|
+
*
|
|
329
|
+
* O caso é específico e derrubaria produção: quando o bloqueio é `INCOMPATIBLE`
|
|
330
|
+
* porque o schema é anterior à 0055, **`job_run` também não existe** — as duas
|
|
331
|
+
* tabelas nascem na mesma migration. Um `recordJobRun` direto estouraria para
|
|
332
|
+
* cada tenant e o cron sairia com código 1, transformando um bloqueio correto
|
|
333
|
+
* e silencioso num alarme de infraestrutura.
|
|
334
|
+
*
|
|
335
|
+
* A trilha é observabilidade, não a garantia. A garantia é o handler não ser
|
|
336
|
+
* chamado, e ela já valeu antes desta linha. Quando a trilha não cabe no
|
|
337
|
+
* schema, o log carrega o motivo — e ele é o mesmo.
|
|
338
|
+
*
|
|
339
|
+
* Devolve `true` se gravou. Só engole falha de SCHEMA (`42P01`/`42703`): erro
|
|
340
|
+
* de permissão ou de restrição é defeito nosso e tem de subir.
|
|
341
|
+
*/
|
|
342
|
+
async function recordJobRunBestEffort(db, tenantId, def, decision, outcome) {
|
|
343
|
+
try {
|
|
344
|
+
await (0, context_js_1.withContext)(db, { tenantId }, (tx) => recordJobRun(tx, tenantId, def, decision, outcome));
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
const code = err?.code;
|
|
349
|
+
if (code && OLD_SCHEMA_SQLSTATES.has(code))
|
|
350
|
+
return false;
|
|
351
|
+
throw err;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Os workers deste produto.
|
|
356
|
+
*
|
|
357
|
+
* Declarados aqui, e não junto de cada entrypoint, para que a lista seja
|
|
358
|
+
* enumerável — é ela que o inventário do gate confere contra o `render.yaml`.
|
|
359
|
+
*/
|
|
360
|
+
exports.COLLECTION_CYCLE_JOB = {
|
|
361
|
+
name: 'collection-cycle',
|
|
362
|
+
version: 1,
|
|
363
|
+
requires: ['office.collection-cycle.v1'],
|
|
364
|
+
minContractVersion: 1,
|
|
365
|
+
};
|
|
366
|
+
exports.SAAS_BILLING_JOB = {
|
|
367
|
+
name: 'saas-billing-cycle',
|
|
368
|
+
version: 1,
|
|
369
|
+
requires: ['office.saas-billing-cycle.v1'],
|
|
370
|
+
minContractVersion: 1,
|
|
371
|
+
};
|
|
372
|
+
/**
|
|
373
|
+
* O worker fiscal (Onda B · Fase 2).
|
|
374
|
+
*
|
|
375
|
+
* Exige DUAS capacidades, e a segunda é o ponto: `office.fiscal-ingestion.v1`
|
|
376
|
+
* (0056) descreve onde o documento cabe; `office.fiscal-sync-worker.v1` (0058)
|
|
377
|
+
* descreve o que o worker precisa para OPERAR — lease, política, disjuntor,
|
|
378
|
+
* fila humana, cobertura.
|
|
379
|
+
*
|
|
380
|
+
* Separá-las importa numa janela concreta: um banco que já tem a 0056 e ainda
|
|
381
|
+
* não tem a 0058 sabe guardar documento e NÃO sabe travar a vez. Um worker que
|
|
382
|
+
* exigisse só a primeira rodaria ali, sem exclusão mútua, e duas execuções
|
|
383
|
+
* simultâneas consultariam o mesmo CNPJ contra a Receita.
|
|
384
|
+
*/
|
|
385
|
+
exports.FISCAL_SYNC_JOB = {
|
|
386
|
+
name: 'fiscal-sync',
|
|
387
|
+
// `version: 2` porque o worker passou a GRAVAR `fiscal_sync_run.contract_version`
|
|
388
|
+
// (migration 0059). Um worker desta versão contra um banco anterior falharia no
|
|
389
|
+
// `INSERT` — depois do lease tomado e possivelmente depois da requisição ao
|
|
390
|
+
// provedor, isto é, com o consumo já gasto e o cursor parado. O pior lugar
|
|
391
|
+
// possível para descobrir uma incompatibilidade de schema.
|
|
392
|
+
version: 2,
|
|
393
|
+
// `office.fiscal-contract-version.v1` é a exigência NOVA, e ela é uma CHAVE —
|
|
394
|
+
// não um `minContractVersion` maior. `contract_version` é a versão do formato
|
|
395
|
+
// do registro e é global: a sondagem recusa a tabela inteira se as linhas
|
|
396
|
+
// divergirem, de modo que subir a versão por causa de uma coluna do motor
|
|
397
|
+
// fiscal derrubaria também cobrança e faturamento. Capacidade se compara por
|
|
398
|
+
// continência; é essa a dimensão em que esta mudança acontece.
|
|
399
|
+
requires: [
|
|
400
|
+
'office.fiscal-ingestion.v1',
|
|
401
|
+
'office.fiscal-sync-worker.v1',
|
|
402
|
+
'office.fiscal-contract-version.v1',
|
|
403
|
+
],
|
|
404
|
+
minContractVersion: 1,
|
|
405
|
+
};
|
|
406
|
+
exports.KNOWN_JOBS = [
|
|
407
|
+
exports.COLLECTION_CYCLE_JOB,
|
|
408
|
+
exports.SAAS_BILLING_JOB,
|
|
409
|
+
exports.FISCAL_SYNC_JOB,
|
|
410
|
+
];
|
|
411
|
+
//# sourceMappingURL=job-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"job-contract.js","sourceRoot":"","sources":["../../../src/platform/job-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.invitePortalUser = invitePortalUser;
|
|
4
|
+
exports.listPortalUsers = listPortalUsers;
|
|
5
|
+
exports.revokePortalAccess = revokePortalAccess;
|
|
6
|
+
const shared_1 = require("@baruk/shared");
|
|
7
|
+
const audit_js_1 = require("../audit/audit.js");
|
|
8
|
+
const password_reset_js_1 = require("../auth/password-reset.js");
|
|
9
|
+
const repository_js_1 = require("../users/repository.js");
|
|
10
|
+
const PORTAL_ROLE_KEY = 'client_titular';
|
|
11
|
+
async function invitePortalUser(tx, input) {
|
|
12
|
+
const tenantId = await currentTenantId(tx);
|
|
13
|
+
// O cliente precisa existir NESTE tenant. A RLS já garantiria, mas uma
|
|
14
|
+
// mensagem clara vale mais que um erro de FK.
|
|
15
|
+
const client = await tx `
|
|
16
|
+
SELECT id FROM client WHERE id = ${input.clientId} AND deleted_at IS NULL
|
|
17
|
+
`;
|
|
18
|
+
if (!client[0])
|
|
19
|
+
throw new shared_1.NotFoundError('Cliente não encontrado');
|
|
20
|
+
const existing = await tx `
|
|
21
|
+
SELECT id, full_name, user_type, status FROM "user"
|
|
22
|
+
WHERE email = ${input.email} AND deleted_at IS NULL
|
|
23
|
+
`;
|
|
24
|
+
let userId;
|
|
25
|
+
let fullName;
|
|
26
|
+
let isNewUser;
|
|
27
|
+
// Reconvidar quem ainda não ativou precisa emitir um token novo. Sem isto o
|
|
28
|
+
// usuário fica preso: o primeiro convite não chegou (ou expirou) e nenhum
|
|
29
|
+
// reenvio produz link, porque só o cadastro inicial emitia token.
|
|
30
|
+
let isPendingActivation = false;
|
|
31
|
+
if (existing[0]) {
|
|
32
|
+
// Um e-mail de staff não vira acesso de portal por convite. Os dois tipos
|
|
33
|
+
// têm superfícies e escopos distintos, e converter silenciosamente daria a
|
|
34
|
+
// um colaborador do escritório uma sessão de cliente.
|
|
35
|
+
if (existing[0].user_type !== 'client_portal') {
|
|
36
|
+
throw new shared_1.ConflictError('Este e-mail já pertence a um usuário interno. Use um e-mail diferente para o acesso do cliente.');
|
|
37
|
+
}
|
|
38
|
+
userId = existing[0].id;
|
|
39
|
+
fullName = existing[0].full_name;
|
|
40
|
+
isNewUser = false;
|
|
41
|
+
// Só quem ainda não ativou recebe token novo. Emitir para um usuário já
|
|
42
|
+
// ativo transformaria o convite em redefinição de senha à revelia do
|
|
43
|
+
// cliente — quem convida não pode provocar isso.
|
|
44
|
+
isPendingActivation = existing[0].status === 'invited';
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
userId = (0, shared_1.uuidv7)();
|
|
48
|
+
fullName = input.fullName;
|
|
49
|
+
isNewUser = true;
|
|
50
|
+
await tx `
|
|
51
|
+
INSERT INTO "user" (id, email, full_name, user_type, status, auth_provider)
|
|
52
|
+
VALUES (${userId}, ${input.email}, ${input.fullName}, 'client_portal', 'invited', 'password')
|
|
53
|
+
`;
|
|
54
|
+
}
|
|
55
|
+
// Membership no tenant — sem ela o usuário não resolve tenant no login.
|
|
56
|
+
const membership = await tx `
|
|
57
|
+
SELECT id FROM membership
|
|
58
|
+
WHERE user_id = ${userId} AND tenant_id = ${tenantId} AND deleted_at IS NULL
|
|
59
|
+
`;
|
|
60
|
+
if (!membership[0]) {
|
|
61
|
+
await tx `
|
|
62
|
+
INSERT INTO membership (id, tenant_id, user_id, status, invited_by)
|
|
63
|
+
VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, 'invited', ${input.invitedBy})
|
|
64
|
+
`;
|
|
65
|
+
await (0, repository_js_1.setUserRole)(tx, userId, PORTAL_ROLE_KEY);
|
|
66
|
+
}
|
|
67
|
+
// O vínculo com o cliente. Idempotente: reconvidar não duplica.
|
|
68
|
+
const access = await tx `
|
|
69
|
+
INSERT INTO client_portal_access (id, tenant_id, user_id, client_id, status)
|
|
70
|
+
VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, ${input.clientId}, 'active')
|
|
71
|
+
ON CONFLICT (tenant_id, user_id, client_id) DO UPDATE SET status = 'active'
|
|
72
|
+
RETURNING id
|
|
73
|
+
`;
|
|
74
|
+
let activationToken = null;
|
|
75
|
+
if (isNewUser || isPendingActivation) {
|
|
76
|
+
const activation = await (0, password_reset_js_1.createActivationToken)(tx, { userId, tenantId });
|
|
77
|
+
activationToken = activation.token;
|
|
78
|
+
}
|
|
79
|
+
await (0, audit_js_1.appendAudit)(tx, {
|
|
80
|
+
actorId: input.invitedBy,
|
|
81
|
+
action: 'portal_user_invited',
|
|
82
|
+
resourceType: 'client_portal_access',
|
|
83
|
+
resourceId: access[0].id,
|
|
84
|
+
// O token nunca entra na auditoria, nem em metadata: o registro é lido por
|
|
85
|
+
// gente que não deve poder assumir a conta do cliente.
|
|
86
|
+
metadata: { email: input.email, clientId: input.clientId, isNewUser, isPendingActivation },
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
userId,
|
|
90
|
+
email: input.email,
|
|
91
|
+
fullName,
|
|
92
|
+
clientId: input.clientId,
|
|
93
|
+
activationToken,
|
|
94
|
+
alreadyHadAccess: !isNewUser && membership.length > 0,
|
|
95
|
+
isReinvite: isPendingActivation,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function listPortalUsers(tx, clientId) {
|
|
99
|
+
const rows = await tx `
|
|
100
|
+
SELECT u.id AS user_id, u.email, u.full_name, u.status,
|
|
101
|
+
cpa.status AS access_status, u.last_login_at
|
|
102
|
+
FROM client_portal_access cpa
|
|
103
|
+
JOIN "user" u ON u.id = cpa.user_id
|
|
104
|
+
WHERE cpa.client_id = ${clientId} AND u.deleted_at IS NULL
|
|
105
|
+
ORDER BY u.full_name
|
|
106
|
+
`;
|
|
107
|
+
return rows.map((r) => ({
|
|
108
|
+
userId: r.user_id,
|
|
109
|
+
email: r.email,
|
|
110
|
+
fullName: r.full_name,
|
|
111
|
+
status: r.status,
|
|
112
|
+
accessStatus: r.access_status,
|
|
113
|
+
lastLoginAt: r.last_login_at ? r.last_login_at.toISOString() : null,
|
|
114
|
+
}));
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Revoga o acesso. Não apaga o usuário nem a trilha: quem enviou um documento
|
|
118
|
+
* continua identificável depois de perder o acesso — é justamente isso que
|
|
119
|
+
* torna a prova utilizável meses depois.
|
|
120
|
+
*/
|
|
121
|
+
async function revokePortalAccess(tx, input) {
|
|
122
|
+
const rows = await tx `
|
|
123
|
+
UPDATE client_portal_access
|
|
124
|
+
SET status = 'revoked'
|
|
125
|
+
WHERE client_id = ${input.clientId} AND user_id = ${input.userId} AND status = 'active'
|
|
126
|
+
RETURNING id
|
|
127
|
+
`;
|
|
128
|
+
if (!rows[0])
|
|
129
|
+
throw new shared_1.NotFoundError('Acesso ativo não encontrado');
|
|
130
|
+
await (0, audit_js_1.appendAudit)(tx, {
|
|
131
|
+
actorId: input.revokedBy,
|
|
132
|
+
action: 'portal_access_revoked',
|
|
133
|
+
resourceType: 'client_portal_access',
|
|
134
|
+
resourceId: rows[0].id,
|
|
135
|
+
metadata: { clientId: input.clientId, userId: input.userId },
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
async function currentTenantId(tx) {
|
|
139
|
+
const rows = await tx `
|
|
140
|
+
SELECT current_setting('app.current_tenant')::uuid AS tenant_id
|
|
141
|
+
`;
|
|
142
|
+
return rows[0].tenant_id;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=provisioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../../src/portal/provisioning.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Serialização canônica (RFC-CAPABILITY-PRICING-ENGINE-001 §22.1 F2) — usada
|
|
4
|
+
* exclusivamente para compor o `fingerprint`/`quoteId` (nunca para persistir
|
|
5
|
+
* ou transportar dados). `JSON.stringify` cru depende da ordem de inserção
|
|
6
|
+
* das chaves do objeto — dois `PricingRequest` economicamente idênticos, mas
|
|
7
|
+
* construídos com `addonQuantities`/Records em ordem de chave diferente,
|
|
8
|
+
* produziam hashes diferentes antes deste módulo (achado do Design Review,
|
|
9
|
+
* §22.1). `canonicalize` ordena chaves recursivamente em qualquer nível de
|
|
10
|
+
* objeto/Record/Map aninhado — arrays preservam ordem (a ordem de array é
|
|
11
|
+
* semanticamente relevante quando existe; coleções sem ordem própria, como
|
|
12
|
+
* `bundleRules`, são pré-ordenadas pelo chamador antes de chegar aqui).
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.canonicalStringify = canonicalStringify;
|
|
16
|
+
function canonicalize(value) {
|
|
17
|
+
if (value instanceof Map) {
|
|
18
|
+
const entries = Array.from(value.entries())
|
|
19
|
+
.map(([k, v]) => [String(k), canonicalize(v)])
|
|
20
|
+
.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
|
|
21
|
+
const record = {};
|
|
22
|
+
for (const [k, v] of entries)
|
|
23
|
+
record[k] = v;
|
|
24
|
+
return record;
|
|
25
|
+
}
|
|
26
|
+
if (Array.isArray(value)) {
|
|
27
|
+
return value.map(canonicalize);
|
|
28
|
+
}
|
|
29
|
+
if (value !== null && typeof value === 'object') {
|
|
30
|
+
const record = value;
|
|
31
|
+
const result = {};
|
|
32
|
+
for (const key of Object.keys(record).sort()) {
|
|
33
|
+
result[key] = canonicalize(record[key]);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
function canonicalStringify(value) {
|
|
40
|
+
return JSON.stringify(canonicalize(value));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/pricing-engine/canonical.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAyBH,gDAEC;AAzBD,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -41,7 +41,12 @@ class PricingEngineError extends Error {
|
|
|
41
41
|
this.ruleIds = ruleIds;
|
|
42
42
|
}
|
|
43
43
|
toJSON() {
|
|
44
|
-
return {
|
|
44
|
+
return {
|
|
45
|
+
code: this.code,
|
|
46
|
+
errorClass: this.errorClass,
|
|
47
|
+
message: this.message,
|
|
48
|
+
ruleIds: this.ruleIds,
|
|
49
|
+
};
|
|
45
50
|
}
|
|
46
51
|
}
|
|
47
52
|
exports.PricingEngineError = PricingEngineError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pricing-engine/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pricing-engine/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA8BH,MAAM,WAAW,GAAgD;IAC/D,2BAA2B,EAAE,eAAe;IAC5C,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAAE,YAAY;IAChC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,WAAW;IACpC,gBAAgB,EAAE,YAAY;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,YAAY;IACjC,6BAA6B,EAAE,eAAe;IAC9C,oBAAoB,EAAE,eAAe;IACrC,qBAAqB,EAAE,WAAW;IAClC,wBAAwB,EAAE,YAAY;CACvC,CAAC;AAEF,MAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAmB;IACvB,UAAU,CAAoB;IACvC,2EAA2E;IAClE,OAAO,CAAW;IAE3B,YAAY,IAAsB,EAAE,OAAe,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QAMJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF;AA3BD,gDA2BC"}
|