@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,132 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter de e-mail — envelope do envio que o Office já usa.
4
+ *
5
+ * **Nenhum motor novo de e-mail.** Convites, ativação, recuperação de senha e a
6
+ * régua de cobrança já passam por `mail/resend.ts`. Este adapter apenas o expõe
7
+ * sob o contrato multicanal, para que o e-mail seja UM canal entre outros em vez
8
+ * de o caminho especial que todos os outros tentam imitar.
9
+ *
10
+ * A supressão em teste continua onde estava, no `sendEmail` do core: uma guarda
11
+ * que mora no adapter é uma guarda que o próximo adapter esquece.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.createEmailChannel = createEmailChannel;
15
+ const resend_js_1 = require("../../mail/resend.js");
16
+ const capabilities_js_1 = require("../capabilities.js");
17
+ /**
18
+ * O que o Resend garante, e o que este adapter exerce.
19
+ *
20
+ * `supportsProviderIdempotency` é `true` porque o adapter MANDA a chave, não
21
+ * porque a documentação do fornecedor a menciona: a declaração descreve o código
22
+ * daqui. Enquanto a chave não era repassada — o estado que a segunda
23
+ * certificação encontrou —, declarar `true` teria sido documentar uma proteção
24
+ * inexistente.
25
+ *
26
+ * Os outros três são `false` por ausência de integração, não por ausência do
27
+ * fornecedor. O Resend publica webhooks de entrega e relata abertura; nenhuma
28
+ * rota daqui os consome hoje (a rota de callback existente é da Meta). Declarar a
29
+ * capacidade do fornecedor em vez da capacidade do código produziria exatamente
30
+ * a divergência entre documento e runtime que reprovou a rodada anterior.
31
+ */
32
+ const RESEND_CAPABILITIES = {
33
+ supportsProviderIdempotency: true,
34
+ providerIdempotencyWindowMs: capabilities_js_1.RESEND_IDEMPOTENCY_WINDOW_MS,
35
+ supportsMessageLookup: false,
36
+ supportsDeliveryWebhook: false,
37
+ supportsReadReceipt: false,
38
+ };
39
+ function createEmailChannel(config) {
40
+ return {
41
+ key: 'email',
42
+ providerName: 'resend',
43
+ capabilities: RESEND_CAPABILITIES,
44
+ isConfigured(_ctx) {
45
+ return config.account.status === 'active' && Boolean(config.account.senderId);
46
+ },
47
+ async send(message) {
48
+ if (message.content.kind !== 'email') {
49
+ return { kind: 'permanent', code: 'content_mismatch', detail: 'conteúdo não é e-mail' };
50
+ }
51
+ const apiKey = await config.resolveCredential(config.account.credentialRef);
52
+ if (!apiKey) {
53
+ // Ausência de credencial é canal indisponível, não falha de entrega: não
54
+ // gasta tentativa e não marca o cliente como problema de cadastro.
55
+ return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
56
+ }
57
+ const from = config.account.displayName
58
+ ? `${config.account.displayName.replace(/["<>\\]/g, '').trim()} <${config.account.senderId}>`
59
+ : config.account.senderId;
60
+ const result = await (0, resend_js_1.sendEmailWithResult)(apiKey, {
61
+ from,
62
+ to: message.to,
63
+ subject: message.content.subject,
64
+ html: message.content.html,
65
+ text: message.content.text,
66
+ }, {
67
+ /*
68
+ * A chave do MOTOR, repassada ao provider.
69
+ *
70
+ * É a mesma em toda tentativa técnica do mesmo envio, porque é derivada
71
+ * da intenção (tenant, produto, marca, canal, evento, assunto, versão
72
+ * de template) e não da tentativa. Derivá-la aqui, ou embaralhá-la com
73
+ * um contador de retry, teria o mecanismo ligado e proteção nenhuma: o
74
+ * provider trataria cada retry como mensagem nova.
75
+ *
76
+ * Cabe no limite do provider por construção — a chave é um sha256 em
77
+ * hexadecimal, 64 caracteres, e o Resend aceita de 1 a 256.
78
+ */
79
+ idempotencyKey: message.idempotencyKey,
80
+ fetchImpl: config.fetchImpl,
81
+ });
82
+ if (result.ok)
83
+ return { kind: 'sent', providerRef: result.providerRef };
84
+ /*
85
+ * `409` é o mecanismo de idempotência falando, e a leitura correta não é
86
+ * "falhou".
87
+ *
88
+ * `invalid_idempotent_request`: esta chave já foi usada nas últimas 24h com
89
+ * um corpo diferente. Ou seja — houve uma chamada anterior aceita para esta
90
+ * mesma intenção. A mensagem SAIU. Tratar como falha devolveria a chave e a
91
+ * próxima rodada mandaria a segunda cobrança, que é precisamente o que a
92
+ * chave existe para impedir.
93
+ *
94
+ * `concurrent_idempotent_requests`: outra chamada com a mesma chave está em
95
+ * curso agora. Não é nosso caso comum (a reserva interna já barra isso
96
+ * antes), mas se acontecer, quem está enviando é a outra chamada — e
97
+ * reenviar por cima é o mesmo erro.
98
+ */
99
+ if (result.status === 409) {
100
+ return {
101
+ kind: 'sent',
102
+ code: 'provider_idempotent_replay',
103
+ detail: 'provider já havia aceito esta chave',
104
+ };
105
+ }
106
+ // Chave fora do formato aceito é defeito de integração nosso, não do
107
+ // destinatário. `permanent` para não repetir a mesma chamada inválida em
108
+ // loop; o rótulo diz onde olhar.
109
+ if (result.errorCode === 'invalid_idempotency_key') {
110
+ return {
111
+ kind: 'permanent',
112
+ code: 'invalid_idempotency_key',
113
+ detail: 'chave de idempotência recusada pelo provider',
114
+ };
115
+ }
116
+ // Sem credencial o canal está indisponível, não falho: não gasta tentativa
117
+ // e não acusa o cadastro do cliente.
118
+ if (result.localReason === 'no_credential') {
119
+ return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
120
+ }
121
+ // O resto — recusa do provider, supressão em teste, falha de rede — é
122
+ // TEMPORÁRIO. Marcar permanente encerraria a cobrança por algo que pode ser
123
+ // infraestrutura, e desistir cedo demais é pior que tentar de novo.
124
+ return {
125
+ kind: 'temporary',
126
+ code: result.errorCode ?? result.localReason ?? 'not_confirmed',
127
+ detail: 'provider não confirmou o envio',
128
+ };
129
+ },
130
+ };
131
+ }
132
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../../src/communication/adapters/email.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter de SMS — provider-agnostic por construção.
4
+ *
5
+ * Nenhum provider está contratado, e este arquivo não escolhe um. Ele define o
6
+ * TRANSPORTE que qualquer provider precisa implementar e deixa a escolha para o
7
+ * dia em que houver decisão comercial — Twilio, Zenvia, Infobip, o que for.
8
+ *
9
+ * A separação entre "canal" e "transporte" existe porque SMS tem regras próprias
10
+ * que valem para TODOS os providers (segmentação por tamanho, remetente
11
+ * alfanumérico proibido no Brasil, ausência de status `read`) e que não deveriam
12
+ * ser reimplementadas por cada adapter concreto. O canal cuida disso; o
13
+ * transporte só entrega bytes.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.isGsm7 = isGsm7;
17
+ exports.countSegments = countSegments;
18
+ exports.createSmsChannel = createSmsChannel;
19
+ exports.createRecordingSmsTransport = createRecordingSmsTransport;
20
+ const capabilities_js_1 = require("../capabilities.js");
21
+ /**
22
+ * Limite de um segmento GSM-7. Acima disso a mensagem é dividida e **cobrada por
23
+ * segmento** — cada provider com sua própria contagem.
24
+ *
25
+ * Com qualquer caractere fora do alfabeto GSM-7 (o `ç` de "cobrança", o `ã` de
26
+ * "atenção", qualquer emoji) a codificação inteira vira UCS-2 e o limite cai
27
+ * para 70. É por isso que a contagem não pode ser um `length > 160` ingênuo: um
28
+ * texto de 150 caracteres com um acento custa três segmentos, não um.
29
+ */
30
+ const GSM7_SINGLE = 160;
31
+ const GSM7_MULTI = 153;
32
+ const UCS2_SINGLE = 70;
33
+ const UCS2_MULTI = 67;
34
+ const GSM7_EXTRA = '^{}\\[~]|€';
35
+ const GSM7_BASE = '@£$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !"#¤%&\'()*+,-./0123456789:;<=>?' +
36
+ '¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà\n\r';
37
+ function isGsm7(text) {
38
+ for (const ch of text) {
39
+ if (!GSM7_BASE.includes(ch) && !GSM7_EXTRA.includes(ch))
40
+ return false;
41
+ }
42
+ return true;
43
+ }
44
+ /** Quantos segmentos este texto custa. É o que vira dinheiro na fatura. */
45
+ function countSegments(text) {
46
+ if (text.length === 0)
47
+ return 0;
48
+ const gsm = isGsm7(text);
49
+ // Caracteres da tabela estendida ocupam DOIS septetos.
50
+ const units = gsm
51
+ ? [...text].reduce((n, ch) => n + (GSM7_EXTRA.includes(ch) ? 2 : 1), 0)
52
+ : [...text].length;
53
+ const single = gsm ? GSM7_SINGLE : UCS2_SINGLE;
54
+ const multi = gsm ? GSM7_MULTI : UCS2_MULTI;
55
+ return units <= single ? 1 : Math.ceil(units / multi);
56
+ }
57
+ function createSmsChannel(config) {
58
+ const maxSegments = config.maxSegments ?? 3;
59
+ return {
60
+ key: 'sms',
61
+ providerName: config.transport.name,
62
+ /*
63
+ * As garantias vêm do TRANSPORTE, e o default é nenhuma.
64
+ *
65
+ * Nenhum provider de SMS está contratado. A garantia de idempotência depende
66
+ * de qual for escolhido, e o canal não tem como saber antes — por isso ele
67
+ * não afirma nada por conta própria: quem implementar o transporte declara o
68
+ * que aquele provider realmente faz, e o silêncio significa ausência.
69
+ *
70
+ * Enquanto isso, o efeito no motor é o correto e conservador: uma reserva de
71
+ * SMS retomada de um titular que já falou com o provider para em
72
+ * `unknown_outcome` em vez de reenviar às cegas.
73
+ */
74
+ capabilities: config.transport.capabilities ?? capabilities_js_1.NO_PROVIDER_GUARANTEES,
75
+ isConfigured(_ctx) {
76
+ return config.account.status === 'active' && Boolean(config.account.senderId);
77
+ },
78
+ async send(message) {
79
+ if (!config.liveSend) {
80
+ return {
81
+ kind: 'unavailable',
82
+ code: 'live_send_disabled',
83
+ detail: 'envio real de SMS não autorizado neste ambiente',
84
+ };
85
+ }
86
+ if (message.content.kind !== 'text') {
87
+ return { kind: 'permanent', code: 'content_mismatch', detail: 'SMS aceita apenas texto' };
88
+ }
89
+ const segments = countSegments(message.content.body);
90
+ if (segments > maxSegments) {
91
+ return {
92
+ kind: 'permanent',
93
+ code: 'too_many_segments',
94
+ detail: `mensagem custaria ${segments} segmentos (teto ${maxSegments})`,
95
+ };
96
+ }
97
+ const result = await config.transport.send({
98
+ to: message.to,
99
+ from: config.account.senderId,
100
+ body: message.content.body,
101
+ idempotencyKey: message.idempotencyKey,
102
+ });
103
+ if (result.ok)
104
+ return { kind: 'sent', providerRef: result.providerRef };
105
+ return { kind: result.kind, code: result.code, detail: result.detail };
106
+ },
107
+ };
108
+ }
109
+ /**
110
+ * Transporte de ensaio — registra o que teria enviado e nunca alcança rede.
111
+ *
112
+ * Serve ao dry-run e aos testes, e é o que permite exercitar segmentação, custo
113
+ * e isolamento sem provider contratado. Não simula entrega para o motor: quem
114
+ * decide se houve envio é a trava `liveSend`, não este objeto.
115
+ */
116
+ function createRecordingSmsTransport() {
117
+ const sent = [];
118
+ return {
119
+ name: 'recording',
120
+ sent,
121
+ async send(req) {
122
+ sent.push(req);
123
+ return { ok: true, providerRef: `rec_${sent.length}` };
124
+ },
125
+ };
126
+ }
127
+ //# sourceMappingURL=sms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sms.js","sourceRoot":"","sources":["../../../../src/communication/adapters/sms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * O código de idioma como a Meta o escreve.
4
+ *
5
+ * ## O defeito que este módulo existe para não repetir
6
+ *
7
+ * O domínio fala BCP-47 (`pt-BR`), que é a forma correta para um catálogo de
8
+ * templates que um dia terá outros providers. A Meta escreve `pt_BR`, com
9
+ * underscore, e recusa qualquer outra grafia.
10
+ *
11
+ * Enquanto não havia um ponto único de tradução, as duas pontas escolheram
12
+ * convenções diferentes sozinhas: a submissão registrou o template como
13
+ * `pt_BR` e o despacho pediu `pt-BR`. O primeiro envio real do produto morreu
14
+ * exatamente aí, em 2026-09-01, com
15
+ * `(#132001) Template name does not exist in the translation` — uma mensagem
16
+ * que fala de tradução e parece falar de template inexistente.
17
+ *
18
+ * A conversão mora no ADAPTER porque é detalhe de provider, como o
19
+ * `UTILITY` maiúsculo de `whatsapp-templates.ts`. Colocá-la no catálogo faria o
20
+ * domínio carregar a grafia da Meta, e o próximo provider herdaria um `pt_BR`
21
+ * que não significa nada para ele.
22
+ *
23
+ * Este arquivo não fala com rede nenhuma — é tradução pura, e o guard de
24
+ * fronteira em `communication-provider-boundary.test.ts` exige que continue
25
+ * assim.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.metaLanguageCode = metaLanguageCode;
29
+ /**
30
+ * `pt-BR` → `pt_BR`. Idempotente: o que já está na forma da Meta passa igual.
31
+ *
32
+ * Não valida: um idioma que a Meta não conhece é recusado por ela, com o código
33
+ * dela, e inventar uma lista aqui significaria mantê-la sincronizada com um
34
+ * catálogo que muda sem avisar.
35
+ */
36
+ function metaLanguageCode(locale) {
37
+ return locale.replace(/-/g, '_');
38
+ }
39
+ //# sourceMappingURL=whatsapp-language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-language.js","sourceRoot":"","sources":["../../../../src/communication/adapters/whatsapp-language.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;AASH,4CAEC;AATD;;;;;;GAMG;AACH,SAAgB,gBAAgB,CAAC,MAAc;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ /**
3
+ * Gestão de template no WhatsApp — adapter da Meta Cloud API.
4
+ *
5
+ * Implementa `TemplateManagementProvider`. Todo o vocabulário da Meta mora
6
+ * aqui: `components`, `BODY`, `example.body_text`, categorias em maiúsculas,
7
+ * `POST /{waba-id}/message_templates`. O domínio não conhece nenhum deles.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.createWhatsAppTemplateProvider = createWhatsAppTemplateProvider;
11
+ const graph_js_1 = require("../graph.js");
12
+ const whatsapp_language_js_1 = require("./whatsapp-language.js");
13
+ const TIMEOUT_MS = 20_000;
14
+ /** O domínio fala minúsculo; a Meta espera maiúsculo. A tradução mora aqui. */
15
+ const CATEGORY = {
16
+ utility: 'UTILITY',
17
+ marketing: 'MARKETING',
18
+ authentication: 'AUTHENTICATION',
19
+ };
20
+ /**
21
+ * Classificação do erro da Meta.
22
+ *
23
+ * `duplicate_name` merece classe própria porque é o desfecho ESPERADO de uma
24
+ * resubmissão — quem chama trata como "já existe", relê e segue, em vez de
25
+ * tratar como falha e tentar de novo.
26
+ */
27
+ function classify(status, code, subcode) {
28
+ if (code === 190 || code === 200 || code === 10 || code === 3)
29
+ return 'unauthorized';
30
+ // 2388023 / subcode 2388024: nome de template já em uso na conta.
31
+ if (code === 2388023 || subcode === 2388024)
32
+ return 'duplicate_name';
33
+ if (code === 4 || code === 80007 || status === 429)
34
+ return 'rate_limited';
35
+ if (status >= 500)
36
+ return 'network';
37
+ if (code === 100 || code === 132000)
38
+ return 'invalid_content';
39
+ return 'provider_error';
40
+ }
41
+ function createWhatsAppTemplateProvider(config) {
42
+ const doFetch = config.fetchImpl ?? fetch;
43
+ return {
44
+ channel: 'whatsapp',
45
+ async submit(submission) {
46
+ const body = {
47
+ name: submission.name,
48
+ language: (0, whatsapp_language_js_1.metaLanguageCode)(submission.language),
49
+ category: CATEGORY[submission.category],
50
+ components: [
51
+ {
52
+ type: 'BODY',
53
+ text: submission.bodyText,
54
+ // `body_text` é uma lista de listas: uma linha de exemplos por
55
+ // conjunto de variáveis do corpo. Omitido quando não há variável —
56
+ // um `example` vazio é recusado.
57
+ ...(submission.bodyExample && submission.bodyExample.length > 0
58
+ ? { example: { body_text: [submission.bodyExample] } }
59
+ : {}),
60
+ },
61
+ ],
62
+ };
63
+ let res;
64
+ try {
65
+ res = await doFetch((0, graph_js_1.graphUrl)(`${encodeURIComponent(config.wabaId)}/message_templates`, config.env), {
66
+ method: 'POST',
67
+ headers: {
68
+ authorization: `Bearer ${config.accessToken}`,
69
+ 'content-type': 'application/json',
70
+ },
71
+ body: JSON.stringify(body),
72
+ signal: AbortSignal.timeout(TIMEOUT_MS),
73
+ });
74
+ }
75
+ catch {
76
+ // Nada da exceção é propagado: em algumas implementações de `fetch` a
77
+ // mensagem inclui a URL, e a URL leva o token no header — mas o corpo
78
+ // do erro também pode ecoar cabeçalhos em proxies.
79
+ return { ok: false, reason: 'network' };
80
+ }
81
+ const payload = (await res.json().catch(() => null));
82
+ if (!res.ok) {
83
+ const err = (payload?.error ?? {});
84
+ return { ok: false, reason: classify(res.status, err.code, err.error_subcode) };
85
+ }
86
+ const id = payload?.id;
87
+ const status = payload?.status;
88
+ const category = payload?.category;
89
+ return {
90
+ ok: true,
91
+ ...(typeof id === 'string' ? { providerRef: id } : {}),
92
+ // Sem `status` no corpo, o desfecho honesto é "submetido, revisão
93
+ // pendente" — e não inventar `APPROVED`.
94
+ status: typeof status === 'string' ? status : 'PENDING',
95
+ ...(typeof category === 'string' ? { category } : {}),
96
+ };
97
+ },
98
+ };
99
+ }
100
+ //# sourceMappingURL=whatsapp-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp-templates.js","sourceRoot":"","sources":["../../../../src/communication/adapters/whatsapp-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ /**
3
+ * Adapter de WhatsApp — Meta Cloud API.
4
+ *
5
+ * O provider é escolha desta implementação, não do domínio: o consumidor pede
6
+ * `channel: 'whatsapp'` e nunca vê `wamid`, `phoneNumberId` nem código de erro
7
+ * da Meta. Trocar por Twilio ou Zenvia é escrever outro arquivo deste tamanho e
8
+ * registrar outro adapter — nenhuma linha de régua muda.
9
+ *
10
+ * **Trava de envio real.** Enquanto `liveSend` não for explicitamente ligado, o
11
+ * adapter recusa com `unavailable` ANTES de qualquer rede. A trava é do código,
12
+ * não do processo: uma frente que promete "não enviar mensagem real" e depende
13
+ * de ninguém chamar a função errada não prometeu nada.
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.createWhatsAppChannel = createWhatsAppChannel;
17
+ const graph_js_1 = require("../graph.js");
18
+ const whatsapp_language_js_1 = require("./whatsapp-language.js");
19
+ /**
20
+ * O que a Meta Cloud API garante, e o que este adapter exerce.
21
+ *
22
+ * **Sem idempotência de provider.** A referência da Cloud API não documenta
23
+ * cabeçalho de idempotência nem parâmetro equivalente; o `wamid` é identificador
24
+ * de mensagem devolvido DEPOIS do aceite, que é outra coisa — ele não impede a
25
+ * segunda chamada de virar a segunda mensagem.
26
+ *
27
+ * A consequência prática está no motor, não aqui: uma reserva de WhatsApp retomada
28
+ * de um titular que já tinha chamado a Meta **não é reenviada**. Ela para em
29
+ * `unknown_outcome`, visível para quem opera. Inventar uma chave que a Meta não lê
30
+ * daria a aparência da proteção sem nada por trás — que é pior que não ter.
31
+ *
32
+ * `supportsDeliveryWebhook` é `true` porque a rota de callback da Meta existe e é
33
+ * exercida (`routes/communication-webhooks.ts`); `supportsReadReceipt` também,
34
+ * porque `read` é um dos status que ela trata.
35
+ */
36
+ const META_CLOUD_CAPABILITIES = {
37
+ supportsProviderIdempotency: false,
38
+ supportsMessageLookup: false,
39
+ supportsDeliveryWebhook: true,
40
+ supportsReadReceipt: true,
41
+ };
42
+ /*
43
+ * A versão da Graph API mora em `../graph.ts`, e não aqui.
44
+ *
45
+ * Este arquivo declarava `v21.0` — de 2024-10, no fim da janela de dois anos em
46
+ * que a Meta mantém uma versão viva. Duas versões no mesmo runtime não falham
47
+ * quando divergem: falham quando a mais velha é desativada, e o sintoma é meio
48
+ * canal parado enquanto o resto funciona.
49
+ */
50
+ const TIMEOUT_MS = 10_000;
51
+ /**
52
+ * Classificação dos códigos de erro da Meta.
53
+ *
54
+ * A distinção que mais importa não é temporário × permanente — é **problema do
55
+ * destinatário × problema nosso**. Um token expirado (190) devolvido como
56
+ * `permanent` marcaria o CLIENTE como contato inválido e o tiraria da régua para
57
+ * sempre, quando o defeito é uma credencial nossa que alguém precisa renovar.
58
+ * Por isso erro de configuração vira `unavailable`: não gasta tentativa, não
59
+ * acusa o cliente, e aparece na tela como pendência do escritório.
60
+ */
61
+ function classify(code, subcode) {
62
+ // Credencial/permissão/configuração — nosso problema, não do destinatário.
63
+ if (code === 190 || code === 200 || code === 10 || code === 3)
64
+ return 'unavailable';
65
+ if (code === 100 && subcode === 33)
66
+ return 'unavailable';
67
+ // Limites de taxa — sempre vale tentar de novo.
68
+ if (code === 4 || code === 80007 || code === 130429 || code === 131048 || code === 131056) {
69
+ return 'temporary';
70
+ }
71
+ // Falhas internas da plataforma.
72
+ if (code === 1 || code === 2 || code === 131000)
73
+ return 'temporary';
74
+ // Destinatário: não tem WhatsApp, número inexistente, recusa de entrega.
75
+ if (code === 131026 || code === 131052 || code === 133010)
76
+ return 'permanent';
77
+ // Fora da janela de sessão sem template válido, e problemas de template.
78
+ if (code === 131047 || (code >= 132000 && code <= 132015))
79
+ return 'permanent';
80
+ // Parâmetro inválido é defeito de integração; retry repetiria o mesmo erro.
81
+ if (code === 100)
82
+ return 'permanent';
83
+ // Código desconhecido: `temporary`. Um erro novo da Meta tratado como
84
+ // permanente removeria o cliente da régua em definitivo por algo que ninguém
85
+ // ainda entendeu — o dano de tentar de novo é muito menor.
86
+ return 'temporary';
87
+ }
88
+ function createWhatsAppChannel(config) {
89
+ const doFetch = config.fetchImpl ?? fetch;
90
+ return {
91
+ key: 'whatsapp',
92
+ providerName: 'meta_cloud',
93
+ capabilities: META_CLOUD_CAPABILITIES,
94
+ isConfigured(_ctx) {
95
+ return (config.account.status === 'active' &&
96
+ Boolean(config.account.meta?.phoneNumberId) &&
97
+ Boolean(config.account.senderId));
98
+ },
99
+ async send(message) {
100
+ if (!config.liveSend) {
101
+ return {
102
+ kind: 'unavailable',
103
+ code: 'live_send_disabled',
104
+ detail: 'envio real de WhatsApp não autorizado neste ambiente',
105
+ };
106
+ }
107
+ const phoneNumberId = config.account.meta?.phoneNumberId;
108
+ if (!phoneNumberId) {
109
+ return {
110
+ kind: 'unavailable',
111
+ code: 'no_phone_number_id',
112
+ detail: 'conta sem phoneNumberId',
113
+ };
114
+ }
115
+ const token = await config.resolveCredential(config.account.credentialRef);
116
+ if (!token) {
117
+ return { kind: 'unavailable', code: 'no_credential', detail: 'credencial ausente' };
118
+ }
119
+ const body = buildBody(message);
120
+ if (!body) {
121
+ return {
122
+ kind: 'permanent',
123
+ code: 'content_mismatch',
124
+ detail: 'conteúdo inválido para WhatsApp',
125
+ };
126
+ }
127
+ let res;
128
+ try {
129
+ res = await doFetch((0, graph_js_1.graphUrl)(`${encodeURIComponent(phoneNumberId)}/messages`), {
130
+ method: 'POST',
131
+ headers: {
132
+ authorization: `Bearer ${token}`,
133
+ 'content-type': 'application/json',
134
+ },
135
+ body: JSON.stringify(body),
136
+ signal: AbortSignal.timeout(TIMEOUT_MS),
137
+ });
138
+ }
139
+ catch {
140
+ // Timeout e falha de rede nunca carregam a causa real do lado do
141
+ // provider — e a mensagem da exceção pode conter a URL com credencial
142
+ // embutida em algumas implementações. Não propaga nada dela.
143
+ return { kind: 'temporary', code: 'network', detail: 'falha de rede ao chamar o provider' };
144
+ }
145
+ if (res.ok) {
146
+ const payload = (await res.json().catch(() => null));
147
+ const providerRef = payload?.messages?.[0]?.id;
148
+ // `sent` = a Meta aceitou. NÃO é entrega: quem afirma entrega é o
149
+ // webhook, depois. Ver `status.ts`.
150
+ return { kind: 'sent', providerRef };
151
+ }
152
+ const err = (await res
153
+ .json()
154
+ .then((b) => typeof b === 'object' && b !== null && 'error' in b
155
+ ? (b.error ?? {})
156
+ : {})
157
+ .catch(() => ({})));
158
+ const code = err.code ?? res.status;
159
+ const kind = res.status >= 500 ? 'temporary' : classify(code, err.error_subcode);
160
+ return {
161
+ kind,
162
+ code: `meta_${code}`,
163
+ // Só a mensagem do provider, truncada. Nunca o corpo enviado (carrega as
164
+ // variáveis do template, que são PII) e nunca os headers.
165
+ detail: (err.message ?? `HTTP ${res.status}`).slice(0, 200),
166
+ };
167
+ },
168
+ };
169
+ }
170
+ function buildBody(message) {
171
+ const to = message.to.replace(/^\+/, '');
172
+ if (message.content.kind === 'whatsapp_template') {
173
+ const { templateName, language, variables } = message.content;
174
+ return {
175
+ messaging_product: 'whatsapp',
176
+ recipient_type: 'individual',
177
+ to,
178
+ type: 'template',
179
+ template: {
180
+ name: templateName,
181
+ // A Meta escreve `pt_BR`; o domínio, `pt-BR`. A tradução é do adapter.
182
+ language: { code: (0, whatsapp_language_js_1.metaLanguageCode)(language) },
183
+ // `components` só entra quando há variável: um template sem parâmetro
184
+ // recebendo `parameters: []` é recusado pela Meta.
185
+ ...(variables.length > 0
186
+ ? {
187
+ components: [
188
+ {
189
+ type: 'body',
190
+ parameters: variables.map((text) => ({ type: 'text', text })),
191
+ },
192
+ ],
193
+ }
194
+ : {}),
195
+ },
196
+ };
197
+ }
198
+ if (message.content.kind === 'text') {
199
+ // Texto livre só é aceito DENTRO da janela de 24h aberta pelo cliente. O
200
+ // motor não tem como saber se a janela está aberta — e por isso este caminho
201
+ // existe para resposta a conversa iniciada pelo cliente, nunca para
202
+ // cobrança ativa, que é sempre template.
203
+ return {
204
+ messaging_product: 'whatsapp',
205
+ recipient_type: 'individual',
206
+ to,
207
+ type: 'text',
208
+ text: { preview_url: false, body: message.content.body },
209
+ };
210
+ }
211
+ return null;
212
+ }
213
+ //# sourceMappingURL=whatsapp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whatsapp.js","sourceRoot":"","sources":["../../../../src/communication/adapters/whatsapp.ts"],"names":[],"mappings":"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"}