@baruk/core 0.3.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.baruk-provenance.json +10 -0
- package/CHANGELOG.md +85 -0
- package/dist/auth/password-reset.d.ts +30 -1
- package/dist/auth/password-reset.d.ts.map +1 -1
- package/dist/auth/password-reset.js +139 -11
- package/dist/auth/password-reset.js.map +1 -1
- package/dist/auth/service.d.ts +39 -2
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +75 -10
- package/dist/auth/service.js.map +1 -1
- package/dist/billing/ar-repository.d.ts +334 -0
- package/dist/billing/ar-repository.d.ts.map +1 -0
- package/dist/billing/ar-repository.js +707 -0
- package/dist/billing/ar-repository.js.map +1 -0
- package/dist/billing/auto-generation.d.ts +87 -0
- package/dist/billing/auto-generation.d.ts.map +1 -0
- package/dist/billing/auto-generation.js +181 -0
- package/dist/billing/auto-generation.js.map +1 -0
- package/dist/billing/live-guard.d.ts +64 -0
- package/dist/billing/live-guard.d.ts.map +1 -0
- package/dist/billing/live-guard.js +68 -0
- package/dist/billing/live-guard.js.map +1 -0
- package/dist/billing/payment-means-catalog.d.ts +17 -0
- package/dist/billing/payment-means-catalog.d.ts.map +1 -0
- package/dist/billing/payment-means-catalog.js +21 -0
- package/dist/billing/payment-means-catalog.js.map +1 -0
- package/dist/billing/payment-means.d.ts +38 -0
- package/dist/billing/payment-means.d.ts.map +1 -0
- package/dist/billing/payment-means.js +29 -0
- package/dist/billing/payment-means.js.map +1 -0
- package/dist/billing/payment-rail.d.ts +118 -0
- package/dist/billing/payment-rail.d.ts.map +1 -0
- package/dist/billing/payment-rail.js +295 -0
- package/dist/billing/payment-rail.js.map +1 -0
- package/dist/billing/provider/asaas.d.ts +46 -1
- package/dist/billing/provider/asaas.d.ts.map +1 -1
- package/dist/billing/provider/asaas.js +194 -14
- package/dist/billing/provider/asaas.js.map +1 -1
- package/dist/billing/provider/manual.js +1 -1
- package/dist/billing/provider/manual.js.map +1 -1
- package/dist/billing/provider/types.d.ts +115 -8
- package/dist/billing/provider/types.d.ts.map +1 -1
- package/dist/billing/provider-account.d.ts +89 -0
- package/dist/billing/provider-account.d.ts.map +1 -0
- package/dist/billing/provider-account.js +161 -0
- package/dist/billing/provider-account.js.map +1 -0
- package/dist/billing/provider-onboarding.d.ts +67 -0
- package/dist/billing/provider-onboarding.d.ts.map +1 -0
- package/dist/billing/provider-onboarding.js +234 -0
- package/dist/billing/provider-onboarding.js.map +1 -0
- package/dist/billing/receivable.d.ts +5 -1
- package/dist/billing/receivable.d.ts.map +1 -1
- package/dist/billing/reconcile.d.ts +58 -0
- package/dist/billing/reconcile.d.ts.map +1 -0
- package/dist/billing/reconcile.js +138 -0
- package/dist/billing/reconcile.js.map +1 -0
- package/dist/billing/repository.d.ts +90 -1
- package/dist/billing/repository.d.ts.map +1 -1
- package/dist/billing/repository.js +148 -19
- package/dist/billing/repository.js.map +1 -1
- package/dist/cjs/auth/password-reset.js +141 -11
- package/dist/cjs/auth/password-reset.js.map +1 -1
- package/dist/cjs/auth/service.js +75 -9
- package/dist/cjs/auth/service.js.map +1 -1
- package/dist/cjs/billing/ar-repository.js +728 -0
- package/dist/cjs/billing/ar-repository.js.map +1 -0
- package/dist/cjs/billing/auto-generation.js +186 -0
- package/dist/cjs/billing/auto-generation.js.map +1 -0
- package/dist/cjs/billing/live-guard.js +72 -0
- package/dist/cjs/billing/live-guard.js.map +1 -0
- package/dist/cjs/billing/payment-means-catalog.js +25 -0
- package/dist/cjs/billing/payment-means-catalog.js.map +1 -0
- package/dist/cjs/billing/payment-means.js +33 -0
- package/dist/cjs/billing/payment-means.js.map +1 -0
- package/dist/cjs/billing/payment-rail.js +301 -0
- package/dist/cjs/billing/payment-rail.js.map +1 -0
- package/dist/cjs/billing/provider/asaas.js +194 -14
- package/dist/cjs/billing/provider/asaas.js.map +1 -1
- package/dist/cjs/billing/provider/manual.js +1 -1
- package/dist/cjs/billing/provider/manual.js.map +1 -1
- package/dist/cjs/billing/provider-account.js +170 -0
- package/dist/cjs/billing/provider-account.js.map +1 -0
- package/dist/cjs/billing/provider-onboarding.js +239 -0
- package/dist/cjs/billing/provider-onboarding.js.map +1 -0
- package/dist/cjs/billing/reconcile.js +143 -0
- package/dist/cjs/billing/reconcile.js.map +1 -0
- package/dist/cjs/billing/repository.js +150 -18
- package/dist/cjs/billing/repository.js.map +1 -1
- package/dist/cjs/clients/repository.js +96 -20
- package/dist/cjs/clients/repository.js.map +1 -1
- package/dist/cjs/collection/branding.js +140 -0
- package/dist/cjs/collection/branding.js.map +1 -0
- package/dist/cjs/collection/channel-accounts.js +137 -0
- package/dist/cjs/collection/channel-accounts.js.map +1 -0
- package/dist/cjs/collection/channel.js +17 -0
- package/dist/cjs/collection/channel.js.map +1 -0
- package/dist/cjs/collection/communication-bridge.js +140 -0
- package/dist/cjs/collection/communication-bridge.js.map +1 -0
- package/dist/cjs/collection/communication-runtime.js +193 -0
- package/dist/cjs/collection/communication-runtime.js.map +1 -0
- package/dist/cjs/collection/consent-repository.js +84 -0
- package/dist/cjs/collection/consent-repository.js.map +1 -0
- package/dist/cjs/collection/copy.js +125 -0
- package/dist/cjs/collection/copy.js.map +1 -0
- package/dist/cjs/collection/delivery-callback.js +151 -0
- package/dist/cjs/collection/delivery-callback.js.map +1 -0
- package/dist/cjs/collection/email-layout.js +252 -0
- package/dist/cjs/collection/email-layout.js.map +1 -0
- package/dist/cjs/collection/engine.js +414 -0
- package/dist/cjs/collection/engine.js.map +1 -0
- package/dist/cjs/collection/format.js +76 -0
- package/dist/cjs/collection/format.js.map +1 -0
- package/dist/cjs/collection/payment-block.js +3 -0
- package/dist/cjs/collection/payment-block.js.map +1 -0
- package/dist/cjs/collection/policy.js +147 -0
- package/dist/cjs/collection/policy.js.map +1 -0
- package/dist/cjs/collection/repository.js +260 -0
- package/dist/cjs/collection/repository.js.map +1 -0
- package/dist/cjs/collection/subject.js +104 -0
- package/dist/cjs/collection/subject.js.map +1 -0
- package/dist/cjs/collection/template-catalog.js +165 -0
- package/dist/cjs/collection/template-catalog.js.map +1 -0
- package/dist/cjs/collection/template.js +78 -0
- package/dist/cjs/collection/template.js.map +1 -0
- package/dist/cjs/communication/adapters/email.js +132 -0
- package/dist/cjs/communication/adapters/email.js.map +1 -0
- package/dist/cjs/communication/adapters/sms.js +127 -0
- package/dist/cjs/communication/adapters/sms.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js +39 -0
- package/dist/cjs/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js +100 -0
- package/dist/cjs/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/cjs/communication/adapters/whatsapp.js +213 -0
- package/dist/cjs/communication/adapters/whatsapp.js.map +1 -0
- package/dist/cjs/communication/audit.js +61 -0
- package/dist/cjs/communication/audit.js.map +1 -0
- package/dist/cjs/communication/capabilities.js +76 -0
- package/dist/cjs/communication/capabilities.js.map +1 -0
- package/dist/cjs/communication/channel.js +53 -0
- package/dist/cjs/communication/channel.js.map +1 -0
- package/dist/cjs/communication/claim.js +228 -0
- package/dist/cjs/communication/claim.js.map +1 -0
- package/dist/cjs/communication/consent.js +43 -0
- package/dist/cjs/communication/consent.js.map +1 -0
- package/dist/cjs/communication/context.js +45 -0
- package/dist/cjs/communication/context.js.map +1 -0
- package/dist/cjs/communication/credentials.js +121 -0
- package/dist/cjs/communication/credentials.js.map +1 -0
- package/dist/cjs/communication/dry-run-scenario.js +161 -0
- package/dist/cjs/communication/dry-run-scenario.js.map +1 -0
- package/dist/cjs/communication/dry-run.js +97 -0
- package/dist/cjs/communication/dry-run.js.map +1 -0
- package/dist/cjs/communication/engine.js +483 -0
- package/dist/cjs/communication/engine.js.map +1 -0
- package/dist/cjs/communication/graph.js +50 -0
- package/dist/cjs/communication/graph.js.map +1 -0
- package/dist/cjs/communication/idempotency.js +26 -0
- package/dist/cjs/communication/idempotency.js.map +1 -0
- package/dist/cjs/communication/identity.js +110 -0
- package/dist/cjs/communication/identity.js.map +1 -0
- package/dist/cjs/communication/index.js +135 -0
- package/dist/cjs/communication/index.js.map +1 -0
- package/dist/cjs/communication/onboarding.js +297 -0
- package/dist/cjs/communication/onboarding.js.map +1 -0
- package/dist/cjs/communication/policy.js +16 -0
- package/dist/cjs/communication/policy.js.map +1 -0
- package/dist/cjs/communication/routing.js +77 -0
- package/dist/cjs/communication/routing.js.map +1 -0
- package/dist/cjs/communication/sender-profile.js +128 -0
- package/dist/cjs/communication/sender-profile.js.map +1 -0
- package/dist/cjs/communication/status.js +86 -0
- package/dist/cjs/communication/status.js.map +1 -0
- package/dist/cjs/communication/stores/onboarding.js +135 -0
- package/dist/cjs/communication/stores/onboarding.js.map +1 -0
- package/dist/cjs/communication/stores/postgres.js +458 -0
- package/dist/cjs/communication/stores/postgres.js.map +1 -0
- package/dist/cjs/communication/stores/routing.js +334 -0
- package/dist/cjs/communication/stores/routing.js.map +1 -0
- package/dist/cjs/communication/stores/secrets.js +126 -0
- package/dist/cjs/communication/stores/secrets.js.map +1 -0
- package/dist/cjs/communication/template-provider.js +22 -0
- package/dist/cjs/communication/template-provider.js.map +1 -0
- package/dist/cjs/communication/template.js +63 -0
- package/dist/cjs/communication/template.js.map +1 -0
- package/dist/cjs/communication/webhook-subscription.js +258 -0
- package/dist/cjs/communication/webhook-subscription.js.map +1 -0
- package/dist/cjs/communication/webhook.js +292 -0
- package/dist/cjs/communication/webhook.js.map +1 -0
- package/dist/cjs/competence/repository.js +309 -0
- package/dist/cjs/competence/repository.js.map +1 -0
- package/dist/cjs/contacts/phone.js +192 -0
- package/dist/cjs/contacts/phone.js.map +1 -0
- package/dist/cjs/db/seed-catalog.js +48 -0
- package/dist/cjs/db/seed-catalog.js.map +1 -0
- package/dist/cjs/db/seed.js +15 -7
- package/dist/cjs/db/seed.js.map +1 -1
- package/dist/cjs/documents/repository.js +244 -0
- package/dist/cjs/documents/repository.js.map +1 -0
- package/dist/cjs/documents/requests.js +136 -0
- package/dist/cjs/documents/requests.js.map +1 -0
- package/dist/cjs/index.js +406 -39
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/legal/documents.js +125 -3
- package/dist/cjs/legal/documents.js.map +1 -1
- package/dist/cjs/legal/types.js +1 -0
- package/dist/cjs/legal/types.js.map +1 -1
- package/dist/cjs/mail/auth-templates.js +29 -0
- package/dist/cjs/mail/auth-templates.js.map +1 -0
- package/dist/cjs/mail/dedup-store.js +12 -51
- package/dist/cjs/mail/dedup-store.js.map +1 -1
- package/dist/cjs/mail/index.js +16 -4
- package/dist/cjs/mail/index.js.map +1 -1
- package/dist/cjs/mail/provider.js +12 -247
- package/dist/cjs/mail/provider.js.map +1 -1
- package/dist/cjs/mail/resend.js +14 -18
- package/dist/cjs/mail/resend.js.map +1 -1
- package/dist/cjs/mail/sender-resolver.js +12 -11
- package/dist/cjs/mail/sender-resolver.js.map +1 -1
- package/dist/cjs/mail/template-renderer.js +11 -16
- package/dist/cjs/mail/template-renderer.js.map +1 -1
- package/dist/cjs/mail/transactional-outbound.js +117 -0
- package/dist/cjs/mail/transactional-outbound.js.map +1 -0
- package/dist/cjs/mail/types.js +8 -35
- package/dist/cjs/mail/types.js.map +1 -1
- package/dist/cjs/portal/provisioning.js +144 -0
- package/dist/cjs/portal/provisioning.js.map +1 -0
- package/dist/cjs/pricing-engine/canonical.js +42 -0
- package/dist/cjs/pricing-engine/canonical.js.map +1 -0
- package/dist/cjs/pricing-engine/errors.js +6 -1
- package/dist/cjs/pricing-engine/errors.js.map +1 -1
- package/dist/cjs/pricing-engine/index.js +12 -1
- package/dist/cjs/pricing-engine/index.js.map +1 -1
- package/dist/cjs/pricing-engine/pipeline.js +200 -26
- package/dist/cjs/pricing-engine/pipeline.js.map +1 -1
- package/dist/cjs/pricing-engine/shadow-adapter.js +79 -0
- package/dist/cjs/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-diff.js +55 -0
- package/dist/cjs/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-facade.js +85 -0
- package/dist/cjs/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js +19 -0
- package/dist/cjs/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js +34 -0
- package/dist/cjs/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js +42 -0
- package/dist/cjs/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/cjs/rbac/authorize.js +28 -0
- package/dist/cjs/rbac/authorize.js.map +1 -1
- package/dist/cjs/rbac/catalog.js +67 -1
- package/dist/cjs/rbac/catalog.js.map +1 -1
- package/dist/cjs/rbac/workload-provisioning.js +160 -0
- package/dist/cjs/rbac/workload-provisioning.js.map +1 -0
- package/dist/cjs/rbac/workload.js +191 -0
- package/dist/cjs/rbac/workload.js.map +1 -0
- package/dist/cjs/storage/checksum.js +15 -0
- package/dist/cjs/storage/checksum.js.map +1 -0
- package/dist/cjs/storage/key.js +72 -0
- package/dist/cjs/storage/key.js.map +1 -0
- package/dist/cjs/storage/local.js +100 -0
- package/dist/cjs/storage/local.js.map +1 -0
- package/dist/cjs/storage/r2.js +181 -0
- package/dist/cjs/storage/r2.js.map +1 -0
- package/dist/cjs/storage/registry.js +41 -0
- package/dist/cjs/storage/registry.js.map +1 -0
- package/dist/cjs/storage/types.js +50 -0
- package/dist/cjs/storage/types.js.map +1 -0
- package/dist/cjs/subscription-billing/provider/asaas.js +32 -7
- package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/disabled.js +8 -0
- package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/cjs/subscription-billing/provider/registry.js +17 -0
- package/dist/cjs/subscription-billing/provider/registry.js.map +1 -1
- package/dist/cjs/subscription-billing/service.js +57 -8
- package/dist/cjs/subscription-billing/service.js.map +1 -1
- package/dist/cjs/subscription-billing/types.js.map +1 -1
- package/dist/cjs/tenancy/provisioning.js +32 -8
- package/dist/cjs/tenancy/provisioning.js.map +1 -1
- package/dist/cjs/users/repository.js +119 -2
- package/dist/cjs/users/repository.js.map +1 -1
- package/dist/cjs/vault/repository.js +81 -0
- package/dist/cjs/vault/repository.js.map +1 -1
- package/dist/clients/repository.d.ts +42 -0
- package/dist/clients/repository.d.ts.map +1 -1
- package/dist/clients/repository.js +94 -21
- package/dist/clients/repository.js.map +1 -1
- package/dist/collection/branding.d.ts +72 -0
- package/dist/collection/branding.d.ts.map +1 -0
- package/dist/collection/branding.js +136 -0
- package/dist/collection/branding.js.map +1 -0
- package/dist/collection/channel-accounts.d.ts +57 -0
- package/dist/collection/channel-accounts.d.ts.map +1 -0
- package/dist/collection/channel-accounts.js +133 -0
- package/dist/collection/channel-accounts.js.map +1 -0
- package/dist/collection/channel.d.ts +24 -0
- package/dist/collection/channel.d.ts.map +1 -0
- package/dist/collection/channel.js +16 -0
- package/dist/collection/channel.js.map +1 -0
- package/dist/collection/communication-bridge.d.ts +66 -0
- package/dist/collection/communication-bridge.d.ts.map +1 -0
- package/dist/collection/communication-bridge.js +134 -0
- package/dist/collection/communication-bridge.js.map +1 -0
- package/dist/collection/communication-runtime.d.ts +95 -0
- package/dist/collection/communication-runtime.d.ts.map +1 -0
- package/dist/collection/communication-runtime.js +187 -0
- package/dist/collection/communication-runtime.js.map +1 -0
- package/dist/collection/consent-repository.d.ts +32 -0
- package/dist/collection/consent-repository.d.ts.map +1 -0
- package/dist/collection/consent-repository.js +79 -0
- package/dist/collection/consent-repository.js.map +1 -0
- package/dist/collection/copy.d.ts +50 -0
- package/dist/collection/copy.d.ts.map +1 -0
- package/dist/collection/copy.js +122 -0
- package/dist/collection/copy.js.map +1 -0
- package/dist/collection/delivery-callback.d.ts +49 -0
- package/dist/collection/delivery-callback.d.ts.map +1 -0
- package/dist/collection/delivery-callback.js +147 -0
- package/dist/collection/delivery-callback.js.map +1 -0
- package/dist/collection/email-layout.d.ts +45 -0
- package/dist/collection/email-layout.d.ts.map +1 -0
- package/dist/collection/email-layout.js +247 -0
- package/dist/collection/email-layout.js.map +1 -0
- package/dist/collection/engine.d.ts +177 -0
- package/dist/collection/engine.d.ts.map +1 -0
- package/dist/collection/engine.js +407 -0
- package/dist/collection/engine.js.map +1 -0
- package/dist/collection/format.d.ts +32 -0
- package/dist/collection/format.d.ts.map +1 -0
- package/dist/collection/format.js +70 -0
- package/dist/collection/format.js.map +1 -0
- package/dist/collection/payment-block.d.ts +24 -0
- package/dist/collection/payment-block.d.ts.map +1 -0
- package/dist/collection/payment-block.js +2 -0
- package/dist/collection/payment-block.js.map +1 -0
- package/dist/collection/policy.d.ts +53 -0
- package/dist/collection/policy.d.ts.map +1 -0
- package/dist/collection/policy.js +141 -0
- package/dist/collection/policy.js.map +1 -0
- package/dist/collection/repository.d.ts +129 -0
- package/dist/collection/repository.d.ts.map +1 -0
- package/dist/collection/repository.js +246 -0
- package/dist/collection/repository.js.map +1 -0
- package/dist/collection/subject.d.ts +66 -0
- package/dist/collection/subject.d.ts.map +1 -0
- package/dist/collection/subject.js +99 -0
- package/dist/collection/subject.js.map +1 -0
- package/dist/collection/template-catalog.d.ts +16 -0
- package/dist/collection/template-catalog.d.ts.map +1 -0
- package/dist/collection/template-catalog.js +162 -0
- package/dist/collection/template-catalog.js.map +1 -0
- package/dist/collection/template.d.ts +37 -0
- package/dist/collection/template.d.ts.map +1 -0
- package/dist/collection/template.js +73 -0
- package/dist/collection/template.js.map +1 -0
- package/dist/communication/adapters/email.d.ts +28 -0
- package/dist/communication/adapters/email.d.ts.map +1 -0
- package/dist/communication/adapters/email.js +129 -0
- package/dist/communication/adapters/email.js.map +1 -0
- package/dist/communication/adapters/sms.d.ts +95 -0
- package/dist/communication/adapters/sms.d.ts.map +1 -0
- package/dist/communication/adapters/sms.js +121 -0
- package/dist/communication/adapters/sms.js.map +1 -0
- package/dist/communication/adapters/whatsapp-language.d.ts +34 -0
- package/dist/communication/adapters/whatsapp-language.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-language.js +36 -0
- package/dist/communication/adapters/whatsapp-language.js.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts +18 -0
- package/dist/communication/adapters/whatsapp-templates.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp-templates.js +97 -0
- package/dist/communication/adapters/whatsapp-templates.js.map +1 -0
- package/dist/communication/adapters/whatsapp.d.ts +29 -0
- package/dist/communication/adapters/whatsapp.d.ts.map +1 -0
- package/dist/communication/adapters/whatsapp.js +210 -0
- package/dist/communication/adapters/whatsapp.js.map +1 -0
- package/dist/communication/audit.d.ts +105 -0
- package/dist/communication/audit.d.ts.map +1 -0
- package/dist/communication/audit.js +56 -0
- package/dist/communication/audit.js.map +1 -0
- package/dist/communication/capabilities.d.ts +88 -0
- package/dist/communication/capabilities.d.ts.map +1 -0
- package/dist/communication/capabilities.js +72 -0
- package/dist/communication/capabilities.js.map +1 -0
- package/dist/communication/channel.d.ts +125 -0
- package/dist/communication/channel.d.ts.map +1 -0
- package/dist/communication/channel.js +47 -0
- package/dist/communication/channel.js.map +1 -0
- package/dist/communication/claim.d.ts +368 -0
- package/dist/communication/claim.d.ts.map +1 -0
- package/dist/communication/claim.js +224 -0
- package/dist/communication/claim.js.map +1 -0
- package/dist/communication/consent.d.ts +65 -0
- package/dist/communication/consent.d.ts.map +1 -0
- package/dist/communication/consent.js +40 -0
- package/dist/communication/consent.js.map +1 -0
- package/dist/communication/context.d.ts +48 -0
- package/dist/communication/context.d.ts.map +1 -0
- package/dist/communication/context.js +41 -0
- package/dist/communication/context.js.map +1 -0
- package/dist/communication/credentials.d.ts +74 -0
- package/dist/communication/credentials.d.ts.map +1 -0
- package/dist/communication/credentials.js +115 -0
- package/dist/communication/credentials.js.map +1 -0
- package/dist/communication/dry-run-scenario.d.ts +37 -0
- package/dist/communication/dry-run-scenario.d.ts.map +1 -0
- package/dist/communication/dry-run-scenario.js +158 -0
- package/dist/communication/dry-run-scenario.js.map +1 -0
- package/dist/communication/dry-run.d.ts +40 -0
- package/dist/communication/dry-run.d.ts.map +1 -0
- package/dist/communication/dry-run.js +92 -0
- package/dist/communication/dry-run.js.map +1 -0
- package/dist/communication/engine.d.ts +153 -0
- package/dist/communication/engine.d.ts.map +1 -0
- package/dist/communication/engine.js +480 -0
- package/dist/communication/engine.js.map +1 -0
- package/dist/communication/graph.d.ts +38 -0
- package/dist/communication/graph.d.ts.map +1 -0
- package/dist/communication/graph.js +45 -0
- package/dist/communication/graph.js.map +1 -0
- package/dist/communication/idempotency.d.ts +33 -0
- package/dist/communication/idempotency.d.ts.map +1 -0
- package/dist/communication/idempotency.js +23 -0
- package/dist/communication/idempotency.js.map +1 -0
- package/dist/communication/identity.d.ts +127 -0
- package/dist/communication/identity.d.ts.map +1 -0
- package/dist/communication/identity.js +105 -0
- package/dist/communication/identity.js.map +1 -0
- package/dist/communication/index.d.ts +66 -0
- package/dist/communication/index.d.ts.map +1 -0
- package/dist/communication/index.js +42 -0
- package/dist/communication/index.js.map +1 -0
- package/dist/communication/onboarding.d.ts +223 -0
- package/dist/communication/onboarding.d.ts.map +1 -0
- package/dist/communication/onboarding.js +287 -0
- package/dist/communication/onboarding.js.map +1 -0
- package/dist/communication/policy.d.ts +99 -0
- package/dist/communication/policy.d.ts.map +1 -0
- package/dist/communication/policy.js +13 -0
- package/dist/communication/policy.js.map +1 -0
- package/dist/communication/routing.d.ts +99 -0
- package/dist/communication/routing.d.ts.map +1 -0
- package/dist/communication/routing.js +73 -0
- package/dist/communication/routing.js.map +1 -0
- package/dist/communication/sender-profile.d.ts +100 -0
- package/dist/communication/sender-profile.d.ts.map +1 -0
- package/dist/communication/sender-profile.js +123 -0
- package/dist/communication/sender-profile.js.map +1 -0
- package/dist/communication/status.d.ts +48 -0
- package/dist/communication/status.d.ts.map +1 -0
- package/dist/communication/status.js +79 -0
- package/dist/communication/status.js.map +1 -0
- package/dist/communication/stores/onboarding.d.ts +88 -0
- package/dist/communication/stores/onboarding.d.ts.map +1 -0
- package/dist/communication/stores/onboarding.js +127 -0
- package/dist/communication/stores/onboarding.js.map +1 -0
- package/dist/communication/stores/postgres.d.ts +81 -0
- package/dist/communication/stores/postgres.d.ts.map +1 -0
- package/dist/communication/stores/postgres.js +453 -0
- package/dist/communication/stores/postgres.js.map +1 -0
- package/dist/communication/stores/routing.d.ts +169 -0
- package/dist/communication/stores/routing.d.ts.map +1 -0
- package/dist/communication/stores/routing.js +324 -0
- package/dist/communication/stores/routing.js.map +1 -0
- package/dist/communication/stores/secrets.d.ts +89 -0
- package/dist/communication/stores/secrets.d.ts.map +1 -0
- package/dist/communication/stores/secrets.js +122 -0
- package/dist/communication/stores/secrets.js.map +1 -0
- package/dist/communication/template-provider.d.ts +85 -0
- package/dist/communication/template-provider.d.ts.map +1 -0
- package/dist/communication/template-provider.js +21 -0
- package/dist/communication/template-provider.js.map +1 -0
- package/dist/communication/template.d.ts +87 -0
- package/dist/communication/template.d.ts.map +1 -0
- package/dist/communication/template.js +59 -0
- package/dist/communication/template.js.map +1 -0
- package/dist/communication/webhook-subscription.d.ts +156 -0
- package/dist/communication/webhook-subscription.d.ts.map +1 -0
- package/dist/communication/webhook-subscription.js +252 -0
- package/dist/communication/webhook-subscription.js.map +1 -0
- package/dist/communication/webhook.d.ts +121 -0
- package/dist/communication/webhook.d.ts.map +1 -0
- package/dist/communication/webhook.js +283 -0
- package/dist/communication/webhook.js.map +1 -0
- package/dist/competence/repository.d.ts +147 -0
- package/dist/competence/repository.d.ts.map +1 -0
- package/dist/competence/repository.js +294 -0
- package/dist/competence/repository.js.map +1 -0
- package/dist/contacts/phone.d.ts +70 -0
- package/dist/contacts/phone.d.ts.map +1 -0
- package/dist/contacts/phone.js +186 -0
- package/dist/contacts/phone.js.map +1 -0
- package/dist/db/migrate.js +17 -11
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/seed-catalog.d.ts +18 -0
- package/dist/db/seed-catalog.d.ts.map +1 -0
- package/dist/db/seed-catalog.js +45 -0
- package/dist/db/seed-catalog.js.map +1 -0
- package/dist/db/seed.js +16 -8
- package/dist/db/seed.js.map +1 -1
- package/dist/documents/repository.d.ts +97 -0
- package/dist/documents/repository.d.ts.map +1 -0
- package/dist/documents/repository.js +236 -0
- package/dist/documents/repository.js.map +1 -0
- package/dist/documents/requests.d.ts +73 -0
- package/dist/documents/requests.d.ts.map +1 -0
- package/dist/documents/requests.js +127 -0
- package/dist/documents/requests.js.map +1 -0
- package/dist/index.d.ts +109 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +100 -8
- package/dist/index.js.map +1 -1
- package/dist/legal/documents.d.ts.map +1 -1
- package/dist/legal/documents.js +125 -3
- package/dist/legal/documents.js.map +1 -1
- package/dist/legal/index.d.ts +1 -1
- package/dist/legal/index.d.ts.map +1 -1
- package/dist/legal/types.d.ts +32 -1
- package/dist/legal/types.d.ts.map +1 -1
- package/dist/legal/types.js +1 -0
- package/dist/legal/types.js.map +1 -1
- package/dist/mail/auth-templates.d.ts +15 -0
- package/dist/mail/auth-templates.d.ts.map +1 -0
- package/dist/mail/auth-templates.js +26 -0
- package/dist/mail/auth-templates.js.map +1 -0
- package/dist/mail/dedup-store.d.ts +1 -24
- package/dist/mail/dedup-store.d.ts.map +1 -1
- package/dist/mail/dedup-store.js +9 -48
- package/dist/mail/dedup-store.js.map +1 -1
- package/dist/mail/index.d.ts +2 -1
- package/dist/mail/index.d.ts.map +1 -1
- package/dist/mail/index.js +13 -2
- package/dist/mail/index.js.map +1 -1
- package/dist/mail/provider.d.ts +2 -30
- package/dist/mail/provider.d.ts.map +1 -1
- package/dist/mail/provider.js +10 -246
- package/dist/mail/provider.js.map +1 -1
- package/dist/mail/resend.d.ts +2 -12
- package/dist/mail/resend.d.ts.map +1 -1
- package/dist/mail/resend.js +11 -17
- package/dist/mail/resend.js.map +1 -1
- package/dist/mail/sender-resolver.d.ts +1 -7
- package/dist/mail/sender-resolver.d.ts.map +1 -1
- package/dist/mail/sender-resolver.js +11 -10
- package/dist/mail/sender-resolver.js.map +1 -1
- package/dist/mail/template-renderer.d.ts +1 -9
- package/dist/mail/template-renderer.d.ts.map +1 -1
- package/dist/mail/template-renderer.js +10 -15
- package/dist/mail/template-renderer.js.map +1 -1
- package/dist/mail/transactional-outbound.d.ts +115 -0
- package/dist/mail/transactional-outbound.d.ts.map +1 -0
- package/dist/mail/transactional-outbound.js +113 -0
- package/dist/mail/transactional-outbound.js.map +1 -0
- package/dist/mail/types.d.ts +2 -142
- package/dist/mail/types.d.ts.map +1 -1
- package/dist/mail/types.js +1 -33
- package/dist/mail/types.js.map +1 -1
- package/dist/portal/provisioning.d.ts +58 -0
- package/dist/portal/provisioning.d.ts.map +1 -0
- package/dist/portal/provisioning.js +139 -0
- package/dist/portal/provisioning.js.map +1 -0
- package/dist/pricing-engine/canonical.d.ts +14 -0
- package/dist/pricing-engine/canonical.d.ts.map +1 -0
- package/dist/pricing-engine/canonical.js +39 -0
- package/dist/pricing-engine/canonical.js.map +1 -0
- package/dist/pricing-engine/errors.d.ts.map +1 -1
- package/dist/pricing-engine/errors.js +6 -1
- package/dist/pricing-engine/errors.js.map +1 -1
- package/dist/pricing-engine/index.d.ts +12 -2
- package/dist/pricing-engine/index.d.ts.map +1 -1
- package/dist/pricing-engine/index.js +6 -1
- package/dist/pricing-engine/index.js.map +1 -1
- package/dist/pricing-engine/pipeline.d.ts.map +1 -1
- package/dist/pricing-engine/pipeline.js +202 -28
- package/dist/pricing-engine/pipeline.js.map +1 -1
- package/dist/pricing-engine/shadow-adapter.d.ts +37 -0
- package/dist/pricing-engine/shadow-adapter.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-adapter.js +75 -0
- package/dist/pricing-engine/shadow-adapter.js.map +1 -0
- package/dist/pricing-engine/shadow-diff.d.ts +26 -0
- package/dist/pricing-engine/shadow-diff.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-diff.js +52 -0
- package/dist/pricing-engine/shadow-diff.js.map +1 -0
- package/dist/pricing-engine/shadow-facade.d.ts +42 -0
- package/dist/pricing-engine/shadow-facade.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-facade.js +82 -0
- package/dist/pricing-engine/shadow-facade.js.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts +64 -0
- package/dist/pricing-engine/shadow-legacy-types.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-legacy-types.js +18 -0
- package/dist/pricing-engine/shadow-legacy-types.js.map +1 -0
- package/dist/pricing-engine/shadow-metrics.d.ts +33 -0
- package/dist/pricing-engine/shadow-metrics.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-metrics.js +31 -0
- package/dist/pricing-engine/shadow-metrics.js.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts +17 -0
- package/dist/pricing-engine/shadow-normalizer.d.ts.map +1 -0
- package/dist/pricing-engine/shadow-normalizer.js +39 -0
- package/dist/pricing-engine/shadow-normalizer.js.map +1 -0
- package/dist/pricing-engine/types.d.ts +2 -0
- package/dist/pricing-engine/types.d.ts.map +1 -1
- package/dist/rbac/authorize.d.ts +12 -0
- package/dist/rbac/authorize.d.ts.map +1 -1
- package/dist/rbac/authorize.js +27 -0
- package/dist/rbac/authorize.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +67 -1
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/rbac/workload-provisioning.d.ts +66 -0
- package/dist/rbac/workload-provisioning.d.ts.map +1 -0
- package/dist/rbac/workload-provisioning.js +153 -0
- package/dist/rbac/workload-provisioning.js.map +1 -0
- package/dist/rbac/workload.d.ts +124 -0
- package/dist/rbac/workload.d.ts.map +1 -0
- package/dist/rbac/workload.js +184 -0
- package/dist/rbac/workload.js.map +1 -0
- package/dist/storage/checksum.d.ts +9 -0
- package/dist/storage/checksum.d.ts.map +1 -0
- package/dist/storage/checksum.js +12 -0
- package/dist/storage/checksum.js.map +1 -0
- package/dist/storage/key.d.ts +37 -0
- package/dist/storage/key.d.ts.map +1 -0
- package/dist/storage/key.js +67 -0
- package/dist/storage/key.js.map +1 -0
- package/dist/storage/local.d.ts +40 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +96 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/r2.d.ts +43 -0
- package/dist/storage/r2.d.ts.map +1 -0
- package/dist/storage/r2.js +177 -0
- package/dist/storage/r2.js.map +1 -0
- package/dist/storage/registry.d.ts +23 -0
- package/dist/storage/registry.d.ts.map +1 -0
- package/dist/storage/registry.js +37 -0
- package/dist/storage/registry.js.map +1 -0
- package/dist/storage/types.d.ts +67 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +45 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/subscription-billing/provider/asaas.d.ts +14 -0
- package/dist/subscription-billing/provider/asaas.d.ts.map +1 -1
- package/dist/subscription-billing/provider/asaas.js +32 -7
- package/dist/subscription-billing/provider/asaas.js.map +1 -1
- package/dist/subscription-billing/provider/disabled.d.ts +9 -0
- package/dist/subscription-billing/provider/disabled.d.ts.map +1 -1
- package/dist/subscription-billing/provider/disabled.js +8 -0
- package/dist/subscription-billing/provider/disabled.js.map +1 -1
- package/dist/subscription-billing/provider/registry.d.ts +10 -0
- package/dist/subscription-billing/provider/registry.d.ts.map +1 -1
- package/dist/subscription-billing/provider/registry.js +17 -0
- package/dist/subscription-billing/provider/registry.js.map +1 -1
- package/dist/subscription-billing/service.d.ts +17 -1
- package/dist/subscription-billing/service.d.ts.map +1 -1
- package/dist/subscription-billing/service.js +57 -8
- package/dist/subscription-billing/service.js.map +1 -1
- package/dist/subscription-billing/types.d.ts +13 -0
- package/dist/subscription-billing/types.d.ts.map +1 -1
- package/dist/subscription-billing/types.js.map +1 -1
- package/dist/tenancy/provisioning.d.ts.map +1 -1
- package/dist/tenancy/provisioning.js +32 -8
- package/dist/tenancy/provisioning.js.map +1 -1
- package/dist/users/repository.d.ts +38 -0
- package/dist/users/repository.d.ts.map +1 -1
- package/dist/users/repository.js +118 -3
- package/dist/users/repository.js.map +1 -1
- package/dist/vault/repository.d.ts +67 -0
- package/dist/vault/repository.d.ts.map +1 -1
- package/dist/vault/repository.js +78 -0
- package/dist/vault/repository.js.map +1 -1
- package/package.json +13 -4
- package/src/db/migrations/0023_user_invite_activation.sql +15 -0
- package/src/db/migrations/0024_set_user_password_function.sql +32 -0
- package/src/db/migrations/0025_revoke_user_session_function.sql +28 -0
- package/src/db/migrations/0026_documents_and_competence.sql +353 -0
- package/src/db/migrations/0027_receivable_client_isolation.sql +58 -0
- package/src/db/migrations/0028_collection_engine.sql +94 -0
- package/src/db/migrations/0029_payment_rail.sql +107 -0
- package/src/db/migrations/0030_provider_account_uniqueness.sql +22 -0
- package/src/db/migrations/0031_provider_account_environment_scope.sql +21 -0
- package/src/db/migrations/0032_settlement_reversal.sql +76 -0
- package/src/db/migrations/0033_receivable_idempotency.sql +28 -0
- package/src/db/migrations/0034_payment_customer_reconcile.sql +30 -0
- package/src/db/migrations/0035_payment_account_environments.sql +61 -0
- package/src/db/migrations/0036_primary_backfill_under_force_rls.sql +41 -0
- package/src/db/migrations/0037_receivable_generation_source.sql +29 -0
- package/src/db/migrations/0038_notification_channels.sql +175 -0
- package/src/db/migrations/0039_communication_dispatch_claim.sql +193 -0
- package/src/db/migrations/0040_communication_unknown_outcome.sql +99 -0
- package/src/db/migrations/0041_channel_binding_routing.sql +146 -0
- package/src/db/migrations/0042_channel_route_read_isolation.sql +165 -0
- package/src/db/migrations/0043_workload_identity.sql +105 -0
- package/src/db/migrations/0044_channel_onboarding_session.sql +96 -0
- package/dist/cjs/mail/resend-client.js +0 -103
- package/dist/cjs/mail/resend-client.js.map +0 -1
- package/dist/mail/resend-client.d.ts +0 -16
- package/dist/mail/resend-client.d.ts.map +0 -1
- package/dist/mail/resend-client.js +0 -100
- 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.4.2",
|
|
5
|
+
"commit": "4efaf736bbec6ba38bef994c950302186b6c15fc",
|
|
6
|
+
"repository": "WellingtonOliveira12/baruk-platform",
|
|
7
|
+
"workflowRef": "WellingtonOliveira12/baruk-ecosystem/.github/workflows/package-release-control.yml@refs/heads/main",
|
|
8
|
+
"runId": "33760738458",
|
|
9
|
+
"builtAt": "2026-09-03T13:23:11.511Z"
|
|
10
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -5,8 +5,93 @@ Versionamento: [SemVer](https://semver.org/lang/pt-BR/).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.4.2] — 2026-09-03
|
|
9
|
+
|
|
10
|
+
### Corrigido
|
|
11
|
+
|
|
12
|
+
- **`.baruk-provenance.json` entra no `files`.** O `write-provenance.mjs` grava a
|
|
13
|
+
provenance dentro do pacote antes do `pack`, mas o `files` deste manifesto não a
|
|
14
|
+
listava — e o npm descarta em silêncio o que não está na allowlist. O pacote publicado
|
|
15
|
+
prometia rastreabilidade e não a carregava.
|
|
16
|
+
|
|
17
|
+
É o `PME-IC-13`, e ele já havia acontecido uma vez. Aqui custou uma Release
|
|
18
|
+
Authorization: a `v0.4.1` foi certificada, autorizada e **reprovada no rebuild**
|
|
19
|
+
obrigatório do Package Release Control. `@baruk/shared` passou no mesmo run, porque o
|
|
20
|
+
`files` dele já incluía a provenance.
|
|
21
|
+
|
|
22
|
+
Um teste passou a vigiar os dois pacotes publicáveis, e a lista que ele vigia é
|
|
23
|
+
conferida contra a do `build-release-request.mjs` — para que um pacote novo não nasça
|
|
24
|
+
fora do guard.
|
|
25
|
+
|
|
26
|
+
### Sem mudança de código
|
|
27
|
+
|
|
28
|
+
A canonicalização da capability de comunicação, descrita na 0.4.0, vale integralmente.
|
|
29
|
+
As versões 0.4.0 e 0.4.1 nunca foram publicadas.
|
|
30
|
+
|
|
31
|
+
## [0.4.1] — 2026-09-02
|
|
32
|
+
|
|
33
|
+
Sem mudança de código em relação à 0.4.0: **apenas o número da versão**.
|
|
34
|
+
|
|
35
|
+
A 0.4.0 nunca foi publicada. A tag `v0.4.0` tem uma Release Authorization
|
|
36
|
+
**revogada**, e a resolução de autorização do control-plane é
|
|
37
|
+
`<candidato>/<tag>.json` — uma tag, um arquivo. Emitir uma autorização nova para
|
|
38
|
+
`v0.4.0` exigiria sobrescrever o registro revogado, e revogação é fato de
|
|
39
|
+
governança: não se reescreve.
|
|
40
|
+
|
|
41
|
+
A saída é publicar sob uma tag que ainda não tem registro. O conteúdo é o mesmo
|
|
42
|
+
da 0.4.0 — a canonicalização descrita ali vale integralmente para esta versão.
|
|
43
|
+
|
|
44
|
+
## [0.4.0] — 2026-09-02
|
|
45
|
+
|
|
46
|
+
### Mudado
|
|
47
|
+
|
|
48
|
+
- **A capability de e-mail transacional deixou de ser implementada aqui.**
|
|
49
|
+
`packages/core/src/mail/` passou a ser **re-export** de
|
|
50
|
+
[`@baruk/communication`](https://www.npmjs.com/package/@baruk/communication),
|
|
51
|
+
que é a fonte canônica de `cap.communication.transactional-email`.
|
|
52
|
+
|
|
53
|
+
Existiam duas implementações. Oito dos nove arquivos eram idênticos byte a
|
|
54
|
+
byte, e o nono **já havia divergido**: o engine aceitava remetente com nome de
|
|
55
|
+
exibição (_name-addr_, RFC 5322) e esta cópia não. Era o começo previsível de
|
|
56
|
+
duas cópias — uma recebe a correção, a outra não, e ninguém percebe até um
|
|
57
|
+
consumidor receber o comportamento antigo.
|
|
58
|
+
|
|
59
|
+
### Adicionado
|
|
60
|
+
|
|
61
|
+
- Dependência `@baruk/communication@^0.2.0` — zero dependências de runtime,
|
|
62
|
+
21 kB.
|
|
63
|
+
- Aceitação de `Nome <caixa@dominio>` no remetente, herdada da capability. Quem
|
|
64
|
+
já usava endereço puro não muda nada.
|
|
65
|
+
|
|
66
|
+
### Compatibilidade
|
|
67
|
+
|
|
68
|
+
**Nenhum consumidor muda uma linha.** Os caminhos de import foram preservados e
|
|
69
|
+
o barrel exporta os mesmos **522 símbolos** — conferidos um a um contra a versão
|
|
70
|
+
anterior. `sc-organizacao-contabil` e `baruk-connect` foram exercitados contra o
|
|
71
|
+
barrel compilado.
|
|
72
|
+
|
|
73
|
+
### Fronteira
|
|
74
|
+
|
|
75
|
+
O guard `communication-provider-boundary` ficou **mais forte**: o endereço do
|
|
76
|
+
provider passou de "existe exatamente uma vez neste repositório" para **"não
|
|
77
|
+
existe"**. Antes era preciso um _segundo_ cliente para ele reagir; agora o
|
|
78
|
+
primeiro reprova.
|
|
79
|
+
|
|
80
|
+
### O que NÃO saiu daqui
|
|
81
|
+
|
|
82
|
+
`auth-templates.ts` (casca HTML com a marca), `transactional-outbound.ts`
|
|
83
|
+
(adapter dos fluxos de identidade) e `sanitize.ts` — este último apesar do nome
|
|
84
|
+
e do lugar, porque `subscription-billing` e `pricing-engine` o usam para log.
|
|
85
|
+
|
|
8
86
|
## [0.3.1] — 2026-08-02
|
|
9
87
|
|
|
88
|
+
### Consumidores
|
|
89
|
+
|
|
90
|
+
- Baruk App (`apps/web`), Dental Plataforma e Baruk Connect consomem
|
|
91
|
+
`@baruk/core/legal`. Dental e Connect resolvem pelo registry (`^0.3.1`) e
|
|
92
|
+
eliminaram as cópias locais dos documentos. O Baruk Office ainda não publica
|
|
93
|
+
documentos legais — ver `docs/architecture/CORE_SHARED_MODULES.md`.
|
|
94
|
+
|
|
10
95
|
### Adicionado
|
|
11
96
|
|
|
12
97
|
- **Legal Center compartilhado** em `@baruk/core/legal`: perfil societário
|
|
@@ -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;
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/service.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
|
|
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;
|
|
@@ -66,5 +90,18 @@ export declare function sessionProducts(db: Db, token: string): Promise<{
|
|
|
66
90
|
}>;
|
|
67
91
|
/** Revoga a sessão (logout). */
|
|
68
92
|
export declare function logout(db: Db, token: string): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Troca de senha em sessão autenticada (exige a senha atual — distinto do
|
|
95
|
+
* fluxo de token de `resetPassword`). Cobre tanto a troca voluntária quanto a
|
|
96
|
+
* troca obrigatória de `must_change_password`; a sessão corrente permanece
|
|
97
|
+
* válida (não é o cenário de "conta pode estar comprometida" do reset).
|
|
98
|
+
*/
|
|
99
|
+
export declare function changePassword(db: Db, auth: {
|
|
100
|
+
userId: string;
|
|
101
|
+
tenantId: string;
|
|
102
|
+
}, input: {
|
|
103
|
+
currentPassword: string;
|
|
104
|
+
newPassword: string;
|
|
105
|
+
} & AuditContext): Promise<void>;
|
|
69
106
|
export {};
|
|
70
107
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"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"}
|
package/dist/auth/service.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ForbiddenError, UnauthorizedError, uuidv7 } from '@baruk/shared';
|
|
1
|
+
import { ForbiddenError, UnauthorizedError, ValidationError, uuidv7, } from '@baruk/shared';
|
|
2
2
|
import { withContext } from '../db/context.js';
|
|
3
3
|
import { appendAudit } from '../audit/audit.js';
|
|
4
4
|
import { loadUserPermissions } from '../rbac/authorize.js';
|
|
@@ -8,7 +8,23 @@ import { hashPassword, verifyPassword } from './password.js';
|
|
|
8
8
|
import { generateSessionToken, hashToken } from './session-token.js';
|
|
9
9
|
const SESSION_TTL_MS = 12 * 60 * 60 * 1000; // 12h
|
|
10
10
|
const REAL_CLOCK = { now: () => Date.now() };
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Cria (ou atualiza) um usuário staff com senha local. Usado pelos seeds.
|
|
13
|
+
*
|
|
14
|
+
* **A senha de um usuário que já existe é preservada por padrão.** Um seed de
|
|
15
|
+
* inicialização é, por natureza, algo que pode rodar de novo — em um deploy, em
|
|
16
|
+
* uma reconstrução de ambiente, na mão de alguém investigando. Se ele redefinir
|
|
17
|
+
* a senha em silêncio, quem administra o ambiente perde o acesso sem receber
|
|
18
|
+
* erro nenhum, e a causa é invisível: o seed "funcionou".
|
|
19
|
+
*
|
|
20
|
+
* Foi exatamente essa a armadilha encontrada em 2026-08-12, quando o
|
|
21
|
+
* `SEED_ADMIN_PASSWORD` do serviço divergiu do valor guardado no cofre. Rodar
|
|
22
|
+
* `db:seed` com o ambiente errado teria trocado a senha do administrador sem
|
|
23
|
+
* um aviso sequer.
|
|
24
|
+
*
|
|
25
|
+
* Para redefinir deliberadamente, passe `overwritePassword: true` — o nome
|
|
26
|
+
* torna a intenção explícita em quem chama, que é onde ela deve estar.
|
|
27
|
+
*/
|
|
12
28
|
export async function upsertUserWithPassword(db, input) {
|
|
13
29
|
const rows = await db `
|
|
14
30
|
INSERT INTO "user" (id, email, full_name, user_type, auth_provider)
|
|
@@ -18,16 +34,28 @@ export async function upsertUserWithPassword(db, input) {
|
|
|
18
34
|
RETURNING id
|
|
19
35
|
`;
|
|
20
36
|
const userId = rows[0].id;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
37
|
+
// `RETURNING` só devolve linha quando o INSERT ou o UPDATE de fato aconteceu:
|
|
38
|
+
// com `DO NOTHING` e credencial preexistente, o resultado é vazio. É assim que
|
|
39
|
+
// sabemos, sem uma consulta extra, se a senha foi gravada ou preservada.
|
|
40
|
+
const written = input.overwritePassword
|
|
41
|
+
? await db `
|
|
42
|
+
INSERT INTO user_credential (user_id, password_hash)
|
|
43
|
+
VALUES (${userId}, ${hashPassword(input.password)})
|
|
44
|
+
ON CONFLICT (user_id) DO UPDATE SET password_hash = EXCLUDED.password_hash, updated_at = now()
|
|
45
|
+
RETURNING user_id
|
|
46
|
+
`
|
|
47
|
+
: await db `
|
|
48
|
+
INSERT INTO user_credential (user_id, password_hash)
|
|
49
|
+
VALUES (${userId}, ${hashPassword(input.password)})
|
|
50
|
+
ON CONFLICT (user_id) DO NOTHING
|
|
51
|
+
RETURNING user_id
|
|
52
|
+
`;
|
|
26
53
|
return {
|
|
27
54
|
id: userId,
|
|
28
55
|
email: input.email,
|
|
29
56
|
fullName: input.fullName,
|
|
30
57
|
userType: input.userType ?? 'staff',
|
|
58
|
+
passwordWasSet: written.length > 0,
|
|
31
59
|
};
|
|
32
60
|
}
|
|
33
61
|
/** Login com e-mail/senha. Emite sessão; auto-seleciona tenant se houver só um. */
|
|
@@ -41,11 +69,12 @@ export async function login(db, input, clock = REAL_CLOCK) {
|
|
|
41
69
|
throw new UnauthorizedError('Credenciais inválidas');
|
|
42
70
|
}
|
|
43
71
|
const creds = await db `
|
|
44
|
-
SELECT password_hash FROM user_credential WHERE user_id = ${user.id}
|
|
72
|
+
SELECT password_hash, must_change_password FROM user_credential WHERE user_id = ${user.id}
|
|
45
73
|
`;
|
|
46
74
|
if (!creds[0] || !verifyPassword(input.password, creds[0].password_hash)) {
|
|
47
75
|
throw new UnauthorizedError('Credenciais inválidas');
|
|
48
76
|
}
|
|
77
|
+
const mustChangePassword = creds[0].must_change_password;
|
|
49
78
|
const { token, tokenHash } = generateSessionToken();
|
|
50
79
|
const now = clock.now();
|
|
51
80
|
const sessionId = uuidv7();
|
|
@@ -73,6 +102,7 @@ export async function login(db, input, clock = REAL_CLOCK) {
|
|
|
73
102
|
user: { id: user.id, email: user.email, fullName: user.full_name, userType: user.user_type },
|
|
74
103
|
memberships,
|
|
75
104
|
activeTenantId,
|
|
105
|
+
mustChangePassword,
|
|
76
106
|
};
|
|
77
107
|
}
|
|
78
108
|
/** Lista os tenants a que o usuário pertence (usa RLS self-clause de membership). */
|
|
@@ -119,6 +149,7 @@ export async function selectTenant(db, input) {
|
|
|
119
149
|
userType: session.user_type,
|
|
120
150
|
tenantId: input.tenantId,
|
|
121
151
|
permissions,
|
|
152
|
+
mustChangePassword: session.must_change_password,
|
|
122
153
|
};
|
|
123
154
|
});
|
|
124
155
|
}
|
|
@@ -139,6 +170,7 @@ export async function authenticate(db, token, clock = REAL_CLOCK) {
|
|
|
139
170
|
userType: session.user_type,
|
|
140
171
|
tenantId,
|
|
141
172
|
permissions,
|
|
173
|
+
mustChangePassword: session.must_change_password,
|
|
142
174
|
};
|
|
143
175
|
if (session.user_type === 'client_portal') {
|
|
144
176
|
ctx.clientId = await getPortalClientId(tx, session.user_id);
|
|
@@ -148,9 +180,11 @@ export async function authenticate(db, token, clock = REAL_CLOCK) {
|
|
|
148
180
|
}
|
|
149
181
|
async function resolveSessionRow(db, token, clock = REAL_CLOCK) {
|
|
150
182
|
const rows = await db `
|
|
151
|
-
SELECT s.id, s.user_id, u.user_type, s.active_tenant_id
|
|
183
|
+
SELECT s.id, s.user_id, u.user_type, s.active_tenant_id,
|
|
184
|
+
coalesce(c.must_change_password, false) AS must_change_password
|
|
152
185
|
FROM user_session s
|
|
153
186
|
JOIN "user" u ON u.id = s.user_id
|
|
187
|
+
LEFT JOIN user_credential c ON c.user_id = u.id
|
|
154
188
|
WHERE s.token_hash = ${hashToken(token)}
|
|
155
189
|
AND s.revoked_at IS NULL
|
|
156
190
|
AND s.expires_at > ${new Date(clock.now())}
|
|
@@ -173,7 +207,38 @@ export async function sessionProducts(db, token) {
|
|
|
173
207
|
}
|
|
174
208
|
/** Revoga a sessão (logout). */
|
|
175
209
|
export async function logout(db, token) {
|
|
176
|
-
await db `
|
|
210
|
+
await db `SELECT revoke_user_session(${hashToken(token)})`;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Troca de senha em sessão autenticada (exige a senha atual — distinto do
|
|
214
|
+
* fluxo de token de `resetPassword`). Cobre tanto a troca voluntária quanto a
|
|
215
|
+
* troca obrigatória de `must_change_password`; a sessão corrente permanece
|
|
216
|
+
* válida (não é o cenário de "conta pode estar comprometida" do reset).
|
|
217
|
+
*/
|
|
218
|
+
export async function changePassword(db, auth, input) {
|
|
219
|
+
if (input.newPassword.length < 8) {
|
|
220
|
+
throw new ValidationError('A nova senha deve ter ao menos 8 caracteres');
|
|
221
|
+
}
|
|
222
|
+
const creds = await db `
|
|
223
|
+
SELECT password_hash, must_change_password FROM user_credential WHERE user_id = ${auth.userId}
|
|
224
|
+
`;
|
|
225
|
+
if (!creds[0] || !verifyPassword(input.currentPassword, creds[0].password_hash)) {
|
|
226
|
+
throw new UnauthorizedError('Senha atual incorreta');
|
|
227
|
+
}
|
|
228
|
+
const wasForced = creds[0].must_change_password;
|
|
229
|
+
await withContext(db, { tenantId: auth.tenantId, userId: auth.userId }, async (tx) => {
|
|
230
|
+
// Upsert via função SECURITY DEFINER (0024) — ver mesmo comentário em
|
|
231
|
+
// `resetPassword`: o papel de app não tem UPDATE em user_credential.
|
|
232
|
+
await tx `SELECT set_user_password(${auth.userId}, ${hashPassword(input.newPassword)}, false)`;
|
|
233
|
+
await appendAudit(tx, {
|
|
234
|
+
actorId: auth.userId,
|
|
235
|
+
action: wasForced ? 'mandatory_password_change_completed' : 'password_changed',
|
|
236
|
+
resourceType: 'user',
|
|
237
|
+
resourceId: auth.userId,
|
|
238
|
+
ip: input.ip,
|
|
239
|
+
userAgent: input.userAgent,
|
|
240
|
+
});
|
|
241
|
+
});
|
|
177
242
|
}
|
|
178
243
|
async function auditWithinTenant(db, tenantId, actorId, entry) {
|
|
179
244
|
await withContext(db, { tenantId, userId: actorId }, (tx) => appendAudit(tx, entry));
|
package/dist/auth/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"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"}
|