@baruk/core 0.3.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1047) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +127 -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/password-reset.d.ts +30 -1
  8. package/dist/auth/password-reset.d.ts.map +1 -1
  9. package/dist/auth/password-reset.js +139 -11
  10. package/dist/auth/password-reset.js.map +1 -1
  11. package/dist/auth/service.d.ts +60 -2
  12. package/dist/auth/service.d.ts.map +1 -1
  13. package/dist/auth/service.js +121 -11
  14. package/dist/auth/service.js.map +1 -1
  15. package/dist/billing/ar-repository.d.ts +374 -0
  16. package/dist/billing/ar-repository.d.ts.map +1 -0
  17. package/dist/billing/ar-repository.js +783 -0
  18. package/dist/billing/ar-repository.js.map +1 -0
  19. package/dist/billing/auto-generation.d.ts +87 -0
  20. package/dist/billing/auto-generation.d.ts.map +1 -0
  21. package/dist/billing/auto-generation.js +181 -0
  22. package/dist/billing/auto-generation.js.map +1 -0
  23. package/dist/billing/live-guard.d.ts +64 -0
  24. package/dist/billing/live-guard.d.ts.map +1 -0
  25. package/dist/billing/live-guard.js +68 -0
  26. package/dist/billing/live-guard.js.map +1 -0
  27. package/dist/billing/payment-means-catalog.d.ts +17 -0
  28. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  29. package/dist/billing/payment-means-catalog.js +21 -0
  30. package/dist/billing/payment-means-catalog.js.map +1 -0
  31. package/dist/billing/payment-means.d.ts +38 -0
  32. package/dist/billing/payment-means.d.ts.map +1 -0
  33. package/dist/billing/payment-means.js +29 -0
  34. package/dist/billing/payment-means.js.map +1 -0
  35. package/dist/billing/payment-rail.d.ts +118 -0
  36. package/dist/billing/payment-rail.d.ts.map +1 -0
  37. package/dist/billing/payment-rail.js +295 -0
  38. package/dist/billing/payment-rail.js.map +1 -0
  39. package/dist/billing/provider/asaas.d.ts +46 -1
  40. package/dist/billing/provider/asaas.d.ts.map +1 -1
  41. package/dist/billing/provider/asaas.js +194 -14
  42. package/dist/billing/provider/asaas.js.map +1 -1
  43. package/dist/billing/provider/manual.js +1 -1
  44. package/dist/billing/provider/manual.js.map +1 -1
  45. package/dist/billing/provider/types.d.ts +115 -8
  46. package/dist/billing/provider/types.d.ts.map +1 -1
  47. package/dist/billing/provider-account.d.ts +127 -0
  48. package/dist/billing/provider-account.d.ts.map +1 -0
  49. package/dist/billing/provider-account.js +217 -0
  50. package/dist/billing/provider-account.js.map +1 -0
  51. package/dist/billing/provider-onboarding.d.ts +67 -0
  52. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  53. package/dist/billing/provider-onboarding.js +234 -0
  54. package/dist/billing/provider-onboarding.js.map +1 -0
  55. package/dist/billing/receivable.d.ts +5 -1
  56. package/dist/billing/receivable.d.ts.map +1 -1
  57. package/dist/billing/reconcile.d.ts +58 -0
  58. package/dist/billing/reconcile.d.ts.map +1 -0
  59. package/dist/billing/reconcile.js +138 -0
  60. package/dist/billing/reconcile.js.map +1 -0
  61. package/dist/billing/repository.d.ts +134 -1
  62. package/dist/billing/repository.d.ts.map +1 -1
  63. package/dist/billing/repository.js +193 -20
  64. package/dist/billing/repository.js.map +1 -1
  65. package/dist/cjs/audit/repository.js +41 -7
  66. package/dist/cjs/audit/repository.js.map +1 -1
  67. package/dist/cjs/auth/password-reset.js +141 -11
  68. package/dist/cjs/auth/password-reset.js.map +1 -1
  69. package/dist/cjs/auth/service.js +121 -10
  70. package/dist/cjs/auth/service.js.map +1 -1
  71. package/dist/cjs/billing/ar-repository.js +804 -0
  72. package/dist/cjs/billing/ar-repository.js.map +1 -0
  73. package/dist/cjs/billing/auto-generation.js +186 -0
  74. package/dist/cjs/billing/auto-generation.js.map +1 -0
  75. package/dist/cjs/billing/live-guard.js +72 -0
  76. package/dist/cjs/billing/live-guard.js.map +1 -0
  77. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  78. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  79. package/dist/cjs/billing/payment-means.js +33 -0
  80. package/dist/cjs/billing/payment-means.js.map +1 -0
  81. package/dist/cjs/billing/payment-rail.js +301 -0
  82. package/dist/cjs/billing/payment-rail.js.map +1 -0
  83. package/dist/cjs/billing/provider/asaas.js +194 -14
  84. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  85. package/dist/cjs/billing/provider/manual.js +1 -1
  86. package/dist/cjs/billing/provider/manual.js.map +1 -1
  87. package/dist/cjs/billing/provider-account.js +229 -0
  88. package/dist/cjs/billing/provider-account.js.map +1 -0
  89. package/dist/cjs/billing/provider-onboarding.js +239 -0
  90. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  91. package/dist/cjs/billing/reconcile.js +143 -0
  92. package/dist/cjs/billing/reconcile.js.map +1 -0
  93. package/dist/cjs/billing/repository.js +197 -19
  94. package/dist/cjs/billing/repository.js.map +1 -1
  95. package/dist/cjs/clients/ibge.js +103 -0
  96. package/dist/cjs/clients/ibge.js.map +1 -0
  97. package/dist/cjs/clients/repository.js +276 -23
  98. package/dist/cjs/clients/repository.js.map +1 -1
  99. package/dist/cjs/collection/branding.js +330 -0
  100. package/dist/cjs/collection/branding.js.map +1 -0
  101. package/dist/cjs/collection/channel-accounts.js +137 -0
  102. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  103. package/dist/cjs/collection/channel.js +17 -0
  104. package/dist/cjs/collection/channel.js.map +1 -0
  105. package/dist/cjs/collection/clearance-store.js +74 -0
  106. package/dist/cjs/collection/clearance-store.js.map +1 -0
  107. package/dist/cjs/collection/communication-bridge.js +140 -0
  108. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  109. package/dist/cjs/collection/communication-runtime.js +256 -0
  110. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  111. package/dist/cjs/collection/consent-repository.js +84 -0
  112. package/dist/cjs/collection/consent-repository.js.map +1 -0
  113. package/dist/cjs/collection/copy.js +125 -0
  114. package/dist/cjs/collection/copy.js.map +1 -0
  115. package/dist/cjs/collection/delivery-callback.js +151 -0
  116. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  117. package/dist/cjs/collection/email-layout.js +252 -0
  118. package/dist/cjs/collection/email-layout.js.map +1 -0
  119. package/dist/cjs/collection/engine.js +434 -0
  120. package/dist/cjs/collection/engine.js.map +1 -0
  121. package/dist/cjs/collection/format.js +76 -0
  122. package/dist/cjs/collection/format.js.map +1 -0
  123. package/dist/cjs/collection/payment-block.js +3 -0
  124. package/dist/cjs/collection/payment-block.js.map +1 -0
  125. package/dist/cjs/collection/policy.js +175 -0
  126. package/dist/cjs/collection/policy.js.map +1 -0
  127. package/dist/cjs/collection/repository.js +260 -0
  128. package/dist/cjs/collection/repository.js.map +1 -0
  129. package/dist/cjs/collection/subject.js +104 -0
  130. package/dist/cjs/collection/subject.js.map +1 -0
  131. package/dist/cjs/collection/template-catalog.js +165 -0
  132. package/dist/cjs/collection/template-catalog.js.map +1 -0
  133. package/dist/cjs/collection/template.js +78 -0
  134. package/dist/cjs/collection/template.js.map +1 -0
  135. package/dist/cjs/communication/adapters/email.js +132 -0
  136. package/dist/cjs/communication/adapters/email.js.map +1 -0
  137. package/dist/cjs/communication/adapters/sms.js +127 -0
  138. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  139. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  140. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  141. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  142. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  143. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  144. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  145. package/dist/cjs/communication/audit.js +61 -0
  146. package/dist/cjs/communication/audit.js.map +1 -0
  147. package/dist/cjs/communication/capabilities.js +76 -0
  148. package/dist/cjs/communication/capabilities.js.map +1 -0
  149. package/dist/cjs/communication/channel.js +53 -0
  150. package/dist/cjs/communication/channel.js.map +1 -0
  151. package/dist/cjs/communication/claim.js +228 -0
  152. package/dist/cjs/communication/claim.js.map +1 -0
  153. package/dist/cjs/communication/clearance.js +18 -0
  154. package/dist/cjs/communication/clearance.js.map +1 -0
  155. package/dist/cjs/communication/consent.js +43 -0
  156. package/dist/cjs/communication/consent.js.map +1 -0
  157. package/dist/cjs/communication/context.js +45 -0
  158. package/dist/cjs/communication/context.js.map +1 -0
  159. package/dist/cjs/communication/credentials.js +121 -0
  160. package/dist/cjs/communication/credentials.js.map +1 -0
  161. package/dist/cjs/communication/dry-run-scenario.js +166 -0
  162. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  163. package/dist/cjs/communication/dry-run.js +97 -0
  164. package/dist/cjs/communication/dry-run.js.map +1 -0
  165. package/dist/cjs/communication/engine.js +495 -0
  166. package/dist/cjs/communication/engine.js.map +1 -0
  167. package/dist/cjs/communication/graph.js +50 -0
  168. package/dist/cjs/communication/graph.js.map +1 -0
  169. package/dist/cjs/communication/idempotency.js +26 -0
  170. package/dist/cjs/communication/idempotency.js.map +1 -0
  171. package/dist/cjs/communication/identity.js +110 -0
  172. package/dist/cjs/communication/identity.js.map +1 -0
  173. package/dist/cjs/communication/index.js +135 -0
  174. package/dist/cjs/communication/index.js.map +1 -0
  175. package/dist/cjs/communication/onboarding.js +297 -0
  176. package/dist/cjs/communication/onboarding.js.map +1 -0
  177. package/dist/cjs/communication/policy.js +16 -0
  178. package/dist/cjs/communication/policy.js.map +1 -0
  179. package/dist/cjs/communication/routing.js +77 -0
  180. package/dist/cjs/communication/routing.js.map +1 -0
  181. package/dist/cjs/communication/sender-profile.js +128 -0
  182. package/dist/cjs/communication/sender-profile.js.map +1 -0
  183. package/dist/cjs/communication/status.js +86 -0
  184. package/dist/cjs/communication/status.js.map +1 -0
  185. package/dist/cjs/communication/stores/onboarding.js +135 -0
  186. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  187. package/dist/cjs/communication/stores/postgres.js +458 -0
  188. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  189. package/dist/cjs/communication/stores/routing.js +334 -0
  190. package/dist/cjs/communication/stores/routing.js.map +1 -0
  191. package/dist/cjs/communication/stores/secrets.js +126 -0
  192. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  193. package/dist/cjs/communication/template-provider.js +22 -0
  194. package/dist/cjs/communication/template-provider.js.map +1 -0
  195. package/dist/cjs/communication/template.js +63 -0
  196. package/dist/cjs/communication/template.js.map +1 -0
  197. package/dist/cjs/communication/webhook-subscription.js +258 -0
  198. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  199. package/dist/cjs/communication/webhook.js +292 -0
  200. package/dist/cjs/communication/webhook.js.map +1 -0
  201. package/dist/cjs/competence/business-days.js +155 -0
  202. package/dist/cjs/competence/business-days.js.map +1 -0
  203. package/dist/cjs/competence/catalog-validation.js +174 -0
  204. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  205. package/dist/cjs/competence/obligation-preview.js +190 -0
  206. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  207. package/dist/cjs/competence/repository.js +622 -0
  208. package/dist/cjs/competence/repository.js.map +1 -0
  209. package/dist/cjs/contacts/phone.js +192 -0
  210. package/dist/cjs/contacts/phone.js.map +1 -0
  211. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  212. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  213. package/dist/cjs/dashboard/repository.js +11 -1
  214. package/dist/cjs/dashboard/repository.js.map +1 -1
  215. package/dist/cjs/db/client.js +17 -11
  216. package/dist/cjs/db/client.js.map +1 -1
  217. package/dist/cjs/db/provision-e2e-identity.js +111 -0
  218. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  219. package/dist/cjs/db/seed-catalog.js +48 -0
  220. package/dist/cjs/db/seed-catalog.js.map +1 -0
  221. package/dist/cjs/db/seed.js +15 -7
  222. package/dist/cjs/db/seed.js.map +1 -1
  223. package/dist/cjs/documents/repository.js +244 -0
  224. package/dist/cjs/documents/repository.js.map +1 -0
  225. package/dist/cjs/documents/requests.js +136 -0
  226. package/dist/cjs/documents/requests.js.map +1 -0
  227. package/dist/cjs/fiscal/applicability.js +164 -0
  228. package/dist/cjs/fiscal/applicability.js.map +1 -0
  229. package/dist/cjs/fiscal/conditions.js +198 -0
  230. package/dist/cjs/fiscal/conditions.js.map +1 -0
  231. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  232. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  233. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  234. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  235. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  236. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  237. package/dist/cjs/fiscal/coverage/model.js +127 -0
  238. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  239. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  240. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  241. package/dist/cjs/fiscal/credentials/material.js +168 -0
  242. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  243. package/dist/cjs/fiscal/credentials/readiness.js +163 -0
  244. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  245. package/dist/cjs/fiscal/eligibility.js +199 -0
  246. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  247. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  248. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  249. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  250. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  251. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  252. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  253. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  254. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  255. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  256. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  257. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  258. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  259. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  260. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  261. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  262. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  263. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  264. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  265. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  266. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  267. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  268. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  269. package/dist/cjs/fiscal/repository.js +470 -0
  270. package/dist/cjs/fiscal/repository.js.map +1 -0
  271. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  272. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  273. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  274. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  275. package/dist/cjs/fiscal/sync/lease.js +146 -0
  276. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  277. package/dist/cjs/fiscal/sync/observability.js +244 -0
  278. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  279. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  280. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  281. package/dist/cjs/fiscal/sync/policy.js +143 -0
  282. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  283. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  284. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  285. package/dist/cjs/fiscal/sync/retry.js +183 -0
  286. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  287. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  288. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  289. package/dist/cjs/fiscal/transport/https.js +309 -0
  290. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  291. package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
  292. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  293. package/dist/cjs/fiscal/transport/types.js +93 -0
  294. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  295. package/dist/cjs/import/br-documents.js +85 -0
  296. package/dist/cjs/import/br-documents.js.map +1 -0
  297. package/dist/cjs/import/clients-import.js +347 -40
  298. package/dist/cjs/import/clients-import.js.map +1 -1
  299. package/dist/cjs/index.js +711 -39
  300. package/dist/cjs/index.js.map +1 -1
  301. package/dist/cjs/legal/documents.js +224 -17
  302. package/dist/cjs/legal/documents.js.map +1 -1
  303. package/dist/cjs/legal/index.js +3 -1
  304. package/dist/cjs/legal/index.js.map +1 -1
  305. package/dist/cjs/legal/types.js +1 -0
  306. package/dist/cjs/legal/types.js.map +1 -1
  307. package/dist/cjs/mail/auth-templates.js +29 -0
  308. package/dist/cjs/mail/auth-templates.js.map +1 -0
  309. package/dist/cjs/mail/dedup-store.js +12 -51
  310. package/dist/cjs/mail/dedup-store.js.map +1 -1
  311. package/dist/cjs/mail/index.js +16 -4
  312. package/dist/cjs/mail/index.js.map +1 -1
  313. package/dist/cjs/mail/provider.js +12 -247
  314. package/dist/cjs/mail/provider.js.map +1 -1
  315. package/dist/cjs/mail/resend.js +14 -18
  316. package/dist/cjs/mail/resend.js.map +1 -1
  317. package/dist/cjs/mail/sender-resolver.js +12 -11
  318. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  319. package/dist/cjs/mail/template-renderer.js +11 -16
  320. package/dist/cjs/mail/template-renderer.js.map +1 -1
  321. package/dist/cjs/mail/transactional-outbound.js +117 -0
  322. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  323. package/dist/cjs/mail/types.js +8 -35
  324. package/dist/cjs/mail/types.js.map +1 -1
  325. package/dist/cjs/onboarding/persistence.js +4 -4
  326. package/dist/cjs/onboarding/persistence.js.map +1 -1
  327. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  328. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  329. package/dist/cjs/pilot/milestone.js +79 -0
  330. package/dist/cjs/pilot/milestone.js.map +1 -0
  331. package/dist/cjs/platform/capabilities.js +144 -0
  332. package/dist/cjs/platform/capabilities.js.map +1 -0
  333. package/dist/cjs/platform/job-contract.js +411 -0
  334. package/dist/cjs/platform/job-contract.js.map +1 -0
  335. package/dist/cjs/portal/provisioning.js +144 -0
  336. package/dist/cjs/portal/provisioning.js.map +1 -0
  337. package/dist/cjs/pricing-engine/canonical.js +42 -0
  338. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  339. package/dist/cjs/pricing-engine/errors.js +6 -1
  340. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  341. package/dist/cjs/pricing-engine/index.js +12 -1
  342. package/dist/cjs/pricing-engine/index.js.map +1 -1
  343. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  344. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  345. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  346. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  347. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  348. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  349. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  350. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  351. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  352. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  353. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  354. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  355. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  356. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  357. package/dist/cjs/rbac/authorize.js +28 -0
  358. package/dist/cjs/rbac/authorize.js.map +1 -1
  359. package/dist/cjs/rbac/catalog.js +101 -1
  360. package/dist/cjs/rbac/catalog.js.map +1 -1
  361. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  362. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  363. package/dist/cjs/rbac/workload.js +191 -0
  364. package/dist/cjs/rbac/workload.js.map +1 -0
  365. package/dist/cjs/storage/checksum.js +15 -0
  366. package/dist/cjs/storage/checksum.js.map +1 -0
  367. package/dist/cjs/storage/key.js +72 -0
  368. package/dist/cjs/storage/key.js.map +1 -0
  369. package/dist/cjs/storage/local.js +100 -0
  370. package/dist/cjs/storage/local.js.map +1 -0
  371. package/dist/cjs/storage/r2.js +181 -0
  372. package/dist/cjs/storage/r2.js.map +1 -0
  373. package/dist/cjs/storage/registry.js +41 -0
  374. package/dist/cjs/storage/registry.js.map +1 -0
  375. package/dist/cjs/storage/types.js +50 -0
  376. package/dist/cjs/storage/types.js.map +1 -0
  377. package/dist/cjs/subscription-billing/index.js +2 -1
  378. package/dist/cjs/subscription-billing/index.js.map +1 -1
  379. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  380. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  381. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  382. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  383. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  384. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  385. package/dist/cjs/subscription-billing/service.js +208 -83
  386. package/dist/cjs/subscription-billing/service.js.map +1 -1
  387. package/dist/cjs/subscription-billing/types.js.map +1 -1
  388. package/dist/cjs/tenancy/features.js +131 -0
  389. package/dist/cjs/tenancy/features.js.map +1 -0
  390. package/dist/cjs/tenancy/provisioning.js +32 -8
  391. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  392. package/dist/cjs/tenancy/settings.js +224 -0
  393. package/dist/cjs/tenancy/settings.js.map +1 -0
  394. package/dist/cjs/users/repository.js +143 -3
  395. package/dist/cjs/users/repository.js.map +1 -1
  396. package/dist/cjs/vault/repository.js +81 -0
  397. package/dist/cjs/vault/repository.js.map +1 -1
  398. package/dist/clients/ibge.d.ts +17 -0
  399. package/dist/clients/ibge.d.ts.map +1 -0
  400. package/dist/clients/ibge.js +98 -0
  401. package/dist/clients/ibge.js.map +1 -0
  402. package/dist/clients/repository.d.ts +196 -0
  403. package/dist/clients/repository.d.ts.map +1 -1
  404. package/dist/clients/repository.js +270 -24
  405. package/dist/clients/repository.js.map +1 -1
  406. package/dist/collection/branding.d.ts +137 -0
  407. package/dist/collection/branding.d.ts.map +1 -0
  408. package/dist/collection/branding.js +322 -0
  409. package/dist/collection/branding.js.map +1 -0
  410. package/dist/collection/channel-accounts.d.ts +57 -0
  411. package/dist/collection/channel-accounts.d.ts.map +1 -0
  412. package/dist/collection/channel-accounts.js +133 -0
  413. package/dist/collection/channel-accounts.js.map +1 -0
  414. package/dist/collection/channel.d.ts +24 -0
  415. package/dist/collection/channel.d.ts.map +1 -0
  416. package/dist/collection/channel.js +16 -0
  417. package/dist/collection/channel.js.map +1 -0
  418. package/dist/collection/clearance-store.d.ts +39 -0
  419. package/dist/collection/clearance-store.d.ts.map +1 -0
  420. package/dist/collection/clearance-store.js +69 -0
  421. package/dist/collection/clearance-store.js.map +1 -0
  422. package/dist/collection/communication-bridge.d.ts +66 -0
  423. package/dist/collection/communication-bridge.d.ts.map +1 -0
  424. package/dist/collection/communication-bridge.js +134 -0
  425. package/dist/collection/communication-bridge.js.map +1 -0
  426. package/dist/collection/communication-runtime.d.ts +132 -0
  427. package/dist/collection/communication-runtime.d.ts.map +1 -0
  428. package/dist/collection/communication-runtime.js +249 -0
  429. package/dist/collection/communication-runtime.js.map +1 -0
  430. package/dist/collection/consent-repository.d.ts +32 -0
  431. package/dist/collection/consent-repository.d.ts.map +1 -0
  432. package/dist/collection/consent-repository.js +79 -0
  433. package/dist/collection/consent-repository.js.map +1 -0
  434. package/dist/collection/copy.d.ts +50 -0
  435. package/dist/collection/copy.d.ts.map +1 -0
  436. package/dist/collection/copy.js +122 -0
  437. package/dist/collection/copy.js.map +1 -0
  438. package/dist/collection/delivery-callback.d.ts +49 -0
  439. package/dist/collection/delivery-callback.d.ts.map +1 -0
  440. package/dist/collection/delivery-callback.js +147 -0
  441. package/dist/collection/delivery-callback.js.map +1 -0
  442. package/dist/collection/email-layout.d.ts +45 -0
  443. package/dist/collection/email-layout.d.ts.map +1 -0
  444. package/dist/collection/email-layout.js +247 -0
  445. package/dist/collection/email-layout.js.map +1 -0
  446. package/dist/collection/engine.d.ts +200 -0
  447. package/dist/collection/engine.d.ts.map +1 -0
  448. package/dist/collection/engine.js +427 -0
  449. package/dist/collection/engine.js.map +1 -0
  450. package/dist/collection/format.d.ts +32 -0
  451. package/dist/collection/format.d.ts.map +1 -0
  452. package/dist/collection/format.js +70 -0
  453. package/dist/collection/format.js.map +1 -0
  454. package/dist/collection/payment-block.d.ts +24 -0
  455. package/dist/collection/payment-block.d.ts.map +1 -0
  456. package/dist/collection/payment-block.js +2 -0
  457. package/dist/collection/payment-block.js.map +1 -0
  458. package/dist/collection/policy.d.ts +78 -0
  459. package/dist/collection/policy.d.ts.map +1 -0
  460. package/dist/collection/policy.js +168 -0
  461. package/dist/collection/policy.js.map +1 -0
  462. package/dist/collection/repository.d.ts +129 -0
  463. package/dist/collection/repository.d.ts.map +1 -0
  464. package/dist/collection/repository.js +246 -0
  465. package/dist/collection/repository.js.map +1 -0
  466. package/dist/collection/subject.d.ts +66 -0
  467. package/dist/collection/subject.d.ts.map +1 -0
  468. package/dist/collection/subject.js +99 -0
  469. package/dist/collection/subject.js.map +1 -0
  470. package/dist/collection/template-catalog.d.ts +16 -0
  471. package/dist/collection/template-catalog.d.ts.map +1 -0
  472. package/dist/collection/template-catalog.js +162 -0
  473. package/dist/collection/template-catalog.js.map +1 -0
  474. package/dist/collection/template.d.ts +37 -0
  475. package/dist/collection/template.d.ts.map +1 -0
  476. package/dist/collection/template.js +73 -0
  477. package/dist/collection/template.js.map +1 -0
  478. package/dist/communication/adapters/email.d.ts +28 -0
  479. package/dist/communication/adapters/email.d.ts.map +1 -0
  480. package/dist/communication/adapters/email.js +129 -0
  481. package/dist/communication/adapters/email.js.map +1 -0
  482. package/dist/communication/adapters/sms.d.ts +95 -0
  483. package/dist/communication/adapters/sms.d.ts.map +1 -0
  484. package/dist/communication/adapters/sms.js +121 -0
  485. package/dist/communication/adapters/sms.js.map +1 -0
  486. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  487. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  488. package/dist/communication/adapters/whatsapp-language.js +36 -0
  489. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  490. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  491. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  492. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  493. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  494. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  495. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  496. package/dist/communication/adapters/whatsapp.js +210 -0
  497. package/dist/communication/adapters/whatsapp.js.map +1 -0
  498. package/dist/communication/audit.d.ts +105 -0
  499. package/dist/communication/audit.d.ts.map +1 -0
  500. package/dist/communication/audit.js +56 -0
  501. package/dist/communication/audit.js.map +1 -0
  502. package/dist/communication/capabilities.d.ts +88 -0
  503. package/dist/communication/capabilities.d.ts.map +1 -0
  504. package/dist/communication/capabilities.js +72 -0
  505. package/dist/communication/capabilities.js.map +1 -0
  506. package/dist/communication/channel.d.ts +125 -0
  507. package/dist/communication/channel.d.ts.map +1 -0
  508. package/dist/communication/channel.js +47 -0
  509. package/dist/communication/channel.js.map +1 -0
  510. package/dist/communication/claim.d.ts +368 -0
  511. package/dist/communication/claim.d.ts.map +1 -0
  512. package/dist/communication/claim.js +224 -0
  513. package/dist/communication/claim.js.map +1 -0
  514. package/dist/communication/clearance.d.ts +53 -0
  515. package/dist/communication/clearance.d.ts.map +1 -0
  516. package/dist/communication/clearance.js +15 -0
  517. package/dist/communication/clearance.js.map +1 -0
  518. package/dist/communication/consent.d.ts +65 -0
  519. package/dist/communication/consent.d.ts.map +1 -0
  520. package/dist/communication/consent.js +40 -0
  521. package/dist/communication/consent.js.map +1 -0
  522. package/dist/communication/context.d.ts +48 -0
  523. package/dist/communication/context.d.ts.map +1 -0
  524. package/dist/communication/context.js +41 -0
  525. package/dist/communication/context.js.map +1 -0
  526. package/dist/communication/credentials.d.ts +74 -0
  527. package/dist/communication/credentials.d.ts.map +1 -0
  528. package/dist/communication/credentials.js +115 -0
  529. package/dist/communication/credentials.js.map +1 -0
  530. package/dist/communication/dry-run-scenario.d.ts +37 -0
  531. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  532. package/dist/communication/dry-run-scenario.js +163 -0
  533. package/dist/communication/dry-run-scenario.js.map +1 -0
  534. package/dist/communication/dry-run.d.ts +40 -0
  535. package/dist/communication/dry-run.d.ts.map +1 -0
  536. package/dist/communication/dry-run.js +92 -0
  537. package/dist/communication/dry-run.js.map +1 -0
  538. package/dist/communication/engine.d.ts +163 -0
  539. package/dist/communication/engine.d.ts.map +1 -0
  540. package/dist/communication/engine.js +492 -0
  541. package/dist/communication/engine.js.map +1 -0
  542. package/dist/communication/graph.d.ts +38 -0
  543. package/dist/communication/graph.d.ts.map +1 -0
  544. package/dist/communication/graph.js +45 -0
  545. package/dist/communication/graph.js.map +1 -0
  546. package/dist/communication/idempotency.d.ts +33 -0
  547. package/dist/communication/idempotency.d.ts.map +1 -0
  548. package/dist/communication/idempotency.js +23 -0
  549. package/dist/communication/idempotency.js.map +1 -0
  550. package/dist/communication/identity.d.ts +127 -0
  551. package/dist/communication/identity.d.ts.map +1 -0
  552. package/dist/communication/identity.js +105 -0
  553. package/dist/communication/identity.js.map +1 -0
  554. package/dist/communication/index.d.ts +66 -0
  555. package/dist/communication/index.d.ts.map +1 -0
  556. package/dist/communication/index.js +42 -0
  557. package/dist/communication/index.js.map +1 -0
  558. package/dist/communication/onboarding.d.ts +223 -0
  559. package/dist/communication/onboarding.d.ts.map +1 -0
  560. package/dist/communication/onboarding.js +287 -0
  561. package/dist/communication/onboarding.js.map +1 -0
  562. package/dist/communication/policy.d.ts +115 -0
  563. package/dist/communication/policy.d.ts.map +1 -0
  564. package/dist/communication/policy.js +13 -0
  565. package/dist/communication/policy.js.map +1 -0
  566. package/dist/communication/routing.d.ts +99 -0
  567. package/dist/communication/routing.d.ts.map +1 -0
  568. package/dist/communication/routing.js +73 -0
  569. package/dist/communication/routing.js.map +1 -0
  570. package/dist/communication/sender-profile.d.ts +100 -0
  571. package/dist/communication/sender-profile.d.ts.map +1 -0
  572. package/dist/communication/sender-profile.js +123 -0
  573. package/dist/communication/sender-profile.js.map +1 -0
  574. package/dist/communication/status.d.ts +48 -0
  575. package/dist/communication/status.d.ts.map +1 -0
  576. package/dist/communication/status.js +79 -0
  577. package/dist/communication/status.js.map +1 -0
  578. package/dist/communication/stores/onboarding.d.ts +88 -0
  579. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  580. package/dist/communication/stores/onboarding.js +127 -0
  581. package/dist/communication/stores/onboarding.js.map +1 -0
  582. package/dist/communication/stores/postgres.d.ts +81 -0
  583. package/dist/communication/stores/postgres.d.ts.map +1 -0
  584. package/dist/communication/stores/postgres.js +453 -0
  585. package/dist/communication/stores/postgres.js.map +1 -0
  586. package/dist/communication/stores/routing.d.ts +169 -0
  587. package/dist/communication/stores/routing.d.ts.map +1 -0
  588. package/dist/communication/stores/routing.js +324 -0
  589. package/dist/communication/stores/routing.js.map +1 -0
  590. package/dist/communication/stores/secrets.d.ts +89 -0
  591. package/dist/communication/stores/secrets.d.ts.map +1 -0
  592. package/dist/communication/stores/secrets.js +122 -0
  593. package/dist/communication/stores/secrets.js.map +1 -0
  594. package/dist/communication/template-provider.d.ts +85 -0
  595. package/dist/communication/template-provider.d.ts.map +1 -0
  596. package/dist/communication/template-provider.js +21 -0
  597. package/dist/communication/template-provider.js.map +1 -0
  598. package/dist/communication/template.d.ts +87 -0
  599. package/dist/communication/template.d.ts.map +1 -0
  600. package/dist/communication/template.js +59 -0
  601. package/dist/communication/template.js.map +1 -0
  602. package/dist/communication/webhook-subscription.d.ts +156 -0
  603. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  604. package/dist/communication/webhook-subscription.js +252 -0
  605. package/dist/communication/webhook-subscription.js.map +1 -0
  606. package/dist/communication/webhook.d.ts +121 -0
  607. package/dist/communication/webhook.d.ts.map +1 -0
  608. package/dist/communication/webhook.js +283 -0
  609. package/dist/communication/webhook.js.map +1 -0
  610. package/dist/competence/business-days.d.ts +51 -0
  611. package/dist/competence/business-days.d.ts.map +1 -0
  612. package/dist/competence/business-days.js +145 -0
  613. package/dist/competence/business-days.js.map +1 -0
  614. package/dist/competence/catalog-validation.d.ts +86 -0
  615. package/dist/competence/catalog-validation.d.ts.map +1 -0
  616. package/dist/competence/catalog-validation.js +168 -0
  617. package/dist/competence/catalog-validation.js.map +1 -0
  618. package/dist/competence/obligation-preview.d.ts +103 -0
  619. package/dist/competence/obligation-preview.d.ts.map +1 -0
  620. package/dist/competence/obligation-preview.js +184 -0
  621. package/dist/competence/obligation-preview.js.map +1 -0
  622. package/dist/competence/repository.d.ts +285 -0
  623. package/dist/competence/repository.d.ts.map +1 -0
  624. package/dist/competence/repository.js +602 -0
  625. package/dist/competence/repository.js.map +1 -0
  626. package/dist/contacts/phone.d.ts +70 -0
  627. package/dist/contacts/phone.d.ts.map +1 -0
  628. package/dist/contacts/phone.js +186 -0
  629. package/dist/contacts/phone.js.map +1 -0
  630. package/dist/dashboard/pilot-panel.d.ts +100 -0
  631. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  632. package/dist/dashboard/pilot-panel.js +87 -0
  633. package/dist/dashboard/pilot-panel.js.map +1 -0
  634. package/dist/dashboard/repository.d.ts.map +1 -1
  635. package/dist/dashboard/repository.js +11 -1
  636. package/dist/dashboard/repository.js.map +1 -1
  637. package/dist/db/client.d.ts +45 -0
  638. package/dist/db/client.d.ts.map +1 -1
  639. package/dist/db/client.js +16 -11
  640. package/dist/db/client.js.map +1 -1
  641. package/dist/db/migrate.d.ts +36 -1
  642. package/dist/db/migrate.d.ts.map +1 -1
  643. package/dist/db/migrate.js +208 -35
  644. package/dist/db/migrate.js.map +1 -1
  645. package/dist/db/provision-e2e-identity.d.ts +2 -0
  646. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  647. package/dist/db/provision-e2e-identity.js +109 -0
  648. package/dist/db/provision-e2e-identity.js.map +1 -0
  649. package/dist/db/seed-catalog.d.ts +18 -0
  650. package/dist/db/seed-catalog.d.ts.map +1 -0
  651. package/dist/db/seed-catalog.js +45 -0
  652. package/dist/db/seed-catalog.js.map +1 -0
  653. package/dist/db/seed.js +16 -8
  654. package/dist/db/seed.js.map +1 -1
  655. package/dist/documents/repository.d.ts +97 -0
  656. package/dist/documents/repository.d.ts.map +1 -0
  657. package/dist/documents/repository.js +236 -0
  658. package/dist/documents/repository.js.map +1 -0
  659. package/dist/documents/requests.d.ts +73 -0
  660. package/dist/documents/requests.d.ts.map +1 -0
  661. package/dist/documents/requests.js +127 -0
  662. package/dist/documents/requests.js.map +1 -0
  663. package/dist/fiscal/applicability.d.ts +73 -0
  664. package/dist/fiscal/applicability.d.ts.map +1 -0
  665. package/dist/fiscal/applicability.js +160 -0
  666. package/dist/fiscal/applicability.js.map +1 -0
  667. package/dist/fiscal/conditions.d.ts +99 -0
  668. package/dist/fiscal/conditions.d.ts.map +1 -0
  669. package/dist/fiscal/conditions.js +190 -0
  670. package/dist/fiscal/conditions.js.map +1 -0
  671. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  672. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  673. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  674. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  675. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  676. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  677. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  678. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  679. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  680. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  681. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  682. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  683. package/dist/fiscal/coverage/model.d.ts +86 -0
  684. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  685. package/dist/fiscal/coverage/model.js +120 -0
  686. package/dist/fiscal/coverage/model.js.map +1 -0
  687. package/dist/fiscal/coverage/requests.d.ts +70 -0
  688. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  689. package/dist/fiscal/coverage/requests.js +95 -0
  690. package/dist/fiscal/coverage/requests.js.map +1 -0
  691. package/dist/fiscal/credentials/material.d.ts +81 -0
  692. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  693. package/dist/fiscal/credentials/material.js +164 -0
  694. package/dist/fiscal/credentials/material.js.map +1 -0
  695. package/dist/fiscal/credentials/readiness.d.ts +92 -0
  696. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  697. package/dist/fiscal/credentials/readiness.js +159 -0
  698. package/dist/fiscal/credentials/readiness.js.map +1 -0
  699. package/dist/fiscal/eligibility.d.ts +106 -0
  700. package/dist/fiscal/eligibility.d.ts.map +1 -0
  701. package/dist/fiscal/eligibility.js +194 -0
  702. package/dist/fiscal/eligibility.js.map +1 -0
  703. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  704. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  705. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  706. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  707. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  708. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  709. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  710. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  711. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  712. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  713. package/dist/fiscal/ingestion/direction.js +32 -0
  714. package/dist/fiscal/ingestion/direction.js.map +1 -0
  715. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  716. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  717. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  718. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  719. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  720. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  721. package/dist/fiscal/ingestion/pipeline.js +699 -0
  722. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  723. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  724. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  725. package/dist/fiscal/ingestion/provider.js +47 -0
  726. package/dist/fiscal/ingestion/provider.js.map +1 -0
  727. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  728. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  729. package/dist/fiscal/ingestion/repository.js +127 -0
  730. package/dist/fiscal/ingestion/repository.js.map +1 -0
  731. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  732. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  733. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  734. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  735. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  736. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  737. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  738. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  739. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  740. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  741. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  742. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  743. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  744. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  745. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  746. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  747. package/dist/fiscal/repository.d.ts +220 -0
  748. package/dist/fiscal/repository.d.ts.map +1 -0
  749. package/dist/fiscal/repository.js +449 -0
  750. package/dist/fiscal/repository.js.map +1 -0
  751. package/dist/fiscal/sync/circuit.d.ts +86 -0
  752. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  753. package/dist/fiscal/sync/circuit.js +118 -0
  754. package/dist/fiscal/sync/circuit.js.map +1 -0
  755. package/dist/fiscal/sync/intervention.d.ts +81 -0
  756. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  757. package/dist/fiscal/sync/intervention.js +135 -0
  758. package/dist/fiscal/sync/intervention.js.map +1 -0
  759. package/dist/fiscal/sync/lease.d.ts +118 -0
  760. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  761. package/dist/fiscal/sync/lease.js +139 -0
  762. package/dist/fiscal/sync/lease.js.map +1 -0
  763. package/dist/fiscal/sync/observability.d.ts +148 -0
  764. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  765. package/dist/fiscal/sync/observability.js +239 -0
  766. package/dist/fiscal/sync/observability.js.map +1 -0
  767. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  768. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  769. package/dist/fiscal/sync/orchestrator.js +487 -0
  770. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  771. package/dist/fiscal/sync/policy.d.ts +87 -0
  772. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  773. package/dist/fiscal/sync/policy.js +136 -0
  774. package/dist/fiscal/sync/policy.js.map +1 -0
  775. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  776. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  777. package/dist/fiscal/sync/reprocess.js +237 -0
  778. package/dist/fiscal/sync/reprocess.js.map +1 -0
  779. package/dist/fiscal/sync/retry.d.ts +82 -0
  780. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  781. package/dist/fiscal/sync/retry.js +176 -0
  782. package/dist/fiscal/sync/retry.js.map +1 -0
  783. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  784. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  785. package/dist/fiscal/sync/secret-boundary.js +116 -0
  786. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  787. package/dist/fiscal/transport/https.d.ts +86 -0
  788. package/dist/fiscal/transport/https.d.ts.map +1 -0
  789. package/dist/fiscal/transport/https.js +303 -0
  790. package/dist/fiscal/transport/https.js.map +1 -0
  791. package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
  792. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  793. package/dist/fiscal/transport/synthetic-tls.js +323 -0
  794. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  795. package/dist/fiscal/transport/types.d.ts +134 -0
  796. package/dist/fiscal/transport/types.d.ts.map +1 -0
  797. package/dist/fiscal/transport/types.js +88 -0
  798. package/dist/fiscal/transport/types.js.map +1 -0
  799. package/dist/import/br-documents.d.ts +26 -0
  800. package/dist/import/br-documents.d.ts.map +1 -0
  801. package/dist/import/br-documents.js +78 -0
  802. package/dist/import/br-documents.js.map +1 -0
  803. package/dist/import/clients-import.d.ts +122 -4
  804. package/dist/import/clients-import.d.ts.map +1 -1
  805. package/dist/import/clients-import.js +341 -41
  806. package/dist/import/clients-import.js.map +1 -1
  807. package/dist/index.d.ts +217 -17
  808. package/dist/index.d.ts.map +1 -1
  809. package/dist/index.js +196 -11
  810. package/dist/index.js.map +1 -1
  811. package/dist/legal/documents.d.ts +12 -1
  812. package/dist/legal/documents.d.ts.map +1 -1
  813. package/dist/legal/documents.js +222 -16
  814. package/dist/legal/documents.js.map +1 -1
  815. package/dist/legal/index.d.ts +2 -2
  816. package/dist/legal/index.d.ts.map +1 -1
  817. package/dist/legal/index.js +1 -1
  818. package/dist/legal/index.js.map +1 -1
  819. package/dist/legal/types.d.ts +69 -3
  820. package/dist/legal/types.d.ts.map +1 -1
  821. package/dist/legal/types.js +1 -0
  822. package/dist/legal/types.js.map +1 -1
  823. package/dist/mail/auth-templates.d.ts +15 -0
  824. package/dist/mail/auth-templates.d.ts.map +1 -0
  825. package/dist/mail/auth-templates.js +26 -0
  826. package/dist/mail/auth-templates.js.map +1 -0
  827. package/dist/mail/dedup-store.d.ts +1 -24
  828. package/dist/mail/dedup-store.d.ts.map +1 -1
  829. package/dist/mail/dedup-store.js +9 -48
  830. package/dist/mail/dedup-store.js.map +1 -1
  831. package/dist/mail/index.d.ts +2 -1
  832. package/dist/mail/index.d.ts.map +1 -1
  833. package/dist/mail/index.js +13 -2
  834. package/dist/mail/index.js.map +1 -1
  835. package/dist/mail/provider.d.ts +2 -30
  836. package/dist/mail/provider.d.ts.map +1 -1
  837. package/dist/mail/provider.js +10 -246
  838. package/dist/mail/provider.js.map +1 -1
  839. package/dist/mail/resend.d.ts +2 -12
  840. package/dist/mail/resend.d.ts.map +1 -1
  841. package/dist/mail/resend.js +11 -17
  842. package/dist/mail/resend.js.map +1 -1
  843. package/dist/mail/sender-resolver.d.ts +1 -7
  844. package/dist/mail/sender-resolver.d.ts.map +1 -1
  845. package/dist/mail/sender-resolver.js +11 -10
  846. package/dist/mail/sender-resolver.js.map +1 -1
  847. package/dist/mail/template-renderer.d.ts +1 -9
  848. package/dist/mail/template-renderer.d.ts.map +1 -1
  849. package/dist/mail/template-renderer.js +10 -15
  850. package/dist/mail/template-renderer.js.map +1 -1
  851. package/dist/mail/transactional-outbound.d.ts +115 -0
  852. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  853. package/dist/mail/transactional-outbound.js +113 -0
  854. package/dist/mail/transactional-outbound.js.map +1 -0
  855. package/dist/mail/types.d.ts +2 -142
  856. package/dist/mail/types.d.ts.map +1 -1
  857. package/dist/mail/types.js +1 -33
  858. package/dist/mail/types.js.map +1 -1
  859. package/dist/onboarding/persistence.d.ts +10 -1
  860. package/dist/onboarding/persistence.d.ts.map +1 -1
  861. package/dist/onboarding/persistence.js +4 -4
  862. package/dist/onboarding/persistence.js.map +1 -1
  863. package/dist/pilot/go-live-checklist.d.ts +41 -0
  864. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  865. package/dist/pilot/go-live-checklist.js +209 -0
  866. package/dist/pilot/go-live-checklist.js.map +1 -0
  867. package/dist/pilot/milestone.d.ts +56 -0
  868. package/dist/pilot/milestone.d.ts.map +1 -0
  869. package/dist/pilot/milestone.js +74 -0
  870. package/dist/pilot/milestone.js.map +1 -0
  871. package/dist/platform/capabilities.d.ts +88 -0
  872. package/dist/platform/capabilities.d.ts.map +1 -0
  873. package/dist/platform/capabilities.js +140 -0
  874. package/dist/platform/capabilities.js.map +1 -0
  875. package/dist/platform/job-contract.d.ts +232 -0
  876. package/dist/platform/job-contract.d.ts.map +1 -0
  877. package/dist/platform/job-contract.js +403 -0
  878. package/dist/platform/job-contract.js.map +1 -0
  879. package/dist/portal/provisioning.d.ts +58 -0
  880. package/dist/portal/provisioning.d.ts.map +1 -0
  881. package/dist/portal/provisioning.js +139 -0
  882. package/dist/portal/provisioning.js.map +1 -0
  883. package/dist/pricing-engine/canonical.d.ts +14 -0
  884. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  885. package/dist/pricing-engine/canonical.js +39 -0
  886. package/dist/pricing-engine/canonical.js.map +1 -0
  887. package/dist/pricing-engine/errors.d.ts.map +1 -1
  888. package/dist/pricing-engine/errors.js +6 -1
  889. package/dist/pricing-engine/errors.js.map +1 -1
  890. package/dist/pricing-engine/index.d.ts +12 -2
  891. package/dist/pricing-engine/index.d.ts.map +1 -1
  892. package/dist/pricing-engine/index.js +6 -1
  893. package/dist/pricing-engine/index.js.map +1 -1
  894. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  895. package/dist/pricing-engine/pipeline.js +202 -28
  896. package/dist/pricing-engine/pipeline.js.map +1 -1
  897. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  898. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  899. package/dist/pricing-engine/shadow-adapter.js +75 -0
  900. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  901. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  902. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  903. package/dist/pricing-engine/shadow-diff.js +52 -0
  904. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  905. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  906. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  907. package/dist/pricing-engine/shadow-facade.js +82 -0
  908. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  909. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  910. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  911. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  912. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  913. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  914. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  915. package/dist/pricing-engine/shadow-metrics.js +31 -0
  916. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  917. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  918. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  919. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  920. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  921. package/dist/pricing-engine/types.d.ts +2 -0
  922. package/dist/pricing-engine/types.d.ts.map +1 -1
  923. package/dist/rbac/authorize.d.ts +12 -0
  924. package/dist/rbac/authorize.d.ts.map +1 -1
  925. package/dist/rbac/authorize.js +27 -0
  926. package/dist/rbac/authorize.js.map +1 -1
  927. package/dist/rbac/catalog.d.ts.map +1 -1
  928. package/dist/rbac/catalog.js +101 -1
  929. package/dist/rbac/catalog.js.map +1 -1
  930. package/dist/rbac/workload-provisioning.d.ts +66 -0
  931. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  932. package/dist/rbac/workload-provisioning.js +153 -0
  933. package/dist/rbac/workload-provisioning.js.map +1 -0
  934. package/dist/rbac/workload.d.ts +124 -0
  935. package/dist/rbac/workload.d.ts.map +1 -0
  936. package/dist/rbac/workload.js +184 -0
  937. package/dist/rbac/workload.js.map +1 -0
  938. package/dist/storage/checksum.d.ts +9 -0
  939. package/dist/storage/checksum.d.ts.map +1 -0
  940. package/dist/storage/checksum.js +12 -0
  941. package/dist/storage/checksum.js.map +1 -0
  942. package/dist/storage/key.d.ts +37 -0
  943. package/dist/storage/key.d.ts.map +1 -0
  944. package/dist/storage/key.js +67 -0
  945. package/dist/storage/key.js.map +1 -0
  946. package/dist/storage/local.d.ts +40 -0
  947. package/dist/storage/local.d.ts.map +1 -0
  948. package/dist/storage/local.js +96 -0
  949. package/dist/storage/local.js.map +1 -0
  950. package/dist/storage/r2.d.ts +43 -0
  951. package/dist/storage/r2.d.ts.map +1 -0
  952. package/dist/storage/r2.js +177 -0
  953. package/dist/storage/r2.js.map +1 -0
  954. package/dist/storage/registry.d.ts +23 -0
  955. package/dist/storage/registry.d.ts.map +1 -0
  956. package/dist/storage/registry.js +37 -0
  957. package/dist/storage/registry.js.map +1 -0
  958. package/dist/storage/types.d.ts +67 -0
  959. package/dist/storage/types.d.ts.map +1 -0
  960. package/dist/storage/types.js +45 -0
  961. package/dist/storage/types.js.map +1 -0
  962. package/dist/subscription-billing/index.d.ts +6 -5
  963. package/dist/subscription-billing/index.d.ts.map +1 -1
  964. package/dist/subscription-billing/index.js +3 -3
  965. package/dist/subscription-billing/index.js.map +1 -1
  966. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  967. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  968. package/dist/subscription-billing/provider/asaas.js +32 -7
  969. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  970. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  971. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  972. package/dist/subscription-billing/provider/disabled.js +8 -0
  973. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  974. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  975. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  976. package/dist/subscription-billing/provider/registry.js +17 -0
  977. package/dist/subscription-billing/provider/registry.js.map +1 -1
  978. package/dist/subscription-billing/service.d.ts +38 -1
  979. package/dist/subscription-billing/service.d.ts.map +1 -1
  980. package/dist/subscription-billing/service.js +147 -23
  981. package/dist/subscription-billing/service.js.map +1 -1
  982. package/dist/subscription-billing/types.d.ts +13 -0
  983. package/dist/subscription-billing/types.d.ts.map +1 -1
  984. package/dist/subscription-billing/types.js.map +1 -1
  985. package/dist/tenancy/features.d.ts +69 -0
  986. package/dist/tenancy/features.d.ts.map +1 -0
  987. package/dist/tenancy/features.js +123 -0
  988. package/dist/tenancy/features.js.map +1 -0
  989. package/dist/tenancy/provisioning.d.ts.map +1 -1
  990. package/dist/tenancy/provisioning.js +32 -8
  991. package/dist/tenancy/provisioning.js.map +1 -1
  992. package/dist/tenancy/settings.d.ts +63 -0
  993. package/dist/tenancy/settings.d.ts.map +1 -0
  994. package/dist/tenancy/settings.js +218 -0
  995. package/dist/tenancy/settings.js.map +1 -0
  996. package/dist/users/repository.d.ts +54 -1
  997. package/dist/users/repository.d.ts.map +1 -1
  998. package/dist/users/repository.js +142 -4
  999. package/dist/users/repository.js.map +1 -1
  1000. package/dist/vault/repository.d.ts +67 -0
  1001. package/dist/vault/repository.d.ts.map +1 -1
  1002. package/dist/vault/repository.js +78 -0
  1003. package/dist/vault/repository.js.map +1 -1
  1004. package/package.json +20 -4
  1005. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  1006. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  1007. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  1008. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  1009. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  1010. package/src/db/migrations/0028_collection_engine.sql +94 -0
  1011. package/src/db/migrations/0029_payment_rail.sql +107 -0
  1012. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  1013. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  1014. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  1015. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  1016. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  1017. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  1018. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  1019. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  1020. package/src/db/migrations/0038_notification_channels.sql +175 -0
  1021. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  1022. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  1023. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  1024. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  1025. package/src/db/migrations/0043_workload_identity.sql +105 -0
  1026. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  1027. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  1028. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  1029. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  1030. package/src/db/migrations/0048_item_type_note.sql +16 -0
  1031. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  1032. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  1033. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  1034. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  1035. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  1036. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  1037. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  1038. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  1039. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  1040. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  1041. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
  1042. package/dist/cjs/mail/resend-client.js +0 -103
  1043. package/dist/cjs/mail/resend-client.js.map +0 -1
  1044. package/dist/mail/resend-client.d.ts +0 -16
  1045. package/dist/mail/resend-client.d.ts.map +0 -1
  1046. package/dist/mail/resend-client.js +0 -100
  1047. package/dist/mail/resend-client.js.map +0 -1
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AmbiguousProviderAccount = void 0;
4
+ exports.getActiveProviderAccount = getActiveProviderAccount;
5
+ exports.listProviderAccounts = listProviderAccounts;
6
+ exports.getProviderAccountByEnvironment = getProviderAccountByEnvironment;
7
+ exports.setPrimaryProviderAccount = setPrimaryProviderAccount;
8
+ exports.requireProviderAccountById = requireProviderAccountById;
9
+ exports.getProviderAccountById = getProviderAccountById;
10
+ exports.providerBaseUrl = providerBaseUrl;
11
+ exports.resolveProviderForTenant = resolveProviderForTenant;
12
+ const shared_1 = require("@baruk/shared");
13
+ const live_guard_js_1 = require("./live-guard.js");
14
+ const repository_js_1 = require("../vault/repository.js");
15
+ const registry_js_1 = require("./provider/registry.js");
16
+ const toAccount = (r) => ({
17
+ id: r.id,
18
+ provider: r.provider,
19
+ accountReference: r.account_reference,
20
+ environment: r.environment,
21
+ isPrimary: r.is_primary ?? false,
22
+ capabilities: Array.isArray(r.supported_capabilities)
23
+ ? r.supported_capabilities
24
+ : [],
25
+ credentialRef: r.credential_ref,
26
+ webhookCredentialRef: r.webhook_credential_ref,
27
+ status: r.status,
28
+ });
29
+ /** Conta ativa do tenant. `null` quando o escritório ainda não conectou nenhuma. */
30
+ /**
31
+ * A conta pela qual o escritório OPERA.
32
+ *
33
+ * Antes era "a primeira conta ativa por data de criação". Isso funcionava
34
+ * enquanto só podia existir uma; com sandbox e produção coexistindo, viraria a
35
+ * pior forma de escolher para onde vai o dinheiro — implícita e dependente de
36
+ * ordem de inserção.
37
+ *
38
+ * Agora a escolha é uma MARCA explícita, e o banco garante que só há uma:
39
+ * `payment_provider_account_primary_uq`. Sem `LIMIT`, de propósito — se algum
40
+ * dia houvesse duas, o certo é o erro aparecer, não o sistema escolher sozinho.
41
+ */
42
+ async function getActiveProviderAccount(tx) {
43
+ const rows = await tx `
44
+ SELECT id, provider, account_reference, environment, supported_capabilities,
45
+ credential_ref, webhook_credential_ref, status, is_primary
46
+ FROM payment_provider_account
47
+ WHERE status = 'active' AND is_primary
48
+ `;
49
+ // O comentário acima prometia que duas contas fariam o erro aparecer. Não
50
+ // fazia: `rows[0]` escolhia a primeira em silêncio. A unicidade do índice é
51
+ // por (tenant, provider), então dois PROVEDORES primários — asaas e outro —
52
+ // cabem na mesma consulta, e a escolha voltaria a ser implícita.
53
+ //
54
+ // Uma promessa que o código não cumpre é pior que promessa nenhuma: alguém
55
+ // lê o comentário e para de verificar.
56
+ if (rows.length > 1)
57
+ throw new AmbiguousProviderAccount('primária', rows.length);
58
+ return rows[0] ? toAccount(rows[0]) : null;
59
+ }
60
+ /** Todas as contas vivas do escritório — o laboratório e a operação. */
61
+ async function listProviderAccounts(tx) {
62
+ const rows = await tx `
63
+ SELECT id, provider, account_reference, environment, supported_capabilities,
64
+ credential_ref, webhook_credential_ref, status, is_primary
65
+ FROM payment_provider_account
66
+ WHERE status <> 'revoked'
67
+ ORDER BY environment, created_at
68
+ `;
69
+ return rows.map(toAccount);
70
+ }
71
+ /**
72
+ * Conta ativa de um AMBIENTE específico.
73
+ *
74
+ * Existe para quem sabe o que quer — um ensaio pede `sandbox` mesmo que a
75
+ * operação já esteja em produção. Nunca cai em outro ambiente por falta do
76
+ * pedido: sem conta naquele ambiente, devolve nulo.
77
+ */
78
+ async function getProviderAccountByEnvironment(tx, environment) {
79
+ const rows = await tx `
80
+ SELECT id, provider, account_reference, environment, supported_capabilities,
81
+ credential_ref, webhook_credential_ref, status, is_primary
82
+ FROM payment_provider_account
83
+ WHERE status = 'active' AND environment = ${environment}
84
+ `;
85
+ // Não há índice único por ambiente — duas contas `live` ativas são possíveis
86
+ // hoje. Escolher a primeira seria decidir por ordem de retorno para onde vai
87
+ // o dinheiro. Falhar aqui obriga alguém a resolver a duplicidade.
88
+ if (rows.length > 1)
89
+ throw new AmbiguousProviderAccount(environment, rows.length);
90
+ return rows[0] ? toAccount(rows[0]) : null;
91
+ }
92
+ /**
93
+ * Promove uma conta a operacional — o ato de "entrar em produção".
94
+ *
95
+ * Explícito e reversível, em vez de efeito colateral de revogar o laboratório.
96
+ * A despromoção da anterior acontece na MESMA transação: entre um UPDATE e o
97
+ * outro existiria um instante com duas contas operacionais, e é justamente
98
+ * nesse instante que uma emissão escolheria errado.
99
+ */
100
+ async function setPrimaryProviderAccount(tx, id) {
101
+ const alvo = await tx `
102
+ SELECT provider FROM payment_provider_account
103
+ WHERE id = ${id} AND status = 'active'
104
+ `;
105
+ if (!alvo[0])
106
+ throw new shared_1.NotFoundError('Conta de pagamento ativa não encontrada');
107
+ await tx `
108
+ UPDATE payment_provider_account SET is_primary = false, updated_at = now()
109
+ WHERE provider = ${alvo[0].provider} AND is_primary AND status <> 'revoked'
110
+ `;
111
+ await tx `
112
+ UPDATE payment_provider_account SET is_primary = true, updated_at = now()
113
+ WHERE id = ${id}
114
+ `;
115
+ const conta = await getProviderAccountById(tx, id);
116
+ if (!conta)
117
+ throw new shared_1.NotFoundError('Conta de pagamento não encontrada');
118
+ return conta;
119
+ }
120
+ /**
121
+ * Conta por id, obrigatória e utilizável.
122
+ *
123
+ * Fail-closed de propósito: quem pede por id sabe qual conta quer, e cair na
124
+ * primária porque aquela sumiu seria trocar a conta sem avisar — justamente o
125
+ * que esta fase existe para impedir.
126
+ */
127
+ async function requireProviderAccountById(tx, id) {
128
+ const conta = await getProviderAccountById(tx, id);
129
+ if (!conta) {
130
+ throw new shared_1.NotFoundError('A conta de pagamento que emitiu esta cobrança não existe mais.');
131
+ }
132
+ if (conta.status === 'revoked') {
133
+ throw new shared_1.ConflictError('A conta de pagamento que emitiu esta cobrança foi revogada — não dá para operar por ela.', { code: 'PROVIDER_ACCOUNT_REVOKED' });
134
+ }
135
+ return conta;
136
+ }
137
+ /** Conta por id — usada pelo webhook, que descobre o tenant pela URL. */
138
+ async function getProviderAccountById(tx, id) {
139
+ const rows = await tx `
140
+ SELECT id, provider, account_reference, environment, supported_capabilities,
141
+ credential_ref, webhook_credential_ref, status, is_primary
142
+ FROM payment_provider_account WHERE id = ${id}
143
+ `;
144
+ return rows[0] ? toAccount(rows[0]) : null;
145
+ }
146
+ /**
147
+ * URL base do gateway conforme o ambiente declarado NA CONTA.
148
+ *
149
+ * A escolha não pode vir de env var do processo: dois tenants podem estar em
150
+ * ambientes diferentes na mesma instância — um escritório em homologação
151
+ * enquanto outro já cobra de verdade. Ambiente é atributo da conta.
152
+ */
153
+ const BASE_URL = {
154
+ asaas: {
155
+ live: 'https://api.asaas.com/v3',
156
+ sandbox: 'https://api-sandbox.asaas.com/v3',
157
+ },
158
+ };
159
+ /**
160
+ * Base do gateway para um par (provider, ambiente).
161
+ *
162
+ * Exportada porque a CONEXÃO da conta também precisa dela, e uma segunda cópia
163
+ * divergiria: foi assim que uma chave de sandbox chegou a ser validada contra
164
+ * produção — o adapter caía no default `live` e devolvia 401 com a credencial
165
+ * correta na mão.
166
+ */
167
+ function providerBaseUrl(provider, environment) {
168
+ return BASE_URL[provider]?.[environment];
169
+ }
170
+ /**
171
+ * Mais de uma conta elegível para o mesmo critério.
172
+ *
173
+ * Conflito e não erro de validação: o pedido está correto, quem está errado é o
174
+ * estado — há duas contas onde só pode haver uma. A saída é humana (revogar ou
175
+ * despromover uma), e por isso a mensagem diz o que fazer.
176
+ */
177
+ class AmbiguousProviderAccount extends shared_1.ConflictError {
178
+ constructor(criterio, quantas) {
179
+ super(`Há ${quantas} contas de pagamento ativas para "${criterio}" — o sistema não escolhe ` +
180
+ 'entre elas. Revogue ou despromova as que não devem operar antes de continuar.', { code: 'AMBIGUOUS_PROVIDER_ACCOUNT' });
181
+ }
182
+ }
183
+ exports.AmbiguousProviderAccount = AmbiguousProviderAccount;
184
+ /**
185
+ * Monta o adapter já apontado para a conta do tenant.
186
+ *
187
+ * `revealSecret` é a única forma de a credencial sair do Vault, e ela sai
188
+ * direto para dentro do adapter — não é devolvida, logada nem guardada em
189
+ * variável de módulo.
190
+ */
191
+ async function resolveProviderForTenant(tx, keyring, tenantId, opts = {}) {
192
+ const account = opts.account ??
193
+ (opts.accountId
194
+ ? await requireProviderAccountById(tx, opts.accountId)
195
+ : opts.environment
196
+ ? await getProviderAccountByEnvironment(tx, opts.environment)
197
+ : await getActiveProviderAccount(tx));
198
+ if (!account)
199
+ return null;
200
+ // Coerência final, independente do caminho: se a operação declarou o
201
+ // ambiente, a conta resolvida tem de ser dele. Vale inclusive para
202
+ // `opts.account`, que vem pronto de fora e ninguém mais confere.
203
+ if (opts.environment && account.environment !== opts.environment) {
204
+ throw new shared_1.ConflictError(`A operação exige uma conta de pagamento "${opts.environment}", e a conta resolvida é ` +
205
+ `"${account.environment}". Nenhuma operação usa a conta do outro ambiente.`, { code: 'PROVIDER_ENVIRONMENT_MISMATCH' });
206
+ }
207
+ // Antes de a credencial sair do Vault: uma aplicação que não é produção não
208
+ // deve nem abrir conexão com a conta live — inclusive para receber webhook.
209
+ (0, live_guard_js_1.assertLiveProviderAllowed)(account.environment, (0, live_guard_js_1.readLiveRuntime)(), 'resolve');
210
+ if (!account.credentialRef) {
211
+ throw new shared_1.ValidationError(`A conta de pagamento do escritório não tem credencial associada (provider "${account.provider}").`);
212
+ }
213
+ const { secret } = await (0, repository_js_1.revealSecret)(tx, keyring, tenantId, account.credentialRef);
214
+ // O token de webhook é opcional na emissão e obrigatório na recepção: dá para
215
+ // emitir cobrança sem ele, mas a rota pública recusa tudo enquanto faltar.
216
+ const webhookSecret = account.webhookCredentialRef
217
+ ? (await (0, repository_js_1.revealSecret)(tx, keyring, tenantId, account.webhookCredentialRef)).secret
218
+ : undefined;
219
+ return {
220
+ account,
221
+ provider: (0, registry_js_1.resolveBillingProvider)(account.provider, {
222
+ apiKey: secret,
223
+ baseUrl: providerBaseUrl(account.provider, account.environment),
224
+ webhookSecret,
225
+ fetchImpl: opts.fetchImpl,
226
+ }),
227
+ };
228
+ }
229
+ //# sourceMappingURL=provider-account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-account.js","sourceRoot":"","sources":["../../../src/billing/provider-account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.connectProviderAccount = connectProviderAccount;
4
+ exports.revokeProviderAccount = revokeProviderAccount;
5
+ exports.revalidateProviderAccount = revalidateProviderAccount;
6
+ const node_crypto_1 = require("node:crypto");
7
+ const shared_1 = require("@baruk/shared");
8
+ const repository_js_1 = require("../vault/repository.js");
9
+ const registry_js_1 = require("./provider/registry.js");
10
+ const provider_account_js_1 = require("./provider-account.js");
11
+ async function connectProviderAccount(tx, keyring, tenantId, input, platform = {}) {
12
+ const apiKey = input.apiKey.trim();
13
+ if (!apiKey)
14
+ throw new shared_1.ValidationError('Credencial vazia.');
15
+ const provider = (0, registry_js_1.resolveBillingProvider)(input.provider, {
16
+ apiKey,
17
+ // A base vem do AMBIENTE declarado, não do default do adapter. Sem isto,
18
+ // uma chave de sandbox é validada contra produção e volta 401 — o operador
19
+ // lê "credencial inválida" com a credencial certa na mão.
20
+ baseUrl: input.baseUrl ?? (0, provider_account_js_1.providerBaseUrl)(input.provider, input.environment),
21
+ fetchImpl: input.fetchImpl,
22
+ });
23
+ if (!provider.describeAccount) {
24
+ throw new shared_1.ValidationError(`O provider "${input.provider}" não sabe identificar a própria conta — conectar às cegas não é aceitável para dinheiro.`);
25
+ }
26
+ // A credencial é EXERCIDA aqui. Guardar sem usar significaria descobrir que
27
+ // ela não funciona na primeira cobrança de um cliente real.
28
+ const identity = await provider.describeAccount();
29
+ assertNotPlatformAccount(identity, platform);
30
+ // Conta do PRÓPRIO escritório: a RLS deixa ver, então dá para recusar com uma
31
+ // consulta limpa, sem provocar violação. Só o caso cross-tenant precisa do
32
+ // banco para ser detectado — e ele vem depois, isolado num savepoint.
33
+ // Por AMBIENTE, e não por provedor: duas contas do mesmo gateway em ambientes
34
+ // diferentes não são a mesma conta — têm credencial, endpoint e dinheiro
35
+ // distintos. Enquanto a checagem era por provedor, ativar produção exigia
36
+ // revogar o laboratório, e a decisão "vou cobrar de verdade" ficava amarrada a
37
+ // "vou perder onde ensaio".
38
+ const jaTem = await tx `
39
+ SELECT id FROM payment_provider_account
40
+ WHERE provider = ${input.provider} AND environment = ${input.environment}
41
+ AND status <> 'revoked' LIMIT 1
42
+ `;
43
+ if (jaTem[0]) {
44
+ throw new shared_1.ConflictError(`Este escritório já tem uma conta ${input.provider} em ${input.environment}. ` +
45
+ 'Revogue a atual antes de conectar outra neste ambiente.');
46
+ }
47
+ // A primeira conta do escritório nasce operacional; as seguintes nascem como
48
+ // laboratório. Promover é ato explícito — conectar produção não pode, sozinho,
49
+ // redirecionar o dinheiro.
50
+ const jaTemPrimaria = await tx `
51
+ SELECT id FROM payment_provider_account
52
+ WHERE provider = ${input.provider} AND is_primary AND status <> 'revoked' LIMIT 1
53
+ `;
54
+ const nasceOperacional = !jaTemPrimaria[0];
55
+ // A garantia de que nenhuma outra organização já usa esta conta é do BANCO
56
+ // (índice único em `provider, account_reference`), não de uma consulta aqui.
57
+ // Uma consulta não serviria: com RLS FORCE, `WHERE tenant_id <> atual`
58
+ // devolve sempre zero — a política esconde justamente a linha que a checagem
59
+ // precisaria encontrar. O guard pareceria proteger sem proteger.
60
+ const apiRef = await (0, repository_js_1.createCredential)(tx, keyring, tenantId, {
61
+ name: credentialName(input.provider, input.environment, 'api'),
62
+ category: 'api_key',
63
+ secret: apiKey,
64
+ provider: input.provider,
65
+ // O metadata guarda de quem é a conta, para auditoria futura conseguir
66
+ // responder "esta chave abria qual conta?" sem precisar decifrá-la.
67
+ metadata: {
68
+ purpose: 'payment_provider_api_key',
69
+ accountName: identity.name,
70
+ accountReference: identity.reference,
71
+ environment: input.environment,
72
+ },
73
+ });
74
+ const webhookRef = input.webhookToken?.trim()
75
+ ? await (0, repository_js_1.createCredential)(tx, keyring, tenantId, {
76
+ name: credentialName(input.provider, input.environment, 'webhook'),
77
+ category: 'api_key',
78
+ secret: input.webhookToken.trim(),
79
+ provider: input.provider,
80
+ metadata: { purpose: 'payment_provider_webhook_token', environment: input.environment },
81
+ })
82
+ : null;
83
+ const id = (0, node_crypto_1.randomUUID)();
84
+ await insertAccount(tx, id, input, identity, apiRef.id, webhookRef?.id ?? null, nasceOperacional);
85
+ return {
86
+ identity,
87
+ account: {
88
+ id,
89
+ provider: input.provider,
90
+ accountReference: identity.reference,
91
+ environment: input.environment,
92
+ capabilities: input.capabilities ?? ['pix', 'boleto'],
93
+ credentialRef: apiRef.id,
94
+ webhookCredentialRef: webhookRef?.id ?? null,
95
+ isPrimary: nasceOperacional,
96
+ status: 'active',
97
+ },
98
+ };
99
+ }
100
+ /**
101
+ * Insere a conta dentro de um SAVEPOINT.
102
+ *
103
+ * O savepoint não é zelo excessivo: uma violação de unicidade aborta a
104
+ * transação inteira, e a partir daí qualquer comando falha — inclusive os que o
105
+ * driver roda ao desfazer. O erro que chegaria ao usuário seria o do rollback,
106
+ * não o meu, e a rota devolveria 500 no lugar de uma explicação. Com o
107
+ * savepoint, só a tentativa de INSERT é desfeita e a mensagem certa sobrevive.
108
+ *
109
+ * O que se detecta aqui é o caso **cross-tenant**: a RLS esconde a conta de
110
+ * outro escritório, então nenhuma consulta encontraria o conflito — só o índice.
111
+ */
112
+ async function insertAccount(tx, id, input, identity, credentialRef, webhookRef, nasceOperacional) {
113
+ try {
114
+ await tx.savepoint(async (sp) => {
115
+ await sp `
116
+ INSERT INTO payment_provider_account (
117
+ id, tenant_id, provider, account_reference, environment,
118
+ supported_capabilities, status, credential_ref, webhook_credential_ref,
119
+ last_validated_at, is_primary
120
+ ) VALUES (
121
+ ${id},
122
+ NULLIF(current_setting('app.current_tenant', true), '')::uuid,
123
+ ${input.provider}, ${identity.reference}, ${input.environment},
124
+ ${tx.json((input.capabilities ?? ['pix', 'boleto']))},
125
+ 'active', ${credentialRef}, ${webhookRef}, now(), ${nasceOperacional}
126
+ )
127
+ RETURNING id
128
+ `;
129
+ });
130
+ }
131
+ catch (err) {
132
+ if (constraintOf(err) === 'payment_provider_account_reference_uq') {
133
+ throw new shared_1.ConflictError('Esta conta de pagamento já está conectada a outra organização. ' +
134
+ 'Duas organizações não podem receber na mesma conta.');
135
+ }
136
+ if (constraintOf(err) === 'payment_provider_account_provider_uq') {
137
+ throw new shared_1.ConflictError(`Este escritório já tem uma conta ${input.provider} conectada. Revogue a atual antes de conectar outra.`);
138
+ }
139
+ throw err;
140
+ }
141
+ }
142
+ function constraintOf(err) {
143
+ const e = err;
144
+ return e?.constraint_name ?? e?.constraint ?? null;
145
+ }
146
+ /**
147
+ * Recusa a conta da plataforma.
148
+ *
149
+ * Comparação por documento E por referência: o mesmo CNPJ pode ter mais de uma
150
+ * conta, e a mesma conta pode aparecer com referências diferentes conforme o
151
+ * endpoint. Bater em qualquer um dos dois basta para recusar — aqui, falso
152
+ * positivo custa um pedido de esclarecimento, e falso negativo custa o dinheiro
153
+ * de um escritório caindo na conta da Baruk.
154
+ */
155
+ function assertNotPlatformAccount(identity, platform) {
156
+ const mesmoDoc = platform.documentNumber &&
157
+ identity.documentNumber &&
158
+ onlyDigits(platform.documentNumber) === onlyDigits(identity.documentNumber);
159
+ const mesmaRef = platform.reference && identity.reference && platform.reference === identity.reference;
160
+ if (mesmoDoc || mesmaRef) {
161
+ throw new shared_1.ValidationError('Esta credencial abre a conta da plataforma, não a do escritório. ' +
162
+ 'O dinheiro cobrado pelo escritório precisa cair na conta dele — ' +
163
+ 'use uma credencial da conta do próprio escritório.');
164
+ }
165
+ }
166
+ /**
167
+ * Nome da credencial no Vault.
168
+ *
169
+ * O prefixo é canônico e legível; o sufixo é o que torna o nome **único**. O
170
+ * Vault exige nome único por tenant, e um nome fixo impediria o caso legítimo
171
+ * de desconectar uma conta e conectar outra — a credencial antiga continua
172
+ * existindo, marcada, porque histórico de credencial não se apaga.
173
+ *
174
+ * Quem procura por semântica não usa o nome: `provider` e `metadata.purpose`
175
+ * são os campos indexáveis para isso.
176
+ */
177
+ function credentialName(provider, environment, kind) {
178
+ return `baruk-office-${provider}-${environment}-${kind}-${(0, node_crypto_1.randomUUID)().slice(0, 8)}`;
179
+ }
180
+ function onlyDigits(v) {
181
+ return v.replace(/\D/g, '');
182
+ }
183
+ /** Revoga a conta. A credencial fica no Vault, marcada — histórico não se apaga. */
184
+ async function revokeProviderAccount(tx, accountId) {
185
+ const rows = await tx `
186
+ UPDATE payment_provider_account
187
+ SET status = 'revoked', revoked_at = now(), updated_at = now()
188
+ WHERE id = ${accountId} AND status <> 'revoked'
189
+ RETURNING id
190
+ `;
191
+ return rows.length;
192
+ }
193
+ /**
194
+ * Reconsulta a identidade da conta e atualiza o que estiver defasado.
195
+ *
196
+ * Existe por dois motivos concretos, os dois observados na conta da SC:
197
+ *
198
+ * - **a referência pode ter nascido nula** (o gateway não expunha id na época),
199
+ * e sem ela o guard que impede duas organizações de receberem na mesma conta
200
+ * fica inativo — o índice de unicidade é parcial;
201
+ * - **a credencial pode ter sido revogada do lado do gateway** sem ninguém
202
+ * avisar, e `last_validated_at` é a única forma de saber quando foi a última
203
+ * vez que ela comprovadamente funcionou.
204
+ *
205
+ * Não troca a credencial: só confirma de quem é a conta que ela abre.
206
+ */
207
+ async function revalidateProviderAccount(tx, keyring, tenantId, account, opts = {}) {
208
+ if (!account.credentialRef) {
209
+ throw new shared_1.ValidationError('A conta não tem credencial associada.');
210
+ }
211
+ const { secret } = await (0, repository_js_1.revealSecret)(tx, keyring, tenantId, account.credentialRef);
212
+ const provider = (0, registry_js_1.resolveBillingProvider)(account.provider, {
213
+ apiKey: secret,
214
+ baseUrl: (0, provider_account_js_1.providerBaseUrl)(account.provider, account.environment),
215
+ fetchImpl: opts.fetchImpl,
216
+ });
217
+ if (!provider.describeAccount) {
218
+ throw new shared_1.ValidationError(`O provider "${account.provider}" não sabe identificar a própria conta.`);
219
+ }
220
+ const identity = await provider.describeAccount();
221
+ // A referência só é gravada quando falta. Sobrescrever uma referência
222
+ // existente com outra silenciosamente mudaria a identidade da conta que já
223
+ // está recebendo dinheiro — se divergir, é caso para o humano olhar.
224
+ if (!account.accountReference && identity.reference) {
225
+ await tx `
226
+ UPDATE payment_provider_account
227
+ SET account_reference = ${identity.reference}, last_validated_at = now(), updated_at = now()
228
+ WHERE id = ${account.id}
229
+ `;
230
+ }
231
+ else {
232
+ await tx `
233
+ UPDATE payment_provider_account
234
+ SET last_validated_at = now(), updated_at = now() WHERE id = ${account.id}
235
+ `;
236
+ }
237
+ return identity;
238
+ }
239
+ //# sourceMappingURL=provider-onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-onboarding.js","sourceRoot":"","sources":["../../../src/billing/provider-onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recordWebhookEvent = recordWebhookEvent;
4
+ exports.markWebhookProcessed = markWebhookProcessed;
5
+ exports.applyWebhookEvent = applyWebhookEvent;
6
+ const node_crypto_1 = require("node:crypto");
7
+ const ar_repository_js_1 = require("./ar-repository.js");
8
+ /**
9
+ * Grava o evento e diz se ele é novo.
10
+ *
11
+ * O INSERT é a trava: quem consegue inserir processa, quem colide já foi
12
+ * processado por outro. Fazer `SELECT` antes e `INSERT` depois deixaria uma
13
+ * janela entre os dois — e webhook duplicado chega em rajada, exatamente dentro
14
+ * dessa janela.
15
+ */
16
+ async function recordWebhookEvent(tx, input) {
17
+ const id = (0, node_crypto_1.randomUUID)();
18
+ const rows = await tx `
19
+ INSERT INTO webhook_event (
20
+ id, tenant_id, provider_account_id, provider, external_event_id, event_type, payload
21
+ ) VALUES (
22
+ ${id}, ${input.tenantId}, ${input.providerAccountId}, ${input.provider},
23
+ ${input.eventId}, ${input.eventType}, ${tx.json(input.payload)}
24
+ )
25
+ ON CONFLICT DO NOTHING
26
+ RETURNING id
27
+ `;
28
+ return { id: rows[0]?.id ?? id, isNew: Boolean(rows[0]) };
29
+ }
30
+ async function markWebhookProcessed(tx, id, status) {
31
+ await tx `
32
+ UPDATE webhook_event SET status = ${status}, processed_at = now() WHERE id = ${id}
33
+ `;
34
+ }
35
+ /**
36
+ * Aplica o evento normalizado ao recebível.
37
+ *
38
+ * Chamada DEPOIS de `recordWebhookEvent` ter dito que o evento é novo. Ainda
39
+ * assim confere o estado do recebível antes de baixar: dois eventos distintos
40
+ * (`CONFIRMED` e `RECEIVED`) descrevem o mesmo pagamento, passam os dois pelo
41
+ * dedup por serem eventos diferentes, e baixariam duas vezes o mesmo dinheiro.
42
+ */
43
+ async function applyWebhookEvent(tx, event) {
44
+ if (!event.externalId)
45
+ return { outcome: 'ignored', receivableId: null, chargeId: null };
46
+ const rows = await tx `
47
+ SELECT id, receivable_id, method, amount, status
48
+ FROM charge WHERE external_id = ${event.externalId} AND deleted_at IS NULL
49
+ LIMIT 1
50
+ `;
51
+ const charge = rows[0];
52
+ if (!charge)
53
+ return { outcome: 'charge_not_found', receivableId: null, chargeId: null };
54
+ const ref = { receivableId: charge.receivable_id, chargeId: charge.id };
55
+ switch (event.type) {
56
+ case 'charge.paid':
57
+ return { ...ref, outcome: await applyPayment(tx, charge, event) };
58
+ case 'charge.overdue':
59
+ await setChargeStatus(tx, charge.id, 'overdue');
60
+ return { ...ref, outcome: 'overdue' };
61
+ case 'charge.canceled':
62
+ await setChargeStatus(tx, charge.id, 'canceled');
63
+ return { ...ref, outcome: 'canceled' };
64
+ // Estorno e chargeback marcam a COBRANÇA, e não desfazem a baixa.
65
+ //
66
+ // Reverter o recebível automaticamente ressuscitaria a dívida e religaria a
67
+ // régua contra alguém que pode estar em disputa legítima — uma cobrança
68
+ // automática nesse momento é o pior desfecho possível. O escritório vê o
69
+ // estado e decide.
70
+ case 'charge.refunded':
71
+ case 'charge.chargeback':
72
+ await setChargeStatus(tx, charge.id, 'refunded');
73
+ return { ...ref, outcome: 'refunded' };
74
+ /**
75
+ * Baixa anulada na origem — e aqui a diferença para o estorno é financeira,
76
+ * não de nomenclatura.
77
+ *
78
+ * No estorno o dinheiro **entrou e saiu**: a dívida foi quitada e reabri-la
79
+ * cobraria de novo algo que foi pago. Na anulação o dinheiro **nunca
80
+ * entrou**: manter o recebível quitado seria o sistema afirmando um
81
+ * recebimento que a própria origem já negou. Por isso este é o único dos
82
+ * três que reverte estado.
83
+ */
84
+ case 'charge.settlement_undone': {
85
+ const reversal = await (0, ar_repository_js_1.reverseSettlementForCharge)(tx, charge.id, 'settlement_undone');
86
+ return {
87
+ receivableId: reversal.receivableId ?? charge.receivable_id,
88
+ chargeId: charge.id,
89
+ outcome: reversal.reversedPayments > 0 ? 'reversed' : 'already_reversed',
90
+ };
91
+ }
92
+ default:
93
+ return { ...ref, outcome: 'ignored' };
94
+ }
95
+ }
96
+ async function applyPayment(tx, charge, event) {
97
+ if (!charge.receivable_id) {
98
+ // Cobrança avulsa, anterior ao Payment Rail: marca a cobrança e para. Não
99
+ // há recebível a baixar, e inventar um seria criar dívida que não existia.
100
+ await setChargeStatus(tx, charge.id, 'paid');
101
+ return 'paid';
102
+ }
103
+ const receivable = await (0, ar_repository_js_1.getReceivable)(tx, charge.receivable_id);
104
+ if (receivable.status === 'paid' || receivable.outstandingAmount <= 0)
105
+ return 'already_paid';
106
+ // O gateway manda o valor creditado. Ele pode ser MENOR que a cobrança
107
+ // (desconto, pagamento parcial de boleto) — e nesse caso a baixa é parcial, o
108
+ // recebível continua aberto pelo saldo, e a régua segue. Tratar todo evento
109
+ // de pagamento como quitação total perdoaria a diferença em silêncio.
110
+ const announced = event.paidAmount ?? Number(charge.amount);
111
+ const amount = Math.min(announced, receivable.outstandingAmount);
112
+ if (amount <= 0)
113
+ return 'already_paid';
114
+ await (0, ar_repository_js_1.registerPayment)(tx, {
115
+ receivableId: charge.receivable_id,
116
+ chargeId: charge.id,
117
+ amount,
118
+ method: charge.method,
119
+ paidAt: event.paidAt ?? new Date().toISOString(),
120
+ });
121
+ // `reversed_at` é zerado junto: uma cobrança revertida continua pagável no
122
+ // gateway, e quando o cliente de fato paga, ela volta a ser simplesmente paga.
123
+ // Deixar a marca de reversão numa cobrança `paid` reproduziria, ao contrário,
124
+ // o mesmo defeito que esta onda corrige — estado que afirma duas coisas
125
+ // incompatíveis ao mesmo tempo.
126
+ await tx `
127
+ UPDATE charge
128
+ SET status = 'paid', paid_at = ${event.paidAt ?? new Date().toISOString()},
129
+ reversed_at = NULL, updated_at = now()
130
+ WHERE id = ${charge.id}
131
+ `;
132
+ await tx `
133
+ UPDATE payment
134
+ SET provider = (SELECT provider FROM charge WHERE id = ${charge.id}),
135
+ provider_payment_id = ${event.externalId}
136
+ WHERE charge_id = ${charge.id} AND provider_payment_id IS NULL
137
+ `;
138
+ return 'paid';
139
+ }
140
+ async function setChargeStatus(tx, id, status) {
141
+ await tx `UPDATE charge SET status = ${status}, updated_at = now() WHERE id = ${id}`;
142
+ }
143
+ //# sourceMappingURL=reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.js","sourceRoot":"","sources":["../../../src/billing/reconcile.ts"],"names":[],"mappings":"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"}