@baruk/core 0.1.0 → 0.2.0

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 (429) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/auth/password-reset.d.ts.map +1 -1
  3. package/dist/auth/password-reset.js +2 -4
  4. package/dist/auth/password-reset.js.map +1 -1
  5. package/dist/auth/password.d.ts +2 -18
  6. package/dist/auth/password.d.ts.map +1 -1
  7. package/dist/auth/password.js +12 -51
  8. package/dist/auth/password.js.map +1 -1
  9. package/dist/auth/service.d.ts +0 -12
  10. package/dist/auth/service.d.ts.map +1 -1
  11. package/dist/auth/service.js +3 -36
  12. package/dist/auth/service.js.map +1 -1
  13. package/dist/auth/session-token.d.ts +5 -2
  14. package/dist/auth/session-token.d.ts.map +1 -1
  15. package/dist/auth/session-token.js +7 -12
  16. package/dist/auth/session-token.js.map +1 -1
  17. package/dist/billing/dunning.d.ts +33 -0
  18. package/dist/billing/dunning.d.ts.map +1 -0
  19. package/dist/billing/dunning.js +49 -0
  20. package/dist/billing/dunning.js.map +1 -0
  21. package/dist/billing/provider/asaas.d.ts +15 -0
  22. package/dist/billing/provider/asaas.d.ts.map +1 -0
  23. package/dist/billing/provider/asaas.js +121 -0
  24. package/dist/billing/provider/asaas.js.map +1 -0
  25. package/dist/billing/provider/manual.d.ts +14 -0
  26. package/dist/billing/provider/manual.d.ts.map +1 -0
  27. package/dist/billing/provider/manual.js +24 -0
  28. package/dist/billing/provider/manual.js.map +1 -0
  29. package/dist/billing/provider/registry.d.ts +12 -0
  30. package/dist/billing/provider/registry.d.ts.map +1 -0
  31. package/dist/billing/provider/registry.js +22 -0
  32. package/dist/billing/provider/registry.js.map +1 -0
  33. package/dist/billing/provider/types.d.ts +76 -0
  34. package/dist/billing/provider/types.d.ts.map +1 -0
  35. package/dist/billing/provider/types.js +9 -0
  36. package/dist/billing/provider/types.js.map +1 -0
  37. package/dist/billing/receivable.d.ts +108 -0
  38. package/dist/billing/receivable.d.ts.map +1 -0
  39. package/dist/billing/receivable.js +2 -0
  40. package/dist/billing/receivable.js.map +1 -0
  41. package/dist/billing/repository.d.ts +97 -0
  42. package/dist/billing/repository.d.ts.map +1 -0
  43. package/dist/billing/repository.js +167 -0
  44. package/dist/billing/repository.js.map +1 -0
  45. package/dist/cjs/audit/audit.js +31 -0
  46. package/dist/cjs/audit/audit.js.map +1 -0
  47. package/dist/cjs/audit/repository.js +32 -0
  48. package/dist/cjs/audit/repository.js.map +1 -0
  49. package/dist/cjs/auth/password-reset.js +58 -0
  50. package/dist/cjs/auth/password-reset.js.map +1 -0
  51. package/dist/cjs/auth/password.js +32 -0
  52. package/dist/cjs/auth/password.js.map +1 -0
  53. package/dist/cjs/auth/service.js +191 -0
  54. package/dist/cjs/auth/service.js.map +1 -0
  55. package/dist/cjs/auth/session-token.js +18 -0
  56. package/dist/cjs/auth/session-token.js.map +1 -0
  57. package/dist/cjs/billing/dunning.js +54 -0
  58. package/dist/cjs/billing/dunning.js.map +1 -0
  59. package/dist/cjs/billing/provider/asaas.js +125 -0
  60. package/dist/cjs/billing/provider/asaas.js.map +1 -0
  61. package/dist/cjs/billing/provider/manual.js +28 -0
  62. package/dist/cjs/billing/provider/manual.js.map +1 -0
  63. package/dist/cjs/billing/provider/registry.js +27 -0
  64. package/dist/cjs/billing/provider/registry.js.map +1 -0
  65. package/dist/cjs/billing/provider/types.js +10 -0
  66. package/dist/cjs/billing/provider/types.js.map +1 -0
  67. package/dist/cjs/billing/receivable.js +3 -0
  68. package/dist/cjs/billing/receivable.js.map +1 -0
  69. package/dist/cjs/billing/repository.js +180 -0
  70. package/dist/cjs/billing/repository.js.map +1 -0
  71. package/dist/cjs/clients/repository.js +123 -0
  72. package/dist/cjs/clients/repository.js.map +1 -0
  73. package/dist/cjs/commercial-catalog/catalog.js +108 -0
  74. package/dist/cjs/commercial-catalog/catalog.js.map +1 -0
  75. package/dist/cjs/commercial-catalog/consumption-contracts.js +10 -0
  76. package/dist/cjs/commercial-catalog/consumption-contracts.js.map +1 -0
  77. package/dist/cjs/commercial-catalog/coupon.js +53 -0
  78. package/dist/cjs/commercial-catalog/coupon.js.map +1 -0
  79. package/dist/cjs/commercial-catalog/index.js +16 -0
  80. package/dist/cjs/commercial-catalog/index.js.map +1 -0
  81. package/dist/cjs/commercial-catalog/offer-application.js +53 -0
  82. package/dist/cjs/commercial-catalog/offer-application.js.map +1 -0
  83. package/dist/cjs/commercial-catalog/types.js +26 -0
  84. package/dist/cjs/commercial-catalog/types.js.map +1 -0
  85. package/dist/cjs/crm/repository.js +195 -0
  86. package/dist/cjs/crm/repository.js.map +1 -0
  87. package/dist/cjs/dashboard/repository.js +39 -0
  88. package/dist/cjs/dashboard/repository.js.map +1 -0
  89. package/dist/cjs/db/client.js +27 -0
  90. package/dist/cjs/db/client.js.map +1 -0
  91. package/dist/cjs/db/context.js +43 -0
  92. package/dist/cjs/db/context.js.map +1 -0
  93. package/dist/cjs/db/load-env.js +47 -0
  94. package/dist/cjs/db/load-env.js.map +1 -0
  95. package/dist/cjs/db/seed.js +69 -0
  96. package/dist/cjs/db/seed.js.map +1 -0
  97. package/dist/cjs/entitlements/decision.js +203 -0
  98. package/dist/cjs/entitlements/decision.js.map +1 -0
  99. package/dist/cjs/entitlements/derive.js +46 -0
  100. package/dist/cjs/entitlements/derive.js.map +1 -0
  101. package/dist/cjs/entitlements/index.js +23 -0
  102. package/dist/cjs/entitlements/index.js.map +1 -0
  103. package/dist/cjs/entitlements/sources.js +60 -0
  104. package/dist/cjs/entitlements/sources.js.map +1 -0
  105. package/dist/cjs/entitlements/standing.js +42 -0
  106. package/dist/cjs/entitlements/standing.js.map +1 -0
  107. package/dist/cjs/entitlements/types.js +16 -0
  108. package/dist/cjs/entitlements/types.js.map +1 -0
  109. package/dist/cjs/import/clients-import.js +147 -0
  110. package/dist/cjs/import/clients-import.js.map +1 -0
  111. package/dist/cjs/index.js +335 -0
  112. package/dist/cjs/index.js.map +1 -0
  113. package/dist/cjs/mail/dedup-store.js +56 -0
  114. package/dist/cjs/mail/dedup-store.js.map +1 -0
  115. package/dist/cjs/mail/index.js +24 -0
  116. package/dist/cjs/mail/index.js.map +1 -0
  117. package/dist/cjs/mail/provider.js +251 -0
  118. package/dist/cjs/mail/provider.js.map +1 -0
  119. package/dist/cjs/mail/resend-client.js +103 -0
  120. package/dist/cjs/mail/resend-client.js.map +1 -0
  121. package/dist/cjs/mail/resend.js +21 -0
  122. package/dist/cjs/mail/resend.js.map +1 -0
  123. package/dist/cjs/mail/sanitize.js +56 -0
  124. package/dist/cjs/mail/sanitize.js.map +1 -0
  125. package/dist/cjs/mail/sender-resolver.js +15 -0
  126. package/dist/cjs/mail/sender-resolver.js.map +1 -0
  127. package/dist/cjs/mail/template-renderer.js +21 -0
  128. package/dist/cjs/mail/template-renderer.js.map +1 -0
  129. package/dist/cjs/mail/types.js +38 -0
  130. package/dist/cjs/mail/types.js.map +1 -0
  131. package/dist/cjs/notifications/repository.js +49 -0
  132. package/dist/cjs/notifications/repository.js.map +1 -0
  133. package/dist/cjs/onboarding/domain.js +370 -0
  134. package/dist/cjs/onboarding/domain.js.map +1 -0
  135. package/dist/cjs/onboarding/interaction-review.js +425 -0
  136. package/dist/cjs/onboarding/interaction-review.js.map +1 -0
  137. package/dist/cjs/onboarding/persistence.js +444 -0
  138. package/dist/cjs/onboarding/persistence.js.map +1 -0
  139. package/dist/cjs/onboarding/portal-actions.js +157 -0
  140. package/dist/cjs/onboarding/portal-actions.js.map +1 -0
  141. package/dist/cjs/onboarding/portal.js +177 -0
  142. package/dist/cjs/onboarding/portal.js.map +1 -0
  143. package/dist/cjs/package.json +3 -0
  144. package/dist/cjs/portal/repository.js +37 -0
  145. package/dist/cjs/portal/repository.js.map +1 -0
  146. package/dist/cjs/pricing-engine/bundle.js +49 -0
  147. package/dist/cjs/pricing-engine/bundle.js.map +1 -0
  148. package/dist/cjs/pricing-engine/errors.js +48 -0
  149. package/dist/cjs/pricing-engine/errors.js.map +1 -0
  150. package/dist/cjs/pricing-engine/index.js +30 -0
  151. package/dist/cjs/pricing-engine/index.js.map +1 -0
  152. package/dist/cjs/pricing-engine/money.js +69 -0
  153. package/dist/cjs/pricing-engine/money.js.map +1 -0
  154. package/dist/cjs/pricing-engine/pipeline.js +330 -0
  155. package/dist/cjs/pricing-engine/pipeline.js.map +1 -0
  156. package/dist/cjs/pricing-engine/proration.js +53 -0
  157. package/dist/cjs/pricing-engine/proration.js.map +1 -0
  158. package/dist/cjs/pricing-engine/shadow.js +58 -0
  159. package/dist/cjs/pricing-engine/shadow.js.map +1 -0
  160. package/dist/cjs/pricing-engine/types.js +34 -0
  161. package/dist/cjs/pricing-engine/types.js.map +1 -0
  162. package/dist/cjs/products/catalog.js +10 -0
  163. package/dist/cjs/products/catalog.js.map +1 -0
  164. package/dist/cjs/products/repository.js +61 -0
  165. package/dist/cjs/products/repository.js.map +1 -0
  166. package/dist/cjs/rbac/authorize.js +36 -0
  167. package/dist/cjs/rbac/authorize.js.map +1 -0
  168. package/dist/cjs/rbac/catalog.js +455 -0
  169. package/dist/cjs/rbac/catalog.js.map +1 -0
  170. package/dist/cjs/requests/repository.js +114 -0
  171. package/dist/cjs/requests/repository.js.map +1 -0
  172. package/dist/cjs/subscription-billing/dunning.js +26 -0
  173. package/dist/cjs/subscription-billing/dunning.js.map +1 -0
  174. package/dist/cjs/subscription-billing/events.js +45 -0
  175. package/dist/cjs/subscription-billing/events.js.map +1 -0
  176. package/dist/cjs/subscription-billing/index.js +62 -0
  177. package/dist/cjs/subscription-billing/index.js.map +1 -0
  178. package/dist/cjs/subscription-billing/plans.js +88 -0
  179. package/dist/cjs/subscription-billing/plans.js.map +1 -0
  180. package/dist/cjs/subscription-billing/product-config.js +54 -0
  181. package/dist/cjs/subscription-billing/product-config.js.map +1 -0
  182. package/dist/cjs/subscription-billing/provider/asaas.js +233 -0
  183. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -0
  184. package/dist/cjs/subscription-billing/provider/disabled.js +46 -0
  185. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -0
  186. package/dist/cjs/subscription-billing/provider/registry.js +29 -0
  187. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -0
  188. package/dist/cjs/subscription-billing/reconcile.js +198 -0
  189. package/dist/cjs/subscription-billing/reconcile.js.map +1 -0
  190. package/dist/cjs/subscription-billing/repository.js +359 -0
  191. package/dist/cjs/subscription-billing/repository.js.map +1 -0
  192. package/dist/cjs/subscription-billing/service.js +838 -0
  193. package/dist/cjs/subscription-billing/service.js.map +1 -0
  194. package/dist/cjs/subscription-billing/types.js +28 -0
  195. package/dist/cjs/subscription-billing/types.js.map +1 -0
  196. package/dist/cjs/tenancy/provisioning.js +126 -0
  197. package/dist/cjs/tenancy/provisioning.js.map +1 -0
  198. package/dist/cjs/users/repository.js +83 -0
  199. package/dist/cjs/users/repository.js.map +1 -0
  200. package/dist/cjs/vault/crypto.js +94 -0
  201. package/dist/cjs/vault/crypto.js.map +1 -0
  202. package/dist/cjs/vault/repository.js +120 -0
  203. package/dist/cjs/vault/repository.js.map +1 -0
  204. package/dist/commercial-catalog/catalog.d.ts +27 -0
  205. package/dist/commercial-catalog/catalog.d.ts.map +1 -0
  206. package/dist/commercial-catalog/catalog.js +104 -0
  207. package/dist/commercial-catalog/catalog.js.map +1 -0
  208. package/dist/commercial-catalog/consumption-contracts.d.ts +33 -0
  209. package/dist/commercial-catalog/consumption-contracts.d.ts.map +1 -0
  210. package/dist/commercial-catalog/consumption-contracts.js +9 -0
  211. package/dist/commercial-catalog/consumption-contracts.js.map +1 -0
  212. package/dist/commercial-catalog/coupon.d.ts +27 -0
  213. package/dist/commercial-catalog/coupon.d.ts.map +1 -0
  214. package/dist/commercial-catalog/coupon.js +47 -0
  215. package/dist/commercial-catalog/coupon.js.map +1 -0
  216. package/dist/commercial-catalog/index.d.ts +10 -0
  217. package/dist/commercial-catalog/index.d.ts.map +1 -0
  218. package/dist/commercial-catalog/index.js +5 -0
  219. package/dist/commercial-catalog/index.js.map +1 -0
  220. package/dist/commercial-catalog/offer-application.d.ts +39 -0
  221. package/dist/commercial-catalog/offer-application.d.ts.map +1 -0
  222. package/dist/commercial-catalog/offer-application.js +50 -0
  223. package/dist/commercial-catalog/offer-application.js.map +1 -0
  224. package/dist/commercial-catalog/types.d.ts +155 -0
  225. package/dist/commercial-catalog/types.d.ts.map +1 -0
  226. package/dist/commercial-catalog/types.js +23 -0
  227. package/dist/commercial-catalog/types.js.map +1 -0
  228. package/dist/crm/repository.d.ts +109 -0
  229. package/dist/crm/repository.d.ts.map +1 -0
  230. package/dist/crm/repository.js +181 -0
  231. package/dist/crm/repository.js.map +1 -0
  232. package/dist/db/context.d.ts +2 -0
  233. package/dist/db/context.d.ts.map +1 -1
  234. package/dist/db/context.js +3 -0
  235. package/dist/db/context.js.map +1 -1
  236. package/dist/db/migrate.js +7 -2
  237. package/dist/db/migrate.js.map +1 -1
  238. package/dist/db/seed.js +4 -1
  239. package/dist/db/seed.js.map +1 -1
  240. package/dist/entitlements/decision.d.ts +86 -0
  241. package/dist/entitlements/decision.d.ts.map +1 -0
  242. package/dist/entitlements/decision.js +196 -0
  243. package/dist/entitlements/decision.js.map +1 -0
  244. package/dist/entitlements/derive.d.ts +30 -0
  245. package/dist/entitlements/derive.d.ts.map +1 -0
  246. package/dist/entitlements/derive.js +42 -0
  247. package/dist/entitlements/derive.js.map +1 -0
  248. package/dist/entitlements/index.d.ts +10 -0
  249. package/dist/entitlements/index.d.ts.map +1 -0
  250. package/dist/entitlements/index.js +7 -0
  251. package/dist/entitlements/index.js.map +1 -0
  252. package/dist/entitlements/sources.d.ts +30 -0
  253. package/dist/entitlements/sources.d.ts.map +1 -0
  254. package/dist/entitlements/sources.js +55 -0
  255. package/dist/entitlements/sources.js.map +1 -0
  256. package/dist/entitlements/standing.d.ts +22 -0
  257. package/dist/entitlements/standing.d.ts.map +1 -0
  258. package/dist/entitlements/standing.js +38 -0
  259. package/dist/entitlements/standing.js.map +1 -0
  260. package/dist/entitlements/types.d.ts +26 -0
  261. package/dist/entitlements/types.d.ts.map +1 -0
  262. package/dist/entitlements/types.js +15 -0
  263. package/dist/entitlements/types.js.map +1 -0
  264. package/dist/index.d.ts +74 -3
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +51 -4
  267. package/dist/index.js.map +1 -1
  268. package/dist/mail/dedup-store.d.ts +25 -0
  269. package/dist/mail/dedup-store.d.ts.map +1 -0
  270. package/dist/mail/dedup-store.js +51 -0
  271. package/dist/mail/dedup-store.js.map +1 -0
  272. package/dist/mail/index.d.ts +10 -0
  273. package/dist/mail/index.d.ts.map +1 -0
  274. package/dist/mail/index.js +9 -0
  275. package/dist/mail/index.js.map +1 -0
  276. package/dist/mail/provider.d.ts +31 -0
  277. package/dist/mail/provider.d.ts.map +1 -0
  278. package/dist/mail/provider.js +248 -0
  279. package/dist/mail/provider.js.map +1 -0
  280. package/dist/mail/resend-client.d.ts +16 -0
  281. package/dist/mail/resend-client.d.ts.map +1 -0
  282. package/dist/mail/resend-client.js +100 -0
  283. package/dist/mail/resend-client.js.map +1 -0
  284. package/dist/mail/resend.d.ts.map +1 -1
  285. package/dist/mail/resend.js +2 -0
  286. package/dist/mail/resend.js.map +1 -1
  287. package/dist/mail/sanitize.d.ts +17 -0
  288. package/dist/mail/sanitize.d.ts.map +1 -0
  289. package/dist/mail/sanitize.js +51 -0
  290. package/dist/mail/sanitize.js.map +1 -0
  291. package/dist/mail/sender-resolver.d.ts +8 -0
  292. package/dist/mail/sender-resolver.d.ts.map +1 -0
  293. package/dist/mail/sender-resolver.js +11 -0
  294. package/dist/mail/sender-resolver.js.map +1 -0
  295. package/dist/mail/template-renderer.d.ts +10 -0
  296. package/dist/mail/template-renderer.d.ts.map +1 -0
  297. package/dist/mail/template-renderer.js +17 -0
  298. package/dist/mail/template-renderer.js.map +1 -0
  299. package/dist/mail/types.d.ts +143 -0
  300. package/dist/mail/types.d.ts.map +1 -0
  301. package/dist/mail/types.js +34 -0
  302. package/dist/mail/types.js.map +1 -0
  303. package/dist/onboarding/domain.d.ts +146 -0
  304. package/dist/onboarding/domain.d.ts.map +1 -0
  305. package/dist/onboarding/domain.js +348 -0
  306. package/dist/onboarding/domain.js.map +1 -0
  307. package/dist/onboarding/interaction-review.d.ts +123 -0
  308. package/dist/onboarding/interaction-review.d.ts.map +1 -0
  309. package/dist/onboarding/interaction-review.js +413 -0
  310. package/dist/onboarding/interaction-review.js.map +1 -0
  311. package/dist/onboarding/persistence.d.ts +106 -0
  312. package/dist/onboarding/persistence.d.ts.map +1 -0
  313. package/dist/onboarding/persistence.js +430 -0
  314. package/dist/onboarding/persistence.js.map +1 -0
  315. package/dist/onboarding/portal-actions.d.ts +48 -0
  316. package/dist/onboarding/portal-actions.d.ts.map +1 -0
  317. package/dist/onboarding/portal-actions.js +153 -0
  318. package/dist/onboarding/portal-actions.js.map +1 -0
  319. package/dist/onboarding/portal.d.ts +58 -0
  320. package/dist/onboarding/portal.d.ts.map +1 -0
  321. package/dist/onboarding/portal.js +170 -0
  322. package/dist/onboarding/portal.js.map +1 -0
  323. package/dist/pricing-engine/bundle.d.ts +22 -0
  324. package/dist/pricing-engine/bundle.d.ts.map +1 -0
  325. package/dist/pricing-engine/bundle.js +44 -0
  326. package/dist/pricing-engine/bundle.js.map +1 -0
  327. package/dist/pricing-engine/errors.d.ts +32 -0
  328. package/dist/pricing-engine/errors.d.ts.map +1 -0
  329. package/dist/pricing-engine/errors.js +44 -0
  330. package/dist/pricing-engine/errors.js.map +1 -0
  331. package/dist/pricing-engine/index.d.ts +12 -0
  332. package/dist/pricing-engine/index.d.ts.map +1 -0
  333. package/dist/pricing-engine/index.js +8 -0
  334. package/dist/pricing-engine/index.js.map +1 -0
  335. package/dist/pricing-engine/money.d.ts +32 -0
  336. package/dist/pricing-engine/money.d.ts.map +1 -0
  337. package/dist/pricing-engine/money.js +58 -0
  338. package/dist/pricing-engine/money.js.map +1 -0
  339. package/dist/pricing-engine/pipeline.d.ts +3 -0
  340. package/dist/pricing-engine/pipeline.d.ts.map +1 -0
  341. package/dist/pricing-engine/pipeline.js +327 -0
  342. package/dist/pricing-engine/pipeline.js.map +1 -0
  343. package/dist/pricing-engine/proration.d.ts +3 -0
  344. package/dist/pricing-engine/proration.d.ts.map +1 -0
  345. package/dist/pricing-engine/proration.js +50 -0
  346. package/dist/pricing-engine/proration.js.map +1 -0
  347. package/dist/pricing-engine/shadow.d.ts +51 -0
  348. package/dist/pricing-engine/shadow.d.ts.map +1 -0
  349. package/dist/pricing-engine/shadow.js +54 -0
  350. package/dist/pricing-engine/shadow.js.map +1 -0
  351. package/dist/pricing-engine/types.d.ts +184 -0
  352. package/dist/pricing-engine/types.d.ts.map +1 -0
  353. package/dist/pricing-engine/types.js +31 -0
  354. package/dist/pricing-engine/types.js.map +1 -0
  355. package/dist/rbac/authorize.d.ts +3 -6
  356. package/dist/rbac/authorize.d.ts.map +1 -1
  357. package/dist/rbac/authorize.js +4 -8
  358. package/dist/rbac/authorize.js.map +1 -1
  359. package/dist/rbac/catalog.d.ts.map +1 -1
  360. package/dist/rbac/catalog.js +414 -21
  361. package/dist/rbac/catalog.js.map +1 -1
  362. package/dist/subscription-billing/dunning.d.ts +18 -0
  363. package/dist/subscription-billing/dunning.d.ts.map +1 -0
  364. package/dist/subscription-billing/dunning.js +28 -0
  365. package/dist/subscription-billing/dunning.js.map +1 -0
  366. package/dist/subscription-billing/events.d.ts +58 -0
  367. package/dist/subscription-billing/events.d.ts.map +1 -0
  368. package/dist/subscription-billing/events.js +38 -0
  369. package/dist/subscription-billing/events.js.map +1 -0
  370. package/dist/subscription-billing/index.d.ts +18 -0
  371. package/dist/subscription-billing/index.d.ts.map +1 -0
  372. package/dist/subscription-billing/index.js +16 -0
  373. package/dist/subscription-billing/index.js.map +1 -0
  374. package/dist/subscription-billing/plans.d.ts +34 -0
  375. package/dist/subscription-billing/plans.d.ts.map +1 -0
  376. package/dist/subscription-billing/plans.js +85 -0
  377. package/dist/subscription-billing/plans.js.map +1 -0
  378. package/dist/subscription-billing/product-config.d.ts +61 -0
  379. package/dist/subscription-billing/product-config.d.ts.map +1 -0
  380. package/dist/subscription-billing/product-config.js +50 -0
  381. package/dist/subscription-billing/product-config.js.map +1 -0
  382. package/dist/subscription-billing/provider/asaas.d.ts +26 -0
  383. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -0
  384. package/dist/subscription-billing/provider/asaas.js +229 -0
  385. package/dist/subscription-billing/provider/asaas.js.map +1 -0
  386. package/dist/subscription-billing/provider/disabled.d.ts +30 -0
  387. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -0
  388. package/dist/subscription-billing/provider/disabled.js +42 -0
  389. package/dist/subscription-billing/provider/disabled.js.map +1 -0
  390. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  391. package/dist/subscription-billing/provider/registry.d.ts.map +1 -0
  392. package/dist/subscription-billing/provider/registry.js +26 -0
  393. package/dist/subscription-billing/provider/registry.js.map +1 -0
  394. package/dist/subscription-billing/reconcile.d.ts +45 -0
  395. package/dist/subscription-billing/reconcile.d.ts.map +1 -0
  396. package/dist/subscription-billing/reconcile.js +192 -0
  397. package/dist/subscription-billing/reconcile.js.map +1 -0
  398. package/dist/subscription-billing/repository.d.ts +168 -0
  399. package/dist/subscription-billing/repository.d.ts.map +1 -0
  400. package/dist/subscription-billing/repository.js +336 -0
  401. package/dist/subscription-billing/repository.js.map +1 -0
  402. package/dist/subscription-billing/service.d.ts +175 -0
  403. package/dist/subscription-billing/service.d.ts.map +1 -0
  404. package/dist/subscription-billing/service.js +818 -0
  405. package/dist/subscription-billing/service.js.map +1 -0
  406. package/dist/subscription-billing/types.d.ts +161 -0
  407. package/dist/subscription-billing/types.d.ts.map +1 -0
  408. package/dist/subscription-billing/types.js +24 -0
  409. package/dist/subscription-billing/types.js.map +1 -0
  410. package/dist/vault/crypto.d.ts +22 -0
  411. package/dist/vault/crypto.d.ts.map +1 -0
  412. package/dist/vault/crypto.js +88 -0
  413. package/dist/vault/crypto.js.map +1 -0
  414. package/dist/vault/repository.d.ts +45 -0
  415. package/dist/vault/repository.d.ts.map +1 -0
  416. package/dist/vault/repository.js +111 -0
  417. package/dist/vault/repository.js.map +1 -0
  418. package/package.json +23 -13
  419. package/src/db/migrations/0012_vault.sql +51 -0
  420. package/src/db/migrations/0013_crm.sql +67 -0
  421. package/src/db/migrations/0014_billing.sql +146 -0
  422. package/src/db/migrations/0015_merchant_billing_ar.sql +201 -0
  423. package/src/db/migrations/0016_office_onboarding.sql +162 -0
  424. package/src/db/migrations/0017_office_onboarding_api.sql +21 -0
  425. package/src/db/migrations/0018_office_onboarding_portal_actions.sql +60 -0
  426. package/src/db/migrations/0019_office_onboarding_interaction_review.sql +134 -0
  427. package/src/db/migrations/0020_saas_billing.sql +157 -0
  428. package/src/db/migrations/0021_saas_billing_indexes.sql +23 -0
  429. package/src/db/migrations/0022_saas_billing_multi_product.sql +75 -0
@@ -0,0 +1,413 @@
1
+ import { ConflictError, NotFoundError, ValidationError, uuidv7 } from '@baruk/shared';
2
+ import { appendAudit } from '../audit/audit.js';
3
+ import { createNotification } from '../notifications/repository.js';
4
+ import { listPortalUserIds } from '../portal/repository.js';
5
+ function cleanText(value, max) {
6
+ return Array.from(value.replace(/<[^>]*>/g, ''))
7
+ .filter((char) => {
8
+ const code = char.charCodeAt(0);
9
+ return code > 31 && code !== 127;
10
+ })
11
+ .join('')
12
+ .trim()
13
+ .slice(0, max);
14
+ }
15
+ function iso(value) {
16
+ return value ? new Date(String(value)).toISOString() : null;
17
+ }
18
+ function listMap(row) {
19
+ const dueAt = String(row.due_at);
20
+ return {
21
+ id: String(row.id),
22
+ kind: String(row.kind),
23
+ status: String(row.review_status),
24
+ priority: row.priority,
25
+ clientId: String(row.client_id),
26
+ clientName: String(row.client_name),
27
+ onboardingId: String(row.onboarding_id),
28
+ onboardingStatus: String(row.onboarding_status),
29
+ itemId: row.item_id ? String(row.item_id) : null,
30
+ itemTitle: row.item_title ? String(row.item_title) : null,
31
+ requirementId: row.requirement_id ? String(row.requirement_id) : null,
32
+ requirementLabel: row.requirement_label ? String(row.requirement_label) : null,
33
+ authorName: String(row.author_name),
34
+ summary: row.body ? cleanText(String(row.body), 180) : null,
35
+ assignedTo: row.assigned_to ? String(row.assigned_to) : null,
36
+ assignedToName: row.assigned_to_name ? String(row.assigned_to_name) : null,
37
+ dueAt,
38
+ overdue: new Date(dueAt).getTime() < Date.now() &&
39
+ !['resolved', 'dismissed'].includes(String(row.review_status)),
40
+ createdAt: new Date(String(row.created_at)).toISOString(),
41
+ updatedAt: new Date(String(row.updated_at)).toISOString(),
42
+ };
43
+ }
44
+ const BASE_FROM = (tx) => tx `
45
+ FROM onboarding_portal_interaction i
46
+ JOIN onboarding_interaction_review r ON r.interaction_id = i.id AND r.tenant_id = i.tenant_id
47
+ JOIN client c ON c.id = i.client_id AND c.tenant_id = i.tenant_id
48
+ JOIN onboarding_instance o ON o.id = i.onboarding_id AND o.tenant_id = i.tenant_id
49
+ JOIN "user" author ON author.id = i.author_user_id
50
+ LEFT JOIN onboarding_item item ON item.id = i.item_id AND item.tenant_id = i.tenant_id
51
+ LEFT JOIN onboarding_document_requirement dr ON dr.id = i.document_requirement_id AND dr.tenant_id = i.tenant_id
52
+ LEFT JOIN "user" assignee ON assignee.id = r.assigned_to
53
+ `;
54
+ function filterWhere(tx, filters) {
55
+ return tx `
56
+ AND (${filters.status ?? null}::text IS NULL OR r.status = ${filters.status ?? null})
57
+ AND (${filters.kind ?? null}::text IS NULL OR i.kind = ${filters.kind ?? null})
58
+ AND (${filters.clientId ?? null}::uuid IS NULL OR i.client_id = ${filters.clientId ?? null})
59
+ AND (${filters.onboardingId ?? null}::uuid IS NULL OR i.onboarding_id = ${filters.onboardingId ?? null})
60
+ AND (${filters.assignedTo ?? null}::uuid IS NULL OR r.assigned_to = ${filters.assignedTo ?? null})
61
+ AND (${filters.unassigned ? true : null}::boolean IS NULL OR r.assigned_to IS NULL)
62
+ AND (${filters.priority ?? null}::text IS NULL OR r.priority = ${filters.priority ?? null})
63
+ AND (${filters.overdue ? true : null}::boolean IS NULL OR (r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed')))
64
+ `;
65
+ }
66
+ export async function listAdminInteractionReviews(tx, filters) {
67
+ const where = filterWhere(tx, filters);
68
+ const rows = await tx `
69
+ SELECT i.id, i.kind, i.body, i.item_id, i.document_requirement_id AS requirement_id,
70
+ i.created_at, i.updated_at, r.status AS review_status, r.priority, r.due_at,
71
+ r.assigned_to, c.id AS client_id, c.display_name AS client_name,
72
+ o.id AS onboarding_id, o.status AS onboarding_status,
73
+ item.title AS item_title, dr.label AS requirement_label,
74
+ author.full_name AS author_name, assignee.full_name AS assigned_to_name,
75
+ count(*) OVER() AS total
76
+ ${BASE_FROM(tx)}
77
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid
78
+ ${where}
79
+ ORDER BY r.due_at ASC, i.created_at DESC, i.id DESC
80
+ LIMIT ${Math.min(filters.limit, 100)} OFFSET ${Math.max(filters.offset, 0)}
81
+ `;
82
+ const counts = await tx `
83
+ SELECT r.status, count(*)::int AS n
84
+ ${BASE_FROM(tx)}
85
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid ${where}
86
+ GROUP BY r.status
87
+ `;
88
+ const overdue = await tx `
89
+ SELECT count(*)::int AS n
90
+ ${BASE_FROM(tx)}
91
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid
92
+ AND r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed')
93
+ `;
94
+ const counters = Object.fromEntries(counts.map((row) => [row.status, Number(row.n)]));
95
+ counters.overdue = Number(overdue[0]?.n ?? 0);
96
+ return { items: rows.map(listMap), total: rows[0] ? Number(rows[0].total) : 0, counters };
97
+ }
98
+ export async function getAdminInteractionMetrics(tx, filters) {
99
+ const where = tx `
100
+ AND i.created_at >= ${filters.periodStart}::timestamptz
101
+ AND i.created_at < ${filters.periodEnd}::timestamptz
102
+ AND (${filters.status ?? null}::text IS NULL OR r.status = ${filters.status ?? null})
103
+ AND (${filters.kind ?? null}::text IS NULL OR i.kind = ${filters.kind ?? null})
104
+ AND (${filters.clientId ?? null}::uuid IS NULL OR i.client_id = ${filters.clientId ?? null})
105
+ AND (${filters.assignedTo ?? null}::uuid IS NULL OR r.assigned_to = ${filters.assignedTo ?? null})
106
+ AND (${filters.priority ?? null}::text IS NULL OR r.priority = ${filters.priority ?? null})
107
+ `;
108
+ const rows = await tx `
109
+ SELECT
110
+ count(*)::int AS received,
111
+ count(CASE WHEN r.status = 'pending_review' THEN 1 END) AS pending_review,
112
+ count(CASE WHEN r.status = 'in_review' THEN 1 END) AS in_review,
113
+ count(CASE WHEN r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS overdue,
114
+ count(CASE WHEN r.due_at::date = now()::date AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS due_today,
115
+ count(CASE WHEN r.assigned_to IS NULL AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS unassigned,
116
+ count(CASE WHEN r.status = 'clarification_requested' THEN 1 END) AS awaiting_client,
117
+ count(CASE WHEN r.status = 'resolved' THEN 1 END) AS resolved,
118
+ avg(CASE WHEN r.reviewed_at IS NOT NULL THEN EXTRACT(EPOCH FROM (r.reviewed_at - i.created_at)) END) AS average_first_review_seconds,
119
+ avg(CASE WHEN r.resolved_at IS NOT NULL THEN EXTRACT(EPOCH FROM (r.resolved_at - i.created_at)) END) AS average_resolution_seconds,
120
+ count(CASE WHEN r.resolved_at IS NOT NULL AND r.resolved_at <= r.due_at THEN 1 END) AS within_sla,
121
+ count(CASE WHEN r.resolved_at IS NOT NULL AND r.resolved_at > r.due_at THEN 1 END) AS breached
122
+ ${BASE_FROM(tx)}
123
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid ${where}
124
+ `;
125
+ const row = rows[0] ?? {};
126
+ const resolved = Number(row.resolved ?? 0);
127
+ const within = Number(row.within_sla ?? 0);
128
+ const breached = Number(row.breached ?? 0);
129
+ const pct = (value) => resolved > 0 ? Math.round((value / resolved) * 10000) / 100 : null;
130
+ return {
131
+ period: {
132
+ start: new Date(filters.periodStart).toISOString(),
133
+ end: new Date(filters.periodEnd).toISOString(),
134
+ },
135
+ received: Number(row.received ?? 0),
136
+ pendingReview: Number(row.pending_review ?? 0),
137
+ inReview: Number(row.in_review ?? 0),
138
+ overdue: Number(row.overdue ?? 0),
139
+ dueToday: Number(row.due_today ?? 0),
140
+ unassigned: Number(row.unassigned ?? 0),
141
+ awaitingClient: Number(row.awaiting_client ?? 0),
142
+ resolved,
143
+ averageFirstReviewSeconds: row.average_first_review_seconds == null
144
+ ? null
145
+ : Math.round(Number(row.average_first_review_seconds)),
146
+ averageResolutionSeconds: row.average_resolution_seconds == null
147
+ ? null
148
+ : Math.round(Number(row.average_resolution_seconds)),
149
+ withinSlaPercentage: pct(within),
150
+ breachedPercentage: pct(breached),
151
+ generatedAt: new Date().toISOString(),
152
+ };
153
+ }
154
+ async function getReviewRow(tx, interactionId) {
155
+ const rows = await tx `
156
+ SELECT i.id, i.kind, i.body, i.external_channel, i.external_delivered_at, i.item_id,
157
+ i.document_requirement_id AS requirement_id, i.created_at, i.updated_at,
158
+ r.status AS review_status, r.priority, r.due_at, r.breached_at, r.reviewer_id,
159
+ r.assigned_to, r.reviewed_at, r.resolved_at, r.resolution_type, r.internal_summary, r.version,
160
+ c.id AS client_id, c.display_name AS client_name, o.id AS onboarding_id,
161
+ o.status AS onboarding_status, item.title AS item_title, dr.label AS requirement_label,
162
+ author.full_name AS author_name, assignee.full_name AS assigned_to_name
163
+ ${BASE_FROM(tx)}
164
+ WHERE i.id = ${interactionId}
165
+ AND i.tenant_id = current_setting('app.current_tenant')::uuid
166
+ `;
167
+ if (!rows[0])
168
+ throw new NotFoundError('Interação não encontrada');
169
+ return rows[0];
170
+ }
171
+ function allowed(status) {
172
+ if (status === 'pending_review')
173
+ return ['start_review', 'assign', 'accept', 'request_clarification', 'add_internal_note'];
174
+ if (status === 'in_review')
175
+ return [
176
+ 'assign',
177
+ 'accept',
178
+ 'request_clarification',
179
+ 'resolve',
180
+ 'add_internal_note',
181
+ 'public_reply',
182
+ ];
183
+ if (status === 'clarification_requested')
184
+ return ['assign', 'accept', 'resolve', 'add_internal_note', 'public_reply'];
185
+ if (status === 'accepted')
186
+ return ['resolve', 'add_internal_note', 'public_reply'];
187
+ return [];
188
+ }
189
+ export async function getAdminInteractionReview(tx, interactionId) {
190
+ const row = await getReviewRow(tx, interactionId);
191
+ const [notes, replies] = await Promise.all([
192
+ tx `
193
+ SELECT n.id, n.body, n.author_id, u.full_name AS author_name, n.created_at
194
+ FROM onboarding_interaction_internal_note n JOIN "user" u ON u.id = n.author_id
195
+ WHERE n.interaction_id = ${interactionId} AND n.tenant_id = current_setting('app.current_tenant')::uuid
196
+ ORDER BY n.created_at ASC
197
+ `,
198
+ tx `
199
+ SELECT p.id, p.body, p.author_id, u.full_name AS author_name, p.created_at
200
+ FROM onboarding_interaction_public_reply p JOIN "user" u ON u.id = p.author_id
201
+ WHERE p.interaction_id = ${interactionId} AND p.tenant_id = current_setting('app.current_tenant')::uuid
202
+ ORDER BY p.created_at ASC
203
+ `,
204
+ ]);
205
+ const base = listMap(row);
206
+ return {
207
+ ...base,
208
+ body: row.body ? String(row.body) : null,
209
+ externalChannel: row.external_channel ? String(row.external_channel) : null,
210
+ externalDeliveredAt: row.external_delivered_at ? String(row.external_delivered_at) : null,
211
+ version: Number(row.version),
212
+ reviewedAt: iso(row.reviewed_at),
213
+ resolvedAt: iso(row.resolved_at),
214
+ resolutionType: row.resolution_type ?? null,
215
+ notes: notes.map((note) => ({
216
+ id: String(note.id),
217
+ body: String(note.body),
218
+ authorId: String(note.author_id),
219
+ authorName: String(note.author_name),
220
+ createdAt: new Date(String(note.created_at)).toISOString(),
221
+ })),
222
+ publicReplies: replies.map((reply) => ({
223
+ id: String(reply.id),
224
+ body: String(reply.body),
225
+ authorId: String(reply.author_id),
226
+ authorName: String(reply.author_name),
227
+ createdAt: new Date(String(reply.created_at)).toISOString(),
228
+ })),
229
+ allowedActions: allowed(String(row.review_status)),
230
+ };
231
+ }
232
+ async function event(tx, ctx, interactionId, type, payload = {}) {
233
+ const row = await tx `
234
+ SELECT onboarding_id, client_id FROM onboarding_portal_interaction
235
+ WHERE id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
236
+ `;
237
+ if (!row[0])
238
+ throw new NotFoundError('Interação não encontrada');
239
+ await tx `
240
+ INSERT INTO onboarding_event
241
+ (event_id, tenant_id, onboarding_id, client_id, actor_id, event_type, event_version, occurred_at, correlation_id, entity_type, entity_id, payload, metadata)
242
+ VALUES (${uuidv7()}, current_setting('app.current_tenant')::uuid, ${row[0].onboarding_id}, ${row[0].client_id}, ${ctx.actorId}, ${type}, 1, now(), ${ctx.correlationId}, 'onboarding_portal_interaction', ${interactionId}, ${tx.json(payload)}, ${tx.json({ visibility: 'internal' })})
243
+ `;
244
+ }
245
+ async function audit(tx, ctx, interactionId, action, diff) {
246
+ await appendAudit(tx, {
247
+ actorId: ctx.actorId,
248
+ action,
249
+ resourceType: 'onboarding_portal_interaction_review',
250
+ resourceId: interactionId,
251
+ diff,
252
+ metadata: { correlationId: ctx.correlationId, requestId: ctx.requestId ?? null },
253
+ });
254
+ }
255
+ async function currentReview(tx, interactionId) {
256
+ const rows = await tx `
257
+ SELECT status, version, client_id, onboarding_id, assigned_to FROM onboarding_interaction_review
258
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
259
+ `;
260
+ if (!rows[0])
261
+ throw new NotFoundError('Interação não encontrada');
262
+ return rows[0];
263
+ }
264
+ async function updateStatus(tx, ctx, interactionId, input) {
265
+ const current = await currentReview(tx, interactionId);
266
+ if (input.expectedVersion !== undefined && input.expectedVersion !== current.version)
267
+ throw new ConflictError('A interação foi atualizada por outra pessoa', {
268
+ code: 'INTERACTION_VERSION_CONFLICT',
269
+ });
270
+ const transitions = {
271
+ pending_review: ['in_review', 'accepted', 'clarification_requested'],
272
+ in_review: ['accepted', 'clarification_requested', 'resolved'],
273
+ accepted: ['resolved'],
274
+ clarification_requested: ['accepted', 'resolved'],
275
+ resolved: [],
276
+ dismissed: [],
277
+ };
278
+ if (!transitions[current.status].includes(input.status))
279
+ throw new ConflictError('Transição de revisão inválida', {
280
+ code: 'INTERACTION_INVALID_TRANSITION',
281
+ });
282
+ if (input.status === 'resolved' && (!input.resolutionType || !input.summary))
283
+ throw new ValidationError('Resolução exige tipo e resumo interno');
284
+ const rows = await tx `
285
+ UPDATE onboarding_interaction_review
286
+ SET status = ${input.status}, reviewer_id = COALESCE(reviewer_id, ${ctx.actorId}),
287
+ reviewed_at = COALESCE(reviewed_at, now()), resolved_at = ${input.status === 'resolved' ? tx `now()` : tx `resolved_at`},
288
+ resolution_type = ${input.resolutionType ?? null}, internal_summary = ${input.summary ? cleanText(input.summary, 4000) : null},
289
+ version = version + 1, updated_at = now()
290
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
291
+ AND (${input.expectedVersion ?? null}::int IS NULL OR version = ${input.expectedVersion ?? null})
292
+ RETURNING version
293
+ `;
294
+ if (!rows[0])
295
+ throw new ConflictError('A interação foi atualizada por outra pessoa', {
296
+ code: 'INTERACTION_VERSION_CONFLICT',
297
+ });
298
+ await audit(tx, ctx, interactionId, `onboarding.interaction_${input.status}`, {
299
+ from: current.status,
300
+ to: input.status,
301
+ });
302
+ await event(tx, ctx, interactionId, `onboarding.interaction_${input.status}`);
303
+ return rows[0].version;
304
+ }
305
+ export async function startReview(tx, ctx, interactionId, expectedVersion) {
306
+ return updateStatus(tx, ctx, interactionId, { status: 'in_review', expectedVersion });
307
+ }
308
+ export async function acceptReview(tx, ctx, interactionId, expectedVersion) {
309
+ return updateStatus(tx, ctx, interactionId, { status: 'accepted', expectedVersion });
310
+ }
311
+ export async function requestClarification(tx, ctx, interactionId, message, expectedVersion) {
312
+ const body = cleanText(message, 2000);
313
+ if (!body)
314
+ throw new ValidationError('A mensagem pública é obrigatória');
315
+ const version = await updateStatus(tx, ctx, interactionId, {
316
+ status: 'clarification_requested',
317
+ expectedVersion,
318
+ });
319
+ await createPublicReply(tx, ctx, interactionId, body);
320
+ return version;
321
+ }
322
+ export async function resolveReview(tx, ctx, interactionId, input) {
323
+ return updateStatus(tx, ctx, interactionId, { status: 'resolved', ...input });
324
+ }
325
+ export async function assignInteraction(tx, ctx, interactionId, assigneeId, expectedVersion) {
326
+ const current = await currentReview(tx, interactionId);
327
+ if (expectedVersion !== undefined && expectedVersion !== current.version)
328
+ throw new ConflictError('A interação foi atualizada por outra pessoa', {
329
+ code: 'INTERACTION_VERSION_CONFLICT',
330
+ });
331
+ if (assigneeId) {
332
+ const valid = await tx `
333
+ SELECT m.user_id FROM membership m JOIN "user" u ON u.id = m.user_id
334
+ WHERE m.tenant_id = current_setting('app.current_tenant')::uuid AND m.user_id = ${assigneeId}
335
+ AND m.status = 'active' AND m.deleted_at IS NULL AND u.status = 'active' AND u.user_type = 'staff'
336
+ AND EXISTS (
337
+ SELECT 1 FROM user_role ur JOIN role_permission rp ON rp.role_id = ur.role_id
338
+ JOIN permission p ON p.id = rp.permission_id
339
+ WHERE ur.user_id = m.user_id AND ur.tenant_id = m.tenant_id AND ur.deleted_at IS NULL
340
+ AND p.key = 'office.onboarding.interaction.review'
341
+ )
342
+ `;
343
+ if (!valid[0])
344
+ throw new ValidationError('Responsável não possui vínculo e permissão de revisão');
345
+ }
346
+ const rows = await tx `
347
+ UPDATE onboarding_interaction_review SET assigned_to = ${assigneeId}, version = version + 1, updated_at = now()
348
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
349
+ AND (${expectedVersion ?? null}::int IS NULL OR version = ${expectedVersion ?? null}) RETURNING version
350
+ `;
351
+ if (!rows[0])
352
+ throw new ConflictError('A interação foi atualizada por outra pessoa', {
353
+ code: 'INTERACTION_VERSION_CONFLICT',
354
+ });
355
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_assigned', {
356
+ assignedTo: assigneeId,
357
+ });
358
+ await event(tx, ctx, interactionId, 'onboarding.interaction_assigned', {
359
+ assignedTo: assigneeId,
360
+ });
361
+ if (assigneeId)
362
+ await createNotification(tx, {
363
+ userId: assigneeId,
364
+ type: 'action_required',
365
+ title: 'Interação atribuída',
366
+ body: 'Uma interação do Portal foi atribuída a você.',
367
+ linkRef: { type: 'office_onboarding_interaction', id: interactionId },
368
+ });
369
+ return rows[0].version;
370
+ }
371
+ export async function addInternalNote(tx, ctx, interactionId, body) {
372
+ const text = cleanText(body, 4000);
373
+ if (!text)
374
+ throw new ValidationError('A observação interna é obrigatória');
375
+ await currentReview(tx, interactionId);
376
+ const rows = await tx `
377
+ INSERT INTO onboarding_interaction_internal_note (id, tenant_id, client_id, onboarding_id, interaction_id, author_id, body)
378
+ SELECT ${uuidv7()}, i.tenant_id, i.client_id, i.onboarding_id, i.id, ${ctx.actorId}, ${text}
379
+ FROM onboarding_portal_interaction i WHERE i.id = ${interactionId}
380
+ RETURNING id, created_at
381
+ `;
382
+ if (!rows[0])
383
+ throw new NotFoundError('Interação não encontrada');
384
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_internal_note_created');
385
+ await event(tx, ctx, interactionId, 'onboarding.interaction_internal_note_created');
386
+ return { id: rows[0].id, createdAt: rows[0].created_at.toISOString() };
387
+ }
388
+ export async function createPublicReply(tx, ctx, interactionId, body) {
389
+ const text = cleanText(body, 2000);
390
+ if (!text)
391
+ throw new ValidationError('A resposta pública é obrigatória');
392
+ const row = await tx `
393
+ INSERT INTO onboarding_interaction_public_reply (id, tenant_id, client_id, onboarding_id, interaction_id, author_id, body, visibility)
394
+ SELECT ${uuidv7()}, i.tenant_id, i.client_id, i.onboarding_id, i.id, ${ctx.actorId}, ${text}, 'public_to_client'
395
+ FROM onboarding_portal_interaction i WHERE i.id = ${interactionId}
396
+ RETURNING id, created_at
397
+ `;
398
+ if (!row[0])
399
+ throw new NotFoundError('Interação não encontrada');
400
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_public_reply_created');
401
+ await event(tx, ctx, interactionId, 'onboarding.interaction_public_reply_created');
402
+ for (const userId of await listPortalUserIds(tx, String((await currentReview(tx, interactionId)).client_id))) {
403
+ await createNotification(tx, {
404
+ userId,
405
+ type: 'info',
406
+ title: 'O escritório respondeu',
407
+ body: 'Há um novo retorno sobre seu onboarding.',
408
+ linkRef: { type: 'portal_onboarding_interaction', id: interactionId },
409
+ });
410
+ }
411
+ return { id: row[0].id, createdAt: row[0].created_at.toISOString() };
412
+ }
413
+ //# sourceMappingURL=interaction-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction-review.js","sourceRoot":"","sources":["../../src/onboarding/interaction-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { AppError } from '@baruk/shared';
2
+ import type { Db, Tx } from '../db/client.js';
3
+ import { addItem, addTask, requestDocument, type Onboarding, type OnboardingOperationContext } from './domain.js';
4
+ export interface OnboardingFeaturePolicy {
5
+ isEnabled(tenantId: string): boolean;
6
+ }
7
+ /** Política fail-closed até a capability ser ativada por configuração canônica. */
8
+ export declare const onboardingDisabledByDefault: OnboardingFeaturePolicy;
9
+ export declare const onboardingEnabledForTests: OnboardingFeaturePolicy;
10
+ export declare class OnboardingFeatureDisabledError extends AppError {
11
+ constructor();
12
+ }
13
+ export declare class OnboardingConcurrencyError extends AppError {
14
+ constructor();
15
+ }
16
+ export type IdempotencyReservation = {
17
+ kind: 'new';
18
+ } | {
19
+ kind: 'replay';
20
+ response: unknown;
21
+ } | {
22
+ kind: 'in_progress';
23
+ } | {
24
+ kind: 'conflict';
25
+ };
26
+ export declare function reserveOnboardingApiIdempotency(db: Db, input: {
27
+ tenantId: string;
28
+ operation: string;
29
+ key: string;
30
+ fingerprint: string;
31
+ }): Promise<IdempotencyReservation>;
32
+ export declare function completeOnboardingApiIdempotency(db: Db, input: {
33
+ tenantId: string;
34
+ operation: string;
35
+ key: string;
36
+ response: unknown;
37
+ }): Promise<void>;
38
+ export declare function releaseOnboardingApiIdempotency(db: Db, input: {
39
+ tenantId: string;
40
+ operation: string;
41
+ key: string;
42
+ }): Promise<void>;
43
+ export declare function getOnboarding(tx: Tx, id: string): Promise<Onboarding | null>;
44
+ export interface OnboardingListFilter {
45
+ status?: Onboarding['status'];
46
+ clientId?: string;
47
+ ownerId?: string;
48
+ dueBefore?: string;
49
+ dueAfter?: string;
50
+ overdue?: boolean;
51
+ limit?: number;
52
+ offset?: number;
53
+ }
54
+ export declare function listOnboardings(tx: Tx, filter?: OnboardingListFilter): Promise<Onboarding[]>;
55
+ export interface OnboardingTimelineRow {
56
+ eventId: string;
57
+ eventType: string;
58
+ eventVersion: number;
59
+ occurredAt: string;
60
+ actorId: string | null;
61
+ correlationId: string;
62
+ entityType: string;
63
+ entityId: string;
64
+ payload: Record<string, unknown>;
65
+ metadata: Record<string, unknown>;
66
+ }
67
+ export declare function listOnboardingTimeline(tx: Tx, onboardingId: string, limit?: number, offset?: number): Promise<{
68
+ items: OnboardingTimelineRow[];
69
+ total: number;
70
+ }>;
71
+ export declare function createOnboardingRecord(tx: Tx, onboarding: Onboarding): Promise<void>;
72
+ export declare function saveOnboarding(tx: Tx, onboarding: Onboarding, expectedVersion: number): Promise<void>;
73
+ export interface OnboardingApplication {
74
+ create(input: {
75
+ tenantId: string;
76
+ clientId: string;
77
+ ownerId?: string | null;
78
+ dueAt?: string | null;
79
+ }, context: OnboardingOperationContext): Promise<Onboarding>;
80
+ get(tenantId: string, id: string, clientId?: string): Promise<Onboarding | null>;
81
+ start(tenantId: string, id: string, context: OnboardingOperationContext): Promise<Onboarding>;
82
+ block(tenantId: string, id: string, reason: string, context: OnboardingOperationContext): Promise<Onboarding>;
83
+ unblock(tenantId: string, id: string, context: OnboardingOperationContext): Promise<Onboarding>;
84
+ complete(tenantId: string, id: string, context: OnboardingOperationContext): Promise<Onboarding>;
85
+ cancel(tenantId: string, id: string, reason: string, context: OnboardingOperationContext): Promise<Onboarding>;
86
+ addItem(tenantId: string, id: string, input: Parameters<typeof addItem>[1], context: OnboardingOperationContext): Promise<Onboarding>;
87
+ completeItem(tenantId: string, id: string, itemId: string, context: OnboardingOperationContext): Promise<Onboarding>;
88
+ startItem(tenantId: string, id: string, itemId: string, context: OnboardingOperationContext): Promise<Onboarding>;
89
+ rejectItem(tenantId: string, id: string, itemId: string, reason: string, context: OnboardingOperationContext): Promise<Onboarding>;
90
+ markItemNotApplicable(tenantId: string, id: string, itemId: string, context: OnboardingOperationContext): Promise<Onboarding>;
91
+ addTask(tenantId: string, id: string, input: Parameters<typeof addTask>[1], context: OnboardingOperationContext): Promise<Onboarding>;
92
+ completeTask(tenantId: string, id: string, taskId: string, context: OnboardingOperationContext): Promise<Onboarding>;
93
+ requestDocument(tenantId: string, id: string, input: Parameters<typeof requestDocument>[1], context: OnboardingOperationContext): Promise<Onboarding>;
94
+ receiveDocument(tenantId: string, id: string, requirementId: string, context: OnboardingOperationContext): Promise<Onboarding>;
95
+ validateDocument(tenantId: string, id: string, requirementId: string, context: OnboardingOperationContext): Promise<Onboarding>;
96
+ rejectDocument(tenantId: string, id: string, requirementId: string, reason: string, context: OnboardingOperationContext): Promise<Onboarding>;
97
+ list(tenantId: string, filter?: OnboardingListFilter): Promise<Onboarding[]>;
98
+ timeline(tenantId: string, id: string, limit?: number, offset?: number, clientId?: string): Promise<{
99
+ items: OnboardingTimelineRow[];
100
+ total: number;
101
+ }>;
102
+ }
103
+ export declare function createOnboardingApplication(db: Db, policy?: OnboardingFeaturePolicy, idFactory?: {
104
+ next(): string;
105
+ }): OnboardingApplication;
106
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/onboarding/persistence.ts"],"names":[],"mappings":"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"}