@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 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/commercial-catalog/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * Contratos de consumo — SOMENTE TIPOS (ETAPA 10 do Track A1, RFC-COMMERCIAL-
4
+ * MODEL-001 §8/§22). Prepara IA/WhatsApp/e-mail/storage/OCR/automações/APIs
5
+ * para a camada de Usage/Rating — NÃO implementa Baruk Wallet nem o Rating
6
+ * Engine aqui (marcos posteriores do mesmo Track A, RFC-COMMERCIAL-MODEL-001
7
+ * §24). Unidade comercial única: crédito (o cliente nunca vê token/provedor).
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=consumption-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumption-contracts.js","sourceRoot":"","sources":["../../../src/commercial-catalog/consumption-contracts.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateCoupon = validateCoupon;
4
+ exports.applyCouponToQuote = applyCouponToQuote;
5
+ exports.couponTrialExtensionDays = couponTrialExtensionDays;
6
+ exports.couponFreeModule = couponFreeModule;
7
+ /** Valida um cupom contra a data corrente e o alvo (plano/módulos da oferta). */
8
+ function validateCoupon(coupon, now, context) {
9
+ const errors = [];
10
+ if (!coupon.isActive)
11
+ errors.push({ code: 'coupon_inactive', message: `Cupom "${coupon.code}" está inativo.` });
12
+ if (now < coupon.validFrom || (coupon.validTo != null && now > coupon.validTo)) {
13
+ errors.push({ code: 'coupon_out_of_validity', message: `Cupom "${coupon.code}" fora da validade em ${now}.` });
14
+ }
15
+ if (coupon.maxRedemptions != null && (coupon.redemptionsCount ?? 0) >= coupon.maxRedemptions) {
16
+ errors.push({ code: 'coupon_redemptions_exhausted', message: `Cupom "${coupon.code}" atingiu o limite de resgates.` });
17
+ }
18
+ if (coupon.appliesToPlanCodes && coupon.appliesToPlanCodes.length > 0 && !coupon.appliesToPlanCodes.includes(context.planCode)) {
19
+ errors.push({ code: 'coupon_plan_not_eligible', message: `Cupom "${coupon.code}" não se aplica ao plano "${context.planCode}".` });
20
+ }
21
+ if (coupon.appliesToModuleCodes && coupon.appliesToModuleCodes.length > 0) {
22
+ const hasAny = coupon.appliesToModuleCodes.some((m) => context.moduleCodes.includes(m));
23
+ if (!hasAny) {
24
+ errors.push({ code: 'coupon_modules_not_eligible', message: `Cupom "${coupon.code}" não se aplica aos módulos da oferta.` });
25
+ }
26
+ }
27
+ // Cadastro público é mais restrito que resgate administrativo: o operador
28
+ // pode aplicar um cupom interno a um cliente; um visitante, nunca.
29
+ if (context.publicSignup === true && (coupon.appliesAtOnboarding !== true || coupon.isInternalPromo === true)) {
30
+ errors.push({ code: 'coupon_not_for_public_signup', message: `Cupom "${coupon.code}" não está disponível para cadastro.` });
31
+ }
32
+ // Cupom com escopo vale só no tenant do acordo — um desconto negociado
33
+ // individualmente não pode vazar para os demais.
34
+ if (coupon.tenantScopeId != null && coupon.tenantScopeId !== context.tenantId) {
35
+ errors.push({ code: 'coupon_other_tenant', message: `Cupom "${coupon.code}" não está disponível para esta conta.` });
36
+ }
37
+ return errors;
38
+ }
39
+ /** Aplica o efeito monetário do cupom (percent_off/amount_off) sobre um PriceQuote já resolvido. */
40
+ function applyCouponToQuote(quote, coupon) {
41
+ if (coupon.effectType === 'percent_off' && coupon.percentOff != null) {
42
+ const factor = 1 - coupon.percentOff / 100;
43
+ return { ...quote, total: Math.round(quote.total * factor * 100) / 100 };
44
+ }
45
+ if (coupon.effectType === 'amount_off' && coupon.amountOff != null) {
46
+ return { ...quote, total: Math.max(0, quote.total - coupon.amountOff) };
47
+ }
48
+ // trial_extension / free_module_period / promotional_credit não alteram o
49
+ // preço do quote — afetam a duração do trial (ver `offer-application.ts`) ou
50
+ // concedem crédito/módulo (fora do escopo de preço).
51
+ return quote;
52
+ }
53
+ /** Dias de trial adicionais concedidos pelo cupom (0 se o efeito não for trial_extension). */
54
+ function couponTrialExtensionDays(coupon) {
55
+ return coupon?.effectType === 'trial_extension' ? (coupon.trialExtensionDays ?? 0) : 0;
56
+ }
57
+ /** Módulo liberado temporariamente pelo cupom, se houver (free_module_period). */
58
+ function couponFreeModule(coupon) {
59
+ if (coupon?.effectType !== 'free_module_period' || !coupon.freeModuleCode)
60
+ return null;
61
+ return { moduleCode: coupon.freeModuleCode, periodDays: coupon.freeModulePeriodDays ?? 30 };
62
+ }
63
+ //# sourceMappingURL=coupon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coupon.js","sourceRoot":"","sources":["../../../src/commercial-catalog/coupon.ts"],"names":[],"mappings":";;AAoCA,wCAiCC;AAGD,gDAYC;AAGD,4DAEC;AAGD,4CAGC;AA5DD,iFAAiF;AACjF,SAAgB,cAAc,CAC5B,MAAoB,EACpB,GAAW,EACX,OAAgC;IAEhC,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;IAChH,IAAI,GAAG,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,yBAAyB,GAAG,GAAG,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,iCAAiC,EAAE,CAAC,CAAC;IACzH,CAAC;IACD,IAAI,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/H,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,0BAA0B,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,6BAA6B,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IACrI,CAAC;IACD,IAAI,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,wCAAwC,EAAE,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC;IACD,0EAA0E;IAC1E,mEAAmE;IACnE,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,KAAK,IAAI,IAAI,MAAM,CAAC,eAAe,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,sCAAsC,EAAE,CAAC,CAAC;IAC9H,CAAC;IACD,uEAAuE;IACvE,iDAAiD;IACjD,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,IAAI,MAAM,CAAC,aAAa,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,UAAU,MAAM,CAAC,IAAI,wCAAwC,EAAE,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oGAAoG;AACpG,SAAgB,kBAAkB,CAAC,KAAiB,EAAE,MAAoB;IACxE,IAAI,MAAM,CAAC,UAAU,KAAK,aAAa,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;QAC3C,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,YAAY,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACnE,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,qDAAqD;IACrD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8FAA8F;AAC9F,SAAgB,wBAAwB,CAAC,MAAgC;IACvE,OAAO,MAAM,EAAE,UAAU,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,kFAAkF;AAClF,SAAgB,gBAAgB,CAAC,MAAgC;IAC/D,IAAI,MAAM,EAAE,UAAU,KAAK,oBAAoB,IAAI,CAAC,MAAM,CAAC,cAAc;QAAE,OAAO,IAAI,CAAC;IACvF,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,UAAU,EAAE,MAAM,CAAC,oBAAoB,IAAI,EAAE,EAAE,CAAC;AAC9F,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyOffer = exports.couponFreeModule = exports.couponTrialExtensionDays = exports.applyCouponToQuote = exports.validateCoupon = exports.resolvePriceQuote = exports.validateOffer = exports.KNOWN_ACTIVE_PRODUCT_LINES = void 0;
4
+ var types_js_1 = require("./types.js");
5
+ Object.defineProperty(exports, "KNOWN_ACTIVE_PRODUCT_LINES", { enumerable: true, get: function () { return types_js_1.KNOWN_ACTIVE_PRODUCT_LINES; } });
6
+ var catalog_js_1 = require("./catalog.js");
7
+ Object.defineProperty(exports, "validateOffer", { enumerable: true, get: function () { return catalog_js_1.validateOffer; } });
8
+ Object.defineProperty(exports, "resolvePriceQuote", { enumerable: true, get: function () { return catalog_js_1.resolvePriceQuote; } });
9
+ var coupon_js_1 = require("./coupon.js");
10
+ Object.defineProperty(exports, "validateCoupon", { enumerable: true, get: function () { return coupon_js_1.validateCoupon; } });
11
+ Object.defineProperty(exports, "applyCouponToQuote", { enumerable: true, get: function () { return coupon_js_1.applyCouponToQuote; } });
12
+ Object.defineProperty(exports, "couponTrialExtensionDays", { enumerable: true, get: function () { return coupon_js_1.couponTrialExtensionDays; } });
13
+ Object.defineProperty(exports, "couponFreeModule", { enumerable: true, get: function () { return coupon_js_1.couponFreeModule; } });
14
+ var offer_application_js_1 = require("./offer-application.js");
15
+ Object.defineProperty(exports, "applyOffer", { enumerable: true, get: function () { return offer_application_js_1.applyOffer; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commercial-catalog/index.ts"],"names":[],"mappings":";;;AAoBA,uCAAwD;AAA/C,sHAAA,0BAA0B,OAAA;AAGnC,2CAAgE;AAAvD,2GAAA,aAAa,OAAA;AAAE,+GAAA,iBAAiB,OAAA;AAGzC,yCAA6G;AAApG,2GAAA,cAAc,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,qHAAA,wBAAwB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAGvF,+DAAoD;AAA3C,kHAAA,UAAU,OAAA"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyOffer = applyOffer;
4
+ const reconcile_js_1 = require("../subscription-billing/reconcile.js");
5
+ const index_js_1 = require("../entitlements/index.js");
6
+ const catalog_js_1 = require("./catalog.js");
7
+ const coupon_js_1 = require("./coupon.js");
8
+ /** Aceita data pura (`YYYY-MM-DD`) ou datetime ISO completo (mesma normalização do subscription-billing). */
9
+ function parseIso(iso) {
10
+ return /^\d{4}-\d{2}-\d{2}$/.test(iso) ? new Date(`${iso}T00:00:00Z`) : new Date(iso);
11
+ }
12
+ function addDaysIso(iso, days) {
13
+ const d = parseIso(iso);
14
+ d.setUTCDate(d.getUTCDate() + days);
15
+ return d.toISOString();
16
+ }
17
+ function applyOffer(input) {
18
+ const { tenantId, productLine, offer, plan, modules, bundles, priceTable, coupon, currentEntitlements, now } = input;
19
+ const errors = (0, catalog_js_1.validateOffer)({ offer, plan, modules, bundles, productLine });
20
+ if (coupon) {
21
+ errors.push(...(0, coupon_js_1.validateCoupon)(coupon, now, { planCode: offer.planCode, moduleCodes: offer.moduleCodes }));
22
+ }
23
+ let quote = (0, catalog_js_1.resolvePriceQuote)(offer, priceTable, now);
24
+ if (coupon)
25
+ quote = (0, coupon_js_1.applyCouponToQuote)(quote, coupon);
26
+ // Trial é política da ASSINATURA, não do Plano (RFC §19): default do plano,
27
+ // sobrescrito pela Offer, estendido por cupom — nunca uma constante fixa.
28
+ const trialDays = (offer.trialDaysOverride ?? plan.defaultTrialDays) + (0, coupon_js_1.couponTrialExtensionDays)(coupon);
29
+ const trialEndsAt = addDaysIso(now, trialDays);
30
+ const { subscription, domainEvents } = (0, reconcile_js_1.startTrial)(tenantId, offer.planCode, trialEndsAt, now);
31
+ const targetGrants = offer.moduleCodes.map((moduleCode) => ({
32
+ moduleCode,
33
+ source: 'PLAN',
34
+ expiresAt: null,
35
+ }));
36
+ const freeModule = (0, coupon_js_1.couponFreeModule)(coupon);
37
+ if (freeModule && !offer.moduleCodes.includes(freeModule.moduleCode)) {
38
+ targetGrants.push({
39
+ moduleCode: freeModule.moduleCode,
40
+ source: 'COUPON',
41
+ expiresAt: addDaysIso(now, freeModule.periodDays),
42
+ });
43
+ }
44
+ const entitlements = (0, index_js_1.deriveEntitlements)({
45
+ tenantId,
46
+ subscriptionId: subscription.subscriptionId,
47
+ targetGrants,
48
+ current: currentEntitlements,
49
+ now,
50
+ });
51
+ return { subscription, domainEvents, entitlements, quote, errors };
52
+ }
53
+ //# sourceMappingURL=offer-application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offer-application.js","sourceRoot":"","sources":["../../../src/commercial-catalog/offer-application.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /**
3
+ * Commercial Catalog — contrato canônico (Track A1, derivado de
4
+ * RFC-CAPABILITY-COMMERCIAL-CATALOG-001 §4/§7 + RFC-COMMERCIAL-MODEL-001).
5
+ * Escopo: Baruk.app Representante + Indústria. Domínio PURO (sem DB, sem
6
+ * `Date.now()` interno) — mesmo padrão de `subscription-billing/`.
7
+ *
8
+ * Princípio transversal (nunca colapsar): Identidade (`code` estável / `name`
9
+ * editável) ≠ Precificação (vive na `CommercialPriceTable` versionada, NUNCA no
10
+ * Plan/Module) ≠ Vigência (da tabela/campanha/oferta) ≠ Elegibilidade (regras
11
+ * de quem pode contratar).
12
+ *
13
+ * Reconciliação Reality-First (achado do Track A1, 2026-07-22): o schema real
14
+ * de `manga-verde-bi` guarda `productLine` no TENANT (`tenant.productLine:
15
+ * 'rep' | 'ind'`, resolvido por precedência — coluna explícita > regra de
16
+ * founder-tenant-id), NÃO no Plan. Portanto este módulo NÃO amarra um Plan/
17
+ * Module a uma única linha fixa — `productLineEligibility` é uma lista
18
+ * OPCIONAL (undefined/vazio = elegível a todas as linhas ativas). Qual linha
19
+ * um tenant específico roda é resolvido pelo CONSUMIDOR (equivalente ao
20
+ * `product/tenant_product` do `baruk-platform`, ou ao `tenant.productLine` do
21
+ * mvb) — este módulo recebe a linha já resolvida, nunca a resolve sozinho.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.KNOWN_ACTIVE_PRODUCT_LINES = void 0;
25
+ exports.KNOWN_ACTIVE_PRODUCT_LINES = ['rep', 'ind'];
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commercial-catalog/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;AAYU,QAAA,0BAA0B,GAA+B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CRM_STAGES = void 0;
4
+ exports.createLead = createLead;
5
+ exports.listLeads = listLeads;
6
+ exports.getLead = getLead;
7
+ exports.updateLead = updateLead;
8
+ exports.moveLeadStage = moveLeadStage;
9
+ exports.linkLeadToClient = linkLeadToClient;
10
+ exports.softDeleteLead = softDeleteLead;
11
+ exports.addActivity = addActivity;
12
+ exports.listActivities = listActivities;
13
+ exports.completeTask = completeTask;
14
+ exports.pipelineSummary = pipelineSummary;
15
+ const shared_1 = require("@baruk/shared");
16
+ /** Estágios canônicos do funil (o front usa para colunas do Kanban). */
17
+ exports.CRM_STAGES = [
18
+ { key: 'lead', label: 'Lead' },
19
+ { key: 'contact', label: 'Contato' },
20
+ { key: 'proposal', label: 'Proposta' },
21
+ { key: 'won', label: 'Ganho' },
22
+ { key: 'lost', label: 'Perdido' },
23
+ ];
24
+ function mapLead(r) {
25
+ return {
26
+ id: r.id,
27
+ name: r.name,
28
+ company: r.company,
29
+ email: r.email,
30
+ phone: r.phone,
31
+ source: r.source,
32
+ stage: r.stage,
33
+ status: r.status,
34
+ estimatedValue: r.estimated_value === null ? null : Number(r.estimated_value),
35
+ probability: r.probability,
36
+ ownerUserId: r.owner_user_id,
37
+ tags: r.tags ?? [],
38
+ notes: r.notes,
39
+ lostReason: r.lost_reason,
40
+ clientId: r.client_id,
41
+ createdAt: r.created_at.toISOString(),
42
+ updatedAt: r.updated_at.toISOString(),
43
+ };
44
+ }
45
+ const LEAD_COLS = `
46
+ id, name, company, email, phone, source, stage, status, estimated_value,
47
+ probability, owner_user_id, tags, notes, lost_reason, client_id, created_at, updated_at
48
+ `;
49
+ async function createLead(tx, input) {
50
+ const rows = await tx `
51
+ INSERT INTO lead (
52
+ id, tenant_id, name, company, email, phone, source, stage,
53
+ estimated_value, probability, owner_user_id, tags, notes, created_by
54
+ ) VALUES (
55
+ ${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid,
56
+ ${input.name}, ${input.company ?? null}, ${input.email ?? null}, ${input.phone ?? null},
57
+ ${input.source ?? null}, ${input.stage ?? 'lead'},
58
+ ${input.estimatedValue ?? null}, ${input.probability ?? 0},
59
+ ${input.ownerUserId ?? null}, ${tx.json((input.tags ?? []))},
60
+ ${input.notes ?? null}, ${input.createdBy ?? null}
61
+ )
62
+ RETURNING ${tx.unsafe(LEAD_COLS)}
63
+ `;
64
+ return mapLead(rows[0]);
65
+ }
66
+ async function listLeads(tx, filter = {}) {
67
+ const limit = Math.min(filter.limit ?? 50, 200);
68
+ const offset = filter.offset ?? 0;
69
+ const like = filter.search ? `%${filter.search}%` : null;
70
+ const rows = await tx `
71
+ SELECT ${tx.unsafe(LEAD_COLS)}, count(*) OVER() AS total
72
+ FROM lead
73
+ WHERE deleted_at IS NULL
74
+ AND (${filter.stage ?? null}::text IS NULL OR stage = ${filter.stage ?? null})
75
+ AND (${filter.status ?? null}::text IS NULL OR status = ${filter.status ?? null})
76
+ AND (${filter.ownerUserId ?? null}::uuid IS NULL OR owner_user_id = ${filter.ownerUserId ?? null})
77
+ AND (${like}::text IS NULL OR name ILIKE ${like} OR company ILIKE ${like} OR email ILIKE ${like})
78
+ ORDER BY updated_at DESC
79
+ LIMIT ${limit} OFFSET ${offset}
80
+ `;
81
+ const total = rows[0] ? Number(rows[0].total) : 0;
82
+ return { items: rows.map(mapLead), total };
83
+ }
84
+ async function getLead(tx, id) {
85
+ const rows = await tx `
86
+ SELECT ${tx.unsafe(LEAD_COLS)} FROM lead WHERE id = ${id} AND deleted_at IS NULL
87
+ `;
88
+ if (!rows[0])
89
+ throw new shared_1.NotFoundError('Lead não encontrado');
90
+ return mapLead(rows[0]);
91
+ }
92
+ async function updateLead(tx, id, input) {
93
+ const rows = await tx `
94
+ UPDATE lead SET
95
+ name = COALESCE(${input.name ?? null}::text, name),
96
+ company = COALESCE(${input.company ?? null}::text, company),
97
+ email = COALESCE(${input.email ?? null}::citext, email),
98
+ phone = COALESCE(${input.phone ?? null}::text, phone),
99
+ source = COALESCE(${input.source ?? null}::text, source),
100
+ estimated_value = COALESCE(${input.estimatedValue ?? null}::numeric, estimated_value),
101
+ probability = COALESCE(${input.probability ?? null}::int, probability),
102
+ owner_user_id = COALESCE(${input.ownerUserId ?? null}::uuid, owner_user_id),
103
+ tags = COALESCE(${input.tags ? tx.json(input.tags) : null}::jsonb, tags),
104
+ notes = COALESCE(${input.notes ?? null}::text, notes),
105
+ updated_at = now(),
106
+ version = version + 1
107
+ WHERE id = ${id} AND deleted_at IS NULL
108
+ RETURNING id
109
+ `;
110
+ return rows.count;
111
+ }
112
+ /** Move o lead de estágio. `won`/`lost` também fecham o status. */
113
+ async function moveLeadStage(tx, id, stage, opts = {}) {
114
+ const status = stage === 'won' ? 'won' : stage === 'lost' ? 'lost' : 'open';
115
+ const rows = await tx `
116
+ UPDATE lead SET
117
+ stage = ${stage}, status = ${status},
118
+ lost_reason = ${stage === 'lost' ? opts.lostReason ?? null : null},
119
+ updated_at = now(), version = version + 1
120
+ WHERE id = ${id} AND deleted_at IS NULL
121
+ RETURNING id
122
+ `;
123
+ if (rows.count > 0) {
124
+ await tx `
125
+ INSERT INTO crm_activity (id, tenant_id, lead_id, kind, body, author_user_id)
126
+ VALUES (${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid, ${id},
127
+ 'stage_change', ${`Estágio alterado para ${stage}`}, ${opts.authorUserId ?? null})
128
+ `;
129
+ }
130
+ return rows.count;
131
+ }
132
+ /** Marca o lead como convertido, ligando-o ao `client` criado. */
133
+ async function linkLeadToClient(tx, id, clientId) {
134
+ const rows = await tx `
135
+ UPDATE lead SET client_id = ${clientId}, stage = 'won', status = 'won',
136
+ updated_at = now(), version = version + 1
137
+ WHERE id = ${id} AND deleted_at IS NULL
138
+ RETURNING id
139
+ `;
140
+ return rows.count;
141
+ }
142
+ async function softDeleteLead(tx, id) {
143
+ const rows = await tx `
144
+ UPDATE lead SET deleted_at = now() WHERE id = ${id} AND deleted_at IS NULL RETURNING id
145
+ `;
146
+ return rows.count;
147
+ }
148
+ function mapActivity(r) {
149
+ return {
150
+ id: r.id,
151
+ leadId: r.lead_id,
152
+ kind: r.kind,
153
+ body: r.body,
154
+ dueDate: r.due_date ? r.due_date.toISOString() : null,
155
+ doneAt: r.done_at ? r.done_at.toISOString() : null,
156
+ authorUserId: r.author_user_id,
157
+ createdAt: r.created_at.toISOString(),
158
+ };
159
+ }
160
+ async function addActivity(tx, input) {
161
+ const rows = await tx `
162
+ INSERT INTO crm_activity (id, tenant_id, lead_id, kind, body, due_date, author_user_id)
163
+ VALUES (
164
+ ${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid, ${input.leadId},
165
+ ${input.kind ?? 'note'}, ${input.body ?? null}, ${input.dueDate ?? null}, ${input.authorUserId ?? null}
166
+ )
167
+ RETURNING id, lead_id, kind, body, due_date, done_at, author_user_id, created_at
168
+ `;
169
+ return mapActivity(rows[0]);
170
+ }
171
+ async function listActivities(tx, leadId) {
172
+ const rows = await tx `
173
+ SELECT id, lead_id, kind, body, due_date, done_at, author_user_id, created_at
174
+ FROM crm_activity WHERE lead_id = ${leadId}
175
+ ORDER BY created_at DESC
176
+ `;
177
+ return rows.map(mapActivity);
178
+ }
179
+ async function completeTask(tx, id) {
180
+ const rows = await tx `
181
+ UPDATE crm_activity SET done_at = now()
182
+ WHERE id = ${id} AND kind = 'task' AND done_at IS NULL RETURNING id
183
+ `;
184
+ return rows.count;
185
+ }
186
+ /** Distribuição por estágio + soma de valor esperado — KPIs do funil. */
187
+ async function pipelineSummary(tx) {
188
+ const rows = await tx `
189
+ SELECT stage, count(*)::int AS count, COALESCE(sum(estimated_value), 0) AS value
190
+ FROM lead WHERE deleted_at IS NULL AND status = 'open'
191
+ GROUP BY stage
192
+ `;
193
+ return rows.map((r) => ({ stage: r.stage, count: r.count, value: Number(r.value) }));
194
+ }
195
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/crm/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCoreStats = getCoreStats;
4
+ async function getCoreStats(tx) {
5
+ const [clients] = await tx `
6
+ SELECT count(*)::int AS n FROM client WHERE deleted_at IS NULL
7
+ `;
8
+ const [users] = await tx `
9
+ SELECT count(*)::int AS n FROM membership WHERE status = 'active' AND deleted_at IS NULL
10
+ `;
11
+ const [open] = await tx `
12
+ SELECT count(*)::int AS n FROM service_request
13
+ WHERE deleted_at IS NULL
14
+ AND status IN ('sent','viewed','awaiting_client','answered','in_review')
15
+ `;
16
+ const [overdue] = await tx `
17
+ SELECT count(*)::int AS n FROM service_request
18
+ WHERE deleted_at IS NULL
19
+ AND (status = 'overdue'
20
+ OR (due_date IS NOT NULL AND due_date < current_date
21
+ AND status NOT IN ('done','canceled')))
22
+ `;
23
+ const recent = await tx `
24
+ SELECT action, resource_type, occurred_at
25
+ FROM audit_log ORDER BY occurred_at DESC LIMIT 8
26
+ `;
27
+ return {
28
+ clients: clients?.n ?? 0,
29
+ activeUsers: users?.n ?? 0,
30
+ openRequests: open?.n ?? 0,
31
+ overdueRequests: overdue?.n ?? 0,
32
+ recentActivity: recent.map((r) => ({
33
+ action: r.action,
34
+ resourceType: r.resource_type,
35
+ occurredAt: r.occurred_at.toISOString(),
36
+ })),
37
+ };
38
+ }
39
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/dashboard/repository.ts"],"names":[],"mappings":";;AAeA,oCAkCC;AAlCM,KAAK,UAAU,YAAY,CAAC,EAAM;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAE1C,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAAiB;;GAExC,CAAC;IACF,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;GAIvC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAiB;;;;;;GAM1C,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAgE;;;GAGtF,CAAC;IACF,OAAO;QACL,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QACxB,WAAW,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC;QAC1B,YAAY,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;QAC1B,eAAe,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createDb = createDb;
7
+ const postgres_1 = __importDefault(require("postgres"));
8
+ /**
9
+ * Cria um cliente Postgres (postgres.js). Duas instâncias são usadas no
10
+ * ecossistema (05-security §7.1, defesa em profundidade):
11
+ * - OWNER: roda migrations/seed (cria schema).
12
+ * - APP (baruk_app): runtime da aplicação — NOSUPERUSER, NOBYPASSRLS, sujeito à RLS.
13
+ */
14
+ function createDb(connectionString, opts = {}) {
15
+ // SSL obrigatório em provedores gerenciados (Render/Neon/etc.); desligado em
16
+ // Postgres local. Detecta pelo host/flag da URL.
17
+ const isLocal = /@(localhost|127\.0\.0\.1|host\.docker\.internal|\[?::1\]?)[:/]/.test(connectionString);
18
+ const wantsSsl = !isLocal && /sslmode=require|render\.com|neon\.tech|supabase|amazonaws|\.cloud/.test(connectionString);
19
+ return (0, postgres_1.default)(connectionString, {
20
+ max: opts.max ?? 10,
21
+ // UUIDs são gerados na aplicação (uuidv7); datas em UTC.
22
+ prepare: true,
23
+ ssl: wantsSsl ? { rejectUnauthorized: false } : undefined,
24
+ onnotice: () => { }, // silencia NOTICEs verbosos de DO-blocks/IF EXISTS
25
+ });
26
+ }
27
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/db/client.ts"],"names":[],"mappings":";;;;;AAoBA,4BAgBC;AApCD,wDAAgC;AAchC;;;;;GAKG;AACH,SAAgB,QAAQ,CAAC,gBAAwB,EAAE,OAAkB,EAAE;IACrE,6EAA6E;IAC7E,iDAAiD;IACjD,MAAM,OAAO,GAAG,gEAAgE,CAAC,IAAI,CACnF,gBAAgB,CACjB,CAAC;IACF,MAAM,QAAQ,GACZ,CAAC,OAAO,IAAI,mEAAmE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAEzG,OAAO,IAAA,kBAAQ,EAAC,gBAAgB,EAAE;QAChC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE;QACnB,yDAAyD;QACzD,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;QACzD,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,mDAAmD;KACxE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withContext = withContext;
4
+ exports.withTenant = withTenant;
5
+ const shared_1 = require("@baruk/shared");
6
+ /**
7
+ * Executa `fn` dentro de uma transação com as GUCs de contexto setadas via
8
+ * `set_config(..., is_local => true)` — ou seja, escopo de transação (equivalente
9
+ * a `SET LOCAL`). Toda leitura/escrita tenant-scoped DEVE passar por aqui: é o
10
+ * único ponto onde o `tenant_id` chega ao PostgreSQL, e ele nunca vem do cliente.
11
+ */
12
+ async function withContext(db, ctx, fn) {
13
+ if (ctx.tenantId !== undefined && !(0, shared_1.isUuid)(ctx.tenantId)) {
14
+ throw new shared_1.TenantContextError(`tenantId inválido no contexto: ${ctx.tenantId}`);
15
+ }
16
+ if (ctx.userId !== undefined && !(0, shared_1.isUuid)(ctx.userId)) {
17
+ throw new shared_1.TenantContextError(`userId inválido no contexto: ${ctx.userId}`);
18
+ }
19
+ if (ctx.clientId !== undefined && !(0, shared_1.isUuid)(ctx.clientId)) {
20
+ throw new shared_1.TenantContextError(`clientId inválido no contexto: ${ctx.clientId}`);
21
+ }
22
+ const result = await db.begin(async (tx) => {
23
+ if (ctx.tenantId !== undefined) {
24
+ await tx `select set_config('app.current_tenant', ${ctx.tenantId}, true)`;
25
+ }
26
+ if (ctx.userId !== undefined) {
27
+ await tx `select set_config('app.current_user', ${ctx.userId}, true)`;
28
+ }
29
+ if (ctx.clientId !== undefined) {
30
+ await tx `select set_config('app.current_client', ${ctx.clientId}, true)`;
31
+ }
32
+ if (ctx.surface !== undefined) {
33
+ await tx `select set_config('app.current_surface', ${ctx.surface}, true)`;
34
+ }
35
+ return fn(tx);
36
+ });
37
+ return result;
38
+ }
39
+ /** Açúcar sintático: contexto apenas de tenant. */
40
+ function withTenant(db, tenantId, fn) {
41
+ return withContext(db, { tenantId }, fn);
42
+ }
43
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/db/context.ts"],"names":[],"mappings":";;AA4BA,kCAgCC;AAGD,gCAEC;AAjED,0CAA2D;AAsB3D;;;;;GAKG;AACI,KAAK,UAAU,WAAW,CAC/B,EAAM,EACN,GAAc,EACd,EAA0B;IAE1B,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAA,eAAM,EAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,2BAAkB,CAAC,kCAAkC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAA,eAAM,EAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,2BAAkB,CAAC,gCAAgC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAA,eAAM,EAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,2BAAkB,CAAC,kCAAkC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACzC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAA,2CAA2C,GAAG,CAAC,QAAQ,SAAS,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,EAAE,CAAA,yCAAyC,GAAG,CAAC,MAAM,SAAS,CAAC;QACvE,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAA,2CAA2C,GAAG,CAAC,QAAQ,SAAS,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAA,4CAA4C,GAAG,CAAC,OAAO,SAAS,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,CAAC,EAAmB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAW,CAAC;AACrB,CAAC;AAED,mDAAmD;AACnD,SAAgB,UAAU,CAAI,EAAM,EAAE,QAAgB,EAAE,EAA0B;IAChF,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadEnv = loadEnv;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ /**
7
+ * Carregador mínimo de `.env` (sem dependência externa). Procura o arquivo na
8
+ * raiz do monorepo e popula `process.env` sem sobrescrever variáveis já
9
+ * definidas (o ambiente real tem prioridade sobre o arquivo). Usado pelos
10
+ * scripts CLI (migrate/seed) e pela API em desenvolvimento.
11
+ */
12
+ function loadEnv(fileName = '.env') {
13
+ // Sobe diretórios a partir do cwd até achar o arquivo (raiz do monorepo).
14
+ let dir = process.cwd();
15
+ for (let i = 0; i < 6; i++) {
16
+ const candidate = (0, node_path_1.resolve)(dir, fileName);
17
+ if ((0, node_fs_1.existsSync)(candidate)) {
18
+ applyEnvFile(candidate);
19
+ return;
20
+ }
21
+ const parent = (0, node_path_1.resolve)(dir, '..');
22
+ if (parent === dir)
23
+ break;
24
+ dir = parent;
25
+ }
26
+ }
27
+ function applyEnvFile(path) {
28
+ const content = (0, node_fs_1.readFileSync)(path, 'utf8');
29
+ for (const rawLine of content.split('\n')) {
30
+ const line = rawLine.trim();
31
+ if (!line || line.startsWith('#'))
32
+ continue;
33
+ const eq = line.indexOf('=');
34
+ if (eq === -1)
35
+ continue;
36
+ const key = line.slice(0, eq).trim();
37
+ if (key in process.env)
38
+ continue;
39
+ let value = line.slice(eq + 1).trim();
40
+ if ((value.startsWith('"') && value.endsWith('"')) ||
41
+ (value.startsWith("'") && value.endsWith("'"))) {
42
+ value = value.slice(1, -1);
43
+ }
44
+ process.env[key] = value;
45
+ }
46
+ }
47
+ //# sourceMappingURL=load-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../../src/db/load-env.ts"],"names":[],"mappings":";;AASA,0BAaC;AAtBD,qCAAmD;AACnD,yCAAoC;AAEpC;;;;;GAKG;AACH,SAAgB,OAAO,CAAC,QAAQ,GAAG,MAAM;IACvC,0EAA0E;IAC1E,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAA,mBAAO,EAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,IAAI,IAAA,oBAAU,EAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,IAAA,mBAAO,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,KAAK,CAAC,CAAC;YAAE,SAAS;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,GAAG,IAAI,OAAO,CAAC,GAAG;YAAE,SAAS;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;AACH,CAAC"}