@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,37 @@
1
+ /**
2
+ * Ensaio da régua da SC sobre uma carteira SINTÉTICA.
3
+ *
4
+ * Executa o motor real — mesmas portas, mesma ordem, mesmas recusas — sobre uma
5
+ * carteira montada para cobrir cada desfecho do relatório. Não é substituto do
6
+ * ensaio contra a carteira do escritório: aquele exige acesso ao banco de
7
+ * produção e autorização humana, e é o Bloco 9.
8
+ *
9
+ * O que ele prova, e que o ensaio real não provaria melhor: que cada contador do
10
+ * relatório corresponde a uma decisão distinta do motor, e que nenhuma delas
11
+ * alcança um adapter.
12
+ */
13
+ import { type ChannelAccount, type ChannelKey, type CommunicationContext, type ConsentRecord, type DispatchResult, type TemplateRecord } from './index.js';
14
+ export interface DryRunClient {
15
+ id: string;
16
+ name: string;
17
+ /** Como está no cadastro — inclusive torto, que é o ponto do ensaio. */
18
+ phone: string | null;
19
+ email: string | null;
20
+ consent: ConsentRecord[];
21
+ alreadySent?: boolean;
22
+ }
23
+ export interface DryRunScenario {
24
+ ctx: CommunicationContext;
25
+ clients: readonly DryRunClient[];
26
+ accounts: readonly ChannelAccount[];
27
+ templates: readonly TemplateRecord[];
28
+ order: readonly ChannelKey[];
29
+ eventType: string;
30
+ }
31
+ export interface DryRunRun {
32
+ results: DispatchResult[];
33
+ /** Deve ser 0. Qualquer outro valor significa que o ensaio tocou um adapter. */
34
+ adapterCalls: number;
35
+ }
36
+ export declare function runDryRunScenario(scenario: DryRunScenario): Promise<DryRunRun>;
37
+ //# sourceMappingURL=dry-run-scenario.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run-scenario.d.ts","sourceRoot":"","sources":["../../src/communication/dry-run-scenario.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,UAAU,EAEf,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAElB,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEpB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAuBD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,gFAAgF;IAChF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAkJpF"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Ensaio da régua da SC sobre uma carteira SINTÉTICA.
3
+ *
4
+ * Executa o motor real — mesmas portas, mesma ordem, mesmas recusas — sobre uma
5
+ * carteira montada para cobrir cada desfecho do relatório. Não é substituto do
6
+ * ensaio contra a carteira do escritório: aquele exige acesso ao banco de
7
+ * produção e autorização humana, e é o Bloco 9.
8
+ *
9
+ * O que ele prova, e que o ensaio real não provaria melhor: que cada contador do
10
+ * relatório corresponde a uma decisão distinta do motor, e que nenhuma delas
11
+ * alcança um adapter.
12
+ */
13
+ import { buildIdempotencyKey, createNullAuditSink, dispatch, NO_PROVIDER_GUARANTEES, } from './index.js';
14
+ /**
15
+ * Canal que nunca envia e registra que foi chamado.
16
+ *
17
+ * Se algum destes acumular chamadas durante um ensaio, o ensaio está enviando —
18
+ * e é melhor descobrir por um contador do que pela fatura.
19
+ */
20
+ function inertChannel(key, calls) {
21
+ return {
22
+ key,
23
+ providerName: 'inert',
24
+ // Um canal inerte não fala com provider nenhum, então não há garantia
25
+ // externa que ele possa declarar. Ver `capabilities.ts`.
26
+ capabilities: NO_PROVIDER_GUARANTEES,
27
+ isConfigured: () => true,
28
+ async send() {
29
+ calls.count += 1;
30
+ return { kind: 'unavailable', code: 'inert', detail: 'canal inerte de ensaio' };
31
+ },
32
+ };
33
+ }
34
+ export async function runDryRunScenario(scenario) {
35
+ const calls = { count: 0 };
36
+ const channels = Object.fromEntries(scenario.order.map((key) => [key, inertChannel(key, calls)]));
37
+ const accounts = {
38
+ async find(ctx, channel) {
39
+ return (scenario.accounts.find((a) => a.channel === channel &&
40
+ a.tenantId === ctx.tenantId &&
41
+ a.product === ctx.product &&
42
+ a.brand === ctx.brand) ?? null);
43
+ },
44
+ };
45
+ const templates = {
46
+ async candidates(ctx, channel, eventType, locale) {
47
+ return scenario.templates.filter((t) => t.channel === channel &&
48
+ t.eventType === eventType &&
49
+ t.locale === locale &&
50
+ t.product === ctx.product &&
51
+ (t.tenantId === null || t.tenantId === ctx.tenantId) &&
52
+ (t.brand === null || t.brand === ctx.brand));
53
+ },
54
+ };
55
+ const byId = new Map(scenario.clients.map((c) => [c.id, c]));
56
+ // Chaves que a trilha já teria. Calculadas com a MESMA função do motor, e não
57
+ // simuladas depois sobre o resultado: um ensaio que fabrica o desfecho de
58
+ // "já enviado" testa o próprio cenário, não o motor.
59
+ const alreadySentKeys = new Set();
60
+ for (const client of scenario.clients) {
61
+ if (!client.alreadySent)
62
+ continue;
63
+ for (const channel of scenario.order) {
64
+ for (const tpl of scenario.templates.filter((t) => t.channel === channel && t.eventType === scenario.eventType)) {
65
+ alreadySentKeys.add(buildIdempotencyKey({
66
+ ctx: scenario.ctx,
67
+ channel,
68
+ eventType: scenario.eventType,
69
+ subjectRef: `receivable-${client.id}`,
70
+ templateVersion: tpl.version,
71
+ }));
72
+ }
73
+ }
74
+ }
75
+ const consent = {
76
+ async find(recipientRef, channel) {
77
+ return byId.get(recipientRef)?.consent.find((r) => r.channel === channel) ?? null;
78
+ },
79
+ };
80
+ const results = [];
81
+ for (const client of scenario.clients) {
82
+ results.push(await dispatch({
83
+ ctx: scenario.ctx,
84
+ eventType: scenario.eventType,
85
+ subjectRef: `receivable-${client.id}`,
86
+ recipientRef: client.id,
87
+ variables: {
88
+ clientName: client.name,
89
+ amount: 'R$ 1.200,00',
90
+ dueDate: '10/09/2026',
91
+ },
92
+ policy: { order: [...scenario.order] },
93
+ }, {
94
+ channels,
95
+ accounts,
96
+ templates,
97
+ consent,
98
+ // O telefone do cadastro é entregue CRU, sem limpeza prévia: é o motor
99
+ // que precisa recusar o que não serve, e um ensaio que normaliza antes
100
+ // esconderia exatamente o defeito que ele deveria encontrar.
101
+ resolveRecipient: async (ref, channel) => {
102
+ const c = byId.get(ref);
103
+ if (!c)
104
+ return null;
105
+ return channel === 'email' ? c.email : c.phone;
106
+ },
107
+ buildContent: (channel, tpl, ordered) => {
108
+ if (channel === 'email') {
109
+ return { kind: 'email', subject: tpl.subject ?? '', html: '', text: '' };
110
+ }
111
+ if (channel === 'whatsapp') {
112
+ if (!tpl.providerTemplateName)
113
+ return null;
114
+ return {
115
+ kind: 'whatsapp_template',
116
+ templateName: tpl.providerTemplateName,
117
+ language: tpl.locale,
118
+ variables: ordered,
119
+ };
120
+ }
121
+ return { kind: 'text', body: ordered.join(' ') };
122
+ },
123
+ /*
124
+ * Reserva do ensaio: LÊ, nunca toma.
125
+ *
126
+ * `claim` e `settle` lançam de propósito. Um dry-run que chegasse a
127
+ * reservar seria a execução real com o envio removido — e calaria a
128
+ * etapa de verdade —, então em vez de um no-op silencioso o cenário
129
+ * falha alto se o motor tentar. É o teste de mutação embutido no
130
+ * próprio ensaio: mover a porta de dry-run para depois do claim
131
+ * quebra este arquivo.
132
+ */
133
+ claims: {
134
+ async claim() {
135
+ throw new Error('dry-run não reserva chave');
136
+ },
137
+ async settle() {
138
+ throw new Error('dry-run não assenta reserva');
139
+ },
140
+ async markProviderAttempt() {
141
+ // Marcar tentativa de provider num ensaio significaria que o
142
+ // ensaio está prestes a falar com o provider. Lança pela mesma
143
+ // razão que `claim`: é o oráculo de mutação embutido.
144
+ throw new Error('dry-run não marca tentativa de provider');
145
+ },
146
+ async resolveUnknownOutcome() {
147
+ throw new Error('dry-run não resolve desfecho desconhecido');
148
+ },
149
+ async peek(key) {
150
+ return alreadySentKeys.has(key) ? 'sent' : 'none';
151
+ },
152
+ },
153
+ audit: createNullAuditSink(),
154
+ }, { dryRun: true }));
155
+ }
156
+ return { results, adapterCalls: calls.count };
157
+ }
158
+ //# sourceMappingURL=dry-run-scenario.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run-scenario.js","sourceRoot":"","sources":["../../src/communication/dry-run-scenario.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Agregação de um ensaio.
3
+ *
4
+ * O dry-run só é útil se contar as recusas com a mesma granularidade das
5
+ * decisões: "12 não sairiam" não diz se o escritório precisa preencher
6
+ * cadastros, colher autorizações ou configurar um canal — e cada uma dessas
7
+ * respostas leva a um trabalho diferente.
8
+ */
9
+ import type { ChannelKey } from './channel.js';
10
+ import type { DispatchResult } from './engine.js';
11
+ export interface DryRunReport {
12
+ /** Quantas mensagens sairiam por canal. */
13
+ wouldSend: Record<ChannelKey, number>;
14
+ skipNoPhone: number;
15
+ skipInvalidPhone: number;
16
+ skipOptOut: number;
17
+ skipConsentUnknown: number;
18
+ skipAlreadySent: number;
19
+ skipChannelNotReady: number;
20
+ skipNoTemplate: number;
21
+ /** Nem enviaria nem tem motivo classificado — sempre deve ser zero. */
22
+ unclassified: number;
23
+ examined: number;
24
+ }
25
+ export declare function emptyDryRunReport(): DryRunReport;
26
+ /**
27
+ * Conta UM desfecho por intenção, não um por canal tentado.
28
+ *
29
+ * A distinção importa: uma intenção que pula WhatsApp por falta de telefone e
30
+ * sai por e-mail é UMA mensagem enviada, não "uma enviada e uma pulada". Somar
31
+ * as duas infla o relatório e faz o escritório procurar problema onde a régua
32
+ * se resolveu sozinha.
33
+ *
34
+ * O motivo registrado é o do PRIMEIRO canal recusado — o preferido, que é o que
35
+ * o escritório precisa consertar para a mensagem sair pela via que ele escolheu.
36
+ */
37
+ export declare function summarizeDryRun(results: readonly DispatchResult[]): DryRunReport;
38
+ /** Linhas do relatório, no formato que o Bloco 8 exige. Sem PII, sem segredo. */
39
+ export declare function formatDryRunReport(report: DryRunReport): string[];
40
+ //# sourceMappingURL=dry-run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run.d.ts","sourceRoot":"","sources":["../../src/communication/dry-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,YAAY;IAC3B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,iBAAiB,IAAI,YAAY,CAahD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,GAAG,YAAY,CA4ChF;AAED,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,EAAE,CAejE"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Agregação de um ensaio.
3
+ *
4
+ * O dry-run só é útil se contar as recusas com a mesma granularidade das
5
+ * decisões: "12 não sairiam" não diz se o escritório precisa preencher
6
+ * cadastros, colher autorizações ou configurar um canal — e cada uma dessas
7
+ * respostas leva a um trabalho diferente.
8
+ */
9
+ export function emptyDryRunReport() {
10
+ return {
11
+ wouldSend: { email: 0, whatsapp: 0, sms: 0, notification: 0 },
12
+ skipNoPhone: 0,
13
+ skipInvalidPhone: 0,
14
+ skipOptOut: 0,
15
+ skipConsentUnknown: 0,
16
+ skipAlreadySent: 0,
17
+ skipChannelNotReady: 0,
18
+ skipNoTemplate: 0,
19
+ unclassified: 0,
20
+ examined: 0,
21
+ };
22
+ }
23
+ /**
24
+ * Conta UM desfecho por intenção, não um por canal tentado.
25
+ *
26
+ * A distinção importa: uma intenção que pula WhatsApp por falta de telefone e
27
+ * sai por e-mail é UMA mensagem enviada, não "uma enviada e uma pulada". Somar
28
+ * as duas infla o relatório e faz o escritório procurar problema onde a régua
29
+ * se resolveu sozinha.
30
+ *
31
+ * O motivo registrado é o do PRIMEIRO canal recusado — o preferido, que é o que
32
+ * o escritório precisa consertar para a mensagem sair pela via que ele escolheu.
33
+ */
34
+ export function summarizeDryRun(results) {
35
+ const report = emptyDryRunReport();
36
+ for (const result of results) {
37
+ report.examined += 1;
38
+ if (result.delivered) {
39
+ report.wouldSend[result.delivered] += 1;
40
+ continue;
41
+ }
42
+ const first = result.attempts.find((a) => a.skipped);
43
+ switch (first?.skipped) {
44
+ case 'no_recipient':
45
+ report.skipNoPhone += 1;
46
+ break;
47
+ case 'invalid_recipient':
48
+ report.skipInvalidPhone += 1;
49
+ break;
50
+ case 'opted_out':
51
+ report.skipOptOut += 1;
52
+ break;
53
+ case 'consent_unknown':
54
+ report.skipConsentUnknown += 1;
55
+ break;
56
+ case 'already_sent':
57
+ report.skipAlreadySent += 1;
58
+ break;
59
+ case 'channel_not_registered':
60
+ case 'no_identity':
61
+ report.skipChannelNotReady += 1;
62
+ break;
63
+ case 'no_template':
64
+ report.skipNoTemplate += 1;
65
+ break;
66
+ default:
67
+ // Inclui o contexto inválido e as falhas de adapter. Num ensaio nenhum
68
+ // adapter é chamado, então qualquer valor aqui é defeito de integração
69
+ // — e é por isso que o campo existe em vez de o caso cair em silêncio.
70
+ report.unclassified += 1;
71
+ }
72
+ }
73
+ return report;
74
+ }
75
+ /** Linhas do relatório, no formato que o Bloco 8 exige. Sem PII, sem segredo. */
76
+ export function formatDryRunReport(report) {
77
+ return [
78
+ `WOULD_SEND_EMAIL=${report.wouldSend.email}`,
79
+ `WOULD_SEND_WHATSAPP=${report.wouldSend.whatsapp}`,
80
+ `WOULD_SEND_SMS=${report.wouldSend.sms}`,
81
+ `SKIP_NO_PHONE=${report.skipNoPhone}`,
82
+ `SKIP_INVALID_PHONE=${report.skipInvalidPhone}`,
83
+ `SKIP_OPT_OUT=${report.skipOptOut}`,
84
+ `SKIP_CONSENT_UNKNOWN=${report.skipConsentUnknown}`,
85
+ `SKIP_ALREADY_SENT=${report.skipAlreadySent}`,
86
+ `SKIP_CHANNEL_NOT_READY=${report.skipChannelNotReady}`,
87
+ `SKIP_NO_TEMPLATE=${report.skipNoTemplate}`,
88
+ `UNCLASSIFIED=${report.unclassified}`,
89
+ `EXAMINED=${report.examined}`,
90
+ ];
91
+ }
92
+ //# sourceMappingURL=dry-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dry-run.js","sourceRoot":"","sources":["../../src/communication/dry-run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;QAC7D,WAAW,EAAE,CAAC;QACd,gBAAgB,EAAE,CAAC;QACnB,UAAU,EAAE,CAAC;QACb,kBAAkB,EAAE,CAAC;QACrB,eAAe,EAAE,CAAC;QAClB,mBAAmB,EAAE,CAAC;QACtB,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,OAAkC;IAChE,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;QAErB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,QAAQ,KAAK,EAAE,OAAO,EAAE,CAAC;YACvB,KAAK,cAAc;gBACjB,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;gBACxB,MAAM;YACR,KAAK,mBAAmB;gBACtB,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,iBAAiB;gBACpB,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC;gBAC/B,MAAM;YACR,KAAK,cAAc;gBACjB,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,wBAAwB,CAAC;YAC9B,KAAK,aAAa;gBAChB,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,aAAa;gBAChB,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;gBAC3B,MAAM;YACR;gBACE,uEAAuE;gBACvE,uEAAuE;gBACvE,uEAAuE;gBACvE,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO;QACL,oBAAoB,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE;QAC5C,uBAAuB,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE;QAClD,kBAAkB,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE;QACxC,iBAAiB,MAAM,CAAC,WAAW,EAAE;QACrC,sBAAsB,MAAM,CAAC,gBAAgB,EAAE;QAC/C,gBAAgB,MAAM,CAAC,UAAU,EAAE;QACnC,wBAAwB,MAAM,CAAC,kBAAkB,EAAE;QACnD,qBAAqB,MAAM,CAAC,eAAe,EAAE;QAC7C,0BAA0B,MAAM,CAAC,mBAAmB,EAAE;QACtD,oBAAoB,MAAM,CAAC,cAAc,EAAE;QAC3C,gBAAgB,MAAM,CAAC,YAAY,EAAE;QACrC,YAAY,MAAM,CAAC,QAAQ,EAAE;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Motor de comunicação compartilhado.
3
+ *
4
+ * INTENT → CONTEXT → POLICY → IDENTITY → CONSENT → RECIPIENT → TEMPLATE
5
+ * → CONTENT → CLAIM → [RECOVERY?] → FENCE → ADAPTER → SETTLE
6
+ *
7
+ * O consumidor declara a INTENÇÃO de negócio ("avisar este cliente sobre o
8
+ * recebível X, etapa D+3, preferindo WhatsApp"). O motor decide nada sobre o
9
+ * negócio e tudo sobre a entrega.
10
+ *
11
+ * Cada porta abaixo pode recusar, e **toda recusa tem motivo próprio**. Um motor
12
+ * que devolve "não enviado" sem dizer qual porta fechou obriga o escritório a
13
+ * adivinhar entre "o cliente pediu para não receber" e "ninguém cadastrou o
14
+ * telefone" — que exigem ações opostas de quem opera.
15
+ *
16
+ * **CLAIM é a penúltima porta, e é a mais importante.** Ela fica imediatamente
17
+ * antes do adapter porque é o único lugar onde uma reserva serve para alguma
18
+ * coisa: a proteção contra envio duplo tem de acontecer antes do efeito externo,
19
+ * nunca depois. Ver `claim.ts`.
20
+ *
21
+ * Entre CLAIM e ADAPTER existem duas etapas que a H2 acrescentou, e nenhuma das
22
+ * duas é opcional:
23
+ *
24
+ * RECOVERY quando a reserva foi retomada de um titular que já tinha falado com
25
+ * o provider, o desfecho anterior é DESCONHECIDO. O motor só reenvia
26
+ * se o adapter declarar idempotência de provider que ainda cubra a
27
+ * chave; sem isso, recusa e deixa a chave visível para quem opera.
28
+ * FENCE a marca durável de "vou chamar o provider agora", gravada antes da
29
+ * chamada — e, na MESMA operação, a prova de que quem vai chamar
30
+ * ainda é o titular da geração corrente. É ela que dá à próxima
31
+ * retomada como saber a diferença entre "morreu antes de enviar" e
32
+ * "morreu depois", e é ela que impede o titular vencido de alcançar
33
+ * o provider. Perdeu a autoridade, não chama: sem exceção.
34
+ *
35
+ * A trilha do CICLO DE VIDA do disparo (`dispatch_claimed`, `dispatch_sent`,
36
+ * `dispatch_failed`) é gravada pelo STORE, junto com a reserva, e não pelo
37
+ * `audit` daqui. A razão está em `claim.ts`: o `audit` do motor vive na transação
38
+ * de negócio de quem chamou, e um rollback dela apagava a narrativa de um envio
39
+ * que tinha acontecido de verdade.
40
+ */
41
+ import { type ChannelKey, type ChannelRegistry, type MessageContent } from './channel.js';
42
+ import { type CommunicationAuditSink } from './audit.js';
43
+ import type { DispatchClaimStore } from './claim.js';
44
+ import { type CommunicationContext } from './context.js';
45
+ import { type ConsentPolicy, type ConsentStore } from './consent.js';
46
+ import { type ChannelAccountStore } from './identity.js';
47
+ import { type ChannelAttempt, type ChannelPolicy } from './policy.js';
48
+ import { type TemplateStore } from './template.js';
49
+ /** O que o produto declara querer comunicar. */
50
+ export interface CommunicationIntent {
51
+ ctx: CommunicationContext;
52
+ /** `billing.dunning.d3` — do vocabulário do consumidor, não do motor. */
53
+ eventType: string;
54
+ /** Referência do assunto no domínio do consumidor. Entra na idempotência. */
55
+ subjectRef: string;
56
+ /** Referência do destinatário no domínio do consumidor. NUNCA o telefone. */
57
+ recipientRef: string;
58
+ /** Valores das variáveis, por nome. O template define a ordem. */
59
+ variables: Record<string, string>;
60
+ policy?: ChannelPolicy;
61
+ locale?: string;
62
+ }
63
+ export interface DispatchDeps {
64
+ channels: ChannelRegistry;
65
+ accounts: ChannelAccountStore;
66
+ templates: TemplateStore;
67
+ consent: ConsentStore;
68
+ consentPolicy?: ConsentPolicy;
69
+ /**
70
+ * Reserva atômica do direito de enviar. **Obrigatória.**
71
+ *
72
+ * Não é opcional, e a ausência de `?` é a decisão de desenho: enquanto era
73
+ * `alreadySent?`, todo consumidor que esquecesse de passá-la ganhava um motor
74
+ * sem proteção nenhuma contra envio duplo — em silêncio, com os testes
75
+ * passando. Agora o compilador recusa o consumidor incompleto.
76
+ */
77
+ claims: DispatchClaimStore;
78
+ /** Trilha estruturada. Obrigatória pela mesma razão que `claims`. */
79
+ audit: CommunicationAuditSink;
80
+ /**
81
+ * Endereço do destinatário PARA ESTE CANAL, já normalizado, ou `null`.
82
+ *
83
+ * Do produto, porque só ele sabe onde o contato do cliente mora. A
84
+ * normalização canônica de telefone é do motor (`contacts/phone.ts`) e o
85
+ * produto deve usá-la — dois normalizadores é como o mesmo cliente recebe SMS
86
+ * e não recebe WhatsApp.
87
+ */
88
+ resolveRecipient: (recipientRef: string, channel: ChannelKey) => Promise<string | null>;
89
+ /** Monta o conteúdo para o canal escolhido. Do produto: é ele que tem o texto. */
90
+ buildContent: (channel: ChannelKey, template: {
91
+ providerTemplateName?: string;
92
+ body?: string;
93
+ subject?: string;
94
+ locale: string;
95
+ }, ordered: string[], variables: Record<string, string>) => MessageContent | null;
96
+ }
97
+ export interface DispatchResult {
98
+ /** Canal que efetivamente entregou, ou `null` quando nenhum entregou. */
99
+ delivered: ChannelKey | null;
100
+ providerRef?: string;
101
+ /** Tudo que foi tentado, na ordem, com o motivo de cada recusa. */
102
+ attempts: ChannelAttempt[];
103
+ /** Chave usada. Devolvida para o consumidor gravar na trilha. */
104
+ idempotencyKey: string;
105
+ /** Contexto rejeitado na borda — nenhum canal chegou a ser tentado. */
106
+ invalidContext?: 'tenant' | 'product' | 'brand';
107
+ /**
108
+ * Quantas vezes `adapter.send` foi chamado nesta execução.
109
+ *
110
+ * Existe para ser ASSERTADO. A prova de que a reserva funciona não é "o
111
+ * segundo dispatch devolveu `already_sent`" — é que o adapter foi acionado uma
112
+ * vez só. Contar aqui, dentro do motor, torna a afirmação verificável sem
113
+ * depender de o teste espionar o adapter certo.
114
+ *
115
+ * **Conta o ADAPTER, não a rede.** Um adapter que recusa antes de qualquer
116
+ * chamada externa — a trava `liveSend` do WhatsApp, por exemplo — soma 1 aqui
117
+ * e não falou com ninguém. A prova de que nada real saiu é a trava do adapter,
118
+ * verificada em `communication-real-send-guard.test.ts`; este contador prova
119
+ * outra coisa, que é a ausência de disparo duplo.
120
+ */
121
+ providerSendCalls: number;
122
+ /**
123
+ * A reserva foi tomada de um titular cujo prazo venceu — há risco real de o
124
+ * titular anterior ter enviado antes de morrer. Ver `claim.ts`.
125
+ */
126
+ recoveredFromExpiredClaim?: boolean;
127
+ /**
128
+ * O reenvio aconteceu sob garantia de idempotência do PROVIDER.
129
+ *
130
+ * `true` quer dizer: a tentativa anterior falou com o provider, este envio
131
+ * repetiu a MESMA chave, e a deduplicação é do outro lado. O adapter foi
132
+ * chamado; a mensagem, não necessariamente saiu duas vezes — é a distinção
133
+ * entre `providerSendCalls` e efeito externo, e ela precisa ser visível para
134
+ * quem audita.
135
+ */
136
+ providerIdempotentReplay?: boolean;
137
+ }
138
+ export interface DispatchOptions {
139
+ /**
140
+ * `true` percorre todas as portas e relata o que ACONTECERIA, sem chamar
141
+ * nenhum adapter e **sem tomar reserva nenhuma**.
142
+ *
143
+ * A decisão de desenho é onde o dry-run corta: depois de resolver identidade,
144
+ * consentimento, destinatário, template e conteúdo — e antes de `claim`.
145
+ * Cortar antes disso produziria um ensaio que aprova o que a execução real
146
+ * recusa, que é pior que não ensaiar
147
+ * (`feedback_dont_swap_the_measuring_instrument`). Cortar DEPOIS do claim
148
+ * seria pior ainda: o ensaio consumiria a chave e calaria a etapa de verdade.
149
+ */
150
+ dryRun?: boolean;
151
+ }
152
+ export declare function dispatch(intent: CommunicationIntent, deps: DispatchDeps, options?: DispatchOptions): Promise<DispatchResult>;
153
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/communication/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,eAAe,EAEpB,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAoB,KAAK,sBAAsB,EAA2B,MAAM,YAAY,CAAC;AAEpG,OAAO,KAAK,EAAgB,kBAAkB,EAAwB,MAAM,YAAY,CAAC;AACzF,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAmB,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAEtF,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGpF,gDAAgD;AAChD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,yEAAyE;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;OAOG;IACH,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qEAAqE;IACrE,KAAK,EAAE,sBAAsB,CAAC;IAC9B;;;;;;;OAOG;IACH,gBAAgB,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxF,kFAAkF;IAClF,YAAY,EAAE,CACZ,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC5F,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC9B,cAAc,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,SAAS,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,iEAAiE;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,cAAc,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD;;;;;;;;;;;;;OAaG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;;;;;OAQG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAkCD,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,mBAAmB,EAC3B,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA2dzB"}