@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 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../src/fiscal/sync/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reprocessFiscalInboxItem = reprocessFiscalInboxItem;
4
+ exports.listFiscalInbox = listFiscalInbox;
5
+ const audit_js_1 = require("../../audit/audit.js");
6
+ const pipeline_js_1 = require("../ingestion/pipeline.js");
7
+ /**
8
+ * Reprocessa um item preservado.
9
+ *
10
+ * `deps.adapter` precisa ser o adapter da MESMA fonte que guardou o item —
11
+ * outro leiaute produziria uma interpretação errada de bytes válidos. Quem
12
+ * chama confere; a rota faz isso pela `source` gravada na linha.
13
+ */
14
+ async function reprocessFiscalInboxItem(tx, deps, input) {
15
+ const now = input.now ?? new Date();
16
+ const [row] = await tx `
17
+ SELECT id, client_id, source, source_environment, source_nsu, state,
18
+ document_type, raw, reject_reason
19
+ FROM fiscal_ingestion_inbox
20
+ WHERE id = ${input.inboxId}
21
+ `;
22
+ if (!row) {
23
+ return {
24
+ inboxId: input.inboxId,
25
+ outcome: 'not_found',
26
+ detail: 'item não encontrado',
27
+ documentId: null,
28
+ reconciled: 0,
29
+ };
30
+ }
31
+ const base = {
32
+ tenantId: input.tenantId,
33
+ clientId: row.client_id,
34
+ actorDocument: input.actorDocument,
35
+ environment: row.source_environment,
36
+ documentType: (row.document_type ?? 'nfse'),
37
+ now,
38
+ actorId: input.actorId ?? null,
39
+ };
40
+ // Já aplicado: reprocessar não é erro, e não faz nada. Devolver isso é melhor
41
+ // do que reingerir bytes que já viraram linha — seria trabalho para produzir
42
+ // uma duplicata que o banco recusaria de qualquer forma.
43
+ if (row.state === 'applied') {
44
+ return {
45
+ inboxId: row.id,
46
+ outcome: 'already_resolved',
47
+ detail: 'item já aplicado',
48
+ documentId: null,
49
+ reconciled: 0,
50
+ };
51
+ }
52
+ // Pendente: o que falta não é interpretar, é o alvo existir. Reconciliar é a
53
+ // operação certa, e ela é idempotente por construção.
54
+ if (row.state === 'pending_target') {
55
+ const reconciled = await (0, pipeline_js_1.reconcileFiscalPendingEvents)(tx, deps, {
56
+ tenantId: input.tenantId,
57
+ clientId: row.client_id,
58
+ });
59
+ await auditar(tx, input, row, reconciled > 0 ? 'event_applied' : 'event_pending', reconciled);
60
+ return {
61
+ inboxId: row.id,
62
+ outcome: reconciled > 0 ? 'event_applied' : 'event_pending',
63
+ detail: reconciled > 0
64
+ ? 'documento-alvo encontrado; evento aplicado'
65
+ : 'documento-alvo ainda não chegou',
66
+ documentId: null,
67
+ reconciled,
68
+ };
69
+ }
70
+ // Inválido: tenta interpretar de novo com o parser ATUAL.
71
+ const doc = {
72
+ nsu: row.source_nsu ?? '0',
73
+ raw: new Uint8Array(row.raw),
74
+ mimeType: 'application/xml',
75
+ };
76
+ let parsed;
77
+ try {
78
+ parsed = deps.adapter.parse(doc);
79
+ }
80
+ catch (err) {
81
+ const reason = err ? 'parse_failed' : 'parse_failed';
82
+ await tx `
83
+ UPDATE fiscal_ingestion_inbox
84
+ SET reprocessed_at = ${now}, reprocess_count = reprocess_count + 1,
85
+ reject_reason = ${reason}
86
+ WHERE id = ${row.id}
87
+ `;
88
+ return {
89
+ inboxId: row.id,
90
+ outcome: 'still_invalid',
91
+ detail: 'o parser atual ainda não lê este item',
92
+ documentId: null,
93
+ reconciled: 0,
94
+ };
95
+ }
96
+ if (parsed.event) {
97
+ // Promoção NO LUGAR. `dedupe_key` muda de `raw:<sha>` para a identidade
98
+ // real do evento, e é aí que pode haver conflito com um evento idêntico já
99
+ // guardado — caso em que este item é redundante e o outro já o preserva.
100
+ try {
101
+ await tx.savepoint((sp) => sp `
102
+ UPDATE fiscal_ingestion_inbox
103
+ SET state = 'pending_target',
104
+ document_type = ${parsed.documentType},
105
+ event_type = ${parsed.event.type},
106
+ event_code = ${parsed.event.code ?? null},
107
+ event_sequence = ${parsed.event.sequence ?? null},
108
+ occurred_at = ${parsed.event.occurredAt ?? null},
109
+ target_access_key = ${parsed.event.targetAccessKey},
110
+ dedupe_key = ${parsed.dedupeKey},
111
+ reject_reason = NULL,
112
+ reprocessed_at = ${now},
113
+ reprocess_count = reprocess_count + 1
114
+ WHERE id = ${row.id}
115
+ `);
116
+ }
117
+ catch {
118
+ await tx `
119
+ UPDATE fiscal_ingestion_inbox
120
+ SET reprocessed_at = ${now}, reprocess_count = reprocess_count + 1,
121
+ reject_reason = 'duplicate_of_existing_event'
122
+ WHERE id = ${row.id}
123
+ `;
124
+ return {
125
+ inboxId: row.id,
126
+ outcome: 'still_invalid',
127
+ detail: 'evento idêntico já preservado em outro item',
128
+ documentId: null,
129
+ reconciled: 0,
130
+ };
131
+ }
132
+ const reconciled = await (0, pipeline_js_1.reconcileFiscalPendingEvents)(tx, deps, {
133
+ tenantId: input.tenantId,
134
+ clientId: row.client_id,
135
+ });
136
+ await auditar(tx, input, row, reconciled > 0 ? 'event_applied' : 'event_pending', reconciled);
137
+ return {
138
+ inboxId: row.id,
139
+ outcome: reconciled > 0 ? 'event_applied' : 'event_pending',
140
+ detail: reconciled > 0
141
+ ? 'reinterpretado como evento e aplicado'
142
+ : 'reinterpretado como evento; alvo ainda não existe',
143
+ documentId: null,
144
+ reconciled,
145
+ };
146
+ }
147
+ // Documento. O pipeline grava com a MESMA dedupe do caminho normal.
148
+ const resultado = await (0, pipeline_js_1.reingestPreservedItem)(tx, deps, base, doc);
149
+ if (resultado.kind === 'still_invalid') {
150
+ await tx `
151
+ UPDATE fiscal_ingestion_inbox
152
+ SET reprocessed_at = ${now}, reprocess_count = reprocess_count + 1,
153
+ reject_reason = ${resultado.reason}
154
+ WHERE id = ${row.id}
155
+ `;
156
+ return {
157
+ inboxId: row.id,
158
+ outcome: 'still_invalid',
159
+ detail: resultado.reason,
160
+ documentId: null,
161
+ reconciled: 0,
162
+ };
163
+ }
164
+ // Duplicata quer dizer que o documento JÁ existe — o item está resolvido do
165
+ // mesmo jeito, e apontar para a linha existente é mais útil do que apontar
166
+ // para nada.
167
+ const documentId = resultado.kind === 'document_created'
168
+ ? resultado.documentId
169
+ : ((await tx `
170
+ SELECT id FROM fiscal_document
171
+ WHERE client_id = ${row.client_id} AND dedupe_key = ${parsed.dedupeKey}
172
+ LIMIT 1
173
+ `)[0]?.id ?? null);
174
+ await tx `
175
+ UPDATE fiscal_ingestion_inbox
176
+ SET state = 'applied', applied_at = ${now}, applied_document_id = ${documentId},
177
+ reject_reason = NULL, reprocessed_at = ${now},
178
+ reprocess_count = reprocess_count + 1
179
+ WHERE id = ${row.id}
180
+ `;
181
+ await auditar(tx, input, row, resultado.kind === 'document_created' ? 'document_created' : 'document_duplicate', 0);
182
+ return {
183
+ inboxId: row.id,
184
+ outcome: resultado.kind === 'document_created' ? 'document_created' : 'document_duplicate',
185
+ detail: resultado.kind === 'document_created'
186
+ ? 'reinterpretado como documento e gravado'
187
+ : 'documento já existia; item marcado como resolvido',
188
+ documentId,
189
+ reconciled: 0,
190
+ };
191
+ }
192
+ /** Trilha: contadores e identificadores. Nunca XML, nunca nome, nunca valor. */
193
+ async function auditar(tx, input, row, outcome, reconciled) {
194
+ await (0, audit_js_1.appendAudit)(tx, {
195
+ actorType: input.actorId ? 'user' : 'system',
196
+ actorId: input.actorId ?? null,
197
+ action: 'fiscal.inbox.reprocessed',
198
+ resourceType: 'fiscal_ingestion_inbox',
199
+ resourceId: row.id,
200
+ metadata: {
201
+ clientId: row.client_id,
202
+ source: row.source,
203
+ environment: row.source_environment,
204
+ previousState: row.state,
205
+ previousReason: row.reject_reason,
206
+ outcome,
207
+ reconciled,
208
+ },
209
+ });
210
+ }
211
+ /** A caixa de entrada, para a tela. Sem o `raw` — bytes não vão em JSON de API. */
212
+ async function listFiscalInbox(tx, input = {}) {
213
+ const limit = Math.min(Math.max(input.limit ?? 100, 1), 500);
214
+ const state = input.state ?? 'any';
215
+ const rows = await tx `
216
+ SELECT i.id, i.client_id, c.display_name AS client_name, i.source, i.source_environment,
217
+ i.source_nsu, i.state, i.event_type, i.target_access_key, i.reject_reason,
218
+ i.received_at, i.reprocess_count, octet_length(i.raw) AS size_bytes
219
+ FROM fiscal_ingestion_inbox i
220
+ LEFT JOIN client c ON c.id = i.client_id
221
+ WHERE ${state === 'any' ? tx `true` : tx `i.state = ${state}`}
222
+ ORDER BY i.received_at DESC
223
+ LIMIT ${limit}
224
+ `;
225
+ return rows.map((r) => ({
226
+ id: r.id,
227
+ clientId: r.client_id,
228
+ clientName: r.client_name,
229
+ source: r.source,
230
+ environment: r.source_environment,
231
+ sourceNsu: r.source_nsu,
232
+ state: r.state,
233
+ eventType: r.event_type,
234
+ targetAccessKey: r.target_access_key,
235
+ rejectReason: r.reject_reason,
236
+ receivedAt: r.received_at.toISOString(),
237
+ reprocessCount: r.reprocess_count,
238
+ sizeBytes: r.size_bytes,
239
+ }));
240
+ }
241
+ //# sourceMappingURL=reprocess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reprocess.js","sourceRoot":"","sources":["../../../../src/fiscal/sync/reprocess.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.categorizeProviderError = categorizeProviderError;
4
+ exports.categorizeTransportError = categorizeTransportError;
5
+ exports.categorizeHttpStatus = categorizeHttpStatus;
6
+ exports.decideFiscalRetry = decideFiscalRetry;
7
+ exports.decideFromError = decideFromError;
8
+ const types_js_1 = require("../transport/types.js");
9
+ const provider_js_1 = require("../ingestion/provider.js");
10
+ /**
11
+ * Perfil de recuo por categoria.
12
+ *
13
+ * `base` é a espera da PRIMEIRA tentativa falha; ela dobra a cada tentativa até
14
+ * `cap`. Os números não são arbitrários:
15
+ *
16
+ * - `PROVIDER_RATE_LIMIT` começa em uma HORA porque é o que a NT 2014.002 §3.5
17
+ * exige, e errar para menos custa o CNPJ de um terceiro.
18
+ * - `AUTHENTICATION_FAILED` e as duas de certificado não têm recuo: elas não
19
+ * retentam. O campo existe como zero explícito, para que ninguém leia a
20
+ * ausência como "use o default".
21
+ * - `NETWORK_TRANSIENT` começa em 30s: curto o bastante para um soluço de rede
22
+ * caber dentro do mesmo ciclo, longo o bastante para não ser um laço.
23
+ */
24
+ const PROFILE = {
25
+ NETWORK_TRANSIENT: { retryable: true, baseMs: 30_000, capMs: 900_000, provider: true },
26
+ PROVIDER_RATE_LIMIT: { retryable: true, baseMs: 3_600_000, capMs: 21_600_000, provider: true },
27
+ PROVIDER_TEMPORARILY_UNAVAILABLE: {
28
+ retryable: true,
29
+ baseMs: 300_000,
30
+ capMs: 3_600_000,
31
+ provider: true,
32
+ },
33
+ AUTHENTICATION_FAILED: { retryable: false, baseMs: 0, capMs: 0, provider: false },
34
+ CERTIFICATE_INVALID: { retryable: false, baseMs: 0, capMs: 0, provider: false },
35
+ CERTIFICATE_EXPIRED: { retryable: false, baseMs: 0, capMs: 0, provider: false },
36
+ PERMISSION_DENIED: { retryable: false, baseMs: 0, capMs: 0, provider: false },
37
+ // Resposta que não é o que o contrato promete pode ser um deploy ruim do
38
+ // provedor — volta sozinho — mas insistir rápido não ajuda em nada.
39
+ BAD_RESPONSE: { retryable: true, baseMs: 600_000, capMs: 3_600_000, provider: true },
40
+ // Documento ilegível é determinístico: o MESMO XML vai falhar de novo. Ele já
41
+ // ficou preservado na caixa de entrada pelo pipeline; retentar o lote não o
42
+ // conserta e ainda gasta a cota do cliente.
43
+ MALFORMED_DOCUMENT: { retryable: false, baseMs: 0, capMs: 0, provider: false },
44
+ // Outro processo mexeu no cursor. Volta sozinho, e rápido: o conflito é nosso.
45
+ CURSOR_CONFLICT: { retryable: true, baseMs: 60_000, capMs: 600_000, provider: false },
46
+ INTERNAL_ERROR: { retryable: true, baseMs: 300_000, capMs: 3_600_000, provider: false },
47
+ };
48
+ const INTERVENTION = {
49
+ AUTHENTICATION_FAILED: 'auth_required',
50
+ CERTIFICATE_EXPIRED: 'certificate_expired',
51
+ CERTIFICATE_INVALID: 'certificate_invalid',
52
+ PERMISSION_DENIED: 'provider_access_denied',
53
+ };
54
+ /** Classe do provedor → categoria de decisão. */
55
+ function categorizeProviderError(cls) {
56
+ switch (cls) {
57
+ case 'transient':
58
+ return 'PROVIDER_TEMPORARILY_UNAVAILABLE';
59
+ case 'throttled':
60
+ return 'PROVIDER_RATE_LIMIT';
61
+ case 'auth':
62
+ return 'AUTHENTICATION_FAILED';
63
+ case 'not_allowed':
64
+ return 'PERMISSION_DENIED';
65
+ case 'invalid':
66
+ return 'MALFORMED_DOCUMENT';
67
+ case 'unknown':
68
+ // Não classificado é tratado como transitório COM TETO — nunca como
69
+ // permanente (perderia recuperação) nem como retentável para sempre.
70
+ return 'NETWORK_TRANSIENT';
71
+ }
72
+ }
73
+ /** Classe do transporte → categoria de decisão. */
74
+ function categorizeTransportError(cls) {
75
+ switch (cls) {
76
+ case 'network':
77
+ return 'NETWORK_TRANSIENT';
78
+ case 'timeout':
79
+ // Timeout NÃO é "não aconteceu": o servidor pode ter processado. Retenta,
80
+ // e a idempotência da ingestão é quem absorve a repetição.
81
+ return 'NETWORK_TRANSIENT';
82
+ case 'tls':
83
+ return 'PROVIDER_TEMPORARILY_UNAVAILABLE';
84
+ case 'certificate':
85
+ return 'CERTIFICATE_INVALID';
86
+ case 'protocol':
87
+ return 'BAD_RESPONSE';
88
+ }
89
+ }
90
+ /** Status HTTP → categoria, para provedores REST (o ADN é um). */
91
+ function categorizeHttpStatus(status) {
92
+ if (status === 401)
93
+ return 'AUTHENTICATION_FAILED';
94
+ if (status === 403)
95
+ return 'PERMISSION_DENIED';
96
+ if (status === 429)
97
+ return 'PROVIDER_RATE_LIMIT';
98
+ if (status === 408 || status === 504)
99
+ return 'NETWORK_TRANSIENT';
100
+ if (status === 503 || status === 502)
101
+ return 'PROVIDER_TEMPORARILY_UNAVAILABLE';
102
+ if (status >= 500)
103
+ return 'PROVIDER_TEMPORARILY_UNAVAILABLE';
104
+ if (status >= 400)
105
+ return 'BAD_RESPONSE';
106
+ return 'INTERNAL_ERROR';
107
+ }
108
+ /**
109
+ * Decide o que fazer com uma falha.
110
+ *
111
+ * ## Jitter é obrigatório, não enfeite
112
+ *
113
+ * Sem ele, cem clientes que falharam no mesmo minuto voltam no mesmo minuto —
114
+ * o rebanho que derruba o provedor de novo assim que ele levanta. O jitter é
115
+ * "full jitter": um sorteio em `[0, espera]`, e não `espera ± 10%`. A variante
116
+ * completa é a que realmente espalha; a estreita só desloca o rebanho.
117
+ *
118
+ * ## `Retry-After` vence o nosso cálculo — com piso
119
+ *
120
+ * Quando o servidor diz quando voltar, ele sabe mais do que nós. Mas um
121
+ * `Retry-After: 0` num 429 é o servidor se contradizendo; o piso de 60s existe
122
+ * para que a obediência não vire laço.
123
+ */
124
+ function decideFiscalRetry(category, input,
125
+ /** Código curto do provedor/transporte. Sem ele, a categoria serve de rótulo. */
126
+ code = category) {
127
+ const profile = PROFILE[category];
128
+ const escalateAfter = input.humanEscalationAfter ?? 5;
129
+ if (!profile.retryable) {
130
+ return {
131
+ category,
132
+ retryable: false,
133
+ nextAttemptAt: null,
134
+ countsAgainstProvider: profile.provider,
135
+ interventionKind: INTERVENTION[category] ?? null,
136
+ code,
137
+ };
138
+ }
139
+ let nextAttemptAt;
140
+ if (input.retryAfter && input.retryAfter > input.now) {
141
+ const floorMs = category === 'PROVIDER_RATE_LIMIT' ? 60_000 : 0;
142
+ const asked = input.retryAfter.getTime() - input.now.getTime();
143
+ nextAttemptAt = new Date(input.now.getTime() + Math.max(asked, floorMs));
144
+ }
145
+ else {
146
+ // Expoente limitado a 6 antes do teto: 2^6 já ultrapassa qualquer `capMs`
147
+ // desta tabela, e deixar o expoente crescer sem limite produz `Infinity`
148
+ // depois de mil falhas — uma data inválida em vez de uma espera longa.
149
+ const exponent = Math.min(input.previousFailures, 6);
150
+ const ceiling = Math.min(profile.baseMs * 2 ** exponent, profile.capMs);
151
+ const random = input.random ?? Math.random;
152
+ // Full jitter com piso na metade do teto seria o "equal jitter"; aqui o
153
+ // sorteio é em [0, ceiling] e o piso é a base, para que a primeira falha
154
+ // nunca produza uma retentativa imediata.
155
+ const jittered = Math.floor(random() * ceiling);
156
+ nextAttemptAt = new Date(input.now.getTime() + Math.max(jittered, profile.baseMs));
157
+ }
158
+ // Retentável não significa retentável para sempre. Depois de N falhas
159
+ // consecutivas, o caso deixa de ser "o provedor oscilou" e passa a ser algo
160
+ // que uma pessoa precisa olhar — sem parar de retentar, porque pode voltar.
161
+ const escalated = input.previousFailures + 1 >= escalateAfter;
162
+ return {
163
+ category,
164
+ retryable: true,
165
+ nextAttemptAt,
166
+ countsAgainstProvider: profile.provider,
167
+ interventionKind: escalated ? 'repeated_failure' : null,
168
+ code,
169
+ };
170
+ }
171
+ /** Atalho: recebe o erro e devolve a decisão, sem quem chama classificar antes. */
172
+ function decideFromError(err, input) {
173
+ if (err instanceof types_js_1.FiscalTransportError) {
174
+ return decideFiscalRetry(categorizeTransportError(err.errorClass), { ...input, retryAfter: input.retryAfter ?? err.retryAfter }, err.code);
175
+ }
176
+ if (err instanceof provider_js_1.FiscalProviderError) {
177
+ return decideFiscalRetry(categorizeProviderError(err.errorClass), { ...input, retryAfter: input.retryAfter ?? err.retryAfter }, err.providerCode ?? err.errorClass);
178
+ }
179
+ // Erro não classificado é NOSSO até prova em contrário: tratá-lo como falha do
180
+ // provedor esconderia um defeito de código atrás de um recuo educado.
181
+ return decideFiscalRetry('INTERNAL_ERROR', input, 'UNCLASSIFIED');
182
+ }
183
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/fiscal/sync/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FiscalSecretBoundaryError = void 0;
4
+ exports.grantFiscalSecretAccess = grantFiscalSecretAccess;
5
+ exports.assertFiscalSecretAccess = assertFiscalSecretAccess;
6
+ exports.describeAdapter = describeAdapter;
7
+ /**
8
+ * A fronteira entre "decidir se devemos sincronizar" e "abrir o cofre".
9
+ *
10
+ * ## O defeito que este módulo existe para tornar indizível
11
+ *
12
+ * A primeira escrita da Fase 2 tinha UM contrato para a fonte:
13
+ *
14
+ * adapterFactory({ tx, tenantId, clientId, documentType, environment })
15
+ * → { adapter, dispose } | null
16
+ *
17
+ * Ele devolvia o adapter JÁ com transporte e credencial. Quem o implementasse
18
+ * para homologação ou produção teria de decifrar o material do certificado ali
19
+ * dentro — não por descuido, mas porque era isso que o contrato pedia. E o
20
+ * orquestrador o chamava logo depois da cadência, ANTES da janela do cursor, do
21
+ * disjuntor, da prontidão da credencial, do CNPJ do ator e do lease.
22
+ *
23
+ * O resultado era estrutural, não hipotético: cinco portões que sabem dizer
24
+ * "não" sem tocar em segredo nenhum ficavam depois do acesso ao cofre. Um
25
+ * escritório com duzentos clientes cujo disjuntor estivesse aberto decifraria
26
+ * duzentos certificados para em seguida não fazer requisição alguma.
27
+ *
28
+ * ## A separação: descritor primeiro, material depois
29
+ *
30
+ * A fonte passa a ser resolvida em duas etapas com custos diferentes:
31
+ *
32
+ * descritor quem é o provedor, qual ambiente, qual slug de fonte, qual
33
+ * teto de lote, qual credencial ele exige. Tudo isto é METADATA:
34
+ * sai de configuração e de tabela, e nenhuma parte exige abrir
35
+ * material criptográfico.
36
+ *
37
+ * materialize agora sim: cofre, chave privada, agente de TLS mútuo, adapter.
38
+ *
39
+ * O descritor é o que os portões precisam — a fonte (`source`) governa cursor,
40
+ * disjuntor e prontidão, e ela vem do descritor. `materialize` só é convidado
41
+ * quando não sobrou nenhum motivo para não sincronizar.
42
+ *
43
+ * ## Por que a autorização é um objeto, e não um booleano
44
+ *
45
+ * Uma convenção ("chame materialize só depois dos portões") volta a ser violada
46
+ * no primeiro refactor, em silêncio. Aqui a autorização é um valor que só o
47
+ * orquestrador consegue emitir, e `loadFiscalTlsMaterial` a exige.
48
+ *
49
+ * A marca não é um campo: é um `WeakSet` deste módulo. Um objeto com a forma
50
+ * certa não passa; uma cópia por spread do objeto certo também não passa. Só
51
+ * passa a instância que `grantFiscalSecretAccess` devolveu — e essa função não
52
+ * é reexportada pelo `index` do pacote, de modo que fora de `@baruk/core` não
53
+ * existe caminho para fabricá-la.
54
+ *
55
+ * Isso não é defesa contra um adversário com acesso ao processo: é a defesa
56
+ * contra a próxima pessoa apressada, que é quem de fato reintroduz este defeito.
57
+ */
58
+ /** Violação da fronteira. Classe e contexto — nunca material, nunca ponteiro. */
59
+ class FiscalSecretBoundaryError extends Error {
60
+ stage;
61
+ constructor(stage) {
62
+ super(`SECRET_BOUNDARY_VIOLATION: ${stage}`);
63
+ this.stage = stage;
64
+ this.name = 'FiscalSecretBoundaryError';
65
+ }
66
+ }
67
+ exports.FiscalSecretBoundaryError = FiscalSecretBoundaryError;
68
+ /**
69
+ * As autorizações realmente emitidas.
70
+ *
71
+ * `WeakSet` e não um campo `Symbol`: um campo sobrevive a `{...auth}`, a
72
+ * `structuredClone` e a `JSON.parse(JSON.stringify(auth))`, e qualquer uma
73
+ * dessas três é como a checagem passaria a aceitar um objeto que os portões
74
+ * nunca aprovaram.
75
+ */
76
+ const emitidas = new WeakSet();
77
+ /**
78
+ * Emite o passe. Chamada em UM lugar: o orquestrador, depois do último portão.
79
+ *
80
+ * Deliberadamente ausente do `index.ts` do pacote. Um `grep` por este nome
81
+ * responde "quem pode autorizar a abertura do cofre fiscal?" — e a resposta tem
82
+ * de caber em uma tela.
83
+ */
84
+ function grantFiscalSecretAccess(input) {
85
+ const auth = Object.freeze({ ...input });
86
+ emitidas.add(auth);
87
+ return auth;
88
+ }
89
+ /**
90
+ * Recusa qualquer coisa que não tenha saído de `grantFiscalSecretAccess`.
91
+ *
92
+ * Lança em vez de devolver `false` porque não existe caminho de recuperação:
93
+ * chegar aqui sem passe significa que a ordem dos portões foi quebrada, e
94
+ * seguir adiante seria exatamente o dano que a fronteira existe para impedir.
95
+ */
96
+ function assertFiscalSecretAccess(auth, stage) {
97
+ if (!auth || typeof auth !== 'object' || !emitidas.has(auth)) {
98
+ throw new FiscalSecretBoundaryError(stage);
99
+ }
100
+ }
101
+ /**
102
+ * Descritor derivado de um adapter JÁ construído.
103
+ *
104
+ * Existe para as fontes que não têm segredo a materializar — hoje, o provedor
105
+ * sintético. Construir o adapter durante a resolução do descritor só é legítimo
106
+ * porque ali não há cofre a abrir: um adapter que exija material de certificado
107
+ * NÃO pode nascer nesta etapa, e é para esse caso que `materialize` existe.
108
+ *
109
+ * A alternativa seria repetir os cinco campos à mão em cada chamador, e a
110
+ * primeira divergência entre o descritor e o adapter que ele descreve
111
+ * apareceria como um teto de lote errado contra o ambiente nacional.
112
+ */
113
+ function describeAdapter(adapter, credentialKind = 'certificate_a1') {
114
+ return {
115
+ source: adapter.source,
116
+ documentTypes: adapter.documentTypes,
117
+ environments: adapter.environments,
118
+ batchLimit: adapter.batchLimit,
119
+ exhaustedBackoffSeconds: adapter.exhaustedBackoffSeconds,
120
+ credentialKind,
121
+ };
122
+ }
123
+ //# sourceMappingURL=secret-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-boundary.js","sourceRoot":"","sources":["../../../../src/fiscal/sync/secret-boundary.ts"],"names":[],"mappings":";;;AAwGA,0DAMC;AASD,4DAOC;AAiFD,0CAYC;AAnND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,iFAAiF;AACjF,MAAa,yBAA0B,SAAQ,KAAK;IAC7B;IAArB,YAAqB,KAAa;QAChC,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;QAD1B,UAAK,GAAL,KAAK,CAAQ;QAEhC,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AALD,8DAKC;AAqBD;;;;;;;GAOG;AACH,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAU,CAAC;AAEvC;;;;;;GAMG;AACH,SAAgB,uBAAuB,CACrC,KAAgC;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,wBAAwB,CACtC,IAAkD,EAClD,KAAa;IAEb,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAqED;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAC7B,OAA8B,EAC9B,iBAAuC,gBAAgB;IAEvD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;QACxD,cAAc;KACf,CAAC;AACJ,CAAC"}