@baruk/core 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/dist/auth/password-reset.d.ts.map +1 -1
  3. package/dist/auth/password-reset.js +2 -4
  4. package/dist/auth/password-reset.js.map +1 -1
  5. package/dist/auth/password.d.ts +2 -18
  6. package/dist/auth/password.d.ts.map +1 -1
  7. package/dist/auth/password.js +12 -51
  8. package/dist/auth/password.js.map +1 -1
  9. package/dist/auth/service.d.ts +0 -12
  10. package/dist/auth/service.d.ts.map +1 -1
  11. package/dist/auth/service.js +3 -36
  12. package/dist/auth/service.js.map +1 -1
  13. package/dist/auth/session-token.d.ts +5 -2
  14. package/dist/auth/session-token.d.ts.map +1 -1
  15. package/dist/auth/session-token.js +7 -12
  16. package/dist/auth/session-token.js.map +1 -1
  17. package/dist/billing/dunning.d.ts +33 -0
  18. package/dist/billing/dunning.d.ts.map +1 -0
  19. package/dist/billing/dunning.js +49 -0
  20. package/dist/billing/dunning.js.map +1 -0
  21. package/dist/billing/provider/asaas.d.ts +15 -0
  22. package/dist/billing/provider/asaas.d.ts.map +1 -0
  23. package/dist/billing/provider/asaas.js +121 -0
  24. package/dist/billing/provider/asaas.js.map +1 -0
  25. package/dist/billing/provider/manual.d.ts +14 -0
  26. package/dist/billing/provider/manual.d.ts.map +1 -0
  27. package/dist/billing/provider/manual.js +24 -0
  28. package/dist/billing/provider/manual.js.map +1 -0
  29. package/dist/billing/provider/registry.d.ts +12 -0
  30. package/dist/billing/provider/registry.d.ts.map +1 -0
  31. package/dist/billing/provider/registry.js +22 -0
  32. package/dist/billing/provider/registry.js.map +1 -0
  33. package/dist/billing/provider/types.d.ts +76 -0
  34. package/dist/billing/provider/types.d.ts.map +1 -0
  35. package/dist/billing/provider/types.js +9 -0
  36. package/dist/billing/provider/types.js.map +1 -0
  37. package/dist/billing/receivable.d.ts +108 -0
  38. package/dist/billing/receivable.d.ts.map +1 -0
  39. package/dist/billing/receivable.js +2 -0
  40. package/dist/billing/receivable.js.map +1 -0
  41. package/dist/billing/repository.d.ts +97 -0
  42. package/dist/billing/repository.d.ts.map +1 -0
  43. package/dist/billing/repository.js +167 -0
  44. package/dist/billing/repository.js.map +1 -0
  45. package/dist/cjs/audit/audit.js +31 -0
  46. package/dist/cjs/audit/audit.js.map +1 -0
  47. package/dist/cjs/audit/repository.js +32 -0
  48. package/dist/cjs/audit/repository.js.map +1 -0
  49. package/dist/cjs/auth/password-reset.js +58 -0
  50. package/dist/cjs/auth/password-reset.js.map +1 -0
  51. package/dist/cjs/auth/password.js +32 -0
  52. package/dist/cjs/auth/password.js.map +1 -0
  53. package/dist/cjs/auth/service.js +191 -0
  54. package/dist/cjs/auth/service.js.map +1 -0
  55. package/dist/cjs/auth/session-token.js +18 -0
  56. package/dist/cjs/auth/session-token.js.map +1 -0
  57. package/dist/cjs/billing/dunning.js +54 -0
  58. package/dist/cjs/billing/dunning.js.map +1 -0
  59. package/dist/cjs/billing/provider/asaas.js +125 -0
  60. package/dist/cjs/billing/provider/asaas.js.map +1 -0
  61. package/dist/cjs/billing/provider/manual.js +28 -0
  62. package/dist/cjs/billing/provider/manual.js.map +1 -0
  63. package/dist/cjs/billing/provider/registry.js +27 -0
  64. package/dist/cjs/billing/provider/registry.js.map +1 -0
  65. package/dist/cjs/billing/provider/types.js +10 -0
  66. package/dist/cjs/billing/provider/types.js.map +1 -0
  67. package/dist/cjs/billing/receivable.js +3 -0
  68. package/dist/cjs/billing/receivable.js.map +1 -0
  69. package/dist/cjs/billing/repository.js +180 -0
  70. package/dist/cjs/billing/repository.js.map +1 -0
  71. package/dist/cjs/clients/repository.js +123 -0
  72. package/dist/cjs/clients/repository.js.map +1 -0
  73. package/dist/cjs/commercial-catalog/catalog.js +108 -0
  74. package/dist/cjs/commercial-catalog/catalog.js.map +1 -0
  75. package/dist/cjs/commercial-catalog/consumption-contracts.js +10 -0
  76. package/dist/cjs/commercial-catalog/consumption-contracts.js.map +1 -0
  77. package/dist/cjs/commercial-catalog/coupon.js +53 -0
  78. package/dist/cjs/commercial-catalog/coupon.js.map +1 -0
  79. package/dist/cjs/commercial-catalog/index.js +16 -0
  80. package/dist/cjs/commercial-catalog/index.js.map +1 -0
  81. package/dist/cjs/commercial-catalog/offer-application.js +53 -0
  82. package/dist/cjs/commercial-catalog/offer-application.js.map +1 -0
  83. package/dist/cjs/commercial-catalog/types.js +26 -0
  84. package/dist/cjs/commercial-catalog/types.js.map +1 -0
  85. package/dist/cjs/crm/repository.js +195 -0
  86. package/dist/cjs/crm/repository.js.map +1 -0
  87. package/dist/cjs/dashboard/repository.js +39 -0
  88. package/dist/cjs/dashboard/repository.js.map +1 -0
  89. package/dist/cjs/db/client.js +27 -0
  90. package/dist/cjs/db/client.js.map +1 -0
  91. package/dist/cjs/db/context.js +43 -0
  92. package/dist/cjs/db/context.js.map +1 -0
  93. package/dist/cjs/db/load-env.js +47 -0
  94. package/dist/cjs/db/load-env.js.map +1 -0
  95. package/dist/cjs/db/seed.js +69 -0
  96. package/dist/cjs/db/seed.js.map +1 -0
  97. package/dist/cjs/entitlements/decision.js +203 -0
  98. package/dist/cjs/entitlements/decision.js.map +1 -0
  99. package/dist/cjs/entitlements/derive.js +46 -0
  100. package/dist/cjs/entitlements/derive.js.map +1 -0
  101. package/dist/cjs/entitlements/index.js +23 -0
  102. package/dist/cjs/entitlements/index.js.map +1 -0
  103. package/dist/cjs/entitlements/sources.js +60 -0
  104. package/dist/cjs/entitlements/sources.js.map +1 -0
  105. package/dist/cjs/entitlements/standing.js +42 -0
  106. package/dist/cjs/entitlements/standing.js.map +1 -0
  107. package/dist/cjs/entitlements/types.js +16 -0
  108. package/dist/cjs/entitlements/types.js.map +1 -0
  109. package/dist/cjs/import/clients-import.js +147 -0
  110. package/dist/cjs/import/clients-import.js.map +1 -0
  111. package/dist/cjs/index.js +335 -0
  112. package/dist/cjs/index.js.map +1 -0
  113. package/dist/cjs/mail/dedup-store.js +56 -0
  114. package/dist/cjs/mail/dedup-store.js.map +1 -0
  115. package/dist/cjs/mail/index.js +24 -0
  116. package/dist/cjs/mail/index.js.map +1 -0
  117. package/dist/cjs/mail/provider.js +251 -0
  118. package/dist/cjs/mail/provider.js.map +1 -0
  119. package/dist/cjs/mail/resend-client.js +103 -0
  120. package/dist/cjs/mail/resend-client.js.map +1 -0
  121. package/dist/cjs/mail/resend.js +21 -0
  122. package/dist/cjs/mail/resend.js.map +1 -0
  123. package/dist/cjs/mail/sanitize.js +56 -0
  124. package/dist/cjs/mail/sanitize.js.map +1 -0
  125. package/dist/cjs/mail/sender-resolver.js +15 -0
  126. package/dist/cjs/mail/sender-resolver.js.map +1 -0
  127. package/dist/cjs/mail/template-renderer.js +21 -0
  128. package/dist/cjs/mail/template-renderer.js.map +1 -0
  129. package/dist/cjs/mail/types.js +38 -0
  130. package/dist/cjs/mail/types.js.map +1 -0
  131. package/dist/cjs/notifications/repository.js +49 -0
  132. package/dist/cjs/notifications/repository.js.map +1 -0
  133. package/dist/cjs/onboarding/domain.js +370 -0
  134. package/dist/cjs/onboarding/domain.js.map +1 -0
  135. package/dist/cjs/onboarding/interaction-review.js +425 -0
  136. package/dist/cjs/onboarding/interaction-review.js.map +1 -0
  137. package/dist/cjs/onboarding/persistence.js +444 -0
  138. package/dist/cjs/onboarding/persistence.js.map +1 -0
  139. package/dist/cjs/onboarding/portal-actions.js +157 -0
  140. package/dist/cjs/onboarding/portal-actions.js.map +1 -0
  141. package/dist/cjs/onboarding/portal.js +177 -0
  142. package/dist/cjs/onboarding/portal.js.map +1 -0
  143. package/dist/cjs/package.json +3 -0
  144. package/dist/cjs/portal/repository.js +37 -0
  145. package/dist/cjs/portal/repository.js.map +1 -0
  146. package/dist/cjs/pricing-engine/bundle.js +49 -0
  147. package/dist/cjs/pricing-engine/bundle.js.map +1 -0
  148. package/dist/cjs/pricing-engine/errors.js +48 -0
  149. package/dist/cjs/pricing-engine/errors.js.map +1 -0
  150. package/dist/cjs/pricing-engine/index.js +30 -0
  151. package/dist/cjs/pricing-engine/index.js.map +1 -0
  152. package/dist/cjs/pricing-engine/money.js +69 -0
  153. package/dist/cjs/pricing-engine/money.js.map +1 -0
  154. package/dist/cjs/pricing-engine/pipeline.js +330 -0
  155. package/dist/cjs/pricing-engine/pipeline.js.map +1 -0
  156. package/dist/cjs/pricing-engine/proration.js +53 -0
  157. package/dist/cjs/pricing-engine/proration.js.map +1 -0
  158. package/dist/cjs/pricing-engine/shadow.js +58 -0
  159. package/dist/cjs/pricing-engine/shadow.js.map +1 -0
  160. package/dist/cjs/pricing-engine/types.js +34 -0
  161. package/dist/cjs/pricing-engine/types.js.map +1 -0
  162. package/dist/cjs/products/catalog.js +10 -0
  163. package/dist/cjs/products/catalog.js.map +1 -0
  164. package/dist/cjs/products/repository.js +61 -0
  165. package/dist/cjs/products/repository.js.map +1 -0
  166. package/dist/cjs/rbac/authorize.js +36 -0
  167. package/dist/cjs/rbac/authorize.js.map +1 -0
  168. package/dist/cjs/rbac/catalog.js +455 -0
  169. package/dist/cjs/rbac/catalog.js.map +1 -0
  170. package/dist/cjs/requests/repository.js +114 -0
  171. package/dist/cjs/requests/repository.js.map +1 -0
  172. package/dist/cjs/subscription-billing/dunning.js +26 -0
  173. package/dist/cjs/subscription-billing/dunning.js.map +1 -0
  174. package/dist/cjs/subscription-billing/events.js +45 -0
  175. package/dist/cjs/subscription-billing/events.js.map +1 -0
  176. package/dist/cjs/subscription-billing/index.js +62 -0
  177. package/dist/cjs/subscription-billing/index.js.map +1 -0
  178. package/dist/cjs/subscription-billing/plans.js +88 -0
  179. package/dist/cjs/subscription-billing/plans.js.map +1 -0
  180. package/dist/cjs/subscription-billing/product-config.js +54 -0
  181. package/dist/cjs/subscription-billing/product-config.js.map +1 -0
  182. package/dist/cjs/subscription-billing/provider/asaas.js +233 -0
  183. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -0
  184. package/dist/cjs/subscription-billing/provider/disabled.js +46 -0
  185. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -0
  186. package/dist/cjs/subscription-billing/provider/registry.js +29 -0
  187. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -0
  188. package/dist/cjs/subscription-billing/reconcile.js +198 -0
  189. package/dist/cjs/subscription-billing/reconcile.js.map +1 -0
  190. package/dist/cjs/subscription-billing/repository.js +359 -0
  191. package/dist/cjs/subscription-billing/repository.js.map +1 -0
  192. package/dist/cjs/subscription-billing/service.js +838 -0
  193. package/dist/cjs/subscription-billing/service.js.map +1 -0
  194. package/dist/cjs/subscription-billing/types.js +28 -0
  195. package/dist/cjs/subscription-billing/types.js.map +1 -0
  196. package/dist/cjs/tenancy/provisioning.js +126 -0
  197. package/dist/cjs/tenancy/provisioning.js.map +1 -0
  198. package/dist/cjs/users/repository.js +83 -0
  199. package/dist/cjs/users/repository.js.map +1 -0
  200. package/dist/cjs/vault/crypto.js +94 -0
  201. package/dist/cjs/vault/crypto.js.map +1 -0
  202. package/dist/cjs/vault/repository.js +120 -0
  203. package/dist/cjs/vault/repository.js.map +1 -0
  204. package/dist/commercial-catalog/catalog.d.ts +27 -0
  205. package/dist/commercial-catalog/catalog.d.ts.map +1 -0
  206. package/dist/commercial-catalog/catalog.js +104 -0
  207. package/dist/commercial-catalog/catalog.js.map +1 -0
  208. package/dist/commercial-catalog/consumption-contracts.d.ts +33 -0
  209. package/dist/commercial-catalog/consumption-contracts.d.ts.map +1 -0
  210. package/dist/commercial-catalog/consumption-contracts.js +9 -0
  211. package/dist/commercial-catalog/consumption-contracts.js.map +1 -0
  212. package/dist/commercial-catalog/coupon.d.ts +27 -0
  213. package/dist/commercial-catalog/coupon.d.ts.map +1 -0
  214. package/dist/commercial-catalog/coupon.js +47 -0
  215. package/dist/commercial-catalog/coupon.js.map +1 -0
  216. package/dist/commercial-catalog/index.d.ts +10 -0
  217. package/dist/commercial-catalog/index.d.ts.map +1 -0
  218. package/dist/commercial-catalog/index.js +5 -0
  219. package/dist/commercial-catalog/index.js.map +1 -0
  220. package/dist/commercial-catalog/offer-application.d.ts +39 -0
  221. package/dist/commercial-catalog/offer-application.d.ts.map +1 -0
  222. package/dist/commercial-catalog/offer-application.js +50 -0
  223. package/dist/commercial-catalog/offer-application.js.map +1 -0
  224. package/dist/commercial-catalog/types.d.ts +155 -0
  225. package/dist/commercial-catalog/types.d.ts.map +1 -0
  226. package/dist/commercial-catalog/types.js +23 -0
  227. package/dist/commercial-catalog/types.js.map +1 -0
  228. package/dist/crm/repository.d.ts +109 -0
  229. package/dist/crm/repository.d.ts.map +1 -0
  230. package/dist/crm/repository.js +181 -0
  231. package/dist/crm/repository.js.map +1 -0
  232. package/dist/db/context.d.ts +2 -0
  233. package/dist/db/context.d.ts.map +1 -1
  234. package/dist/db/context.js +3 -0
  235. package/dist/db/context.js.map +1 -1
  236. package/dist/db/migrate.js +7 -2
  237. package/dist/db/migrate.js.map +1 -1
  238. package/dist/db/seed.js +4 -1
  239. package/dist/db/seed.js.map +1 -1
  240. package/dist/entitlements/decision.d.ts +86 -0
  241. package/dist/entitlements/decision.d.ts.map +1 -0
  242. package/dist/entitlements/decision.js +196 -0
  243. package/dist/entitlements/decision.js.map +1 -0
  244. package/dist/entitlements/derive.d.ts +30 -0
  245. package/dist/entitlements/derive.d.ts.map +1 -0
  246. package/dist/entitlements/derive.js +42 -0
  247. package/dist/entitlements/derive.js.map +1 -0
  248. package/dist/entitlements/index.d.ts +10 -0
  249. package/dist/entitlements/index.d.ts.map +1 -0
  250. package/dist/entitlements/index.js +7 -0
  251. package/dist/entitlements/index.js.map +1 -0
  252. package/dist/entitlements/sources.d.ts +30 -0
  253. package/dist/entitlements/sources.d.ts.map +1 -0
  254. package/dist/entitlements/sources.js +55 -0
  255. package/dist/entitlements/sources.js.map +1 -0
  256. package/dist/entitlements/standing.d.ts +22 -0
  257. package/dist/entitlements/standing.d.ts.map +1 -0
  258. package/dist/entitlements/standing.js +38 -0
  259. package/dist/entitlements/standing.js.map +1 -0
  260. package/dist/entitlements/types.d.ts +26 -0
  261. package/dist/entitlements/types.d.ts.map +1 -0
  262. package/dist/entitlements/types.js +15 -0
  263. package/dist/entitlements/types.js.map +1 -0
  264. package/dist/index.d.ts +74 -3
  265. package/dist/index.d.ts.map +1 -1
  266. package/dist/index.js +51 -4
  267. package/dist/index.js.map +1 -1
  268. package/dist/mail/dedup-store.d.ts +25 -0
  269. package/dist/mail/dedup-store.d.ts.map +1 -0
  270. package/dist/mail/dedup-store.js +51 -0
  271. package/dist/mail/dedup-store.js.map +1 -0
  272. package/dist/mail/index.d.ts +10 -0
  273. package/dist/mail/index.d.ts.map +1 -0
  274. package/dist/mail/index.js +9 -0
  275. package/dist/mail/index.js.map +1 -0
  276. package/dist/mail/provider.d.ts +31 -0
  277. package/dist/mail/provider.d.ts.map +1 -0
  278. package/dist/mail/provider.js +248 -0
  279. package/dist/mail/provider.js.map +1 -0
  280. package/dist/mail/resend-client.d.ts +16 -0
  281. package/dist/mail/resend-client.d.ts.map +1 -0
  282. package/dist/mail/resend-client.js +100 -0
  283. package/dist/mail/resend-client.js.map +1 -0
  284. package/dist/mail/resend.d.ts.map +1 -1
  285. package/dist/mail/resend.js +2 -0
  286. package/dist/mail/resend.js.map +1 -1
  287. package/dist/mail/sanitize.d.ts +17 -0
  288. package/dist/mail/sanitize.d.ts.map +1 -0
  289. package/dist/mail/sanitize.js +51 -0
  290. package/dist/mail/sanitize.js.map +1 -0
  291. package/dist/mail/sender-resolver.d.ts +8 -0
  292. package/dist/mail/sender-resolver.d.ts.map +1 -0
  293. package/dist/mail/sender-resolver.js +11 -0
  294. package/dist/mail/sender-resolver.js.map +1 -0
  295. package/dist/mail/template-renderer.d.ts +10 -0
  296. package/dist/mail/template-renderer.d.ts.map +1 -0
  297. package/dist/mail/template-renderer.js +17 -0
  298. package/dist/mail/template-renderer.js.map +1 -0
  299. package/dist/mail/types.d.ts +143 -0
  300. package/dist/mail/types.d.ts.map +1 -0
  301. package/dist/mail/types.js +34 -0
  302. package/dist/mail/types.js.map +1 -0
  303. package/dist/onboarding/domain.d.ts +146 -0
  304. package/dist/onboarding/domain.d.ts.map +1 -0
  305. package/dist/onboarding/domain.js +348 -0
  306. package/dist/onboarding/domain.js.map +1 -0
  307. package/dist/onboarding/interaction-review.d.ts +123 -0
  308. package/dist/onboarding/interaction-review.d.ts.map +1 -0
  309. package/dist/onboarding/interaction-review.js +413 -0
  310. package/dist/onboarding/interaction-review.js.map +1 -0
  311. package/dist/onboarding/persistence.d.ts +106 -0
  312. package/dist/onboarding/persistence.d.ts.map +1 -0
  313. package/dist/onboarding/persistence.js +430 -0
  314. package/dist/onboarding/persistence.js.map +1 -0
  315. package/dist/onboarding/portal-actions.d.ts +48 -0
  316. package/dist/onboarding/portal-actions.d.ts.map +1 -0
  317. package/dist/onboarding/portal-actions.js +153 -0
  318. package/dist/onboarding/portal-actions.js.map +1 -0
  319. package/dist/onboarding/portal.d.ts +58 -0
  320. package/dist/onboarding/portal.d.ts.map +1 -0
  321. package/dist/onboarding/portal.js +170 -0
  322. package/dist/onboarding/portal.js.map +1 -0
  323. package/dist/pricing-engine/bundle.d.ts +22 -0
  324. package/dist/pricing-engine/bundle.d.ts.map +1 -0
  325. package/dist/pricing-engine/bundle.js +44 -0
  326. package/dist/pricing-engine/bundle.js.map +1 -0
  327. package/dist/pricing-engine/errors.d.ts +32 -0
  328. package/dist/pricing-engine/errors.d.ts.map +1 -0
  329. package/dist/pricing-engine/errors.js +44 -0
  330. package/dist/pricing-engine/errors.js.map +1 -0
  331. package/dist/pricing-engine/index.d.ts +12 -0
  332. package/dist/pricing-engine/index.d.ts.map +1 -0
  333. package/dist/pricing-engine/index.js +8 -0
  334. package/dist/pricing-engine/index.js.map +1 -0
  335. package/dist/pricing-engine/money.d.ts +32 -0
  336. package/dist/pricing-engine/money.d.ts.map +1 -0
  337. package/dist/pricing-engine/money.js +58 -0
  338. package/dist/pricing-engine/money.js.map +1 -0
  339. package/dist/pricing-engine/pipeline.d.ts +3 -0
  340. package/dist/pricing-engine/pipeline.d.ts.map +1 -0
  341. package/dist/pricing-engine/pipeline.js +327 -0
  342. package/dist/pricing-engine/pipeline.js.map +1 -0
  343. package/dist/pricing-engine/proration.d.ts +3 -0
  344. package/dist/pricing-engine/proration.d.ts.map +1 -0
  345. package/dist/pricing-engine/proration.js +50 -0
  346. package/dist/pricing-engine/proration.js.map +1 -0
  347. package/dist/pricing-engine/shadow.d.ts +51 -0
  348. package/dist/pricing-engine/shadow.d.ts.map +1 -0
  349. package/dist/pricing-engine/shadow.js +54 -0
  350. package/dist/pricing-engine/shadow.js.map +1 -0
  351. package/dist/pricing-engine/types.d.ts +184 -0
  352. package/dist/pricing-engine/types.d.ts.map +1 -0
  353. package/dist/pricing-engine/types.js +31 -0
  354. package/dist/pricing-engine/types.js.map +1 -0
  355. package/dist/rbac/authorize.d.ts +3 -6
  356. package/dist/rbac/authorize.d.ts.map +1 -1
  357. package/dist/rbac/authorize.js +4 -8
  358. package/dist/rbac/authorize.js.map +1 -1
  359. package/dist/rbac/catalog.d.ts.map +1 -1
  360. package/dist/rbac/catalog.js +414 -21
  361. package/dist/rbac/catalog.js.map +1 -1
  362. package/dist/subscription-billing/dunning.d.ts +18 -0
  363. package/dist/subscription-billing/dunning.d.ts.map +1 -0
  364. package/dist/subscription-billing/dunning.js +28 -0
  365. package/dist/subscription-billing/dunning.js.map +1 -0
  366. package/dist/subscription-billing/events.d.ts +58 -0
  367. package/dist/subscription-billing/events.d.ts.map +1 -0
  368. package/dist/subscription-billing/events.js +38 -0
  369. package/dist/subscription-billing/events.js.map +1 -0
  370. package/dist/subscription-billing/index.d.ts +18 -0
  371. package/dist/subscription-billing/index.d.ts.map +1 -0
  372. package/dist/subscription-billing/index.js +16 -0
  373. package/dist/subscription-billing/index.js.map +1 -0
  374. package/dist/subscription-billing/plans.d.ts +34 -0
  375. package/dist/subscription-billing/plans.d.ts.map +1 -0
  376. package/dist/subscription-billing/plans.js +85 -0
  377. package/dist/subscription-billing/plans.js.map +1 -0
  378. package/dist/subscription-billing/product-config.d.ts +61 -0
  379. package/dist/subscription-billing/product-config.d.ts.map +1 -0
  380. package/dist/subscription-billing/product-config.js +50 -0
  381. package/dist/subscription-billing/product-config.js.map +1 -0
  382. package/dist/subscription-billing/provider/asaas.d.ts +26 -0
  383. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -0
  384. package/dist/subscription-billing/provider/asaas.js +229 -0
  385. package/dist/subscription-billing/provider/asaas.js.map +1 -0
  386. package/dist/subscription-billing/provider/disabled.d.ts +30 -0
  387. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -0
  388. package/dist/subscription-billing/provider/disabled.js +42 -0
  389. package/dist/subscription-billing/provider/disabled.js.map +1 -0
  390. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  391. package/dist/subscription-billing/provider/registry.d.ts.map +1 -0
  392. package/dist/subscription-billing/provider/registry.js +26 -0
  393. package/dist/subscription-billing/provider/registry.js.map +1 -0
  394. package/dist/subscription-billing/reconcile.d.ts +45 -0
  395. package/dist/subscription-billing/reconcile.d.ts.map +1 -0
  396. package/dist/subscription-billing/reconcile.js +192 -0
  397. package/dist/subscription-billing/reconcile.js.map +1 -0
  398. package/dist/subscription-billing/repository.d.ts +168 -0
  399. package/dist/subscription-billing/repository.d.ts.map +1 -0
  400. package/dist/subscription-billing/repository.js +336 -0
  401. package/dist/subscription-billing/repository.js.map +1 -0
  402. package/dist/subscription-billing/service.d.ts +175 -0
  403. package/dist/subscription-billing/service.d.ts.map +1 -0
  404. package/dist/subscription-billing/service.js +818 -0
  405. package/dist/subscription-billing/service.js.map +1 -0
  406. package/dist/subscription-billing/types.d.ts +161 -0
  407. package/dist/subscription-billing/types.d.ts.map +1 -0
  408. package/dist/subscription-billing/types.js +24 -0
  409. package/dist/subscription-billing/types.js.map +1 -0
  410. package/dist/vault/crypto.d.ts +22 -0
  411. package/dist/vault/crypto.d.ts.map +1 -0
  412. package/dist/vault/crypto.js +88 -0
  413. package/dist/vault/crypto.js.map +1 -0
  414. package/dist/vault/repository.d.ts +45 -0
  415. package/dist/vault/repository.d.ts.map +1 -0
  416. package/dist/vault/repository.js +111 -0
  417. package/dist/vault/repository.js.map +1 -0
  418. package/package.json +23 -13
  419. package/src/db/migrations/0012_vault.sql +51 -0
  420. package/src/db/migrations/0013_crm.sql +67 -0
  421. package/src/db/migrations/0014_billing.sql +146 -0
  422. package/src/db/migrations/0015_merchant_billing_ar.sql +201 -0
  423. package/src/db/migrations/0016_office_onboarding.sql +162 -0
  424. package/src/db/migrations/0017_office_onboarding_api.sql +21 -0
  425. package/src/db/migrations/0018_office_onboarding_portal_actions.sql +60 -0
  426. package/src/db/migrations/0019_office_onboarding_interaction_review.sql +134 -0
  427. package/src/db/migrations/0020_saas_billing.sql +157 -0
  428. package/src/db/migrations/0021_saas_billing_indexes.sql +23 -0
  429. package/src/db/migrations/0022_saas_billing_multi_product.sql +75 -0
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runBillingCron = exports.retryFailedWebhookEvents = exports.backofficeActivateSubscription = exports.backofficeListWebhookEvents = exports.backofficeOverview = exports.backofficeListSubscriptions = exports.reactivateForTenant = exports.cancelForTenant = exports.changePlanForTenant = exports.processWebhook = exports.startCheckout = exports.entitlementsForPlan = exports.standingFor = exports.subscriptionOverview = exports.signupSelfService = exports.seedSaasPlans = exports.withOperatorContext = exports.listBillingEvents = exports.listInvoices = exports.upsertSubscription = exports.getSubscriptionByTenant = exports.getSubscription = exports.getPlan = exports.listPublicPlans = exports.ensureSaasPlanCatalog = exports.DEFAULT_TRIAL_DAYS = exports.SAAS_PLANS = exports.DisabledSubscriptionProvider = exports.AsaasSubscriptionProvider = exports.resolveSubscriptionBillingProvider = exports.dunningStepsAsEvents = exports.startTrial = exports.cancelSubscription = exports.changePlan = exports.applySubscriptionEvent = exports.InMemoryEventPublisher = exports.NoopEventPublisher = exports.MANDATORY_EVENT_TYPES = exports.isMandatoryEvent = exports.createDomainEvent = exports.SUBSCRIPTION_BILLING_CONTRACT_VERSION = exports.CANONICAL_PROVIDER_ERROR_MESSAGES = exports.isRetryableProviderError = void 0;
4
+ var types_js_1 = require("./types.js");
5
+ Object.defineProperty(exports, "isRetryableProviderError", { enumerable: true, get: function () { return types_js_1.isRetryableProviderError; } });
6
+ Object.defineProperty(exports, "CANONICAL_PROVIDER_ERROR_MESSAGES", { enumerable: true, get: function () { return types_js_1.CANONICAL_PROVIDER_ERROR_MESSAGES; } });
7
+ Object.defineProperty(exports, "SUBSCRIPTION_BILLING_CONTRACT_VERSION", { enumerable: true, get: function () { return types_js_1.SUBSCRIPTION_BILLING_CONTRACT_VERSION; } });
8
+ var events_js_1 = require("./events.js");
9
+ Object.defineProperty(exports, "createDomainEvent", { enumerable: true, get: function () { return events_js_1.createDomainEvent; } });
10
+ Object.defineProperty(exports, "isMandatoryEvent", { enumerable: true, get: function () { return events_js_1.isMandatoryEvent; } });
11
+ Object.defineProperty(exports, "MANDATORY_EVENT_TYPES", { enumerable: true, get: function () { return events_js_1.MANDATORY_EVENT_TYPES; } });
12
+ Object.defineProperty(exports, "NoopEventPublisher", { enumerable: true, get: function () { return events_js_1.NoopEventPublisher; } });
13
+ Object.defineProperty(exports, "InMemoryEventPublisher", { enumerable: true, get: function () { return events_js_1.InMemoryEventPublisher; } });
14
+ var reconcile_js_1 = require("./reconcile.js");
15
+ Object.defineProperty(exports, "applySubscriptionEvent", { enumerable: true, get: function () { return reconcile_js_1.applySubscriptionEvent; } });
16
+ Object.defineProperty(exports, "changePlan", { enumerable: true, get: function () { return reconcile_js_1.changePlan; } });
17
+ Object.defineProperty(exports, "cancelSubscription", { enumerable: true, get: function () { return reconcile_js_1.cancelSubscription; } });
18
+ Object.defineProperty(exports, "startTrial", { enumerable: true, get: function () { return reconcile_js_1.startTrial; } });
19
+ // DEFAULT_DUNNING_STEPS/DunningStep/DunningStepDue sao os MESMOS simbolos ja
20
+ // exportados por `../billing/dunning.js` no barrel do pacote (`src/index.ts`) —
21
+ // nao redeclarados aqui para nao colidir. So a funcao nova (genuina desta
22
+ // Capability) e exportada.
23
+ var dunning_js_1 = require("./dunning.js");
24
+ Object.defineProperty(exports, "dunningStepsAsEvents", { enumerable: true, get: function () { return dunning_js_1.dunningStepsAsEvents; } });
25
+ var registry_js_1 = require("./provider/registry.js");
26
+ Object.defineProperty(exports, "resolveSubscriptionBillingProvider", { enumerable: true, get: function () { return registry_js_1.resolveSubscriptionBillingProvider; } });
27
+ var asaas_js_1 = require("./provider/asaas.js");
28
+ Object.defineProperty(exports, "AsaasSubscriptionProvider", { enumerable: true, get: function () { return asaas_js_1.AsaasSubscriptionProvider; } });
29
+ var disabled_js_1 = require("./provider/disabled.js");
30
+ Object.defineProperty(exports, "DisabledSubscriptionProvider", { enumerable: true, get: function () { return disabled_js_1.DisabledSubscriptionProvider; } });
31
+ // ── BILL-01 (Fase 17): persistência + serviço do Billing SaaS ────────────────
32
+ var plans_js_1 = require("./plans.js");
33
+ Object.defineProperty(exports, "SAAS_PLANS", { enumerable: true, get: function () { return plans_js_1.SAAS_PLANS; } });
34
+ Object.defineProperty(exports, "DEFAULT_TRIAL_DAYS", { enumerable: true, get: function () { return plans_js_1.DEFAULT_TRIAL_DAYS; } });
35
+ var repository_js_1 = require("./repository.js");
36
+ Object.defineProperty(exports, "ensureSaasPlanCatalog", { enumerable: true, get: function () { return repository_js_1.ensureSaasPlanCatalog; } });
37
+ Object.defineProperty(exports, "listPublicPlans", { enumerable: true, get: function () { return repository_js_1.listPublicPlans; } });
38
+ Object.defineProperty(exports, "getPlan", { enumerable: true, get: function () { return repository_js_1.getPlan; } });
39
+ Object.defineProperty(exports, "getSubscription", { enumerable: true, get: function () { return repository_js_1.getSubscription; } });
40
+ Object.defineProperty(exports, "getSubscriptionByTenant", { enumerable: true, get: function () { return repository_js_1.getSubscriptionByTenant; } });
41
+ Object.defineProperty(exports, "upsertSubscription", { enumerable: true, get: function () { return repository_js_1.upsertSubscription; } });
42
+ Object.defineProperty(exports, "listInvoices", { enumerable: true, get: function () { return repository_js_1.listInvoices; } });
43
+ Object.defineProperty(exports, "listBillingEvents", { enumerable: true, get: function () { return repository_js_1.listBillingEvents; } });
44
+ Object.defineProperty(exports, "withOperatorContext", { enumerable: true, get: function () { return repository_js_1.withOperatorContext; } });
45
+ var service_js_1 = require("./service.js");
46
+ Object.defineProperty(exports, "seedSaasPlans", { enumerable: true, get: function () { return service_js_1.seedSaasPlans; } });
47
+ Object.defineProperty(exports, "signupSelfService", { enumerable: true, get: function () { return service_js_1.signupSelfService; } });
48
+ Object.defineProperty(exports, "subscriptionOverview", { enumerable: true, get: function () { return service_js_1.subscriptionOverview; } });
49
+ Object.defineProperty(exports, "standingFor", { enumerable: true, get: function () { return service_js_1.standingFor; } });
50
+ Object.defineProperty(exports, "entitlementsForPlan", { enumerable: true, get: function () { return service_js_1.entitlementsForPlan; } });
51
+ Object.defineProperty(exports, "startCheckout", { enumerable: true, get: function () { return service_js_1.startCheckout; } });
52
+ Object.defineProperty(exports, "processWebhook", { enumerable: true, get: function () { return service_js_1.processWebhook; } });
53
+ Object.defineProperty(exports, "changePlanForTenant", { enumerable: true, get: function () { return service_js_1.changePlanForTenant; } });
54
+ Object.defineProperty(exports, "cancelForTenant", { enumerable: true, get: function () { return service_js_1.cancelForTenant; } });
55
+ Object.defineProperty(exports, "reactivateForTenant", { enumerable: true, get: function () { return service_js_1.reactivateForTenant; } });
56
+ Object.defineProperty(exports, "backofficeListSubscriptions", { enumerable: true, get: function () { return service_js_1.backofficeListSubscriptions; } });
57
+ Object.defineProperty(exports, "backofficeOverview", { enumerable: true, get: function () { return service_js_1.backofficeOverview; } });
58
+ Object.defineProperty(exports, "backofficeListWebhookEvents", { enumerable: true, get: function () { return service_js_1.backofficeListWebhookEvents; } });
59
+ Object.defineProperty(exports, "backofficeActivateSubscription", { enumerable: true, get: function () { return service_js_1.backofficeActivateSubscription; } });
60
+ Object.defineProperty(exports, "retryFailedWebhookEvents", { enumerable: true, get: function () { return service_js_1.retryFailedWebhookEvents; } });
61
+ Object.defineProperty(exports, "runBillingCron", { enumerable: true, get: function () { return service_js_1.runBillingCron; } });
62
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subscription-billing/index.ts"],"names":[],"mappings":";;;AAuBA,uCAAgI;AAAvH,oHAAA,wBAAwB,OAAA;AAAE,6HAAA,iCAAiC,OAAA;AAAE,iIAAA,qCAAqC,OAAA;AAG3G,yCAAqI;AAA5H,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAG/G,+CAAoG;AAA3F,sHAAA,sBAAsB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAE3E,6EAA6E;AAC7E,gFAAgF;AAChF,0EAA0E;AAC1E,2BAA2B;AAC3B,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA;AAE7B,sDAA4E;AAAnE,iIAAA,kCAAkC,OAAA;AAE3C,gDAAgE;AAAvD,qHAAA,yBAAyB,OAAA;AAClC,sDAAsE;AAA7D,2HAAA,4BAA4B,OAAA;AAErC,gFAAgF;AAChF,uCAA4D;AAAnD,sGAAA,UAAU,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAEvC,iDAUyB;AATvB,sHAAA,qBAAqB,OAAA;AACrB,gHAAA,eAAe,OAAA;AACf,wGAAA,OAAO,OAAA;AACP,gHAAA,eAAe,OAAA;AACf,wHAAA,uBAAuB,OAAA;AACvB,mHAAA,kBAAkB,OAAA;AAClB,6GAAA,YAAY,OAAA;AACZ,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAGrB,2CAiBsB;AAhBpB,2GAAA,aAAa,OAAA;AACb,+GAAA,iBAAiB,OAAA;AACjB,kHAAA,oBAAoB,OAAA;AACpB,yGAAA,WAAW,OAAA;AACX,iHAAA,mBAAmB,OAAA;AACnB,2GAAA,aAAa,OAAA;AACb,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AACnB,6GAAA,eAAe,OAAA;AACf,iHAAA,mBAAmB,OAAA;AACnB,yHAAA,2BAA2B,OAAA;AAC3B,gHAAA,kBAAkB,OAAA;AAClB,yHAAA,2BAA2B,OAAA;AAC3B,4HAAA,8BAA8B,OAAA;AAC9B,sHAAA,wBAAwB,OAAA;AACxB,4GAAA,cAAc,OAAA"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ /**
3
+ * Catálogo padrão de planos do SaaS (Concern A). Fonte declarativa — o seed
4
+ * materializa em `saas_plan` de forma idempotente (mesmo padrão de
5
+ * `products/catalog.ts` e do RBAC). Preço em CENTAVOS de BRL (v0.1 flat).
6
+ *
7
+ * `modules` alimenta os Entitlements finos (EntitlementSource 'PLAN');
8
+ * `limits` são as franquias por plano (commercial-catalog: PlanFranchises).
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.SAAS_PLANS = exports.DEFAULT_TRIAL_DAYS = exports.DEFAULT_PRODUCT_KEY = void 0;
12
+ /**
13
+ * Produto dono do plano (`product.key` — ver `products/catalog.ts`). O motor de
14
+ * Billing é infraestrutura compartilhada do ecossistema; o catálogo comercial
15
+ * não é. Planos do Baruk Office, do Rep, do Ind e do futuro Varejo coexistem na
16
+ * mesma tabela, separados por esta chave, e `key` só precisa ser único dentro
17
+ * do produto.
18
+ */
19
+ exports.DEFAULT_PRODUCT_KEY = 'contabil';
20
+ exports.DEFAULT_TRIAL_DAYS = 14;
21
+ exports.SAAS_PLANS = [
22
+ {
23
+ key: 'starter',
24
+ name: 'Starter',
25
+ description: 'Para escritórios começando a digitalizar a operação.',
26
+ amountCents: 9700,
27
+ periodicity: 'monthly',
28
+ trialDays: exports.DEFAULT_TRIAL_DAYS,
29
+ modules: ['clients', 'requests', 'portal'],
30
+ limits: { users: 3, clients: 50, storageGb: 5 },
31
+ isPublic: true,
32
+ isActive: true,
33
+ sortOrder: 1,
34
+ },
35
+ {
36
+ key: 'pro',
37
+ name: 'Pro',
38
+ description: 'Operação completa: portal do cliente, financeiro e auditoria.',
39
+ amountCents: 24700,
40
+ periodicity: 'monthly',
41
+ trialDays: exports.DEFAULT_TRIAL_DAYS,
42
+ modules: ['clients', 'requests', 'portal', 'billing', 'audit', 'notifications'],
43
+ limits: { users: 10, clients: 300, storageGb: 25 },
44
+ isPublic: true,
45
+ isActive: true,
46
+ sortOrder: 2,
47
+ },
48
+ {
49
+ key: 'enterprise',
50
+ name: 'Enterprise',
51
+ description: 'Times grandes, múltiplas unidades e necessidades sob medida.',
52
+ amountCents: 59700,
53
+ periodicity: 'monthly',
54
+ trialDays: exports.DEFAULT_TRIAL_DAYS,
55
+ modules: [
56
+ 'clients',
57
+ 'requests',
58
+ 'portal',
59
+ 'billing',
60
+ 'audit',
61
+ 'notifications',
62
+ 'crm',
63
+ 'compliance',
64
+ ],
65
+ limits: { users: 50, clients: 2000, storageGb: 100 },
66
+ isPublic: true,
67
+ isActive: true,
68
+ sortOrder: 3,
69
+ },
70
+ // Plano anual do Pro — mesma franquia, 2 meses de desconto (12x → 10x).
71
+ // NÃO CONTRATÁVEL na v0.1: o checkout certificado cria link RECURRENT MENSAL
72
+ // (asaas.ts, subscriptionCycle fixo) — vender anual cobraria 12x o valor.
73
+ // Reativar quando o contrato de checkout suportar ciclo (v0.2).
74
+ {
75
+ key: 'pro-anual',
76
+ name: 'Pro Anual',
77
+ description: 'Plano Pro com cobrança anual — economize 2 mensalidades.',
78
+ amountCents: 247000,
79
+ periodicity: 'yearly',
80
+ trialDays: exports.DEFAULT_TRIAL_DAYS,
81
+ modules: ['clients', 'requests', 'portal', 'billing', 'audit', 'notifications'],
82
+ limits: { users: 10, clients: 300, storageGb: 25 },
83
+ isPublic: false,
84
+ isActive: false,
85
+ sortOrder: 4,
86
+ },
87
+ ];
88
+ //# sourceMappingURL=plans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/subscription-billing/plans.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,UAAU,CAAC;AAkBjC,QAAA,kBAAkB,GAAG,EAAE,CAAC;AAExB,QAAA,UAAU,GAA2B;IAChD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QAC1C,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;QAC/C,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD;QACE,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC;QAC/E,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QAClD,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD;QACE,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE;YACP,SAAS;YACT,UAAU;YACV,QAAQ;YACR,SAAS;YACT,OAAO;YACP,eAAe;YACf,KAAK;YACL,YAAY;SACb;QACD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD,wEAAwE;IACxE,6EAA6E;IAC7E,0EAA0E;IAC1E,gEAAgE;IAChE;QACE,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC;QAC/E,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QAClD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,CAAC;KACb;CACF,CAAC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createProductBillingRegistry = createProductBillingRegistry;
4
+ exports.singleProductRegistry = singleProductRegistry;
5
+ const shared_1 = require("@baruk/shared");
6
+ const plans_js_1 = require("./plans.js");
7
+ /**
8
+ * Registry imutável a partir de uma lista de configurações por produto.
9
+ *
10
+ * Sem `fallbackProductKey`, pedir um produto não configurado é erro. Com ele, o
11
+ * produto indicado responde pelos demais — usado só na transição, enquanto os
12
+ * ambientes ainda têm uma conta só.
13
+ */
14
+ function createProductBillingRegistry(configs, options = {}) {
15
+ const byKey = new Map();
16
+ for (const cfg of configs) {
17
+ if (!cfg.productKey)
18
+ throw new shared_1.ValidationError('ProductBillingConfig sem productKey');
19
+ if (byKey.has(cfg.productKey)) {
20
+ throw new shared_1.ValidationError(`Configuração de billing duplicada para o produto ${cfg.productKey}`);
21
+ }
22
+ byKey.set(cfg.productKey, cfg);
23
+ }
24
+ const fallback = options.fallbackProductKey;
25
+ if (fallback && !byKey.has(fallback)) {
26
+ throw new shared_1.ValidationError(`fallbackProductKey '${fallback}' não está configurado`);
27
+ }
28
+ return {
29
+ resolve({ productKey }) {
30
+ const direct = byKey.get(productKey);
31
+ if (direct)
32
+ return direct;
33
+ if (fallback) {
34
+ const shared = byKey.get(fallback);
35
+ // A config emprestada responde pelo produto pedido, mas se declara como
36
+ // tal — quem audita um checkout vê o produto real, não o fallback.
37
+ return { ...shared, productKey };
38
+ }
39
+ throw new shared_1.ValidationError(`Produto sem configuração de billing: ${productKey}`);
40
+ },
41
+ has: (productKey) => byKey.has(productKey),
42
+ productKeys: () => [...byKey.keys()],
43
+ };
44
+ }
45
+ /**
46
+ * Registry de um produto só — atalho para ambientes de um produto e para os
47
+ * testes que já existiam antes do multi-produto.
48
+ */
49
+ function singleProductRegistry(config, productKey = plans_js_1.DEFAULT_PRODUCT_KEY) {
50
+ return createProductBillingRegistry([{ ...config, productKey }], {
51
+ fallbackProductKey: productKey,
52
+ });
53
+ }
54
+ //# sourceMappingURL=product-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-config.js","sourceRoot":"","sources":["../../../src/subscription-billing/product-config.ts"],"names":[],"mappings":";;AA0DA,oEAmCC;AAMD,sDAOC;AA1GD,0CAAgD;AAEhD,yCAAiD;AAiDjD;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,OAAwC,EACxC,UAA2C,EAAE;IAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,MAAM,IAAI,wBAAe,CAAC,qCAAqC,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,wBAAe,CACvB,oDAAoD,GAAG,CAAC,UAAU,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,wBAAe,CAAC,uBAAuB,QAAQ,wBAAwB,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,OAAO,CAAC,EAAE,UAAU,EAAsB;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;gBACpC,wEAAwE;gBACxE,mEAAmE;gBACnE,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,IAAI,wBAAe,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAClD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,MAAyB,EACzB,aAAqB,8BAAmB;IAExC,OAAO,4BAA4B,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;QAC/D,kBAAkB,EAAE,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AsaasSubscriptionProvider = void 0;
4
+ const node_crypto_1 = require("node:crypto");
5
+ const shared_1 = require("@baruk/shared");
6
+ const sanitize_js_1 = require("../../mail/sanitize.js");
7
+ /**
8
+ * Adapter ASAAS — Golden Provider (RFC §7). A Capability NUNCA importa este
9
+ * arquivo fora de `registry.ts` — trocar de gateway e trocar a string
10
+ * registrada, sem tocar em regra de dominio (ADR-ECO-0019, ja validado em
11
+ * `cap.communication.transactional-email` e no `dental-platform-engine`
12
+ * real, RFC §3). `apiKey` nunca hardcoded (vem de `SubscriptionProviderConfig`, Vault na
13
+ * borda do consumidor); `fetchImpl` injetavel para teste sem rede.
14
+ */
15
+ const SANDBOX_BASE = 'https://api-sandbox.asaas.com/v3';
16
+ const LIVE_BASE = 'https://api.asaas.com/v3';
17
+ const TIMEOUT_MS = 12_000;
18
+ class AsaasProviderError extends shared_1.AppError {
19
+ constructor(message, status = 502) {
20
+ super(`Provider de pagamento: ${message}`, { status, code: 'billing_provider_error' });
21
+ }
22
+ }
23
+ function safeEqual(a, b) {
24
+ const ba = Buffer.from(a);
25
+ const bb = Buffer.from(b);
26
+ if (ba.length !== bb.length)
27
+ return false;
28
+ return (0, node_crypto_1.timingSafeEqual)(ba, bb);
29
+ }
30
+ /**
31
+ * Mapeia o vocabulario do ASAAS para o enum NORMALIZADO PELO DOMINIO (RFC §6) — nunca
32
+ * o contrario. Alinhado ao mapeamento real e ja validado em producao do Golden Project
33
+ * (`dental-platform-engine/gateway/asaas-map.ts`, RFC §10) — cobre `REFUND_REQUESTED`/
34
+ * `CHARGEBACK_*`/`CANCELED` explicito e e case-insensitive (ASAAS nao garante caixa
35
+ * consistente entre ambientes).
36
+ */
37
+ function normalizeAsaasStatus(status) {
38
+ switch ((status ?? '').toUpperCase()) {
39
+ case 'PENDING':
40
+ case 'AWAITING_RISK_ANALYSIS':
41
+ return 'pending';
42
+ case 'CONFIRMED':
43
+ return 'confirmed';
44
+ case 'RECEIVED':
45
+ case 'RECEIVED_IN_CASH':
46
+ return 'received';
47
+ case 'OVERDUE':
48
+ return 'overdue';
49
+ case 'REFUNDED':
50
+ case 'REFUND_REQUESTED':
51
+ case 'CHARGEBACK_REQUESTED':
52
+ case 'CHARGEBACK_DISPUTE':
53
+ return 'refunded';
54
+ case 'DELETED':
55
+ case 'CANCELED':
56
+ return 'canceled';
57
+ default:
58
+ return 'failed';
59
+ }
60
+ }
61
+ /** Mesma origem do mapeamento acima — status de ASSINATURA (evento `kind: 'subscription'`). */
62
+ function normalizeAsaasSubscriptionStatus(status) {
63
+ switch ((status ?? '').toUpperCase()) {
64
+ case 'ACTIVE':
65
+ return 'active';
66
+ case 'EXPIRED':
67
+ case 'OVERDUE':
68
+ return 'past_due';
69
+ case 'INACTIVE':
70
+ case 'CANCELED':
71
+ return 'canceled';
72
+ default:
73
+ return 'active';
74
+ }
75
+ }
76
+ function normalizeAsaasPayment(p) {
77
+ return {
78
+ externalId: String(p['id']),
79
+ status: normalizeAsaasStatus(p['status']),
80
+ value: Number(p['value'] ?? 0),
81
+ billingType: p['billingType'] ?? null,
82
+ dueDate: p['dueDate'] ?? null,
83
+ paidAt: p['paymentDate'] ?? null,
84
+ externalSubscriptionId: p['subscription'] ?? null,
85
+ invoiceUrl: p['invoiceUrl'] ?? null,
86
+ bankSlipUrl: p['bankSlipUrl'] ?? null,
87
+ pixPayload: p['pixCopyAndPaste'] ?? null,
88
+ description: p['description'] ?? null,
89
+ };
90
+ }
91
+ class AsaasSubscriptionProvider {
92
+ name = 'asaas';
93
+ mode;
94
+ apiKey;
95
+ webhookSecret;
96
+ baseUrl;
97
+ fetchImpl;
98
+ constructor(config) {
99
+ if (!config.apiKey)
100
+ throw new AsaasProviderError('apiKey ausente (configure no Vault).', 500);
101
+ this.apiKey = config.apiKey;
102
+ this.webhookSecret = config.webhookSecret;
103
+ this.mode = config.mode ?? 'sandbox';
104
+ this.baseUrl = config.baseUrl ?? (this.mode === 'live' ? LIVE_BASE : SANDBOX_BASE);
105
+ this.fetchImpl = config.fetchImpl ?? fetch;
106
+ }
107
+ async call(method, path, body) {
108
+ const controller = new AbortController();
109
+ const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
110
+ try {
111
+ const res = await this.fetchImpl(`${this.baseUrl}${path}`, {
112
+ method,
113
+ headers: { 'content-type': 'application/json', access_token: this.apiKey },
114
+ body: body ? JSON.stringify(body) : undefined,
115
+ signal: controller.signal,
116
+ });
117
+ const text = await res.text();
118
+ const json = text ? JSON.parse(text) : {};
119
+ if (!res.ok) {
120
+ // Nunca propaga o corpo bruto do provider (pode conter a propria apiKey ecoada) —
121
+ // mesma invariante ja endurecida em 2 rounds de Certification (mail/, RFC §9).
122
+ const errors = json['errors'];
123
+ const detail = errors?.[0]?.description ?? `HTTP ${res.status}`;
124
+ (0, sanitize_js_1.logSanitized)(`[subscription-billing] asaas ${method} ${path} falhou:`, detail, [this.apiKey, this.webhookSecret]);
125
+ throw new AsaasProviderError('falha ao contatar o provider de pagamento.');
126
+ }
127
+ return json;
128
+ }
129
+ catch (err) {
130
+ if (err instanceof AsaasProviderError)
131
+ throw err;
132
+ if (err instanceof Error && err.name === 'AbortError') {
133
+ throw new AsaasProviderError(`timeout apos ${TIMEOUT_MS}ms`, 504);
134
+ }
135
+ (0, sanitize_js_1.logSanitized)(`[subscription-billing] asaas ${method} ${path} erro de rede:`, err instanceof Error ? err.message : String(err), [
136
+ this.apiKey,
137
+ this.webhookSecret,
138
+ ]);
139
+ throw new AsaasProviderError('falha de rede ao contatar o provider de pagamento.');
140
+ }
141
+ finally {
142
+ clearTimeout(timer);
143
+ }
144
+ }
145
+ async ensureCustomer(input) {
146
+ const created = await this.call('POST', '/customers', {
147
+ name: input.name,
148
+ email: input.email ?? undefined,
149
+ cpfCnpj: input.taxId ?? undefined,
150
+ externalReference: input.tenantId,
151
+ });
152
+ return { externalId: created.id };
153
+ }
154
+ async createCheckout(input) {
155
+ // Payment link hospedado, recorrente — cobre o caso de subscription (RFC §7).
156
+ // Cobranca direta PIX/boleto sem redirect e do Concern B, fora de escopo (RFC §7).
157
+ const link = await this.call('POST', '/paymentLinks', {
158
+ name: input.description,
159
+ billingType: 'UNDEFINED',
160
+ chargeType: 'RECURRENT',
161
+ subscriptionCycle: 'MONTHLY',
162
+ value: input.amountBRL,
163
+ dueDateLimitDays: 7,
164
+ externalReference: `${input.tenantId}:${input.planKey}`,
165
+ callback: { successUrl: input.returnUrl, autoRedirect: true },
166
+ });
167
+ return { externalId: link.id, url: link.url };
168
+ }
169
+ async getPayment(externalId) {
170
+ const p = await this.call('GET', `/payments/${encodeURIComponent(externalId)}`);
171
+ return normalizeAsaasPayment(p);
172
+ }
173
+ /** Autenticidade — SEMPRE antes de `parseWebhookEvent` (RFC §7, passo separado). */
174
+ verifyWebhook(headers, _rawBody) {
175
+ void _rawBody;
176
+ if (!this.webhookSecret)
177
+ return false; // sem token configurado → nunca confia no evento
178
+ const received = headers['asaas-access-token'] ?? headers['Asaas-Access-Token'] ?? '';
179
+ return typeof received === 'string' && received.length > 0 && safeEqual(received, this.webhookSecret);
180
+ }
181
+ /**
182
+ * Reescrito a partir do mapeamento real e ja validado em producao do Golden Project
183
+ * (`dental-platform-engine/gateway/asaas-map.ts`, RFC §10) — a versao anterior
184
+ * zerava `paymentLinkId`/`externalReference`/`externalCustomerId` (nunca extraia do
185
+ * payload real), o que quebraria a atribuicao de tenant (`resolveContext`) de
186
+ * qualquer consumidor que dependesse desses campos. Tambem nao tratava eventos
187
+ * `kind: 'subscription'`, so `kind: 'invoice'`.
188
+ */
189
+ parseWebhookEvent(payload) {
190
+ const p = payload;
191
+ if (!p || typeof p !== 'object' || !p.event)
192
+ return null;
193
+ const eventType = p.event;
194
+ const paymentId = p.payment?.['id'];
195
+ if (typeof paymentId === 'string') {
196
+ // ASAAS envia o objeto `payment` completo no webhook (mesmo shape de GET /payments/{id}) —
197
+ // reusa o mesmo mapeador do gateway, sem duplicar a normalizacao (RFC §6).
198
+ const invoice = normalizeAsaasPayment(p.payment);
199
+ const externalEventId = p.id ?? `${eventType}:${paymentId}:${p.dateCreated ?? ''}`;
200
+ return {
201
+ externalEventId,
202
+ eventType,
203
+ kind: 'invoice',
204
+ invoice,
205
+ externalCustomerId: p.payment['customer'] ?? null,
206
+ externalReference: p.payment['externalReference'] ?? null,
207
+ paymentLinkId: p.payment['paymentLink'] ?? null,
208
+ };
209
+ }
210
+ if (p.subscription?.id) {
211
+ const externalEventId = p.id ?? `${eventType}:${p.subscription.id}:${p.dateCreated ?? ''}`;
212
+ return {
213
+ externalEventId,
214
+ eventType,
215
+ kind: 'subscription',
216
+ subscription: {
217
+ externalId: p.subscription.id,
218
+ status: normalizeAsaasSubscriptionStatus(p.subscription.status),
219
+ },
220
+ externalCustomerId: p.subscription.customer ?? null,
221
+ externalReference: p.subscription.externalReference ?? null,
222
+ };
223
+ }
224
+ // Evento reconhecido mas sem recurso acionavel → 'unknown' (ainda assim deduplicavel/logavel).
225
+ return {
226
+ externalEventId: p.id ?? `${eventType}:${p.dateCreated ?? ''}`,
227
+ eventType,
228
+ kind: 'unknown',
229
+ };
230
+ }
231
+ }
232
+ exports.AsaasSubscriptionProvider = AsaasSubscriptionProvider;
233
+ //# sourceMappingURL=asaas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/asaas.ts"],"names":[],"mappings":";;;AAAA,6CAA8C;AAC9C,0CAAyC;AACzC,wDAAsD;AAgBtD;;;;;;;GAOG;AAEH,MAAM,YAAY,GAAG,kCAAkC,CAAC;AACxD,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAC7C,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,kBAAmB,SAAQ,iBAAQ;IACvC,YAAY,OAAe,EAAE,MAAM,GAAG,GAAG;QACvC,KAAK,CAAC,0BAA0B,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;IACzF,CAAC;CACF;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,IAAA,6BAAe,EAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,MAA0B;IACtD,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,SAAS,CAAC;QACf,KAAK,wBAAwB;YAC3B,OAAO,SAAS,CAAC;QACnB,KAAK,WAAW;YACd,OAAO,WAAW,CAAC;QACrB,KAAK,UAAU,CAAC;QAChB,KAAK,kBAAkB;YACrB,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU,CAAC;QAChB,KAAK,kBAAkB,CAAC;QACxB,KAAK,sBAAsB,CAAC;QAC5B,KAAK,oBAAoB;YACvB,OAAO,UAAU,CAAC;QACpB,KAAK,SAAS,CAAC;QACf,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,SAAS,gCAAgC,CAAC,MAA0B;IAClE,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrC,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC;QACpB,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,CAA0B;IACvD,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAuB,CAAC;QAC/D,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,WAAW,EAAG,CAAC,CAAC,aAAa,CAAwB,IAAI,IAAI;QAC7D,OAAO,EAAG,CAAC,CAAC,SAAS,CAAwB,IAAI,IAAI;QACrD,MAAM,EAAG,CAAC,CAAC,aAAa,CAAwB,IAAI,IAAI;QACxD,sBAAsB,EAAG,CAAC,CAAC,cAAc,CAAwB,IAAI,IAAI;QACzE,UAAU,EAAG,CAAC,CAAC,YAAY,CAAwB,IAAI,IAAI;QAC3D,WAAW,EAAG,CAAC,CAAC,aAAa,CAAwB,IAAI,IAAI;QAC7D,UAAU,EAAG,CAAC,CAAC,iBAAiB,CAAwB,IAAI,IAAI;QAChE,WAAW,EAAG,CAAC,CAAC,aAAa,CAAwB,IAAI,IAAI;KAC9D,CAAC;AACJ,CAAC;AAED,MAAa,yBAAyB;IAC3B,IAAI,GAAG,OAAO,CAAC;IACf,IAAI,CAAc;IACV,MAAM,CAAS;IACf,aAAa,CAAU;IACvB,OAAO,CAAS;IAChB,SAAS,CAAe;IAEzC,YAAY,MAAkC;QAC5C,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,kBAAkB,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACnF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,IAAI,CAAI,MAAsB,EAAE,IAAY,EAAE,IAAc;QACxE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBACzD,MAAM;gBACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;gBAC1E,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC7C,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,GAA4B,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,kFAAkF;gBAClF,+EAA+E;gBAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAgD,CAAC;gBAC7E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBAChE,IAAA,0BAAY,EAAC,gCAAgC,MAAM,IAAI,IAAI,UAAU,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;gBAClH,MAAM,IAAI,kBAAkB,CAAC,4CAA4C,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,IAAS,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB;gBAAE,MAAM,GAAG,CAAC;YACjD,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtD,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,UAAU,IAAI,EAAE,GAAG,CAAC,CAAC;YACpE,CAAC;YACD,IAAA,0BAAY,EAAC,gCAAgC,MAAM,IAAI,IAAI,gBAAgB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAC7H,IAAI,CAAC,MAAM;gBACX,IAAI,CAAC,aAAa;aACnB,CAAC,CAAC;YACH,MAAM,IAAI,kBAAkB,CAAC,oDAAoD,CAAC,CAAC;QACrF,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAiB,MAAM,EAAE,YAAY,EAAE;YACpE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;YAC/B,OAAO,EAAE,KAAK,CAAC,KAAK,IAAI,SAAS;YACjC,iBAAiB,EAAE,KAAK,CAAC,QAAQ;SAClC,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAA0B;QAC7C,8EAA8E;QAC9E,mFAAmF;QACnF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAA8B,MAAM,EAAE,eAAe,EAAE;YACjF,IAAI,EAAE,KAAK,CAAC,WAAW;YACvB,WAAW,EAAE,WAAW;YACxB,UAAU,EAAE,WAAW;YACvB,iBAAiB,EAAE,SAAS;YAC5B,KAAK,EAAE,KAAK,CAAC,SAAS;YACtB,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;YACvD,QAAQ,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE;SAC9D,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAAkB;QACjC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAA0B,KAAK,EAAE,aAAa,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzG,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,oFAAoF;IACpF,aAAa,CAAC,OAAuB,EAAE,QAAgB;QACrD,KAAK,QAAQ,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC,CAAC,iDAAiD;QACxF,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;QACtF,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxG,CAAC;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,OAAgB;QAChC,MAAM,CAAC,GAAG,OAMT,CAAC;QACF,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAEzD,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,2FAA2F;YAC3F,2EAA2E;YAC3E,MAAM,OAAO,GAAG,qBAAqB,CAAC,CAAC,CAAC,OAAQ,CAAC,CAAC;YAClD,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,SAAS,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YACnF,OAAO;gBACL,eAAe;gBACf,SAAS;gBACT,IAAI,EAAE,SAAS;gBACf,OAAO;gBACP,kBAAkB,EAAG,CAAC,CAAC,OAAQ,CAAC,UAAU,CAAwB,IAAI,IAAI;gBAC1E,iBAAiB,EAAG,CAAC,CAAC,OAAQ,CAAC,mBAAmB,CAAwB,IAAI,IAAI;gBAClF,aAAa,EAAG,CAAC,CAAC,OAAQ,CAAC,aAAa,CAAwB,IAAI,IAAI;aACzE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;YACvB,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC;YAC3F,OAAO;gBACL,eAAe;gBACf,SAAS;gBACT,IAAI,EAAE,cAAc;gBACpB,YAAY,EAAE;oBACZ,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE;oBAC7B,MAAM,EAAE,gCAAgC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC;iBAChE;gBACD,kBAAkB,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,IAAI,IAAI;gBACnD,iBAAiB,EAAE,CAAC,CAAC,YAAY,CAAC,iBAAiB,IAAI,IAAI;aAC5D,CAAC;QACJ,CAAC;QAED,+FAA+F;QAC/F,OAAO;YACL,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;YAC9D,SAAS;YACT,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;CACF;AAvJD,8DAuJC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DisabledSubscriptionProvider = void 0;
4
+ /**
5
+ * Provider `disabled` — estado de primeira classe (RFC §7): sem apiKey
6
+ * configurada, o registry resolve para este stub. NUNCA toca a rede, nunca
7
+ * cobra. Preserva o comportamento de dry-run que o `dental-platform-engine`
8
+ * ja usa em producao hoje (RFC §3).
9
+ *
10
+ * `name` e injetavel (default `'disabled'`) para preservar qual provider FOI
11
+ * PEDIDO mesmo sem chave configurada (ex.: `resolveSubscriptionBillingProvider('asaas', {})`
12
+ * → `name: 'asaas'`) — o Golden Project (`dental`) grava `provider.name` em registros
13
+ * de DB (`CheckoutSession`, `BillingCustomer` etc.) e precisa do nome pedido, nao do
14
+ * literal `'disabled'`, para manter consistencia quando a chave for configurada depois.
15
+ */
16
+ class DisabledSubscriptionProvider {
17
+ name;
18
+ mode = 'disabled';
19
+ constructor(name = 'disabled') {
20
+ this.name = name;
21
+ }
22
+ /**
23
+ * Lanca erro deliberadamente (nao devolve stub) — contrato ja validado e testado no
24
+ * Golden Project (`dental-platform-engine`, RFC §10): `ensureCustomer` so e chamado
25
+ * apos o chamador checar `mode !== 'disabled'`; chegar aqui e um bug de chamada, e
26
+ * falhar alto e melhor do que persistir um `externalId` fake que parece real.
27
+ */
28
+ async ensureCustomer(_input) {
29
+ void _input;
30
+ throw new Error('Gateway de pagamento nao configurado (modo desabilitado).');
31
+ }
32
+ async createCheckout(_input) {
33
+ return { externalId: null, url: null };
34
+ }
35
+ async getPayment(_externalId) {
36
+ return null;
37
+ }
38
+ verifyWebhook(_headers, _rawBody) {
39
+ return false; // nenhum webhook e confiavel quando desabilitado — nao ha token para validar
40
+ }
41
+ parseWebhookEvent(_payload) {
42
+ return null;
43
+ }
44
+ }
45
+ exports.DisabledSubscriptionProvider = DisabledSubscriptionProvider;
46
+ //# sourceMappingURL=disabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disabled.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/disabled.ts"],"names":[],"mappings":";;;AAWA;;;;;;;;;;;GAWG;AACH,MAAa,4BAA4B;IAC9B,IAAI,CAAS;IACb,IAAI,GAAG,UAAmB,CAAC;IAEpC,YAAY,IAAI,GAAG,UAAU;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,KAAK,MAAM,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,QAAwB,EAAE,QAAgB;QACtD,OAAO,KAAK,CAAC,CAAC,6EAA6E;IAC7F,CAAC;IAED,iBAAiB,CAAC,QAAiB;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAlCD,oEAkCC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveSubscriptionBillingProvider = resolveSubscriptionBillingProvider;
4
+ const shared_1 = require("@baruk/shared");
5
+ const asaas_js_1 = require("./asaas.js");
6
+ const disabled_js_1 = require("./disabled.js");
7
+ const FACTORIES = {
8
+ asaas: (config) => new asaas_js_1.AsaasSubscriptionProvider(config),
9
+ disabled: () => new disabled_js_1.DisabledSubscriptionProvider(),
10
+ };
11
+ /**
12
+ * Resolve o Provider por nome (RFC §7) — nenhum outro modulo importa
13
+ * `provider/asaas.ts` diretamente. Sem `apiKey` configurada, resolve para
14
+ * `disabled` automaticamente, independente do nome pedido — nunca cobra por
15
+ * falta de configuracao (mesmo padrao best-effort de `cap.communication.transactional-email`).
16
+ */
17
+ function resolveSubscriptionBillingProvider(name, config) {
18
+ if (!config.apiKey || config.mode === 'disabled') {
19
+ // Preserva o nome pedido mesmo desabilitado (ver `disabled.ts`) — consumidores que
20
+ // gravam `provider.name` em DB precisam do nome configurado, nao do literal `'disabled'`.
21
+ return new disabled_js_1.DisabledSubscriptionProvider(name);
22
+ }
23
+ const factory = FACTORIES[name];
24
+ if (!factory) {
25
+ throw new shared_1.ValidationError(`Provider de pagamento desconhecido: "${name}".`);
26
+ }
27
+ return factory(config);
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/registry.ts"],"names":[],"mappings":";;AAkBA,gFAWC;AA7BD,0CAAgD;AAEhD,yCAAuD;AACvD,+CAA6D;AAI7D,MAAM,SAAS,GAAgD;IAC7D,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,oCAAyB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,0CAA4B,EAAE;CACnD,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,kCAAkC,CAAC,IAAY,EAAE,MAAkC;IACjG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjD,mFAAmF;QACnF,0FAA0F;QAC1F,OAAO,IAAI,0CAA4B,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,wBAAe,CAAC,wCAAwC,IAAI,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}