@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
@@ -1,248 +1,12 @@
1
- import { buildDedupKey, InMemoryDedupStore } from './dedup-store.js';
2
- import { sendViaResend } from './resend-client.js';
3
- import { logSanitized, logSanitizedInfo } from './sanitize.js';
4
- import { StaticSenderResolver } from './sender-resolver.js';
5
- import { PassthroughTemplateRenderer } from './template-renderer.js';
6
- import { DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS, DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS, DEFAULT_TIMEOUT_MS, MIN_DEDUP_WINDOW_MS, } from './types.js';
7
- /** Validação prática de endereço (RFC §4 — borda do Provider): local@domínio.tld, sem espaços, um único "@". */
8
- const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
9
- function isValidEmailAddress(address) {
10
- return EMAIL_PATTERN.test(address);
11
- }
12
- /**
13
- * Valida os endereços que o Provider efetivamente usará na chamada ao provider externo
14
- * (Correção 3 — Auditoria Codex). Roda depois de `from` resolvido, para pegar também
15
- * remetentes vindos do `SenderResolver`/`defaultFrom`, não só o `input.from` explícito.
1
+ /*
2
+ * RE-EXPORT a implementação vive em `@baruk/communication`.
3
+ *
4
+ * Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
5
+ * mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
6
+ * comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
7
+ * consumidor receber o comportamento antigo.
8
+ *
9
+ * O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
16
10
  */
17
- function validateAddresses(fields) {
18
- const invalidFields = [];
19
- if (!isValidEmailAddress(fields.to))
20
- invalidFields.push('to');
21
- if (!isValidEmailAddress(fields.from))
22
- invalidFields.push('from');
23
- if (fields.replyTo !== undefined && !isValidEmailAddress(fields.replyTo))
24
- invalidFields.push('replyTo');
25
- if (invalidFields.length === 0)
26
- return undefined;
27
- return {
28
- code: 'invalid-recipient',
29
- message: `Endereço(s) de e-mail inválido(s): ${invalidFields.join(', ')}.`,
30
- };
31
- }
32
- /**
33
- * Provider canônico de `cap.communication.transactional-email` (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 v0.2).
34
- * Extensões (`templateRenderer`/`senderResolver`/`hooks`/`dedupStore`) são injetadas na construção,
35
- * nunca descobertas por convenção (RFC §4.7).
36
- */
37
- export function createTransactionalEmailProvider(config) {
38
- const templateRenderer = config.templateRenderer ?? new PassthroughTemplateRenderer();
39
- const senderResolver = config.senderResolver ?? new StaticSenderResolver(config.defaultFrom);
40
- const hooks = config.hooks ?? [];
41
- const dedupStore = config.dedupStore ?? new InMemoryDedupStore();
42
- const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
43
- const remoteReservationPollIntervalMs = config.remoteReservationPollIntervalMs ?? DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS;
44
- const remoteReservationMaxWaitMs = config.remoteReservationMaxWaitMs ?? DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS;
45
- const apiKey = config.apiKey;
46
- /**
47
- * Nenhuma chamada ao `DedupStore` (`reserve`/`get`/`set`) pode escapar sem tratamento
48
- * (Bloqueador 1 — Certification Round 2: sanitização não pode se limitar ao `DeliveryResult`;
49
- * uma implementação de store real — Redis/Postgres — pode lançar erros de rede/conexão cuja
50
- * mensagem contém credenciais, ex.: uma connection string). Toda chamada passa por aqui:
51
- * nunca propaga a exceção, sempre loga sanitizado, sempre devolve um fallback seguro.
52
- */
53
- async function safeDedupCall(operation, fn, fallback) {
54
- try {
55
- return await fn();
56
- }
57
- catch (err) {
58
- logSanitized(`[transactional-email] DedupStore.${operation} falhou (ignorado):`, errorMessage(err), [apiKey]);
59
- return fallback;
60
- }
61
- }
62
- function sleep(ms) {
63
- return new Promise((resolve) => setTimeout(resolve, ms));
64
- }
65
- /**
66
- * Aguarda, de forma limitada, o resultado de uma reserva mantida por outra instância/réplica
67
- * (`DedupStore` `mode: 'shared'`) — é o mecanismo real de coalescência distribuída (Bloqueador 2).
68
- * Nunca espera indefinidamente: `maxWaitMs` limita o tempo total, sempre com um valor determinístico
69
- * ao final (achou o resultado, ou desistiu — nunca fica pendurado).
70
- */
71
- async function waitForRemoteResult(dedupKey, pollIntervalMs, maxWaitMs) {
72
- const deadline = Date.now() + maxWaitMs;
73
- while (Date.now() < deadline) {
74
- await sleep(pollIntervalMs);
75
- const entry = await safeDedupCall('get', () => dedupStore.get(dedupKey), null);
76
- if (entry)
77
- return entry;
78
- }
79
- return null;
80
- }
81
- /**
82
- * Coalescência local de envios em andamento por `dedupKey` (Bloqueador 2 — Auditoria Codex).
83
- * A checagem (`get`) e a reserva (criar e guardar a Promise) acontecem no mesmo trecho
84
- * síncrono — sem `await` entre elas — então duas chamadas concorrentes (`Promise.all`)
85
- * nunca observam um estado intermediário: a segunda sempre encontra a Promise da primeira
86
- * já registrada e aguarda o mesmo resultado, em vez de disparar um segundo envio.
87
- * Garantia real: só dentro deste processo Node (mesma instância do Provider). Atomicidade
88
- * entre processos/réplicas depende do `dedupStore.reserve` fornecido (RFC §4.2).
89
- */
90
- const localSendsInFlight = new Map();
91
- /** Resolve `from` e renderiza o template com segurança (Correção 4) — nunca deixa exceção escapar do contrato. */
92
- function prepareSend(input) {
93
- let from;
94
- try {
95
- from = input.from ?? senderResolver.resolveFrom(input.brand);
96
- }
97
- catch (err) {
98
- logSanitized('[transactional-email] SenderResolver falhou:', errorMessage(err), [apiKey]);
99
- return {
100
- status: 'failed',
101
- error: { code: 'unknown', message: 'Falha ao resolver o remetente do e-mail.' },
102
- };
103
- }
104
- const addressError = validateAddresses({ to: input.to, from, replyTo: input.replyTo });
105
- if (addressError) {
106
- return { status: 'failed', error: addressError };
107
- }
108
- let rendered;
109
- try {
110
- rendered = templateRenderer.render(input.template, input.data);
111
- }
112
- catch (err) {
113
- logSanitized('[transactional-email] TemplateRenderer falhou:', errorMessage(err), [apiKey]);
114
- return {
115
- status: 'failed',
116
- error: { code: 'unknown', message: 'Falha ao renderizar o template do e-mail.' },
117
- };
118
- }
119
- return { from, rendered };
120
- }
121
- async function performSend(input) {
122
- const prepared = prepareSend(input);
123
- if ('status' in prepared) {
124
- return prepared;
125
- }
126
- return sendViaResend({
127
- apiKey: apiKey,
128
- from: prepared.from,
129
- to: input.to,
130
- replyTo: input.replyTo,
131
- tag: input.tag,
132
- rendered: prepared.rendered,
133
- timeoutMs,
134
- });
135
- }
136
- async function sendDeduplicated(input, dedupKey) {
137
- const existingInFlight = localSendsInFlight.get(dedupKey);
138
- if (existingInFlight) {
139
- return existingInFlight;
140
- }
141
- const sendPromise = (async () => {
142
- try {
143
- let reservation = await safeDedupCall('reserve', () => dedupStore.reserve(dedupKey, MIN_DEDUP_WINDOW_MS), { acquired: true });
144
- if (!reservation.acquired && reservation.entry) {
145
- return reservation.entry.result;
146
- }
147
- if (!reservation.acquired) {
148
- // Reserva de outra instância/réplica em andamento, sem resultado ainda disponível
149
- // (só ocorre com um DedupStore `mode: 'shared'` real — `InMemoryDedupStore` nunca
150
- // devolve esse caso, ver seu jsdoc). Bloqueador 2 (Certification Round 2): a versão
151
- // anterior caía direto em `performSend` aqui, reenviando às cegas. Agora espera de
152
- // forma limitada pelo resultado real da outra instância antes de decidir qualquer coisa.
153
- const remoteEntry = await waitForRemoteResult(dedupKey, remoteReservationPollIntervalMs, remoteReservationMaxWaitMs);
154
- if (remoteEntry) {
155
- return remoteEntry.result;
156
- }
157
- // Esgotado o tempo de espera: a reserva remota pode estar órfã (a instância que a
158
- // detinha morreu sem liberar) — tenta assumir. Se o TTL da reserva remota já expirou
159
- // no store, esta chamada adquire; caso contrário, ainda pertence a outra instância viva.
160
- reservation = await safeDedupCall('reserve', () => dedupStore.reserve(dedupKey, MIN_DEDUP_WINDOW_MS), { acquired: true });
161
- if (!reservation.acquired) {
162
- if (reservation.entry) {
163
- return reservation.entry.result;
164
- }
165
- // Ainda sem dono claro após a espera + nova tentativa: nunca reenviar às cegas
166
- // (romperia o invariante de dedup). Falha determinística e retryable — o consumidor
167
- // decide se tenta de novo (RFC §5, taxonomia por retryability).
168
- return {
169
- status: 'failed',
170
- error: {
171
- code: 'provider-unavailable',
172
- message: 'Coordenação de deduplicação não respondeu a tempo; tente novamente.',
173
- },
174
- };
175
- }
176
- }
177
- // `reservation.acquired === true`: este chamador é o dono do envio.
178
- const result = await performSend(input);
179
- await safeDedupCall('set', () => dedupStore.set(dedupKey, { result, expiresAt: Date.now() + MIN_DEDUP_WINDOW_MS }), undefined);
180
- return result;
181
- }
182
- finally {
183
- localSendsInFlight.delete(dedupKey);
184
- }
185
- })();
186
- localSendsInFlight.set(dedupKey, sendPromise);
187
- return sendPromise;
188
- }
189
- async function sendTransactionalEmail(rawInput) {
190
- let input = rawInput;
191
- for (const hook of hooks) {
192
- if (hook.beforeSend) {
193
- input = runSafely(() => hook.beforeSend(input), apiKey) ?? input;
194
- }
195
- }
196
- const startedAt = Date.now();
197
- if (!apiKey) {
198
- const result = { status: 'skipped' };
199
- logOutcome(input, result, startedAt, apiKey);
200
- notifyAfterSend(hooks, input, result, apiKey);
201
- return result;
202
- }
203
- const dedupKey = input.idempotencyKey
204
- ? buildDedupKey(input.to, input.template, input.idempotencyKey)
205
- : null;
206
- const result = dedupKey ? await sendDeduplicated(input, dedupKey) : await performSend(input);
207
- logOutcome(input, result, startedAt, apiKey);
208
- notifyAfterSend(hooks, input, result, apiKey);
209
- return result;
210
- }
211
- return { sendTransactionalEmail };
212
- }
213
- function errorMessage(err) {
214
- return err instanceof Error ? err.message : String(err);
215
- }
216
- /**
217
- * Log estruturado mínimo de observabilidade (validação operacional pré-certificação).
218
- * Sempre sanitizado — nunca inclui a apiKey nem o corpo bruto do provider (Bloqueador 1).
219
- * Não inclui identificador de correlação porque o contrato atual (`SendTransactionalEmailInput`)
220
- * não define um — não é inventado aqui (RFC não estende o contrato nesta correção).
221
- */
222
- function logOutcome(input, result, startedAt, apiKey) {
223
- logSanitizedInfo('[transactional-email] outcome', {
224
- status: result.status,
225
- errorCode: result.error?.code,
226
- durationMs: Date.now() - startedAt,
227
- template: input.template,
228
- deduplicated: Boolean(input.idempotencyKey),
229
- }, [apiKey]);
230
- }
231
- /** Hooks nunca podem quebrar o envio principal — falha de um hook é ignorada (logada), não propagada. */
232
- function runSafely(fn, apiKey) {
233
- try {
234
- return fn();
235
- }
236
- catch (err) {
237
- logSanitized('[transactional-email] hook falhou (ignorado):', errorMessage(err), [apiKey]);
238
- return undefined;
239
- }
240
- }
241
- function notifyAfterSend(hooks, input, result, apiKey) {
242
- for (const hook of hooks) {
243
- if (hook.afterSend) {
244
- runSafely(() => hook.afterSend(input, result), apiKey);
245
- }
246
- }
247
- }
11
+ export { createTransactionalEmailProvider } from '@baruk/communication';
248
12
  //# sourceMappingURL=provider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/mail/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,13 +1,3 @@
1
- /**
2
- * Envio de e-mail transacional via Resend (provider-agnostic na borda: a API
3
- * decide se/como enviar). Best-effort: retorna false sem lançar se indisponível
4
- * ou domínio não verificado — o fluxo de reset não deve quebrar por causa do e-mail.
5
- */
6
- export interface EmailMessage {
7
- from: string;
8
- to: string;
9
- subject: string;
10
- html: string;
11
- }
12
- export declare function sendEmail(apiKey: string | undefined, msg: EmailMessage): Promise<boolean>;
1
+ export { sendEmail, sendEmailWithResult } from '@baruk/communication';
2
+ export type { EmailMessage, SendEmailOptions, SendEmailResult } from '@baruk/communication';
13
3
  //# sourceMappingURL=resend.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAc/F"}
1
+ {"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACtE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,18 +1,12 @@
1
- export async function sendEmail(apiKey, msg) {
2
- if (!apiKey)
3
- return false;
4
- try {
5
- const res = await fetch('https://api.resend.com/emails', {
6
- method: 'POST',
7
- headers: { authorization: `Bearer ${apiKey}`, 'content-type': 'application/json' },
8
- body: JSON.stringify(msg),
9
- // Best-effort com teto: um Resend pendurado não pode segurar o chamador.
10
- signal: AbortSignal.timeout(8000),
11
- });
12
- return res.ok;
13
- }
14
- catch {
15
- return false;
16
- }
17
- }
1
+ /*
2
+ * RE-EXPORT — a implementação vive em `@baruk/communication`.
3
+ *
4
+ * Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
5
+ * mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
6
+ * comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
7
+ * consumidor receber o comportamento antigo.
8
+ *
9
+ * O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
10
+ */
11
+ export { sendEmail, sendEmailWithResult } from '@baruk/communication';
18
12
  //# sourceMappingURL=resend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resend.js","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAA0B,EAAE,GAAiB;IAC3E,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,+BAA+B,EAAE;YACvD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAClF,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACzB,yEAAyE;YACzE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;SAClC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resend.js","sourceRoot":"","sources":["../../src/mail/resend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,8 +1,2 @@
1
- import type { EmailAddress, SenderResolver } from './types.js';
2
- /** Default — sempre retorna o `from` configurado no Provider, ignorando `brand` (RFC §4.5, precedência 3). */
3
- export declare class StaticSenderResolver implements SenderResolver {
4
- private readonly defaultFrom;
5
- constructor(defaultFrom: EmailAddress);
6
- resolveFrom(): EmailAddress;
7
- }
1
+ export { StaticSenderResolver } from '@baruk/communication';
8
2
  //# sourceMappingURL=sender-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender-resolver.d.ts","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,8GAA8G;AAC9G,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,YAAY;IAEtD,WAAW,IAAI,YAAY;CAG5B"}
1
+ {"version":3,"file":"sender-resolver.d.ts","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,11 +1,12 @@
1
- /** Default — sempre retorna o `from` configurado no Provider, ignorando `brand` (RFC §4.5, precedência 3). */
2
- export class StaticSenderResolver {
3
- defaultFrom;
4
- constructor(defaultFrom) {
5
- this.defaultFrom = defaultFrom;
6
- }
7
- resolveFrom() {
8
- return this.defaultFrom;
9
- }
10
- }
1
+ /*
2
+ * RE-EXPORT — a implementação vive em `@baruk/communication`.
3
+ *
4
+ * Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
5
+ * mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
6
+ * comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
7
+ * consumidor receber o comportamento antigo.
8
+ *
9
+ * O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
10
+ */
11
+ export { StaticSenderResolver } from '@baruk/communication';
11
12
  //# sourceMappingURL=sender-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sender-resolver.js","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAEA,8GAA8G;AAC9G,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,WAAyB;QAAzB,gBAAW,GAAX,WAAW,CAAc;IAAG,CAAC;IAE1D,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
1
+ {"version":3,"file":"sender-resolver.js","sourceRoot":"","sources":["../../src/mail/sender-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,10 +1,2 @@
1
- import type { RenderedEmail, TemplateRenderer } from './types.js';
2
- /**
3
- * Default — escape hatch para consumidores sem motor de template (RFC §4.3, melhoria recomendada).
4
- * `data` já deve chegar como `{ subject, html, text? }` pronto; `template` é usado só como
5
- * rótulo opaco (logging/tag), nunca resolvido.
6
- */
7
- export declare class PassthroughTemplateRenderer implements TemplateRenderer {
8
- render(template: string, data: Record<string, unknown>): RenderedEmail;
9
- }
1
+ export { PassthroughTemplateRenderer } from '@baruk/communication';
10
2
  //# sourceMappingURL=template-renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE;;;;GAIG;AACH,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;CAavE"}
1
+ {"version":3,"file":"template-renderer.d.ts","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,17 +1,12 @@
1
- /**
2
- * Defaultescape hatch para consumidores sem motor de template (RFC §4.3, melhoria recomendada).
3
- * `data` já deve chegar como `{ subject, html, text? }` pronto; `template` é usado só como
4
- * rótulo opaco (logging/tag), nunca resolvido.
1
+ /*
2
+ * RE-EXPORTa implementação vive em `@baruk/communication`.
3
+ *
4
+ * Este arquivo era uma cópia da capability `cap.communication.transactional-email`. A
5
+ * mesma implementação existia aqui e no engine canônico, e duas cópias de um provider de
6
+ * comunicação divergem: uma ganha a correção, a outra não, e ninguém percebe até um
7
+ * consumidor receber o comportamento antigo.
8
+ *
9
+ * O caminho de import é preservado de propósito: nenhum consumidor muda uma linha.
5
10
  */
6
- export class PassthroughTemplateRenderer {
7
- render(template, data) {
8
- const subject = data['subject'];
9
- const html = data['html'];
10
- const text = data['text'];
11
- if (typeof subject !== 'string' || typeof html !== 'string') {
12
- throw new Error(`PassthroughTemplateRenderer: template "${template}" exige data.subject e data.html como string`);
13
- }
14
- return { subject, html, text: typeof text === 'string' ? text : undefined };
15
- }
16
- }
11
+ export { PassthroughTemplateRenderer } from '@baruk/communication';
17
12
  //# sourceMappingURL=template-renderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IACtC,MAAM,CAAC,QAAgB,EAAE,IAA6B;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAE1B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,0CAA0C,QAAQ,8CAA8C,CACjG,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC9E,CAAC;CACF"}
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../src/mail/template-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * A porta ÚNICA de e-mail para os fluxos que não passam pelo motor multicanal.
3
+ *
4
+ * ## O bloqueador que este arquivo fecha
5
+ *
6
+ * `SINGLE_DISPATCH_AUTHORITY=FAIL`. O guard da rodada anterior varria só
7
+ * `packages/core/src` e não enxergava o que estava do lado de fora:
8
+ *
9
+ * apps/api/src/routes/admin.ts → sendEmail(process.env.RESEND_API_KEY, …)
10
+ * apps/api/src/routes/documents.ts → sendEmail(process.env.RESEND_API_KEY, …)
11
+ * apps/api/src/routes/auth.ts → sendEmail(process.env.RESEND_API_KEY, …)
12
+ * packages/core/src/subscription-billing/service.ts → sendEmail(cfg.resendApiKey, …)
13
+ *
14
+ * Quatro caminhos de APLICAÇÃO chamando o transporte direto, cada um lendo a
15
+ * credencial e o remetente por conta própria. Não é um cliente provider paralelo
16
+ * — é o mesmo transporte —, mas é código de domínio alcançando a borda de envio
17
+ * sem passar por autoridade nenhuma, que é o que o adendo §12 proíbe.
18
+ *
19
+ * ## O que ela NÃO é
20
+ *
21
+ * **Não é o motor multicanal, e não finge ser.** Convite, reconvite, acesso ao
22
+ * Portal e recuperação de senha são comunicação de IDENTIDADE: acontecem antes de
23
+ * existir cliente, antes de existir consentimento de contribuinte, e — no caso do
24
+ * `forgot-password` — antes de existir sessão de onde tirar um tenant. Passá-los
25
+ * pelo `dispatch` exigiria inventar `recipientRef`, `subjectRef`, template
26
+ * aprovado e conta de canal para cada um; a fase que fizer isso é própria, e
27
+ * `AUTH_EMAIL_NOT_ON_SHARED_ENGINE` fica registrada como dívida.
28
+ *
29
+ * O que ela é: um **adapter de entrada** (§13). Fluxo legado sem cliente provider
30
+ * próprio, com uma porta só, nominal e vigiada.
31
+ *
32
+ * ## O que ela acrescenta de verdade
33
+ *
34
+ * Uma barreira que só renomeia o caminho não é correção. Estes fluxos ganham,
35
+ * aqui, três coisas que nenhum deles tinha:
36
+ *
37
+ * 1. **Idempotência de provider.** Nenhum dos quatro mandava `Idempotency-Key`.
38
+ * Duplo-clique em "convidar" ou retry de cron produzia duas mensagens
39
+ * idênticas na caixa de quem recebe. A chave é derivada do CONTEÚDO (ver
40
+ * `identityFor`), então retry idêntico dedupe e reconvite legítimo — que
41
+ * carrega um token novo — passa.
42
+ * 2. **Um lugar só para a credencial.** `process.env.RESEND_API_KEY` deixa de
43
+ * ser lido em quatro arquivos. Quatro leituras é onde uma delas fica para
44
+ * trás no dia da rotação.
45
+ * 3. **Um alvo só para o guard.** O guard de fronteira global proíbe `sendEmail*`
46
+ * em todo o repositório exceto no transporte, nos adapters do motor e aqui.
47
+ */
48
+ import { type EmailMessage, type SendEmailResult } from './resend.js';
49
+ /**
50
+ * De qual fluxo o e-mail é. Vocabulário FECHADO, e é o ponto.
51
+ *
52
+ * Um parâmetro `string` livre transformaria esta porta num `sendEmail` com outro
53
+ * nome: qualquer chamador novo entraria sem que ninguém revisasse. Acrescentar um
54
+ * membro aqui é uma linha de diff que aparece na revisão — que é exatamente o
55
+ * atrito desejado, porque o destino certo de um fluxo novo é o motor
56
+ * compartilhado, não esta lista.
57
+ */
58
+ export type TransactionalEmailKind =
59
+ /** Convite de usuário interno do escritório (staff). */
60
+ 'staff_invite'
61
+ /** Reemissão do convite de staff — invalida o link anterior. */
62
+ | 'staff_reinvite'
63
+ /** Convite de acesso ao Portal do Contribuinte. */
64
+ | 'portal_invite'
65
+ /** Recuperação de senha. Pré-sessão: não há tenant de onde derivar contexto. */
66
+ | 'password_reset'
67
+ /**
68
+ * Cobrança da ASSINATURA do escritório (BILL-01).
69
+ *
70
+ * É o Baruk cobrando o cliente do Baruk — o outro lado do balcão, sem régua de
71
+ * etapas, sem consentimento de contribuinte e sem multi-marca. Migrá-lo para o
72
+ * motor é trabalho próprio e está registrado como dívida NÃO bloqueante.
73
+ */
74
+ | 'subscription_dunning';
75
+ export interface TransactionalEmailRequest {
76
+ kind: TransactionalEmailKind;
77
+ message: EmailMessage;
78
+ /**
79
+ * Credencial do provider.
80
+ *
81
+ * Explícita quando o chamador já a tem injetada (o cron de assinatura recebe a
82
+ * dele por configuração); omitida quando o chamador é uma rota HTTP, e nesse
83
+ * caso vale a do ambiente. O valor entra e morre aqui: nunca é devolvido,
84
+ * logado nem anexado ao resultado.
85
+ */
86
+ apiKey?: string;
87
+ /**
88
+ * Transporte injetável. **Nenhum teste deve alcançar a rede real.**
89
+ *
90
+ * Mesmo ponto de injeção que `EmailAdapterConfig` do motor multicanal já
91
+ * expõe, e pela mesma razão: a alternativa seria o teste exportar
92
+ * `RESEND_ALLOW_IN_TEST=1`, que vale para o PROCESSO inteiro e desligaria a
93
+ * supressão de todas as suítes que rodam ao lado — inclusive as que chamam a
94
+ * rota real de convite.
95
+ */
96
+ fetchImpl?: typeof fetch;
97
+ }
98
+ /**
99
+ * Envia, com o desfecho detalhado.
100
+ *
101
+ * Best-effort como sempre foi: devolve o resultado, nunca lança. Quem chama
102
+ * decide o que fazer — e continua podendo distinguir "o provider recusou" de "a
103
+ * mensagem saiu", que é a distinção que fez o Portal ficar meses sem acesso
104
+ * ativo quando ela não existia.
105
+ */
106
+ export declare function sendTransactionalOutboundWithResult(req: TransactionalEmailRequest): Promise<SendEmailResult>;
107
+ /**
108
+ * Envia e devolve só se saiu.
109
+ *
110
+ * A forma que os quatro chamadores legados já usavam (`boolean`), preservada para
111
+ * que a consolidação não mude a resposta de nenhuma rota — nem o `201` do
112
+ * convite, nem o campo `invitationEmailSent` que a tela lê.
113
+ */
114
+ export declare function sendTransactionalOutbound(req: TransactionalEmailRequest): Promise<boolean>;
115
+ //# sourceMappingURL=transactional-outbound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional-outbound.d.ts","sourceRoot":"","sources":["../../src/mail/transactional-outbound.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAGH,OAAO,EAAuB,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3F;;;;;;;;GAQG;AACH,MAAM,MAAM,sBAAsB;AAChC,wDAAwD;AACtD,cAAc;AAChB,gEAAgE;GAC9D,gBAAgB;AAClB,mDAAmD;GACjD,eAAe;AACjB,gFAAgF;GAC9E,gBAAgB;AAClB;;;;;;GAMG;GACD,sBAAsB,CAAC;AAE3B,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,sBAAsB,CAAC;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAyCD;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,GAAG,EAAE,yBAAyB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAK1B;AAED;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,yBAAyB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhG"}