@baruk/core 0.3.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (696) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +85 -0
  3. package/dist/auth/password-reset.d.ts +30 -1
  4. package/dist/auth/password-reset.d.ts.map +1 -1
  5. package/dist/auth/password-reset.js +139 -11
  6. package/dist/auth/password-reset.js.map +1 -1
  7. package/dist/auth/service.d.ts +39 -2
  8. package/dist/auth/service.d.ts.map +1 -1
  9. package/dist/auth/service.js +75 -10
  10. package/dist/auth/service.js.map +1 -1
  11. package/dist/billing/ar-repository.d.ts +334 -0
  12. package/dist/billing/ar-repository.d.ts.map +1 -0
  13. package/dist/billing/ar-repository.js +707 -0
  14. package/dist/billing/ar-repository.js.map +1 -0
  15. package/dist/billing/auto-generation.d.ts +87 -0
  16. package/dist/billing/auto-generation.d.ts.map +1 -0
  17. package/dist/billing/auto-generation.js +181 -0
  18. package/dist/billing/auto-generation.js.map +1 -0
  19. package/dist/billing/live-guard.d.ts +64 -0
  20. package/dist/billing/live-guard.d.ts.map +1 -0
  21. package/dist/billing/live-guard.js +68 -0
  22. package/dist/billing/live-guard.js.map +1 -0
  23. package/dist/billing/payment-means-catalog.d.ts +17 -0
  24. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  25. package/dist/billing/payment-means-catalog.js +21 -0
  26. package/dist/billing/payment-means-catalog.js.map +1 -0
  27. package/dist/billing/payment-means.d.ts +38 -0
  28. package/dist/billing/payment-means.d.ts.map +1 -0
  29. package/dist/billing/payment-means.js +29 -0
  30. package/dist/billing/payment-means.js.map +1 -0
  31. package/dist/billing/payment-rail.d.ts +118 -0
  32. package/dist/billing/payment-rail.d.ts.map +1 -0
  33. package/dist/billing/payment-rail.js +295 -0
  34. package/dist/billing/payment-rail.js.map +1 -0
  35. package/dist/billing/provider/asaas.d.ts +46 -1
  36. package/dist/billing/provider/asaas.d.ts.map +1 -1
  37. package/dist/billing/provider/asaas.js +194 -14
  38. package/dist/billing/provider/asaas.js.map +1 -1
  39. package/dist/billing/provider/manual.js +1 -1
  40. package/dist/billing/provider/manual.js.map +1 -1
  41. package/dist/billing/provider/types.d.ts +115 -8
  42. package/dist/billing/provider/types.d.ts.map +1 -1
  43. package/dist/billing/provider-account.d.ts +89 -0
  44. package/dist/billing/provider-account.d.ts.map +1 -0
  45. package/dist/billing/provider-account.js +161 -0
  46. package/dist/billing/provider-account.js.map +1 -0
  47. package/dist/billing/provider-onboarding.d.ts +67 -0
  48. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  49. package/dist/billing/provider-onboarding.js +234 -0
  50. package/dist/billing/provider-onboarding.js.map +1 -0
  51. package/dist/billing/receivable.d.ts +5 -1
  52. package/dist/billing/receivable.d.ts.map +1 -1
  53. package/dist/billing/reconcile.d.ts +58 -0
  54. package/dist/billing/reconcile.d.ts.map +1 -0
  55. package/dist/billing/reconcile.js +138 -0
  56. package/dist/billing/reconcile.js.map +1 -0
  57. package/dist/billing/repository.d.ts +90 -1
  58. package/dist/billing/repository.d.ts.map +1 -1
  59. package/dist/billing/repository.js +148 -19
  60. package/dist/billing/repository.js.map +1 -1
  61. package/dist/cjs/auth/password-reset.js +141 -11
  62. package/dist/cjs/auth/password-reset.js.map +1 -1
  63. package/dist/cjs/auth/service.js +75 -9
  64. package/dist/cjs/auth/service.js.map +1 -1
  65. package/dist/cjs/billing/ar-repository.js +728 -0
  66. package/dist/cjs/billing/ar-repository.js.map +1 -0
  67. package/dist/cjs/billing/auto-generation.js +186 -0
  68. package/dist/cjs/billing/auto-generation.js.map +1 -0
  69. package/dist/cjs/billing/live-guard.js +72 -0
  70. package/dist/cjs/billing/live-guard.js.map +1 -0
  71. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  72. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  73. package/dist/cjs/billing/payment-means.js +33 -0
  74. package/dist/cjs/billing/payment-means.js.map +1 -0
  75. package/dist/cjs/billing/payment-rail.js +301 -0
  76. package/dist/cjs/billing/payment-rail.js.map +1 -0
  77. package/dist/cjs/billing/provider/asaas.js +194 -14
  78. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  79. package/dist/cjs/billing/provider/manual.js +1 -1
  80. package/dist/cjs/billing/provider/manual.js.map +1 -1
  81. package/dist/cjs/billing/provider-account.js +170 -0
  82. package/dist/cjs/billing/provider-account.js.map +1 -0
  83. package/dist/cjs/billing/provider-onboarding.js +239 -0
  84. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  85. package/dist/cjs/billing/reconcile.js +143 -0
  86. package/dist/cjs/billing/reconcile.js.map +1 -0
  87. package/dist/cjs/billing/repository.js +150 -18
  88. package/dist/cjs/billing/repository.js.map +1 -1
  89. package/dist/cjs/clients/repository.js +96 -20
  90. package/dist/cjs/clients/repository.js.map +1 -1
  91. package/dist/cjs/collection/branding.js +140 -0
  92. package/dist/cjs/collection/branding.js.map +1 -0
  93. package/dist/cjs/collection/channel-accounts.js +137 -0
  94. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  95. package/dist/cjs/collection/channel.js +17 -0
  96. package/dist/cjs/collection/channel.js.map +1 -0
  97. package/dist/cjs/collection/communication-bridge.js +140 -0
  98. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  99. package/dist/cjs/collection/communication-runtime.js +193 -0
  100. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  101. package/dist/cjs/collection/consent-repository.js +84 -0
  102. package/dist/cjs/collection/consent-repository.js.map +1 -0
  103. package/dist/cjs/collection/copy.js +125 -0
  104. package/dist/cjs/collection/copy.js.map +1 -0
  105. package/dist/cjs/collection/delivery-callback.js +151 -0
  106. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  107. package/dist/cjs/collection/email-layout.js +252 -0
  108. package/dist/cjs/collection/email-layout.js.map +1 -0
  109. package/dist/cjs/collection/engine.js +414 -0
  110. package/dist/cjs/collection/engine.js.map +1 -0
  111. package/dist/cjs/collection/format.js +76 -0
  112. package/dist/cjs/collection/format.js.map +1 -0
  113. package/dist/cjs/collection/payment-block.js +3 -0
  114. package/dist/cjs/collection/payment-block.js.map +1 -0
  115. package/dist/cjs/collection/policy.js +147 -0
  116. package/dist/cjs/collection/policy.js.map +1 -0
  117. package/dist/cjs/collection/repository.js +260 -0
  118. package/dist/cjs/collection/repository.js.map +1 -0
  119. package/dist/cjs/collection/subject.js +104 -0
  120. package/dist/cjs/collection/subject.js.map +1 -0
  121. package/dist/cjs/collection/template-catalog.js +165 -0
  122. package/dist/cjs/collection/template-catalog.js.map +1 -0
  123. package/dist/cjs/collection/template.js +78 -0
  124. package/dist/cjs/collection/template.js.map +1 -0
  125. package/dist/cjs/communication/adapters/email.js +132 -0
  126. package/dist/cjs/communication/adapters/email.js.map +1 -0
  127. package/dist/cjs/communication/adapters/sms.js +127 -0
  128. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  129. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  130. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  131. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  132. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  133. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  134. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  135. package/dist/cjs/communication/audit.js +61 -0
  136. package/dist/cjs/communication/audit.js.map +1 -0
  137. package/dist/cjs/communication/capabilities.js +76 -0
  138. package/dist/cjs/communication/capabilities.js.map +1 -0
  139. package/dist/cjs/communication/channel.js +53 -0
  140. package/dist/cjs/communication/channel.js.map +1 -0
  141. package/dist/cjs/communication/claim.js +228 -0
  142. package/dist/cjs/communication/claim.js.map +1 -0
  143. package/dist/cjs/communication/consent.js +43 -0
  144. package/dist/cjs/communication/consent.js.map +1 -0
  145. package/dist/cjs/communication/context.js +45 -0
  146. package/dist/cjs/communication/context.js.map +1 -0
  147. package/dist/cjs/communication/credentials.js +121 -0
  148. package/dist/cjs/communication/credentials.js.map +1 -0
  149. package/dist/cjs/communication/dry-run-scenario.js +161 -0
  150. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  151. package/dist/cjs/communication/dry-run.js +97 -0
  152. package/dist/cjs/communication/dry-run.js.map +1 -0
  153. package/dist/cjs/communication/engine.js +483 -0
  154. package/dist/cjs/communication/engine.js.map +1 -0
  155. package/dist/cjs/communication/graph.js +50 -0
  156. package/dist/cjs/communication/graph.js.map +1 -0
  157. package/dist/cjs/communication/idempotency.js +26 -0
  158. package/dist/cjs/communication/idempotency.js.map +1 -0
  159. package/dist/cjs/communication/identity.js +110 -0
  160. package/dist/cjs/communication/identity.js.map +1 -0
  161. package/dist/cjs/communication/index.js +135 -0
  162. package/dist/cjs/communication/index.js.map +1 -0
  163. package/dist/cjs/communication/onboarding.js +297 -0
  164. package/dist/cjs/communication/onboarding.js.map +1 -0
  165. package/dist/cjs/communication/policy.js +16 -0
  166. package/dist/cjs/communication/policy.js.map +1 -0
  167. package/dist/cjs/communication/routing.js +77 -0
  168. package/dist/cjs/communication/routing.js.map +1 -0
  169. package/dist/cjs/communication/sender-profile.js +128 -0
  170. package/dist/cjs/communication/sender-profile.js.map +1 -0
  171. package/dist/cjs/communication/status.js +86 -0
  172. package/dist/cjs/communication/status.js.map +1 -0
  173. package/dist/cjs/communication/stores/onboarding.js +135 -0
  174. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  175. package/dist/cjs/communication/stores/postgres.js +458 -0
  176. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  177. package/dist/cjs/communication/stores/routing.js +334 -0
  178. package/dist/cjs/communication/stores/routing.js.map +1 -0
  179. package/dist/cjs/communication/stores/secrets.js +126 -0
  180. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  181. package/dist/cjs/communication/template-provider.js +22 -0
  182. package/dist/cjs/communication/template-provider.js.map +1 -0
  183. package/dist/cjs/communication/template.js +63 -0
  184. package/dist/cjs/communication/template.js.map +1 -0
  185. package/dist/cjs/communication/webhook-subscription.js +258 -0
  186. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  187. package/dist/cjs/communication/webhook.js +292 -0
  188. package/dist/cjs/communication/webhook.js.map +1 -0
  189. package/dist/cjs/competence/repository.js +309 -0
  190. package/dist/cjs/competence/repository.js.map +1 -0
  191. package/dist/cjs/contacts/phone.js +192 -0
  192. package/dist/cjs/contacts/phone.js.map +1 -0
  193. package/dist/cjs/db/seed-catalog.js +48 -0
  194. package/dist/cjs/db/seed-catalog.js.map +1 -0
  195. package/dist/cjs/db/seed.js +15 -7
  196. package/dist/cjs/db/seed.js.map +1 -1
  197. package/dist/cjs/documents/repository.js +244 -0
  198. package/dist/cjs/documents/repository.js.map +1 -0
  199. package/dist/cjs/documents/requests.js +136 -0
  200. package/dist/cjs/documents/requests.js.map +1 -0
  201. package/dist/cjs/index.js +406 -39
  202. package/dist/cjs/index.js.map +1 -1
  203. package/dist/cjs/legal/documents.js +125 -3
  204. package/dist/cjs/legal/documents.js.map +1 -1
  205. package/dist/cjs/legal/types.js +1 -0
  206. package/dist/cjs/legal/types.js.map +1 -1
  207. package/dist/cjs/mail/auth-templates.js +29 -0
  208. package/dist/cjs/mail/auth-templates.js.map +1 -0
  209. package/dist/cjs/mail/dedup-store.js +12 -51
  210. package/dist/cjs/mail/dedup-store.js.map +1 -1
  211. package/dist/cjs/mail/index.js +16 -4
  212. package/dist/cjs/mail/index.js.map +1 -1
  213. package/dist/cjs/mail/provider.js +12 -247
  214. package/dist/cjs/mail/provider.js.map +1 -1
  215. package/dist/cjs/mail/resend.js +14 -18
  216. package/dist/cjs/mail/resend.js.map +1 -1
  217. package/dist/cjs/mail/sender-resolver.js +12 -11
  218. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  219. package/dist/cjs/mail/template-renderer.js +11 -16
  220. package/dist/cjs/mail/template-renderer.js.map +1 -1
  221. package/dist/cjs/mail/transactional-outbound.js +117 -0
  222. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  223. package/dist/cjs/mail/types.js +8 -35
  224. package/dist/cjs/mail/types.js.map +1 -1
  225. package/dist/cjs/portal/provisioning.js +144 -0
  226. package/dist/cjs/portal/provisioning.js.map +1 -0
  227. package/dist/cjs/pricing-engine/canonical.js +42 -0
  228. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  229. package/dist/cjs/pricing-engine/errors.js +6 -1
  230. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  231. package/dist/cjs/pricing-engine/index.js +12 -1
  232. package/dist/cjs/pricing-engine/index.js.map +1 -1
  233. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  234. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  235. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  236. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  237. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  238. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  239. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  240. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  241. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  242. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  243. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  244. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  245. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  246. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  247. package/dist/cjs/rbac/authorize.js +28 -0
  248. package/dist/cjs/rbac/authorize.js.map +1 -1
  249. package/dist/cjs/rbac/catalog.js +67 -1
  250. package/dist/cjs/rbac/catalog.js.map +1 -1
  251. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  252. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  253. package/dist/cjs/rbac/workload.js +191 -0
  254. package/dist/cjs/rbac/workload.js.map +1 -0
  255. package/dist/cjs/storage/checksum.js +15 -0
  256. package/dist/cjs/storage/checksum.js.map +1 -0
  257. package/dist/cjs/storage/key.js +72 -0
  258. package/dist/cjs/storage/key.js.map +1 -0
  259. package/dist/cjs/storage/local.js +100 -0
  260. package/dist/cjs/storage/local.js.map +1 -0
  261. package/dist/cjs/storage/r2.js +181 -0
  262. package/dist/cjs/storage/r2.js.map +1 -0
  263. package/dist/cjs/storage/registry.js +41 -0
  264. package/dist/cjs/storage/registry.js.map +1 -0
  265. package/dist/cjs/storage/types.js +50 -0
  266. package/dist/cjs/storage/types.js.map +1 -0
  267. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  268. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  269. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  270. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  271. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  272. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  273. package/dist/cjs/subscription-billing/service.js +57 -8
  274. package/dist/cjs/subscription-billing/service.js.map +1 -1
  275. package/dist/cjs/subscription-billing/types.js.map +1 -1
  276. package/dist/cjs/tenancy/provisioning.js +32 -8
  277. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  278. package/dist/cjs/users/repository.js +119 -2
  279. package/dist/cjs/users/repository.js.map +1 -1
  280. package/dist/cjs/vault/repository.js +81 -0
  281. package/dist/cjs/vault/repository.js.map +1 -1
  282. package/dist/clients/repository.d.ts +42 -0
  283. package/dist/clients/repository.d.ts.map +1 -1
  284. package/dist/clients/repository.js +94 -21
  285. package/dist/clients/repository.js.map +1 -1
  286. package/dist/collection/branding.d.ts +72 -0
  287. package/dist/collection/branding.d.ts.map +1 -0
  288. package/dist/collection/branding.js +136 -0
  289. package/dist/collection/branding.js.map +1 -0
  290. package/dist/collection/channel-accounts.d.ts +57 -0
  291. package/dist/collection/channel-accounts.d.ts.map +1 -0
  292. package/dist/collection/channel-accounts.js +133 -0
  293. package/dist/collection/channel-accounts.js.map +1 -0
  294. package/dist/collection/channel.d.ts +24 -0
  295. package/dist/collection/channel.d.ts.map +1 -0
  296. package/dist/collection/channel.js +16 -0
  297. package/dist/collection/channel.js.map +1 -0
  298. package/dist/collection/communication-bridge.d.ts +66 -0
  299. package/dist/collection/communication-bridge.d.ts.map +1 -0
  300. package/dist/collection/communication-bridge.js +134 -0
  301. package/dist/collection/communication-bridge.js.map +1 -0
  302. package/dist/collection/communication-runtime.d.ts +95 -0
  303. package/dist/collection/communication-runtime.d.ts.map +1 -0
  304. package/dist/collection/communication-runtime.js +187 -0
  305. package/dist/collection/communication-runtime.js.map +1 -0
  306. package/dist/collection/consent-repository.d.ts +32 -0
  307. package/dist/collection/consent-repository.d.ts.map +1 -0
  308. package/dist/collection/consent-repository.js +79 -0
  309. package/dist/collection/consent-repository.js.map +1 -0
  310. package/dist/collection/copy.d.ts +50 -0
  311. package/dist/collection/copy.d.ts.map +1 -0
  312. package/dist/collection/copy.js +122 -0
  313. package/dist/collection/copy.js.map +1 -0
  314. package/dist/collection/delivery-callback.d.ts +49 -0
  315. package/dist/collection/delivery-callback.d.ts.map +1 -0
  316. package/dist/collection/delivery-callback.js +147 -0
  317. package/dist/collection/delivery-callback.js.map +1 -0
  318. package/dist/collection/email-layout.d.ts +45 -0
  319. package/dist/collection/email-layout.d.ts.map +1 -0
  320. package/dist/collection/email-layout.js +247 -0
  321. package/dist/collection/email-layout.js.map +1 -0
  322. package/dist/collection/engine.d.ts +177 -0
  323. package/dist/collection/engine.d.ts.map +1 -0
  324. package/dist/collection/engine.js +407 -0
  325. package/dist/collection/engine.js.map +1 -0
  326. package/dist/collection/format.d.ts +32 -0
  327. package/dist/collection/format.d.ts.map +1 -0
  328. package/dist/collection/format.js +70 -0
  329. package/dist/collection/format.js.map +1 -0
  330. package/dist/collection/payment-block.d.ts +24 -0
  331. package/dist/collection/payment-block.d.ts.map +1 -0
  332. package/dist/collection/payment-block.js +2 -0
  333. package/dist/collection/payment-block.js.map +1 -0
  334. package/dist/collection/policy.d.ts +53 -0
  335. package/dist/collection/policy.d.ts.map +1 -0
  336. package/dist/collection/policy.js +141 -0
  337. package/dist/collection/policy.js.map +1 -0
  338. package/dist/collection/repository.d.ts +129 -0
  339. package/dist/collection/repository.d.ts.map +1 -0
  340. package/dist/collection/repository.js +246 -0
  341. package/dist/collection/repository.js.map +1 -0
  342. package/dist/collection/subject.d.ts +66 -0
  343. package/dist/collection/subject.d.ts.map +1 -0
  344. package/dist/collection/subject.js +99 -0
  345. package/dist/collection/subject.js.map +1 -0
  346. package/dist/collection/template-catalog.d.ts +16 -0
  347. package/dist/collection/template-catalog.d.ts.map +1 -0
  348. package/dist/collection/template-catalog.js +162 -0
  349. package/dist/collection/template-catalog.js.map +1 -0
  350. package/dist/collection/template.d.ts +37 -0
  351. package/dist/collection/template.d.ts.map +1 -0
  352. package/dist/collection/template.js +73 -0
  353. package/dist/collection/template.js.map +1 -0
  354. package/dist/communication/adapters/email.d.ts +28 -0
  355. package/dist/communication/adapters/email.d.ts.map +1 -0
  356. package/dist/communication/adapters/email.js +129 -0
  357. package/dist/communication/adapters/email.js.map +1 -0
  358. package/dist/communication/adapters/sms.d.ts +95 -0
  359. package/dist/communication/adapters/sms.d.ts.map +1 -0
  360. package/dist/communication/adapters/sms.js +121 -0
  361. package/dist/communication/adapters/sms.js.map +1 -0
  362. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  363. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  364. package/dist/communication/adapters/whatsapp-language.js +36 -0
  365. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  366. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  367. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  368. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  369. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  370. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  371. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  372. package/dist/communication/adapters/whatsapp.js +210 -0
  373. package/dist/communication/adapters/whatsapp.js.map +1 -0
  374. package/dist/communication/audit.d.ts +105 -0
  375. package/dist/communication/audit.d.ts.map +1 -0
  376. package/dist/communication/audit.js +56 -0
  377. package/dist/communication/audit.js.map +1 -0
  378. package/dist/communication/capabilities.d.ts +88 -0
  379. package/dist/communication/capabilities.d.ts.map +1 -0
  380. package/dist/communication/capabilities.js +72 -0
  381. package/dist/communication/capabilities.js.map +1 -0
  382. package/dist/communication/channel.d.ts +125 -0
  383. package/dist/communication/channel.d.ts.map +1 -0
  384. package/dist/communication/channel.js +47 -0
  385. package/dist/communication/channel.js.map +1 -0
  386. package/dist/communication/claim.d.ts +368 -0
  387. package/dist/communication/claim.d.ts.map +1 -0
  388. package/dist/communication/claim.js +224 -0
  389. package/dist/communication/claim.js.map +1 -0
  390. package/dist/communication/consent.d.ts +65 -0
  391. package/dist/communication/consent.d.ts.map +1 -0
  392. package/dist/communication/consent.js +40 -0
  393. package/dist/communication/consent.js.map +1 -0
  394. package/dist/communication/context.d.ts +48 -0
  395. package/dist/communication/context.d.ts.map +1 -0
  396. package/dist/communication/context.js +41 -0
  397. package/dist/communication/context.js.map +1 -0
  398. package/dist/communication/credentials.d.ts +74 -0
  399. package/dist/communication/credentials.d.ts.map +1 -0
  400. package/dist/communication/credentials.js +115 -0
  401. package/dist/communication/credentials.js.map +1 -0
  402. package/dist/communication/dry-run-scenario.d.ts +37 -0
  403. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  404. package/dist/communication/dry-run-scenario.js +158 -0
  405. package/dist/communication/dry-run-scenario.js.map +1 -0
  406. package/dist/communication/dry-run.d.ts +40 -0
  407. package/dist/communication/dry-run.d.ts.map +1 -0
  408. package/dist/communication/dry-run.js +92 -0
  409. package/dist/communication/dry-run.js.map +1 -0
  410. package/dist/communication/engine.d.ts +153 -0
  411. package/dist/communication/engine.d.ts.map +1 -0
  412. package/dist/communication/engine.js +480 -0
  413. package/dist/communication/engine.js.map +1 -0
  414. package/dist/communication/graph.d.ts +38 -0
  415. package/dist/communication/graph.d.ts.map +1 -0
  416. package/dist/communication/graph.js +45 -0
  417. package/dist/communication/graph.js.map +1 -0
  418. package/dist/communication/idempotency.d.ts +33 -0
  419. package/dist/communication/idempotency.d.ts.map +1 -0
  420. package/dist/communication/idempotency.js +23 -0
  421. package/dist/communication/idempotency.js.map +1 -0
  422. package/dist/communication/identity.d.ts +127 -0
  423. package/dist/communication/identity.d.ts.map +1 -0
  424. package/dist/communication/identity.js +105 -0
  425. package/dist/communication/identity.js.map +1 -0
  426. package/dist/communication/index.d.ts +66 -0
  427. package/dist/communication/index.d.ts.map +1 -0
  428. package/dist/communication/index.js +42 -0
  429. package/dist/communication/index.js.map +1 -0
  430. package/dist/communication/onboarding.d.ts +223 -0
  431. package/dist/communication/onboarding.d.ts.map +1 -0
  432. package/dist/communication/onboarding.js +287 -0
  433. package/dist/communication/onboarding.js.map +1 -0
  434. package/dist/communication/policy.d.ts +99 -0
  435. package/dist/communication/policy.d.ts.map +1 -0
  436. package/dist/communication/policy.js +13 -0
  437. package/dist/communication/policy.js.map +1 -0
  438. package/dist/communication/routing.d.ts +99 -0
  439. package/dist/communication/routing.d.ts.map +1 -0
  440. package/dist/communication/routing.js +73 -0
  441. package/dist/communication/routing.js.map +1 -0
  442. package/dist/communication/sender-profile.d.ts +100 -0
  443. package/dist/communication/sender-profile.d.ts.map +1 -0
  444. package/dist/communication/sender-profile.js +123 -0
  445. package/dist/communication/sender-profile.js.map +1 -0
  446. package/dist/communication/status.d.ts +48 -0
  447. package/dist/communication/status.d.ts.map +1 -0
  448. package/dist/communication/status.js +79 -0
  449. package/dist/communication/status.js.map +1 -0
  450. package/dist/communication/stores/onboarding.d.ts +88 -0
  451. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  452. package/dist/communication/stores/onboarding.js +127 -0
  453. package/dist/communication/stores/onboarding.js.map +1 -0
  454. package/dist/communication/stores/postgres.d.ts +81 -0
  455. package/dist/communication/stores/postgres.d.ts.map +1 -0
  456. package/dist/communication/stores/postgres.js +453 -0
  457. package/dist/communication/stores/postgres.js.map +1 -0
  458. package/dist/communication/stores/routing.d.ts +169 -0
  459. package/dist/communication/stores/routing.d.ts.map +1 -0
  460. package/dist/communication/stores/routing.js +324 -0
  461. package/dist/communication/stores/routing.js.map +1 -0
  462. package/dist/communication/stores/secrets.d.ts +89 -0
  463. package/dist/communication/stores/secrets.d.ts.map +1 -0
  464. package/dist/communication/stores/secrets.js +122 -0
  465. package/dist/communication/stores/secrets.js.map +1 -0
  466. package/dist/communication/template-provider.d.ts +85 -0
  467. package/dist/communication/template-provider.d.ts.map +1 -0
  468. package/dist/communication/template-provider.js +21 -0
  469. package/dist/communication/template-provider.js.map +1 -0
  470. package/dist/communication/template.d.ts +87 -0
  471. package/dist/communication/template.d.ts.map +1 -0
  472. package/dist/communication/template.js +59 -0
  473. package/dist/communication/template.js.map +1 -0
  474. package/dist/communication/webhook-subscription.d.ts +156 -0
  475. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  476. package/dist/communication/webhook-subscription.js +252 -0
  477. package/dist/communication/webhook-subscription.js.map +1 -0
  478. package/dist/communication/webhook.d.ts +121 -0
  479. package/dist/communication/webhook.d.ts.map +1 -0
  480. package/dist/communication/webhook.js +283 -0
  481. package/dist/communication/webhook.js.map +1 -0
  482. package/dist/competence/repository.d.ts +147 -0
  483. package/dist/competence/repository.d.ts.map +1 -0
  484. package/dist/competence/repository.js +294 -0
  485. package/dist/competence/repository.js.map +1 -0
  486. package/dist/contacts/phone.d.ts +70 -0
  487. package/dist/contacts/phone.d.ts.map +1 -0
  488. package/dist/contacts/phone.js +186 -0
  489. package/dist/contacts/phone.js.map +1 -0
  490. package/dist/db/migrate.js +17 -11
  491. package/dist/db/migrate.js.map +1 -1
  492. package/dist/db/seed-catalog.d.ts +18 -0
  493. package/dist/db/seed-catalog.d.ts.map +1 -0
  494. package/dist/db/seed-catalog.js +45 -0
  495. package/dist/db/seed-catalog.js.map +1 -0
  496. package/dist/db/seed.js +16 -8
  497. package/dist/db/seed.js.map +1 -1
  498. package/dist/documents/repository.d.ts +97 -0
  499. package/dist/documents/repository.d.ts.map +1 -0
  500. package/dist/documents/repository.js +236 -0
  501. package/dist/documents/repository.js.map +1 -0
  502. package/dist/documents/requests.d.ts +73 -0
  503. package/dist/documents/requests.d.ts.map +1 -0
  504. package/dist/documents/requests.js +127 -0
  505. package/dist/documents/requests.js.map +1 -0
  506. package/dist/index.d.ts +109 -13
  507. package/dist/index.d.ts.map +1 -1
  508. package/dist/index.js +100 -8
  509. package/dist/index.js.map +1 -1
  510. package/dist/legal/documents.d.ts.map +1 -1
  511. package/dist/legal/documents.js +125 -3
  512. package/dist/legal/documents.js.map +1 -1
  513. package/dist/legal/index.d.ts +1 -1
  514. package/dist/legal/index.d.ts.map +1 -1
  515. package/dist/legal/types.d.ts +32 -1
  516. package/dist/legal/types.d.ts.map +1 -1
  517. package/dist/legal/types.js +1 -0
  518. package/dist/legal/types.js.map +1 -1
  519. package/dist/mail/auth-templates.d.ts +15 -0
  520. package/dist/mail/auth-templates.d.ts.map +1 -0
  521. package/dist/mail/auth-templates.js +26 -0
  522. package/dist/mail/auth-templates.js.map +1 -0
  523. package/dist/mail/dedup-store.d.ts +1 -24
  524. package/dist/mail/dedup-store.d.ts.map +1 -1
  525. package/dist/mail/dedup-store.js +9 -48
  526. package/dist/mail/dedup-store.js.map +1 -1
  527. package/dist/mail/index.d.ts +2 -1
  528. package/dist/mail/index.d.ts.map +1 -1
  529. package/dist/mail/index.js +13 -2
  530. package/dist/mail/index.js.map +1 -1
  531. package/dist/mail/provider.d.ts +2 -30
  532. package/dist/mail/provider.d.ts.map +1 -1
  533. package/dist/mail/provider.js +10 -246
  534. package/dist/mail/provider.js.map +1 -1
  535. package/dist/mail/resend.d.ts +2 -12
  536. package/dist/mail/resend.d.ts.map +1 -1
  537. package/dist/mail/resend.js +11 -17
  538. package/dist/mail/resend.js.map +1 -1
  539. package/dist/mail/sender-resolver.d.ts +1 -7
  540. package/dist/mail/sender-resolver.d.ts.map +1 -1
  541. package/dist/mail/sender-resolver.js +11 -10
  542. package/dist/mail/sender-resolver.js.map +1 -1
  543. package/dist/mail/template-renderer.d.ts +1 -9
  544. package/dist/mail/template-renderer.d.ts.map +1 -1
  545. package/dist/mail/template-renderer.js +10 -15
  546. package/dist/mail/template-renderer.js.map +1 -1
  547. package/dist/mail/transactional-outbound.d.ts +115 -0
  548. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  549. package/dist/mail/transactional-outbound.js +113 -0
  550. package/dist/mail/transactional-outbound.js.map +1 -0
  551. package/dist/mail/types.d.ts +2 -142
  552. package/dist/mail/types.d.ts.map +1 -1
  553. package/dist/mail/types.js +1 -33
  554. package/dist/mail/types.js.map +1 -1
  555. package/dist/portal/provisioning.d.ts +58 -0
  556. package/dist/portal/provisioning.d.ts.map +1 -0
  557. package/dist/portal/provisioning.js +139 -0
  558. package/dist/portal/provisioning.js.map +1 -0
  559. package/dist/pricing-engine/canonical.d.ts +14 -0
  560. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  561. package/dist/pricing-engine/canonical.js +39 -0
  562. package/dist/pricing-engine/canonical.js.map +1 -0
  563. package/dist/pricing-engine/errors.d.ts.map +1 -1
  564. package/dist/pricing-engine/errors.js +6 -1
  565. package/dist/pricing-engine/errors.js.map +1 -1
  566. package/dist/pricing-engine/index.d.ts +12 -2
  567. package/dist/pricing-engine/index.d.ts.map +1 -1
  568. package/dist/pricing-engine/index.js +6 -1
  569. package/dist/pricing-engine/index.js.map +1 -1
  570. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  571. package/dist/pricing-engine/pipeline.js +202 -28
  572. package/dist/pricing-engine/pipeline.js.map +1 -1
  573. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  574. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  575. package/dist/pricing-engine/shadow-adapter.js +75 -0
  576. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  577. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  578. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  579. package/dist/pricing-engine/shadow-diff.js +52 -0
  580. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  581. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  582. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  583. package/dist/pricing-engine/shadow-facade.js +82 -0
  584. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  585. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  586. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  587. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  588. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  589. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  590. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  591. package/dist/pricing-engine/shadow-metrics.js +31 -0
  592. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  593. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  594. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  595. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  596. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  597. package/dist/pricing-engine/types.d.ts +2 -0
  598. package/dist/pricing-engine/types.d.ts.map +1 -1
  599. package/dist/rbac/authorize.d.ts +12 -0
  600. package/dist/rbac/authorize.d.ts.map +1 -1
  601. package/dist/rbac/authorize.js +27 -0
  602. package/dist/rbac/authorize.js.map +1 -1
  603. package/dist/rbac/catalog.d.ts.map +1 -1
  604. package/dist/rbac/catalog.js +67 -1
  605. package/dist/rbac/catalog.js.map +1 -1
  606. package/dist/rbac/workload-provisioning.d.ts +66 -0
  607. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  608. package/dist/rbac/workload-provisioning.js +153 -0
  609. package/dist/rbac/workload-provisioning.js.map +1 -0
  610. package/dist/rbac/workload.d.ts +124 -0
  611. package/dist/rbac/workload.d.ts.map +1 -0
  612. package/dist/rbac/workload.js +184 -0
  613. package/dist/rbac/workload.js.map +1 -0
  614. package/dist/storage/checksum.d.ts +9 -0
  615. package/dist/storage/checksum.d.ts.map +1 -0
  616. package/dist/storage/checksum.js +12 -0
  617. package/dist/storage/checksum.js.map +1 -0
  618. package/dist/storage/key.d.ts +37 -0
  619. package/dist/storage/key.d.ts.map +1 -0
  620. package/dist/storage/key.js +67 -0
  621. package/dist/storage/key.js.map +1 -0
  622. package/dist/storage/local.d.ts +40 -0
  623. package/dist/storage/local.d.ts.map +1 -0
  624. package/dist/storage/local.js +96 -0
  625. package/dist/storage/local.js.map +1 -0
  626. package/dist/storage/r2.d.ts +43 -0
  627. package/dist/storage/r2.d.ts.map +1 -0
  628. package/dist/storage/r2.js +177 -0
  629. package/dist/storage/r2.js.map +1 -0
  630. package/dist/storage/registry.d.ts +23 -0
  631. package/dist/storage/registry.d.ts.map +1 -0
  632. package/dist/storage/registry.js +37 -0
  633. package/dist/storage/registry.js.map +1 -0
  634. package/dist/storage/types.d.ts +67 -0
  635. package/dist/storage/types.d.ts.map +1 -0
  636. package/dist/storage/types.js +45 -0
  637. package/dist/storage/types.js.map +1 -0
  638. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  639. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  640. package/dist/subscription-billing/provider/asaas.js +32 -7
  641. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  642. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  643. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  644. package/dist/subscription-billing/provider/disabled.js +8 -0
  645. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  646. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  647. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  648. package/dist/subscription-billing/provider/registry.js +17 -0
  649. package/dist/subscription-billing/provider/registry.js.map +1 -1
  650. package/dist/subscription-billing/service.d.ts +17 -1
  651. package/dist/subscription-billing/service.d.ts.map +1 -1
  652. package/dist/subscription-billing/service.js +57 -8
  653. package/dist/subscription-billing/service.js.map +1 -1
  654. package/dist/subscription-billing/types.d.ts +13 -0
  655. package/dist/subscription-billing/types.d.ts.map +1 -1
  656. package/dist/subscription-billing/types.js.map +1 -1
  657. package/dist/tenancy/provisioning.d.ts.map +1 -1
  658. package/dist/tenancy/provisioning.js +32 -8
  659. package/dist/tenancy/provisioning.js.map +1 -1
  660. package/dist/users/repository.d.ts +38 -0
  661. package/dist/users/repository.d.ts.map +1 -1
  662. package/dist/users/repository.js +118 -3
  663. package/dist/users/repository.js.map +1 -1
  664. package/dist/vault/repository.d.ts +67 -0
  665. package/dist/vault/repository.d.ts.map +1 -1
  666. package/dist/vault/repository.js +78 -0
  667. package/dist/vault/repository.js.map +1 -1
  668. package/package.json +13 -4
  669. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  670. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  671. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  672. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  673. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  674. package/src/db/migrations/0028_collection_engine.sql +94 -0
  675. package/src/db/migrations/0029_payment_rail.sql +107 -0
  676. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  677. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  678. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  679. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  680. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  681. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  682. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  683. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  684. package/src/db/migrations/0038_notification_channels.sql +175 -0
  685. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  686. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  687. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  688. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  689. package/src/db/migrations/0043_workload_identity.sql +105 -0
  690. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  691. package/dist/cjs/mail/resend-client.js +0 -103
  692. package/dist/cjs/mail/resend-client.js.map +0 -1
  693. package/dist/mail/resend-client.d.ts +0 -16
  694. package/dist/mail/resend-client.d.ts.map +0 -1
  695. package/dist/mail/resend-client.js +0 -100
  696. package/dist/mail/resend-client.js.map +0 -1
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Trilha de comunicação — o que o motor decidiu, e por quê.
4
+ *
5
+ * **Não é log.** Log é texto que alguém talvez leia; isto é registro estruturado
6
+ * e consultável, com um vocabulário fechado de eventos. A diferença aparece na
7
+ * pergunta que o escritório faz de verdade: "por que este cliente não recebeu?".
8
+ * Um `console.warn` responde isso para quem estiver com o terminal aberto no
9
+ * instante certo; uma trilha responde seis meses depois.
10
+ *
11
+ * A trilha financeira (`dunning_event`) continua sendo o estado da ETAPA da
12
+ * régua. Esta é o histórico da INTENÇÃO de comunicar — que é outra coisa: uma
13
+ * etapa pode ter uma intenção recusada por consentimento, outra por telefone
14
+ * inválido e uma terceira entregue, e `dunning_event` só guarda o desfecho final
15
+ * de uma delas.
16
+ *
17
+ * O que NUNCA entra aqui: valor de credencial, corpo de mensagem, telefone,
18
+ * e-mail. O destinatário aparece como referência lógica (`recipientRef`), que já
19
+ * é o vocabulário do consumidor.
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.createNullAuditSink = createNullAuditSink;
23
+ exports.createRecordingAuditSink = createRecordingAuditSink;
24
+ exports.eventKindForSkip = eventKindForSkip;
25
+ /**
26
+ * Sink que não grava nada.
27
+ *
28
+ * Existe para consumidores que ainda não têm armazenamento, e é EXPLÍCITO de
29
+ * propósito: um sink opcional viraria `deps.audit?.record(...)` espalhado pelo
30
+ * motor, e a diferença entre "não configurou trilha" e "esqueceu de chamar"
31
+ * deixaria de ser visível.
32
+ */
33
+ function createNullAuditSink() {
34
+ return { async record() { } };
35
+ }
36
+ /** Coleta em memória — para teste e para o relatório de dry-run. */
37
+ function createRecordingAuditSink() {
38
+ const events = [];
39
+ return {
40
+ events,
41
+ async record(event) {
42
+ events.push(event);
43
+ },
44
+ };
45
+ }
46
+ /**
47
+ * De qual evento de trilha um pulo é.
48
+ *
49
+ * Três motivos ganham nome próprio porque exigem ações operacionais opostas:
50
+ * opt-out é decisão do cliente (e ninguém no escritório deve "resolver"), falta
51
+ * de contato é cadastro, e o resto é ambiente. Colapsá-los em `dispatch_skipped`
52
+ * mandaria o escritório procurar no lugar errado nos dois primeiros casos.
53
+ */
54
+ function eventKindForSkip(reason) {
55
+ if (reason === 'opted_out')
56
+ return 'consent_blocked';
57
+ if (reason === 'no_recipient' || reason === 'invalid_recipient')
58
+ return 'invalid_contact';
59
+ return 'dispatch_skipped';
60
+ }
61
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/communication/audit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AA6EH,kDAEC;AAGD,4DAUC;AAUD,4CAIC;AArCD;;;;;;;GAOG;AACH,SAAgB,mBAAmB;IACjC,OAAO,EAAE,KAAK,CAAC,MAAM,KAAmB,CAAC,EAAE,CAAC;AAC9C,CAAC;AAED,oEAAoE;AACpE,SAAgB,wBAAwB;IAGtC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,OAAO;QACL,MAAM;QACN,KAAK,CAAC,MAAM,CAAC,KAAyB;YACpC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,gBAAgB,CAAC,MAAkB;IACjD,IAAI,MAAM,KAAK,WAAW;QAAE,OAAO,iBAAiB,CAAC;IACrD,IAAI,MAAM,KAAK,cAAc,IAAI,MAAM,KAAK,mBAAmB;QAAE,OAAO,iBAAiB,CAAC;IAC1F,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ /**
3
+ * O que o PROVIDER por trás de um canal garante — declarado pelo adapter.
4
+ *
5
+ * Existe para que o motor possa tomar uma decisão que depende do provider sem
6
+ * nunca saber qual provider é. A alternativa é a que o certificador proibiu
7
+ * explicitamente:
8
+ *
9
+ * if (provider === 'resend') { ...reenvia... } else { ...não reenvia... }
10
+ *
11
+ * Espalhado pelo núcleo, esse `if` transforma "trocar de provider" em mudança de
12
+ * regra de negócio, e faz o motor compartilhado carregar o catálogo de fornecedor
13
+ * de cada produto. Aqui o adapter DECLARA a garantia e o motor lê a declaração.
14
+ *
15
+ * **Toda capability nasce `false`.** O default não é conservadorismo estético: um
16
+ * campo opcional que o adapter esquece de declarar viraria uma garantia
17
+ * imaginária, e a consequência de imaginar idempotência que não existe é o
18
+ * cliente recebendo a mesma cobrança duas vezes. Quem tem a garantia declara; o
19
+ * silêncio significa ausência.
20
+ *
21
+ * **A declaração descreve o que ESTE ADAPTER exerce, não o que o provider anuncia
22
+ * no site.** O Resend publica webhooks de entrega; o adapter de e-mail daqui não
23
+ * consome nenhum, então `supportsDeliveryWebhook` é `false` para ele. Declarar a
24
+ * capacidade do fornecedor em vez da capacidade do código seria documentar uma
25
+ * integração que não existe — que é o defeito `DOCUMENTATION_MATCHES_RUNTIME`.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.RESEND_IDEMPOTENCY_WINDOW_MS = exports.NO_PROVIDER_GUARANTEES = void 0;
29
+ exports.providerIdempotencyCovers = providerIdempotencyCovers;
30
+ /**
31
+ * Nenhuma garantia externa. É o que vale para todo canal que não declare o
32
+ * contrário — e é o que faz um adapter novo nascer seguro em vez de nascer
33
+ * otimista.
34
+ */
35
+ exports.NO_PROVIDER_GUARANTEES = {
36
+ supportsProviderIdempotency: false,
37
+ supportsMessageLookup: false,
38
+ supportsDeliveryWebhook: false,
39
+ supportsReadReceipt: false,
40
+ };
41
+ /**
42
+ * Reenviar com a MESMA chave é seguro agora?
43
+ *
44
+ * Chamado quando o desfecho da tentativa anterior é desconhecido — o titular da
45
+ * reserva chamou o provider e morreu antes de assentar. A pergunta não é "o
46
+ * provider tem idempotência", é "a chave que eu usei ainda está viva lá".
47
+ *
48
+ * Fora da janela, a chave já não significa nada para o provider: a segunda
49
+ * chamada seria uma mensagem nova, e o cliente receberia duas. Por isso a
50
+ * expiração devolve `false` — e o motor, sem cobertura, não reenvia.
51
+ *
52
+ * **Recebe IDADE, não instante.** A diferença não é estética: o instante da
53
+ * primeira chamada é medido pelo relógio de quem guardou o dado (o `now()` do
54
+ * banco), e compará-lo com o `Date.now()` do processo mistura dois relógios que
55
+ * não têm obrigação de concordar. Numa deriva de poucos segundos isso passa
56
+ * despercebido; num processo com relógio adiantado, "dentro da janela" vira
57
+ * "fora" e o motor deixa de reenviar o que podia — ou o contrário. Quem guarda o
58
+ * dado calcula a idade, e a comparação acontece numa escala só.
59
+ *
60
+ * `ageMs` ausente significa que nenhuma chamada externa foi registrada, e aí não
61
+ * há o que cobrir: quem pergunta nesse estado está perguntando a coisa errada,
62
+ * então a resposta é `false`.
63
+ */
64
+ function providerIdempotencyCovers(capabilities, ageMs) {
65
+ if (!capabilities.supportsProviderIdempotency)
66
+ return false;
67
+ const window = capabilities.providerIdempotencyWindowMs;
68
+ if (!window || window <= 0)
69
+ return false;
70
+ if (ageMs === null || ageMs < 0)
71
+ return false;
72
+ return ageMs < window;
73
+ }
74
+ /** Janela de idempotência do Resend: 24 horas. Ver `adapters/email.ts`. */
75
+ exports.RESEND_IDEMPOTENCY_WINDOW_MS = 24 * 60 * 60 * 1000;
76
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/communication/capabilities.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;;;AAoEH,8DASC;AA5CD;;;;GAIG;AACU,QAAA,sBAAsB,GAAwB;IACzD,2BAA2B,EAAE,KAAK;IAClC,qBAAqB,EAAE,KAAK;IAC5B,uBAAuB,EAAE,KAAK;IAC9B,mBAAmB,EAAE,KAAK;CAC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,yBAAyB,CACvC,YAAiC,EACjC,KAAoB;IAEpB,IAAI,CAAC,YAAY,CAAC,2BAA2B;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,2BAA2B,CAAC;IACxD,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,KAAK,GAAG,MAAM,CAAC;AACxB,CAAC;AAED,2EAA2E;AAC9D,QAAA,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Contrato canônico de canal do ecossistema — e-mail, WhatsApp, SMS e
4
+ * notificação interna sob a mesma interface.
5
+ *
6
+ * O ponto de desenho está no CONTEÚDO, não na interface. A abstração de canal
7
+ * que já existia na cobrança da SC (`collection/channel.ts`) carregava
8
+ * `subject` + `html` obrigatórios: um payload de e-mail com nome genérico. Um
9
+ * adapter de WhatsApp receberia HTML renderizado e teria de desmontá-lo de
10
+ * volta em texto, e um de SMS idem — o canal vazando para dentro do domínio
11
+ * pela porta do payload.
12
+ *
13
+ * Aqui o conteúdo é uma união discriminada, resolvida DEPOIS que o canal foi
14
+ * escolhido. Cada canal recebe o que sabe entregar, e o compilador recusa o
15
+ * resto.
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.CHANNEL_ACCEPTS = exports.CHANNEL_KEYS = void 0;
19
+ exports.channelAccepts = channelAccepts;
20
+ exports.unavailableChannel = unavailableChannel;
21
+ exports.resolveChannel = resolveChannel;
22
+ const capabilities_js_1 = require("./capabilities.js");
23
+ exports.CHANNEL_KEYS = ['email', 'whatsapp', 'sms', 'notification'];
24
+ /** Quais conteúdos cada canal aceita. Consultado antes do envio, não dentro do adapter. */
25
+ exports.CHANNEL_ACCEPTS = {
26
+ email: ['email'],
27
+ whatsapp: ['whatsapp_template', 'text'],
28
+ sms: ['text'],
29
+ notification: ['text'],
30
+ };
31
+ function channelAccepts(channel, content) {
32
+ return exports.CHANNEL_ACCEPTS[channel].includes(content.kind);
33
+ }
34
+ /**
35
+ * Canal indisponível.
36
+ *
37
+ * Deliberadamente NÃO simula entrega. Um adapter que responde `sent` sem enviar
38
+ * transforma a trilha em ficção: o escritório vê "cobrado" e o cliente nunca
39
+ * recebeu nada. Herdado da abstração da SC, que já acertou isso.
40
+ */
41
+ function unavailableChannel(key, reason) {
42
+ return {
43
+ key,
44
+ providerName: 'none',
45
+ capabilities: capabilities_js_1.NO_PROVIDER_GUARANTEES,
46
+ isConfigured: () => false,
47
+ send: async () => ({ kind: 'unavailable', code: 'channel_not_configured', detail: reason }),
48
+ };
49
+ }
50
+ function resolveChannel(registry, key) {
51
+ return registry[key] ?? unavailableChannel(key, `canal ${key} não registrado`);
52
+ }
53
+ //# sourceMappingURL=channel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../../../src/communication/channel.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;AAsCH,wCAEC;AA0ED,gDAQC;AAID,wCAEC;AA7HD,uDAA2D;AAK9C,QAAA,YAAY,GAA0B,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AAsBhG,2FAA2F;AAC9E,QAAA,eAAe,GAA0D;IACpF,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACvC,GAAG,EAAE,CAAC,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,MAAM,CAAC;CACvB,CAAC;AAEF,SAAgB,cAAc,CAAC,OAAmB,EAAE,OAAuB;IACzE,OAAO,uBAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAmED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,GAAe,EAAE,MAAc;IAChE,OAAO;QACL,GAAG;QACH,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,wCAAsB;QACpC,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK;QACzB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;KAC5F,CAAC;AACJ,CAAC;AAID,SAAgB,cAAc,CAAC,QAAyB,EAAE,GAAe;IACvE,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,iBAAiB,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,228 @@
1
+ "use strict";
2
+ /**
3
+ * Reserva atômica do direito de enviar.
4
+ *
5
+ * O desenho anterior era, em substância:
6
+ *
7
+ * alreadySent(key) → adapter.send() → markSent(key)
8
+ *
9
+ * Três passos, e o intervalo entre o primeiro e o terceiro é uma janela aberta:
10
+ * dois workers que perguntam "já enviei?" ao mesmo tempo recebem "não" os dois,
11
+ * e os dois chamam o provider. O cliente recebe a mesma cobrança duas vezes. A
12
+ * marcação posterior não conserta nada — o dinheiro do envio já saiu, e a
13
+ * mensagem também.
14
+ *
15
+ * Aqui a ordem é outra:
16
+ *
17
+ * claim(key) → markProviderAttempt → [só o vencedor] send() → settle
18
+ *
19
+ * `claim` é uma operação ÚNICA e atômica no armazenamento: ou ela devolve a
20
+ * reserva, ou devolve o motivo de não ter devolvido. Não existe estado
21
+ * intermediário observável entre "verifiquei" e "reservei", porque não há dois
22
+ * momentos. Quem não ganhou a reserva não chama o provider — nem para "tentar de
23
+ * novo mais rápido".
24
+ *
25
+ * **A reserva vem ANTES do efeito externo, e essa é a regra inteira.** Qualquer
26
+ * proteção que aconteça depois de `send` é contabilidade do que já foi feito,
27
+ * não controle.
28
+ *
29
+ * ## O que a H2 acrescentou, e por quê
30
+ *
31
+ * A reserva tem prazo, porque processo morre segurando reserva e uma etapa calada
32
+ * para sempre é pior que uma duplicata rara. Mas retomar por prazo vencido, do
33
+ * jeito que estava, era retomar **às cegas**: o motor não tinha como distinguir
34
+ *
35
+ * (a) o titular anterior morreu ANTES de falar com o provider — nada saiu, e
36
+ * reenviar é obviamente certo;
37
+ * (b) o titular anterior morreu DEPOIS de falar com o provider — pode ter saído,
38
+ * e reenviar duplica.
39
+ *
40
+ * Os dois casos chegavam aqui com a mesma cara. `markProviderAttempt` é o que os
41
+ * separa: uma marca durável, gravada IMEDIATAMENTE antes da chamada externa, em
42
+ * fronteira própria. Quem retoma uma reserva que já tinha essa marca sabe que o
43
+ * desfecho é **desconhecido**, não "não enviado" — e desconhecido não autoriza
44
+ * reenvio cego.
45
+ *
46
+ * A marca é conservadora de propósito: gravar antes de chamar significa que um
47
+ * processo que morre entre a marca e a chamada é classificado como "pode ter
48
+ * enviado" quando não enviou. Erra para o lado de calar uma mensagem, nunca para
49
+ * o lado de mandar duas.
50
+ */
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.DEFAULT_CLAIM_TTL_MS = void 0;
53
+ exports.createInMemoryDispatchClaimStore = createInMemoryDispatchClaimStore;
54
+ /** Prazo da reserva. Ver `createInMemoryDispatchClaimStore` para o raciocínio. */
55
+ exports.DEFAULT_CLAIM_TTL_MS = 10 * 60 * 1000;
56
+ /**
57
+ * Reserva em memória — **um processo só**.
58
+ *
59
+ * Serve a testes e a consumidores que rodam em instância única. Não serve a
60
+ * produção com mais de um worker, e a limitação está aqui em vez de num
61
+ * comentário do consumidor porque é o consumidor que erra: "por enquanto é uma
62
+ * instância" é verdade até o dia do primeiro redeploy com sobreposição.
63
+ *
64
+ * É atômica dentro do processo porque a decisão inteira acontece sem `await` no
65
+ * meio — em JavaScript isso basta para que dois `dispatch` concorrentes não se
66
+ * intercalem no ponto de decisão. Essa propriedade é o que o teste de
67
+ * concorrência in-process exercita; a prova de múltiplos processos é do store
68
+ * SQL.
69
+ *
70
+ * O prazo (`ttlMs`) existe pela mesma razão do store SQL: processo que morre
71
+ * segurando reserva não pode calar a etapa para sempre. Dez minutos é muito
72
+ * maior que qualquer timeout de provider (o mais longo aqui é 10 s) e muito
73
+ * menor que o intervalo entre ciclos da régua (24 h).
74
+ */
75
+ function createInMemoryDispatchClaimStore(options = {}) {
76
+ const ttl = options.ttlMs ?? exports.DEFAULT_CLAIM_TTL_MS;
77
+ const now = options.now ?? (() => Date.now());
78
+ const entries = new Map();
79
+ let seq = 0;
80
+ const write = async (entry, event) => {
81
+ if (!options.audit)
82
+ return;
83
+ await options.audit.record({
84
+ kind: event.kind,
85
+ ctx: entry.req.ctx,
86
+ channel: entry.req.channel,
87
+ eventType: entry.req.eventType,
88
+ subjectRef: entry.req.subjectRef,
89
+ recipientRef: entry.req.recipientRef,
90
+ idempotencyKey: entry.req.idempotencyKey,
91
+ providerRef: event.providerRef ?? null,
92
+ skipReason: event.skipReason ?? null,
93
+ status: event.status ?? null,
94
+ code: event.code ?? null,
95
+ detail: event.detail ?? null,
96
+ attempt: entry.attempt,
97
+ });
98
+ };
99
+ return {
100
+ async claim(req) {
101
+ // NENHUM `await` daqui até o `entries.set`. Um `await` aqui reabriria
102
+ // exatamente a janela que este módulo existe para fechar.
103
+ const current = entries.get(req.idempotencyKey);
104
+ const at = now();
105
+ if (current) {
106
+ if (current.state === 'sent')
107
+ return { granted: false, reason: 'already_sent' };
108
+ if (current.state === 'failed_permanent') {
109
+ return { granted: false, reason: 'permanently_failed' };
110
+ }
111
+ if (current.state === 'unknown_outcome') {
112
+ return {
113
+ granted: false,
114
+ reason: 'unknown_outcome',
115
+ detail: 'desfecho da tentativa anterior é desconhecido',
116
+ };
117
+ }
118
+ if (current.state === 'in_flight' && current.expiresAt > at) {
119
+ return { granted: false, reason: 'in_flight' };
120
+ }
121
+ }
122
+ const attempt = (current?.attempt ?? 0) + 1;
123
+ const recovered = current?.state === 'in_flight' && current.expiresAt <= at;
124
+ const providerAttempts = current?.providerAttempts ?? 0;
125
+ const claimId = current?.claimId ?? `mem-${++seq}`;
126
+ const claimToken = `tok-${++seq}`;
127
+ const entry = {
128
+ claimId,
129
+ claimToken,
130
+ state: 'in_flight',
131
+ attempt,
132
+ expiresAt: at + ttl,
133
+ providerAttempts,
134
+ providerFirstAttemptAt: current?.providerFirstAttemptAt ?? null,
135
+ req,
136
+ };
137
+ entries.set(req.idempotencyKey, entry);
138
+ const claim = {
139
+ claimId,
140
+ claimToken,
141
+ idempotencyKey: req.idempotencyKey,
142
+ attempt,
143
+ recoveredFromExpiredClaim: recovered,
144
+ // Retomada só é DESCONHECIDA se o titular anterior chegou a falar com o
145
+ // provider. Recuperar uma reserva que morreu antes disso é seguro, e
146
+ // tratá-la como desconhecida calaria a etapa sem motivo.
147
+ previousAttemptReachedProvider: recovered && providerAttempts > 0,
148
+ providerFirstAttemptAgeMs: entry.providerFirstAttemptAt === null ? null : at - entry.providerFirstAttemptAt,
149
+ };
150
+ await write(entry, {
151
+ kind: 'dispatch_claimed',
152
+ code: claim.previousAttemptReachedProvider
153
+ ? 'recovered_unknown_outcome'
154
+ : recovered
155
+ ? 'recovered_from_expired_claim'
156
+ : null,
157
+ });
158
+ return { granted: true, claim };
159
+ },
160
+ async markProviderAttempt(claim) {
161
+ const current = entries.get(claim.idempotencyKey);
162
+ // Linha sumiu, ou a geração é outra: quem chamou perdeu a reserva. A marca
163
+ // NÃO é gravada — gravá-la contaria uma tentativa externa do titular atual
164
+ // para o zumbi, e a próxima retomada leria o número errado.
165
+ if (!current || current.claimToken !== claim.claimToken) {
166
+ return { authority: 'lost', detail: 'reserva retomada por outra execução' };
167
+ }
168
+ if (current.state !== 'in_flight') {
169
+ return {
170
+ authority: 'already_final',
171
+ state: current.state,
172
+ detail: `chave já assentada como ${current.state}`,
173
+ };
174
+ }
175
+ current.providerAttempts += 1;
176
+ current.providerFirstAttemptAt = current.providerFirstAttemptAt ?? now();
177
+ return { authority: 'held' };
178
+ },
179
+ async settle(claim, outcome, event) {
180
+ const current = entries.get(claim.idempotencyKey);
181
+ // Reserva já tomada por outro (prazo vencido): quem perdeu o direito não
182
+ // assenta o desfecho. A comparação é pelo TOKEN da geração, não pelo id da
183
+ // linha — o id sobrevive à retomada, o token não.
184
+ if (!current || current.claimToken !== claim.claimToken)
185
+ return;
186
+ if (outcome.kind === 'sent') {
187
+ current.state = 'sent';
188
+ }
189
+ else if (outcome.kind === 'failed') {
190
+ current.state = outcome.permanent ? 'failed_permanent' : 'failed_retryable';
191
+ current.expiresAt = 0;
192
+ }
193
+ else if (outcome.kind === 'unknown') {
194
+ current.state = 'unknown_outcome';
195
+ current.expiresAt = 0;
196
+ }
197
+ else {
198
+ // `released`: a chave volta a estar livre, sem contar como falha. O
199
+ // `attempt` permanece — é histórico, e serve para ver insistência.
200
+ current.state = 'failed_retryable';
201
+ current.expiresAt = 0;
202
+ }
203
+ await write(current, event);
204
+ },
205
+ async peek(idempotencyKey) {
206
+ const current = entries.get(idempotencyKey);
207
+ if (!current)
208
+ return 'none';
209
+ if (current.state === 'in_flight' && current.expiresAt <= now())
210
+ return 'failed_retryable';
211
+ return current.state;
212
+ },
213
+ async resolveUnknownOutcome(idempotencyKey, resolution, detail) {
214
+ const current = entries.get(idempotencyKey);
215
+ if (!current || current.state !== 'unknown_outcome')
216
+ return;
217
+ current.state = resolution === 'sent' ? 'sent' : 'failed_retryable';
218
+ current.expiresAt = 0;
219
+ await write(current, {
220
+ kind: resolution === 'sent' ? 'dispatch_sent' : 'dispatch_failed',
221
+ status: resolution === 'sent' ? 'sent' : null,
222
+ code: `unknown_resolved_${resolution}`,
223
+ detail: detail ?? null,
224
+ });
225
+ },
226
+ };
227
+ }
228
+ //# sourceMappingURL=claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim.js","sourceRoot":"","sources":["../../../src/communication/claim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ /**
3
+ * Permissão de contato por canal.
4
+ *
5
+ * O motor implementa o MECANISMO (registrar, consultar, recusar). A POLÍTICA —
6
+ * o que fazer quando ninguém decidiu ainda — é do produto, porque a resposta
7
+ * depende da relação: um escritório cobrando honorário de cliente contratado
8
+ * não está na mesma posição de quem manda promoção para uma lista.
9
+ *
10
+ * O que o motor não faz, em nenhuma configuração: inventar consentimento.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.evaluateConsent = evaluateConsent;
14
+ /**
15
+ * `denied` é absoluto.
16
+ *
17
+ * Nenhuma política do produto reverte um opt-out — não há parâmetro para isso, e
18
+ * é deliberado. Um `denied` vindo de `customer_reply` (o cliente respondeu SAIR
19
+ * no WhatsApp) é o registro mais forte que existe no sistema, e o dia em que
20
+ * alguém puder configurar "ignorar opt-out para cobrança" é o dia em que a
21
+ * configuração vai estar ligada em algum tenant.
22
+ */
23
+ function evaluateConsent(channel, record, policy = {}) {
24
+ if (record?.state === 'denied') {
25
+ return {
26
+ allowed: false,
27
+ reason: 'opted_out',
28
+ detail: `destinatário recusou o canal ${channel}`,
29
+ };
30
+ }
31
+ if (record?.state === 'granted')
32
+ return { allowed: true };
33
+ // Sem registro, ou registro `unknown`: a política do produto decide.
34
+ const onUnknown = policy.onUnknown?.[channel] ?? 'fail_safe';
35
+ if (onUnknown === 'allow')
36
+ return { allowed: true };
37
+ return {
38
+ allowed: false,
39
+ reason: 'consent_unknown',
40
+ detail: `sem permissão registrada para ${channel}`,
41
+ };
42
+ }
43
+ //# sourceMappingURL=consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.js","sourceRoot":"","sources":["../../../src/communication/consent.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AA+CH,0CAwBC;AAjCD;;;;;;;;GAQG;AACH,SAAgB,eAAe,CAC7B,OAAmB,EACnB,MAA4B,EAC5B,SAAwB,EAAE;IAE1B,IAAI,MAAM,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,gCAAgC,OAAO,EAAE;SAClD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAE1D,qEAAqE;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC;IAC7D,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAEpD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,iCAAiC,OAAO,EAAE;KACnD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ /**
3
+ * Contexto de toda operação de comunicação do ecossistema.
4
+ *
5
+ * Existe porque o motor é UM e os consumidores são vários. Sem contexto
6
+ * explícito, "envie esta mensagem" é ambíguo em três dimensões que só aparecem
7
+ * quando já é tarde: de qual escritório, sob qual marca, com qual número.
8
+ *
9
+ * Nenhum campo tem valor padrão, e nenhum é inferido do ambiente. Um default
10
+ * aqui seria a porta pela qual um produto envia com a identidade de outro — e
11
+ * seria justamente no caso que ninguém testou, porque o caminho feliz sempre
12
+ * passa o contexto certo.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.validateContext = validateContext;
16
+ exports.contextRef = contextRef;
17
+ const SLUG = /^[a-z][a-z0-9-]{1,62}[a-z0-9]$/;
18
+ /**
19
+ * Valida o contexto na BORDA do motor.
20
+ *
21
+ * Rejeitar aqui, e não no adapter, é o que garante que nenhum caminho de envio
22
+ * exista sem contexto: o adapter recebe um contexto já validado ou não é
23
+ * chamado. Um adapter que valida por conta própria é um adapter que pode
24
+ * esquecer.
25
+ */
26
+ function validateContext(ctx) {
27
+ if (!ctx.tenantId || !ctx.tenantId.trim())
28
+ return 'tenant';
29
+ if (!SLUG.test(ctx.product))
30
+ return 'product';
31
+ if (!SLUG.test(ctx.brand))
32
+ return 'brand';
33
+ return null;
34
+ }
35
+ /**
36
+ * Forma canônica do contexto para chave e trilha: `tenant/product/brand`.
37
+ *
38
+ * Não é PII e não é segredo — é o que aparece em log e em métrica, e é o que
39
+ * permite atribuir custo por tenant, produto e marca depois, sem que nada
40
+ * precise ser reinstrumentado.
41
+ */
42
+ function contextRef(ctx) {
43
+ return `${ctx.tenantId}/${ctx.product}/${ctx.brand}`;
44
+ }
45
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/communication/context.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAkCH,0CAKC;AASD,gCAEC;AAnCD,MAAM,IAAI,GAAG,gCAAgC,CAAC;AAW9C;;;;;;;GAOG;AACH,SAAgB,eAAe,CAAC,GAAyB;IACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1C,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,UAAU,CAAC,GAAyB;IAClD,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * Resolução de credencial de canal — do NOME lógico ao segredo.
4
+ *
5
+ * **O motor nunca vê o segredo antes da borda do adapter.** O que atravessa o
6
+ * domínio é `credentialRef`, um nome; o valor só é materializado no último
7
+ * passo, e a trava por conta (`credentialResolverFor`) garante que o adapter só
8
+ * consiga abrir a referência DAQUELA conta.
9
+ *
10
+ * O que muda nesta fase é de onde o valor vem.
11
+ *
12
+ * O resolvedor anterior traduzia um punhado de nomes fixos de variável de
13
+ * ambiente. Isso funciona para um tenant e falha de duas maneiras para dois:
14
+ * ou os dois apontam para o mesmo nome e COMPARTILHAM o token — a WABA de uma
15
+ * marca respondendo pelo comportamento de outra —, ou apontam para nomes
16
+ * distintos e nenhum resolve. Nenhuma das duas é aceitável num canal em que o
17
+ * bloqueio se propaga.
18
+ *
19
+ * A saída não é uma tabela nova de segredos: o ecossistema já tem o Vault
20
+ * Engine (migração 0012) — AES-256-GCM, chave-mestra fora do banco, tenant como
21
+ * dado autenticado adicional da cifra, RLS FORCE, vencimento e rotação. Um
22
+ * segundo cofre seria um segundo lugar para errar.
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.createChannelCredentialResolver = createChannelCredentialResolver;
26
+ exports.isVaultRef = isVaultRef;
27
+ exports.isAcceptableForNewBinding = isAcceptableForNewBinding;
28
+ exports.noCredentialResolver = noCredentialResolver;
29
+ /** Esquema das referências que apontam para o cofre. */
30
+ const VAULT_SCHEME = 'vault://';
31
+ /**
32
+ * Nomes de variável de ambiente ainda aceitos — **legado, em remoção**.
33
+ *
34
+ * `RESEND_API_KEY` continua porque a SC entrega e-mail em produção por ela
35
+ * hoje, e desligá-la para exigir configuração por escritório pararia a régua de
36
+ * quem está cobrando agora. Removê-la não é hardening, é interrupção de serviço.
37
+ *
38
+ * `WHATSAPP_ACCESS_TOKEN` e `SMS_API_KEY` **saíram**. Nenhum tenant os usa —
39
+ * não há canal de telefone configurado em lugar nenhum —, então a remoção não
40
+ * quebra nada e fecha a porta antes de o primeiro tenant entrar por ela. Um
41
+ * token global de WhatsApp que "ainda ninguém usa" é exatamente o tipo de
42
+ * conveniência que vira padrão no dia em que alguém tem pressa.
43
+ *
44
+ * @deprecated Novos tenants devem usar `vault://`. Plano de remoção: quando a
45
+ * credencial de e-mail da plataforma migrar para o cofre, esta lista some junto
46
+ * com esta função.
47
+ */
48
+ const LEGACY_ENV_NAMES = new Set(['RESEND_API_KEY']);
49
+ /** Canais para os quais uma referência de ambiente nunca é aceitável. */
50
+ const ENV_FORBIDDEN_PREFIXES = ['WHATSAPP_', 'SMS_', 'META_'];
51
+ /**
52
+ * Resolvedor composto: cofre primeiro, ambiente só para o legado declarado.
53
+ *
54
+ * A ordem importa e é fixa. Se o ambiente viesse primeiro, uma variável com o
55
+ * nome certo passaria na frente do cofre do tenant sem que ninguém percebesse —
56
+ * e o sintoma seria o pior possível: envio bem-sucedido, pela conta errada.
57
+ */
58
+ function createChannelCredentialResolver(tenantId, secrets, env = process.env) {
59
+ return async (ref) => {
60
+ const trimmed = ref?.trim() ?? '';
61
+ if (!trimmed)
62
+ return undefined;
63
+ if (trimmed.startsWith(VAULT_SCHEME)) {
64
+ if (!secrets)
65
+ return undefined;
66
+ const name = trimmed.slice(VAULT_SCHEME.length).trim();
67
+ // Um nome vazio depois do esquema resolveria para "qualquer coisa" na
68
+ // implementação errada do store. Recusa antes de chegar lá.
69
+ if (!name)
70
+ return undefined;
71
+ return secrets.reveal(tenantId, name);
72
+ }
73
+ // A partir daqui é o caminho legado, e ele é fechado por allowlist de NOME.
74
+ // Filtrar por "o que parece segredo" deixaria `DATABASE_URL` passar inteiro,
75
+ // e `credentialRef` é editável por quem administra o escritório.
76
+ const name = trimmed.split('/').pop() ?? '';
77
+ if (ENV_FORBIDDEN_PREFIXES.some((p) => name.startsWith(p)))
78
+ return undefined;
79
+ if (!LEGACY_ENV_NAMES.has(name))
80
+ return undefined;
81
+ return env[name];
82
+ };
83
+ }
84
+ /**
85
+ * A referência aponta para o cofre?
86
+ *
87
+ * Usado por guard e por tela: um vínculo novo com referência de ambiente é
88
+ * dívida sendo criada, e deve ser visível no momento do cadastro, não seis meses
89
+ * depois.
90
+ */
91
+ function isVaultRef(ref) {
92
+ return typeof ref === 'string' && ref.trim().startsWith(VAULT_SCHEME);
93
+ }
94
+ /**
95
+ * Referência aceitável para um vínculo NOVO?
96
+ *
97
+ * `NO_GLOBAL_WHATSAPP_CREDENTIAL_FOR_NEW_TENANTS` deixa de ser promessa de
98
+ * documento e vira predicado que um teste consegue exercer.
99
+ */
100
+ function isAcceptableForNewBinding(channel, ref) {
101
+ if (channel === 'whatsapp' || channel === 'sms')
102
+ return isVaultRef(ref);
103
+ return isVaultRef(ref) || LEGACY_ENV_NAMES.has((ref ?? '').split('/').pop() ?? '');
104
+ }
105
+ /**
106
+ * Resolvedor que não abre NADA — nem cofre, nem ambiente.
107
+ *
108
+ * Existe para as composições que montam o motor só para LER configuração
109
+ * (quais canais estão registrados, qual o remetente, qual o `credentialRef`) e
110
+ * nunca despacham. `GET /v1/communication/channels` é exatamente esse caso.
111
+ *
112
+ * Passar o resolvedor de envio ali seria dar à rota de leitura a capacidade de
113
+ * decifrar, ainda que ela não a exerça hoje. Capacidade que não é exercida é
114
+ * capacidade que alguém exerce depois, na primeira mudança que parecer
115
+ * inofensiva — e a diferença entre "não usa" e "não pode" é a única que sobrevive
116
+ * a essa mudança.
117
+ */
118
+ function noCredentialResolver() {
119
+ return async () => undefined;
120
+ }
121
+ //# sourceMappingURL=credentials.js.map