@baruk/core 0.3.0 → 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 (708) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +97 -0
  3. package/README.md +9 -2
  4. package/dist/auth/password-reset.d.ts +30 -1
  5. package/dist/auth/password-reset.d.ts.map +1 -1
  6. package/dist/auth/password-reset.js +139 -11
  7. package/dist/auth/password-reset.js.map +1 -1
  8. package/dist/auth/service.d.ts +39 -2
  9. package/dist/auth/service.d.ts.map +1 -1
  10. package/dist/auth/service.js +75 -10
  11. package/dist/auth/service.js.map +1 -1
  12. package/dist/billing/ar-repository.d.ts +334 -0
  13. package/dist/billing/ar-repository.d.ts.map +1 -0
  14. package/dist/billing/ar-repository.js +707 -0
  15. package/dist/billing/ar-repository.js.map +1 -0
  16. package/dist/billing/auto-generation.d.ts +87 -0
  17. package/dist/billing/auto-generation.d.ts.map +1 -0
  18. package/dist/billing/auto-generation.js +181 -0
  19. package/dist/billing/auto-generation.js.map +1 -0
  20. package/dist/billing/live-guard.d.ts +64 -0
  21. package/dist/billing/live-guard.d.ts.map +1 -0
  22. package/dist/billing/live-guard.js +68 -0
  23. package/dist/billing/live-guard.js.map +1 -0
  24. package/dist/billing/payment-means-catalog.d.ts +17 -0
  25. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  26. package/dist/billing/payment-means-catalog.js +21 -0
  27. package/dist/billing/payment-means-catalog.js.map +1 -0
  28. package/dist/billing/payment-means.d.ts +38 -0
  29. package/dist/billing/payment-means.d.ts.map +1 -0
  30. package/dist/billing/payment-means.js +29 -0
  31. package/dist/billing/payment-means.js.map +1 -0
  32. package/dist/billing/payment-rail.d.ts +118 -0
  33. package/dist/billing/payment-rail.d.ts.map +1 -0
  34. package/dist/billing/payment-rail.js +295 -0
  35. package/dist/billing/payment-rail.js.map +1 -0
  36. package/dist/billing/provider/asaas.d.ts +46 -1
  37. package/dist/billing/provider/asaas.d.ts.map +1 -1
  38. package/dist/billing/provider/asaas.js +194 -14
  39. package/dist/billing/provider/asaas.js.map +1 -1
  40. package/dist/billing/provider/manual.js +1 -1
  41. package/dist/billing/provider/manual.js.map +1 -1
  42. package/dist/billing/provider/types.d.ts +115 -8
  43. package/dist/billing/provider/types.d.ts.map +1 -1
  44. package/dist/billing/provider-account.d.ts +89 -0
  45. package/dist/billing/provider-account.d.ts.map +1 -0
  46. package/dist/billing/provider-account.js +161 -0
  47. package/dist/billing/provider-account.js.map +1 -0
  48. package/dist/billing/provider-onboarding.d.ts +67 -0
  49. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  50. package/dist/billing/provider-onboarding.js +234 -0
  51. package/dist/billing/provider-onboarding.js.map +1 -0
  52. package/dist/billing/receivable.d.ts +5 -1
  53. package/dist/billing/receivable.d.ts.map +1 -1
  54. package/dist/billing/reconcile.d.ts +58 -0
  55. package/dist/billing/reconcile.d.ts.map +1 -0
  56. package/dist/billing/reconcile.js +138 -0
  57. package/dist/billing/reconcile.js.map +1 -0
  58. package/dist/billing/repository.d.ts +90 -1
  59. package/dist/billing/repository.d.ts.map +1 -1
  60. package/dist/billing/repository.js +148 -19
  61. package/dist/billing/repository.js.map +1 -1
  62. package/dist/cjs/auth/password-reset.js +141 -11
  63. package/dist/cjs/auth/password-reset.js.map +1 -1
  64. package/dist/cjs/auth/service.js +75 -9
  65. package/dist/cjs/auth/service.js.map +1 -1
  66. package/dist/cjs/billing/ar-repository.js +728 -0
  67. package/dist/cjs/billing/ar-repository.js.map +1 -0
  68. package/dist/cjs/billing/auto-generation.js +186 -0
  69. package/dist/cjs/billing/auto-generation.js.map +1 -0
  70. package/dist/cjs/billing/live-guard.js +72 -0
  71. package/dist/cjs/billing/live-guard.js.map +1 -0
  72. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  73. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  74. package/dist/cjs/billing/payment-means.js +33 -0
  75. package/dist/cjs/billing/payment-means.js.map +1 -0
  76. package/dist/cjs/billing/payment-rail.js +301 -0
  77. package/dist/cjs/billing/payment-rail.js.map +1 -0
  78. package/dist/cjs/billing/provider/asaas.js +194 -14
  79. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  80. package/dist/cjs/billing/provider/manual.js +1 -1
  81. package/dist/cjs/billing/provider/manual.js.map +1 -1
  82. package/dist/cjs/billing/provider-account.js +170 -0
  83. package/dist/cjs/billing/provider-account.js.map +1 -0
  84. package/dist/cjs/billing/provider-onboarding.js +239 -0
  85. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  86. package/dist/cjs/billing/reconcile.js +143 -0
  87. package/dist/cjs/billing/reconcile.js.map +1 -0
  88. package/dist/cjs/billing/repository.js +150 -18
  89. package/dist/cjs/billing/repository.js.map +1 -1
  90. package/dist/cjs/clients/repository.js +96 -20
  91. package/dist/cjs/clients/repository.js.map +1 -1
  92. package/dist/cjs/collection/branding.js +140 -0
  93. package/dist/cjs/collection/branding.js.map +1 -0
  94. package/dist/cjs/collection/channel-accounts.js +137 -0
  95. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  96. package/dist/cjs/collection/channel.js +17 -0
  97. package/dist/cjs/collection/channel.js.map +1 -0
  98. package/dist/cjs/collection/communication-bridge.js +140 -0
  99. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  100. package/dist/cjs/collection/communication-runtime.js +193 -0
  101. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  102. package/dist/cjs/collection/consent-repository.js +84 -0
  103. package/dist/cjs/collection/consent-repository.js.map +1 -0
  104. package/dist/cjs/collection/copy.js +125 -0
  105. package/dist/cjs/collection/copy.js.map +1 -0
  106. package/dist/cjs/collection/delivery-callback.js +151 -0
  107. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  108. package/dist/cjs/collection/email-layout.js +252 -0
  109. package/dist/cjs/collection/email-layout.js.map +1 -0
  110. package/dist/cjs/collection/engine.js +414 -0
  111. package/dist/cjs/collection/engine.js.map +1 -0
  112. package/dist/cjs/collection/format.js +76 -0
  113. package/dist/cjs/collection/format.js.map +1 -0
  114. package/dist/cjs/collection/payment-block.js +3 -0
  115. package/dist/cjs/collection/payment-block.js.map +1 -0
  116. package/dist/cjs/collection/policy.js +147 -0
  117. package/dist/cjs/collection/policy.js.map +1 -0
  118. package/dist/cjs/collection/repository.js +260 -0
  119. package/dist/cjs/collection/repository.js.map +1 -0
  120. package/dist/cjs/collection/subject.js +104 -0
  121. package/dist/cjs/collection/subject.js.map +1 -0
  122. package/dist/cjs/collection/template-catalog.js +165 -0
  123. package/dist/cjs/collection/template-catalog.js.map +1 -0
  124. package/dist/cjs/collection/template.js +78 -0
  125. package/dist/cjs/collection/template.js.map +1 -0
  126. package/dist/cjs/communication/adapters/email.js +132 -0
  127. package/dist/cjs/communication/adapters/email.js.map +1 -0
  128. package/dist/cjs/communication/adapters/sms.js +127 -0
  129. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  130. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  131. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  132. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  133. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  134. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  135. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  136. package/dist/cjs/communication/audit.js +61 -0
  137. package/dist/cjs/communication/audit.js.map +1 -0
  138. package/dist/cjs/communication/capabilities.js +76 -0
  139. package/dist/cjs/communication/capabilities.js.map +1 -0
  140. package/dist/cjs/communication/channel.js +53 -0
  141. package/dist/cjs/communication/channel.js.map +1 -0
  142. package/dist/cjs/communication/claim.js +228 -0
  143. package/dist/cjs/communication/claim.js.map +1 -0
  144. package/dist/cjs/communication/consent.js +43 -0
  145. package/dist/cjs/communication/consent.js.map +1 -0
  146. package/dist/cjs/communication/context.js +45 -0
  147. package/dist/cjs/communication/context.js.map +1 -0
  148. package/dist/cjs/communication/credentials.js +121 -0
  149. package/dist/cjs/communication/credentials.js.map +1 -0
  150. package/dist/cjs/communication/dry-run-scenario.js +161 -0
  151. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  152. package/dist/cjs/communication/dry-run.js +97 -0
  153. package/dist/cjs/communication/dry-run.js.map +1 -0
  154. package/dist/cjs/communication/engine.js +483 -0
  155. package/dist/cjs/communication/engine.js.map +1 -0
  156. package/dist/cjs/communication/graph.js +50 -0
  157. package/dist/cjs/communication/graph.js.map +1 -0
  158. package/dist/cjs/communication/idempotency.js +26 -0
  159. package/dist/cjs/communication/idempotency.js.map +1 -0
  160. package/dist/cjs/communication/identity.js +110 -0
  161. package/dist/cjs/communication/identity.js.map +1 -0
  162. package/dist/cjs/communication/index.js +135 -0
  163. package/dist/cjs/communication/index.js.map +1 -0
  164. package/dist/cjs/communication/onboarding.js +297 -0
  165. package/dist/cjs/communication/onboarding.js.map +1 -0
  166. package/dist/cjs/communication/policy.js +16 -0
  167. package/dist/cjs/communication/policy.js.map +1 -0
  168. package/dist/cjs/communication/routing.js +77 -0
  169. package/dist/cjs/communication/routing.js.map +1 -0
  170. package/dist/cjs/communication/sender-profile.js +128 -0
  171. package/dist/cjs/communication/sender-profile.js.map +1 -0
  172. package/dist/cjs/communication/status.js +86 -0
  173. package/dist/cjs/communication/status.js.map +1 -0
  174. package/dist/cjs/communication/stores/onboarding.js +135 -0
  175. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  176. package/dist/cjs/communication/stores/postgres.js +458 -0
  177. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  178. package/dist/cjs/communication/stores/routing.js +334 -0
  179. package/dist/cjs/communication/stores/routing.js.map +1 -0
  180. package/dist/cjs/communication/stores/secrets.js +126 -0
  181. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  182. package/dist/cjs/communication/template-provider.js +22 -0
  183. package/dist/cjs/communication/template-provider.js.map +1 -0
  184. package/dist/cjs/communication/template.js +63 -0
  185. package/dist/cjs/communication/template.js.map +1 -0
  186. package/dist/cjs/communication/webhook-subscription.js +258 -0
  187. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  188. package/dist/cjs/communication/webhook.js +292 -0
  189. package/dist/cjs/communication/webhook.js.map +1 -0
  190. package/dist/cjs/competence/repository.js +309 -0
  191. package/dist/cjs/competence/repository.js.map +1 -0
  192. package/dist/cjs/contacts/phone.js +192 -0
  193. package/dist/cjs/contacts/phone.js.map +1 -0
  194. package/dist/cjs/db/seed-catalog.js +48 -0
  195. package/dist/cjs/db/seed-catalog.js.map +1 -0
  196. package/dist/cjs/db/seed.js +15 -7
  197. package/dist/cjs/db/seed.js.map +1 -1
  198. package/dist/cjs/documents/repository.js +244 -0
  199. package/dist/cjs/documents/repository.js.map +1 -0
  200. package/dist/cjs/documents/requests.js +136 -0
  201. package/dist/cjs/documents/requests.js.map +1 -0
  202. package/dist/cjs/index.js +427 -48
  203. package/dist/cjs/index.js.map +1 -1
  204. package/dist/cjs/legal/company.js +36 -0
  205. package/dist/cjs/legal/company.js.map +1 -0
  206. package/dist/cjs/legal/documents.js +671 -0
  207. package/dist/cjs/legal/documents.js.map +1 -0
  208. package/dist/cjs/legal/index.js +15 -0
  209. package/dist/cjs/legal/index.js.map +1 -0
  210. package/dist/cjs/legal/types.js +34 -0
  211. package/dist/cjs/legal/types.js.map +1 -0
  212. package/dist/cjs/mail/auth-templates.js +29 -0
  213. package/dist/cjs/mail/auth-templates.js.map +1 -0
  214. package/dist/cjs/mail/dedup-store.js +12 -51
  215. package/dist/cjs/mail/dedup-store.js.map +1 -1
  216. package/dist/cjs/mail/index.js +16 -4
  217. package/dist/cjs/mail/index.js.map +1 -1
  218. package/dist/cjs/mail/provider.js +12 -247
  219. package/dist/cjs/mail/provider.js.map +1 -1
  220. package/dist/cjs/mail/resend.js +14 -18
  221. package/dist/cjs/mail/resend.js.map +1 -1
  222. package/dist/cjs/mail/sender-resolver.js +12 -11
  223. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  224. package/dist/cjs/mail/template-renderer.js +11 -16
  225. package/dist/cjs/mail/template-renderer.js.map +1 -1
  226. package/dist/cjs/mail/transactional-outbound.js +117 -0
  227. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  228. package/dist/cjs/mail/types.js +8 -35
  229. package/dist/cjs/mail/types.js.map +1 -1
  230. package/dist/cjs/portal/provisioning.js +144 -0
  231. package/dist/cjs/portal/provisioning.js.map +1 -0
  232. package/dist/cjs/pricing-engine/canonical.js +42 -0
  233. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  234. package/dist/cjs/pricing-engine/errors.js +6 -1
  235. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  236. package/dist/cjs/pricing-engine/index.js +12 -1
  237. package/dist/cjs/pricing-engine/index.js.map +1 -1
  238. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  239. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  240. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  241. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  242. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  243. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  244. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  245. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  246. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  247. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  248. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  249. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  250. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  251. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  252. package/dist/cjs/rbac/authorize.js +28 -0
  253. package/dist/cjs/rbac/authorize.js.map +1 -1
  254. package/dist/cjs/rbac/catalog.js +67 -1
  255. package/dist/cjs/rbac/catalog.js.map +1 -1
  256. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  257. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  258. package/dist/cjs/rbac/workload.js +191 -0
  259. package/dist/cjs/rbac/workload.js.map +1 -0
  260. package/dist/cjs/storage/checksum.js +15 -0
  261. package/dist/cjs/storage/checksum.js.map +1 -0
  262. package/dist/cjs/storage/key.js +72 -0
  263. package/dist/cjs/storage/key.js.map +1 -0
  264. package/dist/cjs/storage/local.js +100 -0
  265. package/dist/cjs/storage/local.js.map +1 -0
  266. package/dist/cjs/storage/r2.js +181 -0
  267. package/dist/cjs/storage/r2.js.map +1 -0
  268. package/dist/cjs/storage/registry.js +41 -0
  269. package/dist/cjs/storage/registry.js.map +1 -0
  270. package/dist/cjs/storage/types.js +50 -0
  271. package/dist/cjs/storage/types.js.map +1 -0
  272. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  273. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  274. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  275. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  276. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  277. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  278. package/dist/cjs/subscription-billing/service.js +57 -8
  279. package/dist/cjs/subscription-billing/service.js.map +1 -1
  280. package/dist/cjs/subscription-billing/types.js.map +1 -1
  281. package/dist/cjs/tenancy/provisioning.js +32 -8
  282. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  283. package/dist/cjs/users/repository.js +119 -2
  284. package/dist/cjs/users/repository.js.map +1 -1
  285. package/dist/cjs/vault/repository.js +81 -0
  286. package/dist/cjs/vault/repository.js.map +1 -1
  287. package/dist/clients/repository.d.ts +42 -0
  288. package/dist/clients/repository.d.ts.map +1 -1
  289. package/dist/clients/repository.js +94 -21
  290. package/dist/clients/repository.js.map +1 -1
  291. package/dist/collection/branding.d.ts +72 -0
  292. package/dist/collection/branding.d.ts.map +1 -0
  293. package/dist/collection/branding.js +136 -0
  294. package/dist/collection/branding.js.map +1 -0
  295. package/dist/collection/channel-accounts.d.ts +57 -0
  296. package/dist/collection/channel-accounts.d.ts.map +1 -0
  297. package/dist/collection/channel-accounts.js +133 -0
  298. package/dist/collection/channel-accounts.js.map +1 -0
  299. package/dist/collection/channel.d.ts +24 -0
  300. package/dist/collection/channel.d.ts.map +1 -0
  301. package/dist/collection/channel.js +16 -0
  302. package/dist/collection/channel.js.map +1 -0
  303. package/dist/collection/communication-bridge.d.ts +66 -0
  304. package/dist/collection/communication-bridge.d.ts.map +1 -0
  305. package/dist/collection/communication-bridge.js +134 -0
  306. package/dist/collection/communication-bridge.js.map +1 -0
  307. package/dist/collection/communication-runtime.d.ts +95 -0
  308. package/dist/collection/communication-runtime.d.ts.map +1 -0
  309. package/dist/collection/communication-runtime.js +187 -0
  310. package/dist/collection/communication-runtime.js.map +1 -0
  311. package/dist/collection/consent-repository.d.ts +32 -0
  312. package/dist/collection/consent-repository.d.ts.map +1 -0
  313. package/dist/collection/consent-repository.js +79 -0
  314. package/dist/collection/consent-repository.js.map +1 -0
  315. package/dist/collection/copy.d.ts +50 -0
  316. package/dist/collection/copy.d.ts.map +1 -0
  317. package/dist/collection/copy.js +122 -0
  318. package/dist/collection/copy.js.map +1 -0
  319. package/dist/collection/delivery-callback.d.ts +49 -0
  320. package/dist/collection/delivery-callback.d.ts.map +1 -0
  321. package/dist/collection/delivery-callback.js +147 -0
  322. package/dist/collection/delivery-callback.js.map +1 -0
  323. package/dist/collection/email-layout.d.ts +45 -0
  324. package/dist/collection/email-layout.d.ts.map +1 -0
  325. package/dist/collection/email-layout.js +247 -0
  326. package/dist/collection/email-layout.js.map +1 -0
  327. package/dist/collection/engine.d.ts +177 -0
  328. package/dist/collection/engine.d.ts.map +1 -0
  329. package/dist/collection/engine.js +407 -0
  330. package/dist/collection/engine.js.map +1 -0
  331. package/dist/collection/format.d.ts +32 -0
  332. package/dist/collection/format.d.ts.map +1 -0
  333. package/dist/collection/format.js +70 -0
  334. package/dist/collection/format.js.map +1 -0
  335. package/dist/collection/payment-block.d.ts +24 -0
  336. package/dist/collection/payment-block.d.ts.map +1 -0
  337. package/dist/collection/payment-block.js +2 -0
  338. package/dist/collection/payment-block.js.map +1 -0
  339. package/dist/collection/policy.d.ts +53 -0
  340. package/dist/collection/policy.d.ts.map +1 -0
  341. package/dist/collection/policy.js +141 -0
  342. package/dist/collection/policy.js.map +1 -0
  343. package/dist/collection/repository.d.ts +129 -0
  344. package/dist/collection/repository.d.ts.map +1 -0
  345. package/dist/collection/repository.js +246 -0
  346. package/dist/collection/repository.js.map +1 -0
  347. package/dist/collection/subject.d.ts +66 -0
  348. package/dist/collection/subject.d.ts.map +1 -0
  349. package/dist/collection/subject.js +99 -0
  350. package/dist/collection/subject.js.map +1 -0
  351. package/dist/collection/template-catalog.d.ts +16 -0
  352. package/dist/collection/template-catalog.d.ts.map +1 -0
  353. package/dist/collection/template-catalog.js +162 -0
  354. package/dist/collection/template-catalog.js.map +1 -0
  355. package/dist/collection/template.d.ts +37 -0
  356. package/dist/collection/template.d.ts.map +1 -0
  357. package/dist/collection/template.js +73 -0
  358. package/dist/collection/template.js.map +1 -0
  359. package/dist/communication/adapters/email.d.ts +28 -0
  360. package/dist/communication/adapters/email.d.ts.map +1 -0
  361. package/dist/communication/adapters/email.js +129 -0
  362. package/dist/communication/adapters/email.js.map +1 -0
  363. package/dist/communication/adapters/sms.d.ts +95 -0
  364. package/dist/communication/adapters/sms.d.ts.map +1 -0
  365. package/dist/communication/adapters/sms.js +121 -0
  366. package/dist/communication/adapters/sms.js.map +1 -0
  367. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  368. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  369. package/dist/communication/adapters/whatsapp-language.js +36 -0
  370. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  371. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  372. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  373. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  374. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  375. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  376. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  377. package/dist/communication/adapters/whatsapp.js +210 -0
  378. package/dist/communication/adapters/whatsapp.js.map +1 -0
  379. package/dist/communication/audit.d.ts +105 -0
  380. package/dist/communication/audit.d.ts.map +1 -0
  381. package/dist/communication/audit.js +56 -0
  382. package/dist/communication/audit.js.map +1 -0
  383. package/dist/communication/capabilities.d.ts +88 -0
  384. package/dist/communication/capabilities.d.ts.map +1 -0
  385. package/dist/communication/capabilities.js +72 -0
  386. package/dist/communication/capabilities.js.map +1 -0
  387. package/dist/communication/channel.d.ts +125 -0
  388. package/dist/communication/channel.d.ts.map +1 -0
  389. package/dist/communication/channel.js +47 -0
  390. package/dist/communication/channel.js.map +1 -0
  391. package/dist/communication/claim.d.ts +368 -0
  392. package/dist/communication/claim.d.ts.map +1 -0
  393. package/dist/communication/claim.js +224 -0
  394. package/dist/communication/claim.js.map +1 -0
  395. package/dist/communication/consent.d.ts +65 -0
  396. package/dist/communication/consent.d.ts.map +1 -0
  397. package/dist/communication/consent.js +40 -0
  398. package/dist/communication/consent.js.map +1 -0
  399. package/dist/communication/context.d.ts +48 -0
  400. package/dist/communication/context.d.ts.map +1 -0
  401. package/dist/communication/context.js +41 -0
  402. package/dist/communication/context.js.map +1 -0
  403. package/dist/communication/credentials.d.ts +74 -0
  404. package/dist/communication/credentials.d.ts.map +1 -0
  405. package/dist/communication/credentials.js +115 -0
  406. package/dist/communication/credentials.js.map +1 -0
  407. package/dist/communication/dry-run-scenario.d.ts +37 -0
  408. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  409. package/dist/communication/dry-run-scenario.js +158 -0
  410. package/dist/communication/dry-run-scenario.js.map +1 -0
  411. package/dist/communication/dry-run.d.ts +40 -0
  412. package/dist/communication/dry-run.d.ts.map +1 -0
  413. package/dist/communication/dry-run.js +92 -0
  414. package/dist/communication/dry-run.js.map +1 -0
  415. package/dist/communication/engine.d.ts +153 -0
  416. package/dist/communication/engine.d.ts.map +1 -0
  417. package/dist/communication/engine.js +480 -0
  418. package/dist/communication/engine.js.map +1 -0
  419. package/dist/communication/graph.d.ts +38 -0
  420. package/dist/communication/graph.d.ts.map +1 -0
  421. package/dist/communication/graph.js +45 -0
  422. package/dist/communication/graph.js.map +1 -0
  423. package/dist/communication/idempotency.d.ts +33 -0
  424. package/dist/communication/idempotency.d.ts.map +1 -0
  425. package/dist/communication/idempotency.js +23 -0
  426. package/dist/communication/idempotency.js.map +1 -0
  427. package/dist/communication/identity.d.ts +127 -0
  428. package/dist/communication/identity.d.ts.map +1 -0
  429. package/dist/communication/identity.js +105 -0
  430. package/dist/communication/identity.js.map +1 -0
  431. package/dist/communication/index.d.ts +66 -0
  432. package/dist/communication/index.d.ts.map +1 -0
  433. package/dist/communication/index.js +42 -0
  434. package/dist/communication/index.js.map +1 -0
  435. package/dist/communication/onboarding.d.ts +223 -0
  436. package/dist/communication/onboarding.d.ts.map +1 -0
  437. package/dist/communication/onboarding.js +287 -0
  438. package/dist/communication/onboarding.js.map +1 -0
  439. package/dist/communication/policy.d.ts +99 -0
  440. package/dist/communication/policy.d.ts.map +1 -0
  441. package/dist/communication/policy.js +13 -0
  442. package/dist/communication/policy.js.map +1 -0
  443. package/dist/communication/routing.d.ts +99 -0
  444. package/dist/communication/routing.d.ts.map +1 -0
  445. package/dist/communication/routing.js +73 -0
  446. package/dist/communication/routing.js.map +1 -0
  447. package/dist/communication/sender-profile.d.ts +100 -0
  448. package/dist/communication/sender-profile.d.ts.map +1 -0
  449. package/dist/communication/sender-profile.js +123 -0
  450. package/dist/communication/sender-profile.js.map +1 -0
  451. package/dist/communication/status.d.ts +48 -0
  452. package/dist/communication/status.d.ts.map +1 -0
  453. package/dist/communication/status.js +79 -0
  454. package/dist/communication/status.js.map +1 -0
  455. package/dist/communication/stores/onboarding.d.ts +88 -0
  456. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  457. package/dist/communication/stores/onboarding.js +127 -0
  458. package/dist/communication/stores/onboarding.js.map +1 -0
  459. package/dist/communication/stores/postgres.d.ts +81 -0
  460. package/dist/communication/stores/postgres.d.ts.map +1 -0
  461. package/dist/communication/stores/postgres.js +453 -0
  462. package/dist/communication/stores/postgres.js.map +1 -0
  463. package/dist/communication/stores/routing.d.ts +169 -0
  464. package/dist/communication/stores/routing.d.ts.map +1 -0
  465. package/dist/communication/stores/routing.js +324 -0
  466. package/dist/communication/stores/routing.js.map +1 -0
  467. package/dist/communication/stores/secrets.d.ts +89 -0
  468. package/dist/communication/stores/secrets.d.ts.map +1 -0
  469. package/dist/communication/stores/secrets.js +122 -0
  470. package/dist/communication/stores/secrets.js.map +1 -0
  471. package/dist/communication/template-provider.d.ts +85 -0
  472. package/dist/communication/template-provider.d.ts.map +1 -0
  473. package/dist/communication/template-provider.js +21 -0
  474. package/dist/communication/template-provider.js.map +1 -0
  475. package/dist/communication/template.d.ts +87 -0
  476. package/dist/communication/template.d.ts.map +1 -0
  477. package/dist/communication/template.js +59 -0
  478. package/dist/communication/template.js.map +1 -0
  479. package/dist/communication/webhook-subscription.d.ts +156 -0
  480. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  481. package/dist/communication/webhook-subscription.js +252 -0
  482. package/dist/communication/webhook-subscription.js.map +1 -0
  483. package/dist/communication/webhook.d.ts +121 -0
  484. package/dist/communication/webhook.d.ts.map +1 -0
  485. package/dist/communication/webhook.js +283 -0
  486. package/dist/communication/webhook.js.map +1 -0
  487. package/dist/competence/repository.d.ts +147 -0
  488. package/dist/competence/repository.d.ts.map +1 -0
  489. package/dist/competence/repository.js +294 -0
  490. package/dist/competence/repository.js.map +1 -0
  491. package/dist/contacts/phone.d.ts +70 -0
  492. package/dist/contacts/phone.d.ts.map +1 -0
  493. package/dist/contacts/phone.js +186 -0
  494. package/dist/contacts/phone.js.map +1 -0
  495. package/dist/db/migrate.js +17 -11
  496. package/dist/db/migrate.js.map +1 -1
  497. package/dist/db/seed-catalog.d.ts +18 -0
  498. package/dist/db/seed-catalog.d.ts.map +1 -0
  499. package/dist/db/seed-catalog.js +45 -0
  500. package/dist/db/seed-catalog.js.map +1 -0
  501. package/dist/db/seed.js +16 -8
  502. package/dist/db/seed.js.map +1 -1
  503. package/dist/documents/repository.d.ts +97 -0
  504. package/dist/documents/repository.d.ts.map +1 -0
  505. package/dist/documents/repository.js +236 -0
  506. package/dist/documents/repository.js.map +1 -0
  507. package/dist/documents/requests.d.ts +73 -0
  508. package/dist/documents/requests.d.ts.map +1 -0
  509. package/dist/documents/requests.js +127 -0
  510. package/dist/documents/requests.js.map +1 -0
  511. package/dist/index.d.ts +113 -13
  512. package/dist/index.d.ts.map +1 -1
  513. package/dist/index.js +104 -8
  514. package/dist/index.js.map +1 -1
  515. package/dist/legal/company.d.ts +32 -0
  516. package/dist/legal/company.d.ts.map +1 -0
  517. package/dist/legal/company.js +33 -0
  518. package/dist/legal/company.js.map +1 -0
  519. package/dist/legal/documents.d.ts +30 -0
  520. package/dist/legal/documents.d.ts.map +1 -0
  521. package/dist/legal/documents.js +666 -0
  522. package/dist/legal/documents.js.map +1 -0
  523. package/dist/legal/index.d.ts +5 -0
  524. package/dist/legal/index.d.ts.map +1 -0
  525. package/dist/legal/index.js +4 -0
  526. package/dist/legal/index.js.map +1 -0
  527. package/dist/legal/types.d.ts +145 -0
  528. package/dist/legal/types.d.ts.map +1 -0
  529. package/dist/legal/types.js +31 -0
  530. package/dist/legal/types.js.map +1 -0
  531. package/dist/mail/auth-templates.d.ts +15 -0
  532. package/dist/mail/auth-templates.d.ts.map +1 -0
  533. package/dist/mail/auth-templates.js +26 -0
  534. package/dist/mail/auth-templates.js.map +1 -0
  535. package/dist/mail/dedup-store.d.ts +1 -24
  536. package/dist/mail/dedup-store.d.ts.map +1 -1
  537. package/dist/mail/dedup-store.js +9 -48
  538. package/dist/mail/dedup-store.js.map +1 -1
  539. package/dist/mail/index.d.ts +2 -1
  540. package/dist/mail/index.d.ts.map +1 -1
  541. package/dist/mail/index.js +13 -2
  542. package/dist/mail/index.js.map +1 -1
  543. package/dist/mail/provider.d.ts +2 -30
  544. package/dist/mail/provider.d.ts.map +1 -1
  545. package/dist/mail/provider.js +10 -246
  546. package/dist/mail/provider.js.map +1 -1
  547. package/dist/mail/resend.d.ts +2 -12
  548. package/dist/mail/resend.d.ts.map +1 -1
  549. package/dist/mail/resend.js +11 -17
  550. package/dist/mail/resend.js.map +1 -1
  551. package/dist/mail/sender-resolver.d.ts +1 -7
  552. package/dist/mail/sender-resolver.d.ts.map +1 -1
  553. package/dist/mail/sender-resolver.js +11 -10
  554. package/dist/mail/sender-resolver.js.map +1 -1
  555. package/dist/mail/template-renderer.d.ts +1 -9
  556. package/dist/mail/template-renderer.d.ts.map +1 -1
  557. package/dist/mail/template-renderer.js +10 -15
  558. package/dist/mail/template-renderer.js.map +1 -1
  559. package/dist/mail/transactional-outbound.d.ts +115 -0
  560. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  561. package/dist/mail/transactional-outbound.js +113 -0
  562. package/dist/mail/transactional-outbound.js.map +1 -0
  563. package/dist/mail/types.d.ts +2 -142
  564. package/dist/mail/types.d.ts.map +1 -1
  565. package/dist/mail/types.js +1 -33
  566. package/dist/mail/types.js.map +1 -1
  567. package/dist/portal/provisioning.d.ts +58 -0
  568. package/dist/portal/provisioning.d.ts.map +1 -0
  569. package/dist/portal/provisioning.js +139 -0
  570. package/dist/portal/provisioning.js.map +1 -0
  571. package/dist/pricing-engine/canonical.d.ts +14 -0
  572. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  573. package/dist/pricing-engine/canonical.js +39 -0
  574. package/dist/pricing-engine/canonical.js.map +1 -0
  575. package/dist/pricing-engine/errors.d.ts.map +1 -1
  576. package/dist/pricing-engine/errors.js +6 -1
  577. package/dist/pricing-engine/errors.js.map +1 -1
  578. package/dist/pricing-engine/index.d.ts +12 -2
  579. package/dist/pricing-engine/index.d.ts.map +1 -1
  580. package/dist/pricing-engine/index.js +6 -1
  581. package/dist/pricing-engine/index.js.map +1 -1
  582. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  583. package/dist/pricing-engine/pipeline.js +202 -28
  584. package/dist/pricing-engine/pipeline.js.map +1 -1
  585. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  586. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  587. package/dist/pricing-engine/shadow-adapter.js +75 -0
  588. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  589. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  590. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  591. package/dist/pricing-engine/shadow-diff.js +52 -0
  592. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  593. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  594. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  595. package/dist/pricing-engine/shadow-facade.js +82 -0
  596. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  597. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  598. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  599. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  600. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  601. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  602. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  603. package/dist/pricing-engine/shadow-metrics.js +31 -0
  604. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  605. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  606. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  607. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  608. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  609. package/dist/pricing-engine/types.d.ts +2 -0
  610. package/dist/pricing-engine/types.d.ts.map +1 -1
  611. package/dist/rbac/authorize.d.ts +12 -0
  612. package/dist/rbac/authorize.d.ts.map +1 -1
  613. package/dist/rbac/authorize.js +27 -0
  614. package/dist/rbac/authorize.js.map +1 -1
  615. package/dist/rbac/catalog.d.ts.map +1 -1
  616. package/dist/rbac/catalog.js +67 -1
  617. package/dist/rbac/catalog.js.map +1 -1
  618. package/dist/rbac/workload-provisioning.d.ts +66 -0
  619. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  620. package/dist/rbac/workload-provisioning.js +153 -0
  621. package/dist/rbac/workload-provisioning.js.map +1 -0
  622. package/dist/rbac/workload.d.ts +124 -0
  623. package/dist/rbac/workload.d.ts.map +1 -0
  624. package/dist/rbac/workload.js +184 -0
  625. package/dist/rbac/workload.js.map +1 -0
  626. package/dist/storage/checksum.d.ts +9 -0
  627. package/dist/storage/checksum.d.ts.map +1 -0
  628. package/dist/storage/checksum.js +12 -0
  629. package/dist/storage/checksum.js.map +1 -0
  630. package/dist/storage/key.d.ts +37 -0
  631. package/dist/storage/key.d.ts.map +1 -0
  632. package/dist/storage/key.js +67 -0
  633. package/dist/storage/key.js.map +1 -0
  634. package/dist/storage/local.d.ts +40 -0
  635. package/dist/storage/local.d.ts.map +1 -0
  636. package/dist/storage/local.js +96 -0
  637. package/dist/storage/local.js.map +1 -0
  638. package/dist/storage/r2.d.ts +43 -0
  639. package/dist/storage/r2.d.ts.map +1 -0
  640. package/dist/storage/r2.js +177 -0
  641. package/dist/storage/r2.js.map +1 -0
  642. package/dist/storage/registry.d.ts +23 -0
  643. package/dist/storage/registry.d.ts.map +1 -0
  644. package/dist/storage/registry.js +37 -0
  645. package/dist/storage/registry.js.map +1 -0
  646. package/dist/storage/types.d.ts +67 -0
  647. package/dist/storage/types.d.ts.map +1 -0
  648. package/dist/storage/types.js +45 -0
  649. package/dist/storage/types.js.map +1 -0
  650. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  651. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  652. package/dist/subscription-billing/provider/asaas.js +32 -7
  653. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  654. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  655. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  656. package/dist/subscription-billing/provider/disabled.js +8 -0
  657. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  658. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  659. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  660. package/dist/subscription-billing/provider/registry.js +17 -0
  661. package/dist/subscription-billing/provider/registry.js.map +1 -1
  662. package/dist/subscription-billing/service.d.ts +17 -1
  663. package/dist/subscription-billing/service.d.ts.map +1 -1
  664. package/dist/subscription-billing/service.js +57 -8
  665. package/dist/subscription-billing/service.js.map +1 -1
  666. package/dist/subscription-billing/types.d.ts +13 -0
  667. package/dist/subscription-billing/types.d.ts.map +1 -1
  668. package/dist/subscription-billing/types.js.map +1 -1
  669. package/dist/tenancy/provisioning.d.ts.map +1 -1
  670. package/dist/tenancy/provisioning.js +32 -8
  671. package/dist/tenancy/provisioning.js.map +1 -1
  672. package/dist/users/repository.d.ts +38 -0
  673. package/dist/users/repository.d.ts.map +1 -1
  674. package/dist/users/repository.js +118 -3
  675. package/dist/users/repository.js.map +1 -1
  676. package/dist/vault/repository.d.ts +67 -0
  677. package/dist/vault/repository.d.ts.map +1 -1
  678. package/dist/vault/repository.js +78 -0
  679. package/dist/vault/repository.js.map +1 -1
  680. package/package.json +19 -4
  681. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  682. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  683. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  684. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  685. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  686. package/src/db/migrations/0028_collection_engine.sql +94 -0
  687. package/src/db/migrations/0029_payment_rail.sql +107 -0
  688. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  689. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  690. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  691. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  692. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  693. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  694. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  695. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  696. package/src/db/migrations/0038_notification_channels.sql +175 -0
  697. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  698. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  699. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  700. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  701. package/src/db/migrations/0043_workload_identity.sql +105 -0
  702. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  703. package/dist/cjs/mail/resend-client.js +0 -103
  704. package/dist/cjs/mail/resend-client.js.map +0 -1
  705. package/dist/mail/resend-client.d.ts +0 -16
  706. package/dist/mail/resend-client.d.ts.map +0 -1
  707. package/dist/mail/resend-client.js +0 -100
  708. package/dist/mail/resend-client.js.map +0 -1
@@ -8,6 +8,10 @@ import { AppError } from '@baruk/shared';
8
8
  * IMPORTANTE: nenhum outro arquivo do Core importa este adapter diretamente — o
9
9
  * acesso é sempre via `resolveBillingProvider('asaas', config)`. Assim, trocar
10
10
  * Asaas por Stripe é trocar a string registrada, sem tocar em regra de negócio.
11
+ *
12
+ * A credencial define a CONTA que recebe o dinheiro. Quem escolhe a credencial
13
+ * é `provider-account.ts`, a partir do tenant — este adapter não sabe, e não
14
+ * deve saber, de quem é a conta que está usando.
11
15
  */
12
16
  const BILLING_TYPE = {
13
17
  pix: 'PIX',
@@ -24,12 +28,14 @@ export class AsaasProvider {
24
28
  key = 'asaas';
25
29
  apiKey;
26
30
  baseUrl;
31
+ webhookSecret;
27
32
  fetchImpl;
28
33
  constructor(config) {
29
34
  if (!config.apiKey)
30
35
  throw new AsaasError('apiKey ausente (configure no Vault).', 500);
31
36
  this.apiKey = config.apiKey;
32
37
  this.baseUrl = (config.baseUrl ?? 'https://api.asaas.com/v3').replace(/\/$/, '');
38
+ this.webhookSecret = config.webhookSecret;
33
39
  this.fetchImpl = config.fetchImpl ?? fetch;
34
40
  }
35
41
  async call(path, method, body) {
@@ -44,29 +50,123 @@ export class AsaasProvider {
44
50
  }
45
51
  return (await res.json());
46
52
  }
53
+ /**
54
+ * Provisiona (ou reencontra) o pagador na conta do escritório.
55
+ *
56
+ * `externalReference` é o id interno do cliente, e a busca por ele vem ANTES
57
+ * do POST: sem isso, cada emissão criaria um cadastro novo na conta do
58
+ * escritório, e o histórico do cliente lá dentro viraria uma lista de
59
+ * homônimos. O mapa local (`payment_customer`) evita a maioria das chamadas;
60
+ * esta busca é a rede de segurança para quando o mapa e o gateway divergirem.
61
+ */
62
+ async ensureCustomer(req) {
63
+ const found = await this.call(`/customers?externalReference=${encodeURIComponent(req.referenceId)}&limit=1`, 'GET');
64
+ const existing = found.data?.[0]?.id;
65
+ if (existing) {
66
+ // ENCONTRAR NÃO BASTA. Este era o coração da dívida R: o pagador existia
67
+ // com dados velhos — tipicamente sem CPF/CNPJ — e devolvê-lo calado fazia a
68
+ // emissão ser recusada para sempre, mesmo depois de o escritório corrigir
69
+ // a ficha no Office.
70
+ //
71
+ // Importa que a correção esteja AQUI, e não só no cache: a transação da
72
+ // emissão faz rollback quando o gateway recusa, então o mapa local não
73
+ // persiste e a próxima tentativa cai justamente neste caminho. Se ele
74
+ // devolvesse sem reconciliar, o sistema gravaria uma impressão digital
75
+ // afirmando uma sincronização que nunca houve.
76
+ await this.updateCustomer(existing, req);
77
+ return { externalId: existing, action: 'reconciled' };
78
+ }
79
+ const created = await this.call('/customers', 'POST', customerPayload(req));
80
+ return { externalId: created.id, action: 'created' };
81
+ }
82
+ /**
83
+ * Atualiza o pagador existente. Mesmo payload da criação, mesmo endpoint com
84
+ * id — no Asaas, `POST /customers/{id}` é a atualização.
85
+ *
86
+ * Sem `externalReference` no corpo: ele é a âncora que liga o pagador ao
87
+ * cliente do Office, e reescrevê-lo a cada sincronização abriria a chance de
88
+ * apontar para outro cliente por um erro de chamada.
89
+ */
90
+ async updateCustomer(externalId, req) {
91
+ const { externalReference: _ignored, ...payload } = customerPayload(req);
92
+ await this.call(`/customers/${encodeURIComponent(externalId)}`, 'POST', payload);
93
+ }
94
+ async describeAccount() {
95
+ const me = await this.call('/myAccount', 'GET');
96
+ const documentNumber = onlyDigits(me.cpfCnpj) || null;
97
+ return {
98
+ // Sem `walletId`/`id`, cai no documento — é o que identifica o TITULAR do
99
+ // dinheiro, que é o que o guard cross-tenant precisa comparar. Sem este
100
+ // fallback a referência fica nula, o índice parcial não pega nada, e duas
101
+ // organizações conseguiriam conectar a mesma conta.
102
+ reference: me.walletId ?? me.id ?? (documentNumber ? `doc:${documentNumber}` : null),
103
+ name: me.companyName ?? me.name ?? null,
104
+ documentNumber,
105
+ };
106
+ }
47
107
  async createCharge(req) {
48
- // Asaas exige um customer; aqui assumimos que o id do cliente Asaas veio no
49
- // metadata (provisionamento fora do escopo). O mapeamento demonstra o contrato.
50
- const payload = {
51
- billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
108
+ if (!req.customerExternalId) {
109
+ throw new AsaasError('customer não provisionado chame ensureCustomer antes.', 500);
110
+ }
111
+ const method = req.method;
112
+ const res = await this.call('/payments', 'POST', {
113
+ customer: req.customerExternalId,
114
+ billingType: BILLING_TYPE[method] ?? 'UNDEFINED',
52
115
  value: req.amount,
53
116
  dueDate: req.dueDate,
54
117
  description: req.description ?? undefined,
55
118
  externalReference: req.referenceId,
56
- };
57
- const res = await this.call('/payments', 'POST', payload);
119
+ });
58
120
  return {
59
121
  externalId: res.id,
60
122
  status: mapAsaasStatus(res.status),
61
- payment: { boletoUrl: res.bankSlipUrl, invoiceUrl: res.invoiceUrl },
123
+ payment: await this.instructionsFor(res, method),
62
124
  raw: res,
63
125
  };
64
126
  }
127
+ async fetchPaymentInstructions(externalId, method) {
128
+ const res = await this.call(`/payments/${externalId}`, 'GET');
129
+ return this.instructionsFor(res, method);
130
+ }
131
+ /**
132
+ * O QR Code e a linha digitável vivem em endpoints próprios.
133
+ *
134
+ * Eles são buscados no provider, nunca gerados aqui: um BR Code montado por
135
+ * nós apontaria para uma chave PIX que o gateway não conhece, e o pagamento
136
+ * cairia fora da cobrança — dinheiro que entra sem baixar nada.
137
+ *
138
+ * A falha é tolerada de propósito. Se o QR não vier, o cliente ainda tem a
139
+ * página de pagamento; derrubar a emissão inteira por causa de um extra seria
140
+ * trocar uma cobrança incompleta por nenhuma cobrança.
141
+ */
142
+ async instructionsFor(res, method) {
143
+ const out = {
144
+ invoiceUrl: res.invoiceUrl,
145
+ boletoUrl: res.bankSlipUrl,
146
+ };
147
+ if (method === 'pix') {
148
+ const qr = await this.call(`/payments/${res.id}/pixQrCode`, 'GET').catch(() => null);
149
+ if (qr?.payload)
150
+ out.pixPayload = qr.payload;
151
+ if (qr?.encodedImage)
152
+ out.pixQrCodeImage = `data:image/png;base64,${qr.encodedImage}`;
153
+ }
154
+ if (method === 'boleto') {
155
+ const slip = await this.call(`/payments/${res.id}/identificationField`, 'GET').catch(() => null);
156
+ if (slip?.identificationField)
157
+ out.identificationField = slip.identificationField;
158
+ }
159
+ return out;
160
+ }
65
161
  async cancelCharge(externalId) {
66
162
  await this.call(`/payments/${externalId}`, 'DELETE');
67
163
  }
68
164
  async createSubscription(req) {
69
- const cycle = { monthly: 'MONTHLY', quarterly: 'QUARTERLY', yearly: 'YEARLY' };
165
+ const cycle = {
166
+ monthly: 'MONTHLY',
167
+ quarterly: 'QUARTERLY',
168
+ yearly: 'YEARLY',
169
+ };
70
170
  const res = await this.call('/subscriptions', 'POST', {
71
171
  billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
72
172
  value: req.amount,
@@ -85,24 +185,104 @@ export class AsaasProvider {
85
185
  async cancelSubscription(externalId) {
86
186
  await this.call(`/subscriptions/${externalId}`, 'DELETE');
87
187
  }
188
+ /**
189
+ * Autenticação do webhook.
190
+ *
191
+ * O Asaas envia o token configurado na fila em `asaas-access-token`. A
192
+ * comparação é de tempo constante — um `===` sobre segredo vaza, byte a byte,
193
+ * quanto do prefixo está correto para quem consegue medir o tempo da resposta.
194
+ *
195
+ * Sem segredo configurado, reprova. Fail-closed é o único default aceitável
196
+ * numa rota pública que dá baixa em dinheiro.
197
+ */
198
+ verifyWebhook(_payload, headers = {}) {
199
+ if (!this.webhookSecret)
200
+ return false;
201
+ const sent = headers['asaas-access-token'] ?? headers['Asaas-Access-Token'] ?? '';
202
+ return timingSafeEqual(sent, this.webhookSecret);
203
+ }
88
204
  parseWebhook(payload) {
89
205
  const p = payload;
90
- const externalId = p.payment?.id ?? null;
206
+ const base = {
207
+ eventId: p.id ?? null,
208
+ externalId: p.payment?.id ?? null,
209
+ raw: payload,
210
+ };
91
211
  switch (p.event) {
212
+ // RECEIVED = dinheiro creditado. CONFIRMED = autorizado, ainda não
213
+ // liquidado (cartão). Os dois viram baixa: para o escritório, a dívida
214
+ // deixou de ser dele nos dois casos, e esperar a liquidação faria a régua
215
+ // seguir cobrando alguém que já pagou.
216
+ // RECEIVED_IN_CASH é a baixa que o escritório dá à mão no painel quando o
217
+ // cliente pagou fora do gateway. Sem este caso o evento caía em `unknown`
218
+ // e a régua seguia cobrando quem já tinha pagado — dinheiro que entrou e
219
+ // que o sistema não enxergava.
92
220
  case 'PAYMENT_RECEIVED':
93
221
  case 'PAYMENT_CONFIRMED':
94
- return { type: 'charge.paid', externalId, paidAt: p.payment?.paymentDate ?? null, raw: payload };
222
+ case 'PAYMENT_RECEIVED_IN_CASH':
223
+ return {
224
+ ...base,
225
+ type: 'charge.paid',
226
+ paidAt: p.payment?.paymentDate ?? null,
227
+ paidAmount: p.payment?.value ?? null,
228
+ };
229
+ // O par do anterior. Reconhecer a baixa manual sem reconhecer o desfazer
230
+ // trocaria um defeito por outro: a cobrança ficaria paga para sempre por
231
+ // causa de um clique que o próprio escritório revogou.
232
+ case 'PAYMENT_RECEIVED_IN_CASH_UNDONE':
233
+ return { ...base, type: 'charge.settlement_undone' };
234
+ case 'PAYMENT_CREATED':
235
+ return { ...base, type: 'charge.created' };
95
236
  case 'PAYMENT_OVERDUE':
96
- return { type: 'charge.overdue', externalId, raw: payload };
237
+ return { ...base, type: 'charge.overdue' };
97
238
  case 'PAYMENT_DELETED':
98
- return { type: 'charge.canceled', externalId, raw: payload };
239
+ return { ...base, type: 'charge.canceled' };
99
240
  case 'PAYMENT_REFUNDED':
100
- return { type: 'charge.refunded', externalId, raw: payload };
241
+ case 'PAYMENT_REVERSED':
242
+ return { ...base, type: 'charge.refunded' };
243
+ case 'PAYMENT_CHARGEBACK_REQUESTED':
244
+ case 'PAYMENT_CHARGEBACK_DISPUTE':
245
+ return { ...base, type: 'charge.chargeback' };
101
246
  default:
102
- return { type: 'unknown', externalId, raw: payload };
247
+ return { ...base, type: 'unknown' };
103
248
  }
104
249
  }
105
250
  }
251
+ /**
252
+ * Campos cadastrais que o Asaas precisa do pagador.
253
+ *
254
+ * Uma função só, usada na criação E na atualização: se as duas montassem o
255
+ * payload por conta própria, um campo adicionado numa delas passaria a existir
256
+ * só nos clientes novos — e a diferença apareceria meses depois, como "esse
257
+ * cliente antigo não recebe e-mail do boleto".
258
+ *
259
+ * `notificationDisabled` é reafirmado em toda sincronização de propósito: quem
260
+ * fala com o cliente é o Office. Se alguém ligar a notificação pelo painel do
261
+ * gateway, o cliente passaria a receber DUAS cobranças pelo mesmo valor.
262
+ */
263
+ function customerPayload(req) {
264
+ return {
265
+ name: req.name,
266
+ cpfCnpj: onlyDigits(req.documentNumber),
267
+ email: req.email ?? undefined,
268
+ mobilePhone: onlyDigits(req.phone) || undefined,
269
+ externalReference: req.referenceId,
270
+ notificationDisabled: true,
271
+ };
272
+ }
273
+ function onlyDigits(v) {
274
+ return (v ?? '').replace(/\D/g, '');
275
+ }
276
+ /** Comparação de tempo constante, sem depender de `node:crypto` no Core. */
277
+ function timingSafeEqual(a, b) {
278
+ // O XOR roda sobre o comprimento do segredo para que a duração não revele o
279
+ // tamanho do que foi enviado; a diferença de comprimento entra no acumulador.
280
+ let diff = a.length ^ b.length;
281
+ for (let i = 0; i < b.length; i++) {
282
+ diff |= (a.charCodeAt(i) || 0) ^ b.charCodeAt(i);
283
+ }
284
+ return diff === 0;
285
+ }
106
286
  function mapAsaasStatus(status) {
107
287
  switch (status) {
108
288
  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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"}
@@ -18,7 +18,7 @@ export class ManualProvider {
18
18
  // No-op — cancelamento é apenas mudança de status interno.
19
19
  }
20
20
  parseWebhook() {
21
- return { type: 'unknown', externalId: null };
21
+ return { type: 'unknown', eventId: null, externalId: null };
22
22
  }
23
23
  }
24
24
  //# sourceMappingURL=manual.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../src/billing/provider/manual.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,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"}
1
+ {"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../src/billing/provider/manual.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,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"}
@@ -19,20 +19,56 @@ export interface ChargeRequest {
19
19
  email?: string | null;
20
20
  phone?: string | null;
21
21
  };
22
+ /** Id do customer JÁ provisionado no gateway (ver `ensureCustomer`). */
23
+ customerExternalId?: string | null;
24
+ }
25
+ /**
26
+ * O que o cliente precisa para pagar.
27
+ *
28
+ * Nada aqui é segredo — é justamente o material que vai no e-mail. Mas nada
29
+ * aqui é opcional por acaso: cada gateway entrega um subconjunto diferente, e o
30
+ * template tem de saber renderizar o que veio, não o que gostaríamos que viesse.
31
+ */
32
+ export interface PaymentInstructions {
33
+ /** Página de pagamento hospedada pelo gateway — o destino do CTA. */
34
+ invoiceUrl?: string;
35
+ /** PIX copia-e-cola (BR Code). */
36
+ pixPayload?: string;
37
+ /** QR Code do PIX em base64, já como data URI ou payload cru do gateway. */
38
+ pixQrCodeImage?: string;
39
+ boletoUrl?: string;
40
+ /** Linha digitável do boleto. */
41
+ identificationField?: string;
22
42
  }
23
43
  export interface ChargeResult {
24
44
  /** Id da cobrança no gateway (nulo para provider 'manual'). */
25
45
  externalId: string | null;
26
- status: 'pending' | 'sent' | 'paid' | 'overdue' | 'canceled' | 'refunded';
46
+ status: 'pending' | 'sent' | 'paid' | 'overdue' | 'canceled' | 'refunded' | 'reversed';
27
47
  /** Dados não sensíveis para o cliente pagar (PIX copia-e-cola, url do boleto…). */
28
- payment?: {
29
- pixPayload?: string;
30
- pixQrCodeImage?: string;
31
- boletoUrl?: string;
32
- invoiceUrl?: string;
33
- };
48
+ payment?: PaymentInstructions;
34
49
  raw?: unknown;
35
50
  }
51
+ /** Dados do pagador, para provisionar/reaproveitar o customer do gateway. */
52
+ /**
53
+ * O que aconteceu com o pagador no gateway.
54
+ *
55
+ * A forma rica é opcional — devolver só a string continua válido — porque um
56
+ * adapter que não saiba distinguir não deve ser obrigado a inventar. Quem sabe,
57
+ * informa, e a trilha deixa de registrar "criado" para um pagador que já existia
58
+ * e acabou de ser corrigido.
59
+ */
60
+ export interface EnsureCustomerResult {
61
+ externalId: string;
62
+ action: 'created' | 'reconciled';
63
+ }
64
+ export interface CustomerRequest {
65
+ name: string;
66
+ documentNumber?: string | null;
67
+ email?: string | null;
68
+ phone?: string | null;
69
+ /** Id interno do cliente — vira `externalReference` do lado do gateway. */
70
+ referenceId: string;
71
+ }
36
72
  export interface SubscriptionRequest {
37
73
  referenceId: string;
38
74
  amount: number;
@@ -50,20 +86,91 @@ export interface SubscriptionResult {
50
86
  }
51
87
  /** Evento normalizado a partir de um webhook do gateway. */
52
88
  export interface WebhookEvent {
53
- type: 'charge.paid' | 'charge.overdue' | 'charge.canceled' | 'charge.refunded' | 'unknown';
89
+ type: 'charge.created' | 'charge.paid' | 'charge.overdue' | 'charge.canceled' | 'charge.refunded' | 'charge.chargeback'
90
+ /**
91
+ * A baixa registrada foi DESFEITA na origem — o caso do recebimento em
92
+ * dinheiro informado à mão e depois cancelado no painel.
93
+ *
94
+ * Não é estorno: nesse caso o dinheiro nunca chegou. Manter os dois tipos
95
+ * separados importa porque a mensagem que o escritório lê é diferente, e
96
+ * chamar de "estornado" o que nunca foi pago seria mentir na tela.
97
+ */
98
+ | 'charge.settlement_undone' | 'unknown';
99
+ /**
100
+ * Id do EVENTO no gateway — a chave de deduplicação.
101
+ *
102
+ * Não confundir com `externalId`, que é o id da cobrança: o gateway reenvia o
103
+ * mesmo evento até receber 200, e reenvia eventos DIFERENTES sobre a mesma
104
+ * cobrança. Deduplicar pela cobrança perderia o segundo evento legítimo.
105
+ */
106
+ eventId: string | null;
54
107
  externalId: string | null;
55
108
  paidAt?: string | null;
109
+ /** Valor efetivamente creditado, quando o gateway informa. */
110
+ paidAmount?: number | null;
56
111
  raw?: unknown;
57
112
  }
113
+ /**
114
+ * Identidade da conta no gateway, para provar de quem é o dinheiro.
115
+ *
116
+ * Só campos que o titular da conta já conhece — nome, documento, id. Nenhum
117
+ * deles é segredo; o segredo é a chave que os revelou, e ela não sai daqui.
118
+ */
119
+ export interface ProviderAccountIdentity {
120
+ /** Id da conta no gateway, quando exposto. Vira `account_reference`. */
121
+ reference: string | null;
122
+ name: string | null;
123
+ /** CPF/CNPJ apenas em dígitos. Usado para comparar titularidade. */
124
+ documentNumber: string | null;
125
+ }
58
126
  export interface BillingProvider {
59
127
  /** Identificador estável do adapter — casa com `charge.provider`. */
60
128
  readonly key: string;
129
+ /**
130
+ * Diz de quem é a conta que esta credencial abre.
131
+ *
132
+ * Existe para uma pergunta só: a chave que estão conectando pertence mesmo ao
133
+ * escritório certo? Confiar no nome da variável é como cinco chaves chamadas
134
+ * `ASAAS_<produto>_API_KEY` acabaram todas na mesma conta.
135
+ */
136
+ describeAccount?(): Promise<ProviderAccountIdentity>;
137
+ /**
138
+ * Garante um customer no gateway e devolve o id dele.
139
+ *
140
+ * Gateway nenhum aceita cobrança sem pagador. Sem este passo, `createCharge`
141
+ * falha na primeira chamada real — foi exatamente o que aconteceu com a
142
+ * primeira versão deste adapter, que montava o payload sem `customer`.
143
+ */
144
+ ensureCustomer?(req: CustomerRequest): Promise<string | EnsureCustomerResult>;
145
+ /**
146
+ * Atualiza um pagador JÁ existente no gateway com os dados atuais do Office.
147
+ *
148
+ * Separado de `ensureCustomer` porque as duas respondem perguntas diferentes:
149
+ * aquela garante que o pagador EXISTE, esta garante que ele está CORRETO. Sem
150
+ * a segunda, corrigir o CPF/CNPJ no Office não chega ao provedor, e o cliente
151
+ * corrigido no lugar certo continua impossível de cobrar.
152
+ *
153
+ * Opcional como o resto do contrato: um provider que não permita atualização
154
+ * simplesmente não a implementa, e a reconciliação é reportada como
155
+ * indisponível em vez de fingida.
156
+ */
157
+ updateCustomer?(externalId: string, req: CustomerRequest): Promise<void>;
61
158
  createCharge(req: ChargeRequest): Promise<ChargeResult>;
159
+ /** Busca as instruções de pagamento de uma cobrança já criada. */
160
+ fetchPaymentInstructions?(externalId: string, method: BillingMethod): Promise<PaymentInstructions>;
62
161
  cancelCharge(externalId: string): Promise<void>;
63
162
  createSubscription?(req: SubscriptionRequest): Promise<SubscriptionResult>;
64
163
  cancelSubscription?(externalId: string): Promise<void>;
65
164
  /** Traduz o corpo bruto de um webhook para o evento normalizado. */
66
165
  parseWebhook(payload: unknown, headers?: Record<string, string>): WebhookEvent;
166
+ /**
167
+ * Autentica o webhook. `false` reprova a requisição.
168
+ *
169
+ * Separado de `parseWebhook` de propósito: parsear é barato e não decide
170
+ * nada; autenticar é a fronteira de segurança, e uma rota pública que só
171
+ * parseia é uma rota que aceita evento forjado.
172
+ */
173
+ verifyWebhook?(payload: unknown, headers?: Record<string, string>): boolean;
67
174
  }
68
175
  /** Config passada ao construir um adapter (segredos vêm do Vault, nunca hardcoded). */
69
176
  export interface ProviderConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { Tx } from '../db/client.js';
2
+ import type { Keyring } from '../vault/crypto.js';
3
+ import type { BillingProvider } from './provider/types.js';
4
+ /**
5
+ * A conta que recebe o dinheiro.
6
+ *
7
+ * Esta é a peça que o comentário do M1 em `routes/billing.ts` apontava como
8
+ * faltante, e é a fronteira financeira do produto: **o dinheiro de uma cobrança
9
+ * pertence ao escritório que cobrou**, não à Baruk. A conta sai de
10
+ * `payment_provider_account`, que é por tenant; a credencial sai do Vault, por
11
+ * referência. Em nenhum ponto o Core carrega uma credencial de plataforma para
12
+ * emitir cobrança de tenant — se a conta não existe, não há emissão.
13
+ *
14
+ * Isso é diferente do Billing SaaS (`subscription-billing/`), onde a credencial
15
+ * é da plataforma porque quem cobra é a Baruk. Os dois caminhos coexistem e não
16
+ * se cruzam: um resolve credencial daqui, o outro da config do serviço.
17
+ */
18
+ export interface ProviderAccount {
19
+ id: string;
20
+ provider: string;
21
+ accountReference: string | null;
22
+ environment: 'sandbox' | 'live';
23
+ /** A conta que o escritório OPERA. Exatamente uma por (tenant, provider). */
24
+ isPrimary: boolean;
25
+ capabilities: string[];
26
+ credentialRef: string | null;
27
+ webhookCredentialRef: string | null;
28
+ status: string;
29
+ }
30
+ /** Conta ativa do tenant. `null` quando o escritório ainda não conectou nenhuma. */
31
+ /**
32
+ * A conta pela qual o escritório OPERA.
33
+ *
34
+ * Antes era "a primeira conta ativa por data de criação". Isso funcionava
35
+ * enquanto só podia existir uma; com sandbox e produção coexistindo, viraria a
36
+ * pior forma de escolher para onde vai o dinheiro — implícita e dependente de
37
+ * ordem de inserção.
38
+ *
39
+ * Agora a escolha é uma MARCA explícita, e o banco garante que só há uma:
40
+ * `payment_provider_account_primary_uq`. Sem `LIMIT`, de propósito — se algum
41
+ * dia houvesse duas, o certo é o erro aparecer, não o sistema escolher sozinho.
42
+ */
43
+ export declare function getActiveProviderAccount(tx: Tx): Promise<ProviderAccount | null>;
44
+ /** Todas as contas vivas do escritório — o laboratório e a operação. */
45
+ export declare function listProviderAccounts(tx: Tx): Promise<ProviderAccount[]>;
46
+ /**
47
+ * Conta ativa de um AMBIENTE específico.
48
+ *
49
+ * Existe para quem sabe o que quer — um ensaio pede `sandbox` mesmo que a
50
+ * operação já esteja em produção. Nunca cai em outro ambiente por falta do
51
+ * pedido: sem conta naquele ambiente, devolve nulo.
52
+ */
53
+ export declare function getProviderAccountByEnvironment(tx: Tx, environment: 'sandbox' | 'live'): Promise<ProviderAccount | null>;
54
+ /**
55
+ * Promove uma conta a operacional — o ato de "entrar em produção".
56
+ *
57
+ * Explícito e reversível, em vez de efeito colateral de revogar o laboratório.
58
+ * A despromoção da anterior acontece na MESMA transação: entre um UPDATE e o
59
+ * outro existiria um instante com duas contas operacionais, e é justamente
60
+ * nesse instante que uma emissão escolheria errado.
61
+ */
62
+ export declare function setPrimaryProviderAccount(tx: Tx, id: string): Promise<ProviderAccount>;
63
+ /** Conta por id — usada pelo webhook, que descobre o tenant pela URL. */
64
+ export declare function getProviderAccountById(tx: Tx, id: string): Promise<ProviderAccount | null>;
65
+ /**
66
+ * Base do gateway para um par (provider, ambiente).
67
+ *
68
+ * Exportada porque a CONEXÃO da conta também precisa dela, e uma segunda cópia
69
+ * divergiria: foi assim que uma chave de sandbox chegou a ser validada contra
70
+ * produção — o adapter caía no default `live` e devolvia 401 com a credencial
71
+ * correta na mão.
72
+ */
73
+ export declare function providerBaseUrl(provider: string, environment: string): string | undefined;
74
+ export interface ResolvedProvider {
75
+ account: ProviderAccount;
76
+ provider: BillingProvider;
77
+ }
78
+ /**
79
+ * Monta o adapter já apontado para a conta do tenant.
80
+ *
81
+ * `revealSecret` é a única forma de a credencial sair do Vault, e ela sai
82
+ * direto para dentro do adapter — não é devolvida, logada nem guardada em
83
+ * variável de módulo.
84
+ */
85
+ export declare function resolveProviderForTenant(tx: Tx, keyring: Keyring, tenantId: string, opts?: {
86
+ account?: ProviderAccount;
87
+ fetchImpl?: typeof fetch;
88
+ }): Promise<ResolvedProvider | null>;
89
+ //# sourceMappingURL=provider-account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-account.d.ts","sourceRoot":"","sources":["../../src/billing/provider-account.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC;IAChC,6EAA6E;IAC7E,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,MAAM,EAAE,MAAM,CAAC;CAChB;AA4BD,oFAAoF;AACpF;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQtF;AAED,wEAAwE;AACxE,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAS7E;AAED;;;;;;GAMG;AACH,wBAAsB,+BAA+B,CACnD,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,SAAS,GAAG,MAAM,GAC9B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAkB5F;AAED,yEAAyE;AACzE,wBAAsB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAOhG;AAgBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzF;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,eAAe,CAAC;IACzB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,eAAe,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACjE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CA8BlC"}