@baruk/core 0.3.1 → 0.4.2

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 (696) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +85 -0
  3. package/dist/auth/password-reset.d.ts +30 -1
  4. package/dist/auth/password-reset.d.ts.map +1 -1
  5. package/dist/auth/password-reset.js +139 -11
  6. package/dist/auth/password-reset.js.map +1 -1
  7. package/dist/auth/service.d.ts +39 -2
  8. package/dist/auth/service.d.ts.map +1 -1
  9. package/dist/auth/service.js +75 -10
  10. package/dist/auth/service.js.map +1 -1
  11. package/dist/billing/ar-repository.d.ts +334 -0
  12. package/dist/billing/ar-repository.d.ts.map +1 -0
  13. package/dist/billing/ar-repository.js +707 -0
  14. package/dist/billing/ar-repository.js.map +1 -0
  15. package/dist/billing/auto-generation.d.ts +87 -0
  16. package/dist/billing/auto-generation.d.ts.map +1 -0
  17. package/dist/billing/auto-generation.js +181 -0
  18. package/dist/billing/auto-generation.js.map +1 -0
  19. package/dist/billing/live-guard.d.ts +64 -0
  20. package/dist/billing/live-guard.d.ts.map +1 -0
  21. package/dist/billing/live-guard.js +68 -0
  22. package/dist/billing/live-guard.js.map +1 -0
  23. package/dist/billing/payment-means-catalog.d.ts +17 -0
  24. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  25. package/dist/billing/payment-means-catalog.js +21 -0
  26. package/dist/billing/payment-means-catalog.js.map +1 -0
  27. package/dist/billing/payment-means.d.ts +38 -0
  28. package/dist/billing/payment-means.d.ts.map +1 -0
  29. package/dist/billing/payment-means.js +29 -0
  30. package/dist/billing/payment-means.js.map +1 -0
  31. package/dist/billing/payment-rail.d.ts +118 -0
  32. package/dist/billing/payment-rail.d.ts.map +1 -0
  33. package/dist/billing/payment-rail.js +295 -0
  34. package/dist/billing/payment-rail.js.map +1 -0
  35. package/dist/billing/provider/asaas.d.ts +46 -1
  36. package/dist/billing/provider/asaas.d.ts.map +1 -1
  37. package/dist/billing/provider/asaas.js +194 -14
  38. package/dist/billing/provider/asaas.js.map +1 -1
  39. package/dist/billing/provider/manual.js +1 -1
  40. package/dist/billing/provider/manual.js.map +1 -1
  41. package/dist/billing/provider/types.d.ts +115 -8
  42. package/dist/billing/provider/types.d.ts.map +1 -1
  43. package/dist/billing/provider-account.d.ts +89 -0
  44. package/dist/billing/provider-account.d.ts.map +1 -0
  45. package/dist/billing/provider-account.js +161 -0
  46. package/dist/billing/provider-account.js.map +1 -0
  47. package/dist/billing/provider-onboarding.d.ts +67 -0
  48. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  49. package/dist/billing/provider-onboarding.js +234 -0
  50. package/dist/billing/provider-onboarding.js.map +1 -0
  51. package/dist/billing/receivable.d.ts +5 -1
  52. package/dist/billing/receivable.d.ts.map +1 -1
  53. package/dist/billing/reconcile.d.ts +58 -0
  54. package/dist/billing/reconcile.d.ts.map +1 -0
  55. package/dist/billing/reconcile.js +138 -0
  56. package/dist/billing/reconcile.js.map +1 -0
  57. package/dist/billing/repository.d.ts +90 -1
  58. package/dist/billing/repository.d.ts.map +1 -1
  59. package/dist/billing/repository.js +148 -19
  60. package/dist/billing/repository.js.map +1 -1
  61. package/dist/cjs/auth/password-reset.js +141 -11
  62. package/dist/cjs/auth/password-reset.js.map +1 -1
  63. package/dist/cjs/auth/service.js +75 -9
  64. package/dist/cjs/auth/service.js.map +1 -1
  65. package/dist/cjs/billing/ar-repository.js +728 -0
  66. package/dist/cjs/billing/ar-repository.js.map +1 -0
  67. package/dist/cjs/billing/auto-generation.js +186 -0
  68. package/dist/cjs/billing/auto-generation.js.map +1 -0
  69. package/dist/cjs/billing/live-guard.js +72 -0
  70. package/dist/cjs/billing/live-guard.js.map +1 -0
  71. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  72. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  73. package/dist/cjs/billing/payment-means.js +33 -0
  74. package/dist/cjs/billing/payment-means.js.map +1 -0
  75. package/dist/cjs/billing/payment-rail.js +301 -0
  76. package/dist/cjs/billing/payment-rail.js.map +1 -0
  77. package/dist/cjs/billing/provider/asaas.js +194 -14
  78. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  79. package/dist/cjs/billing/provider/manual.js +1 -1
  80. package/dist/cjs/billing/provider/manual.js.map +1 -1
  81. package/dist/cjs/billing/provider-account.js +170 -0
  82. package/dist/cjs/billing/provider-account.js.map +1 -0
  83. package/dist/cjs/billing/provider-onboarding.js +239 -0
  84. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  85. package/dist/cjs/billing/reconcile.js +143 -0
  86. package/dist/cjs/billing/reconcile.js.map +1 -0
  87. package/dist/cjs/billing/repository.js +150 -18
  88. package/dist/cjs/billing/repository.js.map +1 -1
  89. package/dist/cjs/clients/repository.js +96 -20
  90. package/dist/cjs/clients/repository.js.map +1 -1
  91. package/dist/cjs/collection/branding.js +140 -0
  92. package/dist/cjs/collection/branding.js.map +1 -0
  93. package/dist/cjs/collection/channel-accounts.js +137 -0
  94. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  95. package/dist/cjs/collection/channel.js +17 -0
  96. package/dist/cjs/collection/channel.js.map +1 -0
  97. package/dist/cjs/collection/communication-bridge.js +140 -0
  98. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  99. package/dist/cjs/collection/communication-runtime.js +193 -0
  100. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  101. package/dist/cjs/collection/consent-repository.js +84 -0
  102. package/dist/cjs/collection/consent-repository.js.map +1 -0
  103. package/dist/cjs/collection/copy.js +125 -0
  104. package/dist/cjs/collection/copy.js.map +1 -0
  105. package/dist/cjs/collection/delivery-callback.js +151 -0
  106. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  107. package/dist/cjs/collection/email-layout.js +252 -0
  108. package/dist/cjs/collection/email-layout.js.map +1 -0
  109. package/dist/cjs/collection/engine.js +414 -0
  110. package/dist/cjs/collection/engine.js.map +1 -0
  111. package/dist/cjs/collection/format.js +76 -0
  112. package/dist/cjs/collection/format.js.map +1 -0
  113. package/dist/cjs/collection/payment-block.js +3 -0
  114. package/dist/cjs/collection/payment-block.js.map +1 -0
  115. package/dist/cjs/collection/policy.js +147 -0
  116. package/dist/cjs/collection/policy.js.map +1 -0
  117. package/dist/cjs/collection/repository.js +260 -0
  118. package/dist/cjs/collection/repository.js.map +1 -0
  119. package/dist/cjs/collection/subject.js +104 -0
  120. package/dist/cjs/collection/subject.js.map +1 -0
  121. package/dist/cjs/collection/template-catalog.js +165 -0
  122. package/dist/cjs/collection/template-catalog.js.map +1 -0
  123. package/dist/cjs/collection/template.js +78 -0
  124. package/dist/cjs/collection/template.js.map +1 -0
  125. package/dist/cjs/communication/adapters/email.js +132 -0
  126. package/dist/cjs/communication/adapters/email.js.map +1 -0
  127. package/dist/cjs/communication/adapters/sms.js +127 -0
  128. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  129. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  130. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  131. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  132. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  133. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  134. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  135. package/dist/cjs/communication/audit.js +61 -0
  136. package/dist/cjs/communication/audit.js.map +1 -0
  137. package/dist/cjs/communication/capabilities.js +76 -0
  138. package/dist/cjs/communication/capabilities.js.map +1 -0
  139. package/dist/cjs/communication/channel.js +53 -0
  140. package/dist/cjs/communication/channel.js.map +1 -0
  141. package/dist/cjs/communication/claim.js +228 -0
  142. package/dist/cjs/communication/claim.js.map +1 -0
  143. package/dist/cjs/communication/consent.js +43 -0
  144. package/dist/cjs/communication/consent.js.map +1 -0
  145. package/dist/cjs/communication/context.js +45 -0
  146. package/dist/cjs/communication/context.js.map +1 -0
  147. package/dist/cjs/communication/credentials.js +121 -0
  148. package/dist/cjs/communication/credentials.js.map +1 -0
  149. package/dist/cjs/communication/dry-run-scenario.js +161 -0
  150. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  151. package/dist/cjs/communication/dry-run.js +97 -0
  152. package/dist/cjs/communication/dry-run.js.map +1 -0
  153. package/dist/cjs/communication/engine.js +483 -0
  154. package/dist/cjs/communication/engine.js.map +1 -0
  155. package/dist/cjs/communication/graph.js +50 -0
  156. package/dist/cjs/communication/graph.js.map +1 -0
  157. package/dist/cjs/communication/idempotency.js +26 -0
  158. package/dist/cjs/communication/idempotency.js.map +1 -0
  159. package/dist/cjs/communication/identity.js +110 -0
  160. package/dist/cjs/communication/identity.js.map +1 -0
  161. package/dist/cjs/communication/index.js +135 -0
  162. package/dist/cjs/communication/index.js.map +1 -0
  163. package/dist/cjs/communication/onboarding.js +297 -0
  164. package/dist/cjs/communication/onboarding.js.map +1 -0
  165. package/dist/cjs/communication/policy.js +16 -0
  166. package/dist/cjs/communication/policy.js.map +1 -0
  167. package/dist/cjs/communication/routing.js +77 -0
  168. package/dist/cjs/communication/routing.js.map +1 -0
  169. package/dist/cjs/communication/sender-profile.js +128 -0
  170. package/dist/cjs/communication/sender-profile.js.map +1 -0
  171. package/dist/cjs/communication/status.js +86 -0
  172. package/dist/cjs/communication/status.js.map +1 -0
  173. package/dist/cjs/communication/stores/onboarding.js +135 -0
  174. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  175. package/dist/cjs/communication/stores/postgres.js +458 -0
  176. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  177. package/dist/cjs/communication/stores/routing.js +334 -0
  178. package/dist/cjs/communication/stores/routing.js.map +1 -0
  179. package/dist/cjs/communication/stores/secrets.js +126 -0
  180. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  181. package/dist/cjs/communication/template-provider.js +22 -0
  182. package/dist/cjs/communication/template-provider.js.map +1 -0
  183. package/dist/cjs/communication/template.js +63 -0
  184. package/dist/cjs/communication/template.js.map +1 -0
  185. package/dist/cjs/communication/webhook-subscription.js +258 -0
  186. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  187. package/dist/cjs/communication/webhook.js +292 -0
  188. package/dist/cjs/communication/webhook.js.map +1 -0
  189. package/dist/cjs/competence/repository.js +309 -0
  190. package/dist/cjs/competence/repository.js.map +1 -0
  191. package/dist/cjs/contacts/phone.js +192 -0
  192. package/dist/cjs/contacts/phone.js.map +1 -0
  193. package/dist/cjs/db/seed-catalog.js +48 -0
  194. package/dist/cjs/db/seed-catalog.js.map +1 -0
  195. package/dist/cjs/db/seed.js +15 -7
  196. package/dist/cjs/db/seed.js.map +1 -1
  197. package/dist/cjs/documents/repository.js +244 -0
  198. package/dist/cjs/documents/repository.js.map +1 -0
  199. package/dist/cjs/documents/requests.js +136 -0
  200. package/dist/cjs/documents/requests.js.map +1 -0
  201. package/dist/cjs/index.js +406 -39
  202. package/dist/cjs/index.js.map +1 -1
  203. package/dist/cjs/legal/documents.js +125 -3
  204. package/dist/cjs/legal/documents.js.map +1 -1
  205. package/dist/cjs/legal/types.js +1 -0
  206. package/dist/cjs/legal/types.js.map +1 -1
  207. package/dist/cjs/mail/auth-templates.js +29 -0
  208. package/dist/cjs/mail/auth-templates.js.map +1 -0
  209. package/dist/cjs/mail/dedup-store.js +12 -51
  210. package/dist/cjs/mail/dedup-store.js.map +1 -1
  211. package/dist/cjs/mail/index.js +16 -4
  212. package/dist/cjs/mail/index.js.map +1 -1
  213. package/dist/cjs/mail/provider.js +12 -247
  214. package/dist/cjs/mail/provider.js.map +1 -1
  215. package/dist/cjs/mail/resend.js +14 -18
  216. package/dist/cjs/mail/resend.js.map +1 -1
  217. package/dist/cjs/mail/sender-resolver.js +12 -11
  218. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  219. package/dist/cjs/mail/template-renderer.js +11 -16
  220. package/dist/cjs/mail/template-renderer.js.map +1 -1
  221. package/dist/cjs/mail/transactional-outbound.js +117 -0
  222. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  223. package/dist/cjs/mail/types.js +8 -35
  224. package/dist/cjs/mail/types.js.map +1 -1
  225. package/dist/cjs/portal/provisioning.js +144 -0
  226. package/dist/cjs/portal/provisioning.js.map +1 -0
  227. package/dist/cjs/pricing-engine/canonical.js +42 -0
  228. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  229. package/dist/cjs/pricing-engine/errors.js +6 -1
  230. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  231. package/dist/cjs/pricing-engine/index.js +12 -1
  232. package/dist/cjs/pricing-engine/index.js.map +1 -1
  233. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  234. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  235. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  236. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  237. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  238. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  239. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  240. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  241. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  242. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  243. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  244. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  245. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  246. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  247. package/dist/cjs/rbac/authorize.js +28 -0
  248. package/dist/cjs/rbac/authorize.js.map +1 -1
  249. package/dist/cjs/rbac/catalog.js +67 -1
  250. package/dist/cjs/rbac/catalog.js.map +1 -1
  251. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  252. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  253. package/dist/cjs/rbac/workload.js +191 -0
  254. package/dist/cjs/rbac/workload.js.map +1 -0
  255. package/dist/cjs/storage/checksum.js +15 -0
  256. package/dist/cjs/storage/checksum.js.map +1 -0
  257. package/dist/cjs/storage/key.js +72 -0
  258. package/dist/cjs/storage/key.js.map +1 -0
  259. package/dist/cjs/storage/local.js +100 -0
  260. package/dist/cjs/storage/local.js.map +1 -0
  261. package/dist/cjs/storage/r2.js +181 -0
  262. package/dist/cjs/storage/r2.js.map +1 -0
  263. package/dist/cjs/storage/registry.js +41 -0
  264. package/dist/cjs/storage/registry.js.map +1 -0
  265. package/dist/cjs/storage/types.js +50 -0
  266. package/dist/cjs/storage/types.js.map +1 -0
  267. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  268. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  269. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  270. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  271. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  272. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  273. package/dist/cjs/subscription-billing/service.js +57 -8
  274. package/dist/cjs/subscription-billing/service.js.map +1 -1
  275. package/dist/cjs/subscription-billing/types.js.map +1 -1
  276. package/dist/cjs/tenancy/provisioning.js +32 -8
  277. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  278. package/dist/cjs/users/repository.js +119 -2
  279. package/dist/cjs/users/repository.js.map +1 -1
  280. package/dist/cjs/vault/repository.js +81 -0
  281. package/dist/cjs/vault/repository.js.map +1 -1
  282. package/dist/clients/repository.d.ts +42 -0
  283. package/dist/clients/repository.d.ts.map +1 -1
  284. package/dist/clients/repository.js +94 -21
  285. package/dist/clients/repository.js.map +1 -1
  286. package/dist/collection/branding.d.ts +72 -0
  287. package/dist/collection/branding.d.ts.map +1 -0
  288. package/dist/collection/branding.js +136 -0
  289. package/dist/collection/branding.js.map +1 -0
  290. package/dist/collection/channel-accounts.d.ts +57 -0
  291. package/dist/collection/channel-accounts.d.ts.map +1 -0
  292. package/dist/collection/channel-accounts.js +133 -0
  293. package/dist/collection/channel-accounts.js.map +1 -0
  294. package/dist/collection/channel.d.ts +24 -0
  295. package/dist/collection/channel.d.ts.map +1 -0
  296. package/dist/collection/channel.js +16 -0
  297. package/dist/collection/channel.js.map +1 -0
  298. package/dist/collection/communication-bridge.d.ts +66 -0
  299. package/dist/collection/communication-bridge.d.ts.map +1 -0
  300. package/dist/collection/communication-bridge.js +134 -0
  301. package/dist/collection/communication-bridge.js.map +1 -0
  302. package/dist/collection/communication-runtime.d.ts +95 -0
  303. package/dist/collection/communication-runtime.d.ts.map +1 -0
  304. package/dist/collection/communication-runtime.js +187 -0
  305. package/dist/collection/communication-runtime.js.map +1 -0
  306. package/dist/collection/consent-repository.d.ts +32 -0
  307. package/dist/collection/consent-repository.d.ts.map +1 -0
  308. package/dist/collection/consent-repository.js +79 -0
  309. package/dist/collection/consent-repository.js.map +1 -0
  310. package/dist/collection/copy.d.ts +50 -0
  311. package/dist/collection/copy.d.ts.map +1 -0
  312. package/dist/collection/copy.js +122 -0
  313. package/dist/collection/copy.js.map +1 -0
  314. package/dist/collection/delivery-callback.d.ts +49 -0
  315. package/dist/collection/delivery-callback.d.ts.map +1 -0
  316. package/dist/collection/delivery-callback.js +147 -0
  317. package/dist/collection/delivery-callback.js.map +1 -0
  318. package/dist/collection/email-layout.d.ts +45 -0
  319. package/dist/collection/email-layout.d.ts.map +1 -0
  320. package/dist/collection/email-layout.js +247 -0
  321. package/dist/collection/email-layout.js.map +1 -0
  322. package/dist/collection/engine.d.ts +177 -0
  323. package/dist/collection/engine.d.ts.map +1 -0
  324. package/dist/collection/engine.js +407 -0
  325. package/dist/collection/engine.js.map +1 -0
  326. package/dist/collection/format.d.ts +32 -0
  327. package/dist/collection/format.d.ts.map +1 -0
  328. package/dist/collection/format.js +70 -0
  329. package/dist/collection/format.js.map +1 -0
  330. package/dist/collection/payment-block.d.ts +24 -0
  331. package/dist/collection/payment-block.d.ts.map +1 -0
  332. package/dist/collection/payment-block.js +2 -0
  333. package/dist/collection/payment-block.js.map +1 -0
  334. package/dist/collection/policy.d.ts +53 -0
  335. package/dist/collection/policy.d.ts.map +1 -0
  336. package/dist/collection/policy.js +141 -0
  337. package/dist/collection/policy.js.map +1 -0
  338. package/dist/collection/repository.d.ts +129 -0
  339. package/dist/collection/repository.d.ts.map +1 -0
  340. package/dist/collection/repository.js +246 -0
  341. package/dist/collection/repository.js.map +1 -0
  342. package/dist/collection/subject.d.ts +66 -0
  343. package/dist/collection/subject.d.ts.map +1 -0
  344. package/dist/collection/subject.js +99 -0
  345. package/dist/collection/subject.js.map +1 -0
  346. package/dist/collection/template-catalog.d.ts +16 -0
  347. package/dist/collection/template-catalog.d.ts.map +1 -0
  348. package/dist/collection/template-catalog.js +162 -0
  349. package/dist/collection/template-catalog.js.map +1 -0
  350. package/dist/collection/template.d.ts +37 -0
  351. package/dist/collection/template.d.ts.map +1 -0
  352. package/dist/collection/template.js +73 -0
  353. package/dist/collection/template.js.map +1 -0
  354. package/dist/communication/adapters/email.d.ts +28 -0
  355. package/dist/communication/adapters/email.d.ts.map +1 -0
  356. package/dist/communication/adapters/email.js +129 -0
  357. package/dist/communication/adapters/email.js.map +1 -0
  358. package/dist/communication/adapters/sms.d.ts +95 -0
  359. package/dist/communication/adapters/sms.d.ts.map +1 -0
  360. package/dist/communication/adapters/sms.js +121 -0
  361. package/dist/communication/adapters/sms.js.map +1 -0
  362. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  363. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  364. package/dist/communication/adapters/whatsapp-language.js +36 -0
  365. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  366. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  367. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  368. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  369. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  370. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  371. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  372. package/dist/communication/adapters/whatsapp.js +210 -0
  373. package/dist/communication/adapters/whatsapp.js.map +1 -0
  374. package/dist/communication/audit.d.ts +105 -0
  375. package/dist/communication/audit.d.ts.map +1 -0
  376. package/dist/communication/audit.js +56 -0
  377. package/dist/communication/audit.js.map +1 -0
  378. package/dist/communication/capabilities.d.ts +88 -0
  379. package/dist/communication/capabilities.d.ts.map +1 -0
  380. package/dist/communication/capabilities.js +72 -0
  381. package/dist/communication/capabilities.js.map +1 -0
  382. package/dist/communication/channel.d.ts +125 -0
  383. package/dist/communication/channel.d.ts.map +1 -0
  384. package/dist/communication/channel.js +47 -0
  385. package/dist/communication/channel.js.map +1 -0
  386. package/dist/communication/claim.d.ts +368 -0
  387. package/dist/communication/claim.d.ts.map +1 -0
  388. package/dist/communication/claim.js +224 -0
  389. package/dist/communication/claim.js.map +1 -0
  390. package/dist/communication/consent.d.ts +65 -0
  391. package/dist/communication/consent.d.ts.map +1 -0
  392. package/dist/communication/consent.js +40 -0
  393. package/dist/communication/consent.js.map +1 -0
  394. package/dist/communication/context.d.ts +48 -0
  395. package/dist/communication/context.d.ts.map +1 -0
  396. package/dist/communication/context.js +41 -0
  397. package/dist/communication/context.js.map +1 -0
  398. package/dist/communication/credentials.d.ts +74 -0
  399. package/dist/communication/credentials.d.ts.map +1 -0
  400. package/dist/communication/credentials.js +115 -0
  401. package/dist/communication/credentials.js.map +1 -0
  402. package/dist/communication/dry-run-scenario.d.ts +37 -0
  403. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  404. package/dist/communication/dry-run-scenario.js +158 -0
  405. package/dist/communication/dry-run-scenario.js.map +1 -0
  406. package/dist/communication/dry-run.d.ts +40 -0
  407. package/dist/communication/dry-run.d.ts.map +1 -0
  408. package/dist/communication/dry-run.js +92 -0
  409. package/dist/communication/dry-run.js.map +1 -0
  410. package/dist/communication/engine.d.ts +153 -0
  411. package/dist/communication/engine.d.ts.map +1 -0
  412. package/dist/communication/engine.js +480 -0
  413. package/dist/communication/engine.js.map +1 -0
  414. package/dist/communication/graph.d.ts +38 -0
  415. package/dist/communication/graph.d.ts.map +1 -0
  416. package/dist/communication/graph.js +45 -0
  417. package/dist/communication/graph.js.map +1 -0
  418. package/dist/communication/idempotency.d.ts +33 -0
  419. package/dist/communication/idempotency.d.ts.map +1 -0
  420. package/dist/communication/idempotency.js +23 -0
  421. package/dist/communication/idempotency.js.map +1 -0
  422. package/dist/communication/identity.d.ts +127 -0
  423. package/dist/communication/identity.d.ts.map +1 -0
  424. package/dist/communication/identity.js +105 -0
  425. package/dist/communication/identity.js.map +1 -0
  426. package/dist/communication/index.d.ts +66 -0
  427. package/dist/communication/index.d.ts.map +1 -0
  428. package/dist/communication/index.js +42 -0
  429. package/dist/communication/index.js.map +1 -0
  430. package/dist/communication/onboarding.d.ts +223 -0
  431. package/dist/communication/onboarding.d.ts.map +1 -0
  432. package/dist/communication/onboarding.js +287 -0
  433. package/dist/communication/onboarding.js.map +1 -0
  434. package/dist/communication/policy.d.ts +99 -0
  435. package/dist/communication/policy.d.ts.map +1 -0
  436. package/dist/communication/policy.js +13 -0
  437. package/dist/communication/policy.js.map +1 -0
  438. package/dist/communication/routing.d.ts +99 -0
  439. package/dist/communication/routing.d.ts.map +1 -0
  440. package/dist/communication/routing.js +73 -0
  441. package/dist/communication/routing.js.map +1 -0
  442. package/dist/communication/sender-profile.d.ts +100 -0
  443. package/dist/communication/sender-profile.d.ts.map +1 -0
  444. package/dist/communication/sender-profile.js +123 -0
  445. package/dist/communication/sender-profile.js.map +1 -0
  446. package/dist/communication/status.d.ts +48 -0
  447. package/dist/communication/status.d.ts.map +1 -0
  448. package/dist/communication/status.js +79 -0
  449. package/dist/communication/status.js.map +1 -0
  450. package/dist/communication/stores/onboarding.d.ts +88 -0
  451. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  452. package/dist/communication/stores/onboarding.js +127 -0
  453. package/dist/communication/stores/onboarding.js.map +1 -0
  454. package/dist/communication/stores/postgres.d.ts +81 -0
  455. package/dist/communication/stores/postgres.d.ts.map +1 -0
  456. package/dist/communication/stores/postgres.js +453 -0
  457. package/dist/communication/stores/postgres.js.map +1 -0
  458. package/dist/communication/stores/routing.d.ts +169 -0
  459. package/dist/communication/stores/routing.d.ts.map +1 -0
  460. package/dist/communication/stores/routing.js +324 -0
  461. package/dist/communication/stores/routing.js.map +1 -0
  462. package/dist/communication/stores/secrets.d.ts +89 -0
  463. package/dist/communication/stores/secrets.d.ts.map +1 -0
  464. package/dist/communication/stores/secrets.js +122 -0
  465. package/dist/communication/stores/secrets.js.map +1 -0
  466. package/dist/communication/template-provider.d.ts +85 -0
  467. package/dist/communication/template-provider.d.ts.map +1 -0
  468. package/dist/communication/template-provider.js +21 -0
  469. package/dist/communication/template-provider.js.map +1 -0
  470. package/dist/communication/template.d.ts +87 -0
  471. package/dist/communication/template.d.ts.map +1 -0
  472. package/dist/communication/template.js +59 -0
  473. package/dist/communication/template.js.map +1 -0
  474. package/dist/communication/webhook-subscription.d.ts +156 -0
  475. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  476. package/dist/communication/webhook-subscription.js +252 -0
  477. package/dist/communication/webhook-subscription.js.map +1 -0
  478. package/dist/communication/webhook.d.ts +121 -0
  479. package/dist/communication/webhook.d.ts.map +1 -0
  480. package/dist/communication/webhook.js +283 -0
  481. package/dist/communication/webhook.js.map +1 -0
  482. package/dist/competence/repository.d.ts +147 -0
  483. package/dist/competence/repository.d.ts.map +1 -0
  484. package/dist/competence/repository.js +294 -0
  485. package/dist/competence/repository.js.map +1 -0
  486. package/dist/contacts/phone.d.ts +70 -0
  487. package/dist/contacts/phone.d.ts.map +1 -0
  488. package/dist/contacts/phone.js +186 -0
  489. package/dist/contacts/phone.js.map +1 -0
  490. package/dist/db/migrate.js +17 -11
  491. package/dist/db/migrate.js.map +1 -1
  492. package/dist/db/seed-catalog.d.ts +18 -0
  493. package/dist/db/seed-catalog.d.ts.map +1 -0
  494. package/dist/db/seed-catalog.js +45 -0
  495. package/dist/db/seed-catalog.js.map +1 -0
  496. package/dist/db/seed.js +16 -8
  497. package/dist/db/seed.js.map +1 -1
  498. package/dist/documents/repository.d.ts +97 -0
  499. package/dist/documents/repository.d.ts.map +1 -0
  500. package/dist/documents/repository.js +236 -0
  501. package/dist/documents/repository.js.map +1 -0
  502. package/dist/documents/requests.d.ts +73 -0
  503. package/dist/documents/requests.d.ts.map +1 -0
  504. package/dist/documents/requests.js +127 -0
  505. package/dist/documents/requests.js.map +1 -0
  506. package/dist/index.d.ts +109 -13
  507. package/dist/index.d.ts.map +1 -1
  508. package/dist/index.js +100 -8
  509. package/dist/index.js.map +1 -1
  510. package/dist/legal/documents.d.ts.map +1 -1
  511. package/dist/legal/documents.js +125 -3
  512. package/dist/legal/documents.js.map +1 -1
  513. package/dist/legal/index.d.ts +1 -1
  514. package/dist/legal/index.d.ts.map +1 -1
  515. package/dist/legal/types.d.ts +32 -1
  516. package/dist/legal/types.d.ts.map +1 -1
  517. package/dist/legal/types.js +1 -0
  518. package/dist/legal/types.js.map +1 -1
  519. package/dist/mail/auth-templates.d.ts +15 -0
  520. package/dist/mail/auth-templates.d.ts.map +1 -0
  521. package/dist/mail/auth-templates.js +26 -0
  522. package/dist/mail/auth-templates.js.map +1 -0
  523. package/dist/mail/dedup-store.d.ts +1 -24
  524. package/dist/mail/dedup-store.d.ts.map +1 -1
  525. package/dist/mail/dedup-store.js +9 -48
  526. package/dist/mail/dedup-store.js.map +1 -1
  527. package/dist/mail/index.d.ts +2 -1
  528. package/dist/mail/index.d.ts.map +1 -1
  529. package/dist/mail/index.js +13 -2
  530. package/dist/mail/index.js.map +1 -1
  531. package/dist/mail/provider.d.ts +2 -30
  532. package/dist/mail/provider.d.ts.map +1 -1
  533. package/dist/mail/provider.js +10 -246
  534. package/dist/mail/provider.js.map +1 -1
  535. package/dist/mail/resend.d.ts +2 -12
  536. package/dist/mail/resend.d.ts.map +1 -1
  537. package/dist/mail/resend.js +11 -17
  538. package/dist/mail/resend.js.map +1 -1
  539. package/dist/mail/sender-resolver.d.ts +1 -7
  540. package/dist/mail/sender-resolver.d.ts.map +1 -1
  541. package/dist/mail/sender-resolver.js +11 -10
  542. package/dist/mail/sender-resolver.js.map +1 -1
  543. package/dist/mail/template-renderer.d.ts +1 -9
  544. package/dist/mail/template-renderer.d.ts.map +1 -1
  545. package/dist/mail/template-renderer.js +10 -15
  546. package/dist/mail/template-renderer.js.map +1 -1
  547. package/dist/mail/transactional-outbound.d.ts +115 -0
  548. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  549. package/dist/mail/transactional-outbound.js +113 -0
  550. package/dist/mail/transactional-outbound.js.map +1 -0
  551. package/dist/mail/types.d.ts +2 -142
  552. package/dist/mail/types.d.ts.map +1 -1
  553. package/dist/mail/types.js +1 -33
  554. package/dist/mail/types.js.map +1 -1
  555. package/dist/portal/provisioning.d.ts +58 -0
  556. package/dist/portal/provisioning.d.ts.map +1 -0
  557. package/dist/portal/provisioning.js +139 -0
  558. package/dist/portal/provisioning.js.map +1 -0
  559. package/dist/pricing-engine/canonical.d.ts +14 -0
  560. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  561. package/dist/pricing-engine/canonical.js +39 -0
  562. package/dist/pricing-engine/canonical.js.map +1 -0
  563. package/dist/pricing-engine/errors.d.ts.map +1 -1
  564. package/dist/pricing-engine/errors.js +6 -1
  565. package/dist/pricing-engine/errors.js.map +1 -1
  566. package/dist/pricing-engine/index.d.ts +12 -2
  567. package/dist/pricing-engine/index.d.ts.map +1 -1
  568. package/dist/pricing-engine/index.js +6 -1
  569. package/dist/pricing-engine/index.js.map +1 -1
  570. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  571. package/dist/pricing-engine/pipeline.js +202 -28
  572. package/dist/pricing-engine/pipeline.js.map +1 -1
  573. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  574. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  575. package/dist/pricing-engine/shadow-adapter.js +75 -0
  576. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  577. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  578. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  579. package/dist/pricing-engine/shadow-diff.js +52 -0
  580. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  581. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  582. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  583. package/dist/pricing-engine/shadow-facade.js +82 -0
  584. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  585. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  586. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  587. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  588. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  589. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  590. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  591. package/dist/pricing-engine/shadow-metrics.js +31 -0
  592. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  593. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  594. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  595. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  596. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  597. package/dist/pricing-engine/types.d.ts +2 -0
  598. package/dist/pricing-engine/types.d.ts.map +1 -1
  599. package/dist/rbac/authorize.d.ts +12 -0
  600. package/dist/rbac/authorize.d.ts.map +1 -1
  601. package/dist/rbac/authorize.js +27 -0
  602. package/dist/rbac/authorize.js.map +1 -1
  603. package/dist/rbac/catalog.d.ts.map +1 -1
  604. package/dist/rbac/catalog.js +67 -1
  605. package/dist/rbac/catalog.js.map +1 -1
  606. package/dist/rbac/workload-provisioning.d.ts +66 -0
  607. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  608. package/dist/rbac/workload-provisioning.js +153 -0
  609. package/dist/rbac/workload-provisioning.js.map +1 -0
  610. package/dist/rbac/workload.d.ts +124 -0
  611. package/dist/rbac/workload.d.ts.map +1 -0
  612. package/dist/rbac/workload.js +184 -0
  613. package/dist/rbac/workload.js.map +1 -0
  614. package/dist/storage/checksum.d.ts +9 -0
  615. package/dist/storage/checksum.d.ts.map +1 -0
  616. package/dist/storage/checksum.js +12 -0
  617. package/dist/storage/checksum.js.map +1 -0
  618. package/dist/storage/key.d.ts +37 -0
  619. package/dist/storage/key.d.ts.map +1 -0
  620. package/dist/storage/key.js +67 -0
  621. package/dist/storage/key.js.map +1 -0
  622. package/dist/storage/local.d.ts +40 -0
  623. package/dist/storage/local.d.ts.map +1 -0
  624. package/dist/storage/local.js +96 -0
  625. package/dist/storage/local.js.map +1 -0
  626. package/dist/storage/r2.d.ts +43 -0
  627. package/dist/storage/r2.d.ts.map +1 -0
  628. package/dist/storage/r2.js +177 -0
  629. package/dist/storage/r2.js.map +1 -0
  630. package/dist/storage/registry.d.ts +23 -0
  631. package/dist/storage/registry.d.ts.map +1 -0
  632. package/dist/storage/registry.js +37 -0
  633. package/dist/storage/registry.js.map +1 -0
  634. package/dist/storage/types.d.ts +67 -0
  635. package/dist/storage/types.d.ts.map +1 -0
  636. package/dist/storage/types.js +45 -0
  637. package/dist/storage/types.js.map +1 -0
  638. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  639. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  640. package/dist/subscription-billing/provider/asaas.js +32 -7
  641. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  642. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  643. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  644. package/dist/subscription-billing/provider/disabled.js +8 -0
  645. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  646. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  647. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  648. package/dist/subscription-billing/provider/registry.js +17 -0
  649. package/dist/subscription-billing/provider/registry.js.map +1 -1
  650. package/dist/subscription-billing/service.d.ts +17 -1
  651. package/dist/subscription-billing/service.d.ts.map +1 -1
  652. package/dist/subscription-billing/service.js +57 -8
  653. package/dist/subscription-billing/service.js.map +1 -1
  654. package/dist/subscription-billing/types.d.ts +13 -0
  655. package/dist/subscription-billing/types.d.ts.map +1 -1
  656. package/dist/subscription-billing/types.js.map +1 -1
  657. package/dist/tenancy/provisioning.d.ts.map +1 -1
  658. package/dist/tenancy/provisioning.js +32 -8
  659. package/dist/tenancy/provisioning.js.map +1 -1
  660. package/dist/users/repository.d.ts +38 -0
  661. package/dist/users/repository.d.ts.map +1 -1
  662. package/dist/users/repository.js +118 -3
  663. package/dist/users/repository.js.map +1 -1
  664. package/dist/vault/repository.d.ts +67 -0
  665. package/dist/vault/repository.d.ts.map +1 -1
  666. package/dist/vault/repository.js +78 -0
  667. package/dist/vault/repository.js.map +1 -1
  668. package/package.json +13 -4
  669. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  670. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  671. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  672. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  673. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  674. package/src/db/migrations/0028_collection_engine.sql +94 -0
  675. package/src/db/migrations/0029_payment_rail.sql +107 -0
  676. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  677. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  678. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  679. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  680. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  681. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  682. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  683. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  684. package/src/db/migrations/0038_notification_channels.sql +175 -0
  685. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  686. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  687. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  688. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  689. package/src/db/migrations/0043_workload_identity.sql +105 -0
  690. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  691. package/dist/cjs/mail/resend-client.js +0 -103
  692. package/dist/cjs/mail/resend-client.js.map +0 -1
  693. package/dist/mail/resend-client.d.ts +0 -16
  694. package/dist/mail/resend-client.d.ts.map +0 -1
  695. package/dist/mail/resend-client.js +0 -100
  696. package/dist/mail/resend-client.js.map +0 -1
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getActiveProviderAccount = getActiveProviderAccount;
4
+ exports.listProviderAccounts = listProviderAccounts;
5
+ exports.getProviderAccountByEnvironment = getProviderAccountByEnvironment;
6
+ exports.setPrimaryProviderAccount = setPrimaryProviderAccount;
7
+ exports.getProviderAccountById = getProviderAccountById;
8
+ exports.providerBaseUrl = providerBaseUrl;
9
+ exports.resolveProviderForTenant = resolveProviderForTenant;
10
+ const shared_1 = require("@baruk/shared");
11
+ const live_guard_js_1 = require("./live-guard.js");
12
+ const repository_js_1 = require("../vault/repository.js");
13
+ const registry_js_1 = require("./provider/registry.js");
14
+ const toAccount = (r) => ({
15
+ id: r.id,
16
+ provider: r.provider,
17
+ accountReference: r.account_reference,
18
+ environment: r.environment,
19
+ isPrimary: r.is_primary ?? false,
20
+ capabilities: Array.isArray(r.supported_capabilities)
21
+ ? r.supported_capabilities
22
+ : [],
23
+ credentialRef: r.credential_ref,
24
+ webhookCredentialRef: r.webhook_credential_ref,
25
+ status: r.status,
26
+ });
27
+ /** Conta ativa do tenant. `null` quando o escritório ainda não conectou nenhuma. */
28
+ /**
29
+ * A conta pela qual o escritório OPERA.
30
+ *
31
+ * Antes era "a primeira conta ativa por data de criação". Isso funcionava
32
+ * enquanto só podia existir uma; com sandbox e produção coexistindo, viraria a
33
+ * pior forma de escolher para onde vai o dinheiro — implícita e dependente de
34
+ * ordem de inserção.
35
+ *
36
+ * Agora a escolha é uma MARCA explícita, e o banco garante que só há uma:
37
+ * `payment_provider_account_primary_uq`. Sem `LIMIT`, de propósito — se algum
38
+ * dia houvesse duas, o certo é o erro aparecer, não o sistema escolher sozinho.
39
+ */
40
+ async function getActiveProviderAccount(tx) {
41
+ const rows = await tx `
42
+ SELECT id, provider, account_reference, environment, supported_capabilities,
43
+ credential_ref, webhook_credential_ref, status, is_primary
44
+ FROM payment_provider_account
45
+ WHERE status = 'active' AND is_primary
46
+ `;
47
+ return rows[0] ? toAccount(rows[0]) : null;
48
+ }
49
+ /** Todas as contas vivas do escritório — o laboratório e a operação. */
50
+ async function listProviderAccounts(tx) {
51
+ const rows = await tx `
52
+ SELECT id, provider, account_reference, environment, supported_capabilities,
53
+ credential_ref, webhook_credential_ref, status, is_primary
54
+ FROM payment_provider_account
55
+ WHERE status <> 'revoked'
56
+ ORDER BY environment, created_at
57
+ `;
58
+ return rows.map(toAccount);
59
+ }
60
+ /**
61
+ * Conta ativa de um AMBIENTE específico.
62
+ *
63
+ * Existe para quem sabe o que quer — um ensaio pede `sandbox` mesmo que a
64
+ * operação já esteja em produção. Nunca cai em outro ambiente por falta do
65
+ * pedido: sem conta naquele ambiente, devolve nulo.
66
+ */
67
+ async function getProviderAccountByEnvironment(tx, environment) {
68
+ const rows = await tx `
69
+ SELECT id, provider, account_reference, environment, supported_capabilities,
70
+ credential_ref, webhook_credential_ref, status, is_primary
71
+ FROM payment_provider_account
72
+ WHERE status = 'active' AND environment = ${environment}
73
+ `;
74
+ return rows[0] ? toAccount(rows[0]) : null;
75
+ }
76
+ /**
77
+ * Promove uma conta a operacional — o ato de "entrar em produção".
78
+ *
79
+ * Explícito e reversível, em vez de efeito colateral de revogar o laboratório.
80
+ * A despromoção da anterior acontece na MESMA transação: entre um UPDATE e o
81
+ * outro existiria um instante com duas contas operacionais, e é justamente
82
+ * nesse instante que uma emissão escolheria errado.
83
+ */
84
+ async function setPrimaryProviderAccount(tx, id) {
85
+ const alvo = await tx `
86
+ SELECT provider FROM payment_provider_account
87
+ WHERE id = ${id} AND status = 'active'
88
+ `;
89
+ if (!alvo[0])
90
+ throw new shared_1.NotFoundError('Conta de pagamento ativa não encontrada');
91
+ await tx `
92
+ UPDATE payment_provider_account SET is_primary = false, updated_at = now()
93
+ WHERE provider = ${alvo[0].provider} AND is_primary AND status <> 'revoked'
94
+ `;
95
+ await tx `
96
+ UPDATE payment_provider_account SET is_primary = true, updated_at = now()
97
+ WHERE id = ${id}
98
+ `;
99
+ const conta = await getProviderAccountById(tx, id);
100
+ if (!conta)
101
+ throw new shared_1.NotFoundError('Conta de pagamento não encontrada');
102
+ return conta;
103
+ }
104
+ /** Conta por id — usada pelo webhook, que descobre o tenant pela URL. */
105
+ async function getProviderAccountById(tx, id) {
106
+ const rows = await tx `
107
+ SELECT id, provider, account_reference, environment, supported_capabilities,
108
+ credential_ref, webhook_credential_ref, status, is_primary
109
+ FROM payment_provider_account WHERE id = ${id}
110
+ `;
111
+ return rows[0] ? toAccount(rows[0]) : null;
112
+ }
113
+ /**
114
+ * URL base do gateway conforme o ambiente declarado NA CONTA.
115
+ *
116
+ * A escolha não pode vir de env var do processo: dois tenants podem estar em
117
+ * ambientes diferentes na mesma instância — um escritório em homologação
118
+ * enquanto outro já cobra de verdade. Ambiente é atributo da conta.
119
+ */
120
+ const BASE_URL = {
121
+ asaas: {
122
+ live: 'https://api.asaas.com/v3',
123
+ sandbox: 'https://api-sandbox.asaas.com/v3',
124
+ },
125
+ };
126
+ /**
127
+ * Base do gateway para um par (provider, ambiente).
128
+ *
129
+ * Exportada porque a CONEXÃO da conta também precisa dela, e uma segunda cópia
130
+ * divergiria: foi assim que uma chave de sandbox chegou a ser validada contra
131
+ * produção — o adapter caía no default `live` e devolvia 401 com a credencial
132
+ * correta na mão.
133
+ */
134
+ function providerBaseUrl(provider, environment) {
135
+ return BASE_URL[provider]?.[environment];
136
+ }
137
+ /**
138
+ * Monta o adapter já apontado para a conta do tenant.
139
+ *
140
+ * `revealSecret` é a única forma de a credencial sair do Vault, e ela sai
141
+ * direto para dentro do adapter — não é devolvida, logada nem guardada em
142
+ * variável de módulo.
143
+ */
144
+ async function resolveProviderForTenant(tx, keyring, tenantId, opts = {}) {
145
+ const account = opts.account ?? (await getActiveProviderAccount(tx));
146
+ if (!account)
147
+ return null;
148
+ // Antes de a credencial sair do Vault: uma aplicação que não é produção não
149
+ // deve nem abrir conexão com a conta live — inclusive para receber webhook.
150
+ (0, live_guard_js_1.assertLiveProviderAllowed)(account.environment, (0, live_guard_js_1.readLiveRuntime)(), 'resolve');
151
+ if (!account.credentialRef) {
152
+ throw new shared_1.ValidationError(`A conta de pagamento do escritório não tem credencial associada (provider "${account.provider}").`);
153
+ }
154
+ const { secret } = await (0, repository_js_1.revealSecret)(tx, keyring, tenantId, account.credentialRef);
155
+ // O token de webhook é opcional na emissão e obrigatório na recepção: dá para
156
+ // emitir cobrança sem ele, mas a rota pública recusa tudo enquanto faltar.
157
+ const webhookSecret = account.webhookCredentialRef
158
+ ? (await (0, repository_js_1.revealSecret)(tx, keyring, tenantId, account.webhookCredentialRef)).secret
159
+ : undefined;
160
+ return {
161
+ account,
162
+ provider: (0, registry_js_1.resolveBillingProvider)(account.provider, {
163
+ apiKey: secret,
164
+ baseUrl: providerBaseUrl(account.provider, account.environment),
165
+ webhookSecret,
166
+ fetchImpl: opts.fetchImpl,
167
+ }),
168
+ };
169
+ }
170
+ //# 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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"}