@baruk/core 0.1.0 → 0.3.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 +63 -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 +43 -0
  213. package/dist/commercial-catalog/coupon.d.ts.map +1 -0
  214. package/dist/commercial-catalog/coupon.js +57 -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 +175 -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,425 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listAdminInteractionReviews = listAdminInteractionReviews;
4
+ exports.getAdminInteractionMetrics = getAdminInteractionMetrics;
5
+ exports.getAdminInteractionReview = getAdminInteractionReview;
6
+ exports.startReview = startReview;
7
+ exports.acceptReview = acceptReview;
8
+ exports.requestClarification = requestClarification;
9
+ exports.resolveReview = resolveReview;
10
+ exports.assignInteraction = assignInteraction;
11
+ exports.addInternalNote = addInternalNote;
12
+ exports.createPublicReply = createPublicReply;
13
+ const shared_1 = require("@baruk/shared");
14
+ const audit_js_1 = require("../audit/audit.js");
15
+ const repository_js_1 = require("../notifications/repository.js");
16
+ const repository_js_2 = require("../portal/repository.js");
17
+ function cleanText(value, max) {
18
+ return Array.from(value.replace(/<[^>]*>/g, ''))
19
+ .filter((char) => {
20
+ const code = char.charCodeAt(0);
21
+ return code > 31 && code !== 127;
22
+ })
23
+ .join('')
24
+ .trim()
25
+ .slice(0, max);
26
+ }
27
+ function iso(value) {
28
+ return value ? new Date(String(value)).toISOString() : null;
29
+ }
30
+ function listMap(row) {
31
+ const dueAt = String(row.due_at);
32
+ return {
33
+ id: String(row.id),
34
+ kind: String(row.kind),
35
+ status: String(row.review_status),
36
+ priority: row.priority,
37
+ clientId: String(row.client_id),
38
+ clientName: String(row.client_name),
39
+ onboardingId: String(row.onboarding_id),
40
+ onboardingStatus: String(row.onboarding_status),
41
+ itemId: row.item_id ? String(row.item_id) : null,
42
+ itemTitle: row.item_title ? String(row.item_title) : null,
43
+ requirementId: row.requirement_id ? String(row.requirement_id) : null,
44
+ requirementLabel: row.requirement_label ? String(row.requirement_label) : null,
45
+ authorName: String(row.author_name),
46
+ summary: row.body ? cleanText(String(row.body), 180) : null,
47
+ assignedTo: row.assigned_to ? String(row.assigned_to) : null,
48
+ assignedToName: row.assigned_to_name ? String(row.assigned_to_name) : null,
49
+ dueAt,
50
+ overdue: new Date(dueAt).getTime() < Date.now() &&
51
+ !['resolved', 'dismissed'].includes(String(row.review_status)),
52
+ createdAt: new Date(String(row.created_at)).toISOString(),
53
+ updatedAt: new Date(String(row.updated_at)).toISOString(),
54
+ };
55
+ }
56
+ const BASE_FROM = (tx) => tx `
57
+ FROM onboarding_portal_interaction i
58
+ JOIN onboarding_interaction_review r ON r.interaction_id = i.id AND r.tenant_id = i.tenant_id
59
+ JOIN client c ON c.id = i.client_id AND c.tenant_id = i.tenant_id
60
+ JOIN onboarding_instance o ON o.id = i.onboarding_id AND o.tenant_id = i.tenant_id
61
+ JOIN "user" author ON author.id = i.author_user_id
62
+ LEFT JOIN onboarding_item item ON item.id = i.item_id AND item.tenant_id = i.tenant_id
63
+ LEFT JOIN onboarding_document_requirement dr ON dr.id = i.document_requirement_id AND dr.tenant_id = i.tenant_id
64
+ LEFT JOIN "user" assignee ON assignee.id = r.assigned_to
65
+ `;
66
+ function filterWhere(tx, filters) {
67
+ return tx `
68
+ AND (${filters.status ?? null}::text IS NULL OR r.status = ${filters.status ?? null})
69
+ AND (${filters.kind ?? null}::text IS NULL OR i.kind = ${filters.kind ?? null})
70
+ AND (${filters.clientId ?? null}::uuid IS NULL OR i.client_id = ${filters.clientId ?? null})
71
+ AND (${filters.onboardingId ?? null}::uuid IS NULL OR i.onboarding_id = ${filters.onboardingId ?? null})
72
+ AND (${filters.assignedTo ?? null}::uuid IS NULL OR r.assigned_to = ${filters.assignedTo ?? null})
73
+ AND (${filters.unassigned ? true : null}::boolean IS NULL OR r.assigned_to IS NULL)
74
+ AND (${filters.priority ?? null}::text IS NULL OR r.priority = ${filters.priority ?? null})
75
+ AND (${filters.overdue ? true : null}::boolean IS NULL OR (r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed')))
76
+ `;
77
+ }
78
+ async function listAdminInteractionReviews(tx, filters) {
79
+ const where = filterWhere(tx, filters);
80
+ const rows = await tx `
81
+ SELECT i.id, i.kind, i.body, i.item_id, i.document_requirement_id AS requirement_id,
82
+ i.created_at, i.updated_at, r.status AS review_status, r.priority, r.due_at,
83
+ r.assigned_to, c.id AS client_id, c.display_name AS client_name,
84
+ o.id AS onboarding_id, o.status AS onboarding_status,
85
+ item.title AS item_title, dr.label AS requirement_label,
86
+ author.full_name AS author_name, assignee.full_name AS assigned_to_name,
87
+ count(*) OVER() AS total
88
+ ${BASE_FROM(tx)}
89
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid
90
+ ${where}
91
+ ORDER BY r.due_at ASC, i.created_at DESC, i.id DESC
92
+ LIMIT ${Math.min(filters.limit, 100)} OFFSET ${Math.max(filters.offset, 0)}
93
+ `;
94
+ const counts = await tx `
95
+ SELECT r.status, count(*)::int AS n
96
+ ${BASE_FROM(tx)}
97
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid ${where}
98
+ GROUP BY r.status
99
+ `;
100
+ const overdue = await tx `
101
+ SELECT count(*)::int AS n
102
+ ${BASE_FROM(tx)}
103
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid
104
+ AND r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed')
105
+ `;
106
+ const counters = Object.fromEntries(counts.map((row) => [row.status, Number(row.n)]));
107
+ counters.overdue = Number(overdue[0]?.n ?? 0);
108
+ return { items: rows.map(listMap), total: rows[0] ? Number(rows[0].total) : 0, counters };
109
+ }
110
+ async function getAdminInteractionMetrics(tx, filters) {
111
+ const where = tx `
112
+ AND i.created_at >= ${filters.periodStart}::timestamptz
113
+ AND i.created_at < ${filters.periodEnd}::timestamptz
114
+ AND (${filters.status ?? null}::text IS NULL OR r.status = ${filters.status ?? null})
115
+ AND (${filters.kind ?? null}::text IS NULL OR i.kind = ${filters.kind ?? null})
116
+ AND (${filters.clientId ?? null}::uuid IS NULL OR i.client_id = ${filters.clientId ?? null})
117
+ AND (${filters.assignedTo ?? null}::uuid IS NULL OR r.assigned_to = ${filters.assignedTo ?? null})
118
+ AND (${filters.priority ?? null}::text IS NULL OR r.priority = ${filters.priority ?? null})
119
+ `;
120
+ const rows = await tx `
121
+ SELECT
122
+ count(*)::int AS received,
123
+ count(CASE WHEN r.status = 'pending_review' THEN 1 END) AS pending_review,
124
+ count(CASE WHEN r.status = 'in_review' THEN 1 END) AS in_review,
125
+ count(CASE WHEN r.due_at < now() AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS overdue,
126
+ count(CASE WHEN r.due_at::date = now()::date AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS due_today,
127
+ count(CASE WHEN r.assigned_to IS NULL AND r.status NOT IN ('resolved', 'dismissed') THEN 1 END) AS unassigned,
128
+ count(CASE WHEN r.status = 'clarification_requested' THEN 1 END) AS awaiting_client,
129
+ count(CASE WHEN r.status = 'resolved' THEN 1 END) AS resolved,
130
+ 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,
131
+ avg(CASE WHEN r.resolved_at IS NOT NULL THEN EXTRACT(EPOCH FROM (r.resolved_at - i.created_at)) END) AS average_resolution_seconds,
132
+ count(CASE WHEN r.resolved_at IS NOT NULL AND r.resolved_at <= r.due_at THEN 1 END) AS within_sla,
133
+ count(CASE WHEN r.resolved_at IS NOT NULL AND r.resolved_at > r.due_at THEN 1 END) AS breached
134
+ ${BASE_FROM(tx)}
135
+ WHERE i.tenant_id = current_setting('app.current_tenant')::uuid ${where}
136
+ `;
137
+ const row = rows[0] ?? {};
138
+ const resolved = Number(row.resolved ?? 0);
139
+ const within = Number(row.within_sla ?? 0);
140
+ const breached = Number(row.breached ?? 0);
141
+ const pct = (value) => resolved > 0 ? Math.round((value / resolved) * 10000) / 100 : null;
142
+ return {
143
+ period: {
144
+ start: new Date(filters.periodStart).toISOString(),
145
+ end: new Date(filters.periodEnd).toISOString(),
146
+ },
147
+ received: Number(row.received ?? 0),
148
+ pendingReview: Number(row.pending_review ?? 0),
149
+ inReview: Number(row.in_review ?? 0),
150
+ overdue: Number(row.overdue ?? 0),
151
+ dueToday: Number(row.due_today ?? 0),
152
+ unassigned: Number(row.unassigned ?? 0),
153
+ awaitingClient: Number(row.awaiting_client ?? 0),
154
+ resolved,
155
+ averageFirstReviewSeconds: row.average_first_review_seconds == null
156
+ ? null
157
+ : Math.round(Number(row.average_first_review_seconds)),
158
+ averageResolutionSeconds: row.average_resolution_seconds == null
159
+ ? null
160
+ : Math.round(Number(row.average_resolution_seconds)),
161
+ withinSlaPercentage: pct(within),
162
+ breachedPercentage: pct(breached),
163
+ generatedAt: new Date().toISOString(),
164
+ };
165
+ }
166
+ async function getReviewRow(tx, interactionId) {
167
+ const rows = await tx `
168
+ SELECT i.id, i.kind, i.body, i.external_channel, i.external_delivered_at, i.item_id,
169
+ i.document_requirement_id AS requirement_id, i.created_at, i.updated_at,
170
+ r.status AS review_status, r.priority, r.due_at, r.breached_at, r.reviewer_id,
171
+ r.assigned_to, r.reviewed_at, r.resolved_at, r.resolution_type, r.internal_summary, r.version,
172
+ c.id AS client_id, c.display_name AS client_name, o.id AS onboarding_id,
173
+ o.status AS onboarding_status, item.title AS item_title, dr.label AS requirement_label,
174
+ author.full_name AS author_name, assignee.full_name AS assigned_to_name
175
+ ${BASE_FROM(tx)}
176
+ WHERE i.id = ${interactionId}
177
+ AND i.tenant_id = current_setting('app.current_tenant')::uuid
178
+ `;
179
+ if (!rows[0])
180
+ throw new shared_1.NotFoundError('Interação não encontrada');
181
+ return rows[0];
182
+ }
183
+ function allowed(status) {
184
+ if (status === 'pending_review')
185
+ return ['start_review', 'assign', 'accept', 'request_clarification', 'add_internal_note'];
186
+ if (status === 'in_review')
187
+ return [
188
+ 'assign',
189
+ 'accept',
190
+ 'request_clarification',
191
+ 'resolve',
192
+ 'add_internal_note',
193
+ 'public_reply',
194
+ ];
195
+ if (status === 'clarification_requested')
196
+ return ['assign', 'accept', 'resolve', 'add_internal_note', 'public_reply'];
197
+ if (status === 'accepted')
198
+ return ['resolve', 'add_internal_note', 'public_reply'];
199
+ return [];
200
+ }
201
+ async function getAdminInteractionReview(tx, interactionId) {
202
+ const row = await getReviewRow(tx, interactionId);
203
+ const [notes, replies] = await Promise.all([
204
+ tx `
205
+ SELECT n.id, n.body, n.author_id, u.full_name AS author_name, n.created_at
206
+ FROM onboarding_interaction_internal_note n JOIN "user" u ON u.id = n.author_id
207
+ WHERE n.interaction_id = ${interactionId} AND n.tenant_id = current_setting('app.current_tenant')::uuid
208
+ ORDER BY n.created_at ASC
209
+ `,
210
+ tx `
211
+ SELECT p.id, p.body, p.author_id, u.full_name AS author_name, p.created_at
212
+ FROM onboarding_interaction_public_reply p JOIN "user" u ON u.id = p.author_id
213
+ WHERE p.interaction_id = ${interactionId} AND p.tenant_id = current_setting('app.current_tenant')::uuid
214
+ ORDER BY p.created_at ASC
215
+ `,
216
+ ]);
217
+ const base = listMap(row);
218
+ return {
219
+ ...base,
220
+ body: row.body ? String(row.body) : null,
221
+ externalChannel: row.external_channel ? String(row.external_channel) : null,
222
+ externalDeliveredAt: row.external_delivered_at ? String(row.external_delivered_at) : null,
223
+ version: Number(row.version),
224
+ reviewedAt: iso(row.reviewed_at),
225
+ resolvedAt: iso(row.resolved_at),
226
+ resolutionType: row.resolution_type ?? null,
227
+ notes: notes.map((note) => ({
228
+ id: String(note.id),
229
+ body: String(note.body),
230
+ authorId: String(note.author_id),
231
+ authorName: String(note.author_name),
232
+ createdAt: new Date(String(note.created_at)).toISOString(),
233
+ })),
234
+ publicReplies: replies.map((reply) => ({
235
+ id: String(reply.id),
236
+ body: String(reply.body),
237
+ authorId: String(reply.author_id),
238
+ authorName: String(reply.author_name),
239
+ createdAt: new Date(String(reply.created_at)).toISOString(),
240
+ })),
241
+ allowedActions: allowed(String(row.review_status)),
242
+ };
243
+ }
244
+ async function event(tx, ctx, interactionId, type, payload = {}) {
245
+ const row = await tx `
246
+ SELECT onboarding_id, client_id FROM onboarding_portal_interaction
247
+ WHERE id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
248
+ `;
249
+ if (!row[0])
250
+ throw new shared_1.NotFoundError('Interação não encontrada');
251
+ await tx `
252
+ INSERT INTO onboarding_event
253
+ (event_id, tenant_id, onboarding_id, client_id, actor_id, event_type, event_version, occurred_at, correlation_id, entity_type, entity_id, payload, metadata)
254
+ VALUES (${(0, shared_1.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' })})
255
+ `;
256
+ }
257
+ async function audit(tx, ctx, interactionId, action, diff) {
258
+ await (0, audit_js_1.appendAudit)(tx, {
259
+ actorId: ctx.actorId,
260
+ action,
261
+ resourceType: 'onboarding_portal_interaction_review',
262
+ resourceId: interactionId,
263
+ diff,
264
+ metadata: { correlationId: ctx.correlationId, requestId: ctx.requestId ?? null },
265
+ });
266
+ }
267
+ async function currentReview(tx, interactionId) {
268
+ const rows = await tx `
269
+ SELECT status, version, client_id, onboarding_id, assigned_to FROM onboarding_interaction_review
270
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
271
+ `;
272
+ if (!rows[0])
273
+ throw new shared_1.NotFoundError('Interação não encontrada');
274
+ return rows[0];
275
+ }
276
+ async function updateStatus(tx, ctx, interactionId, input) {
277
+ const current = await currentReview(tx, interactionId);
278
+ if (input.expectedVersion !== undefined && input.expectedVersion !== current.version)
279
+ throw new shared_1.ConflictError('A interação foi atualizada por outra pessoa', {
280
+ code: 'INTERACTION_VERSION_CONFLICT',
281
+ });
282
+ const transitions = {
283
+ pending_review: ['in_review', 'accepted', 'clarification_requested'],
284
+ in_review: ['accepted', 'clarification_requested', 'resolved'],
285
+ accepted: ['resolved'],
286
+ clarification_requested: ['accepted', 'resolved'],
287
+ resolved: [],
288
+ dismissed: [],
289
+ };
290
+ if (!transitions[current.status].includes(input.status))
291
+ throw new shared_1.ConflictError('Transição de revisão inválida', {
292
+ code: 'INTERACTION_INVALID_TRANSITION',
293
+ });
294
+ if (input.status === 'resolved' && (!input.resolutionType || !input.summary))
295
+ throw new shared_1.ValidationError('Resolução exige tipo e resumo interno');
296
+ const rows = await tx `
297
+ UPDATE onboarding_interaction_review
298
+ SET status = ${input.status}, reviewer_id = COALESCE(reviewer_id, ${ctx.actorId}),
299
+ reviewed_at = COALESCE(reviewed_at, now()), resolved_at = ${input.status === 'resolved' ? tx `now()` : tx `resolved_at`},
300
+ resolution_type = ${input.resolutionType ?? null}, internal_summary = ${input.summary ? cleanText(input.summary, 4000) : null},
301
+ version = version + 1, updated_at = now()
302
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
303
+ AND (${input.expectedVersion ?? null}::int IS NULL OR version = ${input.expectedVersion ?? null})
304
+ RETURNING version
305
+ `;
306
+ if (!rows[0])
307
+ throw new shared_1.ConflictError('A interação foi atualizada por outra pessoa', {
308
+ code: 'INTERACTION_VERSION_CONFLICT',
309
+ });
310
+ await audit(tx, ctx, interactionId, `onboarding.interaction_${input.status}`, {
311
+ from: current.status,
312
+ to: input.status,
313
+ });
314
+ await event(tx, ctx, interactionId, `onboarding.interaction_${input.status}`);
315
+ return rows[0].version;
316
+ }
317
+ async function startReview(tx, ctx, interactionId, expectedVersion) {
318
+ return updateStatus(tx, ctx, interactionId, { status: 'in_review', expectedVersion });
319
+ }
320
+ async function acceptReview(tx, ctx, interactionId, expectedVersion) {
321
+ return updateStatus(tx, ctx, interactionId, { status: 'accepted', expectedVersion });
322
+ }
323
+ async function requestClarification(tx, ctx, interactionId, message, expectedVersion) {
324
+ const body = cleanText(message, 2000);
325
+ if (!body)
326
+ throw new shared_1.ValidationError('A mensagem pública é obrigatória');
327
+ const version = await updateStatus(tx, ctx, interactionId, {
328
+ status: 'clarification_requested',
329
+ expectedVersion,
330
+ });
331
+ await createPublicReply(tx, ctx, interactionId, body);
332
+ return version;
333
+ }
334
+ async function resolveReview(tx, ctx, interactionId, input) {
335
+ return updateStatus(tx, ctx, interactionId, { status: 'resolved', ...input });
336
+ }
337
+ async function assignInteraction(tx, ctx, interactionId, assigneeId, expectedVersion) {
338
+ const current = await currentReview(tx, interactionId);
339
+ if (expectedVersion !== undefined && expectedVersion !== current.version)
340
+ throw new shared_1.ConflictError('A interação foi atualizada por outra pessoa', {
341
+ code: 'INTERACTION_VERSION_CONFLICT',
342
+ });
343
+ if (assigneeId) {
344
+ const valid = await tx `
345
+ SELECT m.user_id FROM membership m JOIN "user" u ON u.id = m.user_id
346
+ WHERE m.tenant_id = current_setting('app.current_tenant')::uuid AND m.user_id = ${assigneeId}
347
+ AND m.status = 'active' AND m.deleted_at IS NULL AND u.status = 'active' AND u.user_type = 'staff'
348
+ AND EXISTS (
349
+ SELECT 1 FROM user_role ur JOIN role_permission rp ON rp.role_id = ur.role_id
350
+ JOIN permission p ON p.id = rp.permission_id
351
+ WHERE ur.user_id = m.user_id AND ur.tenant_id = m.tenant_id AND ur.deleted_at IS NULL
352
+ AND p.key = 'office.onboarding.interaction.review'
353
+ )
354
+ `;
355
+ if (!valid[0])
356
+ throw new shared_1.ValidationError('Responsável não possui vínculo e permissão de revisão');
357
+ }
358
+ const rows = await tx `
359
+ UPDATE onboarding_interaction_review SET assigned_to = ${assigneeId}, version = version + 1, updated_at = now()
360
+ WHERE interaction_id = ${interactionId} AND tenant_id = current_setting('app.current_tenant')::uuid
361
+ AND (${expectedVersion ?? null}::int IS NULL OR version = ${expectedVersion ?? null}) RETURNING version
362
+ `;
363
+ if (!rows[0])
364
+ throw new shared_1.ConflictError('A interação foi atualizada por outra pessoa', {
365
+ code: 'INTERACTION_VERSION_CONFLICT',
366
+ });
367
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_assigned', {
368
+ assignedTo: assigneeId,
369
+ });
370
+ await event(tx, ctx, interactionId, 'onboarding.interaction_assigned', {
371
+ assignedTo: assigneeId,
372
+ });
373
+ if (assigneeId)
374
+ await (0, repository_js_1.createNotification)(tx, {
375
+ userId: assigneeId,
376
+ type: 'action_required',
377
+ title: 'Interação atribuída',
378
+ body: 'Uma interação do Portal foi atribuída a você.',
379
+ linkRef: { type: 'office_onboarding_interaction', id: interactionId },
380
+ });
381
+ return rows[0].version;
382
+ }
383
+ async function addInternalNote(tx, ctx, interactionId, body) {
384
+ const text = cleanText(body, 4000);
385
+ if (!text)
386
+ throw new shared_1.ValidationError('A observação interna é obrigatória');
387
+ await currentReview(tx, interactionId);
388
+ const rows = await tx `
389
+ INSERT INTO onboarding_interaction_internal_note (id, tenant_id, client_id, onboarding_id, interaction_id, author_id, body)
390
+ SELECT ${(0, shared_1.uuidv7)()}, i.tenant_id, i.client_id, i.onboarding_id, i.id, ${ctx.actorId}, ${text}
391
+ FROM onboarding_portal_interaction i WHERE i.id = ${interactionId}
392
+ RETURNING id, created_at
393
+ `;
394
+ if (!rows[0])
395
+ throw new shared_1.NotFoundError('Interação não encontrada');
396
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_internal_note_created');
397
+ await event(tx, ctx, interactionId, 'onboarding.interaction_internal_note_created');
398
+ return { id: rows[0].id, createdAt: rows[0].created_at.toISOString() };
399
+ }
400
+ async function createPublicReply(tx, ctx, interactionId, body) {
401
+ const text = cleanText(body, 2000);
402
+ if (!text)
403
+ throw new shared_1.ValidationError('A resposta pública é obrigatória');
404
+ const row = await tx `
405
+ INSERT INTO onboarding_interaction_public_reply (id, tenant_id, client_id, onboarding_id, interaction_id, author_id, body, visibility)
406
+ SELECT ${(0, shared_1.uuidv7)()}, i.tenant_id, i.client_id, i.onboarding_id, i.id, ${ctx.actorId}, ${text}, 'public_to_client'
407
+ FROM onboarding_portal_interaction i WHERE i.id = ${interactionId}
408
+ RETURNING id, created_at
409
+ `;
410
+ if (!row[0])
411
+ throw new shared_1.NotFoundError('Interação não encontrada');
412
+ await audit(tx, ctx, interactionId, 'onboarding.interaction_public_reply_created');
413
+ await event(tx, ctx, interactionId, 'onboarding.interaction_public_reply_created');
414
+ for (const userId of await (0, repository_js_2.listPortalUserIds)(tx, String((await currentReview(tx, interactionId)).client_id))) {
415
+ await (0, repository_js_1.createNotification)(tx, {
416
+ userId,
417
+ type: 'info',
418
+ title: 'O escritório respondeu',
419
+ body: 'Há um novo retorno sobre seu onboarding.',
420
+ linkRef: { type: 'portal_onboarding_interaction', id: interactionId },
421
+ });
422
+ }
423
+ return { id: row[0].id, createdAt: row[0].created_at.toISOString() };
424
+ }
425
+ //# 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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"}