@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,458 @@
1
+ "use strict";
2
+ /**
3
+ * Reserva de envio e trilha, sobre PostgreSQL.
4
+ *
5
+ * O CONTRATO (`claim.ts`, `audit.ts`) é agnóstico de armazenamento. Esta é uma
6
+ * implementação — a que qualquer produto sobre o schema do Baruk usa —, e ela
7
+ * mora ao lado do contrato em vez de dentro do produto porque a atomicidade da
8
+ * reserva é propriedade do MOTOR: um produto que a reimplementasse por conta
9
+ * própria reintroduziria a janela que ela existe para fechar, e o defeito
10
+ * apareceria só sob concorrência real.
11
+ *
12
+ * **Cada operação abre a própria transação, curta, e commita.**
13
+ *
14
+ * Não é detalhe. A régua de cobrança roda o ciclo inteiro dentro de uma
15
+ * transação longa; se a reserva vivesse nela, ela só ficaria visível para os
16
+ * outros workers no COMMIT — ou seja, depois de todos os envios. Um segundo
17
+ * worker ficaria bloqueado no lock da linha durante o ciclo inteiro do primeiro,
18
+ * e um `statement_timeout` transformaria a proteção em falha de cobrança.
19
+ *
20
+ * Commitar a reserva de imediato tem a consequência certa também no caminho
21
+ * infeliz: se a transação da régua fizer rollback DEPOIS de a mensagem ter
22
+ * saído, a reserva permanece `sent` — porque a mensagem realmente saiu, e
23
+ * ressuscitar a chave junto com o rollback mandaria a cobrança de novo.
24
+ */
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.createPostgresDispatchClaimStore = createPostgresDispatchClaimStore;
27
+ exports.createPostgresAuditSink = createPostgresAuditSink;
28
+ exports.listCommunicationTrail = listCommunicationTrail;
29
+ const node_crypto_1 = require("node:crypto");
30
+ const context_js_1 = require("../../db/context.js");
31
+ const claim_js_1 = require("../claim.js");
32
+ /** Truncagem única para tudo que é texto livre vindo de provider. */
33
+ const MAX_DETAIL = 300;
34
+ const trim = (v) => v === null || v === undefined ? null : v.slice(0, MAX_DETAIL);
35
+ /**
36
+ * Store de reserva do tenant.
37
+ *
38
+ * Recebe o `Db` (pool), e não uma `Tx`, exatamente para poder abrir transação
39
+ * própria. Um store que recebesse `Tx` herdaria o tempo de vida da transação de
40
+ * quem chama — que é o defeito descrito no cabeçalho.
41
+ */
42
+ function createPostgresDispatchClaimStore(db, tenantId, options = {}) {
43
+ const ttlSeconds = Math.max(1, Math.round((options.ttlMs ?? claim_js_1.DEFAULT_CLAIM_TTL_MS) / 1000));
44
+ /**
45
+ * Grava um evento de ciclo de vida na transação que estiver aberta.
46
+ *
47
+ * Recebe a `Tx` de quem chama — sempre a mesma transação curta da reserva.
48
+ * É isso, e só isso, que dá a garantia que a certificação exigiu: `sent` e
49
+ * `dispatch_sent` caem ou sobrevivem juntos, porque são uma escrita só.
50
+ */
51
+ const writeLifecycle = async (tx, ctx, event) => {
52
+ await tx `
53
+ INSERT INTO communication_event (
54
+ id, tenant_id, product, brand, kind, channel, event_type, subject_ref,
55
+ recipient_ref, idempotency_key, provider_ref, skip_reason, status,
56
+ code, detail, attempt
57
+ ) VALUES (
58
+ ${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${ctx.product}, ${ctx.brand},
59
+ ${event.kind}, ${ctx.channel}, ${ctx.eventType}, ${ctx.subjectRef},
60
+ ${ctx.recipientRef}, ${ctx.idempotencyKey}, ${event.providerRef ?? null},
61
+ ${event.skipReason ?? null}, ${event.status ?? null},
62
+ ${trim(event.code)}, ${trim(event.detail)}, ${ctx.attempt}
63
+ )
64
+ `;
65
+ };
66
+ /**
67
+ * Recupera o envelope da trilha a partir da própria linha de reserva.
68
+ *
69
+ * `settle` recebe só o handle; produto, marca, canal e destinatário vivem na
70
+ * linha. Ler dali, na mesma transação, evita ter de carregá-los no handle e
71
+ * evita que o motor possa passar um envelope divergente do que foi reservado —
72
+ * a trilha descreve o que o banco tem, não o que o chamador lembra.
73
+ */
74
+ const envelopeFor = async (tx, claimId) => {
75
+ const [row] = await tx `
76
+ SELECT product, brand, channel, event_type, subject_ref, recipient_ref,
77
+ idempotency_key, attempts
78
+ FROM communication_dispatch
79
+ WHERE id = ${claimId}
80
+ LIMIT 1
81
+ `;
82
+ if (!row)
83
+ return null;
84
+ return {
85
+ product: row.product,
86
+ brand: row.brand,
87
+ channel: row.channel,
88
+ eventType: row.event_type,
89
+ subjectRef: row.subject_ref,
90
+ recipientRef: row.recipient_ref,
91
+ idempotencyKey: row.idempotency_key,
92
+ attempt: row.attempts,
93
+ };
94
+ };
95
+ return {
96
+ async claim(req) {
97
+ if (req.ctx.tenantId !== tenantId) {
98
+ // O store é de UM tenant. Um pedido de outro contexto não é "não
99
+ // autorizado": é defeito de integração, e devolver `in_flight` o
100
+ // esconderia atrás de um motivo plausível.
101
+ throw new Error('claim pedido para tenant diferente do store');
102
+ }
103
+ return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
104
+ /*
105
+ * A operação inteira em UMA instrução.
106
+ *
107
+ * `INSERT ... ON CONFLICT DO UPDATE ... WHERE` é atômico por
108
+ * construção: o segundo worker a chegar bloqueia no lock da linha em
109
+ * conflito até o primeiro commitar, e só então reavalia o `WHERE`. Se o
110
+ * primeiro deixou a linha `in_flight` dentro do prazo, o `WHERE` do
111
+ * segundo é falso, o UPDATE não acontece e o `RETURNING` volta vazio —
112
+ * que é a reserva negada.
113
+ *
114
+ * Escrever isto como SELECT + UPDATE, mesmo dentro de uma transação,
115
+ * reabriria a janela sob READ COMMITTED (o padrão): o SELECT de um não
116
+ * enxerga o INSERT não commitado do outro.
117
+ *
118
+ * No SET, `communication_dispatch.status` ainda é o valor ANTIGO — é
119
+ * assim que `recovered_from_expired` sabe que a reserva foi tomada de um
120
+ * titular vencido em vez de concedida sobre uma falha retentável.
121
+ *
122
+ * `unknown_outcome` não aparece no `WHERE`, e a ausência é a regra: uma
123
+ * chave cujo desfecho ninguém conhece não volta a ser reservável sozinha.
124
+ * Sai de lá por `resolveUnknownOutcome`, que é um ato explícito.
125
+ *
126
+ * `provider_attempts` e `provider_first_attempt_at` NÃO são tocados aqui.
127
+ * Por isso o `RETURNING` os devolve com o valor do titular anterior — que
128
+ * é exatamente a pergunta que o motor precisa responder antes de decidir
129
+ * se pode reenviar.
130
+ */
131
+ const rows = await tx `
132
+ INSERT INTO communication_dispatch (
133
+ id, tenant_id, product, brand, channel, event_type, subject_ref,
134
+ recipient_ref, idempotency_key, status, claim_id, claimed_at,
135
+ claim_expires_at, recovered_from_expired, attempts
136
+ ) VALUES (
137
+ ${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${req.ctx.product}, ${req.ctx.brand},
138
+ ${req.channel}, ${req.eventType}, ${req.subjectRef},
139
+ ${req.recipientRef}, ${req.idempotencyKey}, 'in_flight', ${(0, node_crypto_1.randomUUID)()},
140
+ now(), now() + make_interval(secs => ${ttlSeconds}), false, 1
141
+ )
142
+ ON CONFLICT (tenant_id, idempotency_key) DO UPDATE
143
+ SET status = 'in_flight',
144
+ claim_id = ${(0, node_crypto_1.randomUUID)()},
145
+ claimed_at = now(),
146
+ claim_expires_at = now() + make_interval(secs => ${ttlSeconds}),
147
+ recovered_from_expired = (communication_dispatch.status = 'in_flight'),
148
+ attempts = communication_dispatch.attempts + 1,
149
+ recipient_ref = ${req.recipientRef},
150
+ updated_at = now()
151
+ WHERE communication_dispatch.status = 'failed_retryable'
152
+ OR (communication_dispatch.status = 'in_flight'
153
+ AND communication_dispatch.claim_expires_at <= now())
154
+ RETURNING id, claim_id, attempts, recovered_from_expired, provider_attempts,
155
+ (EXTRACT(EPOCH FROM (now() - provider_first_attempt_at)) * 1000)::bigint
156
+ AS provider_first_attempt_age_ms
157
+ `;
158
+ const granted = rows[0];
159
+ if (granted) {
160
+ // Retomada de titular vencido que JÁ tinha falado com o provider é
161
+ // desfecho desconhecido. Retomada de quem morreu antes disso não é.
162
+ const previousReachedProvider = granted.recovered_from_expired && granted.provider_attempts > 0;
163
+ const claim = {
164
+ claimId: granted.id,
165
+ // A GERAÇÃO da reserva, não a linha. `id` é o mesmo para o titular
166
+ // vencido e para quem o substituiu; usá-lo como trava deixaria o
167
+ // zumbi assentar por cima de quem está enviando agora.
168
+ claimToken: granted.claim_id,
169
+ idempotencyKey: req.idempotencyKey,
170
+ attempt: granted.attempts,
171
+ recoveredFromExpiredClaim: granted.recovered_from_expired,
172
+ previousAttemptReachedProvider: previousReachedProvider,
173
+ providerFirstAttemptAgeMs: granted.provider_first_attempt_age_ms === null
174
+ ? null
175
+ : Number(granted.provider_first_attempt_age_ms),
176
+ };
177
+ await writeLifecycle(tx, {
178
+ product: req.ctx.product,
179
+ brand: req.ctx.brand,
180
+ channel: req.channel,
181
+ eventType: req.eventType,
182
+ subjectRef: req.subjectRef,
183
+ recipientRef: req.recipientRef,
184
+ idempotencyKey: req.idempotencyKey,
185
+ attempt: granted.attempts,
186
+ }, {
187
+ kind: 'dispatch_claimed',
188
+ code: previousReachedProvider
189
+ ? 'recovered_unknown_outcome'
190
+ : granted.recovered_from_expired
191
+ ? 'recovered_from_expired_claim'
192
+ : null,
193
+ });
194
+ return { granted: true, claim };
195
+ }
196
+ // Nada foi reservado. O motivo vem da linha que barrou — e cada motivo
197
+ // leva a uma leitura operacional diferente, então nenhum deles pode
198
+ // virar um "não deu" genérico.
199
+ const [current] = await tx `
200
+ SELECT status, (claim_expires_at <= now()) AS expired
201
+ FROM communication_dispatch
202
+ WHERE idempotency_key = ${req.idempotencyKey}
203
+ LIMIT 1
204
+ `;
205
+ if (!current) {
206
+ // Linha some entre o INSERT e o SELECT só se alguém a apagou. Não é
207
+ // reserva concedida, e afirmar `in_flight` seria inventar um titular.
208
+ return { granted: false, reason: 'in_flight', detail: 'estado da reserva indisponível' };
209
+ }
210
+ if (current.status === 'sent')
211
+ return { granted: false, reason: 'already_sent' };
212
+ if (current.status === 'failed_permanent') {
213
+ return { granted: false, reason: 'permanently_failed' };
214
+ }
215
+ if (current.status === 'unknown_outcome') {
216
+ return {
217
+ granted: false,
218
+ reason: 'unknown_outcome',
219
+ detail: 'desfecho da tentativa anterior é desconhecido',
220
+ };
221
+ }
222
+ return { granted: false, reason: 'in_flight' };
223
+ });
224
+ },
225
+ async markProviderAttempt(claim) {
226
+ return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
227
+ /*
228
+ * Transação PRÓPRIA e commitada antes da chamada externa.
229
+ *
230
+ * Se esta gravação vivesse na transação de quem chama, ela ficaria
231
+ * invisível até o commit — e o processo que morre no meio é justamente o
232
+ * que nunca commita. A marca precisa sobreviver à morte do processo que
233
+ * a escreveu, senão ela não marca nada.
234
+ *
235
+ * `claim_id` na trava: só o titular da geração corrente marca tentativa.
236
+ * `status = 'in_flight'`: uma chave assentada não recebe marca nova nem
237
+ * quando a geração por acaso coincide (`settle` preserva o `claim_id`).
238
+ *
239
+ * **O `RETURNING` é a parte nova, e é o bloqueador inteiro.** A trava já
240
+ * estava aqui e já funcionava; o que faltava era o motor SABER que ela
241
+ * disparou. Sem `RETURNING`, `UPDATE` que casa zero linhas e `UPDATE` que
242
+ * casa uma são indistinguíveis para o chamador — e o chamador seguia
243
+ * para `adapter.send()` nos dois casos.
244
+ */
245
+ const fenced = await tx `
246
+ UPDATE communication_dispatch
247
+ SET provider_attempts = provider_attempts + 1,
248
+ provider_first_attempt_at = COALESCE(provider_first_attempt_at, now()),
249
+ provider_last_attempt_at = now(),
250
+ updated_at = now()
251
+ WHERE id = ${claim.claimId}
252
+ AND claim_id = ${claim.claimToken}
253
+ AND status = 'in_flight'
254
+ RETURNING id
255
+ `;
256
+ // Uma linha atualizada = a geração corrente é a de quem chamou.
257
+ if (fenced[0])
258
+ return { authority: 'held' };
259
+ /*
260
+ * Zero linhas. A DECISÃO já está tomada — foi o `UPDATE` que a tomou,
261
+ * atomicamente — e este `SELECT` serve só para o RÓTULO. Não há TOCTOU
262
+ * aqui: o que ele lê depois não pode reautorizar um envio que o `UPDATE`
263
+ * já recusou.
264
+ */
265
+ const [current] = await tx `
266
+ SELECT status, (claim_expires_at <= now()) AS expired
267
+ FROM communication_dispatch
268
+ WHERE id = ${claim.claimId}
269
+ LIMIT 1
270
+ `;
271
+ if (!current) {
272
+ return { authority: 'lost', detail: 'linha de reserva não existe mais' };
273
+ }
274
+ if (current.status !== 'in_flight') {
275
+ return {
276
+ authority: 'already_final',
277
+ state: current.status,
278
+ detail: `chave já assentada como ${current.status}`,
279
+ };
280
+ }
281
+ return { authority: 'lost', detail: 'reserva retomada por outra execução' };
282
+ });
283
+ },
284
+ async settle(claim, outcome, event) {
285
+ await (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
286
+ /*
287
+ * `WHERE claim_id = ...` é a trava que faz o titular vencido não poder
288
+ * assentar por cima de quem está enviando agora.
289
+ *
290
+ * Até a H2 a comparação era por `id` — o identificador da LINHA, que
291
+ * sobrevive intacto à retomada. Ou seja: a trava estava escrita no
292
+ * comentário e não no código, e o processo que ressuscitava depois do
293
+ * prazo assentava por cima do titular novo sem que nada reclamasse. O
294
+ * que desqualifica o zumbi é não ter a GERAÇÃO corrente, e é ela que
295
+ * entra no `WHERE`.
296
+ */
297
+ const status = outcome.kind === 'sent'
298
+ ? 'sent'
299
+ : outcome.kind === 'unknown'
300
+ ? 'unknown_outcome'
301
+ : outcome.kind === 'failed'
302
+ ? outcome.permanent
303
+ ? 'failed_permanent'
304
+ : 'failed_retryable'
305
+ : 'failed_retryable';
306
+ const code = outcome.kind === 'released'
307
+ ? outcome.reason
308
+ : outcome.kind === 'sent'
309
+ ? null
310
+ : (outcome.code ?? null);
311
+ const detail = outcome.kind === 'sent' || outcome.kind === 'released' ? null : outcome.detail;
312
+ const updated = await tx `
313
+ UPDATE communication_dispatch
314
+ SET status = ${status},
315
+ settled_at = now(),
316
+ sent_at = ${outcome.kind === 'sent' ? tx `now()` : tx `sent_at`},
317
+ provider_ref = ${outcome.kind === 'sent'
318
+ ? tx `COALESCE(${outcome.providerRef ?? null}, provider_ref)`
319
+ : tx `provider_ref`},
320
+ -- Enviado e desconhecido mantêm a reserva encerrada; os demais
321
+ -- devolvem a chave imediatamente. Esperar o prazo vencer num
322
+ -- motivo já conhecido calaria a etapa por dez minutos à toa.
323
+ claim_expires_at = ${outcome.kind === 'sent' ? tx `claim_expires_at` : tx `now()`},
324
+ last_code = ${trim(code)},
325
+ last_detail = ${trim(detail)},
326
+ updated_at = now()
327
+ WHERE id = ${claim.claimId} AND claim_id = ${claim.claimToken}
328
+ RETURNING id
329
+ `;
330
+ // Zumbi recusado: nenhuma linha mudou, e nenhum evento é gravado. Uma
331
+ // trilha escrita por quem perdeu o direito de agir descreveria um envio
332
+ // que o titular atual não fez.
333
+ if (!updated[0])
334
+ return;
335
+ const envelope = await envelopeFor(tx, claim.claimId);
336
+ if (envelope)
337
+ await writeLifecycle(tx, envelope, event);
338
+ });
339
+ },
340
+ async peek(idempotencyKey) {
341
+ return (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
342
+ const [row] = await tx `
343
+ SELECT status, (claim_expires_at <= now()) AS expired
344
+ FROM communication_dispatch
345
+ WHERE idempotency_key = ${idempotencyKey}
346
+ LIMIT 1
347
+ `;
348
+ if (!row)
349
+ return 'none';
350
+ // Reserva vencida não é "em andamento": ninguém está com ela. Relatar
351
+ // `in_flight` faria o ensaio anunciar um envio que já morreu.
352
+ if (row.status === 'in_flight')
353
+ return row.expired ? 'failed_retryable' : 'in_flight';
354
+ return row.status;
355
+ });
356
+ },
357
+ async resolveUnknownOutcome(idempotencyKey, resolution, detail) {
358
+ await (0, context_js_1.withContext)(db, { tenantId }, async (tx) => {
359
+ // Só sai de `unknown_outcome`. Aplicar isto sobre uma chave em outro
360
+ // estado seria uma via lateral para reabrir um envio já assentado — e a
361
+ // reserva deixaria de ser a única autoridade sobre o direito de enviar.
362
+ const [row] = await tx `
363
+ UPDATE communication_dispatch
364
+ SET status = ${resolution === 'sent' ? 'sent' : 'failed_retryable'},
365
+ sent_at = ${resolution === 'sent' ? tx `COALESCE(sent_at, now())` : tx `sent_at`},
366
+ settled_at = now(),
367
+ claim_expires_at = now(),
368
+ last_code = ${`unknown_resolved_${resolution}`},
369
+ last_detail = ${trim(detail)},
370
+ updated_at = now()
371
+ WHERE idempotency_key = ${idempotencyKey}
372
+ AND status = 'unknown_outcome'
373
+ RETURNING id
374
+ `;
375
+ if (!row)
376
+ return;
377
+ const envelope = await envelopeFor(tx, row.id);
378
+ if (envelope) {
379
+ await writeLifecycle(tx, envelope, {
380
+ kind: resolution === 'sent' ? 'dispatch_sent' : 'dispatch_failed',
381
+ status: resolution === 'sent' ? 'sent' : null,
382
+ code: `unknown_resolved_${resolution}`,
383
+ detail: detail ?? null,
384
+ });
385
+ }
386
+ });
387
+ },
388
+ };
389
+ }
390
+ /**
391
+ * Trilha sobre `communication_event`.
392
+ *
393
+ * Recebe `Tx` — e aqui a escolha é OPOSTA à da reserva, de propósito. A trilha
394
+ * descreve o que a transação de negócio fez; se ela commitasse à parte, um
395
+ * rollback deixaria eventos narrando um envio que o banco desfez. A reserva
396
+ * precisa sobreviver ao rollback (a mensagem saiu de verdade); a narrativa, não.
397
+ */
398
+ function createPostgresAuditSink(tx, tenantId) {
399
+ return {
400
+ async record(event) {
401
+ // Contexto de outro tenant nunca vira linha deste. Silenciar seria pior
402
+ // que gravar errado, então a checagem existe e falha alto.
403
+ if (event.ctx.tenantId !== tenantId) {
404
+ throw new Error('evento de comunicação de tenant diferente do sink');
405
+ }
406
+ await tx `
407
+ INSERT INTO communication_event (
408
+ id, tenant_id, product, brand, kind, channel, event_type, subject_ref,
409
+ recipient_ref, idempotency_key, provider_ref, skip_reason, status,
410
+ code, detail, attempt
411
+ ) VALUES (
412
+ ${(0, node_crypto_1.randomUUID)()}, ${tenantId}, ${event.ctx.product}, ${event.ctx.brand},
413
+ ${event.kind}, ${event.channel}, ${event.eventType}, ${event.subjectRef},
414
+ ${event.recipientRef}, ${event.idempotencyKey}, ${event.providerRef ?? null},
415
+ ${event.skipReason ?? null}, ${event.status ?? null},
416
+ ${trim(event.code)}, ${trim(event.detail)}, ${event.attempt ?? null}
417
+ )
418
+ `;
419
+ },
420
+ };
421
+ }
422
+ /**
423
+ * Leitura da trilha. É o que torna a auditoria CONSULTÁVEL — sem isto, o
424
+ * registro estruturado seria só uma tabela que ninguém abre.
425
+ */
426
+ async function listCommunicationTrail(tx, filter = {}) {
427
+ const limit = Math.min(Math.max(filter.limit ?? 100, 1), 500);
428
+ const rows = await tx `
429
+ SELECT id, kind, channel, event_type, subject_ref, recipient_ref,
430
+ idempotency_key, provider_ref, skip_reason, status, code, detail,
431
+ attempt, occurred_at
432
+ FROM communication_event
433
+ WHERE true
434
+ ${filter.subjectRef ? tx `AND subject_ref = ${filter.subjectRef}` : tx ``}
435
+ ${filter.recipientRef ? tx `AND recipient_ref = ${filter.recipientRef}` : tx ``}
436
+ ${filter.idempotencyKey ? tx `AND idempotency_key = ${filter.idempotencyKey}` : tx ``}
437
+ ${filter.kind ? tx `AND kind = ${filter.kind}` : tx ``}
438
+ ORDER BY occurred_at DESC, created_at DESC
439
+ LIMIT ${limit}
440
+ `;
441
+ return rows.map((r) => ({
442
+ id: r.id,
443
+ kind: r.kind,
444
+ channel: r.channel,
445
+ eventType: r.event_type,
446
+ subjectRef: r.subject_ref,
447
+ recipientRef: r.recipient_ref,
448
+ idempotencyKey: r.idempotency_key,
449
+ providerRef: r.provider_ref,
450
+ skipReason: r.skip_reason,
451
+ status: r.status,
452
+ code: r.code,
453
+ detail: r.detail,
454
+ attempt: r.attempt,
455
+ occurredAt: r.occurred_at.toISOString(),
456
+ }));
457
+ }
458
+ //# sourceMappingURL=postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../../src/communication/stores/postgres.ts"],"names":[],"mappings":"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"}