@baruk/core 0.4.2 → 0.6.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 +4 -4
- package/CHANGELOG.md +42 -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/service.d.ts +21 -0
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +46 -1
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +41 -1
- package/dist/billing/ar-repository.d.ts.map +1 -1
- package/dist/billing/ar-repository.js +82 -6
- package/dist/billing/ar-repository.js.map +1 -1
- package/dist/billing/provider-account.d.ts +38 -0
- package/dist/billing/provider-account.d.ts.map +1 -1
- package/dist/billing/provider-account.js +58 -2
- package/dist/billing/provider-account.js.map +1 -1
- package/dist/billing/repository.d.ts +44 -0
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +49 -5
- 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/service.js +46 -1
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +82 -6
- package/dist/cjs/billing/ar-repository.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +60 -1
- package/dist/cjs/billing/provider-account.js.map +1 -1
- package/dist/cjs/billing/repository.js +51 -5
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/ibge.js +117 -0
- package/dist/cjs/clients/ibge.js.map +1 -0
- package/dist/cjs/clients/registry/http.js +157 -0
- package/dist/cjs/clients/registry/http.js.map +1 -0
- package/dist/cjs/clients/registry/ibge-municipios.js +28 -0
- package/dist/cjs/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/cjs/clients/registry/ibge.js +63 -0
- package/dist/cjs/clients/registry/ibge.js.map +1 -0
- package/dist/cjs/clients/registry/lookup.js +191 -0
- package/dist/cjs/clients/registry/lookup.js.map +1 -0
- package/dist/cjs/clients/registry/provider.js +34 -0
- package/dist/cjs/clients/registry/provider.js.map +1 -0
- package/dist/cjs/clients/registry/resolve.js +47 -0
- package/dist/cjs/clients/registry/resolve.js.map +1 -0
- package/dist/cjs/clients/registry/serpro.js +149 -0
- package/dist/cjs/clients/registry/serpro.js.map +1 -0
- package/dist/cjs/clients/registry/service.js +230 -0
- package/dist/cjs/clients/registry/service.js.map +1 -0
- package/dist/cjs/clients/registry/synthetic.js +165 -0
- package/dist/cjs/clients/registry/synthetic.js.map +1 -0
- package/dist/cjs/clients/repository.js +190 -9
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +190 -0
- package/dist/cjs/collection/branding.js.map +1 -1
- package/dist/cjs/collection/clearance-store.js +74 -0
- package/dist/cjs/collection/clearance-store.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +65 -2
- package/dist/cjs/collection/communication-runtime.js.map +1 -1
- package/dist/cjs/collection/engine.js +20 -0
- package/dist/cjs/collection/engine.js.map +1 -1
- package/dist/cjs/collection/policy.js +29 -1
- package/dist/cjs/collection/policy.js.map +1 -1
- package/dist/cjs/communication/clearance.js +18 -0
- package/dist/cjs/communication/clearance.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +5 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
- package/dist/cjs/communication/engine.js +12 -0
- package/dist/cjs/communication/engine.js.map +1 -1
- package/dist/cjs/communication/policy.js.map +1 -1
- 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 +330 -17
- package/dist/cjs/competence/repository.js.map +1 -1
- 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 +116 -0
- package/dist/cjs/db/provision-e2e-identity.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/collection/authorization.js +186 -0
- package/dist/cjs/fiscal/collection/authorization.js.map +1 -0
- package/dist/cjs/fiscal/collection/competence.js +97 -0
- package/dist/cjs/fiscal/collection/competence.js.map +1 -0
- package/dist/cjs/fiscal/collection/first-contact.js +204 -0
- package/dist/cjs/fiscal/collection/first-contact.js.map +1 -0
- package/dist/cjs/fiscal/collection/plan.js +122 -0
- package/dist/cjs/fiscal/collection/plan.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 +137 -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/inspect.js +182 -0
- package/dist/cjs/fiscal/credentials/inspect.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/onboarding.js +266 -0
- package/dist/cjs/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/cjs/fiscal/credentials/readiness.js +190 -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/enrollment.js +134 -0
- package/dist/cjs/fiscal/enrollment.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 +380 -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 +461 -73
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +164 -19
- 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.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 +173 -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/rbac/catalog.js +110 -0
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/subscription-billing/index.js +9 -1
- package/dist/cjs/subscription-billing/index.js.map +1 -1
- package/dist/cjs/subscription-billing/platform-exemption.js +121 -0
- package/dist/cjs/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/cjs/subscription-billing/service.js +246 -78
- package/dist/cjs/subscription-billing/service.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/settings.js +224 -0
- package/dist/cjs/tenancy/settings.js.map +1 -0
- package/dist/cjs/users/repository.js +24 -1
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +92 -5
- 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 +112 -0
- package/dist/clients/ibge.js.map +1 -0
- package/dist/clients/registry/http.d.ts +61 -0
- package/dist/clients/registry/http.d.ts.map +1 -0
- package/dist/clients/registry/http.js +151 -0
- package/dist/clients/registry/http.js.map +1 -0
- package/dist/clients/registry/ibge-municipios.d.ts +25 -0
- package/dist/clients/registry/ibge-municipios.d.ts.map +1 -0
- package/dist/clients/registry/ibge-municipios.js +25 -0
- package/dist/clients/registry/ibge-municipios.js.map +1 -0
- package/dist/clients/registry/ibge.d.ts +62 -0
- package/dist/clients/registry/ibge.d.ts.map +1 -0
- package/dist/clients/registry/ibge.js +57 -0
- package/dist/clients/registry/ibge.js.map +1 -0
- package/dist/clients/registry/lookup.d.ts +94 -0
- package/dist/clients/registry/lookup.d.ts.map +1 -0
- package/dist/clients/registry/lookup.js +184 -0
- package/dist/clients/registry/lookup.js.map +1 -0
- package/dist/clients/registry/provider.d.ts +124 -0
- package/dist/clients/registry/provider.d.ts.map +1 -0
- package/dist/clients/registry/provider.js +39 -0
- package/dist/clients/registry/provider.js.map +1 -0
- package/dist/clients/registry/resolve.d.ts +36 -0
- package/dist/clients/registry/resolve.d.ts.map +1 -0
- package/dist/clients/registry/resolve.js +44 -0
- package/dist/clients/registry/resolve.js.map +1 -0
- package/dist/clients/registry/serpro.d.ts +57 -0
- package/dist/clients/registry/serpro.d.ts.map +1 -0
- package/dist/clients/registry/serpro.js +143 -0
- package/dist/clients/registry/serpro.js.map +1 -0
- package/dist/clients/registry/service.d.ts +59 -0
- package/dist/clients/registry/service.d.ts.map +1 -0
- package/dist/clients/registry/service.js +225 -0
- package/dist/clients/registry/service.js.map +1 -0
- package/dist/clients/registry/synthetic.d.ts +30 -0
- package/dist/clients/registry/synthetic.d.ts.map +1 -0
- package/dist/clients/registry/synthetic.js +161 -0
- package/dist/clients/registry/synthetic.js.map +1 -0
- package/dist/clients/repository.d.ts +158 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +186 -9
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +65 -0
- package/dist/collection/branding.d.ts.map +1 -1
- package/dist/collection/branding.js +186 -0
- package/dist/collection/branding.js.map +1 -1
- 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-runtime.d.ts +37 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -1
- package/dist/collection/communication-runtime.js +63 -1
- package/dist/collection/communication-runtime.js.map +1 -1
- package/dist/collection/engine.d.ts +23 -0
- package/dist/collection/engine.d.ts.map +1 -1
- package/dist/collection/engine.js +20 -0
- package/dist/collection/engine.js.map +1 -1
- package/dist/collection/policy.d.ts +25 -0
- package/dist/collection/policy.d.ts.map +1 -1
- package/dist/collection/policy.js +27 -0
- package/dist/collection/policy.js.map +1 -1
- 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/dry-run-scenario.d.ts.map +1 -1
- package/dist/communication/dry-run-scenario.js +5 -0
- package/dist/communication/dry-run-scenario.js.map +1 -1
- package/dist/communication/engine.d.ts +10 -0
- package/dist/communication/engine.d.ts.map +1 -1
- package/dist/communication/engine.js +12 -0
- package/dist/communication/engine.js.map +1 -1
- package/dist/communication/policy.d.ts +16 -0
- package/dist/communication/policy.d.ts.map +1 -1
- package/dist/communication/policy.js.map +1 -1
- 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 +139 -1
- package/dist/competence/repository.d.ts.map +1 -1
- package/dist/competence/repository.js +325 -17
- package/dist/competence/repository.js.map +1 -1
- 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 +199 -32
- 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 +114 -0
- package/dist/db/provision-e2e-identity.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/collection/authorization.d.ts +152 -0
- package/dist/fiscal/collection/authorization.d.ts.map +1 -0
- package/dist/fiscal/collection/authorization.js +178 -0
- package/dist/fiscal/collection/authorization.js.map +1 -0
- package/dist/fiscal/collection/competence.d.ts +66 -0
- package/dist/fiscal/collection/competence.d.ts.map +1 -0
- package/dist/fiscal/collection/competence.js +90 -0
- package/dist/fiscal/collection/competence.js.map +1 -0
- package/dist/fiscal/collection/first-contact.d.ts +103 -0
- package/dist/fiscal/collection/first-contact.d.ts.map +1 -0
- package/dist/fiscal/collection/first-contact.js +201 -0
- package/dist/fiscal/collection/first-contact.js.map +1 -0
- package/dist/fiscal/collection/plan.d.ts +74 -0
- package/dist/fiscal/collection/plan.d.ts.map +1 -0
- package/dist/fiscal/collection/plan.js +119 -0
- package/dist/fiscal/collection/plan.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 +114 -0
- package/dist/fiscal/coverage/model.d.ts.map +1 -0
- package/dist/fiscal/coverage/model.js +130 -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/inspect.d.ts +114 -0
- package/dist/fiscal/credentials/inspect.d.ts.map +1 -0
- package/dist/fiscal/credentials/inspect.js +178 -0
- package/dist/fiscal/credentials/inspect.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/onboarding.d.ts +119 -0
- package/dist/fiscal/credentials/onboarding.d.ts.map +1 -0
- package/dist/fiscal/credentials/onboarding.js +259 -0
- package/dist/fiscal/credentials/onboarding.js.map +1 -0
- package/dist/fiscal/credentials/readiness.d.ts +119 -0
- package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
- package/dist/fiscal/credentials/readiness.js +186 -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/enrollment.d.ts +91 -0
- package/dist/fiscal/enrollment.d.ts.map +1 -0
- package/dist/fiscal/enrollment.js +126 -0
- package/dist/fiscal/enrollment.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 +99 -0
- package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
- package/dist/fiscal/transport/synthetic-tls.js +374 -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 +145 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +120 -7
- 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 +162 -18
- 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 +114 -2
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/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 +169 -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/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +110 -0
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/subscription-billing/index.d.ts +8 -5
- package/dist/subscription-billing/index.d.ts.map +1 -1
- package/dist/subscription-billing/index.js +4 -3
- package/dist/subscription-billing/index.js.map +1 -1
- package/dist/subscription-billing/platform-exemption.d.ts +89 -0
- package/dist/subscription-billing/platform-exemption.d.ts.map +1 -0
- package/dist/subscription-billing/platform-exemption.js +113 -0
- package/dist/subscription-billing/platform-exemption.js.map +1 -0
- package/dist/subscription-billing/service.d.ts +74 -0
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +182 -16
- package/dist/subscription-billing/service.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/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 +16 -1
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +24 -1
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +69 -1
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +88 -5
- package/dist/vault/repository.js.map +1 -1
- package/package.json +10 -2
- 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/src/db/migrations/0060_fiscal_credential_vault_and_run_authorization.sql +321 -0
- package/src/db/migrations/0061_client_official_registry_provenance.sql +193 -0
- package/src/db/migrations/0062_first_contact_and_capability_truth.sql +119 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/tenancy/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,22 @@ export interface TenantMember {
|
|
|
14
14
|
export declare function listTenantMembers(tx: Tx): Promise<TenantMember[]>;
|
|
15
15
|
/** Substitui o(s) papel(is) do usuário no tenant por um único papel (por key). */
|
|
16
16
|
export declare function setUserRole(tx: Tx, userId: string, roleKey: string): Promise<void>;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Ativa/desativa (ou revoga) a membership. Bloqueia desativar o último admin.
|
|
19
|
+
*
|
|
20
|
+
* Tirar o acesso **derruba as sessões abertas** daquele tenant. Sem isso, a
|
|
21
|
+
* revogação só valia para quem tentasse entrar de novo: quem já estava dentro
|
|
22
|
+
* seguia trabalhando até a sessão expirar — até doze horas depois. O escritório
|
|
23
|
+
* que demite alguém à tarde espera que o acesso acabe naquele instante, não no
|
|
24
|
+
* dia seguinte.
|
|
25
|
+
*
|
|
26
|
+
* O `authenticate` já reconfere a membership a cada requisição, e sozinho
|
|
27
|
+
* bastaria. Derrubar a sessão aqui é a segunda camada: torna a intenção
|
|
28
|
+
* explícita no ato, e não depende de nenhuma outra parte lembrar da regra.
|
|
29
|
+
*
|
|
30
|
+
* Só as sessões DAQUELE tenant caem. Quem atende dois escritórios não perde o
|
|
31
|
+
* acesso ao outro por causa deste.
|
|
32
|
+
*/
|
|
18
33
|
export declare function setMembershipStatus(tx: Tx, userId: string, status: 'active' | 'invited' | 'revoked'): Promise<number>;
|
|
19
34
|
export interface InviteUserInput {
|
|
20
35
|
email: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BvE;AAeD,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxF;AAWD
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAI1C;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA8BvE;AAeD,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBxF;AAWD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GACvC,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB;8EAC0E;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0D1F;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,4BAA4B,CAAC,CAkDvC"}
|
package/dist/users/repository.js
CHANGED
|
@@ -66,7 +66,22 @@ async function isUserAdmin(tx, userId) {
|
|
|
66
66
|
`;
|
|
67
67
|
return (rows[0]?.n ?? 0) > 0;
|
|
68
68
|
}
|
|
69
|
-
/**
|
|
69
|
+
/**
|
|
70
|
+
* Ativa/desativa (ou revoga) a membership. Bloqueia desativar o último admin.
|
|
71
|
+
*
|
|
72
|
+
* Tirar o acesso **derruba as sessões abertas** daquele tenant. Sem isso, a
|
|
73
|
+
* revogação só valia para quem tentasse entrar de novo: quem já estava dentro
|
|
74
|
+
* seguia trabalhando até a sessão expirar — até doze horas depois. O escritório
|
|
75
|
+
* que demite alguém à tarde espera que o acesso acabe naquele instante, não no
|
|
76
|
+
* dia seguinte.
|
|
77
|
+
*
|
|
78
|
+
* O `authenticate` já reconfere a membership a cada requisição, e sozinho
|
|
79
|
+
* bastaria. Derrubar a sessão aqui é a segunda camada: torna a intenção
|
|
80
|
+
* explícita no ato, e não depende de nenhuma outra parte lembrar da regra.
|
|
81
|
+
*
|
|
82
|
+
* Só as sessões DAQUELE tenant caem. Quem atende dois escritórios não perde o
|
|
83
|
+
* acesso ao outro por causa deste.
|
|
84
|
+
*/
|
|
70
85
|
export async function setMembershipStatus(tx, userId, status) {
|
|
71
86
|
if (status !== 'active' &&
|
|
72
87
|
(await isUserAdmin(tx, userId)) &&
|
|
@@ -79,6 +94,14 @@ export async function setMembershipStatus(tx, userId, status) {
|
|
|
79
94
|
AND tenant_id = current_setting('app.current_tenant')::uuid
|
|
80
95
|
RETURNING id
|
|
81
96
|
`;
|
|
97
|
+
if (status !== 'active') {
|
|
98
|
+
await tx `
|
|
99
|
+
UPDATE user_session SET revoked_at = now()
|
|
100
|
+
WHERE user_id = ${userId}
|
|
101
|
+
AND revoked_at IS NULL
|
|
102
|
+
AND active_tenant_id = current_setting('app.current_tenant')::uuid
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
82
105
|
return rows.count;
|
|
83
106
|
}
|
|
84
107
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAM;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CASpB;;;;;;;;;;;GAWA,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,CAAC,OAAO;QACjB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,gBAAgB,EAAE,CAAC,CAAC,MAAM;QAC1B,KAAK,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;KACzB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,EAAM,EAAE,aAAsB;IAC7D,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;;;;wBAMhB,eAAe;aAC1B,aAAa,IAAI,IAAI,kCAAkC,aAAa,IAAI,IAAI;GACtF,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc,EAAE,OAAe;IACvE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxD,IACE,CAAC,aAAa;QACd,CAAC,MAAM,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,EAC3C,CAAC;QACD,MAAM,IAAI,aAAa,CAAC,0DAA0D,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAEpB,mCAAmC,OAAO,wBAAwB,CAAC;IACpE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,EAAE,CAAA;;sBAEY,MAAM;;GAEzB,CAAC;IACF,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,kDAAkD,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;GAC1F,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,EAAM,EAAE,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAiB;;;yBAGf,MAAM,8CAA8C,eAAe;GACzF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/users/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,19 @@ import { type Keyring } from './crypto.js';
|
|
|
7
7
|
* camada de rota exige a permissão `vault.credential.decrypt` + auditoria.
|
|
8
8
|
*/
|
|
9
9
|
export type VaultCategory = 'api_key' | 'oauth' | 'smtp' | 'certificate' | 'token' | 'gov' | 'billing' | 'database' | 'webhook' | 'generic';
|
|
10
|
+
export type VaultExposure = 'revealable' | 'write_only';
|
|
10
11
|
export interface CredentialMeta {
|
|
11
12
|
id: string;
|
|
12
13
|
clientId: string | null;
|
|
13
14
|
name: string;
|
|
14
15
|
category: VaultCategory;
|
|
15
16
|
provider: string | null;
|
|
17
|
+
/**
|
|
18
|
+
* `write_only` = não existe caminho de leitura para humano, por nenhuma rota.
|
|
19
|
+
* Material de certificado é `write_only` por RESTRIÇÃO no banco (0060), e não
|
|
20
|
+
* por disciplina desta camada.
|
|
21
|
+
*/
|
|
22
|
+
exposure: VaultExposure;
|
|
16
23
|
keyVersion: number;
|
|
17
24
|
metadata: Record<string, unknown>;
|
|
18
25
|
expiresAt: string | null;
|
|
@@ -30,14 +37,75 @@ export interface CreateCredentialInput {
|
|
|
30
37
|
expiresAt?: string | null;
|
|
31
38
|
createdBy?: string | null;
|
|
32
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* A classe de exposição de uma categoria.
|
|
42
|
+
*
|
|
43
|
+
* Material de certificado NUNCA é revelável, e a regra vive nos dois lugares de
|
|
44
|
+
* propósito: aqui, para que a gravação nasça certa, e no CHECK da 0060, para que
|
|
45
|
+
* um caminho que ninguém escreveu ainda também nasça certo.
|
|
46
|
+
*
|
|
47
|
+
* Sem esta função, `createCredential` — a porta genérica do cofre, usada por
|
|
48
|
+
* rotas e seeds — gravaria `revealable` e receberia uma violação de constraint.
|
|
49
|
+
* O comportamento seria seguro e a mensagem, incompreensível: um 500 de
|
|
50
|
+
* constraint onde deveria haver uma gravação correta.
|
|
51
|
+
*/
|
|
52
|
+
export declare function exposureFor(category: VaultCategory): VaultExposure;
|
|
33
53
|
export declare function createCredential(tx: Tx, keyring: Keyring, tenantId: string, input: CreateCredentialInput): Promise<CredentialMeta>;
|
|
34
54
|
export declare function listCredentials(tx: Tx, category?: string): Promise<CredentialMeta[]>;
|
|
35
55
|
export declare function getCredentialMeta(tx: Tx, id: string): Promise<CredentialMeta>;
|
|
36
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Erro de quem pede para ver um segredo que não tem caminho de volta.
|
|
58
|
+
*
|
|
59
|
+
* Nomeado, e não um `NotFoundError`, porque a diferença importa para quem opera:
|
|
60
|
+
* "não existe" manda procurar; "não é revelável" manda substituir. Não carrega
|
|
61
|
+
* nome nem ponteiro — só a classe.
|
|
62
|
+
*/
|
|
63
|
+
export declare class SecretNotRevealableError extends Error {
|
|
64
|
+
constructor();
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Decifra e retorna o segredo em claro. A ROTA deve exigir
|
|
68
|
+
* `vault.credential.decrypt` e auditar.
|
|
69
|
+
*
|
|
70
|
+
* ## O portão que faltava
|
|
71
|
+
*
|
|
72
|
+
* Esta função era o caminho ÚNICO de saída do cofre, e ela não perguntava que
|
|
73
|
+
* tipo de segredo estava devolvendo. Para uma chave de API isso é o
|
|
74
|
+
* comportamento desejado. Para o envelope de um certificado digital — que
|
|
75
|
+
* carrega a CHAVE PRIVADA do cliente em base64 — era a porta dos fundos: um
|
|
76
|
+
* `POST .../reveal` devolvia o material inteiro para a tela, e o papel
|
|
77
|
+
* `accountant` do catálogo já carregava a permissão.
|
|
78
|
+
*
|
|
79
|
+
* A recusa acontece DEPOIS de ler a linha e ANTES de decifrar: nem o custo da
|
|
80
|
+
* decifração é pago, e o texto em claro nunca chega a existir em memória.
|
|
81
|
+
*/
|
|
37
82
|
export declare function revealSecret(tx: Tx, keyring: Keyring, tenantId: string, id: string): Promise<{
|
|
38
83
|
meta: CredentialMeta;
|
|
39
84
|
secret: string;
|
|
40
85
|
}>;
|
|
86
|
+
/**
|
|
87
|
+
* O caminho de PROCESSO para um segredo write-only.
|
|
88
|
+
*
|
|
89
|
+
* ## Por que ela precisa existir, e por que não é exportada
|
|
90
|
+
*
|
|
91
|
+
* `revealSecret` passou a recusar `write_only` — o que fecha a rota humana e,
|
|
92
|
+
* sem esta função, quebraria o motor fiscal: `loadFiscalTlsMaterial` também
|
|
93
|
+
* decifra o mesmo envelope, e ele é justamente quem deve conseguir.
|
|
94
|
+
*
|
|
95
|
+
* A diferença entre os dois chamadores não é a permissão de quem pediu; é o
|
|
96
|
+
* DESTINO do texto em claro. Em `revealSecret` ele vira corpo de resposta HTTP e
|
|
97
|
+
* chega a uma tela. Aqui ele vira `Buffer` dentro de um `https.Agent`, é usado
|
|
98
|
+
* num handshake e é zerado — nunca atravessa a fronteira do processo.
|
|
99
|
+
*
|
|
100
|
+
* O nome grita o que a função faz porque é o único aviso que sobrevive a um
|
|
101
|
+
* autocomplete. E ela NÃO é reexportada pelo `index` do pacote: fora de
|
|
102
|
+
* `@baruk/core` não existe caminho para chamá-la, do mesmo modo que
|
|
103
|
+
* `grantFiscalSecretAccess` não existe fora daqui.
|
|
104
|
+
*/
|
|
105
|
+
export declare function revealWriteOnlySecretForProcess(tx: Tx, keyring: Keyring, tenantId: string, id: string): Promise<{
|
|
106
|
+
meta: CredentialMeta;
|
|
107
|
+
secret: string;
|
|
108
|
+
}>;
|
|
41
109
|
/**
|
|
42
110
|
* Resultado de uma busca por NOME, distinto de `revealSecret` (que busca por
|
|
43
111
|
* `id`). Três desfechos, e só um decifra:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/vault/repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAgC,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEzE;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,MAAM,GACN,aAAa,GACb,OAAO,GACP,KAAK,GACL,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/vault/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/vault/repository.js
CHANGED
|
@@ -7,6 +7,7 @@ function mapMeta(r) {
|
|
|
7
7
|
name: r.name,
|
|
8
8
|
category: r.category,
|
|
9
9
|
provider: r.provider,
|
|
10
|
+
exposure: r.exposure ?? 'revealable',
|
|
10
11
|
keyVersion: r.key_version,
|
|
11
12
|
metadata: r.metadata ?? {},
|
|
12
13
|
expiresAt: r.expires_at ? r.expires_at.toISOString() : null,
|
|
@@ -16,26 +17,43 @@ function mapMeta(r) {
|
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
const META_COLUMNS = `
|
|
19
|
-
id, client_id, name, category, provider, key_version, metadata,
|
|
20
|
+
id, client_id, name, category, provider, exposure, key_version, metadata,
|
|
20
21
|
expires_at, rotated_at, created_at, updated_at
|
|
21
22
|
`;
|
|
23
|
+
/**
|
|
24
|
+
* A classe de exposição de uma categoria.
|
|
25
|
+
*
|
|
26
|
+
* Material de certificado NUNCA é revelável, e a regra vive nos dois lugares de
|
|
27
|
+
* propósito: aqui, para que a gravação nasça certa, e no CHECK da 0060, para que
|
|
28
|
+
* um caminho que ninguém escreveu ainda também nasça certo.
|
|
29
|
+
*
|
|
30
|
+
* Sem esta função, `createCredential` — a porta genérica do cofre, usada por
|
|
31
|
+
* rotas e seeds — gravaria `revealable` e receberia uma violação de constraint.
|
|
32
|
+
* O comportamento seria seguro e a mensagem, incompreensível: um 500 de
|
|
33
|
+
* constraint onde deveria haver uma gravação correta.
|
|
34
|
+
*/
|
|
35
|
+
export function exposureFor(category) {
|
|
36
|
+
return category === 'certificate' ? 'write_only' : 'revealable';
|
|
37
|
+
}
|
|
22
38
|
export async function createCredential(tx, keyring, tenantId, input) {
|
|
23
39
|
const enc = encryptSecret(keyring, tenantId, input.secret);
|
|
40
|
+
const category = input.category ?? 'generic';
|
|
24
41
|
const rows = await tx `
|
|
25
42
|
INSERT INTO vault_credential (
|
|
26
43
|
id, tenant_id, client_id, name, category, provider,
|
|
27
|
-
ciphertext, iv, auth_tag, key_version, metadata, expires_at, created_by
|
|
44
|
+
ciphertext, iv, auth_tag, key_version, metadata, expires_at, created_by, exposure
|
|
28
45
|
) VALUES (
|
|
29
46
|
${uuidv7()},
|
|
30
47
|
current_setting('app.current_tenant')::uuid,
|
|
31
48
|
${input.clientId ?? null},
|
|
32
49
|
${input.name},
|
|
33
|
-
${
|
|
50
|
+
${category},
|
|
34
51
|
${input.provider ?? null},
|
|
35
52
|
${enc.ciphertext}, ${enc.iv}, ${enc.authTag}, ${enc.keyVersion},
|
|
36
53
|
${tx.json((input.metadata ?? {}))},
|
|
37
54
|
${input.expiresAt ?? null},
|
|
38
|
-
${input.createdBy ?? null}
|
|
55
|
+
${input.createdBy ?? null},
|
|
56
|
+
${exposureFor(category)}
|
|
39
57
|
)
|
|
40
58
|
RETURNING ${tx.unsafe(META_COLUMNS)}
|
|
41
59
|
`;
|
|
@@ -60,11 +78,76 @@ export async function getCredentialMeta(tx, id) {
|
|
|
60
78
|
throw new NotFoundError('Credencial não encontrada');
|
|
61
79
|
return mapMeta(rows[0]);
|
|
62
80
|
}
|
|
63
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Erro de quem pede para ver um segredo que não tem caminho de volta.
|
|
83
|
+
*
|
|
84
|
+
* Nomeado, e não um `NotFoundError`, porque a diferença importa para quem opera:
|
|
85
|
+
* "não existe" manda procurar; "não é revelável" manda substituir. Não carrega
|
|
86
|
+
* nome nem ponteiro — só a classe.
|
|
87
|
+
*/
|
|
88
|
+
export class SecretNotRevealableError extends Error {
|
|
89
|
+
constructor() {
|
|
90
|
+
super('Esta credencial é write-only: não existe caminho de leitura para humano.');
|
|
91
|
+
this.name = 'SecretNotRevealableError';
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Decifra e retorna o segredo em claro. A ROTA deve exigir
|
|
96
|
+
* `vault.credential.decrypt` e auditar.
|
|
97
|
+
*
|
|
98
|
+
* ## O portão que faltava
|
|
99
|
+
*
|
|
100
|
+
* Esta função era o caminho ÚNICO de saída do cofre, e ela não perguntava que
|
|
101
|
+
* tipo de segredo estava devolvendo. Para uma chave de API isso é o
|
|
102
|
+
* comportamento desejado. Para o envelope de um certificado digital — que
|
|
103
|
+
* carrega a CHAVE PRIVADA do cliente em base64 — era a porta dos fundos: um
|
|
104
|
+
* `POST .../reveal` devolvia o material inteiro para a tela, e o papel
|
|
105
|
+
* `accountant` do catálogo já carregava a permissão.
|
|
106
|
+
*
|
|
107
|
+
* A recusa acontece DEPOIS de ler a linha e ANTES de decifrar: nem o custo da
|
|
108
|
+
* decifração é pago, e o texto em claro nunca chega a existir em memória.
|
|
109
|
+
*/
|
|
64
110
|
export async function revealSecret(tx, keyring, tenantId, id) {
|
|
65
111
|
const rows = await tx `
|
|
66
112
|
SELECT ${tx.unsafe(META_COLUMNS)}, ciphertext, iv, auth_tag
|
|
67
113
|
FROM vault_credential WHERE id = ${id} AND deleted_at IS NULL
|
|
114
|
+
`;
|
|
115
|
+
if (!rows[0])
|
|
116
|
+
throw new NotFoundError('Credencial não encontrada');
|
|
117
|
+
const r = rows[0];
|
|
118
|
+
if ((r.exposure ?? 'revealable') === 'write_only')
|
|
119
|
+
throw new SecretNotRevealableError();
|
|
120
|
+
const secret = decryptSecret(keyring, tenantId, {
|
|
121
|
+
ciphertext: r.ciphertext,
|
|
122
|
+
iv: r.iv,
|
|
123
|
+
authTag: r.auth_tag,
|
|
124
|
+
keyVersion: r.key_version,
|
|
125
|
+
});
|
|
126
|
+
return { meta: mapMeta(r), secret };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* O caminho de PROCESSO para um segredo write-only.
|
|
130
|
+
*
|
|
131
|
+
* ## Por que ela precisa existir, e por que não é exportada
|
|
132
|
+
*
|
|
133
|
+
* `revealSecret` passou a recusar `write_only` — o que fecha a rota humana e,
|
|
134
|
+
* sem esta função, quebraria o motor fiscal: `loadFiscalTlsMaterial` também
|
|
135
|
+
* decifra o mesmo envelope, e ele é justamente quem deve conseguir.
|
|
136
|
+
*
|
|
137
|
+
* A diferença entre os dois chamadores não é a permissão de quem pediu; é o
|
|
138
|
+
* DESTINO do texto em claro. Em `revealSecret` ele vira corpo de resposta HTTP e
|
|
139
|
+
* chega a uma tela. Aqui ele vira `Buffer` dentro de um `https.Agent`, é usado
|
|
140
|
+
* num handshake e é zerado — nunca atravessa a fronteira do processo.
|
|
141
|
+
*
|
|
142
|
+
* O nome grita o que a função faz porque é o único aviso que sobrevive a um
|
|
143
|
+
* autocomplete. E ela NÃO é reexportada pelo `index` do pacote: fora de
|
|
144
|
+
* `@baruk/core` não existe caminho para chamá-la, do mesmo modo que
|
|
145
|
+
* `grantFiscalSecretAccess` não existe fora daqui.
|
|
146
|
+
*/
|
|
147
|
+
export async function revealWriteOnlySecretForProcess(tx, keyring, tenantId, id) {
|
|
148
|
+
const rows = await tx `
|
|
149
|
+
SELECT ${tx.unsafe(META_COLUMNS)}, ciphertext, iv, auth_tag
|
|
150
|
+
FROM vault_credential WHERE id = ${id} AND deleted_at IS NULL
|
|
68
151
|
`;
|
|
69
152
|
if (!rows[0])
|
|
70
153
|
throw new NotFoundError('Credencial não encontrada');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/vault/repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/vault/repository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@baruk/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -23,6 +23,12 @@
|
|
|
23
23
|
"import": "./dist/pricing-engine/index.js",
|
|
24
24
|
"require": "./dist/cjs/pricing-engine/index.js",
|
|
25
25
|
"default": "./dist/pricing-engine/index.js"
|
|
26
|
+
},
|
|
27
|
+
"./fiscal-fixtures": {
|
|
28
|
+
"types": "./dist/fiscal/ingestion/__fixtures__/nfse.d.ts",
|
|
29
|
+
"import": "./dist/fiscal/ingestion/__fixtures__/nfse.js",
|
|
30
|
+
"require": "./dist/cjs/fiscal/ingestion/__fixtures__/nfse.js",
|
|
31
|
+
"default": "./dist/fiscal/ingestion/__fixtures__/nfse.js"
|
|
26
32
|
}
|
|
27
33
|
},
|
|
28
34
|
"files": [
|
|
@@ -61,6 +67,8 @@
|
|
|
61
67
|
"migrate": "tsx src/db/migrate.ts",
|
|
62
68
|
"seed": "tsx src/db/seed.ts",
|
|
63
69
|
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
64
|
-
"seed:catalog": "tsx src/db/seed-catalog.ts"
|
|
70
|
+
"seed:catalog": "tsx src/db/seed-catalog.ts",
|
|
71
|
+
"provision:e2e": "tsx src/db/provision-e2e-identity.ts",
|
|
72
|
+
"audit:fiscal-onboarding": "node scripts/audit-fiscal-credential-onboarding.mjs"
|
|
65
73
|
}
|
|
66
74
|
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
-- 0045 — fechar a escrita de papel de SISTEMA a partir de contexto de tenant.
|
|
2
|
+
--
|
|
3
|
+
-- ── O defeito ───────────────────────────────────────────────────────────────
|
|
4
|
+
--
|
|
5
|
+
-- `role_visibility` e `role_permission_visibility` nasceram na 0006 assim:
|
|
6
|
+
--
|
|
7
|
+
-- USING (tenant_id IS NULL OR tenant_id = current_tenant)
|
|
8
|
+
-- WITH CHECK (tenant_id IS NULL OR tenant_id = current_tenant)
|
|
9
|
+
--
|
|
10
|
+
-- O ramo `IS NULL` no USING é necessário e correto: todo tenant precisa LER os
|
|
11
|
+
-- papéis de sistema, senão ninguém autentica. No WITH CHECK ele autoriza a
|
|
12
|
+
-- ESCRITA de linhas com `tenant_id NULL` — que é justamente a marca do papel
|
|
13
|
+
-- global, visível a todos os escritórios.
|
|
14
|
+
--
|
|
15
|
+
-- Reproduzido em 2026-09-05, com o papel de runtime e uma GUC de tenant comum:
|
|
16
|
+
--
|
|
17
|
+
-- 1. INSERT de `role` com `tenant_id NULL` → PASSAVA
|
|
18
|
+
-- 2. UPDATE promovendo papel do tenant a global → PASSAVA
|
|
19
|
+
-- 3. INSERT em `role_permission` anexando
|
|
20
|
+
-- `vault.credential.decrypt` ao papel de sistema
|
|
21
|
+
-- `readonly` → PASSAVA
|
|
22
|
+
--
|
|
23
|
+
-- O terceiro é escalada cross-tenant real: `readonly` é semeado em TODO tenant,
|
|
24
|
+
-- e uma permissão anexada a ele alcança todos os escritórios de uma vez.
|
|
25
|
+
--
|
|
26
|
+
-- A 0026 já tinha acertado este padrão em `recurring_item_type` e
|
|
27
|
+
-- `document_category` — `WITH CHECK` sem o ramo `IS NULL`. As duas policies de
|
|
28
|
+
-- 0006 nunca foram alinhadas.
|
|
29
|
+
--
|
|
30
|
+
-- ── A correção, e por que ela vai além de alinhar o WITH CHECK ──────────────
|
|
31
|
+
--
|
|
32
|
+
-- Alinhar o WITH CHECK fecha os vetores 1 e 3, mas deixa a barreira num único
|
|
33
|
+
-- lugar. O levantamento mostrou algo que permite fechar na raiz: **nenhuma rota
|
|
34
|
+
-- da API cria ou altera papel**. O único escritor de `role` em todo o produto é
|
|
35
|
+
-- `ensureRbacCatalog`, e ele roda sempre com a conexão do OWNER — no seed, na
|
|
36
|
+
-- migração e nos testes.
|
|
37
|
+
--
|
|
38
|
+
-- Então o papel de runtime não precisa de escrita nenhuma aqui. Revogá-la torna
|
|
39
|
+
-- "o tenant não forja papel" uma propriedade do PRIVILÉGIO, não só da política —
|
|
40
|
+
-- duas barreiras independentes, e a de fora não depende de nenhuma GUC estar
|
|
41
|
+
-- certa. É o mesmo desenho que a 0043 aplicou a `service_principal`: quem
|
|
42
|
+
-- consome a autorização não consegue escrevê-la.
|
|
43
|
+
--
|
|
44
|
+
-- ── O que isto NÃO faz ──────────────────────────────────────────────────────
|
|
45
|
+
--
|
|
46
|
+
-- Não remove o suporte a papel por escritório: `role.tenant_id` continua lá, e a
|
|
47
|
+
-- policy continua permitindo escrita tenant-scoped para quem tiver privilégio. O
|
|
48
|
+
-- dia em que existir uma rota de papéis customizados, ela entra pelo caminho de
|
|
49
|
+
-- provisionamento (owner) ou por um GRANT explícito e revisado — não pela porta
|
|
50
|
+
-- que estava aberta por acidente.
|
|
51
|
+
|
|
52
|
+
-- ── 1 · WITH CHECK sem o ramo IS NULL ──────────────────────────────────────
|
|
53
|
+
--
|
|
54
|
+
-- USING preservado: ler papel de sistema é requisito de autenticação.
|
|
55
|
+
|
|
56
|
+
DROP POLICY IF EXISTS role_visibility ON role;
|
|
57
|
+
CREATE POLICY role_visibility ON role
|
|
58
|
+
USING (tenant_id IS NULL OR tenant_id = NULLIF(current_setting('app.current_tenant', true), '')::uuid)
|
|
59
|
+
WITH CHECK (tenant_id = NULLIF(current_setting('app.current_tenant', true), '')::uuid);
|
|
60
|
+
|
|
61
|
+
DROP POLICY IF EXISTS role_permission_visibility ON role_permission;
|
|
62
|
+
CREATE POLICY role_permission_visibility ON role_permission
|
|
63
|
+
USING (tenant_id IS NULL OR tenant_id = NULLIF(current_setting('app.current_tenant', true), '')::uuid)
|
|
64
|
+
WITH CHECK (tenant_id = NULLIF(current_setting('app.current_tenant', true), '')::uuid);
|
|
65
|
+
|
|
66
|
+
-- ── 2 · O provisionamento continua funcionando ─────────────────────────────
|
|
67
|
+
--
|
|
68
|
+
-- `role` e `role_permission` têm FORCE ROW LEVEL SECURITY, e FORCE vale também
|
|
69
|
+
-- para o dono da tabela. Sem uma política que o autorize, `ensureRbacCatalog`
|
|
70
|
+
-- — que roda com o owner e SEM tenant no contexto — passaria a falhar, e o
|
|
71
|
+
-- produto não subiria em banco novo.
|
|
72
|
+
--
|
|
73
|
+
-- A autorização é nominal ao papel dono do schema (o mesmo que roda migrations),
|
|
74
|
+
-- resolvido em tempo de migração para funcionar em qualquer ambiente. Mesmo
|
|
75
|
+
-- padrão da 0042.
|
|
76
|
+
|
|
77
|
+
DO $$
|
|
78
|
+
DECLARE
|
|
79
|
+
owner_role text;
|
|
80
|
+
BEGIN
|
|
81
|
+
SELECT tableowner INTO owner_role
|
|
82
|
+
FROM pg_tables WHERE schemaname = 'public' AND tablename = 'role';
|
|
83
|
+
IF owner_role IS NULL THEN
|
|
84
|
+
RAISE EXCEPTION 'role sem dono identificável — abortando';
|
|
85
|
+
END IF;
|
|
86
|
+
|
|
87
|
+
EXECUTE 'DROP POLICY IF EXISTS role_system_provisioning ON role';
|
|
88
|
+
EXECUTE format(
|
|
89
|
+
'CREATE POLICY role_system_provisioning ON role FOR ALL TO %I USING (true) WITH CHECK (true)',
|
|
90
|
+
owner_role
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
EXECUTE 'DROP POLICY IF EXISTS role_permission_system_provisioning ON role_permission';
|
|
94
|
+
EXECUTE format(
|
|
95
|
+
'CREATE POLICY role_permission_system_provisioning ON role_permission FOR ALL TO %I USING (true) WITH CHECK (true)',
|
|
96
|
+
owner_role
|
|
97
|
+
);
|
|
98
|
+
END $$;
|
|
99
|
+
|
|
100
|
+
-- ── 3 · A segunda barreira: privilégio ─────────────────────────────────────
|
|
101
|
+
--
|
|
102
|
+
-- O runtime lê o catálogo de papéis a cada autenticação e nunca o escreve.
|
|
103
|
+
-- Revogar a escrita fecha os quatro vetores mesmo que uma política futura seja
|
|
104
|
+
-- afrouxada por engano.
|
|
105
|
+
--
|
|
106
|
+
-- Este REVOKE precisa ser repetido em `migrate.ts`, no mesmo bloco que trata
|
|
107
|
+
-- `audit_log` e `service_principal`: o GRANT da allowlist é amplo por
|
|
108
|
+
-- construção e devolveria estes privilégios no deploy seguinte. Foi exatamente
|
|
109
|
+
-- o defeito que a Fase 3 encontrou ao separar GRANT e hardening.
|
|
110
|
+
|
|
111
|
+
DO $$
|
|
112
|
+
BEGIN
|
|
113
|
+
IF EXISTS (SELECT FROM pg_roles WHERE rolname = 'baruk_app') THEN
|
|
114
|
+
EXECUTE 'REVOKE INSERT, UPDATE, DELETE ON role FROM baruk_app';
|
|
115
|
+
EXECUTE 'REVOKE INSERT, UPDATE, DELETE ON role_permission FROM baruk_app';
|
|
116
|
+
END IF;
|
|
117
|
+
END $$;
|
|
118
|
+
|
|
119
|
+
COMMENT ON POLICY role_visibility ON role IS
|
|
120
|
+
'Leitura: papéis de sistema + os do tenant. Escrita: SOMENTE do tenant — o ramo IS NULL no WITH CHECK permitia forjar papel global (P0-A, Fase 4).';
|
|
121
|
+
COMMENT ON POLICY role_system_provisioning ON role IS
|
|
122
|
+
'Provisionamento do catálogo de sistema pelo papel dono do schema. FORCE RLS vale para o dono, e ensureRbacCatalog roda sem tenant no contexto.';
|