@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
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Roteamento de webhook de entrada — de quem é este evento?
4
+ *
5
+ * **Este módulo existe por causa da topologia do provider, não por gosto de
6
+ * abstração.** Sob um Meta App único do motor — que é a topologia oficial de
7
+ * Tech Provider —, a URL de callback e o verify token pertencem ao APP, não à
8
+ * conta do cliente. A Meta entrega os eventos de TODAS as WABAs assinadas no
9
+ * mesmo endereço, e não tem como saber o nosso `tenantId`.
10
+ *
11
+ * A rota anterior embutia `:tenantId` no path. Isso só funciona quando cada
12
+ * tenant tem o próprio App e o próprio webhook — uma topologia que a plataforma
13
+ * suporta, mas que não é a que o motor vai operar, e que não oferece
14
+ * coexistência com o WhatsApp Business App. Com um App só, o tenant tem de sair
15
+ * do PAYLOAD.
16
+ *
17
+ * O que decide é `metadata.phone_number_id`. O WABA (`entry.id`) é **conferência
18
+ * de coerência**, nunca segunda chave: um número que resolve para um registro
19
+ * cujo WABA discorda significa cadastro errado ou payload forjado, e os dois
20
+ * merecem recusa em vez de palpite. É a mesma conclusão a que o registry do
21
+ * Paid Media Engine já tinha chegado, e ela é reaproveitada aqui de propósito.
22
+ *
23
+ * Nunca decidem: telefone do remetente, nome do contato, texto da mensagem,
24
+ * nome de campanha. São entrada não autenticada ou ambígua — o mesmo telefone
25
+ * pode falar com dois tenants.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.resolveRoute = resolveRoute;
29
+ exports.sameOrigin = sameOrigin;
30
+ /**
31
+ * Resolve a origem de um evento para um tenant.
32
+ *
33
+ * **Fail-closed por construção.** Não existe neste arquivo nenhum caminho que
34
+ * devolva uma rota que não tenha sido encontrada pela chave exata do provider:
35
+ * não há tenant padrão, não há "primeiro tenant", não há fallback por marca. Um
36
+ * número desconhecido resolve para recusa, e quem chama audita e para.
37
+ */
38
+ async function resolveRoute(store, origin) {
39
+ const accountRef = origin.providerAccountRef?.trim();
40
+ if (!accountRef) {
41
+ return { ok: false, reason: 'missing_origin', detail: 'evento sem conta de origem' };
42
+ }
43
+ const route = await store.findByProviderAccount(origin.provider, accountRef);
44
+ if (!route) {
45
+ return {
46
+ ok: false,
47
+ reason: 'unknown_account',
48
+ detail: `conta ${origin.provider} não vinculada a nenhum tenant`,
49
+ };
50
+ }
51
+ // Conferência de coerência — só quando os dois lados declaram o agrupador.
52
+ // Exigi-lo quando o payload não o traz recusaria evento legítimo; ignorá-lo
53
+ // quando ambos existem e discordam aceitaria cadastro corrompido.
54
+ if (origin.providerParentRef &&
55
+ route.providerParentRef &&
56
+ origin.providerParentRef !== route.providerParentRef) {
57
+ return {
58
+ ok: false,
59
+ reason: 'parent_mismatch',
60
+ detail: 'agrupador do evento discorda do vínculo registrado',
61
+ };
62
+ }
63
+ return { ok: true, route };
64
+ }
65
+ /**
66
+ * Duas origens são a mesma?
67
+ *
68
+ * Um POST da Meta pode trazer eventos de mais de uma conta. Agrupar por origem
69
+ * antes de abrir contexto de tenant é o que impede o evento de um escritório de
70
+ * ser aplicado dentro da transação de outro.
71
+ */
72
+ function sameOrigin(a, b) {
73
+ return (a.provider === b.provider &&
74
+ a.providerAccountRef === b.providerAccountRef &&
75
+ (a.providerParentRef ?? '') === (b.providerParentRef ?? ''));
76
+ }
77
+ //# sourceMappingURL=routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routing.js","sourceRoot":"","sources":["../../../src/communication/routing.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AAqEH,oCAkCC;AASD,gCAMC;AAzDD;;;;;;;GAOG;AACI,KAAK,UAAU,YAAY,CAChC,KAAwB,EACxB,MAAqB;IAErB,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;IACvF,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC7E,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,SAAS,MAAM,CAAC,QAAQ,gCAAgC;SACjE,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,4EAA4E;IAC5E,kEAAkE;IAClE,IACE,MAAM,CAAC,iBAAiB;QACxB,KAAK,CAAC,iBAAiB;QACvB,MAAM,CAAC,iBAAiB,KAAK,KAAK,CAAC,iBAAiB,EACpD,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,oDAAoD;SAC7D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,CAAgB,EAAE,CAAgB;IAC3D,OAAO,CACL,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;QACzB,CAAC,CAAC,kBAAkB,KAAK,CAAC,CAAC,kBAAkB;QAC7C,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAC5D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Perfil de remetente — de quem a mensagem PARECE ser.
4
+ *
5
+ * `identity.ts` responde "existe conta deste tenant para este canal?" e não tem
6
+ * fallback nenhum, de propósito. Este módulo responde a pergunta seguinte, que a
7
+ * operação real obriga a enfrentar: **e quando o tenant não configurou conta
8
+ * própria, mas o produto já entrega e-mail hoje?**
9
+ *
10
+ * A resposta preguiçosa é `?? contaDaPlataforma`, escrita dentro de um adapter.
11
+ * Foi assim no Manga Verde, e o custo é conhecido: reputação de domínio
12
+ * compartilhada em e-mail, e uma WABA respondendo pelo comportamento de outra
13
+ * marca em WhatsApp — com bloqueio que se propaga para todos os tenants do
14
+ * número.
15
+ *
16
+ * Aqui o fallback existe, mas com quatro amarras que o tornam outra coisa:
17
+ *
18
+ * 1. É DECLARADO pelo produto, canal a canal. Não há default implícito.
19
+ * 2. Nunca vale para canal de telefone. WhatsApp e SMS falham fechado, ponto.
20
+ * 3. A IDENTIDADE VISÍVEL continua sendo a do tenant que está enviando — o
21
+ * nome de exibição vem da marca dele. A SC nunca sai parecendo Manga Verde.
22
+ * 4. A origem é devolvida junto e vai para a trilha. "Saiu pelo remetente da
23
+ * plataforma" tem de ser uma coisa que o escritório consegue VER, não uma
24
+ * linha de código que ninguém lê.
25
+ */
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ exports.resolveSenderProfile = resolveSenderProfile;
28
+ exports.withSenderFallback = withSenderFallback;
29
+ exports.credentialResolverFor = credentialResolverFor;
30
+ /**
31
+ * Canais que NUNCA aceitam fallback de plataforma.
32
+ *
33
+ * Lista fechada no motor, e não configuração do produto, porque a consequência
34
+ * não é do produto: uma WABA bloqueada por comportamento de um tenant derruba
35
+ * todos os outros que compartilham o número. Não existe configuração que torne
36
+ * isso aceitável, então não existe configuração.
37
+ */
38
+ const FALLBACK_FORBIDDEN = ['whatsapp', 'sms'];
39
+ /**
40
+ * Resolve o remetente: conta do tenant primeiro, fallback declarado depois.
41
+ *
42
+ * A ordem não é preferência, é regra. A conta do tenant, quando existe, é a
43
+ * única que pode ser usada — mesmo que esteja `paused` ou com erro. Cair para a
44
+ * plataforma porque a conta PRÓPRIA está com problema seria o pior caso
45
+ * possível: o escritório que configurou a identidade dele passaria a enviar com
46
+ * a da plataforma, justamente quando alguém está mexendo na configuração.
47
+ */
48
+ async function resolveSenderProfile(store, ctx, channel, fallback = {}) {
49
+ const own = await store.find(ctx, channel);
50
+ if (own)
51
+ return { ok: true, profile: { account: own, origin: 'tenant' } };
52
+ const declared = fallback[channel];
53
+ if (!declared) {
54
+ return {
55
+ ok: false,
56
+ reason: 'no_account',
57
+ detail: `sem conta de ${channel} para este tenant/produto e sem fallback declarado`,
58
+ };
59
+ }
60
+ if (FALLBACK_FORBIDDEN.includes(channel)) {
61
+ // Produto que declarou fallback para telefone cometeu um erro de
62
+ // configuração perigoso. Recusar em silêncio o esconderia; recusar com
63
+ // motivo próprio o expõe na trilha.
64
+ return {
65
+ ok: false,
66
+ reason: 'fallback_forbidden_for_channel',
67
+ detail: `fallback de plataforma é proibido em ${channel}`,
68
+ };
69
+ }
70
+ return {
71
+ ok: true,
72
+ profile: {
73
+ account: {
74
+ channel,
75
+ // O contexto pedido, SEMPRE. É o que faz `assertOwnership` continuar
76
+ // valendo e o que impede a conta de plataforma de carregar a marca de
77
+ // outro tenant para dentro de um envio deste.
78
+ tenantId: ctx.tenantId,
79
+ product: ctx.product,
80
+ brand: ctx.brand,
81
+ senderId: declared.senderId,
82
+ displayName: declared.displayNameFor(ctx),
83
+ credentialRef: declared.credentialRef,
84
+ status: 'active',
85
+ },
86
+ origin: 'platform_fallback',
87
+ },
88
+ };
89
+ }
90
+ /**
91
+ * Store de contas com o fallback do produto já aplicado.
92
+ *
93
+ * Existe porque o fallback tem de valer na RESOLUÇÃO DE IDENTIDADE, e não só na
94
+ * construção do adapter. Registrar o canal com a conta de fallback e deixar
95
+ * `deps.accounts` devolvendo `null` produz um motor que pula o canal com
96
+ * `no_identity` antes de chegar ao adapter — o canal existe, o remetente existe,
97
+ * e a mensagem não sai. O sintoma é mudo: a trilha diz "sem conta", que é
98
+ * exatamente o que quem configurou o fallback acredita ter resolvido.
99
+ *
100
+ * `identity.ts` continua sem fallback nenhum, e é o ponto: quem decide que a
101
+ * plataforma pode assinar por um tenant é o PRODUTO, declarando a política, e a
102
+ * decisão fica visível numa decoração explícita em vez de num `??` dentro do
103
+ * motor.
104
+ */
105
+ function withSenderFallback(store, fallback) {
106
+ return {
107
+ async find(ctx, channel) {
108
+ const resolved = await resolveSenderProfile(store, ctx, channel, fallback);
109
+ return resolved.ok ? resolved.profile.account : null;
110
+ },
111
+ };
112
+ }
113
+ /**
114
+ * Resolvedor de credencial preso a UMA conta.
115
+ *
116
+ * Envolve o resolvedor do processo e só deixa passar a referência que a conta
117
+ * resolvida declarou. Sem isto, o resolvedor injetado é uma função que traduz
118
+ * qualquer nome em qualquer segredo, e basta um adapter passar a referência
119
+ * errada — por bug, por conta trocada, por um `??` mal colocado — para um tenant
120
+ * enviar com a credencial de outro.
121
+ *
122
+ * A trava é barata e fecha a classe inteira: nenhuma referência que não seja a
123
+ * daquela conta resolve, por construção.
124
+ */
125
+ function credentialResolverFor(account, resolve) {
126
+ return async (ref) => (ref === account.credentialRef ? resolve(ref) : undefined);
127
+ }
128
+ //# sourceMappingURL=sender-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-profile.js","sourceRoot":"","sources":["../../../src/communication/sender-profile.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;AA2DH,oDAgDC;AAiBD,gDAUC;AAcD,sDAKC;AAzHD;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAUtE;;;;;;;;GAQG;AACI,KAAK,UAAU,oBAAoB,CACxC,KAA0B,EAC1B,GAAyB,EACzB,OAAmB,EACnB,WAAiC,EAAE;IAEnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,gBAAgB,OAAO,oDAAoD;SACpF,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,iEAAiE;QACjE,uEAAuE;QACvE,oCAAoC;QACpC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,gCAAgC;YACxC,MAAM,EAAE,wCAAwC,OAAO,EAAE;SAC1D,CAAC;IACJ,CAAC;IAED,OAAO;QACL,EAAE,EAAE,IAAI;QACR,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,OAAO;gBACP,qEAAqE;gBACrE,sEAAsE;gBACtE,8CAA8C;gBAC9C,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC;gBACzC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,MAAM,EAAE,QAAQ;aACjB;YACD,MAAM,EAAE,mBAAmB;SAC5B;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,kBAAkB,CAChC,KAA0B,EAC1B,QAA8B;IAE9B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO;YACrB,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC3E,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,qBAAqB,CACnC,OAAuB,EACvB,OAAqD;IAErD,OAAO,KAAK,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3F,CAAC"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Estados de entrega e classificação de falha.
4
+ *
5
+ * `sent` significa "o provider aceitou" — o único desfecho que o e-mail
6
+ * consegue afirmar. WhatsApp e SMS informam depois, por webhook, se a mensagem
7
+ * chegou ao aparelho, e só o WhatsApp informa se foi aberta.
8
+ *
9
+ * Colapsar "aceito" e "entregue" faria a tela afirmar entrega que ninguém
10
+ * confirmou — que é precisamente a pergunta do escritório quando o cliente diz
11
+ * "não recebi nada".
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.CHANNEL_REPORTS = void 0;
15
+ exports.channelReports = channelReports;
16
+ exports.advanceStatus = advanceStatus;
17
+ exports.isRetryable = isRetryable;
18
+ exports.statusForOutcome = statusForOutcome;
19
+ /**
20
+ * Até onde cada canal consegue informar.
21
+ *
22
+ * SMS nunca alcança `read`, e nenhum provider de SMS devolve isso — mapear um
23
+ * `delivered` de SMS para `read` "para uniformizar" produziria uma tela
24
+ * afirmando que o cliente LEU uma cobrança que ninguém sabe se ele leu. É a
25
+ * equivalência falsa que este mapa existe para impedir.
26
+ */
27
+ exports.CHANNEL_REPORTS = {
28
+ email: ['queued', 'sent', 'failed'],
29
+ whatsapp: ['queued', 'sent', 'delivered', 'read', 'failed', 'opted_out'],
30
+ sms: ['queued', 'sent', 'delivered', 'failed', 'opted_out'],
31
+ notification: ['queued', 'sent', 'read', 'failed'],
32
+ };
33
+ /** O canal é capaz de relatar este estado? Consultado ANTES de gravar um webhook. */
34
+ function channelReports(channel, status) {
35
+ return exports.CHANNEL_REPORTS[channel].includes(status);
36
+ }
37
+ /** Ordem de progresso. Um webhook atrasado nunca deve REGREDIR o estado. */
38
+ const RANK = {
39
+ queued: 0,
40
+ sent: 1,
41
+ delivered: 2,
42
+ read: 3,
43
+ failed: 4,
44
+ opted_out: 5,
45
+ };
46
+ /**
47
+ * Aplica um estado novo sobre o atual.
48
+ *
49
+ * Webhooks chegam fora de ordem — `delivered` depois de `read` acontece, e
50
+ * aceitar cegamente faria a mensagem "desler". `failed` e `opted_out` são
51
+ * terminais e nunca são sobrescritos por progresso: um `delivered` que chega
52
+ * depois de uma falha registrada é ruído do provider, não correção.
53
+ */
54
+ function advanceStatus(current, incoming) {
55
+ if (current === 'failed' || current === 'opted_out')
56
+ return current;
57
+ return RANK[incoming] > RANK[current] ? incoming : current;
58
+ }
59
+ /**
60
+ * Erro permanente nunca deve ser retentado, por mais que o contador permita.
61
+ *
62
+ * `unavailable` e `opted_out` também retornam falso, mas por razão oposta: não
63
+ * são falhas de entrega, e não devem sequer consumir uma tentativa.
64
+ */
65
+ function isRetryable(kind) {
66
+ return kind === 'temporary';
67
+ }
68
+ /**
69
+ * Estado que o desfecho assenta, ou `null` quando não assenta nenhum.
70
+ *
71
+ * `temporary` não assenta: a ação continua agendada para nova tentativa.
72
+ * `unavailable` não é tentativa — não gasta retry e não marca falha de entrega.
73
+ */
74
+ function statusForOutcome(kind) {
75
+ switch (kind) {
76
+ case 'sent':
77
+ return 'sent';
78
+ case 'opted_out':
79
+ return 'opted_out';
80
+ case 'permanent':
81
+ return 'failed';
82
+ default:
83
+ return null;
84
+ }
85
+ }
86
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/communication/status.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAsBH,wCAEC;AAoBD,sCAGC;AAQD,kCAEC;AAQD,4CAWC;AAtED;;;;;;;GAOG;AACU,QAAA,eAAe,GAAkD;IAC5E,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;IACnC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC;IACxE,GAAG,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC;IAC3D,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC;CACnD,CAAC;AAEF,qFAAqF;AACrF,SAAgB,cAAc,CAAC,OAAmB,EAAE,MAAsB;IACxE,OAAO,uBAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,4EAA4E;AAC5E,MAAM,IAAI,GAAmC;IAC3C,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC;IACZ,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,SAAS,EAAE,CAAC;CACb,CAAC;AAEF;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,OAAuB,EAAE,QAAwB;IAC7E,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC;IACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,WAAW,CAAC,IAAyB;IACnD,OAAO,IAAI,KAAK,WAAW,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAyB;IACxD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC;QAClB;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * Persistência da sessão de Embedded Signup (migração 0044).
4
+ *
5
+ * Duas operações, e a segunda é a que carrega toda a segurança do fluxo:
6
+ * `consumeOnboardingSession` é **atômica e única**. Ela não lê para depois
7
+ * decidir — ela escreve com a condição embutida, e quem não conseguir escrever
8
+ * não consumiu. Um `SELECT` seguido de `UPDATE` deixaria uma janela em que duas
9
+ * requisições simultâneas com o mesmo `state` passariam as duas, e o desfecho
10
+ * disso é dois vínculos criados para uma autorização só.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ONBOARDING_SESSION_TTL_MS = void 0;
14
+ exports.openOnboardingSession = openOnboardingSession;
15
+ exports.consumeOnboardingSession = consumeOnboardingSession;
16
+ exports.failOnboardingSession = failOnboardingSession;
17
+ exports.recordOnboardingAssets = recordOnboardingAssets;
18
+ exports.latestOnboardingSession = latestOnboardingSession;
19
+ const shared_1 = require("@baruk/shared");
20
+ const onboarding_js_1 = require("../onboarding.js");
21
+ function mapSession(r) {
22
+ return {
23
+ id: r.id,
24
+ tenantId: r.tenant_id,
25
+ product: r.product,
26
+ brand: r.brand,
27
+ channel: r.channel,
28
+ provider: r.provider,
29
+ status: r.status,
30
+ expiresAt: r.expires_at.toISOString(),
31
+ createdAt: r.created_at.toISOString(),
32
+ wabaRef: r.waba_ref,
33
+ phoneRef: r.phone_ref,
34
+ failureCode: r.failure_code,
35
+ };
36
+ }
37
+ const COLUMNS = `
38
+ id, tenant_id, product, brand, channel, provider, status,
39
+ expires_at, created_at, waba_ref, phone_ref, failure_code
40
+ `;
41
+ /**
42
+ * Janela de vida da sessão.
43
+ *
44
+ * Curta porque o fluxo do Embedded Signup leva minutos, não horas, e uma janela
45
+ * generosa só amplia o intervalo em que um `state` capturado ainda vale. Longa o
46
+ * bastante para o cliente terminar a verificação do número, que é o passo lento.
47
+ */
48
+ exports.ONBOARDING_SESSION_TTL_MS = 30 * 60 * 1000;
49
+ /** Abre uma sessão `pending`. Roda dentro do contexto do tenant (RLS FORCE). */
50
+ async function openOnboardingSession(tx, input) {
51
+ const now = input.now ?? new Date();
52
+ const expiresAt = new Date(now.getTime() + (input.ttlMs ?? exports.ONBOARDING_SESSION_TTL_MS));
53
+ const rows = await tx `
54
+ INSERT INTO channel_onboarding_session
55
+ (id, tenant_id, product, brand, channel, provider, state_hash, created_by, expires_at)
56
+ VALUES
57
+ (${(0, shared_1.uuidv7)()}, ${input.tenantId}, ${input.product}, ${input.brand},
58
+ 'whatsapp', 'meta_whatsapp', ${input.stateHash}, ${input.createdBy ?? null},
59
+ ${expiresAt.toISOString()})
60
+ RETURNING ${tx.unsafe(COLUMNS)}
61
+ `;
62
+ return mapSession(rows[0]);
63
+ }
64
+ /**
65
+ * Consome o `state` — uma vez, e só se ainda estiver na janela.
66
+ *
67
+ * O `UPDATE ... WHERE status = 'pending' AND expires_at > now()` é a garantia:
68
+ * duas requisições concorrentes disputam a mesma linha e apenas uma vê
69
+ * `count = 1`. A segunda recebe `not_pending`, que é a verdade.
70
+ *
71
+ * A distinção entre `unknown_state` e `not_pending` fica no servidor e **não vai
72
+ * para a resposta HTTP**: dizer ao cliente qual das duas foi transformaria a
73
+ * rota num oráculo de "este state existe neste tenant".
74
+ */
75
+ async function consumeOnboardingSession(tx, input) {
76
+ const state = input.state?.trim() ?? '';
77
+ if (!state)
78
+ return { ok: false, reason: 'unknown_state' };
79
+ const stateHash = (0, onboarding_js_1.hashSignupState)(state);
80
+ const now = input.now ?? new Date();
81
+ const rows = await tx `
82
+ UPDATE channel_onboarding_session
83
+ SET status = 'consumed', consumed_at = ${now.toISOString()}, updated_at = now()
84
+ WHERE state_hash = ${stateHash}
85
+ AND status = 'pending'
86
+ AND expires_at > ${now.toISOString()}
87
+ RETURNING ${tx.unsafe(COLUMNS)}
88
+ `;
89
+ const row = rows[0];
90
+ if (row)
91
+ return { ok: true, session: mapSession(row) };
92
+ // Não conseguiu consumir. A linha existe (e não está mais elegível) ou nunca
93
+ // existiu neste tenant — a RLS já respondeu por essa segunda hipótese.
94
+ const existing = await tx `
95
+ SELECT id FROM channel_onboarding_session WHERE state_hash = ${stateHash} LIMIT 1
96
+ `;
97
+ return { ok: false, reason: existing[0] ? 'not_pending' : 'unknown_state' };
98
+ }
99
+ /**
100
+ * Marca uma sessão já consumida como falha, com a CLASSE do erro.
101
+ *
102
+ * Chamada depois de o `state` ter sido consumido e a troca com a Meta ter
103
+ * falhado. O status não volta para `pending`: o `code` pode ter sido gasto na
104
+ * tentativa, e reabrir a sessão convidaria a uma segunda troca que a Meta
105
+ * recusaria por motivo diferente do real.
106
+ */
107
+ async function failOnboardingSession(tx, id, failureCode) {
108
+ await tx `
109
+ UPDATE channel_onboarding_session
110
+ SET status = 'failed', failure_code = ${failureCode.slice(0, 60)}, updated_at = now()
111
+ WHERE id = ${id}
112
+ `;
113
+ }
114
+ /** Registra os identificadores devolvidos pelo fluxo. Não são segredo. */
115
+ async function recordOnboardingAssets(tx, id, refs) {
116
+ await tx `
117
+ UPDATE channel_onboarding_session
118
+ SET waba_ref = ${refs.wabaRef ?? null},
119
+ phone_ref = ${refs.phoneRef ?? null},
120
+ updated_at = now()
121
+ WHERE id = ${id}
122
+ `;
123
+ }
124
+ /** A última sessão do tenant neste canal — é o que a tela mostra. */
125
+ async function latestOnboardingSession(tx) {
126
+ const rows = await tx `
127
+ SELECT ${tx.unsafe(COLUMNS)}
128
+ FROM channel_onboarding_session
129
+ WHERE channel = 'whatsapp'
130
+ ORDER BY created_at DESC
131
+ LIMIT 1
132
+ `;
133
+ return rows[0] ? mapSession(rows[0]) : null;
134
+ }
135
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../../../src/communication/stores/onboarding.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AA8EH,sDAiBC;AAsBD,4DA2BC;AAUD,sDAUC;AAGD,wDAYC;AAGD,0DASC;AA7LD,0CAAuC;AAEvC,oDAAmD;AAgCnD,SAAS,UAAU,CAAC,CAAa;IAC/B,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,OAAO,EAAE,CAAC,CAAC,OAAqB;QAChC,QAAQ,EAAE,CAAC,CAAC,QAA2B;QACvC,MAAM,EAAE,CAAC,CAAC,MAAqC;QAC/C,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE;QACrC,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE;QACrC,OAAO,EAAE,CAAC,CAAC,QAAQ;QACnB,QAAQ,EAAE,CAAC,CAAC,SAAS;QACrB,WAAW,EAAE,CAAC,CAAC,YAAY;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG;;;CAGf,CAAC;AAEF;;;;;;GAMG;AACU,QAAA,yBAAyB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAYxD,gFAAgF;AACzE,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,KAAiC;IAEjC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,iCAAyB,CAAC,CAAC,CAAC;IAEvF,MAAM,IAAI,GAAG,MAAM,EAAE,CAAc;;;;SAI5B,IAAA,eAAM,GAAE,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,KAAK;sCAChC,KAAK,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI;SACxE,SAAS,CAAC,WAAW,EAAE;gBAChB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;GAC/B,CAAC;IACF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC;AAC9B,CAAC;AAWD;;;;;;;;;;GAUG;AACI,KAAK,UAAU,wBAAwB,CAC5C,EAAM,EACN,KAAoC;IAEpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAA,+BAAe,EAAC,KAAK,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAc;;gDAEW,GAAG,CAAC,WAAW,EAAE;0BACvC,SAAS;;0BAET,GAAG,CAAC,WAAW,EAAE;gBAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;GAC/B,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAEvD,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAkB;mEACsB,SAAS;GACzE,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;AAC9E,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,qBAAqB,CACzC,EAAM,EACN,EAAU,EACV,WAAmB;IAEnB,MAAM,EAAE,CAAA;;+CAEqC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;kBACrD,EAAE;GACjB,CAAC;AACJ,CAAC;AAED,0EAA0E;AACnE,KAAK,UAAU,sBAAsB,CAC1C,EAAM,EACN,EAAU,EACV,IAA2D;IAE3D,MAAM,EAAE,CAAA;;wBAEc,IAAI,CAAC,OAAO,IAAI,IAAI;yBACnB,IAAI,CAAC,QAAQ,IAAI,IAAI;;kBAE5B,EAAE;GACjB,CAAC;AACJ,CAAC;AAED,qEAAqE;AAC9D,KAAK,UAAU,uBAAuB,CAAC,EAAM;IAClD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAc;aACxB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;GAK5B,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC"}