@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 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/communication/idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAkCzC;;;;;;;GAOG;AACH,MAAM,GAAG,GAAG,QAAQ,CAAC;AAErB,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,MAAM,KAAK,GAAG;QACZ,KAAK,CAAC,GAAG,CAAC,QAAQ;QAClB,KAAK,CAAC,GAAG,CAAC,OAAO;QACjB,KAAK,CAAC,GAAG,CAAC,KAAK;QACf,KAAK,CAAC,OAAO;QACb,KAAK,CAAC,SAAS;QACf,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,eAAe,IAAI,IAAI;KAC9B,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Identidade de envio — de quem é o número, a conta e o remetente.
3
+ *
4
+ * **O motor é compartilhado. A identidade de envio não é.**
5
+ *
6
+ * Este é o módulo que carrega a regra mais dura do adendo, e ele existe separado
7
+ * do adapter de propósito: se cada adapter resolvesse a própria credencial,
8
+ * "usar a chave central quando o tenant não tem a dele" seria uma linha
9
+ * conveniente dentro de um `??`, escrita por alguém com pressa, num arquivo que
10
+ * ninguém revisa duas vezes. Foi exatamente assim que aconteceu no Manga Verde
11
+ * (`email-channel.provider.ts`, "SaaS hotfix"): o tenant sem chave própria envia
12
+ * com a chave da plataforma.
13
+ *
14
+ * Em e-mail o custo disso é reputação de domínio compartilhada. Em WhatsApp o
15
+ * custo é a WABA de uma marca respondendo pelo comportamento de outra — com
16
+ * bloqueio que se propaga para todos os tenants do número.
17
+ *
18
+ * Aqui não há fallback. Conta ausente resolve para ausente.
19
+ */
20
+ import type { ChannelKey } from './channel.js';
21
+ import type { CommunicationContext } from './context.js';
22
+ /**
23
+ * Uma conta de canal de UM tenant, em UM produto.
24
+ *
25
+ * Modelada sobre o que o Manga Verde já provou em banco
26
+ * (`communication_channel_accounts`: modo de conexão, ciclo de vida, segredo
27
+ * cifrado por conta) — o desenho é reaproveitado, a implementação não.
28
+ */
29
+ export interface ChannelAccount {
30
+ channel: ChannelKey;
31
+ /** Dono. Comparado em `assertOwnership` — é o que faz o isolamento ser verificável. */
32
+ tenantId: string;
33
+ product: string;
34
+ brand: string;
35
+ /**
36
+ * Identidade visível ao destinatário: endereço de e-mail, número em E.164,
37
+ * nome do remetente. Não é segredo — aparece na tela e na trilha.
38
+ */
39
+ senderId: string;
40
+ /** Nome de exibição, quando o canal suporta. WhatsApp/SMS não suportam. */
41
+ displayName?: string;
42
+ /**
43
+ * Referência LÓGICA da credencial no cofre — o nome, jamais o valor.
44
+ *
45
+ * O motor nunca vê o segredo: ele passa a referência ao resolvedor de
46
+ * credencial na borda do adapter. Um segredo que não entra no domínio não
47
+ * vaza em log, em erro, em serialização de teste ou em screenshot.
48
+ */
49
+ credentialRef: string;
50
+ /**
51
+ * Só `active` envia. `pending_validation` existe porque uma conta de WhatsApp
52
+ * cadastrada e não verificada parece pronta na tela e é recusada pelo provider
53
+ * — e o operador merece ver a diferença antes da primeira cobrança, não
54
+ * depois.
55
+ */
56
+ status: 'not_configured' | 'pending_validation' | 'active' | 'paused' | 'error';
57
+ /** Metadado por canal, sem segredo (ex.: `phoneNumberId`, `wabaId`). */
58
+ meta?: Record<string, string>;
59
+ }
60
+ export type IdentityRejection =
61
+ /** Nenhuma conta cadastrada para este contexto e canal. */
62
+ 'no_account'
63
+ /** Existe, mas não está ativa. */
64
+ | 'not_active'
65
+ /** Existe e pertence a OUTRO tenant/produto/marca — nunca deve ser usada. */
66
+ | 'foreign_account';
67
+ export type IdentityResolution = {
68
+ ok: true;
69
+ account: ChannelAccount;
70
+ } | {
71
+ ok: false;
72
+ reason: IdentityRejection;
73
+ detail: string;
74
+ };
75
+ /**
76
+ * Fonte de contas. Implementada pelo produto (banco, config), nunca pelo motor —
77
+ * o motor não sabe onde as contas do consumidor moram.
78
+ */
79
+ export interface ChannelAccountStore {
80
+ find(ctx: CommunicationContext, channel: ChannelKey): Promise<ChannelAccount | null>;
81
+ }
82
+ /**
83
+ * Roteia a busca de conta por CANAL, entre stores distintos.
84
+ *
85
+ * ## Por que isto existe
86
+ *
87
+ * Os canais não guardam a conta no mesmo lugar, e não é acidente: o telefone
88
+ * tem registro canônico próprio (`channel_binding`, migração 0041), criado pelo
89
+ * onboarding e com chave global de roteamento; o e-mail vive na configuração do
90
+ * tenant e admite remetente de plataforma.
91
+ *
92
+ * Antes disto, o consumidor passava UM store para todos os canais — e o canal
93
+ * criado pelo onboarding ficava invisível para quem despacha: a tela dizia
94
+ * "ativo" e o motor teria respondido `no_account`. Um `??` entre os dois stores
95
+ * resolveria o sintoma e esconderia a política; a precedência por canal é
96
+ * decisão de arquitetura e precisa ficar legível em quem compõe.
97
+ *
98
+ * ## Mecanismo, não política
99
+ *
100
+ * Este módulo não sabe QUAL store serve QUAL canal — quem sabe é o produto, e a
101
+ * decisão aparece no mapa que ele monta.
102
+ *
103
+ * **Canal sem rota resolve para ausente, e nunca cai em outro store.** Herdar a
104
+ * rota de um canal vizinho faria um canal novo nascer usando a conta de e-mail
105
+ * do escritório — configurado por acidente, com a identidade errada. Um canal
106
+ * que ninguém roteou entra fechado.
107
+ */
108
+ export declare function routeAccountsByChannel(routes: Partial<Record<ChannelKey, ChannelAccountStore>>): ChannelAccountStore;
109
+ /**
110
+ * A conta pertence mesmo a este contexto?
111
+ *
112
+ * Checagem redundante por desenho. O `store` do produto já deveria filtrar por
113
+ * tenant — mas "deveria" é a palavra que precede todo vazamento cross-tenant, e
114
+ * um store com um `WHERE` esquecido devolveria a conta do vizinho sem que nada
115
+ * reclamasse. Esta função é a segunda tranca, e é a que os testes de isolamento
116
+ * exercitam diretamente.
117
+ */
118
+ export declare function assertOwnership(ctx: CommunicationContext, account: ChannelAccount): boolean;
119
+ /**
120
+ * Resolve a identidade de envio para um contexto e canal.
121
+ *
122
+ * Não há caminho neste código que devolva uma conta de outro contexto, nem uma
123
+ * conta "da plataforma". Ausência resolve para ausência, e quem chama trata
124
+ * ausência como canal indisponível — nunca como permissão para improvisar.
125
+ */
126
+ export declare function resolveIdentity(store: ChannelAccountStore, ctx: CommunicationContext, channel: ChannelKey): Promise<IdentityResolution>;
127
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/communication/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,CAAC;IACpB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAChF,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB;AAC3B,2DAA2D;AACzD,YAAY;AACd,kCAAkC;GAChC,YAAY;AACd,6EAA6E;GAC3E,iBAAiB,CAAC;AAEtB,MAAM,MAAM,kBAAkB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnG;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;CACtF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC,GACvD,mBAAmB,CAQrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAM3F;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,oBAAoB,EACzB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,kBAAkB,CAAC,CA+B7B"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Identidade de envio — de quem é o número, a conta e o remetente.
3
+ *
4
+ * **O motor é compartilhado. A identidade de envio não é.**
5
+ *
6
+ * Este é o módulo que carrega a regra mais dura do adendo, e ele existe separado
7
+ * do adapter de propósito: se cada adapter resolvesse a própria credencial,
8
+ * "usar a chave central quando o tenant não tem a dele" seria uma linha
9
+ * conveniente dentro de um `??`, escrita por alguém com pressa, num arquivo que
10
+ * ninguém revisa duas vezes. Foi exatamente assim que aconteceu no Manga Verde
11
+ * (`email-channel.provider.ts`, "SaaS hotfix"): o tenant sem chave própria envia
12
+ * com a chave da plataforma.
13
+ *
14
+ * Em e-mail o custo disso é reputação de domínio compartilhada. Em WhatsApp o
15
+ * custo é a WABA de uma marca respondendo pelo comportamento de outra — com
16
+ * bloqueio que se propaga para todos os tenants do número.
17
+ *
18
+ * Aqui não há fallback. Conta ausente resolve para ausente.
19
+ */
20
+ /**
21
+ * Roteia a busca de conta por CANAL, entre stores distintos.
22
+ *
23
+ * ## Por que isto existe
24
+ *
25
+ * Os canais não guardam a conta no mesmo lugar, e não é acidente: o telefone
26
+ * tem registro canônico próprio (`channel_binding`, migração 0041), criado pelo
27
+ * onboarding e com chave global de roteamento; o e-mail vive na configuração do
28
+ * tenant e admite remetente de plataforma.
29
+ *
30
+ * Antes disto, o consumidor passava UM store para todos os canais — e o canal
31
+ * criado pelo onboarding ficava invisível para quem despacha: a tela dizia
32
+ * "ativo" e o motor teria respondido `no_account`. Um `??` entre os dois stores
33
+ * resolveria o sintoma e esconderia a política; a precedência por canal é
34
+ * decisão de arquitetura e precisa ficar legível em quem compõe.
35
+ *
36
+ * ## Mecanismo, não política
37
+ *
38
+ * Este módulo não sabe QUAL store serve QUAL canal — quem sabe é o produto, e a
39
+ * decisão aparece no mapa que ele monta.
40
+ *
41
+ * **Canal sem rota resolve para ausente, e nunca cai em outro store.** Herdar a
42
+ * rota de um canal vizinho faria um canal novo nascer usando a conta de e-mail
43
+ * do escritório — configurado por acidente, com a identidade errada. Um canal
44
+ * que ninguém roteou entra fechado.
45
+ */
46
+ export function routeAccountsByChannel(routes) {
47
+ return {
48
+ async find(ctx, channel) {
49
+ const store = routes[channel];
50
+ if (!store)
51
+ return null;
52
+ return store.find(ctx, channel);
53
+ },
54
+ };
55
+ }
56
+ /**
57
+ * A conta pertence mesmo a este contexto?
58
+ *
59
+ * Checagem redundante por desenho. O `store` do produto já deveria filtrar por
60
+ * tenant — mas "deveria" é a palavra que precede todo vazamento cross-tenant, e
61
+ * um store com um `WHERE` esquecido devolveria a conta do vizinho sem que nada
62
+ * reclamasse. Esta função é a segunda tranca, e é a que os testes de isolamento
63
+ * exercitam diretamente.
64
+ */
65
+ export function assertOwnership(ctx, account) {
66
+ return (account.tenantId === ctx.tenantId &&
67
+ account.product === ctx.product &&
68
+ account.brand === ctx.brand);
69
+ }
70
+ /**
71
+ * Resolve a identidade de envio para um contexto e canal.
72
+ *
73
+ * Não há caminho neste código que devolva uma conta de outro contexto, nem uma
74
+ * conta "da plataforma". Ausência resolve para ausência, e quem chama trata
75
+ * ausência como canal indisponível — nunca como permissão para improvisar.
76
+ */
77
+ export async function resolveIdentity(store, ctx, channel) {
78
+ const account = await store.find(ctx, channel);
79
+ if (!account) {
80
+ return {
81
+ ok: false,
82
+ reason: 'no_account',
83
+ detail: `sem conta de ${channel} para este tenant/produto`,
84
+ };
85
+ }
86
+ if (!assertOwnership(ctx, account)) {
87
+ // Não é só recusar: é recusar ALTO. Um store devolvendo conta alheia é
88
+ // defeito de isolamento, não configuração faltando, e os dois não podem
89
+ // aparecer com o mesmo rótulo na trilha.
90
+ return {
91
+ ok: false,
92
+ reason: 'foreign_account',
93
+ detail: `conta de ${channel} não pertence a este contexto`,
94
+ };
95
+ }
96
+ if (account.status !== 'active') {
97
+ return {
98
+ ok: false,
99
+ reason: 'not_active',
100
+ detail: `conta de ${channel} em estado ${account.status}`,
101
+ };
102
+ }
103
+ return { ok: true, account };
104
+ }
105
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/communication/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AA+DH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAAwD;IAExD,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,GAAyB,EAAE,OAAmB;YACvD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAyB,EAAE,OAAuB;IAChF,OAAO,CACL,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;QACjC,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO;QAC/B,OAAO,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAC5B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA0B,EAC1B,GAAyB,EACzB,OAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,gBAAgB,OAAO,2BAA2B;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,uEAAuE;QACvE,wEAAwE;QACxE,yCAAyC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,MAAM,EAAE,YAAY,OAAO,+BAA+B;SAC3D,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,YAAY,OAAO,cAAc,OAAO,CAAC,MAAM,EAAE;SAC1D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Motor de comunicação compartilhado do ecossistema.
3
+ *
4
+ * Consumidores: SC Organização Contábil (primeiro, piloto), e por desenho
5
+ * Dental Plataforma, Manga Verde, Baruk Connect e o que vier. O motor é um; a
6
+ * identidade de envio de cada um nunca é compartilhada — ver `identity.ts`.
7
+ */
8
+ export { CHANNEL_ACCEPTS, CHANNEL_KEYS, channelAccepts, resolveChannel, unavailableChannel, } from './channel.js';
9
+ export type { ChannelKey, ChannelRegistry, CommunicationChannel, DeliveryOutcome, DeliveryOutcomeKind, MessageContent, OutboundMessage, } from './channel.js';
10
+ export { contextRef, validateContext } from './context.js';
11
+ export type { BrandKey, CommunicationContext, ContextRejection, ProductKey } from './context.js';
12
+ export { NO_PROVIDER_GUARANTEES, providerIdempotencyCovers, RESEND_IDEMPOTENCY_WINDOW_MS, } from './capabilities.js';
13
+ export type { ChannelCapabilities } from './capabilities.js';
14
+ export { buildIdempotencyKey } from './idempotency.js';
15
+ export type { IdempotencyInput } from './idempotency.js';
16
+ export { createInMemoryDispatchClaimStore, DEFAULT_CLAIM_TTL_MS } from './claim.js';
17
+ export type { ClaimRefusal, ClaimResult, ClaimSettlement, DispatchClaimHandle, DispatchClaimRequest, DispatchClaimStore, DispatchKeyState, DispatchLifecycleEvent, InMemoryClaimStoreOptions, ProviderAttemptFence, UnknownResolution, } from './claim.js';
18
+ export { createPostgresAuditSink, createPostgresDispatchClaimStore, listCommunicationTrail, } from './stores/postgres.js';
19
+ export type { CommunicationTrailEntry, CommunicationTrailFilter, PostgresClaimStoreOptions, } from './stores/postgres.js';
20
+ export { createNullAuditSink, createRecordingAuditSink, eventKindForSkip } from './audit.js';
21
+ export type { CommunicationAuditSink, CommunicationEvent, CommunicationEventKind, } from './audit.js';
22
+ export { assertOwnership, resolveIdentity, routeAccountsByChannel } from './identity.js';
23
+ export { credentialResolverFor, resolveSenderProfile, withSenderFallback, } from './sender-profile.js';
24
+ export type { PlatformSenderFallback, ResolvedSenderProfile, SenderFallbackPolicy, SenderOrigin, SenderRejection, SenderResolution, } from './sender-profile.js';
25
+ export type { ChannelAccount, ChannelAccountStore, IdentityRejection, IdentityResolution, } from './identity.js';
26
+ export { evaluateConsent } from './consent.js';
27
+ export type { ConsentDecision, ConsentPolicy, ConsentRecord, ConsentSource, ConsentState, ConsentStore, UnknownPolicy, } from './consent.js';
28
+ export { orderVariables, resolveTemplate } from './template.js';
29
+ export type { TemplateKey, TemplateRecord, TemplateRejection, TemplateResolution, TemplateStatus, TemplateStore, } from './template.js';
30
+ export { DEFAULT_POLICY as DEFAULT_CHANNEL_POLICY } from './policy.js';
31
+ export type { ChannelAttempt, ChannelPolicy, SkipReason } from './policy.js';
32
+ export { CHANNEL_REPORTS, advanceStatus, channelReports, isRetryable, statusForOutcome, } from './status.js';
33
+ export type { DeliveryStatus } from './status.js';
34
+ export { dispatch } from './engine.js';
35
+ export type { CommunicationIntent, DispatchDeps, DispatchOptions, DispatchResult, } from './engine.js';
36
+ export { emptyDryRunReport, formatDryRunReport, summarizeDryRun } from './dry-run.js';
37
+ export type { DryRunReport } from './dry-run.js';
38
+ export { applyDeliveryEvent, deliveryEventId, parseMetaDeliveryWebhook, parseMetaInboundOptOut, parseMetaWebhookOrigins, verifyMetaChallenge, verifyMetaSignature, } from './webhook.js';
39
+ export type { DeliveryEvent, InboundOptOut, WebhookApplication } from './webhook.js';
40
+ export { createEmailChannel } from './adapters/email.js';
41
+ export type { EmailAdapterConfig } from './adapters/email.js';
42
+ export { createWhatsAppChannel } from './adapters/whatsapp.js';
43
+ export type { WhatsAppAdapterConfig } from './adapters/whatsapp.js';
44
+ export { countSegments, createRecordingSmsTransport, createSmsChannel, isGsm7, } from './adapters/sms.js';
45
+ export type { SmsAdapterConfig, SmsSendRequest, SmsTransport, SmsTransportResult, } from './adapters/sms.js';
46
+ export { resolveRoute, sameOrigin } from './routing.js';
47
+ export type { ChannelRoute, ChannelRouteStore, RoutedProvider, RouteRejection, RouteResolution, WebhookOrigin, } from './routing.js';
48
+ export { createChannelCredentialResolver, isAcceptableForNewBinding, isVaultRef, noCredentialResolver, } from './credentials.js';
49
+ export type { TenantSecretStore } from './credentials.js';
50
+ export { createPostgresTenantSecretStore, VAULT_DECRYPT_PERMISSION } from './stores/secrets.js';
51
+ export type { SecretAccessGrant, SecretAccessReason, TenantSecretStoreOptions, } from './stores/secrets.js';
52
+ export { ChannelRouteConflictError, CredentialRefNotAcceptableError, completeRoute, createPostgresChannelBindingStore, createPostgresChannelRouteStore, registerChannelBinding, } from './stores/routing.js';
53
+ export type { RegisterBindingInput } from './stores/routing.js';
54
+ export { createWhatsAppTemplateProvider } from './adapters/whatsapp-templates.js';
55
+ export { metaLanguageCode } from './adapters/whatsapp-language.js';
56
+ export { readAppSettings, readAppSubscriptions, readWabaSubscribedApps, sendWebhookTestEvent, } from './webhook-subscription.js';
57
+ export type { AppSettings, AppSubscription, SubscribedApp, SubscriptionProbe, SubscriptionRejection, } from './webhook-subscription.js';
58
+ export type { TemplateCategory, TemplateManagementProvider, TemplateSubmission, TemplateSubmissionRejection, TemplateSubmissionResult, } from './template-provider.js';
59
+ export { DEFAULT_GRAPH_API_VERSION, graphApiVersion, graphUrl } from './graph.js';
60
+ export { createSignupState, exchangeSignupCode, hashSignupState, listWabaTemplates, readPhoneNumber, registerPhoneNumber, sameStateHash, subscribeAppToWaba, } from './onboarding.js';
61
+ export type { BusinessToken, GraphClientOptions, MetaTemplate, PhoneNumberState, RegisterPhoneNumberInput, RegisterRejection, SignupFailure, SignupResult, SignupState, } from './onboarding.js';
62
+ export { consumeOnboardingSession, failOnboardingSession, latestOnboardingSession, ONBOARDING_SESSION_TTL_MS, openOnboardingSession, recordOnboardingAssets, } from './stores/onboarding.js';
63
+ export type { ConsumeResult, OnboardingSession } from './stores/onboarding.js';
64
+ export { claimChannelAccount } from './stores/routing.js';
65
+ export type { ClaimChannelAccountInput, ClaimedChannelAccount } from './stores/routing.js';
66
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/communication/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Motor de comunicação compartilhado do ecossistema.
3
+ *
4
+ * Consumidores: SC Organização Contábil (primeiro, piloto), e por desenho
5
+ * Dental Plataforma, Manga Verde, Baruk Connect e o que vier. O motor é um; a
6
+ * identidade de envio de cada um nunca é compartilhada — ver `identity.ts`.
7
+ */
8
+ export { CHANNEL_ACCEPTS, CHANNEL_KEYS, channelAccepts, resolveChannel, unavailableChannel, } from './channel.js';
9
+ export { contextRef, validateContext } from './context.js';
10
+ export { NO_PROVIDER_GUARANTEES, providerIdempotencyCovers, RESEND_IDEMPOTENCY_WINDOW_MS, } from './capabilities.js';
11
+ export { buildIdempotencyKey } from './idempotency.js';
12
+ export { createInMemoryDispatchClaimStore, DEFAULT_CLAIM_TTL_MS } from './claim.js';
13
+ export { createPostgresAuditSink, createPostgresDispatchClaimStore, listCommunicationTrail, } from './stores/postgres.js';
14
+ export { createNullAuditSink, createRecordingAuditSink, eventKindForSkip } from './audit.js';
15
+ export { assertOwnership, resolveIdentity, routeAccountsByChannel } from './identity.js';
16
+ export { credentialResolverFor, resolveSenderProfile, withSenderFallback, } from './sender-profile.js';
17
+ export { evaluateConsent } from './consent.js';
18
+ export { orderVariables, resolveTemplate } from './template.js';
19
+ export { DEFAULT_POLICY as DEFAULT_CHANNEL_POLICY } from './policy.js';
20
+ export { CHANNEL_REPORTS, advanceStatus, channelReports, isRetryable, statusForOutcome, } from './status.js';
21
+ export { dispatch } from './engine.js';
22
+ export { emptyDryRunReport, formatDryRunReport, summarizeDryRun } from './dry-run.js';
23
+ export { applyDeliveryEvent, deliveryEventId, parseMetaDeliveryWebhook, parseMetaInboundOptOut, parseMetaWebhookOrigins, verifyMetaChallenge, verifyMetaSignature, } from './webhook.js';
24
+ export { createEmailChannel } from './adapters/email.js';
25
+ export { createWhatsAppChannel } from './adapters/whatsapp.js';
26
+ export { countSegments, createRecordingSmsTransport, createSmsChannel, isGsm7, } from './adapters/sms.js';
27
+ export { resolveRoute, sameOrigin } from './routing.js';
28
+ export { createChannelCredentialResolver, isAcceptableForNewBinding, isVaultRef, noCredentialResolver, } from './credentials.js';
29
+ export { createPostgresTenantSecretStore, VAULT_DECRYPT_PERMISSION } from './stores/secrets.js';
30
+ export { ChannelRouteConflictError, CredentialRefNotAcceptableError, completeRoute, createPostgresChannelBindingStore, createPostgresChannelRouteStore, registerChannelBinding, } from './stores/routing.js';
31
+ export { createWhatsAppTemplateProvider } from './adapters/whatsapp-templates.js';
32
+ // Tradução do código de idioma para a grafia da Meta. Ponto ÚNICO: submissão e
33
+ // despacho divergiram uma vez, e o primeiro envio real morreu nisso.
34
+ export { metaLanguageCode } from './adapters/whatsapp-language.js';
35
+ // Diagnóstico da assinatura de webhooks. LEITURA PURA — a correção da
36
+ // assinatura do app é mutação externa e não mora numa rota de diagnóstico.
37
+ export { readAppSettings, readAppSubscriptions, readWabaSubscribedApps, sendWebhookTestEvent, } from './webhook-subscription.js';
38
+ export { DEFAULT_GRAPH_API_VERSION, graphApiVersion, graphUrl } from './graph.js';
39
+ export { createSignupState, exchangeSignupCode, hashSignupState, listWabaTemplates, readPhoneNumber, registerPhoneNumber, sameStateHash, subscribeAppToWaba, } from './onboarding.js';
40
+ export { consumeOnboardingSession, failOnboardingSession, latestOnboardingSession, ONBOARDING_SESSION_TTL_MS, openOnboardingSession, recordOnboardingAssets, } from './stores/onboarding.js';
41
+ export { claimChannelAccount } from './stores/routing.js';
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/communication/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,cAAc,EACd,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAWtB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG3D,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,gCAAgC,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAepF,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAO7F,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAEzF,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAW/C,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUhE,OAAO,EAAE,cAAc,IAAI,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAGvE,OAAO,EACL,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,gBAAgB,EAChB,MAAM,GACP,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAUxD,OAAO,EACL,+BAA+B,EAC/B,yBAAyB,EACzB,UAAU,EACV,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,+BAA+B,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAOhG,OAAO,EACL,yBAAyB,EACzB,+BAA+B,EAC/B,aAAa,EACb,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAClF,+EAA+E;AAC/E,qEAAqE;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,sEAAsE;AACtE,2EAA2E;AAC3E,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAgBnC,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Onboarding de conta de canal — Embedded Signup da Meta.
3
+ *
4
+ * Este módulo é a fronteira entre "o operador clicou em Conectar" e "existe um
5
+ * vínculo de canal com credencial no cofre". Ele não escreve no banco e não lê
6
+ * configuração: recebe o que precisa e devolve o que descobriu, para que o
7
+ * produto decida o que persistir.
8
+ *
9
+ * ── A regra que este arquivo existe para cumprir ────────────────────────────
10
+ *
11
+ * **Nenhum token é digitado por humano.** O caminho anterior — e o que ainda
12
+ * está no cofre desta casa, sob `PROPOSAL_COMM_WA_ACCESS_TOKEN` — é um token de
13
+ * USUÁRIO gerado no painel da Meta e colado numa variável de ambiente. Ele
14
+ * expirou em 2026-07-21 e derrubou o canal sem que nada avisasse, porque um
15
+ * token colado não tem dono, não tem renovação e não tem trilha: ninguém sabe
16
+ * quem o gerou nem quando ele morre.
17
+ *
18
+ * **Aquela credencial é de OUTRO app** — "Baruk Communication Sandbox", do motor
19
+ * de propostas — e **não deve ser reutilizada aqui em hipótese nenhuma**. O app
20
+ * canônico deste caminho é o "Baruk Comunicação". A distinção está escrita
21
+ * porque os dois têm nome parecido e a mesma cara no cofre, e reaproveitar o
22
+ * errado é a regressão mais barata de cometer nesta frente.
23
+ *
24
+ * O Embedded Signup devolve, para o servidor, um `code` trocável por um
25
+ * **business integration system user access token** — escopado ao cliente que
26
+ * autorizou, de vida longa, revogável por ele, e que nunca passa pelo teclado
27
+ * de ninguém.
28
+ *
29
+ * ── O que NÃO está aqui ─────────────────────────────────────────────────────
30
+ *
31
+ * O `client_secret` do App. Ele entra por parâmetro, vindo do ambiente do
32
+ * processo, e nunca é logado, devolvido nem embutido em mensagem de erro. Pelo
33
+ * mesmo motivo, nenhuma função deste arquivo devolve a mensagem de erro da
34
+ * Meta: ela carrega, com frequência, o nome e o identificador do negócio do
35
+ * cliente — que é PII de terceiro dentro de um log nosso.
36
+ */
37
+ /**
38
+ * State de uma sessão de onboarding.
39
+ *
40
+ * `state` vai para o navegador; `stateHash` vai para o banco. A separação é o
41
+ * que impede a tabela de virar uma lista de chaves válidas — ver a migração
42
+ * 0044.
43
+ */
44
+ export interface SignupState {
45
+ state: string;
46
+ stateHash: string;
47
+ }
48
+ /**
49
+ * 32 bytes de aleatoriedade criptográfica.
50
+ *
51
+ * Não é um uuid de propósito: um uuidv7 carrega o instante de criação e é
52
+ * parcialmente previsível, e a única função deste valor é ser impossível de
53
+ * adivinhar.
54
+ */
55
+ export declare function createSignupState(): SignupState;
56
+ export declare function hashSignupState(state: string): string;
57
+ /**
58
+ * Comparação de hashes em tempo constante.
59
+ *
60
+ * A busca no banco é por igualdade de índice e já vaza tempo por natureza; esta
61
+ * função existe para o segundo confronto, feito em memória depois da leitura,
62
+ * onde a comparação ingênua compara byte a byte e para no primeiro que difere.
63
+ */
64
+ export declare function sameStateHash(a: string, b: string): boolean;
65
+ /**
66
+ * Falhas possíveis. **Classes, nunca a mensagem da Meta.**
67
+ *
68
+ * A distinção que importa para quem opera é a mesma do adapter de envio:
69
+ * problema de configuração NOSSA (`unauthorized_app`), problema do fluxo do
70
+ * cliente (`invalid_code`), ou infraestrutura (`network`, `rate_limited`) — e
71
+ * cada uma leva a uma ação diferente na tela.
72
+ */
73
+ export type SignupFailure =
74
+ /** O `code` não serve: já foi trocado, expirou, ou não é deste App. */
75
+ 'invalid_code'
76
+ /** App id/secret errados ou App sem permissão. Pendência do escritório-mãe. */
77
+ | 'unauthorized_app'
78
+ /** Limite de taxa da Meta. Vale tentar de novo. */
79
+ | 'rate_limited'
80
+ /** Timeout, DNS, TLS. Não diz nada sobre o `code`. */
81
+ | 'network'
82
+ /** Qualquer outra recusa do provider. */
83
+ | 'provider_error';
84
+ export type SignupResult<T> = {
85
+ ok: true;
86
+ value: T;
87
+ } | {
88
+ ok: false;
89
+ reason: SignupFailure;
90
+ };
91
+ export interface GraphClientOptions {
92
+ /** Injetável para teste. **Nenhum teste deve alcançar a rede real.** */
93
+ fetchImpl?: typeof fetch;
94
+ env?: NodeJS.ProcessEnv;
95
+ timeoutMs?: number;
96
+ }
97
+ export interface ExchangeSignupCodeInput {
98
+ code: string;
99
+ appId: string;
100
+ appSecret: string;
101
+ }
102
+ export interface BusinessToken {
103
+ /** O segredo. Vai direto para o cofre — nunca para log, resposta HTTP ou tela. */
104
+ accessToken: string;
105
+ /**
106
+ * Segundos até expirar, quando a Meta informa.
107
+ *
108
+ * **A vida do token é decidida pela CONFIGURAÇÃO de Embedded Signup, não pelo
109
+ * código.** A configuração canônica desta casa — "Configuração do cadastro
110
+ * incorporado do WhatsApp com token de expiração em 60 dias" — emite token de
111
+ * usuário do sistema com **60 dias** de validade. Existe variação sem
112
+ * expiração; não é a que está em uso, e supor a errada aqui significaria não
113
+ * gravar `expires_at` no cofre e descobrir o vencimento por uma cobrança que
114
+ * não saiu.
115
+ *
116
+ * `undefined` significa que a Meta não informou — e aí o cofre guarda a
117
+ * credencial sem vencimento, que é o comportamento correto para "não sei",
118
+ * não para "não expira".
119
+ */
120
+ expiresInSeconds?: number;
121
+ }
122
+ /**
123
+ * Troca o `code` do Embedded Signup pelo token de negócio do cliente.
124
+ *
125
+ * **Server-to-server, sempre.** O `client_secret` do App não pode existir no
126
+ * navegador: quem o tiver consegue trocar códigos de qualquer cliente e falar
127
+ * pela conta dele. É por isso que o front devolve `code` e não token, e é por
128
+ * isso que esta função vive no servidor.
129
+ */
130
+ export declare function exchangeSignupCode(input: ExchangeSignupCodeInput, opts?: GraphClientOptions): Promise<SignupResult<BusinessToken>>;
131
+ /**
132
+ * Assina o App do motor nos webhooks da WABA do cliente.
133
+ *
134
+ * Sem isto o vínculo existe, o envio funciona e **nenhum status volta**: a
135
+ * mensagem fica presa em `sent` para sempre e a tela do escritório não sabe
136
+ * dizer se o cliente recebeu. É a diferença entre um canal que funciona e um
137
+ * canal que parece funcionar.
138
+ *
139
+ * Idempotente do lado da Meta — assinar duas vezes não é erro.
140
+ */
141
+ export declare function subscribeAppToWaba(input: {
142
+ wabaId: string;
143
+ accessToken: string;
144
+ }, opts?: GraphClientOptions): Promise<SignupResult<{
145
+ subscribed: boolean;
146
+ }>>;
147
+ export interface PhoneNumberState {
148
+ /** E.164 como a Meta o mostra. Identidade visível, não segredo. */
149
+ displayPhoneNumber?: string;
150
+ verifiedName?: string;
151
+ /** `VERIFIED` | `NOT_VERIFIED` | `EXPIRED` — verificação do NÚMERO. */
152
+ codeVerificationStatus?: string;
153
+ /** `CONNECTED` | `PENDING` | `FLAGGED` | `RESTRICTED` etc. */
154
+ status?: string;
155
+ qualityRating?: string;
156
+ /** A conta já está registrada na Cloud API? */
157
+ platformType?: string;
158
+ }
159
+ /**
160
+ * Estado do número, do ponto de vista da Meta.
161
+ *
162
+ * Leitura pura. É o que permite à tela dizer `attention_required` com um motivo
163
+ * — "número não verificado", "conta restrita" — em vez do genérico "erro", que
164
+ * obriga o escritório a abrir o painel da Meta para descobrir o quê.
165
+ */
166
+ export declare function readPhoneNumber(input: {
167
+ phoneNumberId: string;
168
+ accessToken: string;
169
+ }, opts?: GraphClientOptions): Promise<SignupResult<PhoneNumberState>>;
170
+ export interface MetaTemplate {
171
+ name: string;
172
+ language: string;
173
+ /** APPROVED | PENDING | REJECTED | PAUSED | DISABLED, conforme a Meta. */
174
+ status: string;
175
+ category?: string;
176
+ }
177
+ /**
178
+ * Lista os templates da WABA do cliente. **Somente leitura.**
179
+ *
180
+ * Existe porque `approvedEvents` é uma lista mantida à mão em
181
+ * `tenant.settings`, e uma lista declarada por humano diverge da realidade da
182
+ * Meta no dia em que alguém aprova, pausa ou reprova um template lá. Um template
183
+ * marcado "aprovado" aqui e reprovado lá gasta a tentativa de envio e volta erro
184
+ * permanente — que a régua interpreta como problema do destinatário.
185
+ *
186
+ * Devolver a lista permite que a decisão de configurar `approvedEvents` seja
187
+ * tomada contra o que a Meta diz, e não contra o que alguém lembrou.
188
+ */
189
+ export declare function listWabaTemplates(input: {
190
+ wabaId: string;
191
+ accessToken: string;
192
+ }, opts?: GraphClientOptions): Promise<SignupResult<MetaTemplate[]>>;
193
+ export interface RegisterPhoneNumberInput {
194
+ phoneNumberId: string;
195
+ accessToken: string;
196
+ /** PIN de verificação em duas etapas, 6 dígitos. Segredo do cliente. */
197
+ pin: string;
198
+ /**
199
+ * Sem isto, nada acontece.
200
+ *
201
+ * Registrar um número o move para a Cloud API e o **desconecta do aplicativo
202
+ * WhatsApp Business** que o cliente talvez esteja usando para atender. É uma
203
+ * alteração no negócio de outra pessoa, e ela não pode ser efeito colateral
204
+ * de um passo de configuração. O padrão `false` faz esquecer de autorizar
205
+ * falhar fechado.
206
+ */
207
+ authorized?: boolean;
208
+ }
209
+ export type RegisterRejection = SignupFailure | 'not_authorized' | 'invalid_pin';
210
+ /**
211
+ * Registra o número do cliente na Cloud API.
212
+ *
213
+ * Implementado e **não chamado** por nenhum caminho automático desta fase. O
214
+ * gate de autorização humana está no parâmetro, e não numa convenção de
215
+ * chamada: uma trava que depende de ninguém chamar a função errada não é trava.
216
+ */
217
+ export declare function registerPhoneNumber(input: RegisterPhoneNumberInput, opts?: GraphClientOptions): Promise<{
218
+ ok: true;
219
+ } | {
220
+ ok: false;
221
+ reason: RegisterRejection;
222
+ }>;
223
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/communication/onboarding.ts"],"names":[],"mappings":"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"}