@baruk/core 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/.baruk-provenance.json +4 -4
  2. package/CHANGELOG.md +42 -0
  3. package/dist/audit/repository.d.ts +33 -1
  4. package/dist/audit/repository.d.ts.map +1 -1
  5. package/dist/audit/repository.js +41 -7
  6. package/dist/audit/repository.js.map +1 -1
  7. package/dist/auth/service.d.ts +21 -0
  8. package/dist/auth/service.d.ts.map +1 -1
  9. package/dist/auth/service.js +46 -1
  10. package/dist/auth/service.js.map +1 -1
  11. package/dist/billing/ar-repository.d.ts +41 -1
  12. package/dist/billing/ar-repository.d.ts.map +1 -1
  13. package/dist/billing/ar-repository.js +82 -6
  14. package/dist/billing/ar-repository.js.map +1 -1
  15. package/dist/billing/provider-account.d.ts +38 -0
  16. package/dist/billing/provider-account.d.ts.map +1 -1
  17. package/dist/billing/provider-account.js +58 -2
  18. package/dist/billing/provider-account.js.map +1 -1
  19. package/dist/billing/repository.d.ts +44 -0
  20. package/dist/billing/repository.d.ts.map +1 -1
  21. package/dist/billing/repository.js +49 -5
  22. package/dist/billing/repository.js.map +1 -1
  23. package/dist/cjs/audit/repository.js +41 -7
  24. package/dist/cjs/audit/repository.js.map +1 -1
  25. package/dist/cjs/auth/service.js +46 -1
  26. package/dist/cjs/auth/service.js.map +1 -1
  27. package/dist/cjs/billing/ar-repository.js +82 -6
  28. package/dist/cjs/billing/ar-repository.js.map +1 -1
  29. package/dist/cjs/billing/provider-account.js +60 -1
  30. package/dist/cjs/billing/provider-account.js.map +1 -1
  31. package/dist/cjs/billing/repository.js +51 -5
  32. package/dist/cjs/billing/repository.js.map +1 -1
  33. package/dist/cjs/clients/ibge.js +103 -0
  34. package/dist/cjs/clients/ibge.js.map +1 -0
  35. package/dist/cjs/clients/repository.js +186 -9
  36. package/dist/cjs/clients/repository.js.map +1 -1
  37. package/dist/cjs/collection/branding.js +190 -0
  38. package/dist/cjs/collection/branding.js.map +1 -1
  39. package/dist/cjs/collection/clearance-store.js +74 -0
  40. package/dist/cjs/collection/clearance-store.js.map +1 -0
  41. package/dist/cjs/collection/communication-runtime.js +65 -2
  42. package/dist/cjs/collection/communication-runtime.js.map +1 -1
  43. package/dist/cjs/collection/engine.js +20 -0
  44. package/dist/cjs/collection/engine.js.map +1 -1
  45. package/dist/cjs/collection/policy.js +29 -1
  46. package/dist/cjs/collection/policy.js.map +1 -1
  47. package/dist/cjs/communication/clearance.js +18 -0
  48. package/dist/cjs/communication/clearance.js.map +1 -0
  49. package/dist/cjs/communication/dry-run-scenario.js +5 -0
  50. package/dist/cjs/communication/dry-run-scenario.js.map +1 -1
  51. package/dist/cjs/communication/engine.js +12 -0
  52. package/dist/cjs/communication/engine.js.map +1 -1
  53. package/dist/cjs/communication/policy.js.map +1 -1
  54. package/dist/cjs/competence/business-days.js +155 -0
  55. package/dist/cjs/competence/business-days.js.map +1 -0
  56. package/dist/cjs/competence/catalog-validation.js +174 -0
  57. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  58. package/dist/cjs/competence/obligation-preview.js +190 -0
  59. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  60. package/dist/cjs/competence/repository.js +330 -17
  61. package/dist/cjs/competence/repository.js.map +1 -1
  62. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  63. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  64. package/dist/cjs/dashboard/repository.js +11 -1
  65. package/dist/cjs/dashboard/repository.js.map +1 -1
  66. package/dist/cjs/db/client.js +17 -11
  67. package/dist/cjs/db/client.js.map +1 -1
  68. package/dist/cjs/db/provision-e2e-identity.js +111 -0
  69. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  70. package/dist/cjs/fiscal/applicability.js +164 -0
  71. package/dist/cjs/fiscal/applicability.js.map +1 -0
  72. package/dist/cjs/fiscal/conditions.js +198 -0
  73. package/dist/cjs/fiscal/conditions.js.map +1 -0
  74. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  75. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  76. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  77. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  78. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  79. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  80. package/dist/cjs/fiscal/coverage/model.js +127 -0
  81. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  82. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  83. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  84. package/dist/cjs/fiscal/credentials/material.js +168 -0
  85. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  86. package/dist/cjs/fiscal/credentials/readiness.js +163 -0
  87. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  88. package/dist/cjs/fiscal/eligibility.js +199 -0
  89. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  90. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  91. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  92. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  93. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  94. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  95. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  96. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  97. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  98. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  99. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  100. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  101. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  102. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  103. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  104. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  105. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  106. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  107. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  108. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  109. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  110. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  111. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  112. package/dist/cjs/fiscal/repository.js +470 -0
  113. package/dist/cjs/fiscal/repository.js.map +1 -0
  114. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  115. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  116. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  117. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  118. package/dist/cjs/fiscal/sync/lease.js +146 -0
  119. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  120. package/dist/cjs/fiscal/sync/observability.js +244 -0
  121. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  122. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  123. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  124. package/dist/cjs/fiscal/sync/policy.js +143 -0
  125. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  126. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  127. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  128. package/dist/cjs/fiscal/sync/retry.js +183 -0
  129. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  130. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  131. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  132. package/dist/cjs/fiscal/transport/https.js +309 -0
  133. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  134. package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
  135. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  136. package/dist/cjs/fiscal/transport/types.js +93 -0
  137. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  138. package/dist/cjs/import/br-documents.js +85 -0
  139. package/dist/cjs/import/br-documents.js.map +1 -0
  140. package/dist/cjs/import/clients-import.js +347 -40
  141. package/dist/cjs/import/clients-import.js.map +1 -1
  142. package/dist/cjs/index.js +316 -11
  143. package/dist/cjs/index.js.map +1 -1
  144. package/dist/cjs/legal/documents.js +100 -15
  145. package/dist/cjs/legal/documents.js.map +1 -1
  146. package/dist/cjs/legal/index.js +3 -1
  147. package/dist/cjs/legal/index.js.map +1 -1
  148. package/dist/cjs/legal/types.js.map +1 -1
  149. package/dist/cjs/onboarding/persistence.js +4 -4
  150. package/dist/cjs/onboarding/persistence.js.map +1 -1
  151. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  152. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  153. package/dist/cjs/pilot/milestone.js +79 -0
  154. package/dist/cjs/pilot/milestone.js.map +1 -0
  155. package/dist/cjs/platform/capabilities.js +144 -0
  156. package/dist/cjs/platform/capabilities.js.map +1 -0
  157. package/dist/cjs/platform/job-contract.js +411 -0
  158. package/dist/cjs/platform/job-contract.js.map +1 -0
  159. package/dist/cjs/rbac/catalog.js +34 -0
  160. package/dist/cjs/rbac/catalog.js.map +1 -1
  161. package/dist/cjs/subscription-billing/index.js +2 -1
  162. package/dist/cjs/subscription-billing/index.js.map +1 -1
  163. package/dist/cjs/subscription-billing/service.js +153 -77
  164. package/dist/cjs/subscription-billing/service.js.map +1 -1
  165. package/dist/cjs/tenancy/features.js +131 -0
  166. package/dist/cjs/tenancy/features.js.map +1 -0
  167. package/dist/cjs/tenancy/settings.js +224 -0
  168. package/dist/cjs/tenancy/settings.js.map +1 -0
  169. package/dist/cjs/users/repository.js +24 -1
  170. package/dist/cjs/users/repository.js.map +1 -1
  171. package/dist/clients/ibge.d.ts +17 -0
  172. package/dist/clients/ibge.d.ts.map +1 -0
  173. package/dist/clients/ibge.js +98 -0
  174. package/dist/clients/ibge.js.map +1 -0
  175. package/dist/clients/repository.d.ts +154 -0
  176. package/dist/clients/repository.d.ts.map +1 -1
  177. package/dist/clients/repository.js +182 -9
  178. package/dist/clients/repository.js.map +1 -1
  179. package/dist/collection/branding.d.ts +65 -0
  180. package/dist/collection/branding.d.ts.map +1 -1
  181. package/dist/collection/branding.js +186 -0
  182. package/dist/collection/branding.js.map +1 -1
  183. package/dist/collection/clearance-store.d.ts +39 -0
  184. package/dist/collection/clearance-store.d.ts.map +1 -0
  185. package/dist/collection/clearance-store.js +69 -0
  186. package/dist/collection/clearance-store.js.map +1 -0
  187. package/dist/collection/communication-runtime.d.ts +37 -0
  188. package/dist/collection/communication-runtime.d.ts.map +1 -1
  189. package/dist/collection/communication-runtime.js +63 -1
  190. package/dist/collection/communication-runtime.js.map +1 -1
  191. package/dist/collection/engine.d.ts +23 -0
  192. package/dist/collection/engine.d.ts.map +1 -1
  193. package/dist/collection/engine.js +20 -0
  194. package/dist/collection/engine.js.map +1 -1
  195. package/dist/collection/policy.d.ts +25 -0
  196. package/dist/collection/policy.d.ts.map +1 -1
  197. package/dist/collection/policy.js +27 -0
  198. package/dist/collection/policy.js.map +1 -1
  199. package/dist/communication/clearance.d.ts +53 -0
  200. package/dist/communication/clearance.d.ts.map +1 -0
  201. package/dist/communication/clearance.js +15 -0
  202. package/dist/communication/clearance.js.map +1 -0
  203. package/dist/communication/dry-run-scenario.d.ts.map +1 -1
  204. package/dist/communication/dry-run-scenario.js +5 -0
  205. package/dist/communication/dry-run-scenario.js.map +1 -1
  206. package/dist/communication/engine.d.ts +10 -0
  207. package/dist/communication/engine.d.ts.map +1 -1
  208. package/dist/communication/engine.js +12 -0
  209. package/dist/communication/engine.js.map +1 -1
  210. package/dist/communication/policy.d.ts +16 -0
  211. package/dist/communication/policy.d.ts.map +1 -1
  212. package/dist/communication/policy.js.map +1 -1
  213. package/dist/competence/business-days.d.ts +51 -0
  214. package/dist/competence/business-days.d.ts.map +1 -0
  215. package/dist/competence/business-days.js +145 -0
  216. package/dist/competence/business-days.js.map +1 -0
  217. package/dist/competence/catalog-validation.d.ts +86 -0
  218. package/dist/competence/catalog-validation.d.ts.map +1 -0
  219. package/dist/competence/catalog-validation.js +168 -0
  220. package/dist/competence/catalog-validation.js.map +1 -0
  221. package/dist/competence/obligation-preview.d.ts +103 -0
  222. package/dist/competence/obligation-preview.d.ts.map +1 -0
  223. package/dist/competence/obligation-preview.js +184 -0
  224. package/dist/competence/obligation-preview.js.map +1 -0
  225. package/dist/competence/repository.d.ts +139 -1
  226. package/dist/competence/repository.d.ts.map +1 -1
  227. package/dist/competence/repository.js +325 -17
  228. package/dist/competence/repository.js.map +1 -1
  229. package/dist/dashboard/pilot-panel.d.ts +100 -0
  230. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  231. package/dist/dashboard/pilot-panel.js +87 -0
  232. package/dist/dashboard/pilot-panel.js.map +1 -0
  233. package/dist/dashboard/repository.d.ts.map +1 -1
  234. package/dist/dashboard/repository.js +11 -1
  235. package/dist/dashboard/repository.js.map +1 -1
  236. package/dist/db/client.d.ts +45 -0
  237. package/dist/db/client.d.ts.map +1 -1
  238. package/dist/db/client.js +16 -11
  239. package/dist/db/client.js.map +1 -1
  240. package/dist/db/migrate.d.ts +36 -1
  241. package/dist/db/migrate.d.ts.map +1 -1
  242. package/dist/db/migrate.js +199 -32
  243. package/dist/db/migrate.js.map +1 -1
  244. package/dist/db/provision-e2e-identity.d.ts +2 -0
  245. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  246. package/dist/db/provision-e2e-identity.js +109 -0
  247. package/dist/db/provision-e2e-identity.js.map +1 -0
  248. package/dist/fiscal/applicability.d.ts +73 -0
  249. package/dist/fiscal/applicability.d.ts.map +1 -0
  250. package/dist/fiscal/applicability.js +160 -0
  251. package/dist/fiscal/applicability.js.map +1 -0
  252. package/dist/fiscal/conditions.d.ts +99 -0
  253. package/dist/fiscal/conditions.d.ts.map +1 -0
  254. package/dist/fiscal/conditions.js +190 -0
  255. package/dist/fiscal/conditions.js.map +1 -0
  256. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  257. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  258. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  259. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  260. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  261. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  262. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  263. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  264. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  265. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  266. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  267. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  268. package/dist/fiscal/coverage/model.d.ts +86 -0
  269. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  270. package/dist/fiscal/coverage/model.js +120 -0
  271. package/dist/fiscal/coverage/model.js.map +1 -0
  272. package/dist/fiscal/coverage/requests.d.ts +70 -0
  273. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  274. package/dist/fiscal/coverage/requests.js +95 -0
  275. package/dist/fiscal/coverage/requests.js.map +1 -0
  276. package/dist/fiscal/credentials/material.d.ts +81 -0
  277. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  278. package/dist/fiscal/credentials/material.js +164 -0
  279. package/dist/fiscal/credentials/material.js.map +1 -0
  280. package/dist/fiscal/credentials/readiness.d.ts +92 -0
  281. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  282. package/dist/fiscal/credentials/readiness.js +159 -0
  283. package/dist/fiscal/credentials/readiness.js.map +1 -0
  284. package/dist/fiscal/eligibility.d.ts +106 -0
  285. package/dist/fiscal/eligibility.d.ts.map +1 -0
  286. package/dist/fiscal/eligibility.js +194 -0
  287. package/dist/fiscal/eligibility.js.map +1 -0
  288. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  289. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  290. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  291. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  292. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  293. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  294. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  295. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  296. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  297. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  298. package/dist/fiscal/ingestion/direction.js +32 -0
  299. package/dist/fiscal/ingestion/direction.js.map +1 -0
  300. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  301. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  302. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  303. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  304. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  305. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  306. package/dist/fiscal/ingestion/pipeline.js +699 -0
  307. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  308. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  309. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  310. package/dist/fiscal/ingestion/provider.js +47 -0
  311. package/dist/fiscal/ingestion/provider.js.map +1 -0
  312. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  313. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  314. package/dist/fiscal/ingestion/repository.js +127 -0
  315. package/dist/fiscal/ingestion/repository.js.map +1 -0
  316. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  317. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  318. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  319. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  320. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  321. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  322. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  323. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  324. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  325. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  326. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  327. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  328. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  329. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  330. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  331. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  332. package/dist/fiscal/repository.d.ts +220 -0
  333. package/dist/fiscal/repository.d.ts.map +1 -0
  334. package/dist/fiscal/repository.js +449 -0
  335. package/dist/fiscal/repository.js.map +1 -0
  336. package/dist/fiscal/sync/circuit.d.ts +86 -0
  337. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  338. package/dist/fiscal/sync/circuit.js +118 -0
  339. package/dist/fiscal/sync/circuit.js.map +1 -0
  340. package/dist/fiscal/sync/intervention.d.ts +81 -0
  341. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  342. package/dist/fiscal/sync/intervention.js +135 -0
  343. package/dist/fiscal/sync/intervention.js.map +1 -0
  344. package/dist/fiscal/sync/lease.d.ts +118 -0
  345. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  346. package/dist/fiscal/sync/lease.js +139 -0
  347. package/dist/fiscal/sync/lease.js.map +1 -0
  348. package/dist/fiscal/sync/observability.d.ts +148 -0
  349. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  350. package/dist/fiscal/sync/observability.js +239 -0
  351. package/dist/fiscal/sync/observability.js.map +1 -0
  352. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  353. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  354. package/dist/fiscal/sync/orchestrator.js +487 -0
  355. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  356. package/dist/fiscal/sync/policy.d.ts +87 -0
  357. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  358. package/dist/fiscal/sync/policy.js +136 -0
  359. package/dist/fiscal/sync/policy.js.map +1 -0
  360. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  361. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  362. package/dist/fiscal/sync/reprocess.js +237 -0
  363. package/dist/fiscal/sync/reprocess.js.map +1 -0
  364. package/dist/fiscal/sync/retry.d.ts +82 -0
  365. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  366. package/dist/fiscal/sync/retry.js +176 -0
  367. package/dist/fiscal/sync/retry.js.map +1 -0
  368. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  369. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  370. package/dist/fiscal/sync/secret-boundary.js +116 -0
  371. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  372. package/dist/fiscal/transport/https.d.ts +86 -0
  373. package/dist/fiscal/transport/https.d.ts.map +1 -0
  374. package/dist/fiscal/transport/https.js +303 -0
  375. package/dist/fiscal/transport/https.js.map +1 -0
  376. package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
  377. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  378. package/dist/fiscal/transport/synthetic-tls.js +323 -0
  379. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  380. package/dist/fiscal/transport/types.d.ts +134 -0
  381. package/dist/fiscal/transport/types.d.ts.map +1 -0
  382. package/dist/fiscal/transport/types.js +88 -0
  383. package/dist/fiscal/transport/types.js.map +1 -0
  384. package/dist/import/br-documents.d.ts +26 -0
  385. package/dist/import/br-documents.d.ts.map +1 -0
  386. package/dist/import/br-documents.js +78 -0
  387. package/dist/import/br-documents.js.map +1 -0
  388. package/dist/import/clients-import.d.ts +122 -4
  389. package/dist/import/clients-import.d.ts.map +1 -1
  390. package/dist/import/clients-import.js +341 -41
  391. package/dist/import/clients-import.js.map +1 -1
  392. package/dist/index.d.ts +115 -11
  393. package/dist/index.d.ts.map +1 -1
  394. package/dist/index.js +100 -7
  395. package/dist/index.js.map +1 -1
  396. package/dist/legal/documents.d.ts +12 -1
  397. package/dist/legal/documents.d.ts.map +1 -1
  398. package/dist/legal/documents.js +98 -14
  399. package/dist/legal/documents.js.map +1 -1
  400. package/dist/legal/index.d.ts +1 -1
  401. package/dist/legal/index.d.ts.map +1 -1
  402. package/dist/legal/index.js +1 -1
  403. package/dist/legal/index.js.map +1 -1
  404. package/dist/legal/types.d.ts +37 -2
  405. package/dist/legal/types.d.ts.map +1 -1
  406. package/dist/legal/types.js.map +1 -1
  407. package/dist/onboarding/persistence.d.ts +10 -1
  408. package/dist/onboarding/persistence.d.ts.map +1 -1
  409. package/dist/onboarding/persistence.js +4 -4
  410. package/dist/onboarding/persistence.js.map +1 -1
  411. package/dist/pilot/go-live-checklist.d.ts +41 -0
  412. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  413. package/dist/pilot/go-live-checklist.js +209 -0
  414. package/dist/pilot/go-live-checklist.js.map +1 -0
  415. package/dist/pilot/milestone.d.ts +56 -0
  416. package/dist/pilot/milestone.d.ts.map +1 -0
  417. package/dist/pilot/milestone.js +74 -0
  418. package/dist/pilot/milestone.js.map +1 -0
  419. package/dist/platform/capabilities.d.ts +88 -0
  420. package/dist/platform/capabilities.d.ts.map +1 -0
  421. package/dist/platform/capabilities.js +140 -0
  422. package/dist/platform/capabilities.js.map +1 -0
  423. package/dist/platform/job-contract.d.ts +232 -0
  424. package/dist/platform/job-contract.d.ts.map +1 -0
  425. package/dist/platform/job-contract.js +403 -0
  426. package/dist/platform/job-contract.js.map +1 -0
  427. package/dist/rbac/catalog.d.ts.map +1 -1
  428. package/dist/rbac/catalog.js +34 -0
  429. package/dist/rbac/catalog.js.map +1 -1
  430. package/dist/subscription-billing/index.d.ts +6 -5
  431. package/dist/subscription-billing/index.d.ts.map +1 -1
  432. package/dist/subscription-billing/index.js +3 -3
  433. package/dist/subscription-billing/index.js.map +1 -1
  434. package/dist/subscription-billing/service.d.ts +21 -0
  435. package/dist/subscription-billing/service.d.ts.map +1 -1
  436. package/dist/subscription-billing/service.js +90 -15
  437. package/dist/subscription-billing/service.js.map +1 -1
  438. package/dist/tenancy/features.d.ts +69 -0
  439. package/dist/tenancy/features.d.ts.map +1 -0
  440. package/dist/tenancy/features.js +123 -0
  441. package/dist/tenancy/features.js.map +1 -0
  442. package/dist/tenancy/settings.d.ts +63 -0
  443. package/dist/tenancy/settings.d.ts.map +1 -0
  444. package/dist/tenancy/settings.js +218 -0
  445. package/dist/tenancy/settings.js.map +1 -0
  446. package/dist/users/repository.d.ts +16 -1
  447. package/dist/users/repository.d.ts.map +1 -1
  448. package/dist/users/repository.js +24 -1
  449. package/dist/users/repository.js.map +1 -1
  450. package/package.json +9 -2
  451. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  452. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  453. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  454. package/src/db/migrations/0048_item_type_note.sql +16 -0
  455. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  456. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  457. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  458. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  459. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  460. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  461. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  462. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  463. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  464. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  465. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
@@ -0,0 +1,323 @@
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
+ function openssl(args, cwd) {
8
+ try {
9
+ execFileSync('openssl', [...args], { cwd, stdio: 'pipe' });
10
+ }
11
+ catch {
12
+ // O erro original é DESCARTADO de propósito: `err.stderr` do OpenSSL cita
13
+ // caminhos de arquivo e sujeitos de certificado. O que importa para
14
+ // depurar é qual subcomando falhou, e isso cabe na mensagem própria.
15
+ throw new Error(`openssl ${args[0] ?? '?'} falhou ao gerar material sintético`);
16
+ }
17
+ }
18
+ const CA_CONFIG = `[ca]
19
+ default_ca = CA_default
20
+ [CA_default]
21
+ database = index.txt
22
+ serial = serial
23
+ new_certs_dir = .
24
+ certificate = ca.crt
25
+ private_key = ca.key
26
+ default_md = sha256
27
+ policy = policy_any
28
+ email_in_dn = no
29
+ rand_serial = yes
30
+ unique_subject = no
31
+ [policy_any]
32
+ commonName = supplied
33
+ `;
34
+ /**
35
+ * Gera a ICP sintética inteira.
36
+ *
37
+ * Lenta (segundos): gera seis pares de chaves. Quem usa deve guardar o
38
+ * resultado — `syntheticPki()` abaixo faz isso por processo.
39
+ */
40
+ export function createSyntheticPki() {
41
+ if (process.env.NODE_ENV === 'production' || process.env.BARUK_APP_ENV === 'production') {
42
+ throw new Error('ICP sintética não é gerada em produção.');
43
+ }
44
+ const dir = mkdtempSync(join(tmpdir(), 'baruk-synthetic-pki-'));
45
+ const passphrase = `synthetic_${randomBytes(12).toString('hex')}`;
46
+ try {
47
+ // ── CA legítima ────────────────────────────────────────────────────────
48
+ openssl([
49
+ 'req',
50
+ '-x509',
51
+ '-newkey',
52
+ 'rsa:2048',
53
+ '-nodes',
54
+ '-keyout',
55
+ 'ca.key',
56
+ '-out',
57
+ 'ca.crt',
58
+ '-days',
59
+ '3',
60
+ '-subj',
61
+ '/CN=Baruk Synthetic Root',
62
+ '-addext',
63
+ 'basicConstraints=critical,CA:TRUE,pathlen:0',
64
+ ], dir);
65
+ // ── Servidor, com SAN para localhost e 127.0.0.1 ───────────────────────
66
+ writeFileSync(join(dir, 'srv.ext'), 'subjectAltName=DNS:localhost,IP:127.0.0.1\n');
67
+ openssl([
68
+ 'req',
69
+ '-newkey',
70
+ 'rsa:2048',
71
+ '-nodes',
72
+ '-keyout',
73
+ 'srv.key',
74
+ '-out',
75
+ 'srv.csr',
76
+ '-subj',
77
+ '/CN=localhost',
78
+ ], dir);
79
+ openssl([
80
+ 'x509',
81
+ '-req',
82
+ '-in',
83
+ 'srv.csr',
84
+ '-CA',
85
+ 'ca.crt',
86
+ '-CAkey',
87
+ 'ca.key',
88
+ '-CAcreateserial',
89
+ '-out',
90
+ 'srv.crt',
91
+ '-days',
92
+ '3',
93
+ '-extfile',
94
+ 'srv.ext',
95
+ ], dir);
96
+ // ── Cliente legítimo ───────────────────────────────────────────────────
97
+ openssl([
98
+ 'req',
99
+ '-newkey',
100
+ 'rsa:2048',
101
+ '-nodes',
102
+ '-keyout',
103
+ 'cli.key',
104
+ '-out',
105
+ 'cli.csr',
106
+ '-subj',
107
+ '/CN=Contribuinte Sintetico',
108
+ ], dir);
109
+ openssl([
110
+ 'x509',
111
+ '-req',
112
+ '-in',
113
+ 'cli.csr',
114
+ '-CA',
115
+ 'ca.crt',
116
+ '-CAkey',
117
+ 'ca.key',
118
+ '-CAcreateserial',
119
+ '-out',
120
+ 'cli.crt',
121
+ '-days',
122
+ '3',
123
+ ], dir);
124
+ openssl([
125
+ 'pkcs12',
126
+ '-export',
127
+ '-inkey',
128
+ 'cli.key',
129
+ '-in',
130
+ 'cli.crt',
131
+ '-certfile',
132
+ 'ca.crt',
133
+ '-passout',
134
+ `pass:${passphrase}`,
135
+ '-out',
136
+ 'cli.p12',
137
+ ], dir);
138
+ // ── Cliente VENCIDO ────────────────────────────────────────────────────
139
+ //
140
+ // `openssl x509 -req` não sabe datar no passado em todas as versões; `ca`
141
+ // sabe desde a 1.1.1, com `-startdate`/`-enddate`. É por isso que existe o
142
+ // arquivo de configuração acima — e não por gosto por configuração.
143
+ writeFileSync(join(dir, 'ca.cnf'), CA_CONFIG);
144
+ writeFileSync(join(dir, 'index.txt'), '');
145
+ writeFileSync(join(dir, 'serial'), '01\n');
146
+ openssl([
147
+ 'req',
148
+ '-newkey',
149
+ 'rsa:2048',
150
+ '-nodes',
151
+ '-keyout',
152
+ 'exp.key',
153
+ '-out',
154
+ 'exp.csr',
155
+ '-subj',
156
+ '/CN=Contribuinte Vencido',
157
+ ], dir);
158
+ openssl([
159
+ 'ca',
160
+ '-batch',
161
+ '-config',
162
+ 'ca.cnf',
163
+ '-in',
164
+ 'exp.csr',
165
+ '-out',
166
+ 'exp.crt',
167
+ '-notext',
168
+ '-startdate',
169
+ '200101000000Z',
170
+ '-enddate',
171
+ '200201000000Z',
172
+ ], dir);
173
+ openssl([
174
+ 'pkcs12',
175
+ '-export',
176
+ '-inkey',
177
+ 'exp.key',
178
+ '-in',
179
+ 'exp.crt',
180
+ '-certfile',
181
+ 'ca.crt',
182
+ '-passout',
183
+ `pass:${passphrase}`,
184
+ '-out',
185
+ 'exp.p12',
186
+ ], dir);
187
+ // ── CA estrangeira e seu cliente ───────────────────────────────────────
188
+ openssl([
189
+ 'req',
190
+ '-x509',
191
+ '-newkey',
192
+ 'rsa:2048',
193
+ '-nodes',
194
+ '-keyout',
195
+ 'foreign-ca.key',
196
+ '-out',
197
+ 'foreign-ca.crt',
198
+ '-days',
199
+ '3',
200
+ '-subj',
201
+ '/CN=CA Nao Confiada',
202
+ '-addext',
203
+ 'basicConstraints=critical,CA:TRUE,pathlen:0',
204
+ ], dir);
205
+ openssl([
206
+ 'req',
207
+ '-newkey',
208
+ 'rsa:2048',
209
+ '-nodes',
210
+ '-keyout',
211
+ 'foreign.key',
212
+ '-out',
213
+ 'foreign.csr',
214
+ '-subj',
215
+ '/CN=Contribuinte de Outra Cadeia',
216
+ ], dir);
217
+ openssl([
218
+ 'x509',
219
+ '-req',
220
+ '-in',
221
+ 'foreign.csr',
222
+ '-CA',
223
+ 'foreign-ca.crt',
224
+ '-CAkey',
225
+ 'foreign-ca.key',
226
+ '-CAcreateserial',
227
+ '-out',
228
+ 'foreign.crt',
229
+ '-days',
230
+ '3',
231
+ ], dir);
232
+ openssl([
233
+ 'pkcs12',
234
+ '-export',
235
+ '-inkey',
236
+ 'foreign.key',
237
+ '-in',
238
+ 'foreign.crt',
239
+ '-certfile',
240
+ 'foreign-ca.crt',
241
+ '-passout',
242
+ `pass:${passphrase}`,
243
+ '-out',
244
+ 'foreign.p12',
245
+ ], dir);
246
+ const pki = {
247
+ caCertPem: readFileSync(join(dir, 'ca.crt')),
248
+ serverKeyPem: readFileSync(join(dir, 'srv.key')),
249
+ serverCertPem: readFileSync(join(dir, 'srv.crt')),
250
+ clientPfx: readFileSync(join(dir, 'cli.p12')),
251
+ clientPassphrase: passphrase,
252
+ expiredClientPfx: readFileSync(join(dir, 'exp.p12')),
253
+ foreignCaCertPem: readFileSync(join(dir, 'foreign-ca.crt')),
254
+ foreignClientPfx: readFileSync(join(dir, 'foreign.p12')),
255
+ corruptPfx: Buffer.from('isto nao e um pkcs12, e e essa a graca', 'utf8'),
256
+ dispose() {
257
+ rmSync(dir, { recursive: true, force: true });
258
+ },
259
+ };
260
+ // O diretório é removido AGORA: o material já está em memória, e deixar
261
+ // chave privada no disco — ainda que sintética e em `tmp` — é o hábito que
262
+ // um dia se repete com material real.
263
+ rmSync(dir, { recursive: true, force: true });
264
+ return { ...pki, dispose: () => undefined };
265
+ }
266
+ catch (err) {
267
+ rmSync(dir, { recursive: true, force: true });
268
+ throw err;
269
+ }
270
+ }
271
+ let cached = null;
272
+ /** A mesma ICP para o processo inteiro. Gerar seis chaves RSA custa segundos. */
273
+ export function syntheticPki() {
274
+ cached ??= createSyntheticPki();
275
+ return cached;
276
+ }
277
+ /** Sobe um servidor TLS real na porta local. */
278
+ export async function startSyntheticTlsServer(options) {
279
+ const { pki } = options;
280
+ const estado = {
281
+ url: '',
282
+ handshakes: 0,
283
+ seen: [],
284
+ close: async () => undefined,
285
+ };
286
+ const server = createServer({
287
+ key: pki.serverKeyPem,
288
+ cert: pki.serverCertPem,
289
+ ca: [pki.caCertPem],
290
+ requestCert: options.requireClientCert ?? false,
291
+ // `rejectUnauthorized` aqui é do SERVIDOR sobre o CLIENTE — o inverso do
292
+ // que o transporte configura. Verdadeiro quando o certificado é exigido:
293
+ // é exatamente esse comportamento do ADN que precisa ser reproduzido.
294
+ rejectUnauthorized: options.requireClientCert ?? false,
295
+ }, (req, res) => {
296
+ const cert = req.socket.getPeerCertificate?.();
297
+ estado.seen.push({ path: req.url ?? '/', clientCn: cert?.subject?.CN ?? null });
298
+ const r = options.respond?.(req.url ?? '/') ?? { status: 200, body: 'ok' };
299
+ const enviar = () => {
300
+ res.writeHead(r.status, { 'content-type': 'application/xml', ...(r.headers ?? {}) });
301
+ res.end(r.body ?? '');
302
+ };
303
+ if (options.delayMs)
304
+ setTimeout(enviar, options.delayMs).unref?.();
305
+ else
306
+ enviar();
307
+ });
308
+ server.on('secureConnection', () => {
309
+ estado.handshakes += 1;
310
+ });
311
+ // Sem isto, um handshake recusado derruba o processo de teste inteiro com um
312
+ // erro não tratado — e o teste que EXISTE para provar a recusa vira um crash.
313
+ server.on('tlsClientError', () => undefined);
314
+ await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve));
315
+ const { port } = server.address();
316
+ estado.url = `https://127.0.0.1:${port}`;
317
+ estado.close = () => new Promise((resolve) => {
318
+ server.closeAllConnections?.();
319
+ server.close(() => resolve());
320
+ });
321
+ return estado;
322
+ }
323
+ //# 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"}