@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,301 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findActiveCharge = findActiveCharge;
4
+ exports.ensureChargeForReceivable = ensureChargeForReceivable;
5
+ exports.customerFingerprint = customerFingerprint;
6
+ exports.pixQrPngOf = pixQrPngOf;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const live_guard_js_1 = require("./live-guard.js");
9
+ const toCharge = (r) => ({
10
+ id: r.id,
11
+ receivableId: r.receivable_id,
12
+ provider: r.provider,
13
+ externalId: r.external_id,
14
+ method: r.method,
15
+ amount: Number(r.amount),
16
+ status: r.status,
17
+ instructions: r.metadata ?? {},
18
+ });
19
+ /**
20
+ * Vencimento que o gateway aceita.
21
+ *
22
+ * Gateway não emite cobrança vencida — o Asaas recusa com `invalid_dueDate`. E
23
+ * recebível vencido é justamente o caso em que a cobrança mais importa: sem
24
+ * isto, quem está atrasado recebe o e-mail de cobrança **sem botão de pagar**,
25
+ * que é o oposto do que a régua existe para fazer.
26
+ *
27
+ * A data do gateway é empurrada para hoje; o vencimento REAL do recebível não
28
+ * muda, e é ele que o e-mail anuncia. O cliente vê "venceu em 10/08" no texto e
29
+ * uma cobrança pagável hoje — que é a verdade dos dois lados.
30
+ */
31
+ function gatewayDueDate(dueDate, today) {
32
+ if (!dueDate)
33
+ return null;
34
+ const hoje = today ?? new Date().toISOString().slice(0, 10);
35
+ return dueDate < hoje ? hoje : dueDate;
36
+ }
37
+ /**
38
+ * Cobrança viva de um recebível.
39
+ *
40
+ * "Viva" exclui cancelada e estornada — é a mesma definição do índice único da
41
+ * migration, e as duas precisam concordar: se divergirem, o código busca uma
42
+ * cobrança que o banco considera livre e a emissão seguinte estoura.
43
+ */
44
+ async function findActiveCharge(tx, receivableId) {
45
+ const rows = await tx `
46
+ SELECT id, receivable_id, provider, external_id, method, amount, status, metadata
47
+ FROM charge
48
+ WHERE receivable_id = ${receivableId}
49
+ AND deleted_at IS NULL
50
+ AND status NOT IN ('canceled', 'refunded')
51
+ LIMIT 1
52
+ `;
53
+ return rows[0] ? toCharge(rows[0]) : null;
54
+ }
55
+ /**
56
+ * Emite a cobrança de um recebível, ou devolve a que já existe.
57
+ *
58
+ * Três camadas de proteção contra duplicidade, porque cada uma falha num caso
59
+ * diferente:
60
+ *
61
+ * 1. **Busca antes de emitir** — resolve o caso comum (clique repetido, job que
62
+ * roda de novo depois de concluir).
63
+ * 2. **`externalReference` determinístico** — o gateway recebe sempre a mesma
64
+ * referência para o mesmo recebível, o que dá rastreabilidade de ida e volta.
65
+ * 3. **Índice único parcial** — resolve a corrida real: dois processos que
66
+ * passaram juntos pela busca. O segundo leva erro do banco e relê.
67
+ *
68
+ * Só a terceira é garantia; as duas primeiras existem para que a terceira quase
69
+ * nunca precise disparar.
70
+ */
71
+ async function ensureChargeForReceivable(tx, deps, input) {
72
+ // A chave geral vale para EMISSÃO NOVA, e só. Uma cobrança que já existe
73
+ // continua sendo devolvida, e o dinheiro que entrar continua sendo baixado:
74
+ // pausar emissão não pode significar parar de reconhecer pagamento.
75
+ // O escopo é o recebível: uma autorização nomeada libera a emissão DESTE
76
+ // lançamento e de nenhum outro, com a chave geral seguindo armada.
77
+ (0, live_guard_js_1.assertLiveProviderAllowed)(deps.account.environment, (0, live_guard_js_1.readLiveRuntime)(), 'charge', input.receivableId);
78
+ const existing = await findActiveCharge(tx, input.receivableId);
79
+ if (existing) {
80
+ return {
81
+ charge: await refreshInstructionsIfIncomplete(tx, deps, existing),
82
+ created: false,
83
+ customerSync: 'unchanged',
84
+ };
85
+ }
86
+ // Reconciliação ANTES da emissão, e não depois: o gateway valida o pagador no
87
+ // momento em que a cobrança é criada. Corrigir o cadastro depois de a emissão
88
+ // ser recusada não ajudaria ninguém.
89
+ const customerSync = await ensurePaymentCustomer(tx, deps, input);
90
+ const customerExternalId = customerSync.externalId;
91
+ const emitted = await deps.provider.createCharge({
92
+ // Determinístico: o mesmo recebível produz sempre a mesma referência, o que
93
+ // permite reconciliar manualmente no painel do gateway sem consultar o banco.
94
+ referenceId: `receivable:${input.receivableId}`,
95
+ amount: input.amount,
96
+ method: input.method,
97
+ dueDate: gatewayDueDate(input.dueDate, input.today),
98
+ description: input.description,
99
+ customer: input.customer,
100
+ customerExternalId,
101
+ });
102
+ const id = (0, node_crypto_1.randomUUID)();
103
+ const inserted = await tx `
104
+ INSERT INTO charge (
105
+ id, tenant_id, client_id, receivable_id, provider_account_id, provider,
106
+ external_id, method, amount, status, description, due_date, metadata
107
+ ) VALUES (
108
+ ${id},
109
+ NULLIF(current_setting('app.current_tenant', true), '')::uuid,
110
+ ${input.clientId}, ${input.receivableId}, ${deps.account.id}, ${deps.provider.key},
111
+ ${emitted.externalId}, ${input.method}, ${input.amount}, ${emitted.status},
112
+ ${input.description}, ${input.dueDate}, ${tx.json((emitted.payment ?? {}))}
113
+ )
114
+ -- O alvo do ON CONFLICT é EXPLÍCITO, e não um "DO NOTHING" genérico.
115
+ -- Genérico engoliria também um external_id repetido — que não é corrida, é
116
+ -- defeito do adapter — e o trataria como "alguém chegou primeiro",
117
+ -- cancelando no gateway uma cobrança legítima. Aqui, só a duplicata de
118
+ -- cobrança viva é tolerada; qualquer outro conflito estoura e aparece.
119
+ ON CONFLICT (tenant_id, receivable_id)
120
+ WHERE receivable_id IS NOT NULL
121
+ AND deleted_at IS NULL
122
+ AND status NOT IN ('canceled', 'refunded')
123
+ DO NOTHING
124
+ RETURNING id, receivable_id, provider, external_id, method, amount, status, metadata
125
+ `;
126
+ if (inserted[0])
127
+ return { charge: toCharge(inserted[0]), created: true, customerSync: customerSync.action };
128
+ // Perdemos a corrida: outro processo inseriu entre a busca e o INSERT. A
129
+ // cobrança que acabamos de emitir no gateway fica órfã — por isso ela é
130
+ // cancelada, em vez de deixarmos duas cobranças ativas para o mesmo valor.
131
+ if (emitted.externalId) {
132
+ await deps.provider.cancelCharge(emitted.externalId).catch(() => undefined);
133
+ }
134
+ const winner = await findActiveCharge(tx, input.receivableId);
135
+ if (!winner)
136
+ throw new Error('charge_conflict_without_winner');
137
+ return { charge: winner, created: false, customerSync: customerSync.action };
138
+ }
139
+ /**
140
+ * Completa as instruções de pagamento que faltaram na emissão.
141
+ *
142
+ * O QR do PIX vem de um endpoint separado, e essa chamada é tolerante a falha
143
+ * de propósito — derrubar a emissão inteira por causa de um extra trocaria uma
144
+ * cobrança incompleta por nenhuma cobrança. Só que, sem este refresh, a
145
+ * cobrança ficava incompleta **para sempre**: nada voltava a buscar.
146
+ *
147
+ * Aconteceu de verdade na primeira cobrança da conta sandbox da SC, enquanto a
148
+ * chave PIX ainda era provisionada do lado do gateway. A segunda emissão veio
149
+ * completa; a primeira teria seguido sem QR até alguém notar.
150
+ *
151
+ * Roda só quando falta algo e o provider sabe reconsultar — uma cobrança
152
+ * completa não gasta chamada nenhuma.
153
+ */
154
+ async function refreshInstructionsIfIncomplete(tx, deps, charge) {
155
+ if (!deps.provider.fetchPaymentInstructions || !charge.externalId)
156
+ return charge;
157
+ if (!isIncomplete(charge))
158
+ return charge;
159
+ const fresh = await deps.provider
160
+ .fetchPaymentInstructions(charge.externalId, charge.method)
161
+ .catch(() => null);
162
+ if (!fresh)
163
+ return charge;
164
+ // Mescla em vez de substituir: o que já estava gravado não pode sumir porque
165
+ // uma reconsulta veio mais pobre que a original.
166
+ const merged = { ...charge.instructions, ...pruneEmpty(fresh) };
167
+ await tx `
168
+ UPDATE charge SET metadata = ${tx.json(merged)}, updated_at = now()
169
+ WHERE id = ${charge.id}
170
+ `;
171
+ return { ...charge, instructions: merged };
172
+ }
173
+ /** O que cada método precisa ter para o e-mail ficar completo. */
174
+ function isIncomplete(charge) {
175
+ const i = charge.instructions;
176
+ if (charge.method === 'pix')
177
+ return !i.pixPayload || !i.pixQrCodeImage;
178
+ if (charge.method === 'boleto')
179
+ return !i.boletoUrl || !i.identificationField;
180
+ return !i.invoiceUrl;
181
+ }
182
+ function pruneEmpty(i) {
183
+ return Object.fromEntries(Object.entries(i).filter(([, v]) => v));
184
+ }
185
+ /**
186
+ * Digest dos campos cadastrais que o provedor recebe.
187
+ *
188
+ * É o que permite responder "mudou desde a última sincronização?" sem manter uma
189
+ * segunda cópia de dado pessoal. Só entram os campos que o adapter realmente
190
+ * envia — incluir um campo que ninguém sincroniza faria a impressão digital
191
+ * mudar sem nada para reconciliar, e o sistema chamaria o gateway à toa.
192
+ *
193
+ * Normalização antes do hash: `null`, `undefined` e string vazia são a mesma
194
+ * ausência, e " Fulano " é o mesmo nome que "Fulano". Sem isso, salvar a ficha
195
+ * sem editar nada dispararia uma sincronização.
196
+ */
197
+ function customerFingerprint(c) {
198
+ const norm = (v) => (v ?? '').trim().toLowerCase();
199
+ const digits = (v) => (v ?? '').replace(/\D/g, '');
200
+ return (0, node_crypto_1.createHash)('sha256')
201
+ .update([norm(c.name), digits(c.documentNumber), norm(c.email), digits(c.phone)].join('\u0000'))
202
+ .digest('hex');
203
+ }
204
+ /**
205
+ * Garante que o pagador EXISTE no gateway e que ele está CORRETO.
206
+ *
207
+ * O mapa local continua evitando ida ao gateway na maioria das emissões — mas
208
+ * ele deixa de significar "existe, logo está certo para sempre", que era a
209
+ * dívida R. Agora ele guarda também a impressão digital do que foi sincronizado,
210
+ * e a decisão passa a ser:
211
+ *
212
+ * sem registro → cria (o adapter ainda busca antes, para não duplicar)
213
+ * registro coerente → devolve, sem tocar na rede
214
+ * registro divergente → ATUALIZA no gateway, e só então grava a nova digital
215
+ *
216
+ * Digital nula é tratada como divergente de propósito: é o estado das linhas
217
+ * anteriores a esta correção, e é assim que a base existente se cura na primeira
218
+ * emissão de cada cliente, sem backfill adivinhando o que o gateway tem.
219
+ *
220
+ * Falha de atualização NÃO é engolida e NÃO grava digital. O Office não pode
221
+ * registrar que sincronizou o que não sincronizou — na próxima tentativa, ele
222
+ * tenta de novo.
223
+ */
224
+ async function ensurePaymentCustomer(tx, deps, input) {
225
+ if (!deps.provider.ensureCustomer)
226
+ return { externalId: null, action: 'unsupported' };
227
+ const customer = { ...input.customer, referenceId: `client:${input.clientId}` };
228
+ const fingerprint = customerFingerprint(input.customer);
229
+ const rows = await tx `
230
+ SELECT external_id, synced_fingerprint FROM payment_customer
231
+ WHERE provider_account_id = ${deps.account.id} AND client_id = ${input.clientId}
232
+ LIMIT 1
233
+ `;
234
+ if (rows[0]) {
235
+ if (rows[0].synced_fingerprint === fingerprint) {
236
+ return { externalId: rows[0].external_id, action: 'unchanged' };
237
+ }
238
+ if (!deps.provider.updateCustomer) {
239
+ // Provider sem atualização: devolver o id calado faria o Office parecer
240
+ // sincronizado. Melhor dizer que não é suportado e deixar quem chamou
241
+ // decidir — a alternativa é a dívida R de volta, silenciosa.
242
+ return { externalId: rows[0].external_id, action: 'unsupported' };
243
+ }
244
+ await deps.provider.updateCustomer(rows[0].external_id, customer);
245
+ await tx `
246
+ UPDATE payment_customer
247
+ SET synced_fingerprint = ${fingerprint}, synced_at = now(), updated_at = now()
248
+ WHERE provider_account_id = ${deps.account.id} AND client_id = ${input.clientId}
249
+ `;
250
+ return { externalId: rows[0].external_id, action: 'reconciled' };
251
+ }
252
+ const ensured = await deps.provider.ensureCustomer(customer);
253
+ // O adapter distingue "criei" de "encontrei e reconciliei"; o rail não teria
254
+ // como. Sem isto, a trilha registrava `created` para um pagador que já existia
255
+ // no gateway e acabara de ser corrigido — o histórico dizia a coisa errada
256
+ // justamente no caso que mais importa auditar.
257
+ const externalId = typeof ensured === 'string' ? ensured : ensured.externalId;
258
+ const action = typeof ensured === 'string' ? 'created' : ensured.action;
259
+ await tx `
260
+ INSERT INTO payment_customer (
261
+ id, tenant_id, client_id, provider_account_id, provider, external_id,
262
+ synced_fingerprint, synced_at
263
+ ) VALUES (
264
+ ${(0, node_crypto_1.randomUUID)()},
265
+ NULLIF(current_setting('app.current_tenant', true), '')::uuid,
266
+ ${input.clientId}, ${deps.account.id}, ${deps.provider.key}, ${externalId},
267
+ ${fingerprint}, now()
268
+ )
269
+ ON CONFLICT (tenant_id, provider_account_id, client_id) DO UPDATE
270
+ SET synced_fingerprint = EXCLUDED.synced_fingerprint,
271
+ synced_at = EXCLUDED.synced_at,
272
+ updated_at = now()
273
+ `;
274
+ return { externalId, action };
275
+ }
276
+ /**
277
+ * QR do PIX de uma cobrança, em PNG.
278
+ *
279
+ * O gateway entrega o QR como base64, e base64 embutido no e-mail não funciona:
280
+ * o Gmail serve toda imagem pelo próprio proxy, que só busca http(s). Guardamos
281
+ * o base64 e servimos por URL — o mesmo dado, num endereço que o cliente de
282
+ * e-mail consegue buscar.
283
+ *
284
+ * Devolve `null` quando a cobrança não tem QR (boleto, cobrança antiga, gateway
285
+ * que não expõe). Quem chama responde 404, e o e-mail simplesmente não mostra
286
+ * imagem.
287
+ */
288
+ async function pixQrPngOf(tx, chargeId) {
289
+ const rows = await tx `
290
+ SELECT metadata FROM charge WHERE id = ${chargeId} AND deleted_at IS NULL
291
+ `;
292
+ const raw = rows[0]?.metadata?.pixQrCodeImage;
293
+ if (!raw)
294
+ return null;
295
+ // Aceita tanto o data URI (formato em que o adapter guarda) quanto base64 cru.
296
+ const base64 = raw.startsWith('data:') ? (raw.split(',')[1] ?? '') : raw;
297
+ if (!/^[A-Za-z0-9+/]+={0,2}$/.test(base64))
298
+ return null;
299
+ return Buffer.from(base64, 'base64');
300
+ }
301
+ //# sourceMappingURL=payment-rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-rail.js","sourceRoot":"","sources":["../../../src/billing/payment-rail.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,10 @@ const shared_1 = require("@baruk/shared");
11
11
  * IMPORTANTE: nenhum outro arquivo do Core importa este adapter diretamente — o
12
12
  * acesso é sempre via `resolveBillingProvider('asaas', config)`. Assim, trocar
13
13
  * Asaas por Stripe é trocar a string registrada, sem tocar em regra de negócio.
14
+ *
15
+ * A credencial define a CONTA que recebe o dinheiro. Quem escolhe a credencial
16
+ * é `provider-account.ts`, a partir do tenant — este adapter não sabe, e não
17
+ * deve saber, de quem é a conta que está usando.
14
18
  */
15
19
  const BILLING_TYPE = {
16
20
  pix: 'PIX',
@@ -27,12 +31,14 @@ class AsaasProvider {
27
31
  key = 'asaas';
28
32
  apiKey;
29
33
  baseUrl;
34
+ webhookSecret;
30
35
  fetchImpl;
31
36
  constructor(config) {
32
37
  if (!config.apiKey)
33
38
  throw new AsaasError('apiKey ausente (configure no Vault).', 500);
34
39
  this.apiKey = config.apiKey;
35
40
  this.baseUrl = (config.baseUrl ?? 'https://api.asaas.com/v3').replace(/\/$/, '');
41
+ this.webhookSecret = config.webhookSecret;
36
42
  this.fetchImpl = config.fetchImpl ?? fetch;
37
43
  }
38
44
  async call(path, method, body) {
@@ -47,29 +53,123 @@ class AsaasProvider {
47
53
  }
48
54
  return (await res.json());
49
55
  }
56
+ /**
57
+ * Provisiona (ou reencontra) o pagador na conta do escritório.
58
+ *
59
+ * `externalReference` é o id interno do cliente, e a busca por ele vem ANTES
60
+ * do POST: sem isso, cada emissão criaria um cadastro novo na conta do
61
+ * escritório, e o histórico do cliente lá dentro viraria uma lista de
62
+ * homônimos. O mapa local (`payment_customer`) evita a maioria das chamadas;
63
+ * esta busca é a rede de segurança para quando o mapa e o gateway divergirem.
64
+ */
65
+ async ensureCustomer(req) {
66
+ const found = await this.call(`/customers?externalReference=${encodeURIComponent(req.referenceId)}&limit=1`, 'GET');
67
+ const existing = found.data?.[0]?.id;
68
+ if (existing) {
69
+ // ENCONTRAR NÃO BASTA. Este era o coração da dívida R: o pagador existia
70
+ // com dados velhos — tipicamente sem CPF/CNPJ — e devolvê-lo calado fazia a
71
+ // emissão ser recusada para sempre, mesmo depois de o escritório corrigir
72
+ // a ficha no Office.
73
+ //
74
+ // Importa que a correção esteja AQUI, e não só no cache: a transação da
75
+ // emissão faz rollback quando o gateway recusa, então o mapa local não
76
+ // persiste e a próxima tentativa cai justamente neste caminho. Se ele
77
+ // devolvesse sem reconciliar, o sistema gravaria uma impressão digital
78
+ // afirmando uma sincronização que nunca houve.
79
+ await this.updateCustomer(existing, req);
80
+ return { externalId: existing, action: 'reconciled' };
81
+ }
82
+ const created = await this.call('/customers', 'POST', customerPayload(req));
83
+ return { externalId: created.id, action: 'created' };
84
+ }
85
+ /**
86
+ * Atualiza o pagador existente. Mesmo payload da criação, mesmo endpoint com
87
+ * id — no Asaas, `POST /customers/{id}` é a atualização.
88
+ *
89
+ * Sem `externalReference` no corpo: ele é a âncora que liga o pagador ao
90
+ * cliente do Office, e reescrevê-lo a cada sincronização abriria a chance de
91
+ * apontar para outro cliente por um erro de chamada.
92
+ */
93
+ async updateCustomer(externalId, req) {
94
+ const { externalReference: _ignored, ...payload } = customerPayload(req);
95
+ await this.call(`/customers/${encodeURIComponent(externalId)}`, 'POST', payload);
96
+ }
97
+ async describeAccount() {
98
+ const me = await this.call('/myAccount', 'GET');
99
+ const documentNumber = onlyDigits(me.cpfCnpj) || null;
100
+ return {
101
+ // Sem `walletId`/`id`, cai no documento — é o que identifica o TITULAR do
102
+ // dinheiro, que é o que o guard cross-tenant precisa comparar. Sem este
103
+ // fallback a referência fica nula, o índice parcial não pega nada, e duas
104
+ // organizações conseguiriam conectar a mesma conta.
105
+ reference: me.walletId ?? me.id ?? (documentNumber ? `doc:${documentNumber}` : null),
106
+ name: me.companyName ?? me.name ?? null,
107
+ documentNumber,
108
+ };
109
+ }
50
110
  async createCharge(req) {
51
- // Asaas exige um customer; aqui assumimos que o id do cliente Asaas veio no
52
- // metadata (provisionamento fora do escopo). O mapeamento demonstra o contrato.
53
- const payload = {
54
- billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
111
+ if (!req.customerExternalId) {
112
+ throw new AsaasError('customer não provisionado chame ensureCustomer antes.', 500);
113
+ }
114
+ const method = req.method;
115
+ const res = await this.call('/payments', 'POST', {
116
+ customer: req.customerExternalId,
117
+ billingType: BILLING_TYPE[method] ?? 'UNDEFINED',
55
118
  value: req.amount,
56
119
  dueDate: req.dueDate,
57
120
  description: req.description ?? undefined,
58
121
  externalReference: req.referenceId,
59
- };
60
- const res = await this.call('/payments', 'POST', payload);
122
+ });
61
123
  return {
62
124
  externalId: res.id,
63
125
  status: mapAsaasStatus(res.status),
64
- payment: { boletoUrl: res.bankSlipUrl, invoiceUrl: res.invoiceUrl },
126
+ payment: await this.instructionsFor(res, method),
65
127
  raw: res,
66
128
  };
67
129
  }
130
+ async fetchPaymentInstructions(externalId, method) {
131
+ const res = await this.call(`/payments/${externalId}`, 'GET');
132
+ return this.instructionsFor(res, method);
133
+ }
134
+ /**
135
+ * O QR Code e a linha digitável vivem em endpoints próprios.
136
+ *
137
+ * Eles são buscados no provider, nunca gerados aqui: um BR Code montado por
138
+ * nós apontaria para uma chave PIX que o gateway não conhece, e o pagamento
139
+ * cairia fora da cobrança — dinheiro que entra sem baixar nada.
140
+ *
141
+ * A falha é tolerada de propósito. Se o QR não vier, o cliente ainda tem a
142
+ * página de pagamento; derrubar a emissão inteira por causa de um extra seria
143
+ * trocar uma cobrança incompleta por nenhuma cobrança.
144
+ */
145
+ async instructionsFor(res, method) {
146
+ const out = {
147
+ invoiceUrl: res.invoiceUrl,
148
+ boletoUrl: res.bankSlipUrl,
149
+ };
150
+ if (method === 'pix') {
151
+ const qr = await this.call(`/payments/${res.id}/pixQrCode`, 'GET').catch(() => null);
152
+ if (qr?.payload)
153
+ out.pixPayload = qr.payload;
154
+ if (qr?.encodedImage)
155
+ out.pixQrCodeImage = `data:image/png;base64,${qr.encodedImage}`;
156
+ }
157
+ if (method === 'boleto') {
158
+ const slip = await this.call(`/payments/${res.id}/identificationField`, 'GET').catch(() => null);
159
+ if (slip?.identificationField)
160
+ out.identificationField = slip.identificationField;
161
+ }
162
+ return out;
163
+ }
68
164
  async cancelCharge(externalId) {
69
165
  await this.call(`/payments/${externalId}`, 'DELETE');
70
166
  }
71
167
  async createSubscription(req) {
72
- const cycle = { monthly: 'MONTHLY', quarterly: 'QUARTERLY', yearly: 'YEARLY' };
168
+ const cycle = {
169
+ monthly: 'MONTHLY',
170
+ quarterly: 'QUARTERLY',
171
+ yearly: 'YEARLY',
172
+ };
73
173
  const res = await this.call('/subscriptions', 'POST', {
74
174
  billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
75
175
  value: req.amount,
@@ -88,25 +188,105 @@ class AsaasProvider {
88
188
  async cancelSubscription(externalId) {
89
189
  await this.call(`/subscriptions/${externalId}`, 'DELETE');
90
190
  }
191
+ /**
192
+ * Autenticação do webhook.
193
+ *
194
+ * O Asaas envia o token configurado na fila em `asaas-access-token`. A
195
+ * comparação é de tempo constante — um `===` sobre segredo vaza, byte a byte,
196
+ * quanto do prefixo está correto para quem consegue medir o tempo da resposta.
197
+ *
198
+ * Sem segredo configurado, reprova. Fail-closed é o único default aceitável
199
+ * numa rota pública que dá baixa em dinheiro.
200
+ */
201
+ verifyWebhook(_payload, headers = {}) {
202
+ if (!this.webhookSecret)
203
+ return false;
204
+ const sent = headers['asaas-access-token'] ?? headers['Asaas-Access-Token'] ?? '';
205
+ return timingSafeEqual(sent, this.webhookSecret);
206
+ }
91
207
  parseWebhook(payload) {
92
208
  const p = payload;
93
- const externalId = p.payment?.id ?? null;
209
+ const base = {
210
+ eventId: p.id ?? null,
211
+ externalId: p.payment?.id ?? null,
212
+ raw: payload,
213
+ };
94
214
  switch (p.event) {
215
+ // RECEIVED = dinheiro creditado. CONFIRMED = autorizado, ainda não
216
+ // liquidado (cartão). Os dois viram baixa: para o escritório, a dívida
217
+ // deixou de ser dele nos dois casos, e esperar a liquidação faria a régua
218
+ // seguir cobrando alguém que já pagou.
219
+ // RECEIVED_IN_CASH é a baixa que o escritório dá à mão no painel quando o
220
+ // cliente pagou fora do gateway. Sem este caso o evento caía em `unknown`
221
+ // e a régua seguia cobrando quem já tinha pagado — dinheiro que entrou e
222
+ // que o sistema não enxergava.
95
223
  case 'PAYMENT_RECEIVED':
96
224
  case 'PAYMENT_CONFIRMED':
97
- return { type: 'charge.paid', externalId, paidAt: p.payment?.paymentDate ?? null, raw: payload };
225
+ case 'PAYMENT_RECEIVED_IN_CASH':
226
+ return {
227
+ ...base,
228
+ type: 'charge.paid',
229
+ paidAt: p.payment?.paymentDate ?? null,
230
+ paidAmount: p.payment?.value ?? null,
231
+ };
232
+ // O par do anterior. Reconhecer a baixa manual sem reconhecer o desfazer
233
+ // trocaria um defeito por outro: a cobrança ficaria paga para sempre por
234
+ // causa de um clique que o próprio escritório revogou.
235
+ case 'PAYMENT_RECEIVED_IN_CASH_UNDONE':
236
+ return { ...base, type: 'charge.settlement_undone' };
237
+ case 'PAYMENT_CREATED':
238
+ return { ...base, type: 'charge.created' };
98
239
  case 'PAYMENT_OVERDUE':
99
- return { type: 'charge.overdue', externalId, raw: payload };
240
+ return { ...base, type: 'charge.overdue' };
100
241
  case 'PAYMENT_DELETED':
101
- return { type: 'charge.canceled', externalId, raw: payload };
242
+ return { ...base, type: 'charge.canceled' };
102
243
  case 'PAYMENT_REFUNDED':
103
- return { type: 'charge.refunded', externalId, raw: payload };
244
+ case 'PAYMENT_REVERSED':
245
+ return { ...base, type: 'charge.refunded' };
246
+ case 'PAYMENT_CHARGEBACK_REQUESTED':
247
+ case 'PAYMENT_CHARGEBACK_DISPUTE':
248
+ return { ...base, type: 'charge.chargeback' };
104
249
  default:
105
- return { type: 'unknown', externalId, raw: payload };
250
+ return { ...base, type: 'unknown' };
106
251
  }
107
252
  }
108
253
  }
109
254
  exports.AsaasProvider = AsaasProvider;
255
+ /**
256
+ * Campos cadastrais que o Asaas precisa do pagador.
257
+ *
258
+ * Uma função só, usada na criação E na atualização: se as duas montassem o
259
+ * payload por conta própria, um campo adicionado numa delas passaria a existir
260
+ * só nos clientes novos — e a diferença apareceria meses depois, como "esse
261
+ * cliente antigo não recebe e-mail do boleto".
262
+ *
263
+ * `notificationDisabled` é reafirmado em toda sincronização de propósito: quem
264
+ * fala com o cliente é o Office. Se alguém ligar a notificação pelo painel do
265
+ * gateway, o cliente passaria a receber DUAS cobranças pelo mesmo valor.
266
+ */
267
+ function customerPayload(req) {
268
+ return {
269
+ name: req.name,
270
+ cpfCnpj: onlyDigits(req.documentNumber),
271
+ email: req.email ?? undefined,
272
+ mobilePhone: onlyDigits(req.phone) || undefined,
273
+ externalReference: req.referenceId,
274
+ notificationDisabled: true,
275
+ };
276
+ }
277
+ function onlyDigits(v) {
278
+ return (v ?? '').replace(/\D/g, '');
279
+ }
280
+ /** Comparação de tempo constante, sem depender de `node:crypto` no Core. */
281
+ function timingSafeEqual(a, b) {
282
+ // O XOR roda sobre o comprimento do segredo para que a duração não revele o
283
+ // tamanho do que foi enviado; a diferença de comprimento entra no acumulador.
284
+ let diff = a.length ^ b.length;
285
+ for (let i = 0; i < b.length; i++) {
286
+ diff |= (a.charCodeAt(i) || 0) ^ b.charCodeAt(i);
287
+ }
288
+ return diff === 0;
289
+ }
110
290
  function mapAsaasStatus(status) {
111
291
  switch (status) {
112
292
  case 'RECEIVED':
@@ -1 +1 @@
1
- {"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../../src/billing/provider/asaas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../../src/billing/provider/asaas.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ class ManualProvider {
21
21
  // No-op — cancelamento é apenas mudança de status interno.
22
22
  }
23
23
  parseWebhook() {
24
- return { type: 'unknown', externalId: null };
24
+ return { type: 'unknown', eventId: null, externalId: null };
25
25
  }
26
26
  }
27
27
  exports.ManualProvider = ManualProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../../src/billing/provider/manual.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAa,cAAc;IAChB,GAAG,GAAG,QAAQ,CAAC;IAExB,KAAK,CAAC,YAAY,CAAC,GAAkB;QACnC,6EAA6E;QAC7E,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,2DAA2D;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;CACF;AAnBD,wCAmBC"}
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../../src/billing/provider/manual.ts"],"names":[],"mappings":";;;AAEA;;;;;GAKG;AACH,MAAa,cAAc;IAChB,GAAG,GAAG,QAAQ,CAAC;IAExB,KAAK,CAAC,YAAY,CAAC,GAAkB;QACnC,6EAA6E;QAC7E,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,2DAA2D;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;CACF;AAnBD,wCAmBC"}