@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,374 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { randomBytes } from 'node:crypto';
|
|
6
|
+
import { createServer } from 'node:https';
|
|
7
|
+
/**
|
|
8
|
+
* O CNPJ sintético dos testes de identidade.
|
|
9
|
+
*
|
|
10
|
+
* Inventado, e propositalmente distinto de qualquer contribuinte real: um número
|
|
11
|
+
* de verdade num fixture vira, mais cedo ou mais tarde, um cadastro de verdade.
|
|
12
|
+
*/
|
|
13
|
+
export const SYNTHETIC_CERTIFICATE_CNPJ = '11222333000181';
|
|
14
|
+
function openssl(args, cwd) {
|
|
15
|
+
try {
|
|
16
|
+
execFileSync('openssl', [...args], { cwd, stdio: 'pipe' });
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// O erro original é DESCARTADO de propósito: `err.stderr` do OpenSSL cita
|
|
20
|
+
// caminhos de arquivo e sujeitos de certificado. O que importa para
|
|
21
|
+
// depurar é qual subcomando falhou, e isso cabe na mensagem própria.
|
|
22
|
+
throw new Error(`openssl ${args[0] ?? '?'} falhou ao gerar material sintético`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const CA_CONFIG = `[ca]
|
|
26
|
+
default_ca = CA_default
|
|
27
|
+
[CA_default]
|
|
28
|
+
database = index.txt
|
|
29
|
+
serial = serial
|
|
30
|
+
new_certs_dir = .
|
|
31
|
+
certificate = ca.crt
|
|
32
|
+
private_key = ca.key
|
|
33
|
+
default_md = sha256
|
|
34
|
+
policy = policy_any
|
|
35
|
+
email_in_dn = no
|
|
36
|
+
rand_serial = yes
|
|
37
|
+
unique_subject = no
|
|
38
|
+
[policy_any]
|
|
39
|
+
commonName = supplied
|
|
40
|
+
`;
|
|
41
|
+
/**
|
|
42
|
+
* Gera a ICP sintética inteira.
|
|
43
|
+
*
|
|
44
|
+
* Lenta (segundos): gera seis pares de chaves. Quem usa deve guardar o
|
|
45
|
+
* resultado — `syntheticPki()` abaixo faz isso por processo.
|
|
46
|
+
*/
|
|
47
|
+
export function createSyntheticPki() {
|
|
48
|
+
if (process.env.NODE_ENV === 'production' || process.env.BARUK_APP_ENV === 'production') {
|
|
49
|
+
throw new Error('ICP sintética não é gerada em produção.');
|
|
50
|
+
}
|
|
51
|
+
const dir = mkdtempSync(join(tmpdir(), 'baruk-synthetic-pki-'));
|
|
52
|
+
const passphrase = `synthetic_${randomBytes(12).toString('hex')}`;
|
|
53
|
+
try {
|
|
54
|
+
// ── CA legítima ────────────────────────────────────────────────────────
|
|
55
|
+
openssl([
|
|
56
|
+
'req',
|
|
57
|
+
'-x509',
|
|
58
|
+
'-newkey',
|
|
59
|
+
'rsa:2048',
|
|
60
|
+
'-nodes',
|
|
61
|
+
'-keyout',
|
|
62
|
+
'ca.key',
|
|
63
|
+
'-out',
|
|
64
|
+
'ca.crt',
|
|
65
|
+
'-days',
|
|
66
|
+
'3',
|
|
67
|
+
'-subj',
|
|
68
|
+
'/CN=Baruk Synthetic Root',
|
|
69
|
+
'-addext',
|
|
70
|
+
'basicConstraints=critical,CA:TRUE,pathlen:0',
|
|
71
|
+
], dir);
|
|
72
|
+
// ── Servidor, com SAN para localhost e 127.0.0.1 ───────────────────────
|
|
73
|
+
writeFileSync(join(dir, 'srv.ext'), 'subjectAltName=DNS:localhost,IP:127.0.0.1\n');
|
|
74
|
+
openssl([
|
|
75
|
+
'req',
|
|
76
|
+
'-newkey',
|
|
77
|
+
'rsa:2048',
|
|
78
|
+
'-nodes',
|
|
79
|
+
'-keyout',
|
|
80
|
+
'srv.key',
|
|
81
|
+
'-out',
|
|
82
|
+
'srv.csr',
|
|
83
|
+
'-subj',
|
|
84
|
+
'/CN=localhost',
|
|
85
|
+
], dir);
|
|
86
|
+
openssl([
|
|
87
|
+
'x509',
|
|
88
|
+
'-req',
|
|
89
|
+
'-in',
|
|
90
|
+
'srv.csr',
|
|
91
|
+
'-CA',
|
|
92
|
+
'ca.crt',
|
|
93
|
+
'-CAkey',
|
|
94
|
+
'ca.key',
|
|
95
|
+
'-CAcreateserial',
|
|
96
|
+
'-out',
|
|
97
|
+
'srv.crt',
|
|
98
|
+
'-days',
|
|
99
|
+
'3',
|
|
100
|
+
'-extfile',
|
|
101
|
+
'srv.ext',
|
|
102
|
+
], dir);
|
|
103
|
+
// ── Cliente legítimo ───────────────────────────────────────────────────
|
|
104
|
+
openssl([
|
|
105
|
+
'req',
|
|
106
|
+
'-newkey',
|
|
107
|
+
'rsa:2048',
|
|
108
|
+
'-nodes',
|
|
109
|
+
'-keyout',
|
|
110
|
+
'cli.key',
|
|
111
|
+
'-out',
|
|
112
|
+
'cli.csr',
|
|
113
|
+
'-subj',
|
|
114
|
+
'/CN=Contribuinte Sintetico',
|
|
115
|
+
], dir);
|
|
116
|
+
openssl([
|
|
117
|
+
'x509',
|
|
118
|
+
'-req',
|
|
119
|
+
'-in',
|
|
120
|
+
'cli.csr',
|
|
121
|
+
'-CA',
|
|
122
|
+
'ca.crt',
|
|
123
|
+
'-CAkey',
|
|
124
|
+
'ca.key',
|
|
125
|
+
'-CAcreateserial',
|
|
126
|
+
'-out',
|
|
127
|
+
'cli.crt',
|
|
128
|
+
'-days',
|
|
129
|
+
'3',
|
|
130
|
+
], dir);
|
|
131
|
+
openssl([
|
|
132
|
+
'pkcs12',
|
|
133
|
+
'-export',
|
|
134
|
+
'-inkey',
|
|
135
|
+
'cli.key',
|
|
136
|
+
'-in',
|
|
137
|
+
'cli.crt',
|
|
138
|
+
'-certfile',
|
|
139
|
+
'ca.crt',
|
|
140
|
+
'-passout',
|
|
141
|
+
`pass:${passphrase}`,
|
|
142
|
+
'-out',
|
|
143
|
+
'cli.p12',
|
|
144
|
+
], dir);
|
|
145
|
+
// ── Cliente VENCIDO ────────────────────────────────────────────────────
|
|
146
|
+
//
|
|
147
|
+
// `openssl x509 -req` não sabe datar no passado em todas as versões; `ca`
|
|
148
|
+
// sabe desde a 1.1.1, com `-startdate`/`-enddate`. É por isso que existe o
|
|
149
|
+
// arquivo de configuração acima — e não por gosto por configuração.
|
|
150
|
+
writeFileSync(join(dir, 'ca.cnf'), CA_CONFIG);
|
|
151
|
+
writeFileSync(join(dir, 'index.txt'), '');
|
|
152
|
+
writeFileSync(join(dir, 'serial'), '01\n');
|
|
153
|
+
openssl([
|
|
154
|
+
'req',
|
|
155
|
+
'-newkey',
|
|
156
|
+
'rsa:2048',
|
|
157
|
+
'-nodes',
|
|
158
|
+
'-keyout',
|
|
159
|
+
'exp.key',
|
|
160
|
+
'-out',
|
|
161
|
+
'exp.csr',
|
|
162
|
+
'-subj',
|
|
163
|
+
'/CN=Contribuinte Vencido',
|
|
164
|
+
], dir);
|
|
165
|
+
openssl([
|
|
166
|
+
'ca',
|
|
167
|
+
'-batch',
|
|
168
|
+
'-config',
|
|
169
|
+
'ca.cnf',
|
|
170
|
+
'-in',
|
|
171
|
+
'exp.csr',
|
|
172
|
+
'-out',
|
|
173
|
+
'exp.crt',
|
|
174
|
+
'-notext',
|
|
175
|
+
'-startdate',
|
|
176
|
+
'200101000000Z',
|
|
177
|
+
'-enddate',
|
|
178
|
+
'200201000000Z',
|
|
179
|
+
], dir);
|
|
180
|
+
openssl([
|
|
181
|
+
'pkcs12',
|
|
182
|
+
'-export',
|
|
183
|
+
'-inkey',
|
|
184
|
+
'exp.key',
|
|
185
|
+
'-in',
|
|
186
|
+
'exp.crt',
|
|
187
|
+
'-certfile',
|
|
188
|
+
'ca.crt',
|
|
189
|
+
'-passout',
|
|
190
|
+
`pass:${passphrase}`,
|
|
191
|
+
'-out',
|
|
192
|
+
'exp.p12',
|
|
193
|
+
], dir);
|
|
194
|
+
// ── CA estrangeira e seu cliente ───────────────────────────────────────
|
|
195
|
+
openssl([
|
|
196
|
+
'req',
|
|
197
|
+
'-x509',
|
|
198
|
+
'-newkey',
|
|
199
|
+
'rsa:2048',
|
|
200
|
+
'-nodes',
|
|
201
|
+
'-keyout',
|
|
202
|
+
'foreign-ca.key',
|
|
203
|
+
'-out',
|
|
204
|
+
'foreign-ca.crt',
|
|
205
|
+
'-days',
|
|
206
|
+
'3',
|
|
207
|
+
'-subj',
|
|
208
|
+
'/CN=CA Nao Confiada',
|
|
209
|
+
'-addext',
|
|
210
|
+
'basicConstraints=critical,CA:TRUE,pathlen:0',
|
|
211
|
+
], dir);
|
|
212
|
+
openssl([
|
|
213
|
+
'req',
|
|
214
|
+
'-newkey',
|
|
215
|
+
'rsa:2048',
|
|
216
|
+
'-nodes',
|
|
217
|
+
'-keyout',
|
|
218
|
+
'foreign.key',
|
|
219
|
+
'-out',
|
|
220
|
+
'foreign.csr',
|
|
221
|
+
'-subj',
|
|
222
|
+
'/CN=Contribuinte de Outra Cadeia',
|
|
223
|
+
], dir);
|
|
224
|
+
openssl([
|
|
225
|
+
'x509',
|
|
226
|
+
'-req',
|
|
227
|
+
'-in',
|
|
228
|
+
'foreign.csr',
|
|
229
|
+
'-CA',
|
|
230
|
+
'foreign-ca.crt',
|
|
231
|
+
'-CAkey',
|
|
232
|
+
'foreign-ca.key',
|
|
233
|
+
'-CAcreateserial',
|
|
234
|
+
'-out',
|
|
235
|
+
'foreign.crt',
|
|
236
|
+
'-days',
|
|
237
|
+
'3',
|
|
238
|
+
], dir);
|
|
239
|
+
openssl([
|
|
240
|
+
'pkcs12',
|
|
241
|
+
'-export',
|
|
242
|
+
'-inkey',
|
|
243
|
+
'foreign.key',
|
|
244
|
+
'-in',
|
|
245
|
+
'foreign.crt',
|
|
246
|
+
'-certfile',
|
|
247
|
+
'foreign-ca.crt',
|
|
248
|
+
'-passout',
|
|
249
|
+
`pass:${passphrase}`,
|
|
250
|
+
'-out',
|
|
251
|
+
'foreign.p12',
|
|
252
|
+
], dir);
|
|
253
|
+
// ── Cliente com CNPJ no CN ─────────────────────────────────────────────
|
|
254
|
+
openssl([
|
|
255
|
+
'req',
|
|
256
|
+
'-newkey',
|
|
257
|
+
'rsa:2048',
|
|
258
|
+
'-nodes',
|
|
259
|
+
'-keyout',
|
|
260
|
+
'doc.key',
|
|
261
|
+
'-out',
|
|
262
|
+
'doc.csr',
|
|
263
|
+
'-subj',
|
|
264
|
+
`/CN=CONTRIBUINTE SINTETICO LTDA:${SYNTHETIC_CERTIFICATE_CNPJ}`,
|
|
265
|
+
], dir);
|
|
266
|
+
openssl([
|
|
267
|
+
'x509',
|
|
268
|
+
'-req',
|
|
269
|
+
'-in',
|
|
270
|
+
'doc.csr',
|
|
271
|
+
'-CA',
|
|
272
|
+
'ca.crt',
|
|
273
|
+
'-CAkey',
|
|
274
|
+
'ca.key',
|
|
275
|
+
'-CAcreateserial',
|
|
276
|
+
'-out',
|
|
277
|
+
'doc.crt',
|
|
278
|
+
'-days',
|
|
279
|
+
'3',
|
|
280
|
+
], dir);
|
|
281
|
+
openssl([
|
|
282
|
+
'pkcs12',
|
|
283
|
+
'-export',
|
|
284
|
+
'-inkey',
|
|
285
|
+
'doc.key',
|
|
286
|
+
'-in',
|
|
287
|
+
'doc.crt',
|
|
288
|
+
'-certfile',
|
|
289
|
+
'ca.crt',
|
|
290
|
+
'-passout',
|
|
291
|
+
`pass:${passphrase}`,
|
|
292
|
+
'-out',
|
|
293
|
+
'doc.p12',
|
|
294
|
+
], dir);
|
|
295
|
+
const pki = {
|
|
296
|
+
caCertPem: readFileSync(join(dir, 'ca.crt')),
|
|
297
|
+
serverKeyPem: readFileSync(join(dir, 'srv.key')),
|
|
298
|
+
serverCertPem: readFileSync(join(dir, 'srv.crt')),
|
|
299
|
+
clientPfx: readFileSync(join(dir, 'cli.p12')),
|
|
300
|
+
clientPassphrase: passphrase,
|
|
301
|
+
expiredClientPfx: readFileSync(join(dir, 'exp.p12')),
|
|
302
|
+
foreignCaCertPem: readFileSync(join(dir, 'foreign-ca.crt')),
|
|
303
|
+
foreignClientPfx: readFileSync(join(dir, 'foreign.p12')),
|
|
304
|
+
corruptPfx: Buffer.from('isto nao e um pkcs12, e e essa a graca', 'utf8'),
|
|
305
|
+
documentClientPfx: readFileSync(join(dir, 'doc.p12')),
|
|
306
|
+
documentClientCnpj: SYNTHETIC_CERTIFICATE_CNPJ,
|
|
307
|
+
dispose() {
|
|
308
|
+
rmSync(dir, { recursive: true, force: true });
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
// O diretório é removido AGORA: o material já está em memória, e deixar
|
|
312
|
+
// chave privada no disco — ainda que sintética e em `tmp` — é o hábito que
|
|
313
|
+
// um dia se repete com material real.
|
|
314
|
+
rmSync(dir, { recursive: true, force: true });
|
|
315
|
+
return { ...pki, dispose: () => undefined };
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
rmSync(dir, { recursive: true, force: true });
|
|
319
|
+
throw err;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
let cached = null;
|
|
323
|
+
/** A mesma ICP para o processo inteiro. Gerar seis chaves RSA custa segundos. */
|
|
324
|
+
export function syntheticPki() {
|
|
325
|
+
cached ??= createSyntheticPki();
|
|
326
|
+
return cached;
|
|
327
|
+
}
|
|
328
|
+
/** Sobe um servidor TLS real na porta local. */
|
|
329
|
+
export async function startSyntheticTlsServer(options) {
|
|
330
|
+
const { pki } = options;
|
|
331
|
+
const estado = {
|
|
332
|
+
url: '',
|
|
333
|
+
handshakes: 0,
|
|
334
|
+
seen: [],
|
|
335
|
+
close: async () => undefined,
|
|
336
|
+
};
|
|
337
|
+
const server = createServer({
|
|
338
|
+
key: pki.serverKeyPem,
|
|
339
|
+
cert: pki.serverCertPem,
|
|
340
|
+
ca: [pki.caCertPem],
|
|
341
|
+
requestCert: options.requireClientCert ?? false,
|
|
342
|
+
// `rejectUnauthorized` aqui é do SERVIDOR sobre o CLIENTE — o inverso do
|
|
343
|
+
// que o transporte configura. Verdadeiro quando o certificado é exigido:
|
|
344
|
+
// é exatamente esse comportamento do ADN que precisa ser reproduzido.
|
|
345
|
+
rejectUnauthorized: options.requireClientCert ?? false,
|
|
346
|
+
}, (req, res) => {
|
|
347
|
+
const cert = req.socket.getPeerCertificate?.();
|
|
348
|
+
estado.seen.push({ path: req.url ?? '/', clientCn: cert?.subject?.CN ?? null });
|
|
349
|
+
const r = options.respond?.(req.url ?? '/') ?? { status: 200, body: 'ok' };
|
|
350
|
+
const enviar = () => {
|
|
351
|
+
res.writeHead(r.status, { 'content-type': 'application/xml', ...(r.headers ?? {}) });
|
|
352
|
+
res.end(r.body ?? '');
|
|
353
|
+
};
|
|
354
|
+
if (options.delayMs)
|
|
355
|
+
setTimeout(enviar, options.delayMs).unref?.();
|
|
356
|
+
else
|
|
357
|
+
enviar();
|
|
358
|
+
});
|
|
359
|
+
server.on('secureConnection', () => {
|
|
360
|
+
estado.handshakes += 1;
|
|
361
|
+
});
|
|
362
|
+
// Sem isto, um handshake recusado derruba o processo de teste inteiro com um
|
|
363
|
+
// erro não tratado — e o teste que EXISTE para provar a recusa vira um crash.
|
|
364
|
+
server.on('tlsClientError', () => undefined);
|
|
365
|
+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
|
|
366
|
+
const { port } = server.address();
|
|
367
|
+
estado.url = `https://127.0.0.1:${port}`;
|
|
368
|
+
estado.close = () => new Promise((resolve) => {
|
|
369
|
+
server.closeAllConnections?.();
|
|
370
|
+
server.close(() => resolve());
|
|
371
|
+
});
|
|
372
|
+
return estado;
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=synthetic-tls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synthetic-tls.js","sourceRoot":"","sources":["../../../src/fiscal/transport/synthetic-tls.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O transporte, separado do que trafega.
|
|
3
|
+
*
|
|
4
|
+
* ## Por que a fronteira fica exatamente aqui
|
|
5
|
+
*
|
|
6
|
+
* O adapter da NFS-e (`nfse-adn.ts`) recebia um `AdnTransport` cuja assinatura
|
|
7
|
+
* já falava de NSU e de lote — vocabulário FISCAL. Isso funcionou para provar a
|
|
8
|
+
* ingestão, mas amarra duas decisões que mudam por motivos diferentes: como se
|
|
9
|
+
* fala com o servidor (TLS mútuo, timeout, cabeçalho de espera) e o que se pede
|
|
10
|
+
* a ele (NSU, chave de acesso, evento).
|
|
11
|
+
*
|
|
12
|
+
* A prova de que são eixos independentes é o próprio Brasil fiscal: NF-e e CT-e
|
|
13
|
+
* usam SOAP; a NFS-e nacional usa REST; um provedor municipal usaria outra coisa
|
|
14
|
+
* ainda — e os TRÊS apresentam o mesmo certificado ICP-Brasil por TLS mútuo,
|
|
15
|
+
* respeitam a mesma classe de erro de rede e precisam do mesmo teto de espera.
|
|
16
|
+
* Um `if (provedor === 'x')` dentro de um cliente HTTP seria o sintoma da
|
|
17
|
+
* fronteira no lugar errado.
|
|
18
|
+
*
|
|
19
|
+
* Por isso esta camada não conhece NSU, não conhece documento e não conhece
|
|
20
|
+
* cliente. Ela conhece requisição, resposta, prazo e material de TLS.
|
|
21
|
+
*
|
|
22
|
+
* ## O que ela NÃO faz
|
|
23
|
+
*
|
|
24
|
+
* Não retenta. Não classifica erro fiscal. Não decide backoff. Essas decisões
|
|
25
|
+
* dependem do que estava sendo pedido — e um transporte que retentasse sozinho
|
|
26
|
+
* transformaria uma espera obrigatória de uma hora em três requisições, que é o
|
|
27
|
+
* caminho direto para o `cStat 656` e para o CNPJ do cliente bloqueado.
|
|
28
|
+
*/
|
|
29
|
+
/** Verbos que as APIs fiscais usam. Deliberadamente curto. */
|
|
30
|
+
export type FiscalTransportMethod = 'GET' | 'POST';
|
|
31
|
+
export interface FiscalTransportRequest {
|
|
32
|
+
method: FiscalTransportMethod;
|
|
33
|
+
/** Absoluta e `https:`. O transporte recusa qualquer outro esquema. */
|
|
34
|
+
url: string;
|
|
35
|
+
headers?: Readonly<Record<string, string>>;
|
|
36
|
+
body?: Uint8Array | string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Teto de espera desta requisição, em milissegundos.
|
|
39
|
+
*
|
|
40
|
+
* Obrigatório, sem default. Uma requisição sem prazo contra um serviço que
|
|
41
|
+
* aceita a conexão e não responde nunca dispara `catch` — o processo fica
|
|
42
|
+
* pendurado e o lease expira sozinho, o que faz um segundo worker tomar a vez
|
|
43
|
+
* enquanto o primeiro ainda está lá dentro.
|
|
44
|
+
*/
|
|
45
|
+
timeoutMs: number;
|
|
46
|
+
}
|
|
47
|
+
export interface FiscalTransportResponse {
|
|
48
|
+
status: number;
|
|
49
|
+
/** Nomes em minúsculo. `retry-after` é lido daqui, e não inventado. */
|
|
50
|
+
headers: Readonly<Record<string, string>>;
|
|
51
|
+
body: Uint8Array;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Classes de falha do TRANSPORTE — anteriores a qualquer semântica fiscal.
|
|
55
|
+
*
|
|
56
|
+
* `network` DNS, conexão recusada, socket derrubado. Volta sozinho.
|
|
57
|
+
* `timeout` o prazo estourou. Volta sozinho, mas o servidor pode ter
|
|
58
|
+
* PROCESSADO — por isso nunca é tratado como "não aconteceu".
|
|
59
|
+
* `tls` handshake recusado pelo SERVIDOR ou cadeia do servidor
|
|
60
|
+
* inválida. Não volta sozinho; alguém precisa olhar.
|
|
61
|
+
* `certificate` o material do CLIENTE não serve: ausente, ilegível, senha
|
|
62
|
+
* errada, vencido, CA recusada. Pessoa resolve.
|
|
63
|
+
* `protocol` resposta que não é HTTP válido, ou URL recusada aqui.
|
|
64
|
+
*/
|
|
65
|
+
export type FiscalTransportErrorClass = 'network' | 'timeout' | 'tls' | 'certificate' | 'protocol';
|
|
66
|
+
/**
|
|
67
|
+
* Falha de transporte.
|
|
68
|
+
*
|
|
69
|
+
* A mensagem é montada por NÓS a partir da classe e de um código curto. O erro
|
|
70
|
+
* original NÃO é encadeado, e isso é deliberado: `Error.message` de TLS cita o
|
|
71
|
+
* caminho do arquivo do certificado e o sujeito do titular, e `err.stack` de um
|
|
72
|
+
* cliente HTTP já carregou a URL inteira com credencial embutida neste
|
|
73
|
+
* ecossistema. Redigir o campo não bastaria — a defesa é não copiar o texto.
|
|
74
|
+
*/
|
|
75
|
+
export declare class FiscalTransportError extends Error {
|
|
76
|
+
readonly errorClass: FiscalTransportErrorClass;
|
|
77
|
+
/** Código curto e estável (`ETIMEDOUT`, `CERT_HAS_EXPIRED`). Nunca texto livre do sistema. */
|
|
78
|
+
readonly code: string;
|
|
79
|
+
/** Espera pedida pelo servidor (`Retry-After`), quando houver. */
|
|
80
|
+
readonly retryAfter: Date | null;
|
|
81
|
+
constructor(errorClass: FiscalTransportErrorClass,
|
|
82
|
+
/** Código curto e estável (`ETIMEDOUT`, `CERT_HAS_EXPIRED`). Nunca texto livre do sistema. */
|
|
83
|
+
code: string,
|
|
84
|
+
/** Espera pedida pelo servidor (`Retry-After`), quando houver. */
|
|
85
|
+
retryAfter?: Date | null);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Material de TLS mútuo do CLIENTE, em memória.
|
|
89
|
+
*
|
|
90
|
+
* `Buffer`, nunca caminho de arquivo: material de certificado que passa pelo
|
|
91
|
+
* disco precisa de permissão restrita, de limpeza garantida e de alguém que
|
|
92
|
+
* lembre das duas coisas no dia do incidente. Em memória não há o que esquecer.
|
|
93
|
+
* A única exceção legítima seria uma biblioteca que só aceite caminho — e o
|
|
94
|
+
* Node não é uma delas (`https.Agent` aceita `pfx`/`cert`/`key` como Buffer).
|
|
95
|
+
*
|
|
96
|
+
* `fingerprintSha256` existe para a trilha: identifica QUAL certificado foi
|
|
97
|
+
* apresentado sem revelar nada dele. É o único campo desta estrutura que pode
|
|
98
|
+
* aparecer em log, tela ou relatório.
|
|
99
|
+
*/
|
|
100
|
+
export interface ClientTlsMaterial {
|
|
101
|
+
/** PKCS#12 (`.pfx`/`.p12`) — o formato em que um A1 é entregue no Brasil. */
|
|
102
|
+
pfx?: Buffer;
|
|
103
|
+
passphrase?: string;
|
|
104
|
+
/** Alternativa PEM, para material já convertido. */
|
|
105
|
+
cert?: Buffer;
|
|
106
|
+
key?: Buffer;
|
|
107
|
+
/** CAs adicionais a confiar (cadeia ICP-Brasil). Somam-se ao bundle do sistema. */
|
|
108
|
+
ca?: readonly Buffer[];
|
|
109
|
+
/** sha256 do material apresentado. Seguro para trilha; é o ÚNICO que é. */
|
|
110
|
+
fingerprintSha256: string;
|
|
111
|
+
/**
|
|
112
|
+
* Devolve o material ao nada.
|
|
113
|
+
*
|
|
114
|
+
* Não é cerimônia: o `Buffer` de um PKCS#12 fica no heap até o GC passar, e um
|
|
115
|
+
* heap dump de produção é um arquivo que alguém abre. Zerar é barato.
|
|
116
|
+
*/
|
|
117
|
+
dispose(): void;
|
|
118
|
+
}
|
|
119
|
+
export interface FiscalTransport {
|
|
120
|
+
/** Slug do transporte, para trilha. `https`, `synthetic`. */
|
|
121
|
+
readonly kind: string;
|
|
122
|
+
send(request: FiscalTransportRequest): Promise<FiscalTransportResponse>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Lê `Retry-After` como a RFC 9110 §10.2.3 o define: segundos OU data HTTP.
|
|
126
|
+
*
|
|
127
|
+
* Existe aqui, e não dentro do cliente HTTP, porque o cabeçalho é a única parte
|
|
128
|
+
* da resposta que o motor de retentativa consulta — e ela precisa ser lida
|
|
129
|
+
* igual venha de onde vier. Valor ausente, negativo ou ilegível devolve `null`:
|
|
130
|
+
* inventar uma espera a partir de lixo é pior do que não ter espera nenhuma,
|
|
131
|
+
* porque a inventada parece autorizada.
|
|
132
|
+
*/
|
|
133
|
+
export declare function parseRetryAfter(raw: string | undefined | null, now?: Date): Date | null;
|
|
134
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/fiscal/transport/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,8DAA8D;AAC9D,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,qBAAqB,CAAC;IAC9B,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,aAAa,GAAG,UAAU,CAAC;AAEnG;;;;;;;;GAQG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,UAAU,EAAE,yBAAyB;IAC9C,8FAA8F;IAC9F,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,kEAAkE;IAClE,QAAQ,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI;gBAJvB,UAAU,EAAE,yBAAyB;IAC9C,8FAA8F;IACrF,IAAI,EAAE,MAAM;IACrB,kEAAkE;IACzD,UAAU,GAAE,IAAI,GAAG,IAAW;CAK1C;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvB,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC9B,GAAG,GAAE,IAAiB,GACrB,IAAI,GAAG,IAAI,CAqBb"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* O transporte, separado do que trafega.
|
|
3
|
+
*
|
|
4
|
+
* ## Por que a fronteira fica exatamente aqui
|
|
5
|
+
*
|
|
6
|
+
* O adapter da NFS-e (`nfse-adn.ts`) recebia um `AdnTransport` cuja assinatura
|
|
7
|
+
* já falava de NSU e de lote — vocabulário FISCAL. Isso funcionou para provar a
|
|
8
|
+
* ingestão, mas amarra duas decisões que mudam por motivos diferentes: como se
|
|
9
|
+
* fala com o servidor (TLS mútuo, timeout, cabeçalho de espera) e o que se pede
|
|
10
|
+
* a ele (NSU, chave de acesso, evento).
|
|
11
|
+
*
|
|
12
|
+
* A prova de que são eixos independentes é o próprio Brasil fiscal: NF-e e CT-e
|
|
13
|
+
* usam SOAP; a NFS-e nacional usa REST; um provedor municipal usaria outra coisa
|
|
14
|
+
* ainda — e os TRÊS apresentam o mesmo certificado ICP-Brasil por TLS mútuo,
|
|
15
|
+
* respeitam a mesma classe de erro de rede e precisam do mesmo teto de espera.
|
|
16
|
+
* Um `if (provedor === 'x')` dentro de um cliente HTTP seria o sintoma da
|
|
17
|
+
* fronteira no lugar errado.
|
|
18
|
+
*
|
|
19
|
+
* Por isso esta camada não conhece NSU, não conhece documento e não conhece
|
|
20
|
+
* cliente. Ela conhece requisição, resposta, prazo e material de TLS.
|
|
21
|
+
*
|
|
22
|
+
* ## O que ela NÃO faz
|
|
23
|
+
*
|
|
24
|
+
* Não retenta. Não classifica erro fiscal. Não decide backoff. Essas decisões
|
|
25
|
+
* dependem do que estava sendo pedido — e um transporte que retentasse sozinho
|
|
26
|
+
* transformaria uma espera obrigatória de uma hora em três requisições, que é o
|
|
27
|
+
* caminho direto para o `cStat 656` e para o CNPJ do cliente bloqueado.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Falha de transporte.
|
|
31
|
+
*
|
|
32
|
+
* A mensagem é montada por NÓS a partir da classe e de um código curto. O erro
|
|
33
|
+
* original NÃO é encadeado, e isso é deliberado: `Error.message` de TLS cita o
|
|
34
|
+
* caminho do arquivo do certificado e o sujeito do titular, e `err.stack` de um
|
|
35
|
+
* cliente HTTP já carregou a URL inteira com credencial embutida neste
|
|
36
|
+
* ecossistema. Redigir o campo não bastaria — a defesa é não copiar o texto.
|
|
37
|
+
*/
|
|
38
|
+
export class FiscalTransportError extends Error {
|
|
39
|
+
errorClass;
|
|
40
|
+
code;
|
|
41
|
+
retryAfter;
|
|
42
|
+
constructor(errorClass,
|
|
43
|
+
/** Código curto e estável (`ETIMEDOUT`, `CERT_HAS_EXPIRED`). Nunca texto livre do sistema. */
|
|
44
|
+
code,
|
|
45
|
+
/** Espera pedida pelo servidor (`Retry-After`), quando houver. */
|
|
46
|
+
retryAfter = null) {
|
|
47
|
+
super(`transporte ${errorClass} (${code})`);
|
|
48
|
+
this.errorClass = errorClass;
|
|
49
|
+
this.code = code;
|
|
50
|
+
this.retryAfter = retryAfter;
|
|
51
|
+
this.name = 'FiscalTransportError';
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Lê `Retry-After` como a RFC 9110 §10.2.3 o define: segundos OU data HTTP.
|
|
56
|
+
*
|
|
57
|
+
* Existe aqui, e não dentro do cliente HTTP, porque o cabeçalho é a única parte
|
|
58
|
+
* da resposta que o motor de retentativa consulta — e ela precisa ser lida
|
|
59
|
+
* igual venha de onde vier. Valor ausente, negativo ou ilegível devolve `null`:
|
|
60
|
+
* inventar uma espera a partir de lixo é pior do que não ter espera nenhuma,
|
|
61
|
+
* porque a inventada parece autorizada.
|
|
62
|
+
*/
|
|
63
|
+
export function parseRetryAfter(raw, now = new Date()) {
|
|
64
|
+
if (!raw)
|
|
65
|
+
return null;
|
|
66
|
+
const trimmed = raw.trim();
|
|
67
|
+
if (trimmed === '')
|
|
68
|
+
return null;
|
|
69
|
+
if (/^\d+$/.test(trimmed)) {
|
|
70
|
+
const seconds = Number(trimmed);
|
|
71
|
+
// Um teto de 24h impede que um cabeçalho absurdo (ou hostil) congele um
|
|
72
|
+
// cliente por semanas. O valor continua sendo do servidor; o teto é nosso.
|
|
73
|
+
if (!Number.isFinite(seconds) || seconds < 0)
|
|
74
|
+
return null;
|
|
75
|
+
const capped = Math.min(seconds, 86_400);
|
|
76
|
+
return new Date(now.getTime() + capped * 1000);
|
|
77
|
+
}
|
|
78
|
+
const asDate = new Date(trimmed);
|
|
79
|
+
if (Number.isNaN(asDate.getTime()))
|
|
80
|
+
return null;
|
|
81
|
+
// Data no passado significa "pode agora". Devolver `null` diz exatamente isso
|
|
82
|
+
// sem obrigar quem chama a comparar de novo.
|
|
83
|
+
if (asDate.getTime() <= now.getTime())
|
|
84
|
+
return null;
|
|
85
|
+
const cap = new Date(now.getTime() + 86_400_000);
|
|
86
|
+
return asDate.getTime() > cap.getTime() ? cap : asDate;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/fiscal/transport/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AA2CH;;;;;;;;GAQG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC;IAEA;IAEA;IALX,YACW,UAAqC;IAC9C,8FAA8F;IACrF,IAAY;IACrB,kEAAkE;IACzD,aAA0B,IAAI;QAEvC,KAAK,CAAC,cAAc,UAAU,KAAK,IAAI,GAAG,CAAC,CAAC;QANnC,eAAU,GAAV,UAAU,CAA2B;QAErC,SAAI,GAAJ,IAAI,CAAQ;QAEZ,eAAU,GAAV,UAAU,CAAoB;QAGvC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AAyCD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,GAA8B,EAC9B,MAAY,IAAI,IAAI,EAAE;IAEtB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,wEAAwE;QACxE,2EAA2E;QAC3E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,8EAA8E;IAC9E,6CAA6C;IAC7C,IAAI,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CPF e CNPJ — validação por dígito verificador.
|
|
3
|
+
*
|
|
4
|
+
* Contar dígitos não valida documento. `00000000000` tem onze dígitos e não é
|
|
5
|
+
* CPF de ninguém; `11222333000182` tem catorze e não fecha o DV. Num importador
|
|
6
|
+
* de carteira, aceitar por comprimento significa que um erro de digitação vira
|
|
7
|
+
* cliente, e o erro só aparece na primeira cobrança devolvida — quando já há
|
|
8
|
+
* honorário, obrigação e um e-mail enviado ao titular errado.
|
|
9
|
+
*
|
|
10
|
+
* Os dois algoritmos são o módulo 11 oficial da Receita. Ficam no CORE, e não na
|
|
11
|
+
* vertical contábil, pela mesma razão que `client.document_number` está no core:
|
|
12
|
+
* CPF e CNPJ identificam pessoa no Brasil inteiro, não no segmento contábil.
|
|
13
|
+
*/
|
|
14
|
+
/** Remove tudo que não é dígito. Aceita máscara, ponto, barra e traço. */
|
|
15
|
+
export declare const onlyDigits: (v: string) => string;
|
|
16
|
+
export declare function isValidCpf(value: string): boolean;
|
|
17
|
+
export declare function isValidCnpj(value: string): boolean;
|
|
18
|
+
export type DocumentKind = 'cpf' | 'cnpj' | 'invalid';
|
|
19
|
+
/**
|
|
20
|
+
* Classifica pelo próprio documento.
|
|
21
|
+
*
|
|
22
|
+
* O comprimento já diz se a linha é pessoa física ou jurídica; uma coluna
|
|
23
|
+
* `tipo` que discorde disso é conflito de dado, não preferência do usuário.
|
|
24
|
+
*/
|
|
25
|
+
export declare function classifyDocument(value: string): DocumentKind;
|
|
26
|
+
//# sourceMappingURL=br-documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"br-documents.d.ts","sourceRoot":"","sources":["../../src/import/br-documents.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,UAAU,GAAI,GAAG,MAAM,KAAG,MAA8B,CAAC;AActE,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBjD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAK5D"}
|