@baruk/core 0.3.1 → 0.5.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 (1047) hide show
  1. package/.baruk-provenance.json +10 -0
  2. package/CHANGELOG.md +127 -0
  3. package/dist/audit/repository.d.ts +33 -1
  4. package/dist/audit/repository.d.ts.map +1 -1
  5. package/dist/audit/repository.js +41 -7
  6. package/dist/audit/repository.js.map +1 -1
  7. package/dist/auth/password-reset.d.ts +30 -1
  8. package/dist/auth/password-reset.d.ts.map +1 -1
  9. package/dist/auth/password-reset.js +139 -11
  10. package/dist/auth/password-reset.js.map +1 -1
  11. package/dist/auth/service.d.ts +60 -2
  12. package/dist/auth/service.d.ts.map +1 -1
  13. package/dist/auth/service.js +121 -11
  14. package/dist/auth/service.js.map +1 -1
  15. package/dist/billing/ar-repository.d.ts +374 -0
  16. package/dist/billing/ar-repository.d.ts.map +1 -0
  17. package/dist/billing/ar-repository.js +783 -0
  18. package/dist/billing/ar-repository.js.map +1 -0
  19. package/dist/billing/auto-generation.d.ts +87 -0
  20. package/dist/billing/auto-generation.d.ts.map +1 -0
  21. package/dist/billing/auto-generation.js +181 -0
  22. package/dist/billing/auto-generation.js.map +1 -0
  23. package/dist/billing/live-guard.d.ts +64 -0
  24. package/dist/billing/live-guard.d.ts.map +1 -0
  25. package/dist/billing/live-guard.js +68 -0
  26. package/dist/billing/live-guard.js.map +1 -0
  27. package/dist/billing/payment-means-catalog.d.ts +17 -0
  28. package/dist/billing/payment-means-catalog.d.ts.map +1 -0
  29. package/dist/billing/payment-means-catalog.js +21 -0
  30. package/dist/billing/payment-means-catalog.js.map +1 -0
  31. package/dist/billing/payment-means.d.ts +38 -0
  32. package/dist/billing/payment-means.d.ts.map +1 -0
  33. package/dist/billing/payment-means.js +29 -0
  34. package/dist/billing/payment-means.js.map +1 -0
  35. package/dist/billing/payment-rail.d.ts +118 -0
  36. package/dist/billing/payment-rail.d.ts.map +1 -0
  37. package/dist/billing/payment-rail.js +295 -0
  38. package/dist/billing/payment-rail.js.map +1 -0
  39. package/dist/billing/provider/asaas.d.ts +46 -1
  40. package/dist/billing/provider/asaas.d.ts.map +1 -1
  41. package/dist/billing/provider/asaas.js +194 -14
  42. package/dist/billing/provider/asaas.js.map +1 -1
  43. package/dist/billing/provider/manual.js +1 -1
  44. package/dist/billing/provider/manual.js.map +1 -1
  45. package/dist/billing/provider/types.d.ts +115 -8
  46. package/dist/billing/provider/types.d.ts.map +1 -1
  47. package/dist/billing/provider-account.d.ts +127 -0
  48. package/dist/billing/provider-account.d.ts.map +1 -0
  49. package/dist/billing/provider-account.js +217 -0
  50. package/dist/billing/provider-account.js.map +1 -0
  51. package/dist/billing/provider-onboarding.d.ts +67 -0
  52. package/dist/billing/provider-onboarding.d.ts.map +1 -0
  53. package/dist/billing/provider-onboarding.js +234 -0
  54. package/dist/billing/provider-onboarding.js.map +1 -0
  55. package/dist/billing/receivable.d.ts +5 -1
  56. package/dist/billing/receivable.d.ts.map +1 -1
  57. package/dist/billing/reconcile.d.ts +58 -0
  58. package/dist/billing/reconcile.d.ts.map +1 -0
  59. package/dist/billing/reconcile.js +138 -0
  60. package/dist/billing/reconcile.js.map +1 -0
  61. package/dist/billing/repository.d.ts +134 -1
  62. package/dist/billing/repository.d.ts.map +1 -1
  63. package/dist/billing/repository.js +193 -20
  64. package/dist/billing/repository.js.map +1 -1
  65. package/dist/cjs/audit/repository.js +41 -7
  66. package/dist/cjs/audit/repository.js.map +1 -1
  67. package/dist/cjs/auth/password-reset.js +141 -11
  68. package/dist/cjs/auth/password-reset.js.map +1 -1
  69. package/dist/cjs/auth/service.js +121 -10
  70. package/dist/cjs/auth/service.js.map +1 -1
  71. package/dist/cjs/billing/ar-repository.js +804 -0
  72. package/dist/cjs/billing/ar-repository.js.map +1 -0
  73. package/dist/cjs/billing/auto-generation.js +186 -0
  74. package/dist/cjs/billing/auto-generation.js.map +1 -0
  75. package/dist/cjs/billing/live-guard.js +72 -0
  76. package/dist/cjs/billing/live-guard.js.map +1 -0
  77. package/dist/cjs/billing/payment-means-catalog.js +25 -0
  78. package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
  79. package/dist/cjs/billing/payment-means.js +33 -0
  80. package/dist/cjs/billing/payment-means.js.map +1 -0
  81. package/dist/cjs/billing/payment-rail.js +301 -0
  82. package/dist/cjs/billing/payment-rail.js.map +1 -0
  83. package/dist/cjs/billing/provider/asaas.js +194 -14
  84. package/dist/cjs/billing/provider/asaas.js.map +1 -1
  85. package/dist/cjs/billing/provider/manual.js +1 -1
  86. package/dist/cjs/billing/provider/manual.js.map +1 -1
  87. package/dist/cjs/billing/provider-account.js +229 -0
  88. package/dist/cjs/billing/provider-account.js.map +1 -0
  89. package/dist/cjs/billing/provider-onboarding.js +239 -0
  90. package/dist/cjs/billing/provider-onboarding.js.map +1 -0
  91. package/dist/cjs/billing/reconcile.js +143 -0
  92. package/dist/cjs/billing/reconcile.js.map +1 -0
  93. package/dist/cjs/billing/repository.js +197 -19
  94. package/dist/cjs/billing/repository.js.map +1 -1
  95. package/dist/cjs/clients/ibge.js +103 -0
  96. package/dist/cjs/clients/ibge.js.map +1 -0
  97. package/dist/cjs/clients/repository.js +276 -23
  98. package/dist/cjs/clients/repository.js.map +1 -1
  99. package/dist/cjs/collection/branding.js +330 -0
  100. package/dist/cjs/collection/branding.js.map +1 -0
  101. package/dist/cjs/collection/channel-accounts.js +137 -0
  102. package/dist/cjs/collection/channel-accounts.js.map +1 -0
  103. package/dist/cjs/collection/channel.js +17 -0
  104. package/dist/cjs/collection/channel.js.map +1 -0
  105. package/dist/cjs/collection/clearance-store.js +74 -0
  106. package/dist/cjs/collection/clearance-store.js.map +1 -0
  107. package/dist/cjs/collection/communication-bridge.js +140 -0
  108. package/dist/cjs/collection/communication-bridge.js.map +1 -0
  109. package/dist/cjs/collection/communication-runtime.js +256 -0
  110. package/dist/cjs/collection/communication-runtime.js.map +1 -0
  111. package/dist/cjs/collection/consent-repository.js +84 -0
  112. package/dist/cjs/collection/consent-repository.js.map +1 -0
  113. package/dist/cjs/collection/copy.js +125 -0
  114. package/dist/cjs/collection/copy.js.map +1 -0
  115. package/dist/cjs/collection/delivery-callback.js +151 -0
  116. package/dist/cjs/collection/delivery-callback.js.map +1 -0
  117. package/dist/cjs/collection/email-layout.js +252 -0
  118. package/dist/cjs/collection/email-layout.js.map +1 -0
  119. package/dist/cjs/collection/engine.js +434 -0
  120. package/dist/cjs/collection/engine.js.map +1 -0
  121. package/dist/cjs/collection/format.js +76 -0
  122. package/dist/cjs/collection/format.js.map +1 -0
  123. package/dist/cjs/collection/payment-block.js +3 -0
  124. package/dist/cjs/collection/payment-block.js.map +1 -0
  125. package/dist/cjs/collection/policy.js +175 -0
  126. package/dist/cjs/collection/policy.js.map +1 -0
  127. package/dist/cjs/collection/repository.js +260 -0
  128. package/dist/cjs/collection/repository.js.map +1 -0
  129. package/dist/cjs/collection/subject.js +104 -0
  130. package/dist/cjs/collection/subject.js.map +1 -0
  131. package/dist/cjs/collection/template-catalog.js +165 -0
  132. package/dist/cjs/collection/template-catalog.js.map +1 -0
  133. package/dist/cjs/collection/template.js +78 -0
  134. package/dist/cjs/collection/template.js.map +1 -0
  135. package/dist/cjs/communication/adapters/email.js +132 -0
  136. package/dist/cjs/communication/adapters/email.js.map +1 -0
  137. package/dist/cjs/communication/adapters/sms.js +127 -0
  138. package/dist/cjs/communication/adapters/sms.js.map +1 -0
  139. package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
  140. package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
  141. package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
  142. package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
  143. package/dist/cjs/communication/adapters/whatsapp.js +213 -0
  144. package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
  145. package/dist/cjs/communication/audit.js +61 -0
  146. package/dist/cjs/communication/audit.js.map +1 -0
  147. package/dist/cjs/communication/capabilities.js +76 -0
  148. package/dist/cjs/communication/capabilities.js.map +1 -0
  149. package/dist/cjs/communication/channel.js +53 -0
  150. package/dist/cjs/communication/channel.js.map +1 -0
  151. package/dist/cjs/communication/claim.js +228 -0
  152. package/dist/cjs/communication/claim.js.map +1 -0
  153. package/dist/cjs/communication/clearance.js +18 -0
  154. package/dist/cjs/communication/clearance.js.map +1 -0
  155. package/dist/cjs/communication/consent.js +43 -0
  156. package/dist/cjs/communication/consent.js.map +1 -0
  157. package/dist/cjs/communication/context.js +45 -0
  158. package/dist/cjs/communication/context.js.map +1 -0
  159. package/dist/cjs/communication/credentials.js +121 -0
  160. package/dist/cjs/communication/credentials.js.map +1 -0
  161. package/dist/cjs/communication/dry-run-scenario.js +166 -0
  162. package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
  163. package/dist/cjs/communication/dry-run.js +97 -0
  164. package/dist/cjs/communication/dry-run.js.map +1 -0
  165. package/dist/cjs/communication/engine.js +495 -0
  166. package/dist/cjs/communication/engine.js.map +1 -0
  167. package/dist/cjs/communication/graph.js +50 -0
  168. package/dist/cjs/communication/graph.js.map +1 -0
  169. package/dist/cjs/communication/idempotency.js +26 -0
  170. package/dist/cjs/communication/idempotency.js.map +1 -0
  171. package/dist/cjs/communication/identity.js +110 -0
  172. package/dist/cjs/communication/identity.js.map +1 -0
  173. package/dist/cjs/communication/index.js +135 -0
  174. package/dist/cjs/communication/index.js.map +1 -0
  175. package/dist/cjs/communication/onboarding.js +297 -0
  176. package/dist/cjs/communication/onboarding.js.map +1 -0
  177. package/dist/cjs/communication/policy.js +16 -0
  178. package/dist/cjs/communication/policy.js.map +1 -0
  179. package/dist/cjs/communication/routing.js +77 -0
  180. package/dist/cjs/communication/routing.js.map +1 -0
  181. package/dist/cjs/communication/sender-profile.js +128 -0
  182. package/dist/cjs/communication/sender-profile.js.map +1 -0
  183. package/dist/cjs/communication/status.js +86 -0
  184. package/dist/cjs/communication/status.js.map +1 -0
  185. package/dist/cjs/communication/stores/onboarding.js +135 -0
  186. package/dist/cjs/communication/stores/onboarding.js.map +1 -0
  187. package/dist/cjs/communication/stores/postgres.js +458 -0
  188. package/dist/cjs/communication/stores/postgres.js.map +1 -0
  189. package/dist/cjs/communication/stores/routing.js +334 -0
  190. package/dist/cjs/communication/stores/routing.js.map +1 -0
  191. package/dist/cjs/communication/stores/secrets.js +126 -0
  192. package/dist/cjs/communication/stores/secrets.js.map +1 -0
  193. package/dist/cjs/communication/template-provider.js +22 -0
  194. package/dist/cjs/communication/template-provider.js.map +1 -0
  195. package/dist/cjs/communication/template.js +63 -0
  196. package/dist/cjs/communication/template.js.map +1 -0
  197. package/dist/cjs/communication/webhook-subscription.js +258 -0
  198. package/dist/cjs/communication/webhook-subscription.js.map +1 -0
  199. package/dist/cjs/communication/webhook.js +292 -0
  200. package/dist/cjs/communication/webhook.js.map +1 -0
  201. package/dist/cjs/competence/business-days.js +155 -0
  202. package/dist/cjs/competence/business-days.js.map +1 -0
  203. package/dist/cjs/competence/catalog-validation.js +174 -0
  204. package/dist/cjs/competence/catalog-validation.js.map +1 -0
  205. package/dist/cjs/competence/obligation-preview.js +190 -0
  206. package/dist/cjs/competence/obligation-preview.js.map +1 -0
  207. package/dist/cjs/competence/repository.js +622 -0
  208. package/dist/cjs/competence/repository.js.map +1 -0
  209. package/dist/cjs/contacts/phone.js +192 -0
  210. package/dist/cjs/contacts/phone.js.map +1 -0
  211. package/dist/cjs/dashboard/pilot-panel.js +90 -0
  212. package/dist/cjs/dashboard/pilot-panel.js.map +1 -0
  213. package/dist/cjs/dashboard/repository.js +11 -1
  214. package/dist/cjs/dashboard/repository.js.map +1 -1
  215. package/dist/cjs/db/client.js +17 -11
  216. package/dist/cjs/db/client.js.map +1 -1
  217. package/dist/cjs/db/provision-e2e-identity.js +111 -0
  218. package/dist/cjs/db/provision-e2e-identity.js.map +1 -0
  219. package/dist/cjs/db/seed-catalog.js +48 -0
  220. package/dist/cjs/db/seed-catalog.js.map +1 -0
  221. package/dist/cjs/db/seed.js +15 -7
  222. package/dist/cjs/db/seed.js.map +1 -1
  223. package/dist/cjs/documents/repository.js +244 -0
  224. package/dist/cjs/documents/repository.js.map +1 -0
  225. package/dist/cjs/documents/requests.js +136 -0
  226. package/dist/cjs/documents/requests.js.map +1 -0
  227. package/dist/cjs/fiscal/applicability.js +164 -0
  228. package/dist/cjs/fiscal/applicability.js.map +1 -0
  229. package/dist/cjs/fiscal/conditions.js +198 -0
  230. package/dist/cjs/fiscal/conditions.js.map +1 -0
  231. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js +390 -0
  232. package/dist/cjs/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  233. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js +108 -0
  234. package/dist/cjs/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  235. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js +220 -0
  236. package/dist/cjs/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  237. package/dist/cjs/fiscal/coverage/model.js +127 -0
  238. package/dist/cjs/fiscal/coverage/model.js.map +1 -0
  239. package/dist/cjs/fiscal/coverage/requests.js +99 -0
  240. package/dist/cjs/fiscal/coverage/requests.js.map +1 -0
  241. package/dist/cjs/fiscal/credentials/material.js +168 -0
  242. package/dist/cjs/fiscal/credentials/material.js.map +1 -0
  243. package/dist/cjs/fiscal/credentials/readiness.js +163 -0
  244. package/dist/cjs/fiscal/credentials/readiness.js.map +1 -0
  245. package/dist/cjs/fiscal/eligibility.js +199 -0
  246. package/dist/cjs/fiscal/eligibility.js.map +1 -0
  247. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js +128 -0
  248. package/dist/cjs/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  249. package/dist/cjs/fiscal/ingestion/adn-transport.js +229 -0
  250. package/dist/cjs/fiscal/ingestion/adn-transport.js.map +1 -0
  251. package/dist/cjs/fiscal/ingestion/direction.js +36 -0
  252. package/dist/cjs/fiscal/ingestion/direction.js.map +1 -0
  253. package/dist/cjs/fiscal/ingestion/nfse-adn.js +228 -0
  254. package/dist/cjs/fiscal/ingestion/nfse-adn.js.map +1 -0
  255. package/dist/cjs/fiscal/ingestion/pipeline.js +704 -0
  256. package/dist/cjs/fiscal/ingestion/pipeline.js.map +1 -0
  257. package/dist/cjs/fiscal/ingestion/provider.js +51 -0
  258. package/dist/cjs/fiscal/ingestion/provider.js.map +1 -0
  259. package/dist/cjs/fiscal/ingestion/repository.js +132 -0
  260. package/dist/cjs/fiscal/ingestion/repository.js.map +1 -0
  261. package/dist/cjs/fiscal/ingestion/synthetic-provider.js +103 -0
  262. package/dist/cjs/fiscal/ingestion/synthetic-provider.js.map +1 -0
  263. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js +13 -0
  264. package/dist/cjs/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  265. package/dist/cjs/fiscal/ingestion/synthetic-transport.js +61 -0
  266. package/dist/cjs/fiscal/ingestion/synthetic-transport.js.map +1 -0
  267. package/dist/cjs/fiscal/ingestion/xml-reader.js +121 -0
  268. package/dist/cjs/fiscal/ingestion/xml-reader.js.map +1 -0
  269. package/dist/cjs/fiscal/repository.js +470 -0
  270. package/dist/cjs/fiscal/repository.js.map +1 -0
  271. package/dist/cjs/fiscal/sync/circuit.js +124 -0
  272. package/dist/cjs/fiscal/sync/circuit.js.map +1 -0
  273. package/dist/cjs/fiscal/sync/intervention.js +140 -0
  274. package/dist/cjs/fiscal/sync/intervention.js.map +1 -0
  275. package/dist/cjs/fiscal/sync/lease.js +146 -0
  276. package/dist/cjs/fiscal/sync/lease.js.map +1 -0
  277. package/dist/cjs/fiscal/sync/observability.js +244 -0
  278. package/dist/cjs/fiscal/sync/observability.js.map +1 -0
  279. package/dist/cjs/fiscal/sync/orchestrator.js +490 -0
  280. package/dist/cjs/fiscal/sync/orchestrator.js.map +1 -0
  281. package/dist/cjs/fiscal/sync/policy.js +143 -0
  282. package/dist/cjs/fiscal/sync/policy.js.map +1 -0
  283. package/dist/cjs/fiscal/sync/reprocess.js +241 -0
  284. package/dist/cjs/fiscal/sync/reprocess.js.map +1 -0
  285. package/dist/cjs/fiscal/sync/retry.js +183 -0
  286. package/dist/cjs/fiscal/sync/retry.js.map +1 -0
  287. package/dist/cjs/fiscal/sync/secret-boundary.js +123 -0
  288. package/dist/cjs/fiscal/sync/secret-boundary.js.map +1 -0
  289. package/dist/cjs/fiscal/transport/https.js +309 -0
  290. package/dist/cjs/fiscal/transport/https.js.map +1 -0
  291. package/dist/cjs/fiscal/transport/synthetic-tls.js +328 -0
  292. package/dist/cjs/fiscal/transport/synthetic-tls.js.map +1 -0
  293. package/dist/cjs/fiscal/transport/types.js +93 -0
  294. package/dist/cjs/fiscal/transport/types.js.map +1 -0
  295. package/dist/cjs/import/br-documents.js +85 -0
  296. package/dist/cjs/import/br-documents.js.map +1 -0
  297. package/dist/cjs/import/clients-import.js +347 -40
  298. package/dist/cjs/import/clients-import.js.map +1 -1
  299. package/dist/cjs/index.js +711 -39
  300. package/dist/cjs/index.js.map +1 -1
  301. package/dist/cjs/legal/documents.js +224 -17
  302. package/dist/cjs/legal/documents.js.map +1 -1
  303. package/dist/cjs/legal/index.js +3 -1
  304. package/dist/cjs/legal/index.js.map +1 -1
  305. package/dist/cjs/legal/types.js +1 -0
  306. package/dist/cjs/legal/types.js.map +1 -1
  307. package/dist/cjs/mail/auth-templates.js +29 -0
  308. package/dist/cjs/mail/auth-templates.js.map +1 -0
  309. package/dist/cjs/mail/dedup-store.js +12 -51
  310. package/dist/cjs/mail/dedup-store.js.map +1 -1
  311. package/dist/cjs/mail/index.js +16 -4
  312. package/dist/cjs/mail/index.js.map +1 -1
  313. package/dist/cjs/mail/provider.js +12 -247
  314. package/dist/cjs/mail/provider.js.map +1 -1
  315. package/dist/cjs/mail/resend.js +14 -18
  316. package/dist/cjs/mail/resend.js.map +1 -1
  317. package/dist/cjs/mail/sender-resolver.js +12 -11
  318. package/dist/cjs/mail/sender-resolver.js.map +1 -1
  319. package/dist/cjs/mail/template-renderer.js +11 -16
  320. package/dist/cjs/mail/template-renderer.js.map +1 -1
  321. package/dist/cjs/mail/transactional-outbound.js +117 -0
  322. package/dist/cjs/mail/transactional-outbound.js.map +1 -0
  323. package/dist/cjs/mail/types.js +8 -35
  324. package/dist/cjs/mail/types.js.map +1 -1
  325. package/dist/cjs/onboarding/persistence.js +4 -4
  326. package/dist/cjs/onboarding/persistence.js.map +1 -1
  327. package/dist/cjs/pilot/go-live-checklist.js +212 -0
  328. package/dist/cjs/pilot/go-live-checklist.js.map +1 -0
  329. package/dist/cjs/pilot/milestone.js +79 -0
  330. package/dist/cjs/pilot/milestone.js.map +1 -0
  331. package/dist/cjs/platform/capabilities.js +144 -0
  332. package/dist/cjs/platform/capabilities.js.map +1 -0
  333. package/dist/cjs/platform/job-contract.js +411 -0
  334. package/dist/cjs/platform/job-contract.js.map +1 -0
  335. package/dist/cjs/portal/provisioning.js +144 -0
  336. package/dist/cjs/portal/provisioning.js.map +1 -0
  337. package/dist/cjs/pricing-engine/canonical.js +42 -0
  338. package/dist/cjs/pricing-engine/canonical.js.map +1 -0
  339. package/dist/cjs/pricing-engine/errors.js +6 -1
  340. package/dist/cjs/pricing-engine/errors.js.map +1 -1
  341. package/dist/cjs/pricing-engine/index.js +12 -1
  342. package/dist/cjs/pricing-engine/index.js.map +1 -1
  343. package/dist/cjs/pricing-engine/pipeline.js +200 -26
  344. package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
  345. package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
  346. package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
  347. package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
  348. package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
  349. package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
  350. package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
  351. package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
  352. package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
  353. package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
  354. package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
  355. package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
  356. package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
  357. package/dist/cjs/rbac/authorize.js +28 -0
  358. package/dist/cjs/rbac/authorize.js.map +1 -1
  359. package/dist/cjs/rbac/catalog.js +101 -1
  360. package/dist/cjs/rbac/catalog.js.map +1 -1
  361. package/dist/cjs/rbac/workload-provisioning.js +160 -0
  362. package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
  363. package/dist/cjs/rbac/workload.js +191 -0
  364. package/dist/cjs/rbac/workload.js.map +1 -0
  365. package/dist/cjs/storage/checksum.js +15 -0
  366. package/dist/cjs/storage/checksum.js.map +1 -0
  367. package/dist/cjs/storage/key.js +72 -0
  368. package/dist/cjs/storage/key.js.map +1 -0
  369. package/dist/cjs/storage/local.js +100 -0
  370. package/dist/cjs/storage/local.js.map +1 -0
  371. package/dist/cjs/storage/r2.js +181 -0
  372. package/dist/cjs/storage/r2.js.map +1 -0
  373. package/dist/cjs/storage/registry.js +41 -0
  374. package/dist/cjs/storage/registry.js.map +1 -0
  375. package/dist/cjs/storage/types.js +50 -0
  376. package/dist/cjs/storage/types.js.map +1 -0
  377. package/dist/cjs/subscription-billing/index.js +2 -1
  378. package/dist/cjs/subscription-billing/index.js.map +1 -1
  379. package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
  380. package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
  381. package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
  382. package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
  383. package/dist/cjs/subscription-billing/provider/registry.js +17 -0
  384. package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
  385. package/dist/cjs/subscription-billing/service.js +208 -83
  386. package/dist/cjs/subscription-billing/service.js.map +1 -1
  387. package/dist/cjs/subscription-billing/types.js.map +1 -1
  388. package/dist/cjs/tenancy/features.js +131 -0
  389. package/dist/cjs/tenancy/features.js.map +1 -0
  390. package/dist/cjs/tenancy/provisioning.js +32 -8
  391. package/dist/cjs/tenancy/provisioning.js.map +1 -1
  392. package/dist/cjs/tenancy/settings.js +224 -0
  393. package/dist/cjs/tenancy/settings.js.map +1 -0
  394. package/dist/cjs/users/repository.js +143 -3
  395. package/dist/cjs/users/repository.js.map +1 -1
  396. package/dist/cjs/vault/repository.js +81 -0
  397. package/dist/cjs/vault/repository.js.map +1 -1
  398. package/dist/clients/ibge.d.ts +17 -0
  399. package/dist/clients/ibge.d.ts.map +1 -0
  400. package/dist/clients/ibge.js +98 -0
  401. package/dist/clients/ibge.js.map +1 -0
  402. package/dist/clients/repository.d.ts +196 -0
  403. package/dist/clients/repository.d.ts.map +1 -1
  404. package/dist/clients/repository.js +270 -24
  405. package/dist/clients/repository.js.map +1 -1
  406. package/dist/collection/branding.d.ts +137 -0
  407. package/dist/collection/branding.d.ts.map +1 -0
  408. package/dist/collection/branding.js +322 -0
  409. package/dist/collection/branding.js.map +1 -0
  410. package/dist/collection/channel-accounts.d.ts +57 -0
  411. package/dist/collection/channel-accounts.d.ts.map +1 -0
  412. package/dist/collection/channel-accounts.js +133 -0
  413. package/dist/collection/channel-accounts.js.map +1 -0
  414. package/dist/collection/channel.d.ts +24 -0
  415. package/dist/collection/channel.d.ts.map +1 -0
  416. package/dist/collection/channel.js +16 -0
  417. package/dist/collection/channel.js.map +1 -0
  418. package/dist/collection/clearance-store.d.ts +39 -0
  419. package/dist/collection/clearance-store.d.ts.map +1 -0
  420. package/dist/collection/clearance-store.js +69 -0
  421. package/dist/collection/clearance-store.js.map +1 -0
  422. package/dist/collection/communication-bridge.d.ts +66 -0
  423. package/dist/collection/communication-bridge.d.ts.map +1 -0
  424. package/dist/collection/communication-bridge.js +134 -0
  425. package/dist/collection/communication-bridge.js.map +1 -0
  426. package/dist/collection/communication-runtime.d.ts +132 -0
  427. package/dist/collection/communication-runtime.d.ts.map +1 -0
  428. package/dist/collection/communication-runtime.js +249 -0
  429. package/dist/collection/communication-runtime.js.map +1 -0
  430. package/dist/collection/consent-repository.d.ts +32 -0
  431. package/dist/collection/consent-repository.d.ts.map +1 -0
  432. package/dist/collection/consent-repository.js +79 -0
  433. package/dist/collection/consent-repository.js.map +1 -0
  434. package/dist/collection/copy.d.ts +50 -0
  435. package/dist/collection/copy.d.ts.map +1 -0
  436. package/dist/collection/copy.js +122 -0
  437. package/dist/collection/copy.js.map +1 -0
  438. package/dist/collection/delivery-callback.d.ts +49 -0
  439. package/dist/collection/delivery-callback.d.ts.map +1 -0
  440. package/dist/collection/delivery-callback.js +147 -0
  441. package/dist/collection/delivery-callback.js.map +1 -0
  442. package/dist/collection/email-layout.d.ts +45 -0
  443. package/dist/collection/email-layout.d.ts.map +1 -0
  444. package/dist/collection/email-layout.js +247 -0
  445. package/dist/collection/email-layout.js.map +1 -0
  446. package/dist/collection/engine.d.ts +200 -0
  447. package/dist/collection/engine.d.ts.map +1 -0
  448. package/dist/collection/engine.js +427 -0
  449. package/dist/collection/engine.js.map +1 -0
  450. package/dist/collection/format.d.ts +32 -0
  451. package/dist/collection/format.d.ts.map +1 -0
  452. package/dist/collection/format.js +70 -0
  453. package/dist/collection/format.js.map +1 -0
  454. package/dist/collection/payment-block.d.ts +24 -0
  455. package/dist/collection/payment-block.d.ts.map +1 -0
  456. package/dist/collection/payment-block.js +2 -0
  457. package/dist/collection/payment-block.js.map +1 -0
  458. package/dist/collection/policy.d.ts +78 -0
  459. package/dist/collection/policy.d.ts.map +1 -0
  460. package/dist/collection/policy.js +168 -0
  461. package/dist/collection/policy.js.map +1 -0
  462. package/dist/collection/repository.d.ts +129 -0
  463. package/dist/collection/repository.d.ts.map +1 -0
  464. package/dist/collection/repository.js +246 -0
  465. package/dist/collection/repository.js.map +1 -0
  466. package/dist/collection/subject.d.ts +66 -0
  467. package/dist/collection/subject.d.ts.map +1 -0
  468. package/dist/collection/subject.js +99 -0
  469. package/dist/collection/subject.js.map +1 -0
  470. package/dist/collection/template-catalog.d.ts +16 -0
  471. package/dist/collection/template-catalog.d.ts.map +1 -0
  472. package/dist/collection/template-catalog.js +162 -0
  473. package/dist/collection/template-catalog.js.map +1 -0
  474. package/dist/collection/template.d.ts +37 -0
  475. package/dist/collection/template.d.ts.map +1 -0
  476. package/dist/collection/template.js +73 -0
  477. package/dist/collection/template.js.map +1 -0
  478. package/dist/communication/adapters/email.d.ts +28 -0
  479. package/dist/communication/adapters/email.d.ts.map +1 -0
  480. package/dist/communication/adapters/email.js +129 -0
  481. package/dist/communication/adapters/email.js.map +1 -0
  482. package/dist/communication/adapters/sms.d.ts +95 -0
  483. package/dist/communication/adapters/sms.d.ts.map +1 -0
  484. package/dist/communication/adapters/sms.js +121 -0
  485. package/dist/communication/adapters/sms.js.map +1 -0
  486. package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
  487. package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
  488. package/dist/communication/adapters/whatsapp-language.js +36 -0
  489. package/dist/communication/adapters/whatsapp-language.js.map +1 -0
  490. package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
  491. package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
  492. package/dist/communication/adapters/whatsapp-templates.js +97 -0
  493. package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
  494. package/dist/communication/adapters/whatsapp.d.ts +29 -0
  495. package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
  496. package/dist/communication/adapters/whatsapp.js +210 -0
  497. package/dist/communication/adapters/whatsapp.js.map +1 -0
  498. package/dist/communication/audit.d.ts +105 -0
  499. package/dist/communication/audit.d.ts.map +1 -0
  500. package/dist/communication/audit.js +56 -0
  501. package/dist/communication/audit.js.map +1 -0
  502. package/dist/communication/capabilities.d.ts +88 -0
  503. package/dist/communication/capabilities.d.ts.map +1 -0
  504. package/dist/communication/capabilities.js +72 -0
  505. package/dist/communication/capabilities.js.map +1 -0
  506. package/dist/communication/channel.d.ts +125 -0
  507. package/dist/communication/channel.d.ts.map +1 -0
  508. package/dist/communication/channel.js +47 -0
  509. package/dist/communication/channel.js.map +1 -0
  510. package/dist/communication/claim.d.ts +368 -0
  511. package/dist/communication/claim.d.ts.map +1 -0
  512. package/dist/communication/claim.js +224 -0
  513. package/dist/communication/claim.js.map +1 -0
  514. package/dist/communication/clearance.d.ts +53 -0
  515. package/dist/communication/clearance.d.ts.map +1 -0
  516. package/dist/communication/clearance.js +15 -0
  517. package/dist/communication/clearance.js.map +1 -0
  518. package/dist/communication/consent.d.ts +65 -0
  519. package/dist/communication/consent.d.ts.map +1 -0
  520. package/dist/communication/consent.js +40 -0
  521. package/dist/communication/consent.js.map +1 -0
  522. package/dist/communication/context.d.ts +48 -0
  523. package/dist/communication/context.d.ts.map +1 -0
  524. package/dist/communication/context.js +41 -0
  525. package/dist/communication/context.js.map +1 -0
  526. package/dist/communication/credentials.d.ts +74 -0
  527. package/dist/communication/credentials.d.ts.map +1 -0
  528. package/dist/communication/credentials.js +115 -0
  529. package/dist/communication/credentials.js.map +1 -0
  530. package/dist/communication/dry-run-scenario.d.ts +37 -0
  531. package/dist/communication/dry-run-scenario.d.ts.map +1 -0
  532. package/dist/communication/dry-run-scenario.js +163 -0
  533. package/dist/communication/dry-run-scenario.js.map +1 -0
  534. package/dist/communication/dry-run.d.ts +40 -0
  535. package/dist/communication/dry-run.d.ts.map +1 -0
  536. package/dist/communication/dry-run.js +92 -0
  537. package/dist/communication/dry-run.js.map +1 -0
  538. package/dist/communication/engine.d.ts +163 -0
  539. package/dist/communication/engine.d.ts.map +1 -0
  540. package/dist/communication/engine.js +492 -0
  541. package/dist/communication/engine.js.map +1 -0
  542. package/dist/communication/graph.d.ts +38 -0
  543. package/dist/communication/graph.d.ts.map +1 -0
  544. package/dist/communication/graph.js +45 -0
  545. package/dist/communication/graph.js.map +1 -0
  546. package/dist/communication/idempotency.d.ts +33 -0
  547. package/dist/communication/idempotency.d.ts.map +1 -0
  548. package/dist/communication/idempotency.js +23 -0
  549. package/dist/communication/idempotency.js.map +1 -0
  550. package/dist/communication/identity.d.ts +127 -0
  551. package/dist/communication/identity.d.ts.map +1 -0
  552. package/dist/communication/identity.js +105 -0
  553. package/dist/communication/identity.js.map +1 -0
  554. package/dist/communication/index.d.ts +66 -0
  555. package/dist/communication/index.d.ts.map +1 -0
  556. package/dist/communication/index.js +42 -0
  557. package/dist/communication/index.js.map +1 -0
  558. package/dist/communication/onboarding.d.ts +223 -0
  559. package/dist/communication/onboarding.d.ts.map +1 -0
  560. package/dist/communication/onboarding.js +287 -0
  561. package/dist/communication/onboarding.js.map +1 -0
  562. package/dist/communication/policy.d.ts +115 -0
  563. package/dist/communication/policy.d.ts.map +1 -0
  564. package/dist/communication/policy.js +13 -0
  565. package/dist/communication/policy.js.map +1 -0
  566. package/dist/communication/routing.d.ts +99 -0
  567. package/dist/communication/routing.d.ts.map +1 -0
  568. package/dist/communication/routing.js +73 -0
  569. package/dist/communication/routing.js.map +1 -0
  570. package/dist/communication/sender-profile.d.ts +100 -0
  571. package/dist/communication/sender-profile.d.ts.map +1 -0
  572. package/dist/communication/sender-profile.js +123 -0
  573. package/dist/communication/sender-profile.js.map +1 -0
  574. package/dist/communication/status.d.ts +48 -0
  575. package/dist/communication/status.d.ts.map +1 -0
  576. package/dist/communication/status.js +79 -0
  577. package/dist/communication/status.js.map +1 -0
  578. package/dist/communication/stores/onboarding.d.ts +88 -0
  579. package/dist/communication/stores/onboarding.d.ts.map +1 -0
  580. package/dist/communication/stores/onboarding.js +127 -0
  581. package/dist/communication/stores/onboarding.js.map +1 -0
  582. package/dist/communication/stores/postgres.d.ts +81 -0
  583. package/dist/communication/stores/postgres.d.ts.map +1 -0
  584. package/dist/communication/stores/postgres.js +453 -0
  585. package/dist/communication/stores/postgres.js.map +1 -0
  586. package/dist/communication/stores/routing.d.ts +169 -0
  587. package/dist/communication/stores/routing.d.ts.map +1 -0
  588. package/dist/communication/stores/routing.js +324 -0
  589. package/dist/communication/stores/routing.js.map +1 -0
  590. package/dist/communication/stores/secrets.d.ts +89 -0
  591. package/dist/communication/stores/secrets.d.ts.map +1 -0
  592. package/dist/communication/stores/secrets.js +122 -0
  593. package/dist/communication/stores/secrets.js.map +1 -0
  594. package/dist/communication/template-provider.d.ts +85 -0
  595. package/dist/communication/template-provider.d.ts.map +1 -0
  596. package/dist/communication/template-provider.js +21 -0
  597. package/dist/communication/template-provider.js.map +1 -0
  598. package/dist/communication/template.d.ts +87 -0
  599. package/dist/communication/template.d.ts.map +1 -0
  600. package/dist/communication/template.js +59 -0
  601. package/dist/communication/template.js.map +1 -0
  602. package/dist/communication/webhook-subscription.d.ts +156 -0
  603. package/dist/communication/webhook-subscription.d.ts.map +1 -0
  604. package/dist/communication/webhook-subscription.js +252 -0
  605. package/dist/communication/webhook-subscription.js.map +1 -0
  606. package/dist/communication/webhook.d.ts +121 -0
  607. package/dist/communication/webhook.d.ts.map +1 -0
  608. package/dist/communication/webhook.js +283 -0
  609. package/dist/communication/webhook.js.map +1 -0
  610. package/dist/competence/business-days.d.ts +51 -0
  611. package/dist/competence/business-days.d.ts.map +1 -0
  612. package/dist/competence/business-days.js +145 -0
  613. package/dist/competence/business-days.js.map +1 -0
  614. package/dist/competence/catalog-validation.d.ts +86 -0
  615. package/dist/competence/catalog-validation.d.ts.map +1 -0
  616. package/dist/competence/catalog-validation.js +168 -0
  617. package/dist/competence/catalog-validation.js.map +1 -0
  618. package/dist/competence/obligation-preview.d.ts +103 -0
  619. package/dist/competence/obligation-preview.d.ts.map +1 -0
  620. package/dist/competence/obligation-preview.js +184 -0
  621. package/dist/competence/obligation-preview.js.map +1 -0
  622. package/dist/competence/repository.d.ts +285 -0
  623. package/dist/competence/repository.d.ts.map +1 -0
  624. package/dist/competence/repository.js +602 -0
  625. package/dist/competence/repository.js.map +1 -0
  626. package/dist/contacts/phone.d.ts +70 -0
  627. package/dist/contacts/phone.d.ts.map +1 -0
  628. package/dist/contacts/phone.js +186 -0
  629. package/dist/contacts/phone.js.map +1 -0
  630. package/dist/dashboard/pilot-panel.d.ts +100 -0
  631. package/dist/dashboard/pilot-panel.d.ts.map +1 -0
  632. package/dist/dashboard/pilot-panel.js +87 -0
  633. package/dist/dashboard/pilot-panel.js.map +1 -0
  634. package/dist/dashboard/repository.d.ts.map +1 -1
  635. package/dist/dashboard/repository.js +11 -1
  636. package/dist/dashboard/repository.js.map +1 -1
  637. package/dist/db/client.d.ts +45 -0
  638. package/dist/db/client.d.ts.map +1 -1
  639. package/dist/db/client.js +16 -11
  640. package/dist/db/client.js.map +1 -1
  641. package/dist/db/migrate.d.ts +36 -1
  642. package/dist/db/migrate.d.ts.map +1 -1
  643. package/dist/db/migrate.js +208 -35
  644. package/dist/db/migrate.js.map +1 -1
  645. package/dist/db/provision-e2e-identity.d.ts +2 -0
  646. package/dist/db/provision-e2e-identity.d.ts.map +1 -0
  647. package/dist/db/provision-e2e-identity.js +109 -0
  648. package/dist/db/provision-e2e-identity.js.map +1 -0
  649. package/dist/db/seed-catalog.d.ts +18 -0
  650. package/dist/db/seed-catalog.d.ts.map +1 -0
  651. package/dist/db/seed-catalog.js +45 -0
  652. package/dist/db/seed-catalog.js.map +1 -0
  653. package/dist/db/seed.js +16 -8
  654. package/dist/db/seed.js.map +1 -1
  655. package/dist/documents/repository.d.ts +97 -0
  656. package/dist/documents/repository.d.ts.map +1 -0
  657. package/dist/documents/repository.js +236 -0
  658. package/dist/documents/repository.js.map +1 -0
  659. package/dist/documents/requests.d.ts +73 -0
  660. package/dist/documents/requests.d.ts.map +1 -0
  661. package/dist/documents/requests.js +127 -0
  662. package/dist/documents/requests.js.map +1 -0
  663. package/dist/fiscal/applicability.d.ts +73 -0
  664. package/dist/fiscal/applicability.d.ts.map +1 -0
  665. package/dist/fiscal/applicability.js +160 -0
  666. package/dist/fiscal/applicability.js.map +1 -0
  667. package/dist/fiscal/conditions.d.ts +99 -0
  668. package/dist/fiscal/conditions.d.ts.map +1 -0
  669. package/dist/fiscal/conditions.js +190 -0
  670. package/dist/fiscal/conditions.js.map +1 -0
  671. package/dist/fiscal/contracts/nfse-adn-contract.d.ts +315 -0
  672. package/dist/fiscal/contracts/nfse-adn-contract.d.ts.map +1 -0
  673. package/dist/fiscal/contracts/nfse-adn-contract.js +386 -0
  674. package/dist/fiscal/contracts/nfse-adn-contract.js.map +1 -0
  675. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts +13 -0
  676. package/dist/fiscal/contracts/nfse-adn-endpoint.d.ts.map +1 -0
  677. package/dist/fiscal/contracts/nfse-adn-endpoint.js +103 -0
  678. package/dist/fiscal/contracts/nfse-adn-endpoint.js.map +1 -0
  679. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts +77 -0
  680. package/dist/fiscal/contracts/nfse-adn-envelope.d.ts.map +1 -0
  681. package/dist/fiscal/contracts/nfse-adn-envelope.js +215 -0
  682. package/dist/fiscal/contracts/nfse-adn-envelope.js.map +1 -0
  683. package/dist/fiscal/coverage/model.d.ts +86 -0
  684. package/dist/fiscal/coverage/model.d.ts.map +1 -0
  685. package/dist/fiscal/coverage/model.js +120 -0
  686. package/dist/fiscal/coverage/model.js.map +1 -0
  687. package/dist/fiscal/coverage/requests.d.ts +70 -0
  688. package/dist/fiscal/coverage/requests.d.ts.map +1 -0
  689. package/dist/fiscal/coverage/requests.js +95 -0
  690. package/dist/fiscal/coverage/requests.js.map +1 -0
  691. package/dist/fiscal/credentials/material.d.ts +81 -0
  692. package/dist/fiscal/credentials/material.d.ts.map +1 -0
  693. package/dist/fiscal/credentials/material.js +164 -0
  694. package/dist/fiscal/credentials/material.js.map +1 -0
  695. package/dist/fiscal/credentials/readiness.d.ts +92 -0
  696. package/dist/fiscal/credentials/readiness.d.ts.map +1 -0
  697. package/dist/fiscal/credentials/readiness.js +159 -0
  698. package/dist/fiscal/credentials/readiness.js.map +1 -0
  699. package/dist/fiscal/eligibility.d.ts +106 -0
  700. package/dist/fiscal/eligibility.d.ts.map +1 -0
  701. package/dist/fiscal/eligibility.js +194 -0
  702. package/dist/fiscal/eligibility.js.map +1 -0
  703. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts +57 -0
  704. package/dist/fiscal/ingestion/__fixtures__/nfse.d.ts.map +1 -0
  705. package/dist/fiscal/ingestion/__fixtures__/nfse.js +121 -0
  706. package/dist/fiscal/ingestion/__fixtures__/nfse.js.map +1 -0
  707. package/dist/fiscal/ingestion/adn-transport.d.ts +123 -0
  708. package/dist/fiscal/ingestion/adn-transport.d.ts.map +1 -0
  709. package/dist/fiscal/ingestion/adn-transport.js +220 -0
  710. package/dist/fiscal/ingestion/adn-transport.js.map +1 -0
  711. package/dist/fiscal/ingestion/direction.d.ts +60 -0
  712. package/dist/fiscal/ingestion/direction.d.ts.map +1 -0
  713. package/dist/fiscal/ingestion/direction.js +32 -0
  714. package/dist/fiscal/ingestion/direction.js.map +1 -0
  715. package/dist/fiscal/ingestion/nfse-adn.d.ts +91 -0
  716. package/dist/fiscal/ingestion/nfse-adn.d.ts.map +1 -0
  717. package/dist/fiscal/ingestion/nfse-adn.js +222 -0
  718. package/dist/fiscal/ingestion/nfse-adn.js.map +1 -0
  719. package/dist/fiscal/ingestion/pipeline.d.ts +168 -0
  720. package/dist/fiscal/ingestion/pipeline.d.ts.map +1 -0
  721. package/dist/fiscal/ingestion/pipeline.js +699 -0
  722. package/dist/fiscal/ingestion/pipeline.js.map +1 -0
  723. package/dist/fiscal/ingestion/provider.d.ts +206 -0
  724. package/dist/fiscal/ingestion/provider.d.ts.map +1 -0
  725. package/dist/fiscal/ingestion/provider.js +47 -0
  726. package/dist/fiscal/ingestion/provider.js.map +1 -0
  727. package/dist/fiscal/ingestion/repository.d.ts +82 -0
  728. package/dist/fiscal/ingestion/repository.d.ts.map +1 -0
  729. package/dist/fiscal/ingestion/repository.js +127 -0
  730. package/dist/fiscal/ingestion/repository.js.map +1 -0
  731. package/dist/fiscal/ingestion/synthetic-provider.d.ts +92 -0
  732. package/dist/fiscal/ingestion/synthetic-provider.d.ts.map +1 -0
  733. package/dist/fiscal/ingestion/synthetic-provider.js +99 -0
  734. package/dist/fiscal/ingestion/synthetic-provider.js.map +1 -0
  735. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts +19 -0
  736. package/dist/fiscal/ingestion/synthetic-transport-types.d.ts.map +1 -0
  737. package/dist/fiscal/ingestion/synthetic-transport-types.js +9 -0
  738. package/dist/fiscal/ingestion/synthetic-transport-types.js.map +1 -0
  739. package/dist/fiscal/ingestion/synthetic-transport.d.ts +55 -0
  740. package/dist/fiscal/ingestion/synthetic-transport.d.ts.map +1 -0
  741. package/dist/fiscal/ingestion/synthetic-transport.js +57 -0
  742. package/dist/fiscal/ingestion/synthetic-transport.js.map +1 -0
  743. package/dist/fiscal/ingestion/xml-reader.d.ts +55 -0
  744. package/dist/fiscal/ingestion/xml-reader.d.ts.map +1 -0
  745. package/dist/fiscal/ingestion/xml-reader.js +112 -0
  746. package/dist/fiscal/ingestion/xml-reader.js.map +1 -0
  747. package/dist/fiscal/repository.d.ts +220 -0
  748. package/dist/fiscal/repository.d.ts.map +1 -0
  749. package/dist/fiscal/repository.js +449 -0
  750. package/dist/fiscal/repository.js.map +1 -0
  751. package/dist/fiscal/sync/circuit.d.ts +86 -0
  752. package/dist/fiscal/sync/circuit.d.ts.map +1 -0
  753. package/dist/fiscal/sync/circuit.js +118 -0
  754. package/dist/fiscal/sync/circuit.js.map +1 -0
  755. package/dist/fiscal/sync/intervention.d.ts +81 -0
  756. package/dist/fiscal/sync/intervention.d.ts.map +1 -0
  757. package/dist/fiscal/sync/intervention.js +135 -0
  758. package/dist/fiscal/sync/intervention.js.map +1 -0
  759. package/dist/fiscal/sync/lease.d.ts +118 -0
  760. package/dist/fiscal/sync/lease.d.ts.map +1 -0
  761. package/dist/fiscal/sync/lease.js +139 -0
  762. package/dist/fiscal/sync/lease.js.map +1 -0
  763. package/dist/fiscal/sync/observability.d.ts +148 -0
  764. package/dist/fiscal/sync/observability.d.ts.map +1 -0
  765. package/dist/fiscal/sync/observability.js +239 -0
  766. package/dist/fiscal/sync/observability.js.map +1 -0
  767. package/dist/fiscal/sync/orchestrator.d.ts +132 -0
  768. package/dist/fiscal/sync/orchestrator.d.ts.map +1 -0
  769. package/dist/fiscal/sync/orchestrator.js +487 -0
  770. package/dist/fiscal/sync/orchestrator.js.map +1 -0
  771. package/dist/fiscal/sync/policy.d.ts +87 -0
  772. package/dist/fiscal/sync/policy.d.ts.map +1 -0
  773. package/dist/fiscal/sync/policy.js +136 -0
  774. package/dist/fiscal/sync/policy.js.map +1 -0
  775. package/dist/fiscal/sync/reprocess.d.ts +76 -0
  776. package/dist/fiscal/sync/reprocess.d.ts.map +1 -0
  777. package/dist/fiscal/sync/reprocess.js +237 -0
  778. package/dist/fiscal/sync/reprocess.js.map +1 -0
  779. package/dist/fiscal/sync/retry.d.ts +82 -0
  780. package/dist/fiscal/sync/retry.d.ts.map +1 -0
  781. package/dist/fiscal/sync/retry.js +176 -0
  782. package/dist/fiscal/sync/retry.js.map +1 -0
  783. package/dist/fiscal/sync/secret-boundary.d.ts +169 -0
  784. package/dist/fiscal/sync/secret-boundary.d.ts.map +1 -0
  785. package/dist/fiscal/sync/secret-boundary.js +116 -0
  786. package/dist/fiscal/sync/secret-boundary.js.map +1 -0
  787. package/dist/fiscal/transport/https.d.ts +86 -0
  788. package/dist/fiscal/transport/https.d.ts.map +1 -0
  789. package/dist/fiscal/transport/https.js +303 -0
  790. package/dist/fiscal/transport/https.js.map +1 -0
  791. package/dist/fiscal/transport/synthetic-tls.d.ts +80 -0
  792. package/dist/fiscal/transport/synthetic-tls.d.ts.map +1 -0
  793. package/dist/fiscal/transport/synthetic-tls.js +323 -0
  794. package/dist/fiscal/transport/synthetic-tls.js.map +1 -0
  795. package/dist/fiscal/transport/types.d.ts +134 -0
  796. package/dist/fiscal/transport/types.d.ts.map +1 -0
  797. package/dist/fiscal/transport/types.js +88 -0
  798. package/dist/fiscal/transport/types.js.map +1 -0
  799. package/dist/import/br-documents.d.ts +26 -0
  800. package/dist/import/br-documents.d.ts.map +1 -0
  801. package/dist/import/br-documents.js +78 -0
  802. package/dist/import/br-documents.js.map +1 -0
  803. package/dist/import/clients-import.d.ts +122 -4
  804. package/dist/import/clients-import.d.ts.map +1 -1
  805. package/dist/import/clients-import.js +341 -41
  806. package/dist/import/clients-import.js.map +1 -1
  807. package/dist/index.d.ts +217 -17
  808. package/dist/index.d.ts.map +1 -1
  809. package/dist/index.js +196 -11
  810. package/dist/index.js.map +1 -1
  811. package/dist/legal/documents.d.ts +12 -1
  812. package/dist/legal/documents.d.ts.map +1 -1
  813. package/dist/legal/documents.js +222 -16
  814. package/dist/legal/documents.js.map +1 -1
  815. package/dist/legal/index.d.ts +2 -2
  816. package/dist/legal/index.d.ts.map +1 -1
  817. package/dist/legal/index.js +1 -1
  818. package/dist/legal/index.js.map +1 -1
  819. package/dist/legal/types.d.ts +69 -3
  820. package/dist/legal/types.d.ts.map +1 -1
  821. package/dist/legal/types.js +1 -0
  822. package/dist/legal/types.js.map +1 -1
  823. package/dist/mail/auth-templates.d.ts +15 -0
  824. package/dist/mail/auth-templates.d.ts.map +1 -0
  825. package/dist/mail/auth-templates.js +26 -0
  826. package/dist/mail/auth-templates.js.map +1 -0
  827. package/dist/mail/dedup-store.d.ts +1 -24
  828. package/dist/mail/dedup-store.d.ts.map +1 -1
  829. package/dist/mail/dedup-store.js +9 -48
  830. package/dist/mail/dedup-store.js.map +1 -1
  831. package/dist/mail/index.d.ts +2 -1
  832. package/dist/mail/index.d.ts.map +1 -1
  833. package/dist/mail/index.js +13 -2
  834. package/dist/mail/index.js.map +1 -1
  835. package/dist/mail/provider.d.ts +2 -30
  836. package/dist/mail/provider.d.ts.map +1 -1
  837. package/dist/mail/provider.js +10 -246
  838. package/dist/mail/provider.js.map +1 -1
  839. package/dist/mail/resend.d.ts +2 -12
  840. package/dist/mail/resend.d.ts.map +1 -1
  841. package/dist/mail/resend.js +11 -17
  842. package/dist/mail/resend.js.map +1 -1
  843. package/dist/mail/sender-resolver.d.ts +1 -7
  844. package/dist/mail/sender-resolver.d.ts.map +1 -1
  845. package/dist/mail/sender-resolver.js +11 -10
  846. package/dist/mail/sender-resolver.js.map +1 -1
  847. package/dist/mail/template-renderer.d.ts +1 -9
  848. package/dist/mail/template-renderer.d.ts.map +1 -1
  849. package/dist/mail/template-renderer.js +10 -15
  850. package/dist/mail/template-renderer.js.map +1 -1
  851. package/dist/mail/transactional-outbound.d.ts +115 -0
  852. package/dist/mail/transactional-outbound.d.ts.map +1 -0
  853. package/dist/mail/transactional-outbound.js +113 -0
  854. package/dist/mail/transactional-outbound.js.map +1 -0
  855. package/dist/mail/types.d.ts +2 -142
  856. package/dist/mail/types.d.ts.map +1 -1
  857. package/dist/mail/types.js +1 -33
  858. package/dist/mail/types.js.map +1 -1
  859. package/dist/onboarding/persistence.d.ts +10 -1
  860. package/dist/onboarding/persistence.d.ts.map +1 -1
  861. package/dist/onboarding/persistence.js +4 -4
  862. package/dist/onboarding/persistence.js.map +1 -1
  863. package/dist/pilot/go-live-checklist.d.ts +41 -0
  864. package/dist/pilot/go-live-checklist.d.ts.map +1 -0
  865. package/dist/pilot/go-live-checklist.js +209 -0
  866. package/dist/pilot/go-live-checklist.js.map +1 -0
  867. package/dist/pilot/milestone.d.ts +56 -0
  868. package/dist/pilot/milestone.d.ts.map +1 -0
  869. package/dist/pilot/milestone.js +74 -0
  870. package/dist/pilot/milestone.js.map +1 -0
  871. package/dist/platform/capabilities.d.ts +88 -0
  872. package/dist/platform/capabilities.d.ts.map +1 -0
  873. package/dist/platform/capabilities.js +140 -0
  874. package/dist/platform/capabilities.js.map +1 -0
  875. package/dist/platform/job-contract.d.ts +232 -0
  876. package/dist/platform/job-contract.d.ts.map +1 -0
  877. package/dist/platform/job-contract.js +403 -0
  878. package/dist/platform/job-contract.js.map +1 -0
  879. package/dist/portal/provisioning.d.ts +58 -0
  880. package/dist/portal/provisioning.d.ts.map +1 -0
  881. package/dist/portal/provisioning.js +139 -0
  882. package/dist/portal/provisioning.js.map +1 -0
  883. package/dist/pricing-engine/canonical.d.ts +14 -0
  884. package/dist/pricing-engine/canonical.d.ts.map +1 -0
  885. package/dist/pricing-engine/canonical.js +39 -0
  886. package/dist/pricing-engine/canonical.js.map +1 -0
  887. package/dist/pricing-engine/errors.d.ts.map +1 -1
  888. package/dist/pricing-engine/errors.js +6 -1
  889. package/dist/pricing-engine/errors.js.map +1 -1
  890. package/dist/pricing-engine/index.d.ts +12 -2
  891. package/dist/pricing-engine/index.d.ts.map +1 -1
  892. package/dist/pricing-engine/index.js +6 -1
  893. package/dist/pricing-engine/index.js.map +1 -1
  894. package/dist/pricing-engine/pipeline.d.ts.map +1 -1
  895. package/dist/pricing-engine/pipeline.js +202 -28
  896. package/dist/pricing-engine/pipeline.js.map +1 -1
  897. package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
  898. package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
  899. package/dist/pricing-engine/shadow-adapter.js +75 -0
  900. package/dist/pricing-engine/shadow-adapter.js.map +1 -0
  901. package/dist/pricing-engine/shadow-diff.d.ts +26 -0
  902. package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
  903. package/dist/pricing-engine/shadow-diff.js +52 -0
  904. package/dist/pricing-engine/shadow-diff.js.map +1 -0
  905. package/dist/pricing-engine/shadow-facade.d.ts +42 -0
  906. package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
  907. package/dist/pricing-engine/shadow-facade.js +82 -0
  908. package/dist/pricing-engine/shadow-facade.js.map +1 -0
  909. package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
  910. package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
  911. package/dist/pricing-engine/shadow-legacy-types.js +18 -0
  912. package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
  913. package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
  914. package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
  915. package/dist/pricing-engine/shadow-metrics.js +31 -0
  916. package/dist/pricing-engine/shadow-metrics.js.map +1 -0
  917. package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
  918. package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
  919. package/dist/pricing-engine/shadow-normalizer.js +39 -0
  920. package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
  921. package/dist/pricing-engine/types.d.ts +2 -0
  922. package/dist/pricing-engine/types.d.ts.map +1 -1
  923. package/dist/rbac/authorize.d.ts +12 -0
  924. package/dist/rbac/authorize.d.ts.map +1 -1
  925. package/dist/rbac/authorize.js +27 -0
  926. package/dist/rbac/authorize.js.map +1 -1
  927. package/dist/rbac/catalog.d.ts.map +1 -1
  928. package/dist/rbac/catalog.js +101 -1
  929. package/dist/rbac/catalog.js.map +1 -1
  930. package/dist/rbac/workload-provisioning.d.ts +66 -0
  931. package/dist/rbac/workload-provisioning.d.ts.map +1 -0
  932. package/dist/rbac/workload-provisioning.js +153 -0
  933. package/dist/rbac/workload-provisioning.js.map +1 -0
  934. package/dist/rbac/workload.d.ts +124 -0
  935. package/dist/rbac/workload.d.ts.map +1 -0
  936. package/dist/rbac/workload.js +184 -0
  937. package/dist/rbac/workload.js.map +1 -0
  938. package/dist/storage/checksum.d.ts +9 -0
  939. package/dist/storage/checksum.d.ts.map +1 -0
  940. package/dist/storage/checksum.js +12 -0
  941. package/dist/storage/checksum.js.map +1 -0
  942. package/dist/storage/key.d.ts +37 -0
  943. package/dist/storage/key.d.ts.map +1 -0
  944. package/dist/storage/key.js +67 -0
  945. package/dist/storage/key.js.map +1 -0
  946. package/dist/storage/local.d.ts +40 -0
  947. package/dist/storage/local.d.ts.map +1 -0
  948. package/dist/storage/local.js +96 -0
  949. package/dist/storage/local.js.map +1 -0
  950. package/dist/storage/r2.d.ts +43 -0
  951. package/dist/storage/r2.d.ts.map +1 -0
  952. package/dist/storage/r2.js +177 -0
  953. package/dist/storage/r2.js.map +1 -0
  954. package/dist/storage/registry.d.ts +23 -0
  955. package/dist/storage/registry.d.ts.map +1 -0
  956. package/dist/storage/registry.js +37 -0
  957. package/dist/storage/registry.js.map +1 -0
  958. package/dist/storage/types.d.ts +67 -0
  959. package/dist/storage/types.d.ts.map +1 -0
  960. package/dist/storage/types.js +45 -0
  961. package/dist/storage/types.js.map +1 -0
  962. package/dist/subscription-billing/index.d.ts +6 -5
  963. package/dist/subscription-billing/index.d.ts.map +1 -1
  964. package/dist/subscription-billing/index.js +3 -3
  965. package/dist/subscription-billing/index.js.map +1 -1
  966. package/dist/subscription-billing/provider/asaas.d.ts +14 -0
  967. package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
  968. package/dist/subscription-billing/provider/asaas.js +32 -7
  969. package/dist/subscription-billing/provider/asaas.js.map +1 -1
  970. package/dist/subscription-billing/provider/disabled.d.ts +9 -0
  971. package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
  972. package/dist/subscription-billing/provider/disabled.js +8 -0
  973. package/dist/subscription-billing/provider/disabled.js.map +1 -1
  974. package/dist/subscription-billing/provider/registry.d.ts +10 -0
  975. package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
  976. package/dist/subscription-billing/provider/registry.js +17 -0
  977. package/dist/subscription-billing/provider/registry.js.map +1 -1
  978. package/dist/subscription-billing/service.d.ts +38 -1
  979. package/dist/subscription-billing/service.d.ts.map +1 -1
  980. package/dist/subscription-billing/service.js +147 -23
  981. package/dist/subscription-billing/service.js.map +1 -1
  982. package/dist/subscription-billing/types.d.ts +13 -0
  983. package/dist/subscription-billing/types.d.ts.map +1 -1
  984. package/dist/subscription-billing/types.js.map +1 -1
  985. package/dist/tenancy/features.d.ts +69 -0
  986. package/dist/tenancy/features.d.ts.map +1 -0
  987. package/dist/tenancy/features.js +123 -0
  988. package/dist/tenancy/features.js.map +1 -0
  989. package/dist/tenancy/provisioning.d.ts.map +1 -1
  990. package/dist/tenancy/provisioning.js +32 -8
  991. package/dist/tenancy/provisioning.js.map +1 -1
  992. package/dist/tenancy/settings.d.ts +63 -0
  993. package/dist/tenancy/settings.d.ts.map +1 -0
  994. package/dist/tenancy/settings.js +218 -0
  995. package/dist/tenancy/settings.js.map +1 -0
  996. package/dist/users/repository.d.ts +54 -1
  997. package/dist/users/repository.d.ts.map +1 -1
  998. package/dist/users/repository.js +142 -4
  999. package/dist/users/repository.js.map +1 -1
  1000. package/dist/vault/repository.d.ts +67 -0
  1001. package/dist/vault/repository.d.ts.map +1 -1
  1002. package/dist/vault/repository.js +78 -0
  1003. package/dist/vault/repository.js.map +1 -1
  1004. package/package.json +20 -4
  1005. package/src/db/migrations/0023_user_invite_activation.sql +15 -0
  1006. package/src/db/migrations/0024_set_user_password_function.sql +32 -0
  1007. package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
  1008. package/src/db/migrations/0026_documents_and_competence.sql +353 -0
  1009. package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
  1010. package/src/db/migrations/0028_collection_engine.sql +94 -0
  1011. package/src/db/migrations/0029_payment_rail.sql +107 -0
  1012. package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
  1013. package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
  1014. package/src/db/migrations/0032_settlement_reversal.sql +76 -0
  1015. package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
  1016. package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
  1017. package/src/db/migrations/0035_payment_account_environments.sql +61 -0
  1018. package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
  1019. package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
  1020. package/src/db/migrations/0038_notification_channels.sql +175 -0
  1021. package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
  1022. package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
  1023. package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
  1024. package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
  1025. package/src/db/migrations/0043_workload_identity.sql +105 -0
  1026. package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
  1027. package/src/db/migrations/0045_role_write_scope.sql +122 -0
  1028. package/src/db/migrations/0046_pilot_activation_model.sql +184 -0
  1029. package/src/db/migrations/0047_recipient_clearance.sql +89 -0
  1030. package/src/db/migrations/0048_item_type_note.sql +16 -0
  1031. package/src/db/migrations/0049_national_fiscal_engine.sql +279 -0
  1032. package/src/db/migrations/0050_fiscal_vocabulary_readonly.sql +29 -0
  1033. package/src/db/migrations/0051_seed_rules_from_catalog.sql +72 -0
  1034. package/src/db/migrations/0052_fiscal_rule_delete_scope.sql +57 -0
  1035. package/src/db/migrations/0053_rule_validity_lower_bound.sql +44 -0
  1036. package/src/db/migrations/0054_tenant_profile_and_rule_source.sql +89 -0
  1037. package/src/db/migrations/0055_job_capability_contract.sql +300 -0
  1038. package/src/db/migrations/0056_fiscal_document_ingestion.sql +337 -0
  1039. package/src/db/migrations/0057_fiscal_pending_event_inbox.sql +228 -0
  1040. package/src/db/migrations/0058_fiscal_operational_engine.sql +516 -0
  1041. package/src/db/migrations/0059_fiscal_contract_version.sql +59 -0
  1042. package/dist/cjs/mail/resend-client.js +0 -103
  1043. package/dist/cjs/mail/resend-client.js.map +0 -1
  1044. package/dist/mail/resend-client.d.ts +0 -16
  1045. package/dist/mail/resend-client.d.ts.map +0 -1
  1046. package/dist/mail/resend-client.js +0 -100
  1047. package/dist/mail/resend-client.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ {
2
+ "schema": "baruk.provenance/1",
3
+ "package": "@baruk/core",
4
+ "version": "0.5.0",
5
+ "commit": "6c740b6ced28f9f0b83d6f739eb27c4b2574aea8",
6
+ "repository": "WellingtonOliveira12/baruk-platform",
7
+ "workflowRef": "WellingtonOliveira12/baruk-ecosystem/.github/workflows/package-release-control.yml@refs/heads/main",
8
+ "runId": "34290559008",
9
+ "builtAt": "2026-09-08T23:26:29.877Z"
10
+ }
package/CHANGELOG.md CHANGED
@@ -5,8 +5,135 @@ Versionamento: [SemVer](https://semver.org/lang/pt-BR/).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.5.0] — 2026-09-08
9
+
10
+ ### Adicionado
11
+
12
+ - **`privacyEmail` por produto em `LegalProductProfile`** (opcional). O canal de privacidade
13
+ vivia só em `LegalCompanyProfile`, compartilhado — e um produto com domínio próprio
14
+ anunciava, nos cinco lugares em que a política dá um endereço de privacidade, a caixa de
15
+ outro domínio. O titular de dados que escrevesse para o endereço do produto não seria
16
+ atendido por ninguém, e um canal que não recebe transforma um prazo legal em silêncio.
17
+
18
+ Ausente, o comportamento é o de antes, byte a byte. Um encarregado nominal
19
+ (`company.dpo`) continua tendo precedência onde já tinha. O canal em branco (`''` ou só
20
+ espaços) cai para o da controladora: em branco não é um canal, é a ausência de um.
21
+
22
+ - **`LEGAL_PENDING_MARKER` e `hasPendingDecision(doc)`.** Quem publica passa a ter como
23
+ MEDIR que um documento carrega decisão não tomada, em vez de lembrar.
24
+
25
+ ### Corrigido
26
+
27
+ - **`trialDays` ganha três estados: `N`, `0` e `null`.** A frase do resumo da cobrança foi
28
+ escrita para um número maior que zero. Com `0` ela produzia "São 0 dias de teste sem
29
+ cartão" e "O teste dura 0 dias" — texto que está **publicado** em
30
+ `barukconnect.com/legal/cobranca`. Zero não é uma duração curta: é a ausência da oferta,
31
+ e agora a política a afirma com palavras. `null` é a terceira coisa — decisão que o
32
+ titular ainda não tomou — e rende o marcador no lugar do número, nunca um valor plausível.
33
+
34
+ `LEGAL_VERSION` sobe para `1.2.0`. **`LEGAL_EFFECTIVE_DATE` NÃO muda**, e
35
+ `LEGAL_REVIEW_STATUS` continua `pending`: nada aqui promove estado jurídico.
36
+
37
+ ### Compatibilidade
38
+
39
+ Para `trialDays > 0` e sem `privacyEmail` — o caso de Baruk App, Baruk Office, Baruk Hub e
40
+ Dental Plataforma — o texto dos nove documentos é **idêntico ao anterior**, provado contra a
41
+ implementação de `HEAD` por oráculo de equivalência. A única diferença é o carimbo
42
+ `version` do conjunto.
43
+
44
+ > Uma primeira versão desta mudança derivava as três frases de uma metade comum e, com
45
+ > isso, reescreveu o resumo da cobrança dos quatro produtos que não estavam mudando —
46
+ > "é assinatura mensal que renova sozinha e que você cancela" virou "a assinatura é
47
+ > mensal, renova sozinha e você cancela". Mesma promessa, outra frase, dois deles com a
48
+ > política já publicada. A frase original está ancorada por teste literal.
49
+
50
+ ## [0.4.2] — 2026-09-03
51
+
52
+ ### Corrigido
53
+
54
+ - **`.baruk-provenance.json` entra no `files`.** O `write-provenance.mjs` grava a
55
+ provenance dentro do pacote antes do `pack`, mas o `files` deste manifesto não a
56
+ listava — e o npm descarta em silêncio o que não está na allowlist. O pacote publicado
57
+ prometia rastreabilidade e não a carregava.
58
+
59
+ É o `PME-IC-13`, e ele já havia acontecido uma vez. Aqui custou uma Release
60
+ Authorization: a `v0.4.1` foi certificada, autorizada e **reprovada no rebuild**
61
+ obrigatório do Package Release Control. `@baruk/shared` passou no mesmo run, porque o
62
+ `files` dele já incluía a provenance.
63
+
64
+ Um teste passou a vigiar os dois pacotes publicáveis, e a lista que ele vigia é
65
+ conferida contra a do `build-release-request.mjs` — para que um pacote novo não nasça
66
+ fora do guard.
67
+
68
+ ### Sem mudança de código
69
+
70
+ A canonicalização da capability de comunicação, descrita na 0.4.0, vale integralmente.
71
+ As versões 0.4.0 e 0.4.1 nunca foram publicadas.
72
+
73
+ ## [0.4.1] — 2026-09-02
74
+
75
+ Sem mudança de código em relação à 0.4.0: **apenas o número da versão**.
76
+
77
+ A 0.4.0 nunca foi publicada. A tag `v0.4.0` tem uma Release Authorization
78
+ **revogada**, e a resolução de autorização do control-plane é
79
+ `<candidato>/<tag>.json` — uma tag, um arquivo. Emitir uma autorização nova para
80
+ `v0.4.0` exigiria sobrescrever o registro revogado, e revogação é fato de
81
+ governança: não se reescreve.
82
+
83
+ A saída é publicar sob uma tag que ainda não tem registro. O conteúdo é o mesmo
84
+ da 0.4.0 — a canonicalização descrita ali vale integralmente para esta versão.
85
+
86
+ ## [0.4.0] — 2026-09-02
87
+
88
+ ### Mudado
89
+
90
+ - **A capability de e-mail transacional deixou de ser implementada aqui.**
91
+ `packages/core/src/mail/` passou a ser **re-export** de
92
+ [`@baruk/communication`](https://www.npmjs.com/package/@baruk/communication),
93
+ que é a fonte canônica de `cap.communication.transactional-email`.
94
+
95
+ Existiam duas implementações. Oito dos nove arquivos eram idênticos byte a
96
+ byte, e o nono **já havia divergido**: o engine aceitava remetente com nome de
97
+ exibição (_name-addr_, RFC 5322) e esta cópia não. Era o começo previsível de
98
+ duas cópias — uma recebe a correção, a outra não, e ninguém percebe até um
99
+ consumidor receber o comportamento antigo.
100
+
101
+ ### Adicionado
102
+
103
+ - Dependência `@baruk/communication@^0.2.0` — zero dependências de runtime,
104
+ 21 kB.
105
+ - Aceitação de `Nome <caixa@dominio>` no remetente, herdada da capability. Quem
106
+ já usava endereço puro não muda nada.
107
+
108
+ ### Compatibilidade
109
+
110
+ **Nenhum consumidor muda uma linha.** Os caminhos de import foram preservados e
111
+ o barrel exporta os mesmos **522 símbolos** — conferidos um a um contra a versão
112
+ anterior. `sc-organizacao-contabil` e `baruk-connect` foram exercitados contra o
113
+ barrel compilado.
114
+
115
+ ### Fronteira
116
+
117
+ O guard `communication-provider-boundary` ficou **mais forte**: o endereço do
118
+ provider passou de "existe exatamente uma vez neste repositório" para **"não
119
+ existe"**. Antes era preciso um _segundo_ cliente para ele reagir; agora o
120
+ primeiro reprova.
121
+
122
+ ### O que NÃO saiu daqui
123
+
124
+ `auth-templates.ts` (casca HTML com a marca), `transactional-outbound.ts`
125
+ (adapter dos fluxos de identidade) e `sanitize.ts` — este último apesar do nome
126
+ e do lugar, porque `subscription-billing` e `pricing-engine` o usam para log.
127
+
8
128
  ## [0.3.1] — 2026-08-02
9
129
 
130
+ ### Consumidores
131
+
132
+ - Baruk App (`apps/web`), Dental Plataforma e Baruk Connect consomem
133
+ `@baruk/core/legal`. Dental e Connect resolvem pelo registry (`^0.3.1`) e
134
+ eliminaram as cópias locais dos documentos. O Baruk Office ainda não publica
135
+ documentos legais — ver `docs/architecture/CORE_SHARED_MODULES.md`.
136
+
10
137
  ### Adicionado
11
138
 
12
139
  - **Legal Center compartilhado** em `@baruk/core/legal`: perfil societário
@@ -3,13 +3,45 @@ export interface AuditRow {
3
3
  id: string;
4
4
  actorType: string;
5
5
  actorId: string | null;
6
+ /** Nome de quem praticou o ato, quando ele é membro DESTA organização. */
7
+ actorName: string | null;
8
+ /** E-mail do mesmo — a desambiguação quando dois homônimos existem. */
9
+ actorEmail: string | null;
10
+ /**
11
+ * `staff` | `service` | `client_portal`, ou `null` quando não há usuário por
12
+ * trás (cron, webhook, migração) ou quando o ator não é membro daqui.
13
+ *
14
+ * É este campo — e não `actor_type` — que distingue pessoa de automação:
15
+ * `audit_log.actor_type` grava `user` para qualquer autenticação por sessão,
16
+ * inclusive a da identidade de automação.
17
+ */
18
+ actorUserType: string | null;
6
19
  action: string;
7
20
  resourceType: string;
8
21
  resourceId: string | null;
9
22
  result: string;
10
23
  occurredAt: string;
11
24
  }
12
- /** Lista a trilha de auditoria do tenant corrente (RLS já isola). Somente leitura. */
25
+ /**
26
+ * Lista a trilha de auditoria do tenant corrente (RLS já isola). Somente leitura.
27
+ *
28
+ * ## Por que o ator vem por `membership`, e não direto de a tabela "user"
29
+ *
30
+ * a tabela "user" é entidade GLOBAL: não tem RLS. Um `JOIN "user" ON u.id = a.actor_id`
31
+ * leria qualquer pessoa do ecossistema, e bastaria um `actor_id` de outra
32
+ * organização para esta tela imprimir o nome de alguém que a SC não conhece.
33
+ *
34
+ * O join passa por `membership` do tenant corrente. Ator que não é membro daqui
35
+ * volta como `null` — e a tela o chama de "Sistema", que é honesto: para esta
36
+ * organização, aquele ato não tem rosto.
37
+ *
38
+ * ## O que este enriquecimento NÃO é
39
+ *
40
+ * Não é reescrita da trilha. `audit_log` continua append-only e nenhuma linha
41
+ * histórica muda: `actor_type` segue gravado como sempre esteve. Isto é
42
+ * projeção de LEITURA — o mesmo registro, dito de forma que quem audita
43
+ * entenda.
44
+ */
13
45
  export declare function listAudit(tx: Tx, filter?: {
14
46
  action?: string;
15
47
  resourceType?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/audit/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,sFAAsF;AACtF,wBAAsB,SAAS,CAC7B,EAAE,EAAE,EAAE,EACN,MAAM,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACvF,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA4B/C"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/audit/repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uEAAuE;IACvE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;;;;;;;OAOG;IACH,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,SAAS,CAC7B,EAAE,EAAE,EAAE,EACN,MAAM,GAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,GACvF,OAAO,CAAC;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAqD/C"}
@@ -1,14 +1,45 @@
1
- /** Lista a trilha de auditoria do tenant corrente (RLS já isola). Somente leitura. */
1
+ /**
2
+ * Lista a trilha de auditoria do tenant corrente (RLS já isola). Somente leitura.
3
+ *
4
+ * ## Por que o ator vem por `membership`, e não direto de a tabela "user"
5
+ *
6
+ * a tabela "user" é entidade GLOBAL: não tem RLS. Um `JOIN "user" ON u.id = a.actor_id`
7
+ * leria qualquer pessoa do ecossistema, e bastaria um `actor_id` de outra
8
+ * organização para esta tela imprimir o nome de alguém que a SC não conhece.
9
+ *
10
+ * O join passa por `membership` do tenant corrente. Ator que não é membro daqui
11
+ * volta como `null` — e a tela o chama de "Sistema", que é honesto: para esta
12
+ * organização, aquele ato não tem rosto.
13
+ *
14
+ * ## O que este enriquecimento NÃO é
15
+ *
16
+ * Não é reescrita da trilha. `audit_log` continua append-only e nenhuma linha
17
+ * histórica muda: `actor_type` segue gravado como sempre esteve. Isto é
18
+ * projeção de LEITURA — o mesmo registro, dito de forma que quem audita
19
+ * entenda.
20
+ */
2
21
  export async function listAudit(tx, filter = {}) {
3
22
  const limit = Math.min(filter.limit ?? 30, 100);
4
23
  const offset = filter.offset ?? 0;
5
24
  const rows = await tx `
6
- SELECT id, actor_type, actor_id, action, resource_type, resource_id, result,
7
- occurred_at, count(*) OVER() AS total
8
- FROM audit_log
9
- WHERE (${filter.action ?? null}::text IS NULL OR action = ${filter.action ?? null})
10
- AND (${filter.resourceType ?? null}::text IS NULL OR resource_type = ${filter.resourceType ?? null})
11
- ORDER BY occurred_at DESC
25
+ SELECT a.id, a.actor_type, a.actor_id, a.action, a.resource_type, a.resource_id,
26
+ a.result, a.occurred_at,
27
+ u.full_name AS actor_name,
28
+ u.email AS actor_email,
29
+ u.user_type AS actor_user_type,
30
+ count(*) OVER() AS total
31
+ FROM audit_log a
32
+ -- A membership é o portão: sem ela o nome de alguém de outra organização
33
+ -- entraria nesta tela. A tabela "user" é global e não tem RLS para barrar
34
+ -- isso sozinha.
35
+ LEFT JOIN membership m
36
+ ON m.user_id = a.actor_id
37
+ AND m.tenant_id = current_setting('app.current_tenant', true)::uuid
38
+ LEFT JOIN "user" u
39
+ ON u.id = m.user_id
40
+ WHERE (${filter.action ?? null}::text IS NULL OR a.action = ${filter.action ?? null})
41
+ AND (${filter.resourceType ?? null}::text IS NULL OR a.resource_type = ${filter.resourceType ?? null})
42
+ ORDER BY a.occurred_at DESC
12
43
  LIMIT ${limit} OFFSET ${offset}
13
44
  `;
14
45
  const total = rows[0] ? Number(rows[0].total) : 0;
@@ -18,6 +49,9 @@ export async function listAudit(tx, filter = {}) {
18
49
  id: r.id,
19
50
  actorType: r.actor_type,
20
51
  actorId: r.actor_id,
52
+ actorName: r.actor_name,
53
+ actorEmail: r.actor_email,
54
+ actorUserType: r.actor_user_type,
21
55
  action: r.action,
22
56
  resourceType: r.resource_type,
23
57
  resourceId: r.resource_id,
@@ -1 +1 @@
1
- {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/audit/repository.ts"],"names":[],"mappings":"AAaA,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAM,EACN,SAAsF,EAAE;IAExF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,EAAE,CAEpB;;;;aAIU,MAAM,CAAC,MAAM,IAAI,IAAI,8BAA8B,MAAM,CAAC,MAAM,IAAI,IAAI;aACxE,MAAM,CAAC,YAAY,IAAI,IAAI,qCAAqC,MAAM,CAAC,YAAY,IAAI,IAAI;;YAE5F,KAAK,WAAW,MAAM;GAC/B,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/audit/repository.ts"],"names":[],"mappings":"AA0BA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAM,EACN,SAAsF,EAAE;IAExF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,EAAE,CAYpB;;;;;;;;;;;;;;;;aAgBU,MAAM,CAAC,MAAM,IAAI,IAAI,gCAAgC,MAAM,CAAC,MAAM,IAAI,IAAI;aAC1E,MAAM,CAAC,YAAY,IAAI,IAAI,uCAAuC,MAAM,CAAC,YAAY,IAAI,IAAI;;YAE9F,KAAK,WAAW,MAAM;GAC/B,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,OAAO,EAAE,CAAC,CAAC,QAAQ;YACnB,SAAS,EAAE,CAAC,CAAC,UAAU;YACvB,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,aAAa,EAAE,CAAC,CAAC,eAAe;YAChC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,YAAY,EAAE,CAAC,CAAC,aAAa;YAC7B,UAAU,EAAE,CAAC,CAAC,WAAW;YACzB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,UAAU,EAAE,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE;SACxC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { Db } from '../db/client.js';
1
+ import type { Db, Queryable } from '../db/client.js';
2
2
  interface Nower {
3
3
  now(): number;
4
4
  }
@@ -11,10 +11,39 @@ export declare function requestPasswordReset(db: Db, email: string, clock?: Nowe
11
11
  token: string;
12
12
  userId: string;
13
13
  } | null>;
14
+ /**
15
+ * Emite o token de primeiro acesso para um usuário recém-convidado (chamado
16
+ * por `inviteUser`, já dentro do contexto do tenant que convidou). Mesmo
17
+ * mecanismo de `requestPasswordReset`, com `purpose='activation'` e TTL maior
18
+ * — e o `tenant_id` guardado no token, porque `resetPassword` roda sem sessão
19
+ * autenticada e precisa reabrir o contexto de RLS certo para ativar a
20
+ * membership.
21
+ */
22
+ export declare function createActivationToken(db: Queryable, input: {
23
+ userId: string;
24
+ tenantId: string;
25
+ }, clock?: Nower): Promise<{
26
+ token: string;
27
+ }>;
14
28
  /**
15
29
  * Redefine a senha usando um token válido (não usado, não expirado). Marca o
16
30
  * token como usado, limpa `must_change_password` e revoga sessões anteriores.
31
+ * Quando o token é de ativação (`purpose='activation'`), também ativa o
32
+ * usuário e a membership que o convite deixou em `invited`.
33
+ */
34
+ /**
35
+ * O token ainda vale? **Não consome.**
36
+ *
37
+ * Existe para a tela de ativação decidir o que mostrar antes de o usuário
38
+ * digitar. Sem isto, quem clicava num convite antigo preenchia senha, confirmava
39
+ * e só então descobria que o link não servia — e a tela seguia oferecendo o
40
+ * formulário como se a próxima tentativa pudesse dar certo.
41
+ *
42
+ * Devolve só um booleano. Não distingue inexistente de expirado de já usado:
43
+ * os três levam à mesma ação do usuário, e detalhar transformaria isto num
44
+ * oráculo para quem tenta adivinhar token.
17
45
  */
46
+ export declare function isResetTokenValid(db: Queryable, token: string, clock?: Nower): Promise<boolean>;
18
47
  export declare function resetPassword(db: Db, token: string, newPassword: string, clock?: Nower): Promise<boolean>;
19
48
  export {};
20
49
  //# sourceMappingURL=password-reset.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset.d.ts","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAM1C,UAAU,KAAK;IACb,GAAG,IAAI,MAAM,CAAC;CACf;AAGD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAcnD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
1
+ {"version":3,"file":"password-reset.d.ts","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAM,MAAM,iBAAiB,CAAC;AAsBzD,UAAU,KAAK;IACb,GAAG,IAAI,MAAM,CAAC;CACf;AAGD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAmBnD;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,SAAS,EACb,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC3C,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB5B;AAED;;;;;GAKG;AACH;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC,OAAO,CAAC,CASlB;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC,OAAO,CAAC,CA0DlB"}
@@ -1,7 +1,23 @@
1
1
  import { uuidv7 } from '@baruk/shared';
2
+ import { withContext } from '../db/context.js';
3
+ import { appendAudit } from '../audit/audit.js';
2
4
  import { hashPassword } from './password.js';
3
5
  import { generateSessionToken, hashToken } from './session-token.js';
4
- const RESET_TTL_MS = 60 * 60 * 1000; // 1h
6
+ /**
7
+ * 24h para o link de recuperação.
8
+ *
9
+ * Era 1h. O trade-off é real — janela maior é janela maior se a caixa de e-mail
10
+ * for comprometida —, mas 1h não sobrevive ao uso: quem pede recuperação nem
11
+ * sempre está com o e-mail aberto, e a API hiberna, então a primeira tentativa
12
+ * do dia ainda gasta segundos no cold start. Link vencido faz o usuário pedir
13
+ * outro, e o custo de segurança disso é maior que o da janela: cada reenvio é
14
+ * mais um link vivo circulando por e-mail.
15
+ *
16
+ * O que limita o dano continua valendo: uso único, invalidação no consumo e
17
+ * revogação das sessões anteriores.
18
+ */
19
+ const RESET_TTL_MS = 24 * 60 * 60 * 1000;
20
+ const ACTIVATION_TTL_MS = 7 * 24 * 60 * 60 * 1000; // 7 dias — convite, e-mail pode demorar a ser aberto.
5
21
  const REAL_CLOCK = { now: () => Date.now() };
6
22
  /**
7
23
  * Solicita reset. Retorna o token EM CLARO (para compor o link do e-mail) e o
@@ -18,37 +34,149 @@ export async function requestPasswordReset(db, email, clock = REAL_CLOCK) {
18
34
  const { token, tokenHash } = generateSessionToken();
19
35
  const now = clock.now();
20
36
  await db `
21
- INSERT INTO password_reset (id, user_id, token_hash, expires_at)
22
- VALUES (${uuidv7()}, ${user.id}, ${tokenHash}, ${new Date(now + RESET_TTL_MS)})
37
+ INSERT INTO password_reset (id, user_id, token_hash, purpose, expires_at)
38
+ VALUES (${uuidv7()}, ${user.id}, ${tokenHash}, 'reset', ${new Date(now + RESET_TTL_MS)})
23
39
  `;
40
+ await auditBestEffort(db, user.id, {
41
+ action: 'password_reset_requested',
42
+ resourceType: 'user',
43
+ resourceId: user.id,
44
+ });
24
45
  return { token, userId: user.id };
25
46
  }
47
+ /**
48
+ * Emite o token de primeiro acesso para um usuário recém-convidado (chamado
49
+ * por `inviteUser`, já dentro do contexto do tenant que convidou). Mesmo
50
+ * mecanismo de `requestPasswordReset`, com `purpose='activation'` e TTL maior
51
+ * — e o `tenant_id` guardado no token, porque `resetPassword` roda sem sessão
52
+ * autenticada e precisa reabrir o contexto de RLS certo para ativar a
53
+ * membership.
54
+ */
55
+ export async function createActivationToken(db, input, clock = REAL_CLOCK) {
56
+ const { token, tokenHash } = generateSessionToken();
57
+ const now = clock.now();
58
+ // Reemitir invalida o convite anterior: um usuário tem no máximo um convite
59
+ // vivo por vez. Sem isto, cada reenvio deixava mais um token válido por 7
60
+ // dias — e um link que vazou (encaminhado, colado num chat, capturado numa
61
+ // screenshot) continuaria abrindo a conta mesmo depois de reemitido.
62
+ await db `
63
+ UPDATE password_reset SET used_at = now()
64
+ WHERE user_id = ${input.userId} AND purpose = 'activation' AND used_at IS NULL
65
+ `;
66
+ await db `
67
+ INSERT INTO password_reset (id, user_id, token_hash, purpose, tenant_id, expires_at)
68
+ VALUES (${uuidv7()}, ${input.userId}, ${tokenHash}, 'activation', ${input.tenantId}, ${new Date(now + ACTIVATION_TTL_MS)})
69
+ `;
70
+ return { token };
71
+ }
26
72
  /**
27
73
  * Redefine a senha usando um token válido (não usado, não expirado). Marca o
28
74
  * token como usado, limpa `must_change_password` e revoga sessões anteriores.
75
+ * Quando o token é de ativação (`purpose='activation'`), também ativa o
76
+ * usuário e a membership que o convite deixou em `invited`.
29
77
  */
78
+ /**
79
+ * O token ainda vale? **Não consome.**
80
+ *
81
+ * Existe para a tela de ativação decidir o que mostrar antes de o usuário
82
+ * digitar. Sem isto, quem clicava num convite antigo preenchia senha, confirmava
83
+ * e só então descobria que o link não servia — e a tela seguia oferecendo o
84
+ * formulário como se a próxima tentativa pudesse dar certo.
85
+ *
86
+ * Devolve só um booleano. Não distingue inexistente de expirado de já usado:
87
+ * os três levam à mesma ação do usuário, e detalhar transformaria isto num
88
+ * oráculo para quem tenta adivinhar token.
89
+ */
90
+ export async function isResetTokenValid(db, token, clock = REAL_CLOCK) {
91
+ const rows = await db `
92
+ SELECT id FROM password_reset
93
+ WHERE token_hash = ${hashToken(token)}
94
+ AND used_at IS NULL
95
+ AND expires_at > ${new Date(clock.now())}
96
+ LIMIT 1
97
+ `;
98
+ return rows.length > 0;
99
+ }
30
100
  export async function resetPassword(db, token, newPassword, clock = REAL_CLOCK) {
31
101
  if (newPassword.length < 8)
32
102
  return false;
33
103
  const th = hashToken(token);
34
104
  const rows = await db `
35
- SELECT id, user_id FROM password_reset
105
+ SELECT id, user_id, purpose, tenant_id FROM password_reset
36
106
  WHERE token_hash = ${th} AND used_at IS NULL AND expires_at > ${new Date(clock.now())}
37
107
  `;
38
108
  const reset = rows[0];
39
- if (!reset)
109
+ if (!reset) {
110
+ // Token existe mas expirou/já foi usado (distinto de token nunca emitido,
111
+ // que não é auditável — não há usuário a quem atribuir a tentativa).
112
+ const stale = await db `
113
+ SELECT user_id FROM password_reset WHERE token_hash = ${th}
114
+ `;
115
+ if (stale[0]) {
116
+ await auditBestEffort(db, stale[0].user_id, {
117
+ action: 'password_reset_failed',
118
+ resourceType: 'user',
119
+ resourceId: stale[0].user_id,
120
+ });
121
+ }
40
122
  return false;
123
+ }
41
124
  await db.begin(async (tx) => {
42
- await tx `
43
- INSERT INTO user_credential (user_id, password_hash, must_change_password)
44
- VALUES (${reset.user_id}, ${hashPassword(newPassword)}, false)
45
- ON CONFLICT (user_id) DO UPDATE
46
- SET password_hash = EXCLUDED.password_hash, must_change_password = false, updated_at = now()
47
- `;
125
+ // Upsert via função SECURITY DEFINER (0024) — o papel de app só tem INSERT
126
+ // em user_credential (anti account-takeover, 0011); trocar uma senha já
127
+ // existente exige essa porta estreita e nomeada, nunca um UPDATE genérico.
128
+ await tx `SELECT set_user_password(${reset.user_id}, ${hashPassword(newPassword)}, false)`;
48
129
  await tx `UPDATE password_reset SET used_at = now() WHERE id = ${reset.id}`;
49
130
  // Revoga sessões anteriores (uso único de fato).
50
131
  await tx `UPDATE user_session SET revoked_at = now() WHERE user_id = ${reset.user_id} AND revoked_at IS NULL`;
132
+ if (reset.purpose === 'activation' && reset.tenant_id) {
133
+ await tx `UPDATE "user" SET status = 'active' WHERE id = ${reset.user_id} AND status = 'invited'`;
134
+ await tx `select set_config('app.current_tenant', ${reset.tenant_id}, true)`;
135
+ await tx `select set_config('app.current_user', ${reset.user_id}, true)`;
136
+ await tx `
137
+ UPDATE membership SET status = 'active', updated_at = now()
138
+ WHERE user_id = ${reset.user_id} AND tenant_id = ${reset.tenant_id} AND status = 'invited'
139
+ `;
140
+ await appendAudit(tx, {
141
+ actorId: reset.user_id,
142
+ action: 'activation_completed',
143
+ resourceType: 'user',
144
+ resourceId: reset.user_id,
145
+ });
146
+ }
147
+ else {
148
+ await auditWithinResolvedTenant(tx, reset.user_id, {
149
+ action: 'password_reset_completed',
150
+ resourceType: 'user',
151
+ resourceId: reset.user_id,
152
+ });
153
+ }
51
154
  });
52
155
  return true;
53
156
  }
157
+ /**
158
+ * Auditoria best-effort para ações globais (login ainda não escolheu tenant,
159
+ * ou nem há sessão). Só grava se o usuário tiver exatamente uma membership
160
+ * ativa resolvível — mesmo critério de auto-seleção usado em `login()`. Sem
161
+ * isso, a ação simplesmente não é auditada (não há tenant_id para a RLS de
162
+ * `audit_log` aceitar a linha) — comportamento documentado, não um bug.
163
+ */
164
+ async function auditBestEffort(db, userId, entry) {
165
+ const memberships = await db `
166
+ SELECT tenant_id FROM membership WHERE user_id = ${userId} AND status = 'active' AND deleted_at IS NULL
167
+ `;
168
+ if (memberships.length !== 1)
169
+ return;
170
+ await withContext(db, { tenantId: memberships[0].tenant_id, userId }, (tx) => appendAudit(tx, { ...entry, actorId: userId }));
171
+ }
172
+ async function auditWithinResolvedTenant(tx, userId, entry) {
173
+ const memberships = await tx `
174
+ SELECT tenant_id FROM membership WHERE user_id = ${userId} AND status = 'active' AND deleted_at IS NULL
175
+ `;
176
+ if (memberships.length !== 1)
177
+ return;
178
+ await tx `select set_config('app.current_tenant', ${memberships[0].tenant_id}, true)`;
179
+ await tx `select set_config('app.current_user', ${userId}, true)`;
180
+ await appendAudit(tx, { ...entry, actorId: userId });
181
+ }
54
182
  //# sourceMappingURL=password-reset.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK;AAK1C,MAAM,UAAU,GAAU,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAM,EACN,KAAa,EACb,QAAe,UAAU;IAEzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAkC;kDACR,KAAK;GACpD,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;GAC9E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAM,EACN,KAAa,EACb,WAAmB,EACnB,QAAe,UAAU;IAEzB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAmC;;yBAEjC,EAAE,yCAAyC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;GACtF,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1B,MAAM,EAAE,CAAA;;gBAEI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,WAAW,CAAC;;;KAGtD,CAAC;QACF,MAAM,EAAE,CAAA,wDAAwD,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,iDAAiD;QACjD,MAAM,EAAE,CAAA,8DAA8D,KAAK,CAAC,OAAO,yBAAyB,CAAC;IAC/G,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export interface LoginResult {
20
20
  memberships: MembershipView[];
21
21
  /** Preenchido quando o usuário tem exatamente um tenant (auto-seleção). */
22
22
  activeTenantId: string | null;
23
+ /** Senha provisória/de convite — a UI deve forçar a troca antes de liberar o resto. */
24
+ mustChangePassword: boolean;
23
25
  }
24
26
  /** Contexto autenticado e já resolvido a um tenant (o que a API injeta por request). */
25
27
  export interface AuthContext {
@@ -29,17 +31,39 @@ export interface AuthContext {
29
31
  permissions: Set<string>;
30
32
  /** Para usuários de portal: o client ao qual estão restritos (row-scope). */
31
33
  clientId?: string;
34
+ /** Quando true, `makeAuthGuard` bloqueia toda rota que não seja isenta explicitamente. */
35
+ mustChangePassword: boolean;
32
36
  }
33
37
  interface Nower {
34
38
  now(): number;
35
39
  }
36
- /** Cria (ou atualiza) um usuário staff com senha local. Usado pelo seed. */
40
+ /**
41
+ * Cria (ou atualiza) um usuário staff com senha local. Usado pelos seeds.
42
+ *
43
+ * **A senha de um usuário que já existe é preservada por padrão.** Um seed de
44
+ * inicialização é, por natureza, algo que pode rodar de novo — em um deploy, em
45
+ * uma reconstrução de ambiente, na mão de alguém investigando. Se ele redefinir
46
+ * a senha em silêncio, quem administra o ambiente perde o acesso sem receber
47
+ * erro nenhum, e a causa é invisível: o seed "funcionou".
48
+ *
49
+ * Foi exatamente essa a armadilha encontrada em 2026-08-12, quando o
50
+ * `SEED_ADMIN_PASSWORD` do serviço divergiu do valor guardado no cofre. Rodar
51
+ * `db:seed` com o ambiente errado teria trocado a senha do administrador sem
52
+ * um aviso sequer.
53
+ *
54
+ * Para redefinir deliberadamente, passe `overwritePassword: true` — o nome
55
+ * torna a intenção explícita em quem chama, que é onde ela deve estar.
56
+ */
37
57
  export declare function upsertUserWithPassword(db: Db, input: {
38
58
  email: string;
39
59
  fullName: string;
40
60
  password: string;
41
61
  userType?: UserType;
42
- }): Promise<AuthUser>;
62
+ /** Redefine a senha de um usuário já existente. Default: `false`. */
63
+ overwritePassword?: boolean;
64
+ }): Promise<AuthUser & {
65
+ passwordWasSet: boolean;
66
+ }>;
43
67
  /** Login com e-mail/senha. Emite sessão; auto-seleciona tenant se houver só um. */
44
68
  export declare function login(db: Db, input: {
45
69
  email: string;
@@ -55,6 +79,27 @@ export declare function selectTenant(db: Db, input: {
55
79
  /**
56
80
  * Resolve uma sessão ativa em contexto autenticado (o que o middleware da API
57
81
  * chama por request). Exige tenant ativo já selecionado.
82
+ *
83
+ * ## Por que a membership é reconferida a cada requisição
84
+ *
85
+ * `selectTenant` conferia a membership; `authenticate` não. Quem já estava
86
+ * dentro continuava dentro: revogar o acesso de alguém fechava a porta e não
87
+ * tirava ninguém da sala.
88
+ *
89
+ * Medido em 2026-09-06, contra o stack local, com o token de uma sessão já
90
+ * amarrada ao tenant:
91
+ *
92
+ * POST /v1/auth/select-tenant -> 403 (a revogação valia)
93
+ * GET /v1/clients -> 200 (e não valia)
94
+ *
95
+ * Em produção havia três sessões nessa condição, de uma conta revogada às 13:00
96
+ * do mesmo dia, com validade até as 21:56. Para o escritório o efeito é direto:
97
+ * revogar o acesso de quem sai da equipe só surtiria efeito quando a sessão
98
+ * dele expirasse — até doze horas depois.
99
+ *
100
+ * A conferência custa um JOIN na consulta que já existe: nenhuma ida a mais ao
101
+ * banco. E é fail-closed — sem membership ativa, 403, independentemente do que
102
+ * o `user_role` ainda diga.
58
103
  */
59
104
  export declare function authenticate(db: Db, token: string, clock?: Nower): Promise<AuthContext>;
60
105
  /** Memberships da sessão atual (para o seletor de tenant, antes de escolher um). */
@@ -66,5 +111,18 @@ export declare function sessionProducts(db: Db, token: string): Promise<{
66
111
  }>;
67
112
  /** Revoga a sessão (logout). */
68
113
  export declare function logout(db: Db, token: string): Promise<void>;
114
+ /**
115
+ * Troca de senha em sessão autenticada (exige a senha atual — distinto do
116
+ * fluxo de token de `resetPassword`). Cobre tanto a troca voluntária quanto a
117
+ * troca obrigatória de `must_change_password`; a sessão corrente permanece
118
+ * válida (não é o cenário de "conta pode estar comprometida" do reset).
119
+ */
120
+ export declare function changePassword(db: Db, auth: {
121
+ userId: string;
122
+ tenantId: string;
123
+ }, input: {
124
+ currentPassword: string;
125
+ newPassword: string;
126
+ } & AuditContext): Promise<void>;
69
127
  export {};
70
128
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"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"}