@baruk/core 0.3.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (708) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +97 -0
  3. package/README.md +9 -2
  4. package/dist/auth/password-reset.d.ts +30 -1
  5. package/dist/auth/password-reset.d.ts.map +1 -1
  6. package/dist/auth/password-reset.js +139 -11
  7. package/dist/auth/password-reset.js.map +1 -1
  8. package/dist/auth/service.d.ts +39 -2
  9. package/dist/auth/service.d.ts.map +1 -1
  10. package/dist/auth/service.js +75 -10
  11. package/dist/auth/service.js.map +1 -1
  12. package/dist/billing/ar-repository.d.ts +334 -0
  13. package/dist/billing/ar-repository.d.ts.map +1 -0
  14. package/dist/billing/ar-repository.js +707 -0
  15. package/dist/billing/ar-repository.js.map +1 -0
  16. package/dist/billing/auto-generation.d.ts +87 -0
  17. package/dist/billing/auto-generation.d.ts.map +1 -0
  18. package/dist/billing/auto-generation.js +181 -0
  19. package/dist/billing/auto-generation.js.map +1 -0
  20. package/dist/billing/live-guard.d.ts +64 -0
  21. package/dist/billing/live-guard.d.ts.map +1 -0
  22. package/dist/billing/live-guard.js +68 -0
  23. package/dist/billing/live-guard.js.map +1 -0
  24. package/dist/billing/payment-means-catalog.d.ts +17 -0
  25. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  26. package/dist/billing/payment-means-catalog.js +21 -0
  27. package/dist/billing/payment-means-catalog.js.map +1 -0
  28. package/dist/billing/payment-means.d.ts +38 -0
  29. package/dist/billing/payment-means.d.ts.map +1 -0
  30. package/dist/billing/payment-means.js +29 -0
  31. package/dist/billing/payment-means.js.map +1 -0
  32. package/dist/billing/payment-rail.d.ts +118 -0
  33. package/dist/billing/payment-rail.d.ts.map +1 -0
  34. package/dist/billing/payment-rail.js +295 -0
  35. package/dist/billing/payment-rail.js.map +1 -0
  36. package/dist/billing/provider/asaas.d.ts +46 -1
  37. package/dist/billing/provider/asaas.d.ts.map +1 -1
  38. package/dist/billing/provider/asaas.js +194 -14
  39. package/dist/billing/provider/asaas.js.map +1 -1
  40. package/dist/billing/provider/manual.js +1 -1
  41. package/dist/billing/provider/manual.js.map +1 -1
  42. package/dist/billing/provider/types.d.ts +115 -8
  43. package/dist/billing/provider/types.d.ts.map +1 -1
  44. package/dist/billing/provider-account.d.ts +89 -0
  45. package/dist/billing/provider-account.d.ts.map +1 -0
  46. package/dist/billing/provider-account.js +161 -0
  47. package/dist/billing/provider-account.js.map +1 -0
  48. package/dist/billing/provider-onboarding.d.ts +67 -0
  49. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  50. package/dist/billing/provider-onboarding.js +234 -0
  51. package/dist/billing/provider-onboarding.js.map +1 -0
  52. package/dist/billing/receivable.d.ts +5 -1
  53. package/dist/billing/receivable.d.ts.map +1 -1
  54. package/dist/billing/reconcile.d.ts +58 -0
  55. package/dist/billing/reconcile.d.ts.map +1 -0
  56. package/dist/billing/reconcile.js +138 -0
  57. package/dist/billing/reconcile.js.map +1 -0
  58. package/dist/billing/repository.d.ts +90 -1
  59. package/dist/billing/repository.d.ts.map +1 -1
  60. package/dist/billing/repository.js +148 -19
  61. package/dist/billing/repository.js.map +1 -1
  62. package/dist/cjs/auth/password-reset.js +141 -11
  63. package/dist/cjs/auth/password-reset.js.map +1 -1
  64. package/dist/cjs/auth/service.js +75 -9
  65. package/dist/cjs/auth/service.js.map +1 -1
  66. package/dist/cjs/billing/ar-repository.js +728 -0
  67. package/dist/cjs/billing/ar-repository.js.map +1 -0
  68. package/dist/cjs/billing/auto-generation.js +186 -0
  69. package/dist/cjs/billing/auto-generation.js.map +1 -0
  70. package/dist/cjs/billing/live-guard.js +72 -0
  71. package/dist/cjs/billing/live-guard.js.map +1 -0
  72. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  73. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  74. package/dist/cjs/billing/payment-means.js +33 -0
  75. package/dist/cjs/billing/payment-means.js.map +1 -0
  76. package/dist/cjs/billing/payment-rail.js +301 -0
  77. package/dist/cjs/billing/payment-rail.js.map +1 -0
  78. package/dist/cjs/billing/provider/asaas.js +194 -14
  79. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  80. package/dist/cjs/billing/provider/manual.js +1 -1
  81. package/dist/cjs/billing/provider/manual.js.map +1 -1
  82. package/dist/cjs/billing/provider-account.js +170 -0
  83. package/dist/cjs/billing/provider-account.js.map +1 -0
  84. package/dist/cjs/billing/provider-onboarding.js +239 -0
  85. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  86. package/dist/cjs/billing/reconcile.js +143 -0
  87. package/dist/cjs/billing/reconcile.js.map +1 -0
  88. package/dist/cjs/billing/repository.js +150 -18
  89. package/dist/cjs/billing/repository.js.map +1 -1
  90. package/dist/cjs/clients/repository.js +96 -20
  91. package/dist/cjs/clients/repository.js.map +1 -1
  92. package/dist/cjs/collection/branding.js +140 -0
  93. package/dist/cjs/collection/branding.js.map +1 -0
  94. package/dist/cjs/collection/channel-accounts.js +137 -0
  95. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  96. package/dist/cjs/collection/channel.js +17 -0
  97. package/dist/cjs/collection/channel.js.map +1 -0
  98. package/dist/cjs/collection/communication-bridge.js +140 -0
  99. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  100. package/dist/cjs/collection/communication-runtime.js +193 -0
  101. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  102. package/dist/cjs/collection/consent-repository.js +84 -0
  103. package/dist/cjs/collection/consent-repository.js.map +1 -0
  104. package/dist/cjs/collection/copy.js +125 -0
  105. package/dist/cjs/collection/copy.js.map +1 -0
  106. package/dist/cjs/collection/delivery-callback.js +151 -0
  107. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  108. package/dist/cjs/collection/email-layout.js +252 -0
  109. package/dist/cjs/collection/email-layout.js.map +1 -0
  110. package/dist/cjs/collection/engine.js +414 -0
  111. package/dist/cjs/collection/engine.js.map +1 -0
  112. package/dist/cjs/collection/format.js +76 -0
  113. package/dist/cjs/collection/format.js.map +1 -0
  114. package/dist/cjs/collection/payment-block.js +3 -0
  115. package/dist/cjs/collection/payment-block.js.map +1 -0
  116. package/dist/cjs/collection/policy.js +147 -0
  117. package/dist/cjs/collection/policy.js.map +1 -0
  118. package/dist/cjs/collection/repository.js +260 -0
  119. package/dist/cjs/collection/repository.js.map +1 -0
  120. package/dist/cjs/collection/subject.js +104 -0
  121. package/dist/cjs/collection/subject.js.map +1 -0
  122. package/dist/cjs/collection/template-catalog.js +165 -0
  123. package/dist/cjs/collection/template-catalog.js.map +1 -0
  124. package/dist/cjs/collection/template.js +78 -0
  125. package/dist/cjs/collection/template.js.map +1 -0
  126. package/dist/cjs/communication/adapters/email.js +132 -0
  127. package/dist/cjs/communication/adapters/email.js.map +1 -0
  128. package/dist/cjs/communication/adapters/sms.js +127 -0
  129. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  130. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  131. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  132. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  133. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  134. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  135. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  136. package/dist/cjs/communication/audit.js +61 -0
  137. package/dist/cjs/communication/audit.js.map +1 -0
  138. package/dist/cjs/communication/capabilities.js +76 -0
  139. package/dist/cjs/communication/capabilities.js.map +1 -0
  140. package/dist/cjs/communication/channel.js +53 -0
  141. package/dist/cjs/communication/channel.js.map +1 -0
  142. package/dist/cjs/communication/claim.js +228 -0
  143. package/dist/cjs/communication/claim.js.map +1 -0
  144. package/dist/cjs/communication/consent.js +43 -0
  145. package/dist/cjs/communication/consent.js.map +1 -0
  146. package/dist/cjs/communication/context.js +45 -0
  147. package/dist/cjs/communication/context.js.map +1 -0
  148. package/dist/cjs/communication/credentials.js +121 -0
  149. package/dist/cjs/communication/credentials.js.map +1 -0
  150. package/dist/cjs/communication/dry-run-scenario.js +161 -0
  151. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  152. package/dist/cjs/communication/dry-run.js +97 -0
  153. package/dist/cjs/communication/dry-run.js.map +1 -0
  154. package/dist/cjs/communication/engine.js +483 -0
  155. package/dist/cjs/communication/engine.js.map +1 -0
  156. package/dist/cjs/communication/graph.js +50 -0
  157. package/dist/cjs/communication/graph.js.map +1 -0
  158. package/dist/cjs/communication/idempotency.js +26 -0
  159. package/dist/cjs/communication/idempotency.js.map +1 -0
  160. package/dist/cjs/communication/identity.js +110 -0
  161. package/dist/cjs/communication/identity.js.map +1 -0
  162. package/dist/cjs/communication/index.js +135 -0
  163. package/dist/cjs/communication/index.js.map +1 -0
  164. package/dist/cjs/communication/onboarding.js +297 -0
  165. package/dist/cjs/communication/onboarding.js.map +1 -0
  166. package/dist/cjs/communication/policy.js +16 -0
  167. package/dist/cjs/communication/policy.js.map +1 -0
  168. package/dist/cjs/communication/routing.js +77 -0
  169. package/dist/cjs/communication/routing.js.map +1 -0
  170. package/dist/cjs/communication/sender-profile.js +128 -0
  171. package/dist/cjs/communication/sender-profile.js.map +1 -0
  172. package/dist/cjs/communication/status.js +86 -0
  173. package/dist/cjs/communication/status.js.map +1 -0
  174. package/dist/cjs/communication/stores/onboarding.js +135 -0
  175. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  176. package/dist/cjs/communication/stores/postgres.js +458 -0
  177. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  178. package/dist/cjs/communication/stores/routing.js +334 -0
  179. package/dist/cjs/communication/stores/routing.js.map +1 -0
  180. package/dist/cjs/communication/stores/secrets.js +126 -0
  181. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  182. package/dist/cjs/communication/template-provider.js +22 -0
  183. package/dist/cjs/communication/template-provider.js.map +1 -0
  184. package/dist/cjs/communication/template.js +63 -0
  185. package/dist/cjs/communication/template.js.map +1 -0
  186. package/dist/cjs/communication/webhook-subscription.js +258 -0
  187. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  188. package/dist/cjs/communication/webhook.js +292 -0
  189. package/dist/cjs/communication/webhook.js.map +1 -0
  190. package/dist/cjs/competence/repository.js +309 -0
  191. package/dist/cjs/competence/repository.js.map +1 -0
  192. package/dist/cjs/contacts/phone.js +192 -0
  193. package/dist/cjs/contacts/phone.js.map +1 -0
  194. package/dist/cjs/db/seed-catalog.js +48 -0
  195. package/dist/cjs/db/seed-catalog.js.map +1 -0
  196. package/dist/cjs/db/seed.js +15 -7
  197. package/dist/cjs/db/seed.js.map +1 -1
  198. package/dist/cjs/documents/repository.js +244 -0
  199. package/dist/cjs/documents/repository.js.map +1 -0
  200. package/dist/cjs/documents/requests.js +136 -0
  201. package/dist/cjs/documents/requests.js.map +1 -0
  202. package/dist/cjs/index.js +427 -48
  203. package/dist/cjs/index.js.map +1 -1
  204. package/dist/cjs/legal/company.js +36 -0
  205. package/dist/cjs/legal/company.js.map +1 -0
  206. package/dist/cjs/legal/documents.js +671 -0
  207. package/dist/cjs/legal/documents.js.map +1 -0
  208. package/dist/cjs/legal/index.js +15 -0
  209. package/dist/cjs/legal/index.js.map +1 -0
  210. package/dist/cjs/legal/types.js +34 -0
  211. package/dist/cjs/legal/types.js.map +1 -0
  212. package/dist/cjs/mail/auth-templates.js +29 -0
  213. package/dist/cjs/mail/auth-templates.js.map +1 -0
  214. package/dist/cjs/mail/dedup-store.js +12 -51
  215. package/dist/cjs/mail/dedup-store.js.map +1 -1
  216. package/dist/cjs/mail/index.js +16 -4
  217. package/dist/cjs/mail/index.js.map +1 -1
  218. package/dist/cjs/mail/provider.js +12 -247
  219. package/dist/cjs/mail/provider.js.map +1 -1
  220. package/dist/cjs/mail/resend.js +14 -18
  221. package/dist/cjs/mail/resend.js.map +1 -1
  222. package/dist/cjs/mail/sender-resolver.js +12 -11
  223. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  224. package/dist/cjs/mail/template-renderer.js +11 -16
  225. package/dist/cjs/mail/template-renderer.js.map +1 -1
  226. package/dist/cjs/mail/transactional-outbound.js +117 -0
  227. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  228. package/dist/cjs/mail/types.js +8 -35
  229. package/dist/cjs/mail/types.js.map +1 -1
  230. package/dist/cjs/portal/provisioning.js +144 -0
  231. package/dist/cjs/portal/provisioning.js.map +1 -0
  232. package/dist/cjs/pricing-engine/canonical.js +42 -0
  233. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  234. package/dist/cjs/pricing-engine/errors.js +6 -1
  235. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  236. package/dist/cjs/pricing-engine/index.js +12 -1
  237. package/dist/cjs/pricing-engine/index.js.map +1 -1
  238. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  239. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  240. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  241. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  242. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  243. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  244. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  245. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  246. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  247. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  248. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  249. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  250. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  251. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  252. package/dist/cjs/rbac/authorize.js +28 -0
  253. package/dist/cjs/rbac/authorize.js.map +1 -1
  254. package/dist/cjs/rbac/catalog.js +67 -1
  255. package/dist/cjs/rbac/catalog.js.map +1 -1
  256. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  257. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  258. package/dist/cjs/rbac/workload.js +191 -0
  259. package/dist/cjs/rbac/workload.js.map +1 -0
  260. package/dist/cjs/storage/checksum.js +15 -0
  261. package/dist/cjs/storage/checksum.js.map +1 -0
  262. package/dist/cjs/storage/key.js +72 -0
  263. package/dist/cjs/storage/key.js.map +1 -0
  264. package/dist/cjs/storage/local.js +100 -0
  265. package/dist/cjs/storage/local.js.map +1 -0
  266. package/dist/cjs/storage/r2.js +181 -0
  267. package/dist/cjs/storage/r2.js.map +1 -0
  268. package/dist/cjs/storage/registry.js +41 -0
  269. package/dist/cjs/storage/registry.js.map +1 -0
  270. package/dist/cjs/storage/types.js +50 -0
  271. package/dist/cjs/storage/types.js.map +1 -0
  272. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  273. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  274. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  275. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  276. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  277. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  278. package/dist/cjs/subscription-billing/service.js +57 -8
  279. package/dist/cjs/subscription-billing/service.js.map +1 -1
  280. package/dist/cjs/subscription-billing/types.js.map +1 -1
  281. package/dist/cjs/tenancy/provisioning.js +32 -8
  282. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  283. package/dist/cjs/users/repository.js +119 -2
  284. package/dist/cjs/users/repository.js.map +1 -1
  285. package/dist/cjs/vault/repository.js +81 -0
  286. package/dist/cjs/vault/repository.js.map +1 -1
  287. package/dist/clients/repository.d.ts +42 -0
  288. package/dist/clients/repository.d.ts.map +1 -1
  289. package/dist/clients/repository.js +94 -21
  290. package/dist/clients/repository.js.map +1 -1
  291. package/dist/collection/branding.d.ts +72 -0
  292. package/dist/collection/branding.d.ts.map +1 -0
  293. package/dist/collection/branding.js +136 -0
  294. package/dist/collection/branding.js.map +1 -0
  295. package/dist/collection/channel-accounts.d.ts +57 -0
  296. package/dist/collection/channel-accounts.d.ts.map +1 -0
  297. package/dist/collection/channel-accounts.js +133 -0
  298. package/dist/collection/channel-accounts.js.map +1 -0
  299. package/dist/collection/channel.d.ts +24 -0
  300. package/dist/collection/channel.d.ts.map +1 -0
  301. package/dist/collection/channel.js +16 -0
  302. package/dist/collection/channel.js.map +1 -0
  303. package/dist/collection/communication-bridge.d.ts +66 -0
  304. package/dist/collection/communication-bridge.d.ts.map +1 -0
  305. package/dist/collection/communication-bridge.js +134 -0
  306. package/dist/collection/communication-bridge.js.map +1 -0
  307. package/dist/collection/communication-runtime.d.ts +95 -0
  308. package/dist/collection/communication-runtime.d.ts.map +1 -0
  309. package/dist/collection/communication-runtime.js +187 -0
  310. package/dist/collection/communication-runtime.js.map +1 -0
  311. package/dist/collection/consent-repository.d.ts +32 -0
  312. package/dist/collection/consent-repository.d.ts.map +1 -0
  313. package/dist/collection/consent-repository.js +79 -0
  314. package/dist/collection/consent-repository.js.map +1 -0
  315. package/dist/collection/copy.d.ts +50 -0
  316. package/dist/collection/copy.d.ts.map +1 -0
  317. package/dist/collection/copy.js +122 -0
  318. package/dist/collection/copy.js.map +1 -0
  319. package/dist/collection/delivery-callback.d.ts +49 -0
  320. package/dist/collection/delivery-callback.d.ts.map +1 -0
  321. package/dist/collection/delivery-callback.js +147 -0
  322. package/dist/collection/delivery-callback.js.map +1 -0
  323. package/dist/collection/email-layout.d.ts +45 -0
  324. package/dist/collection/email-layout.d.ts.map +1 -0
  325. package/dist/collection/email-layout.js +247 -0
  326. package/dist/collection/email-layout.js.map +1 -0
  327. package/dist/collection/engine.d.ts +177 -0
  328. package/dist/collection/engine.d.ts.map +1 -0
  329. package/dist/collection/engine.js +407 -0
  330. package/dist/collection/engine.js.map +1 -0
  331. package/dist/collection/format.d.ts +32 -0
  332. package/dist/collection/format.d.ts.map +1 -0
  333. package/dist/collection/format.js +70 -0
  334. package/dist/collection/format.js.map +1 -0
  335. package/dist/collection/payment-block.d.ts +24 -0
  336. package/dist/collection/payment-block.d.ts.map +1 -0
  337. package/dist/collection/payment-block.js +2 -0
  338. package/dist/collection/payment-block.js.map +1 -0
  339. package/dist/collection/policy.d.ts +53 -0
  340. package/dist/collection/policy.d.ts.map +1 -0
  341. package/dist/collection/policy.js +141 -0
  342. package/dist/collection/policy.js.map +1 -0
  343. package/dist/collection/repository.d.ts +129 -0
  344. package/dist/collection/repository.d.ts.map +1 -0
  345. package/dist/collection/repository.js +246 -0
  346. package/dist/collection/repository.js.map +1 -0
  347. package/dist/collection/subject.d.ts +66 -0
  348. package/dist/collection/subject.d.ts.map +1 -0
  349. package/dist/collection/subject.js +99 -0
  350. package/dist/collection/subject.js.map +1 -0
  351. package/dist/collection/template-catalog.d.ts +16 -0
  352. package/dist/collection/template-catalog.d.ts.map +1 -0
  353. package/dist/collection/template-catalog.js +162 -0
  354. package/dist/collection/template-catalog.js.map +1 -0
  355. package/dist/collection/template.d.ts +37 -0
  356. package/dist/collection/template.d.ts.map +1 -0
  357. package/dist/collection/template.js +73 -0
  358. package/dist/collection/template.js.map +1 -0
  359. package/dist/communication/adapters/email.d.ts +28 -0
  360. package/dist/communication/adapters/email.d.ts.map +1 -0
  361. package/dist/communication/adapters/email.js +129 -0
  362. package/dist/communication/adapters/email.js.map +1 -0
  363. package/dist/communication/adapters/sms.d.ts +95 -0
  364. package/dist/communication/adapters/sms.d.ts.map +1 -0
  365. package/dist/communication/adapters/sms.js +121 -0
  366. package/dist/communication/adapters/sms.js.map +1 -0
  367. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  368. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  369. package/dist/communication/adapters/whatsapp-language.js +36 -0
  370. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  371. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  372. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  373. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  374. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  375. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  376. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  377. package/dist/communication/adapters/whatsapp.js +210 -0
  378. package/dist/communication/adapters/whatsapp.js.map +1 -0
  379. package/dist/communication/audit.d.ts +105 -0
  380. package/dist/communication/audit.d.ts.map +1 -0
  381. package/dist/communication/audit.js +56 -0
  382. package/dist/communication/audit.js.map +1 -0
  383. package/dist/communication/capabilities.d.ts +88 -0
  384. package/dist/communication/capabilities.d.ts.map +1 -0
  385. package/dist/communication/capabilities.js +72 -0
  386. package/dist/communication/capabilities.js.map +1 -0
  387. package/dist/communication/channel.d.ts +125 -0
  388. package/dist/communication/channel.d.ts.map +1 -0
  389. package/dist/communication/channel.js +47 -0
  390. package/dist/communication/channel.js.map +1 -0
  391. package/dist/communication/claim.d.ts +368 -0
  392. package/dist/communication/claim.d.ts.map +1 -0
  393. package/dist/communication/claim.js +224 -0
  394. package/dist/communication/claim.js.map +1 -0
  395. package/dist/communication/consent.d.ts +65 -0
  396. package/dist/communication/consent.d.ts.map +1 -0
  397. package/dist/communication/consent.js +40 -0
  398. package/dist/communication/consent.js.map +1 -0
  399. package/dist/communication/context.d.ts +48 -0
  400. package/dist/communication/context.d.ts.map +1 -0
  401. package/dist/communication/context.js +41 -0
  402. package/dist/communication/context.js.map +1 -0
  403. package/dist/communication/credentials.d.ts +74 -0
  404. package/dist/communication/credentials.d.ts.map +1 -0
  405. package/dist/communication/credentials.js +115 -0
  406. package/dist/communication/credentials.js.map +1 -0
  407. package/dist/communication/dry-run-scenario.d.ts +37 -0
  408. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  409. package/dist/communication/dry-run-scenario.js +158 -0
  410. package/dist/communication/dry-run-scenario.js.map +1 -0
  411. package/dist/communication/dry-run.d.ts +40 -0
  412. package/dist/communication/dry-run.d.ts.map +1 -0
  413. package/dist/communication/dry-run.js +92 -0
  414. package/dist/communication/dry-run.js.map +1 -0
  415. package/dist/communication/engine.d.ts +153 -0
  416. package/dist/communication/engine.d.ts.map +1 -0
  417. package/dist/communication/engine.js +480 -0
  418. package/dist/communication/engine.js.map +1 -0
  419. package/dist/communication/graph.d.ts +38 -0
  420. package/dist/communication/graph.d.ts.map +1 -0
  421. package/dist/communication/graph.js +45 -0
  422. package/dist/communication/graph.js.map +1 -0
  423. package/dist/communication/idempotency.d.ts +33 -0
  424. package/dist/communication/idempotency.d.ts.map +1 -0
  425. package/dist/communication/idempotency.js +23 -0
  426. package/dist/communication/idempotency.js.map +1 -0
  427. package/dist/communication/identity.d.ts +127 -0
  428. package/dist/communication/identity.d.ts.map +1 -0
  429. package/dist/communication/identity.js +105 -0
  430. package/dist/communication/identity.js.map +1 -0
  431. package/dist/communication/index.d.ts +66 -0
  432. package/dist/communication/index.d.ts.map +1 -0
  433. package/dist/communication/index.js +42 -0
  434. package/dist/communication/index.js.map +1 -0
  435. package/dist/communication/onboarding.d.ts +223 -0
  436. package/dist/communication/onboarding.d.ts.map +1 -0
  437. package/dist/communication/onboarding.js +287 -0
  438. package/dist/communication/onboarding.js.map +1 -0
  439. package/dist/communication/policy.d.ts +99 -0
  440. package/dist/communication/policy.d.ts.map +1 -0
  441. package/dist/communication/policy.js +13 -0
  442. package/dist/communication/policy.js.map +1 -0
  443. package/dist/communication/routing.d.ts +99 -0
  444. package/dist/communication/routing.d.ts.map +1 -0
  445. package/dist/communication/routing.js +73 -0
  446. package/dist/communication/routing.js.map +1 -0
  447. package/dist/communication/sender-profile.d.ts +100 -0
  448. package/dist/communication/sender-profile.d.ts.map +1 -0
  449. package/dist/communication/sender-profile.js +123 -0
  450. package/dist/communication/sender-profile.js.map +1 -0
  451. package/dist/communication/status.d.ts +48 -0
  452. package/dist/communication/status.d.ts.map +1 -0
  453. package/dist/communication/status.js +79 -0
  454. package/dist/communication/status.js.map +1 -0
  455. package/dist/communication/stores/onboarding.d.ts +88 -0
  456. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  457. package/dist/communication/stores/onboarding.js +127 -0
  458. package/dist/communication/stores/onboarding.js.map +1 -0
  459. package/dist/communication/stores/postgres.d.ts +81 -0
  460. package/dist/communication/stores/postgres.d.ts.map +1 -0
  461. package/dist/communication/stores/postgres.js +453 -0
  462. package/dist/communication/stores/postgres.js.map +1 -0
  463. package/dist/communication/stores/routing.d.ts +169 -0
  464. package/dist/communication/stores/routing.d.ts.map +1 -0
  465. package/dist/communication/stores/routing.js +324 -0
  466. package/dist/communication/stores/routing.js.map +1 -0
  467. package/dist/communication/stores/secrets.d.ts +89 -0
  468. package/dist/communication/stores/secrets.d.ts.map +1 -0
  469. package/dist/communication/stores/secrets.js +122 -0
  470. package/dist/communication/stores/secrets.js.map +1 -0
  471. package/dist/communication/template-provider.d.ts +85 -0
  472. package/dist/communication/template-provider.d.ts.map +1 -0
  473. package/dist/communication/template-provider.js +21 -0
  474. package/dist/communication/template-provider.js.map +1 -0
  475. package/dist/communication/template.d.ts +87 -0
  476. package/dist/communication/template.d.ts.map +1 -0
  477. package/dist/communication/template.js +59 -0
  478. package/dist/communication/template.js.map +1 -0
  479. package/dist/communication/webhook-subscription.d.ts +156 -0
  480. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  481. package/dist/communication/webhook-subscription.js +252 -0
  482. package/dist/communication/webhook-subscription.js.map +1 -0
  483. package/dist/communication/webhook.d.ts +121 -0
  484. package/dist/communication/webhook.d.ts.map +1 -0
  485. package/dist/communication/webhook.js +283 -0
  486. package/dist/communication/webhook.js.map +1 -0
  487. package/dist/competence/repository.d.ts +147 -0
  488. package/dist/competence/repository.d.ts.map +1 -0
  489. package/dist/competence/repository.js +294 -0
  490. package/dist/competence/repository.js.map +1 -0
  491. package/dist/contacts/phone.d.ts +70 -0
  492. package/dist/contacts/phone.d.ts.map +1 -0
  493. package/dist/contacts/phone.js +186 -0
  494. package/dist/contacts/phone.js.map +1 -0
  495. package/dist/db/migrate.js +17 -11
  496. package/dist/db/migrate.js.map +1 -1
  497. package/dist/db/seed-catalog.d.ts +18 -0
  498. package/dist/db/seed-catalog.d.ts.map +1 -0
  499. package/dist/db/seed-catalog.js +45 -0
  500. package/dist/db/seed-catalog.js.map +1 -0
  501. package/dist/db/seed.js +16 -8
  502. package/dist/db/seed.js.map +1 -1
  503. package/dist/documents/repository.d.ts +97 -0
  504. package/dist/documents/repository.d.ts.map +1 -0
  505. package/dist/documents/repository.js +236 -0
  506. package/dist/documents/repository.js.map +1 -0
  507. package/dist/documents/requests.d.ts +73 -0
  508. package/dist/documents/requests.d.ts.map +1 -0
  509. package/dist/documents/requests.js +127 -0
  510. package/dist/documents/requests.js.map +1 -0
  511. package/dist/index.d.ts +113 -13
  512. package/dist/index.d.ts.map +1 -1
  513. package/dist/index.js +104 -8
  514. package/dist/index.js.map +1 -1
  515. package/dist/legal/company.d.ts +32 -0
  516. package/dist/legal/company.d.ts.map +1 -0
  517. package/dist/legal/company.js +33 -0
  518. package/dist/legal/company.js.map +1 -0
  519. package/dist/legal/documents.d.ts +30 -0
  520. package/dist/legal/documents.d.ts.map +1 -0
  521. package/dist/legal/documents.js +666 -0
  522. package/dist/legal/documents.js.map +1 -0
  523. package/dist/legal/index.d.ts +5 -0
  524. package/dist/legal/index.d.ts.map +1 -0
  525. package/dist/legal/index.js +4 -0
  526. package/dist/legal/index.js.map +1 -0
  527. package/dist/legal/types.d.ts +145 -0
  528. package/dist/legal/types.d.ts.map +1 -0
  529. package/dist/legal/types.js +31 -0
  530. package/dist/legal/types.js.map +1 -0
  531. package/dist/mail/auth-templates.d.ts +15 -0
  532. package/dist/mail/auth-templates.d.ts.map +1 -0
  533. package/dist/mail/auth-templates.js +26 -0
  534. package/dist/mail/auth-templates.js.map +1 -0
  535. package/dist/mail/dedup-store.d.ts +1 -24
  536. package/dist/mail/dedup-store.d.ts.map +1 -1
  537. package/dist/mail/dedup-store.js +9 -48
  538. package/dist/mail/dedup-store.js.map +1 -1
  539. package/dist/mail/index.d.ts +2 -1
  540. package/dist/mail/index.d.ts.map +1 -1
  541. package/dist/mail/index.js +13 -2
  542. package/dist/mail/index.js.map +1 -1
  543. package/dist/mail/provider.d.ts +2 -30
  544. package/dist/mail/provider.d.ts.map +1 -1
  545. package/dist/mail/provider.js +10 -246
  546. package/dist/mail/provider.js.map +1 -1
  547. package/dist/mail/resend.d.ts +2 -12
  548. package/dist/mail/resend.d.ts.map +1 -1
  549. package/dist/mail/resend.js +11 -17
  550. package/dist/mail/resend.js.map +1 -1
  551. package/dist/mail/sender-resolver.d.ts +1 -7
  552. package/dist/mail/sender-resolver.d.ts.map +1 -1
  553. package/dist/mail/sender-resolver.js +11 -10
  554. package/dist/mail/sender-resolver.js.map +1 -1
  555. package/dist/mail/template-renderer.d.ts +1 -9
  556. package/dist/mail/template-renderer.d.ts.map +1 -1
  557. package/dist/mail/template-renderer.js +10 -15
  558. package/dist/mail/template-renderer.js.map +1 -1
  559. package/dist/mail/transactional-outbound.d.ts +115 -0
  560. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  561. package/dist/mail/transactional-outbound.js +113 -0
  562. package/dist/mail/transactional-outbound.js.map +1 -0
  563. package/dist/mail/types.d.ts +2 -142
  564. package/dist/mail/types.d.ts.map +1 -1
  565. package/dist/mail/types.js +1 -33
  566. package/dist/mail/types.js.map +1 -1
  567. package/dist/portal/provisioning.d.ts +58 -0
  568. package/dist/portal/provisioning.d.ts.map +1 -0
  569. package/dist/portal/provisioning.js +139 -0
  570. package/dist/portal/provisioning.js.map +1 -0
  571. package/dist/pricing-engine/canonical.d.ts +14 -0
  572. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  573. package/dist/pricing-engine/canonical.js +39 -0
  574. package/dist/pricing-engine/canonical.js.map +1 -0
  575. package/dist/pricing-engine/errors.d.ts.map +1 -1
  576. package/dist/pricing-engine/errors.js +6 -1
  577. package/dist/pricing-engine/errors.js.map +1 -1
  578. package/dist/pricing-engine/index.d.ts +12 -2
  579. package/dist/pricing-engine/index.d.ts.map +1 -1
  580. package/dist/pricing-engine/index.js +6 -1
  581. package/dist/pricing-engine/index.js.map +1 -1
  582. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  583. package/dist/pricing-engine/pipeline.js +202 -28
  584. package/dist/pricing-engine/pipeline.js.map +1 -1
  585. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  586. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  587. package/dist/pricing-engine/shadow-adapter.js +75 -0
  588. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  589. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  590. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  591. package/dist/pricing-engine/shadow-diff.js +52 -0
  592. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  593. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  594. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  595. package/dist/pricing-engine/shadow-facade.js +82 -0
  596. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  597. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  598. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  599. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  600. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  601. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  602. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  603. package/dist/pricing-engine/shadow-metrics.js +31 -0
  604. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  605. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  606. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  607. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  608. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  609. package/dist/pricing-engine/types.d.ts +2 -0
  610. package/dist/pricing-engine/types.d.ts.map +1 -1
  611. package/dist/rbac/authorize.d.ts +12 -0
  612. package/dist/rbac/authorize.d.ts.map +1 -1
  613. package/dist/rbac/authorize.js +27 -0
  614. package/dist/rbac/authorize.js.map +1 -1
  615. package/dist/rbac/catalog.d.ts.map +1 -1
  616. package/dist/rbac/catalog.js +67 -1
  617. package/dist/rbac/catalog.js.map +1 -1
  618. package/dist/rbac/workload-provisioning.d.ts +66 -0
  619. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  620. package/dist/rbac/workload-provisioning.js +153 -0
  621. package/dist/rbac/workload-provisioning.js.map +1 -0
  622. package/dist/rbac/workload.d.ts +124 -0
  623. package/dist/rbac/workload.d.ts.map +1 -0
  624. package/dist/rbac/workload.js +184 -0
  625. package/dist/rbac/workload.js.map +1 -0
  626. package/dist/storage/checksum.d.ts +9 -0
  627. package/dist/storage/checksum.d.ts.map +1 -0
  628. package/dist/storage/checksum.js +12 -0
  629. package/dist/storage/checksum.js.map +1 -0
  630. package/dist/storage/key.d.ts +37 -0
  631. package/dist/storage/key.d.ts.map +1 -0
  632. package/dist/storage/key.js +67 -0
  633. package/dist/storage/key.js.map +1 -0
  634. package/dist/storage/local.d.ts +40 -0
  635. package/dist/storage/local.d.ts.map +1 -0
  636. package/dist/storage/local.js +96 -0
  637. package/dist/storage/local.js.map +1 -0
  638. package/dist/storage/r2.d.ts +43 -0
  639. package/dist/storage/r2.d.ts.map +1 -0
  640. package/dist/storage/r2.js +177 -0
  641. package/dist/storage/r2.js.map +1 -0
  642. package/dist/storage/registry.d.ts +23 -0
  643. package/dist/storage/registry.d.ts.map +1 -0
  644. package/dist/storage/registry.js +37 -0
  645. package/dist/storage/registry.js.map +1 -0
  646. package/dist/storage/types.d.ts +67 -0
  647. package/dist/storage/types.d.ts.map +1 -0
  648. package/dist/storage/types.js +45 -0
  649. package/dist/storage/types.js.map +1 -0
  650. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  651. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  652. package/dist/subscription-billing/provider/asaas.js +32 -7
  653. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  654. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  655. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  656. package/dist/subscription-billing/provider/disabled.js +8 -0
  657. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  658. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  659. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  660. package/dist/subscription-billing/provider/registry.js +17 -0
  661. package/dist/subscription-billing/provider/registry.js.map +1 -1
  662. package/dist/subscription-billing/service.d.ts +17 -1
  663. package/dist/subscription-billing/service.d.ts.map +1 -1
  664. package/dist/subscription-billing/service.js +57 -8
  665. package/dist/subscription-billing/service.js.map +1 -1
  666. package/dist/subscription-billing/types.d.ts +13 -0
  667. package/dist/subscription-billing/types.d.ts.map +1 -1
  668. package/dist/subscription-billing/types.js.map +1 -1
  669. package/dist/tenancy/provisioning.d.ts.map +1 -1
  670. package/dist/tenancy/provisioning.js +32 -8
  671. package/dist/tenancy/provisioning.js.map +1 -1
  672. package/dist/users/repository.d.ts +38 -0
  673. package/dist/users/repository.d.ts.map +1 -1
  674. package/dist/users/repository.js +118 -3
  675. package/dist/users/repository.js.map +1 -1
  676. package/dist/vault/repository.d.ts +67 -0
  677. package/dist/vault/repository.d.ts.map +1 -1
  678. package/dist/vault/repository.js +78 -0
  679. package/dist/vault/repository.js.map +1 -1
  680. package/package.json +19 -4
  681. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  682. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  683. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  684. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  685. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  686. package/src/db/migrations/0028_collection_engine.sql +94 -0
  687. package/src/db/migrations/0029_payment_rail.sql +107 -0
  688. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  689. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  690. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  691. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  692. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  693. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  694. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  695. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  696. package/src/db/migrations/0038_notification_channels.sql +175 -0
  697. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  698. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  699. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  700. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  701. package/src/db/migrations/0043_workload_identity.sql +105 -0
  702. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  703. package/dist/cjs/mail/resend-client.js +0 -103
  704. package/dist/cjs/mail/resend-client.js.map +0 -1
  705. package/dist/mail/resend-client.d.ts +0 -16
  706. package/dist/mail/resend-client.d.ts.map +0 -1
  707. package/dist/mail/resend-client.js +0 -100
  708. package/dist/mail/resend-client.js.map +0 -1
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COMPETENCE_LABEL_RE = void 0;
4
+ exports.assertCompetenceLabel = assertCompetenceLabel;
5
+ exports.openCompetence = openCompetence;
6
+ exports.getCompetence = getCompetence;
7
+ exports.listCompetences = listCompetences;
8
+ exports.closeCompetence = closeCompetence;
9
+ exports.reopenCompetence = reopenCompetence;
10
+ exports.listRecurringItemTypes = listRecurringItemTypes;
11
+ exports.createRecurringItemType = createRecurringItemType;
12
+ exports.generateInstancesForCompetence = generateInstancesForCompetence;
13
+ exports.computeDueDate = computeDueDate;
14
+ exports.listInstances = listInstances;
15
+ exports.completeInstance = completeInstance;
16
+ const shared_1 = require("@baruk/shared");
17
+ /**
18
+ * Competência e itens recorrentes (ADR 0008).
19
+ *
20
+ * Tenant-scoped por RLS: nenhum método filtra `tenant_id`, exatamente como os
21
+ * demais repositórios do core. O `tenant_id` chega por `current_setting`.
22
+ */
23
+ exports.COMPETENCE_LABEL_RE = /^\d{4}-(0[1-9]|1[0-2])$/;
24
+ function mapCompetence(row) {
25
+ return {
26
+ id: row.id,
27
+ tenantId: row.tenant_id,
28
+ clientId: row.client_id,
29
+ label: row.label,
30
+ status: row.status,
31
+ openedAt: row.opened_at.toISOString(),
32
+ closedAt: row.closed_at ? row.closed_at.toISOString() : null,
33
+ version: row.version,
34
+ };
35
+ }
36
+ /**
37
+ * Valida o rótulo antes de chegar ao banco. O CHECK da migration é a garantia
38
+ * final, mas devolver 422 é melhor que devolver 500 com erro de constraint.
39
+ *
40
+ * Repare que o regex daqui é mais estrito que o do schema: rejeita `2026-13`.
41
+ * Nunca relaxe um sem relaxar o outro — a divergência é deliberada e sempre no
42
+ * sentido seguro (aplicação mais rígida que banco).
43
+ */
44
+ function assertCompetenceLabel(label) {
45
+ if (!exports.COMPETENCE_LABEL_RE.test(label)) {
46
+ throw new shared_1.ValidationError('competência deve estar no formato YYYY-MM, com mês entre 01 e 12');
47
+ }
48
+ }
49
+ /**
50
+ * Abre a competência, ou devolve a existente. Idempotente por desenho: chamar
51
+ * duas vezes para o mesmo (cliente, mês) devolve a mesma linha, e é o índice
52
+ * único que garante isso sob concorrência — não o `SELECT` prévio.
53
+ */
54
+ async function openCompetence(tx, input) {
55
+ assertCompetenceLabel(input.label);
56
+ const inserted = await tx `
57
+ INSERT INTO competence (id, tenant_id, client_id, label)
58
+ VALUES (
59
+ ${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid,
60
+ ${input.clientId}, ${input.label}
61
+ )
62
+ ON CONFLICT DO NOTHING
63
+ RETURNING id, tenant_id, client_id, label, status, opened_at, closed_at, version
64
+ `;
65
+ if (inserted[0])
66
+ return { competence: mapCompetence(inserted[0]), created: true };
67
+ const existing = await tx `
68
+ SELECT id, tenant_id, client_id, label, status, opened_at, closed_at, version
69
+ FROM competence
70
+ WHERE client_id = ${input.clientId} AND label = ${input.label} AND deleted_at IS NULL
71
+ `;
72
+ if (!existing[0])
73
+ throw new shared_1.ConflictError('não foi possível abrir a competência');
74
+ return { competence: mapCompetence(existing[0]), created: false };
75
+ }
76
+ async function getCompetence(tx, id) {
77
+ const rows = await tx `
78
+ SELECT id, tenant_id, client_id, label, status, opened_at, closed_at, version
79
+ FROM competence WHERE id = ${id} AND deleted_at IS NULL
80
+ `;
81
+ if (!rows[0])
82
+ throw new shared_1.NotFoundError('Competência não encontrada');
83
+ return mapCompetence(rows[0]);
84
+ }
85
+ async function listCompetences(tx, filter = {}) {
86
+ const limit = Math.min(filter.limit ?? 50, 100);
87
+ const offset = filter.offset ?? 0;
88
+ const rows = await tx `
89
+ SELECT id, tenant_id, client_id, label, status, opened_at, closed_at, version,
90
+ count(*) OVER() AS total
91
+ FROM competence
92
+ WHERE deleted_at IS NULL
93
+ AND (${filter.clientId ?? null}::uuid IS NULL OR client_id = ${filter.clientId ?? null})
94
+ AND (${filter.status ?? null}::text IS NULL OR status = ${filter.status ?? null})
95
+ ORDER BY label DESC, created_at DESC
96
+ LIMIT ${limit} OFFSET ${offset}
97
+ `;
98
+ return {
99
+ total: rows[0] ? Number(rows[0].total) : 0,
100
+ items: rows.map(mapCompetence),
101
+ };
102
+ }
103
+ const CLOSEABLE = [
104
+ 'open',
105
+ 'in_progress',
106
+ 'awaiting_client',
107
+ 'review',
108
+ 'reopened',
109
+ ];
110
+ /**
111
+ * Fechar é evento, não flag: exige que não reste pendência obrigatória aberta.
112
+ * A checagem é feita aqui, e não por trigger, porque a regra é de negócio e
113
+ * precisa produzir uma mensagem que o usuário entenda.
114
+ */
115
+ async function closeCompetence(tx, input) {
116
+ const current = await getCompetence(tx, input.id);
117
+ if (current.status === 'closed')
118
+ throw new shared_1.ConflictError('Competência já está fechada');
119
+ if (!CLOSEABLE.includes(current.status)) {
120
+ throw new shared_1.ConflictError(`Competência em ${current.status} não pode ser fechada`);
121
+ }
122
+ if (!input.force) {
123
+ const pending = await tx `
124
+ SELECT count(*)::int AS n FROM recurring_instance
125
+ WHERE competence_id = ${input.id} AND deleted_at IS NULL
126
+ AND status NOT IN ('done', 'not_applicable', 'canceled')
127
+ `;
128
+ if ((pending[0]?.n ?? 0) > 0) {
129
+ throw new shared_1.ConflictError(`Competência tem ${pending[0].n} item(ns) em aberto. Conclua ou marque como não aplicável antes de fechar.`);
130
+ }
131
+ }
132
+ const rows = await tx `
133
+ UPDATE competence
134
+ SET status = 'closed', closed_at = now(), closed_by = ${input.closedBy},
135
+ version = version + 1, updated_at = now()
136
+ WHERE id = ${input.id} AND deleted_at IS NULL
137
+ RETURNING id, tenant_id, client_id, label, status, opened_at, closed_at, version
138
+ `;
139
+ if (!rows[0])
140
+ throw new shared_1.NotFoundError('Competência não encontrada');
141
+ return mapCompetence(rows[0]);
142
+ }
143
+ async function reopenCompetence(tx, input) {
144
+ const rows = await tx `
145
+ UPDATE competence
146
+ SET status = 'reopened', closed_at = NULL, closed_by = NULL,
147
+ reopened_at = now(), reopened_by = ${input.reopenedBy},
148
+ version = version + 1, updated_at = now()
149
+ WHERE id = ${input.id} AND status = 'closed' AND deleted_at IS NULL
150
+ RETURNING id, tenant_id, client_id, label, status, opened_at, closed_at, version
151
+ `;
152
+ if (!rows[0])
153
+ throw new shared_1.NotFoundError('Competência fechada não encontrada');
154
+ return mapCompetence(rows[0]);
155
+ }
156
+ function mapItemType(row) {
157
+ return {
158
+ id: row.id,
159
+ tenantId: row.tenant_id,
160
+ key: row.key,
161
+ label: row.label,
162
+ nature: row.nature,
163
+ sphere: row.sphere,
164
+ periodicity: row.periodicity,
165
+ dueRule: row.due_rule ?? {},
166
+ appliesToRegime: Array.isArray(row.applies_to_regime) ? row.applies_to_regime : [],
167
+ requiresDocument: row.requires_document,
168
+ active: row.active,
169
+ };
170
+ }
171
+ /**
172
+ * Lista o catálogo efetivo: override do tenant vence o template do sistema
173
+ * quando as duas linhas têm a mesma `key`. O `DISTINCT ON` com `ORDER BY
174
+ * tenant_id NULLS LAST` é o que implementa essa precedência em uma passada.
175
+ */
176
+ async function listRecurringItemTypes(tx, filter = {}) {
177
+ const rows = await tx `
178
+ SELECT DISTINCT ON (key)
179
+ id, tenant_id, key, label, nature, sphere, periodicity,
180
+ due_rule, applies_to_regime, requires_document, active
181
+ FROM recurring_item_type
182
+ WHERE deleted_at IS NULL
183
+ AND (${filter.nature ?? null}::text IS NULL OR nature = ${filter.nature ?? null})
184
+ AND (${filter.activeOnly ?? true} = false OR active = true)
185
+ ORDER BY key, tenant_id NULLS LAST
186
+ `;
187
+ return rows.map(mapItemType);
188
+ }
189
+ async function createRecurringItemType(tx, input) {
190
+ const rows = await tx `
191
+ INSERT INTO recurring_item_type
192
+ (id, tenant_id, key, label, nature, sphere, periodicity, due_rule,
193
+ applies_to_regime, requires_document)
194
+ VALUES (
195
+ ${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid,
196
+ ${input.key}, ${input.label}, ${input.nature}, ${input.sphere ?? null},
197
+ ${input.periodicity ?? 'monthly'}, ${tx.json((input.dueRule ?? {}))},
198
+ ${tx.json((input.appliesToRegime ?? []))}, ${input.requiresDocument ?? false}
199
+ )
200
+ RETURNING id, tenant_id, key, label, nature, sphere, periodicity,
201
+ due_rule, applies_to_regime, requires_document, active
202
+ `;
203
+ return mapItemType(rows[0]);
204
+ }
205
+ function mapInstance(row) {
206
+ return {
207
+ id: row.id,
208
+ clientId: row.client_id,
209
+ competenceId: row.competence_id,
210
+ itemTypeId: row.item_type_id,
211
+ label: row.label,
212
+ nature: row.nature,
213
+ dueDate: row.due_date,
214
+ status: row.status,
215
+ responsibleUserId: row.responsible_user_id,
216
+ completedAt: row.completed_at ? row.completed_at.toISOString() : null,
217
+ };
218
+ }
219
+ /**
220
+ * Gera as instâncias de uma competência a partir do catálogo.
221
+ *
222
+ * **Idempotente pelo schema, não pelo código.** O `ON CONFLICT DO NOTHING` bate
223
+ * no índice único `(tenant, client, competence, item_type)`; rodar N vezes
224
+ * produz exatamente uma instância por tipo. É o que hoje falta e permite lançar
225
+ * a mesma DAS de julho três vezes.
226
+ *
227
+ * Devolve quantas foram criadas de fato — o operador precisa distinguir "gerei
228
+ * 8" de "já estava tudo lá".
229
+ */
230
+ async function generateInstancesForCompetence(tx, input) {
231
+ const competence = await getCompetence(tx, input.competenceId);
232
+ const types = await listRecurringItemTypes(tx, { activeOnly: true });
233
+ const applicable = types.filter((t) => t.appliesToRegime.length === 0 ||
234
+ (input.regime != null && t.appliesToRegime.includes(input.regime)));
235
+ const created = [];
236
+ for (const type of applicable) {
237
+ const dueDate = computeDueDate(competence.label, type.dueRule);
238
+ const rows = await tx `
239
+ INSERT INTO recurring_instance
240
+ (id, tenant_id, client_id, competence_id, item_type_id, label, nature, due_date)
241
+ VALUES (
242
+ ${(0, shared_1.uuidv7)()}, current_setting('app.current_tenant')::uuid,
243
+ ${competence.clientId}, ${competence.id}, ${type.id},
244
+ ${type.label}, ${type.nature}, ${dueDate}
245
+ )
246
+ ON CONFLICT DO NOTHING
247
+ RETURNING id, client_id, competence_id, item_type_id, label, nature,
248
+ due_date, status, responsible_user_id, completed_at
249
+ `;
250
+ if (rows[0])
251
+ created.push(mapInstance(rows[0]));
252
+ }
253
+ return { created, skipped: applicable.length - created.length };
254
+ }
255
+ /**
256
+ * Aplica a regra de vencimento sobre a competência.
257
+ *
258
+ * Hoje entende `{kind:'day_of_next_month', day:N}` e `{kind:'day_of_month', day:N}`.
259
+ * Regra desconhecida devolve `null` em vez de chutar uma data — um vencimento
260
+ * inventado é pior que vencimento ausente, porque o alerta dispararia no dia
261
+ * errado e o usuário confiaria nele.
262
+ */
263
+ function computeDueDate(competenceLabel, rule) {
264
+ const kind = typeof rule['kind'] === 'string' ? rule['kind'] : null;
265
+ const day = typeof rule['day'] === 'number' ? rule['day'] : null;
266
+ if (!kind || day == null || day < 1 || day > 28)
267
+ return null;
268
+ const [yearStr, monthStr] = competenceLabel.split('-');
269
+ let year = Number(yearStr);
270
+ let month = Number(monthStr);
271
+ if (kind === 'day_of_next_month') {
272
+ month += 1;
273
+ if (month > 12) {
274
+ month = 1;
275
+ year += 1;
276
+ }
277
+ }
278
+ else if (kind !== 'day_of_month') {
279
+ return null;
280
+ }
281
+ return `${year}-${String(month).padStart(2, '0')}-${String(day).padStart(2, '0')}`;
282
+ }
283
+ async function listInstances(tx, filter = {}) {
284
+ const rows = await tx `
285
+ SELECT id, client_id, competence_id, item_type_id, label, nature,
286
+ due_date, status, responsible_user_id, completed_at
287
+ FROM recurring_instance
288
+ WHERE deleted_at IS NULL
289
+ AND (${filter.competenceId ?? null}::uuid IS NULL OR competence_id = ${filter.competenceId ?? null})
290
+ AND (${filter.clientId ?? null}::uuid IS NULL OR client_id = ${filter.clientId ?? null})
291
+ AND (${filter.status ?? null}::text IS NULL OR status = ${filter.status ?? null})
292
+ ORDER BY due_date NULLS LAST, label
293
+ `;
294
+ return rows.map(mapInstance);
295
+ }
296
+ async function completeInstance(tx, input) {
297
+ const rows = await tx `
298
+ UPDATE recurring_instance
299
+ SET status = 'done', completed_at = now(), completed_by = ${input.completedBy},
300
+ version = version + 1, updated_at = now()
301
+ WHERE id = ${input.id} AND deleted_at IS NULL AND status <> 'done'
302
+ RETURNING id, client_id, competence_id, item_type_id, label, nature,
303
+ due_date, status, responsible_user_id, completed_at
304
+ `;
305
+ if (!rows[0])
306
+ throw new shared_1.NotFoundError('Item não encontrado ou já concluído');
307
+ return mapInstance(rows[0]);
308
+ }
309
+ //# sourceMappingURL=repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../src/competence/repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * Telefone brasileiro em formato canônico.
4
+ *
5
+ * Existe UMA vez, e não uma por canal, porque WhatsApp e SMS discordariam no
6
+ * primeiro caso de borda — e discordar aqui significa uma mensagem chegar e a
7
+ * outra não, para o mesmo cliente, sem que nada no sistema explique por quê.
8
+ *
9
+ * O que este módulo NÃO faz: dizer se o número existe, se está ativo, ou se tem
10
+ * WhatsApp. Nada disso é derivável do formato. Ele responde uma pergunta só —
11
+ * "isto tem a FORMA de um número brasileiro discável?" — e a resposta negativa
12
+ * é confiável, enquanto a positiva é apenas necessária, nunca suficiente.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.parseBrazilPhone = parseBrazilPhone;
16
+ exports.isMessagingCapable = isMessagingCapable;
17
+ exports.toE164OrNull = toE164OrNull;
18
+ exports.maskPhone = maskPhone;
19
+ /**
20
+ * DDDs válidos no Plano Nacional de Numeração.
21
+ *
22
+ * Lista explícita, e não `[1-9][1-9]`, porque a faixa admite combinações que não
23
+ * existem (20, 23, 25, 26, 29, 30, 36, 39, 40, 50, 52, 56, 57, 58, 59, 60, 70,
24
+ * 72, 76, 78, 80, 90). Aceitar um DDD inexistente produz um E.164 bem formado
25
+ * que o provider aceita, cobra e nunca entrega — a pior combinação possível,
26
+ * porque falha silenciosa custa dinheiro e parece sucesso.
27
+ */
28
+ const VALID_AREA_CODES = new Set([
29
+ '11',
30
+ '12',
31
+ '13',
32
+ '14',
33
+ '15',
34
+ '16',
35
+ '17',
36
+ '18',
37
+ '19',
38
+ '21',
39
+ '22',
40
+ '24',
41
+ '27',
42
+ '28',
43
+ '31',
44
+ '32',
45
+ '33',
46
+ '34',
47
+ '35',
48
+ '37',
49
+ '38',
50
+ '41',
51
+ '42',
52
+ '43',
53
+ '44',
54
+ '45',
55
+ '46',
56
+ '47',
57
+ '48',
58
+ '49',
59
+ '51',
60
+ '53',
61
+ '54',
62
+ '55',
63
+ '61',
64
+ '62',
65
+ '63',
66
+ '64',
67
+ '65',
68
+ '66',
69
+ '67',
70
+ '68',
71
+ '69',
72
+ '71',
73
+ '73',
74
+ '74',
75
+ '75',
76
+ '77',
77
+ '79',
78
+ '81',
79
+ '82',
80
+ '83',
81
+ '84',
82
+ '85',
83
+ '86',
84
+ '87',
85
+ '88',
86
+ '89',
87
+ '91',
88
+ '92',
89
+ '93',
90
+ '94',
91
+ '95',
92
+ '96',
93
+ '97',
94
+ '98',
95
+ '99',
96
+ ]);
97
+ /**
98
+ * Normaliza um telefone digitado por gente.
99
+ *
100
+ * Aceita o que o operador realmente digita: `(62) 99999-8888`, `62999998888`,
101
+ * `+55 62 99999 8888`, `55 62 9999-8888`, com espaço, ponto, barra ou traço.
102
+ *
103
+ * A ambiguidade real é o `55`: ele é DDI (Brasil) e também DDD (Rio Grande do
104
+ * Sul). `5551999998888` tem 13 dígitos e é `+55 51 99999-8888`; `5599998888`
105
+ * tem 10 e é `(55) 9999-8888`, um fixo gaúcho. O tamanho resolve — e é por isso
106
+ * que a decisão é tomada pelo COMPRIMENTO antes de olhar o prefixo, nunca ao
107
+ * contrário.
108
+ */
109
+ function parseBrazilPhone(raw) {
110
+ if (!raw)
111
+ return { ok: false, reason: 'empty' };
112
+ // Um `+` em qualquer posição só importa no começo; o resto é ruído de
113
+ // digitação. Guardamos a intenção de DDI antes de descartar tudo que não é
114
+ // dígito, porque depois disso `+55…` e `55…` seriam indistinguíveis.
115
+ const trimmed = raw.trim();
116
+ const hadPlus = trimmed.startsWith('+');
117
+ const digits = trimmed.replace(/\D/g, '');
118
+ if (!digits)
119
+ return { ok: false, reason: 'empty' };
120
+ // Com `+` explícito, o DDI é o que veio. `+1` não é problema nosso: recusar é
121
+ // honesto, adivinhar seria inventar um número.
122
+ if (hadPlus && !digits.startsWith('55'))
123
+ return { ok: false, reason: 'foreign' };
124
+ let national;
125
+ if (digits.length === 12 || digits.length === 13) {
126
+ // DDI + DDD + 8 ou 9 dígitos.
127
+ if (!digits.startsWith('55'))
128
+ return { ok: false, reason: 'foreign' };
129
+ national = digits.slice(2);
130
+ }
131
+ else if (digits.length === 10 || digits.length === 11) {
132
+ // DDD + 8 ou 9 dígitos, sem DDI.
133
+ national = digits;
134
+ }
135
+ else {
136
+ return { ok: false, reason: 'length' };
137
+ }
138
+ const areaCode = national.slice(0, 2);
139
+ if (!VALID_AREA_CODES.has(areaCode))
140
+ return { ok: false, reason: 'ddd' };
141
+ const subscriber = national.slice(2);
142
+ if (subscriber.length === 9) {
143
+ // Celular: nono dígito é sempre 9, e o dígito seguinte nunca é 0 nem 1.
144
+ if (subscriber[0] !== '9')
145
+ return { ok: false, reason: 'not_dialable' };
146
+ if (subscriber[1] === '0' || subscriber[1] === '1') {
147
+ return { ok: false, reason: 'not_dialable' };
148
+ }
149
+ return { ok: true, e164: `+55${national}`, kind: 'mobile', areaCode, national };
150
+ }
151
+ // Oito dígitos: fixo. Celular de 8 dígitos não existe mais desde a
152
+ // implantação do nono dígito, e RECUSAR é melhor do que completar com um `9`
153
+ // — completar significa mandar mensagem para um número que o escritório nunca
154
+ // digitou, e que pode pertencer a outra pessoa.
155
+ const first = subscriber[0];
156
+ if (first === '0' || first === '1')
157
+ return { ok: false, reason: 'not_dialable' };
158
+ return { ok: true, e164: `+55${national}`, kind: 'landline', areaCode, national };
159
+ }
160
+ /**
161
+ * O número serve para WhatsApp/SMS?
162
+ *
163
+ * Só celular. Fixo é discável e válido — e é exatamente por isso que precisa de
164
+ * uma checagem própria: ele passa em `parseBrazilPhone`, o provider aceita a
165
+ * requisição, e a mensagem nunca chega. Um "erro" que não aparece em lugar
166
+ * nenhum, mês após mês.
167
+ */
168
+ function isMessagingCapable(parsed) {
169
+ return parsed.ok && parsed.kind === 'mobile';
170
+ }
171
+ /** Conveniência para gravar em `client.phone_e164`. `null` quando não dá. */
172
+ function toE164OrNull(raw) {
173
+ const parsed = parseBrazilPhone(raw);
174
+ return parsed.ok ? parsed.e164 : null;
175
+ }
176
+ /**
177
+ * Versão para log e tela: `+55 (62) 9****-**88`.
178
+ *
179
+ * A trilha precisa provar PARA ONDE foi, e um telefone inteiro em log é PII que
180
+ * vaza em screenshot, exportação e print de suporte. Os quatro caracteres
181
+ * visíveis bastam para o operador reconhecer o número que ele mesmo cadastrou,
182
+ * e não bastam para discar.
183
+ */
184
+ function maskPhone(e164) {
185
+ const digits = e164.replace(/\D/g, '');
186
+ if (digits.length < 6)
187
+ return '***';
188
+ const tail = digits.slice(-2);
189
+ const areaCode = digits.startsWith('55') ? digits.slice(2, 4) : digits.slice(0, 2);
190
+ return `+55 (${areaCode}) *****-**${tail}`;
191
+ }
192
+ //# sourceMappingURL=phone.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phone.js","sourceRoot":"","sources":["../../../src/contacts/phone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.seedCatalogs = seedCatalogs;
4
+ /**
5
+ * Catálogos globais — RBAC, produtos do ecossistema e planos do SaaS.
6
+ *
7
+ * Isto NÃO é seed de dados de exemplo. São tabelas de configuração sem as quais
8
+ * o produto não opera: sem o catálogo de planos, `GET /v1/plans` responde uma
9
+ * lista vazia e ninguém consegue assinar. É schema lógico, não fixture.
10
+ *
11
+ * Por isso vive separado de `seed.ts`, que materializa o tenant fundador e um
12
+ * usuário administrador de desenvolvimento. Aquele seed usa
13
+ * `upsertUserWithPassword`, que faz `ON CONFLICT DO UPDATE SET password_hash` —
14
+ * rodá-lo contra um banco em uso redefine a senha de quem já existe. Este aqui
15
+ * não toca em `user`, `user_credential`, `tenant` nem `membership`.
16
+ *
17
+ * Idempotente e seguro para rodar a cada boot. Uso: `pnpm db:seed:catalog`.
18
+ */
19
+ const index_js_1 = require("../index.js");
20
+ const client_js_1 = require("./client.js");
21
+ const load_env_js_1 = require("./load-env.js");
22
+ async function seedCatalogs(db) {
23
+ await (0, index_js_1.ensureRbacCatalog)(db);
24
+ await (0, index_js_1.ensureProductCatalog)(db);
25
+ await (0, index_js_1.seedSaasPlans)(db);
26
+ }
27
+ async function main() {
28
+ (0, load_env_js_1.loadEnv)();
29
+ const ownerUrl = process.env.DATABASE_URL;
30
+ if (!ownerUrl)
31
+ throw new Error('DATABASE_URL (papel owner) não definida.');
32
+ const db = (0, client_js_1.createDb)(ownerUrl, { role: 'owner', max: 1 });
33
+ try {
34
+ await seedCatalogs(db);
35
+ console.log('✓ Catálogos garantidos: RBAC, produtos do ecossistema e planos SaaS.');
36
+ }
37
+ finally {
38
+ await db.end({ timeout: 5 });
39
+ }
40
+ }
41
+ // Só executa quando chamado direto — permite importar `seedCatalogs` de outro seed.
42
+ if (process.argv[1]?.endsWith('seed-catalog.ts') || process.argv[1]?.endsWith('seed-catalog.js')) {
43
+ main().catch((error) => {
44
+ console.error('✗ Falha ao garantir os catálogos:', error instanceof Error ? error.message : error);
45
+ process.exit(1);
46
+ });
47
+ }
48
+ //# sourceMappingURL=seed-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-catalog.js","sourceRoot":"","sources":["../../../src/db/seed-catalog.ts"],"names":[],"mappings":";;AAmBA,oCAIC;AAvBD;;;;;;;;;;;;;;GAcG;AACH,0CAAqF;AACrF,2CAAuC;AACvC,+CAAwC;AAEjC,KAAK,UAAU,YAAY,CAAC,EAA2C;IAC5E,MAAM,IAAA,4BAAiB,EAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,IAAA,+BAAoB,EAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,IAAA,wBAAa,EAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,IAAA,qBAAO,GAAE,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAE3E,MAAM,EAAE,GAAG,IAAA,oBAAQ,EAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACjG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACrB,OAAO,CAAC,KAAK,CACX,mCAAmC,EACnC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  *
13
13
  * Idempotente. Uso: `pnpm db:seed`.
14
14
  */
15
+ const seed_catalog_js_1 = require("./seed-catalog.js");
15
16
  const index_js_1 = require("../index.js");
16
17
  async function main() {
17
18
  (0, index_js_1.loadEnv)();
@@ -24,9 +25,9 @@ async function main() {
24
25
  const db = (0, index_js_1.createDb)(ownerUrl, { role: 'owner', max: 1 });
25
26
  try {
26
27
  // 1) Catálogos globais: RBAC + produtos do ecossistema.
27
- await (0, index_js_1.ensureRbacCatalog)(db);
28
- await (0, index_js_1.ensureProductCatalog)(db);
29
- console.log('✓ Catálogos garantidos (RBAC + produtos do ecossistema).');
28
+ // Delegado a seed-catalog.ts — mesma fonte usada no boot da API.
29
+ await (0, seed_catalog_js_1.seedCatalogs)(db);
30
+ console.log('✓ Catálogos garantidos (RBAC, produtos e planos SaaS).');
30
31
  // 2) Tenant fundador SC — dados legais não confirmados ficam NULOS.
31
32
  const tenantId = await (0, index_js_1.ensureTenant)(db, {
32
33
  code: 'sc',
@@ -41,21 +42,28 @@ async function main() {
41
42
  await (0, index_js_1.ensureTenantProduct)(db, tenantId, 'contabil');
42
43
  console.log('✓ Entitlement do produto Baruk Contábil concedido à SC.');
43
44
  // 4) Usuário administrador de DESENVOLVIMENTO (não é dado real de sócio).
45
+ //
46
+ // A senha só é gravada se a conta ainda não tiver credencial. Rodar este
47
+ // seed contra um ambiente já inicializado NÃO troca a senha de quem
48
+ // administra — ver a nota em `upsertUserWithPassword`. Para redefinir de
49
+ // propósito, use `SEED_OVERWRITE_ADMIN_PASSWORD=1`, que obriga quem executa
50
+ // a declarar a intenção no comando.
44
51
  const adminEmail = 'admin@sc.baruk.dev';
52
+ const overwritePassword = process.env.SEED_OVERWRITE_ADMIN_PASSWORD === '1';
45
53
  const admin = await (0, index_js_1.upsertUserWithPassword)(db, {
46
54
  email: adminEmail,
47
55
  fullName: 'Administrador SC (dev)',
48
56
  password: adminPassword,
49
57
  userType: 'staff',
58
+ overwritePassword,
50
59
  });
51
- console.log(`✓ Usuário admin (dev) garantido: ${admin.email}`);
60
+ console.log(admin.passwordWasSet
61
+ ? `✓ Usuário admin (dev) garantido: ${admin.email} (senha ${overwritePassword ? 'REDEFINIDA' : 'definida'})`
62
+ : `✓ Usuário admin (dev) já existia: ${admin.email} (senha PRESERVADA — use SEED_OVERWRITE_ADMIN_PASSWORD=1 para redefinir)`);
52
63
  // 5) Vínculo + papel Owner.
53
64
  await (0, index_js_1.ensureMembership)(db, tenantId, admin.id);
54
65
  await (0, index_js_1.assignSystemRole)(db, tenantId, admin.id, 'owner');
55
66
  console.log('✓ Membership + papel Owner atribuídos ao admin no tenant SC.');
56
- // 6) Catálogo de planos do SaaS (BILL-01) — idempotente.
57
- await (0, index_js_1.seedSaasPlans)(db);
58
- console.log('✓ Catálogo de planos SaaS garantido (starter/pro/enterprise/pro-anual).');
59
67
  console.log('\n✓ Seed concluído. Login dev: admin@sc.baruk.dev / (SEED_ADMIN_PASSWORD)');
60
68
  }
61
69
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/db/seed.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;GAWG;AACH,0CAYqB;AAErB,KAAK,UAAU,IAAI;IACjB,IAAA,kBAAO,GAAE,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEzE,MAAM,EAAE,GAAG,IAAA,mBAAQ,EAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,wDAAwD;QACxD,MAAM,IAAA,4BAAiB,EAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,IAAA,+BAAoB,EAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QAExE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,MAAM,IAAA,uBAAY,EAAC,EAAE,EAAE;YACtC,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,yBAAyB;YACtC,SAAS,EAAE,IAAI,EAAE,uDAAuD;YACxE,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,UAAU;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QAElD,oEAAoE;QACpE,MAAM,IAAA,6BAAkB,EAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAA,8BAAmB,EAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QAEvE,0EAA0E;QAC1E,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,IAAA,iCAAsB,EAAC,EAAE,EAAE;YAC7C,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,wBAAwB;YAClC,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oCAAoC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAE/D,4BAA4B;QAC5B,MAAM,IAAA,2BAAgB,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,IAAA,2BAAgB,EAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAE5E,yDAAyD;QACzD,MAAM,IAAA,wBAAa,EAAC,EAAE,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC;QAEvF,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../../src/db/seed.ts"],"names":[],"mappings":"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"}