@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
@@ -1 +1 @@
1
- {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../../src/mail/template-renderer.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,MAAa,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;AAdD,kEAcC"}
1
+ {"version":3,"file":"template-renderer.js","sourceRoot":"","sources":["../../../src/mail/template-renderer.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,sDAAmE;AAA1D,4HAAA,2BAA2B,OAAA"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * A porta ÚNICA de e-mail para os fluxos que não passam pelo motor multicanal.
4
+ *
5
+ * ## O bloqueador que este arquivo fecha
6
+ *
7
+ * `SINGLE_DISPATCH_AUTHORITY=FAIL`. O guard da rodada anterior varria só
8
+ * `packages/core/src` e não enxergava o que estava do lado de fora:
9
+ *
10
+ * apps/api/src/routes/admin.ts → sendEmail(process.env.RESEND_API_KEY, …)
11
+ * apps/api/src/routes/documents.ts → sendEmail(process.env.RESEND_API_KEY, …)
12
+ * apps/api/src/routes/auth.ts → sendEmail(process.env.RESEND_API_KEY, …)
13
+ * packages/core/src/subscription-billing/service.ts → sendEmail(cfg.resendApiKey, …)
14
+ *
15
+ * Quatro caminhos de APLICAÇÃO chamando o transporte direto, cada um lendo a
16
+ * credencial e o remetente por conta própria. Não é um cliente provider paralelo
17
+ * — é o mesmo transporte —, mas é código de domínio alcançando a borda de envio
18
+ * sem passar por autoridade nenhuma, que é o que o adendo §12 proíbe.
19
+ *
20
+ * ## O que ela NÃO é
21
+ *
22
+ * **Não é o motor multicanal, e não finge ser.** Convite, reconvite, acesso ao
23
+ * Portal e recuperação de senha são comunicação de IDENTIDADE: acontecem antes de
24
+ * existir cliente, antes de existir consentimento de contribuinte, e — no caso do
25
+ * `forgot-password` — antes de existir sessão de onde tirar um tenant. Passá-los
26
+ * pelo `dispatch` exigiria inventar `recipientRef`, `subjectRef`, template
27
+ * aprovado e conta de canal para cada um; a fase que fizer isso é própria, e
28
+ * `AUTH_EMAIL_NOT_ON_SHARED_ENGINE` fica registrada como dívida.
29
+ *
30
+ * O que ela é: um **adapter de entrada** (§13). Fluxo legado sem cliente provider
31
+ * próprio, com uma porta só, nominal e vigiada.
32
+ *
33
+ * ## O que ela acrescenta de verdade
34
+ *
35
+ * Uma barreira que só renomeia o caminho não é correção. Estes fluxos ganham,
36
+ * aqui, três coisas que nenhum deles tinha:
37
+ *
38
+ * 1. **Idempotência de provider.** Nenhum dos quatro mandava `Idempotency-Key`.
39
+ * Duplo-clique em "convidar" ou retry de cron produzia duas mensagens
40
+ * idênticas na caixa de quem recebe. A chave é derivada do CONTEÚDO (ver
41
+ * `identityFor`), então retry idêntico dedupe e reconvite legítimo — que
42
+ * carrega um token novo — passa.
43
+ * 2. **Um lugar só para a credencial.** `process.env.RESEND_API_KEY` deixa de
44
+ * ser lido em quatro arquivos. Quatro leituras é onde uma delas fica para
45
+ * trás no dia da rotação.
46
+ * 3. **Um alvo só para o guard.** O guard de fronteira global proíbe `sendEmail*`
47
+ * em todo o repositório exceto no transporte, nos adapters do motor e aqui.
48
+ */
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.sendTransactionalOutboundWithResult = sendTransactionalOutboundWithResult;
51
+ exports.sendTransactionalOutbound = sendTransactionalOutbound;
52
+ const node_crypto_1 = require("node:crypto");
53
+ const resend_js_1 = require("./resend.js");
54
+ /**
55
+ * A chave que o provider vai deduplicar.
56
+ *
57
+ * Derivada do CONTEÚDO — destinatário, assunto, remetente e corpo — e não de um
58
+ * identificador de negócio. A escolha decide o comportamento em produção:
59
+ *
60
+ * • retry idêntico (duplo-clique, reexecução de cron) produz a MESMA chave, e o
61
+ * Resend devolve a resposta original sem mandar a segunda mensagem;
62
+ * • reconvite legítimo carrega um token novo no corpo, logo uma chave nova, e
63
+ * sai normalmente.
64
+ *
65
+ * Derivar de `kind + destinatário` faria o oposto e seria pior que não ter chave:
66
+ * o reconvite legítimo seria silenciosamente descartado pelo provider dentro da
67
+ * janela de 24 h, e ninguém veria — a resposta de um replay é `200`.
68
+ *
69
+ * `sha256` hexadecimal, 64 caracteres, dentro do limite de 1 a 256 do provider.
70
+ */
71
+ function identityFor(req) {
72
+ /*
73
+ * Serializado como ARRAY, e não concatenado com um separador.
74
+ *
75
+ * Concatenar campos com um caractere qualquer é ambíguo: `to='a b'` com
76
+ * `from='c'` produz a mesma cadeia que `to='a'` com `from='b c'`, e duas
77
+ * mensagens diferentes ganhariam a mesma chave — o provider descartaria a
78
+ * segunda como replay. `JSON.stringify` de um array escapa os campos e o
79
+ * comprimento fica implícito na estrutura, então nenhum conteúdo consegue
80
+ * imitar a fronteira entre dois campos.
81
+ */
82
+ const material = JSON.stringify([
83
+ req.kind,
84
+ req.message.to,
85
+ req.message.from,
86
+ req.message.subject,
87
+ req.message.html,
88
+ req.message.text ?? null,
89
+ ]);
90
+ return (0, node_crypto_1.createHash)('sha256').update(material, 'utf8').digest('hex');
91
+ }
92
+ /**
93
+ * Envia, com o desfecho detalhado.
94
+ *
95
+ * Best-effort como sempre foi: devolve o resultado, nunca lança. Quem chama
96
+ * decide o que fazer — e continua podendo distinguir "o provider recusou" de "a
97
+ * mensagem saiu", que é a distinção que fez o Portal ficar meses sem acesso
98
+ * ativo quando ela não existia.
99
+ */
100
+ async function sendTransactionalOutboundWithResult(req) {
101
+ return (0, resend_js_1.sendEmailWithResult)(req.apiKey ?? process.env.RESEND_API_KEY, req.message, {
102
+ idempotencyKey: identityFor(req),
103
+ fetchImpl: req.fetchImpl,
104
+ });
105
+ }
106
+ /**
107
+ * Envia e devolve só se saiu.
108
+ *
109
+ * A forma que os quatro chamadores legados já usavam (`boolean`), preservada para
110
+ * que a consolidação não mude a resposta de nenhuma rota — nem o `201` do
111
+ * convite, nem o campo `invitationEmailSent` que a tela lê.
112
+ */
113
+ async function sendTransactionalOutbound(req) {
114
+ const result = await sendTransactionalOutboundWithResult(req);
115
+ return result.ok;
116
+ }
117
+ //# sourceMappingURL=transactional-outbound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactional-outbound.js","sourceRoot":"","sources":["../../../src/mail/transactional-outbound.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;;AAuGH,kFAOC;AASD,8DAGC;AAxHD,6CAAyC;AACzC,2CAA2F;AAqD3F;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,WAAW,CAAC,GAA8B;IACjD;;;;;;;;;OASG;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,GAAG,CAAC,IAAI;QACR,GAAG,CAAC,OAAO,CAAC,EAAE;QACd,GAAG,CAAC,OAAO,CAAC,IAAI;QAChB,GAAG,CAAC,OAAO,CAAC,OAAO;QACnB,GAAG,CAAC,OAAO,CAAC,IAAI;QAChB,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI;KACzB,CAAC,CAAC;IACH,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,mCAAmC,CACvD,GAA8B;IAE9B,OAAO,IAAA,+BAAmB,EAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE;QAChF,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC;QAChC,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,yBAAyB,CAAC,GAA8B;IAC5E,MAAM,MAAM,GAAG,MAAM,mCAAmC,CAAC,GAAG,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC"}
@@ -1,38 +1,11 @@
1
1
  "use strict";
2
- // cap.communication.transactional-email — contrato canônico (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 v0.2).
3
- // Ver docs/governance/RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001.md no repo baruk-ecosystem.
4
2
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = exports.DEFAULT_TIMEOUT_MS = exports.MIN_DEDUP_WINDOW_MS = exports.TRANSACTIONAL_EMAIL_CONTRACT_VERSION = void 0;
6
- exports.isRetryableError = isRetryableError;
7
- /**
8
- * Versão do contrato público desta capability (RFC-CAPABILITY-TRANSACTIONAL-EMAIL-001 §12, SemVer próprio
9
- * de capability independente da versão do pacote `@baruk/core`, que versiona o motor inteiro, não uma
10
- * capability isolada). `0.2.1`: hardening pré-certificação (Capability Certification 001, Auditoria Codex)
11
- * sanitização de segredos, dedup atômica, validação de endereço, exceções internas contidas. `0.2.2`:
12
- * hardening pós-Certification Round 2 sanitização genérica estendida (URI-embedded credentials, token
13
- * estruturado, alta entropia) e coalescência distribuída real (espera limitada por reserva remota em
14
- * andamento, nunca reenvio às cegas). Nenhuma das duas mudou assinatura pública (patch, não minor/major).
15
- */
16
- exports.TRANSACTIONAL_EMAIL_CONTRACT_VERSION = '0.2.2';
17
- /** Janela mínima de deduplicação exigida pela RFC §4.2 (24h) — implementações podem manter por mais tempo, nunca menos. */
18
- exports.MIN_DEDUP_WINDOW_MS = 24 * 60 * 60 * 1000;
19
- /** Timeout padrão do Provider (RFC §5 — herdado empiricamente da implementação mais madura do inventário). */
20
- exports.DEFAULT_TIMEOUT_MS = 12_000;
21
- /**
22
- * Default de poll ao aguardar uma reserva remota em andamento num `DedupStore` `mode: 'shared'`
23
- * (Bloqueador 2 — Certification Round 2). Baixo o suficiente para não atrasar percebivelmente
24
- * o caso comum (reserva local, sem espera nenhuma).
25
- */
26
- exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = 200;
27
- /**
28
- * Default de tempo máximo de espera por uma reserva remota antes de tentar assumi-la e,
29
- * falhando isso, devolver falha determinística retryable (Bloqueador 2 — Certification Round 2).
30
- * Maior que `DEFAULT_TIMEOUT_MS` — dá à instância dona tempo de terminar o próprio envio
31
- * (que pode levar até `DEFAULT_TIMEOUT_MS`) antes desta instância desistir de esperar.
32
- */
33
- exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = 15_000;
34
- /** Utilitário de conveniência para o consumidor decidir retry — não usado internamente pelo core (RFC §5). */
35
- function isRetryableError(code) {
36
- return code === 'timeout' || code === 'provider-unavailable';
37
- }
3
+ exports.isRetryableError = exports.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS = exports.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS = exports.TRANSACTIONAL_EMAIL_CONTRACT_VERSION = exports.MIN_DEDUP_WINDOW_MS = exports.DEFAULT_TIMEOUT_MS = void 0;
4
+ var communication_1 = require("@baruk/communication");
5
+ Object.defineProperty(exports, "DEFAULT_TIMEOUT_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_TIMEOUT_MS; } });
6
+ Object.defineProperty(exports, "MIN_DEDUP_WINDOW_MS", { enumerable: true, get: function () { return communication_1.MIN_DEDUP_WINDOW_MS; } });
7
+ Object.defineProperty(exports, "TRANSACTIONAL_EMAIL_CONTRACT_VERSION", { enumerable: true, get: function () { return communication_1.TRANSACTIONAL_EMAIL_CONTRACT_VERSION; } });
8
+ Object.defineProperty(exports, "DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_REMOTE_RESERVATION_POLL_INTERVAL_MS; } });
9
+ Object.defineProperty(exports, "DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS", { enumerable: true, get: function () { return communication_1.DEFAULT_REMOTE_RESERVATION_MAX_WAIT_MS; } });
10
+ Object.defineProperty(exports, "isRetryableError", { enumerable: true, get: function () { return communication_1.isRetryableError; } });
38
11
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mail/types.ts"],"names":[],"mappings":";AAAA,2GAA2G;AAC3G,yFAAyF;;;AA8JzF,4CAEC;AAnCD;;;;;;;;GAQG;AACU,QAAA,oCAAoC,GAAG,OAAO,CAAC;AAE5D,2HAA2H;AAC9G,QAAA,mBAAmB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEvD,8GAA8G;AACjG,QAAA,kBAAkB,GAAG,MAAM,CAAC;AAEzC;;;;GAIG;AACU,QAAA,2CAA2C,GAAG,GAAG,CAAC;AAE/D;;;;;GAKG;AACU,QAAA,sCAAsC,GAAG,MAAM,CAAC;AAE7D,8GAA8G;AAC9G,SAAgB,gBAAgB,CAAC,IAAuB;IACtD,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,sBAAsB,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/mail/types.ts"],"names":[],"mappings":";;;AA0BA,sDAO8B;AAN5B,mHAAA,kBAAkB,OAAA;AAClB,oHAAA,mBAAmB,OAAA;AACnB,qIAAA,oCAAoC,OAAA;AACpC,4IAAA,2CAA2C,OAAA;AAC3C,uIAAA,sCAAsC,OAAA;AACtC,iHAAA,gBAAgB,OAAA"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.invitePortalUser = invitePortalUser;
4
+ exports.listPortalUsers = listPortalUsers;
5
+ exports.revokePortalAccess = revokePortalAccess;
6
+ const shared_1 = require("@baruk/shared");
7
+ const audit_js_1 = require("../audit/audit.js");
8
+ const password_reset_js_1 = require("../auth/password-reset.js");
9
+ const repository_js_1 = require("../users/repository.js");
10
+ const PORTAL_ROLE_KEY = 'client_titular';
11
+ async function invitePortalUser(tx, input) {
12
+ const tenantId = await currentTenantId(tx);
13
+ // O cliente precisa existir NESTE tenant. A RLS já garantiria, mas uma
14
+ // mensagem clara vale mais que um erro de FK.
15
+ const client = await tx `
16
+ SELECT id FROM client WHERE id = ${input.clientId} AND deleted_at IS NULL
17
+ `;
18
+ if (!client[0])
19
+ throw new shared_1.NotFoundError('Cliente não encontrado');
20
+ const existing = await tx `
21
+ SELECT id, full_name, user_type, status FROM "user"
22
+ WHERE email = ${input.email} AND deleted_at IS NULL
23
+ `;
24
+ let userId;
25
+ let fullName;
26
+ let isNewUser;
27
+ // Reconvidar quem ainda não ativou precisa emitir um token novo. Sem isto o
28
+ // usuário fica preso: o primeiro convite não chegou (ou expirou) e nenhum
29
+ // reenvio produz link, porque só o cadastro inicial emitia token.
30
+ let isPendingActivation = false;
31
+ if (existing[0]) {
32
+ // Um e-mail de staff não vira acesso de portal por convite. Os dois tipos
33
+ // têm superfícies e escopos distintos, e converter silenciosamente daria a
34
+ // um colaborador do escritório uma sessão de cliente.
35
+ if (existing[0].user_type !== 'client_portal') {
36
+ throw new shared_1.ConflictError('Este e-mail já pertence a um usuário interno. Use um e-mail diferente para o acesso do cliente.');
37
+ }
38
+ userId = existing[0].id;
39
+ fullName = existing[0].full_name;
40
+ isNewUser = false;
41
+ // Só quem ainda não ativou recebe token novo. Emitir para um usuário já
42
+ // ativo transformaria o convite em redefinição de senha à revelia do
43
+ // cliente — quem convida não pode provocar isso.
44
+ isPendingActivation = existing[0].status === 'invited';
45
+ }
46
+ else {
47
+ userId = (0, shared_1.uuidv7)();
48
+ fullName = input.fullName;
49
+ isNewUser = true;
50
+ await tx `
51
+ INSERT INTO "user" (id, email, full_name, user_type, status, auth_provider)
52
+ VALUES (${userId}, ${input.email}, ${input.fullName}, 'client_portal', 'invited', 'password')
53
+ `;
54
+ }
55
+ // Membership no tenant — sem ela o usuário não resolve tenant no login.
56
+ const membership = await tx `
57
+ SELECT id FROM membership
58
+ WHERE user_id = ${userId} AND tenant_id = ${tenantId} AND deleted_at IS NULL
59
+ `;
60
+ if (!membership[0]) {
61
+ await tx `
62
+ INSERT INTO membership (id, tenant_id, user_id, status, invited_by)
63
+ VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, 'invited', ${input.invitedBy})
64
+ `;
65
+ await (0, repository_js_1.setUserRole)(tx, userId, PORTAL_ROLE_KEY);
66
+ }
67
+ // O vínculo com o cliente. Idempotente: reconvidar não duplica.
68
+ const access = await tx `
69
+ INSERT INTO client_portal_access (id, tenant_id, user_id, client_id, status)
70
+ VALUES (${(0, shared_1.uuidv7)()}, ${tenantId}, ${userId}, ${input.clientId}, 'active')
71
+ ON CONFLICT (tenant_id, user_id, client_id) DO UPDATE SET status = 'active'
72
+ RETURNING id
73
+ `;
74
+ let activationToken = null;
75
+ if (isNewUser || isPendingActivation) {
76
+ const activation = await (0, password_reset_js_1.createActivationToken)(tx, { userId, tenantId });
77
+ activationToken = activation.token;
78
+ }
79
+ await (0, audit_js_1.appendAudit)(tx, {
80
+ actorId: input.invitedBy,
81
+ action: 'portal_user_invited',
82
+ resourceType: 'client_portal_access',
83
+ resourceId: access[0].id,
84
+ // O token nunca entra na auditoria, nem em metadata: o registro é lido por
85
+ // gente que não deve poder assumir a conta do cliente.
86
+ metadata: { email: input.email, clientId: input.clientId, isNewUser, isPendingActivation },
87
+ });
88
+ return {
89
+ userId,
90
+ email: input.email,
91
+ fullName,
92
+ clientId: input.clientId,
93
+ activationToken,
94
+ alreadyHadAccess: !isNewUser && membership.length > 0,
95
+ isReinvite: isPendingActivation,
96
+ };
97
+ }
98
+ async function listPortalUsers(tx, clientId) {
99
+ const rows = await tx `
100
+ SELECT u.id AS user_id, u.email, u.full_name, u.status,
101
+ cpa.status AS access_status, u.last_login_at
102
+ FROM client_portal_access cpa
103
+ JOIN "user" u ON u.id = cpa.user_id
104
+ WHERE cpa.client_id = ${clientId} AND u.deleted_at IS NULL
105
+ ORDER BY u.full_name
106
+ `;
107
+ return rows.map((r) => ({
108
+ userId: r.user_id,
109
+ email: r.email,
110
+ fullName: r.full_name,
111
+ status: r.status,
112
+ accessStatus: r.access_status,
113
+ lastLoginAt: r.last_login_at ? r.last_login_at.toISOString() : null,
114
+ }));
115
+ }
116
+ /**
117
+ * Revoga o acesso. Não apaga o usuário nem a trilha: quem enviou um documento
118
+ * continua identificável depois de perder o acesso — é justamente isso que
119
+ * torna a prova utilizável meses depois.
120
+ */
121
+ async function revokePortalAccess(tx, input) {
122
+ const rows = await tx `
123
+ UPDATE client_portal_access
124
+ SET status = 'revoked'
125
+ WHERE client_id = ${input.clientId} AND user_id = ${input.userId} AND status = 'active'
126
+ RETURNING id
127
+ `;
128
+ if (!rows[0])
129
+ throw new shared_1.NotFoundError('Acesso ativo não encontrado');
130
+ await (0, audit_js_1.appendAudit)(tx, {
131
+ actorId: input.revokedBy,
132
+ action: 'portal_access_revoked',
133
+ resourceType: 'client_portal_access',
134
+ resourceId: rows[0].id,
135
+ metadata: { clientId: input.clientId, userId: input.userId },
136
+ });
137
+ }
138
+ async function currentTenantId(tx) {
139
+ const rows = await tx `
140
+ SELECT current_setting('app.current_tenant')::uuid AS tenant_id
141
+ `;
142
+ return rows[0].tenant_id;
143
+ }
144
+ //# sourceMappingURL=provisioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.js","sourceRoot":"","sources":["../../../src/portal/provisioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /**
3
+ * Serialização canônica (RFC-CAPABILITY-PRICING-ENGINE-001 §22.1 F2) — usada
4
+ * exclusivamente para compor o `fingerprint`/`quoteId` (nunca para persistir
5
+ * ou transportar dados). `JSON.stringify` cru depende da ordem de inserção
6
+ * das chaves do objeto — dois `PricingRequest` economicamente idênticos, mas
7
+ * construídos com `addonQuantities`/Records em ordem de chave diferente,
8
+ * produziam hashes diferentes antes deste módulo (achado do Design Review,
9
+ * §22.1). `canonicalize` ordena chaves recursivamente em qualquer nível de
10
+ * objeto/Record/Map aninhado — arrays preservam ordem (a ordem de array é
11
+ * semanticamente relevante quando existe; coleções sem ordem própria, como
12
+ * `bundleRules`, são pré-ordenadas pelo chamador antes de chegar aqui).
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.canonicalStringify = canonicalStringify;
16
+ function canonicalize(value) {
17
+ if (value instanceof Map) {
18
+ const entries = Array.from(value.entries())
19
+ .map(([k, v]) => [String(k), canonicalize(v)])
20
+ .sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));
21
+ const record = {};
22
+ for (const [k, v] of entries)
23
+ record[k] = v;
24
+ return record;
25
+ }
26
+ if (Array.isArray(value)) {
27
+ return value.map(canonicalize);
28
+ }
29
+ if (value !== null && typeof value === 'object') {
30
+ const record = value;
31
+ const result = {};
32
+ for (const key of Object.keys(record).sort()) {
33
+ result[key] = canonicalize(record[key]);
34
+ }
35
+ return result;
36
+ }
37
+ return value;
38
+ }
39
+ function canonicalStringify(value) {
40
+ return JSON.stringify(canonicalize(value));
41
+ }
42
+ //# sourceMappingURL=canonical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/pricing-engine/canonical.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAyBH,gDAEC;AAzBD,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,YAAY,GAAG,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAU,CAAC;aACtD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7C,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC"}
@@ -41,7 +41,12 @@ class PricingEngineError extends Error {
41
41
  this.ruleIds = ruleIds;
42
42
  }
43
43
  toJSON() {
44
- return { code: this.code, errorClass: this.errorClass, message: this.message, ruleIds: this.ruleIds };
44
+ return {
45
+ code: this.code,
46
+ errorClass: this.errorClass,
47
+ message: this.message,
48
+ ruleIds: this.ruleIds,
49
+ };
45
50
  }
46
51
  }
47
52
  exports.PricingEngineError = PricingEngineError;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pricing-engine/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA6BH,MAAM,WAAW,GAAgD;IAC/D,2BAA2B,EAAE,eAAe;IAC5C,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAAE,YAAY;IAChC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,WAAW;IACpC,gBAAgB,EAAE,YAAY;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,YAAY;IACjC,6BAA6B,EAAE,eAAe;IAC9C,oBAAoB,EAAE,eAAe;IACrC,qBAAqB,EAAE,WAAW;IAClC,wBAAwB,EAAE,YAAY;CACvC,CAAC;AAEF,MAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAmB;IACvB,UAAU,CAAoB;IACvC,2EAA2E;IAClE,OAAO,CAAW;IAE3B,YAAY,IAAsB,EAAE,OAAe,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;IACxG,CAAC;CACF;AAjBD,gDAiBC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/pricing-engine/errors.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA8BH,MAAM,WAAW,GAAgD;IAC/D,2BAA2B,EAAE,eAAe;IAC5C,iBAAiB,EAAE,YAAY;IAC/B,kBAAkB,EAAE,YAAY;IAChC,mBAAmB,EAAE,WAAW;IAChC,mBAAmB,EAAE,UAAU;IAC/B,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,WAAW;IACpC,gBAAgB,EAAE,YAAY;IAC9B,gBAAgB,EAAE,sBAAsB;IACxC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,UAAU;IAC/B,mBAAmB,EAAE,YAAY;IACjC,6BAA6B,EAAE,eAAe;IAC9C,oBAAoB,EAAE,eAAe;IACrC,qBAAqB,EAAE,WAAW;IAClC,wBAAwB,EAAE,YAAY;CACvC,CAAC;AAEF,MAAa,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAmB;IACvB,UAAU,CAAoB;IACvC,2EAA2E;IAClE,OAAO,CAAW;IAE3B,YAAY,IAAsB,EAAE,OAAe,EAAE,UAAoB,EAAE;QACzE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,MAAM;QAMJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC;IACJ,CAAC;CACF;AA3BD,gDA2BC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareQuotes = exports.normalizeCanonicalQuote = exports.computePricingQuote = exports.computeProration = exports.resolveBundleDiscount = exports.freeModuleCodesForBundle = exports.assertBundleModulesCovered = exports.PRICING_RULE_STEPS_IN_ORDER = exports.PRICING_ENGINE_VERSION = exports.PricingEngineError = exports.clampNonNegative = exports.prorateByDays = exports.applyPercent = exports.multiplyByQuantity = exports.subtractCents = exports.addCents = exports.centsToReais = exports.reaisToCents = exports.roundHalfEven = void 0;
3
+ exports.runShadowComparison = exports.computeShadowMetrics = exports.categorizeDiffs = exports.normalizeLegacyQuote = exports.toPricingRequest = exports.STORAGE_ADDON_TARGET_CODE = exports.compareQuotes = exports.normalizeCanonicalQuote = exports.computePricingQuote = exports.computeProration = exports.resolveBundleDiscount = exports.freeModuleCodesForBundle = exports.assertBundleModulesCovered = exports.PRICING_RULE_STEPS_IN_ORDER = exports.PRICING_ENGINE_VERSION = exports.PricingEngineError = exports.clampNonNegative = exports.prorateByDays = exports.applyPercent = exports.multiplyByQuantity = exports.subtractCents = exports.addCents = exports.centsToReais = exports.reaisToCents = exports.roundHalfEven = void 0;
4
4
  var money_js_1 = require("./money.js");
5
5
  Object.defineProperty(exports, "roundHalfEven", { enumerable: true, get: function () { return money_js_1.roundHalfEven; } });
6
6
  Object.defineProperty(exports, "reaisToCents", { enumerable: true, get: function () { return money_js_1.reaisToCents; } });
@@ -27,4 +27,15 @@ Object.defineProperty(exports, "computePricingQuote", { enumerable: true, get: f
27
27
  var shadow_js_1 = require("./shadow.js");
28
28
  Object.defineProperty(exports, "normalizeCanonicalQuote", { enumerable: true, get: function () { return shadow_js_1.normalizeCanonicalQuote; } });
29
29
  Object.defineProperty(exports, "compareQuotes", { enumerable: true, get: function () { return shadow_js_1.compareQuotes; } });
30
+ var shadow_adapter_js_1 = require("./shadow-adapter.js");
31
+ Object.defineProperty(exports, "STORAGE_ADDON_TARGET_CODE", { enumerable: true, get: function () { return shadow_adapter_js_1.STORAGE_ADDON_TARGET_CODE; } });
32
+ Object.defineProperty(exports, "toPricingRequest", { enumerable: true, get: function () { return shadow_adapter_js_1.toPricingRequest; } });
33
+ var shadow_normalizer_js_1 = require("./shadow-normalizer.js");
34
+ Object.defineProperty(exports, "normalizeLegacyQuote", { enumerable: true, get: function () { return shadow_normalizer_js_1.normalizeLegacyQuote; } });
35
+ var shadow_diff_js_1 = require("./shadow-diff.js");
36
+ Object.defineProperty(exports, "categorizeDiffs", { enumerable: true, get: function () { return shadow_diff_js_1.categorizeDiffs; } });
37
+ var shadow_metrics_js_1 = require("./shadow-metrics.js");
38
+ Object.defineProperty(exports, "computeShadowMetrics", { enumerable: true, get: function () { return shadow_metrics_js_1.computeShadowMetrics; } });
39
+ var shadow_facade_js_1 = require("./shadow-facade.js");
40
+ Object.defineProperty(exports, "runShadowComparison", { enumerable: true, get: function () { return shadow_facade_js_1.runShadowComparison; } });
30
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pricing-engine/index.ts"],"names":[],"mappings":";;;AACA,uCAUoB;AATlB,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAIlB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAsB3B,uCAAiF;AAAxE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAE5D,yCAA0G;AAAjG,uHAAA,0BAA0B,OAAA;AAAE,qHAAA,wBAAwB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AACpF,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAG5B,yCAAqE;AAA5D,oHAAA,uBAAuB,OAAA;AAAE,0GAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/pricing-engine/index.ts"],"names":[],"mappings":";;;AACA,uCAUoB;AATlB,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AACZ,wGAAA,YAAY,OAAA;AACZ,oGAAA,QAAQ,OAAA;AACR,yGAAA,aAAa,OAAA;AACb,8GAAA,kBAAkB,OAAA;AAClB,wGAAA,YAAY,OAAA;AACZ,yGAAA,aAAa,OAAA;AACb,4GAAA,gBAAgB,OAAA;AAIlB,yCAAiD;AAAxC,+GAAA,kBAAkB,OAAA;AAsB3B,uCAAiF;AAAxE,kHAAA,sBAAsB,OAAA;AAAE,uHAAA,2BAA2B,OAAA;AAE5D,yCAIqB;AAHnB,uHAAA,0BAA0B,OAAA;AAC1B,qHAAA,wBAAwB,OAAA;AACxB,kHAAA,qBAAqB,OAAA;AAEvB,+CAAkD;AAAzC,gHAAA,gBAAgB,OAAA;AACzB,6CAAoD;AAA3C,kHAAA,mBAAmB,OAAA;AAQ5B,yCAAqE;AAA5D,oHAAA,uBAAuB,OAAA;AAAE,0GAAA,aAAa,OAAA;AAgB/C,yDAAkF;AAAzE,8HAAA,yBAAyB,OAAA;AAAE,qHAAA,gBAAgB,OAAA;AACpD,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAE7B,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AAExB,yDAA2D;AAAlD,yHAAA,oBAAoB,OAAA;AAE7B,uDAAyD;AAAhD,uHAAA,mBAAmB,OAAA"}