@baruk/core 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +59 -0
- package/dist/auth/password-reset.d.ts.map +1 -1
- package/dist/auth/password-reset.js +2 -4
- package/dist/auth/password-reset.js.map +1 -1
- package/dist/auth/password.d.ts +2 -18
- package/dist/auth/password.d.ts.map +1 -1
- package/dist/auth/password.js +12 -51
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/service.d.ts +0 -12
- package/dist/auth/service.d.ts.map +1 -1
- package/dist/auth/service.js +3 -36
- package/dist/auth/service.js.map +1 -1
- package/dist/auth/session-token.d.ts +5 -2
- package/dist/auth/session-token.d.ts.map +1 -1
- package/dist/auth/session-token.js +7 -12
- package/dist/auth/session-token.js.map +1 -1
- package/dist/billing/dunning.d.ts +33 -0
- package/dist/billing/dunning.d.ts.map +1 -0
- package/dist/billing/dunning.js +49 -0
- package/dist/billing/dunning.js.map +1 -0
- package/dist/billing/provider/asaas.d.ts +15 -0
- package/dist/billing/provider/asaas.d.ts.map +1 -0
- package/dist/billing/provider/asaas.js +121 -0
- package/dist/billing/provider/asaas.js.map +1 -0
- package/dist/billing/provider/manual.d.ts +14 -0
- package/dist/billing/provider/manual.d.ts.map +1 -0
- package/dist/billing/provider/manual.js +24 -0
- package/dist/billing/provider/manual.js.map +1 -0
- package/dist/billing/provider/registry.d.ts +12 -0
- package/dist/billing/provider/registry.d.ts.map +1 -0
- package/dist/billing/provider/registry.js +22 -0
- package/dist/billing/provider/registry.js.map +1 -0
- package/dist/billing/provider/types.d.ts +76 -0
- package/dist/billing/provider/types.d.ts.map +1 -0
- package/dist/billing/provider/types.js +9 -0
- package/dist/billing/provider/types.js.map +1 -0
- package/dist/billing/receivable.d.ts +108 -0
- package/dist/billing/receivable.d.ts.map +1 -0
- package/dist/billing/receivable.js +2 -0
- package/dist/billing/receivable.js.map +1 -0
- package/dist/billing/repository.d.ts +97 -0
- package/dist/billing/repository.d.ts.map +1 -0
- package/dist/billing/repository.js +167 -0
- package/dist/billing/repository.js.map +1 -0
- package/dist/cjs/audit/audit.js +31 -0
- package/dist/cjs/audit/audit.js.map +1 -0
- package/dist/cjs/audit/repository.js +32 -0
- package/dist/cjs/audit/repository.js.map +1 -0
- package/dist/cjs/auth/password-reset.js +58 -0
- package/dist/cjs/auth/password-reset.js.map +1 -0
- package/dist/cjs/auth/password.js +32 -0
- package/dist/cjs/auth/password.js.map +1 -0
- package/dist/cjs/auth/service.js +191 -0
- package/dist/cjs/auth/service.js.map +1 -0
- package/dist/cjs/auth/session-token.js +18 -0
- package/dist/cjs/auth/session-token.js.map +1 -0
- package/dist/cjs/billing/dunning.js +54 -0
- package/dist/cjs/billing/dunning.js.map +1 -0
- package/dist/cjs/billing/provider/asaas.js +125 -0
- package/dist/cjs/billing/provider/asaas.js.map +1 -0
- package/dist/cjs/billing/provider/manual.js +28 -0
- package/dist/cjs/billing/provider/manual.js.map +1 -0
- package/dist/cjs/billing/provider/registry.js +27 -0
- package/dist/cjs/billing/provider/registry.js.map +1 -0
- package/dist/cjs/billing/provider/types.js +10 -0
- package/dist/cjs/billing/provider/types.js.map +1 -0
- package/dist/cjs/billing/receivable.js +3 -0
- package/dist/cjs/billing/receivable.js.map +1 -0
- package/dist/cjs/billing/repository.js +180 -0
- package/dist/cjs/billing/repository.js.map +1 -0
- package/dist/cjs/clients/repository.js +123 -0
- package/dist/cjs/clients/repository.js.map +1 -0
- package/dist/cjs/commercial-catalog/catalog.js +108 -0
- package/dist/cjs/commercial-catalog/catalog.js.map +1 -0
- package/dist/cjs/commercial-catalog/consumption-contracts.js +10 -0
- package/dist/cjs/commercial-catalog/consumption-contracts.js.map +1 -0
- package/dist/cjs/commercial-catalog/coupon.js +53 -0
- package/dist/cjs/commercial-catalog/coupon.js.map +1 -0
- package/dist/cjs/commercial-catalog/index.js +16 -0
- package/dist/cjs/commercial-catalog/index.js.map +1 -0
- package/dist/cjs/commercial-catalog/offer-application.js +53 -0
- package/dist/cjs/commercial-catalog/offer-application.js.map +1 -0
- package/dist/cjs/commercial-catalog/types.js +26 -0
- package/dist/cjs/commercial-catalog/types.js.map +1 -0
- package/dist/cjs/crm/repository.js +195 -0
- package/dist/cjs/crm/repository.js.map +1 -0
- package/dist/cjs/dashboard/repository.js +39 -0
- package/dist/cjs/dashboard/repository.js.map +1 -0
- package/dist/cjs/db/client.js +27 -0
- package/dist/cjs/db/client.js.map +1 -0
- package/dist/cjs/db/context.js +43 -0
- package/dist/cjs/db/context.js.map +1 -0
- package/dist/cjs/db/load-env.js +47 -0
- package/dist/cjs/db/load-env.js.map +1 -0
- package/dist/cjs/db/seed.js +69 -0
- package/dist/cjs/db/seed.js.map +1 -0
- package/dist/cjs/entitlements/decision.js +203 -0
- package/dist/cjs/entitlements/decision.js.map +1 -0
- package/dist/cjs/entitlements/derive.js +46 -0
- package/dist/cjs/entitlements/derive.js.map +1 -0
- package/dist/cjs/entitlements/index.js +23 -0
- package/dist/cjs/entitlements/index.js.map +1 -0
- package/dist/cjs/entitlements/sources.js +60 -0
- package/dist/cjs/entitlements/sources.js.map +1 -0
- package/dist/cjs/entitlements/standing.js +42 -0
- package/dist/cjs/entitlements/standing.js.map +1 -0
- package/dist/cjs/entitlements/types.js +16 -0
- package/dist/cjs/entitlements/types.js.map +1 -0
- package/dist/cjs/import/clients-import.js +147 -0
- package/dist/cjs/import/clients-import.js.map +1 -0
- package/dist/cjs/index.js +335 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/mail/dedup-store.js +56 -0
- package/dist/cjs/mail/dedup-store.js.map +1 -0
- package/dist/cjs/mail/index.js +24 -0
- package/dist/cjs/mail/index.js.map +1 -0
- package/dist/cjs/mail/provider.js +251 -0
- package/dist/cjs/mail/provider.js.map +1 -0
- package/dist/cjs/mail/resend-client.js +103 -0
- package/dist/cjs/mail/resend-client.js.map +1 -0
- package/dist/cjs/mail/resend.js +21 -0
- package/dist/cjs/mail/resend.js.map +1 -0
- package/dist/cjs/mail/sanitize.js +56 -0
- package/dist/cjs/mail/sanitize.js.map +1 -0
- package/dist/cjs/mail/sender-resolver.js +15 -0
- package/dist/cjs/mail/sender-resolver.js.map +1 -0
- package/dist/cjs/mail/template-renderer.js +21 -0
- package/dist/cjs/mail/template-renderer.js.map +1 -0
- package/dist/cjs/mail/types.js +38 -0
- package/dist/cjs/mail/types.js.map +1 -0
- package/dist/cjs/notifications/repository.js +49 -0
- package/dist/cjs/notifications/repository.js.map +1 -0
- package/dist/cjs/onboarding/domain.js +370 -0
- package/dist/cjs/onboarding/domain.js.map +1 -0
- package/dist/cjs/onboarding/interaction-review.js +425 -0
- package/dist/cjs/onboarding/interaction-review.js.map +1 -0
- package/dist/cjs/onboarding/persistence.js +444 -0
- package/dist/cjs/onboarding/persistence.js.map +1 -0
- package/dist/cjs/onboarding/portal-actions.js +157 -0
- package/dist/cjs/onboarding/portal-actions.js.map +1 -0
- package/dist/cjs/onboarding/portal.js +177 -0
- package/dist/cjs/onboarding/portal.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/portal/repository.js +37 -0
- package/dist/cjs/portal/repository.js.map +1 -0
- package/dist/cjs/pricing-engine/bundle.js +49 -0
- package/dist/cjs/pricing-engine/bundle.js.map +1 -0
- package/dist/cjs/pricing-engine/errors.js +48 -0
- package/dist/cjs/pricing-engine/errors.js.map +1 -0
- package/dist/cjs/pricing-engine/index.js +30 -0
- package/dist/cjs/pricing-engine/index.js.map +1 -0
- package/dist/cjs/pricing-engine/money.js +69 -0
- package/dist/cjs/pricing-engine/money.js.map +1 -0
- package/dist/cjs/pricing-engine/pipeline.js +330 -0
- package/dist/cjs/pricing-engine/pipeline.js.map +1 -0
- package/dist/cjs/pricing-engine/proration.js +53 -0
- package/dist/cjs/pricing-engine/proration.js.map +1 -0
- package/dist/cjs/pricing-engine/shadow.js +58 -0
- package/dist/cjs/pricing-engine/shadow.js.map +1 -0
- package/dist/cjs/pricing-engine/types.js +34 -0
- package/dist/cjs/pricing-engine/types.js.map +1 -0
- package/dist/cjs/products/catalog.js +10 -0
- package/dist/cjs/products/catalog.js.map +1 -0
- package/dist/cjs/products/repository.js +61 -0
- package/dist/cjs/products/repository.js.map +1 -0
- package/dist/cjs/rbac/authorize.js +36 -0
- package/dist/cjs/rbac/authorize.js.map +1 -0
- package/dist/cjs/rbac/catalog.js +455 -0
- package/dist/cjs/rbac/catalog.js.map +1 -0
- package/dist/cjs/requests/repository.js +114 -0
- package/dist/cjs/requests/repository.js.map +1 -0
- package/dist/cjs/subscription-billing/dunning.js +26 -0
- package/dist/cjs/subscription-billing/dunning.js.map +1 -0
- package/dist/cjs/subscription-billing/events.js +45 -0
- package/dist/cjs/subscription-billing/events.js.map +1 -0
- package/dist/cjs/subscription-billing/index.js +62 -0
- package/dist/cjs/subscription-billing/index.js.map +1 -0
- package/dist/cjs/subscription-billing/plans.js +88 -0
- package/dist/cjs/subscription-billing/plans.js.map +1 -0
- package/dist/cjs/subscription-billing/product-config.js +54 -0
- package/dist/cjs/subscription-billing/product-config.js.map +1 -0
- package/dist/cjs/subscription-billing/provider/asaas.js +233 -0
- package/dist/cjs/subscription-billing/provider/asaas.js.map +1 -0
- package/dist/cjs/subscription-billing/provider/disabled.js +46 -0
- package/dist/cjs/subscription-billing/provider/disabled.js.map +1 -0
- package/dist/cjs/subscription-billing/provider/registry.js +29 -0
- package/dist/cjs/subscription-billing/provider/registry.js.map +1 -0
- package/dist/cjs/subscription-billing/reconcile.js +198 -0
- package/dist/cjs/subscription-billing/reconcile.js.map +1 -0
- package/dist/cjs/subscription-billing/repository.js +359 -0
- package/dist/cjs/subscription-billing/repository.js.map +1 -0
- package/dist/cjs/subscription-billing/service.js +838 -0
- package/dist/cjs/subscription-billing/service.js.map +1 -0
- package/dist/cjs/subscription-billing/types.js +28 -0
- package/dist/cjs/subscription-billing/types.js.map +1 -0
- package/dist/cjs/tenancy/provisioning.js +126 -0
- package/dist/cjs/tenancy/provisioning.js.map +1 -0
- package/dist/cjs/users/repository.js +83 -0
- package/dist/cjs/users/repository.js.map +1 -0
- package/dist/cjs/vault/crypto.js +94 -0
- package/dist/cjs/vault/crypto.js.map +1 -0
- package/dist/cjs/vault/repository.js +120 -0
- package/dist/cjs/vault/repository.js.map +1 -0
- package/dist/commercial-catalog/catalog.d.ts +27 -0
- package/dist/commercial-catalog/catalog.d.ts.map +1 -0
- package/dist/commercial-catalog/catalog.js +104 -0
- package/dist/commercial-catalog/catalog.js.map +1 -0
- package/dist/commercial-catalog/consumption-contracts.d.ts +33 -0
- package/dist/commercial-catalog/consumption-contracts.d.ts.map +1 -0
- package/dist/commercial-catalog/consumption-contracts.js +9 -0
- package/dist/commercial-catalog/consumption-contracts.js.map +1 -0
- package/dist/commercial-catalog/coupon.d.ts +27 -0
- package/dist/commercial-catalog/coupon.d.ts.map +1 -0
- package/dist/commercial-catalog/coupon.js +47 -0
- package/dist/commercial-catalog/coupon.js.map +1 -0
- package/dist/commercial-catalog/index.d.ts +10 -0
- package/dist/commercial-catalog/index.d.ts.map +1 -0
- package/dist/commercial-catalog/index.js +5 -0
- package/dist/commercial-catalog/index.js.map +1 -0
- package/dist/commercial-catalog/offer-application.d.ts +39 -0
- package/dist/commercial-catalog/offer-application.d.ts.map +1 -0
- package/dist/commercial-catalog/offer-application.js +50 -0
- package/dist/commercial-catalog/offer-application.js.map +1 -0
- package/dist/commercial-catalog/types.d.ts +155 -0
- package/dist/commercial-catalog/types.d.ts.map +1 -0
- package/dist/commercial-catalog/types.js +23 -0
- package/dist/commercial-catalog/types.js.map +1 -0
- package/dist/crm/repository.d.ts +109 -0
- package/dist/crm/repository.d.ts.map +1 -0
- package/dist/crm/repository.js +181 -0
- package/dist/crm/repository.js.map +1 -0
- package/dist/db/context.d.ts +2 -0
- package/dist/db/context.d.ts.map +1 -1
- package/dist/db/context.js +3 -0
- package/dist/db/context.js.map +1 -1
- package/dist/db/migrate.js +7 -2
- package/dist/db/migrate.js.map +1 -1
- package/dist/db/seed.js +4 -1
- package/dist/db/seed.js.map +1 -1
- package/dist/entitlements/decision.d.ts +86 -0
- package/dist/entitlements/decision.d.ts.map +1 -0
- package/dist/entitlements/decision.js +196 -0
- package/dist/entitlements/decision.js.map +1 -0
- package/dist/entitlements/derive.d.ts +30 -0
- package/dist/entitlements/derive.d.ts.map +1 -0
- package/dist/entitlements/derive.js +42 -0
- package/dist/entitlements/derive.js.map +1 -0
- package/dist/entitlements/index.d.ts +10 -0
- package/dist/entitlements/index.d.ts.map +1 -0
- package/dist/entitlements/index.js +7 -0
- package/dist/entitlements/index.js.map +1 -0
- package/dist/entitlements/sources.d.ts +30 -0
- package/dist/entitlements/sources.d.ts.map +1 -0
- package/dist/entitlements/sources.js +55 -0
- package/dist/entitlements/sources.js.map +1 -0
- package/dist/entitlements/standing.d.ts +22 -0
- package/dist/entitlements/standing.d.ts.map +1 -0
- package/dist/entitlements/standing.js +38 -0
- package/dist/entitlements/standing.js.map +1 -0
- package/dist/entitlements/types.d.ts +26 -0
- package/dist/entitlements/types.d.ts.map +1 -0
- package/dist/entitlements/types.js +15 -0
- package/dist/entitlements/types.js.map +1 -0
- package/dist/index.d.ts +74 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -4
- package/dist/index.js.map +1 -1
- package/dist/mail/dedup-store.d.ts +25 -0
- package/dist/mail/dedup-store.d.ts.map +1 -0
- package/dist/mail/dedup-store.js +51 -0
- package/dist/mail/dedup-store.js.map +1 -0
- package/dist/mail/index.d.ts +10 -0
- package/dist/mail/index.d.ts.map +1 -0
- package/dist/mail/index.js +9 -0
- package/dist/mail/index.js.map +1 -0
- package/dist/mail/provider.d.ts +31 -0
- package/dist/mail/provider.d.ts.map +1 -0
- package/dist/mail/provider.js +248 -0
- package/dist/mail/provider.js.map +1 -0
- package/dist/mail/resend-client.d.ts +16 -0
- package/dist/mail/resend-client.d.ts.map +1 -0
- package/dist/mail/resend-client.js +100 -0
- package/dist/mail/resend-client.js.map +1 -0
- package/dist/mail/resend.d.ts.map +1 -1
- package/dist/mail/resend.js +2 -0
- package/dist/mail/resend.js.map +1 -1
- package/dist/mail/sanitize.d.ts +17 -0
- package/dist/mail/sanitize.d.ts.map +1 -0
- package/dist/mail/sanitize.js +51 -0
- package/dist/mail/sanitize.js.map +1 -0
- package/dist/mail/sender-resolver.d.ts +8 -0
- package/dist/mail/sender-resolver.d.ts.map +1 -0
- package/dist/mail/sender-resolver.js +11 -0
- package/dist/mail/sender-resolver.js.map +1 -0
- package/dist/mail/template-renderer.d.ts +10 -0
- package/dist/mail/template-renderer.d.ts.map +1 -0
- package/dist/mail/template-renderer.js +17 -0
- package/dist/mail/template-renderer.js.map +1 -0
- package/dist/mail/types.d.ts +143 -0
- package/dist/mail/types.d.ts.map +1 -0
- package/dist/mail/types.js +34 -0
- package/dist/mail/types.js.map +1 -0
- package/dist/onboarding/domain.d.ts +146 -0
- package/dist/onboarding/domain.d.ts.map +1 -0
- package/dist/onboarding/domain.js +348 -0
- package/dist/onboarding/domain.js.map +1 -0
- package/dist/onboarding/interaction-review.d.ts +123 -0
- package/dist/onboarding/interaction-review.d.ts.map +1 -0
- package/dist/onboarding/interaction-review.js +413 -0
- package/dist/onboarding/interaction-review.js.map +1 -0
- package/dist/onboarding/persistence.d.ts +106 -0
- package/dist/onboarding/persistence.d.ts.map +1 -0
- package/dist/onboarding/persistence.js +430 -0
- package/dist/onboarding/persistence.js.map +1 -0
- package/dist/onboarding/portal-actions.d.ts +48 -0
- package/dist/onboarding/portal-actions.d.ts.map +1 -0
- package/dist/onboarding/portal-actions.js +153 -0
- package/dist/onboarding/portal-actions.js.map +1 -0
- package/dist/onboarding/portal.d.ts +58 -0
- package/dist/onboarding/portal.d.ts.map +1 -0
- package/dist/onboarding/portal.js +170 -0
- package/dist/onboarding/portal.js.map +1 -0
- package/dist/pricing-engine/bundle.d.ts +22 -0
- package/dist/pricing-engine/bundle.d.ts.map +1 -0
- package/dist/pricing-engine/bundle.js +44 -0
- package/dist/pricing-engine/bundle.js.map +1 -0
- package/dist/pricing-engine/errors.d.ts +32 -0
- package/dist/pricing-engine/errors.d.ts.map +1 -0
- package/dist/pricing-engine/errors.js +44 -0
- package/dist/pricing-engine/errors.js.map +1 -0
- package/dist/pricing-engine/index.d.ts +12 -0
- package/dist/pricing-engine/index.d.ts.map +1 -0
- package/dist/pricing-engine/index.js +8 -0
- package/dist/pricing-engine/index.js.map +1 -0
- package/dist/pricing-engine/money.d.ts +32 -0
- package/dist/pricing-engine/money.d.ts.map +1 -0
- package/dist/pricing-engine/money.js +58 -0
- package/dist/pricing-engine/money.js.map +1 -0
- package/dist/pricing-engine/pipeline.d.ts +3 -0
- package/dist/pricing-engine/pipeline.d.ts.map +1 -0
- package/dist/pricing-engine/pipeline.js +327 -0
- package/dist/pricing-engine/pipeline.js.map +1 -0
- package/dist/pricing-engine/proration.d.ts +3 -0
- package/dist/pricing-engine/proration.d.ts.map +1 -0
- package/dist/pricing-engine/proration.js +50 -0
- package/dist/pricing-engine/proration.js.map +1 -0
- package/dist/pricing-engine/shadow.d.ts +51 -0
- package/dist/pricing-engine/shadow.d.ts.map +1 -0
- package/dist/pricing-engine/shadow.js +54 -0
- package/dist/pricing-engine/shadow.js.map +1 -0
- package/dist/pricing-engine/types.d.ts +184 -0
- package/dist/pricing-engine/types.d.ts.map +1 -0
- package/dist/pricing-engine/types.js +31 -0
- package/dist/pricing-engine/types.js.map +1 -0
- package/dist/rbac/authorize.d.ts +3 -6
- package/dist/rbac/authorize.d.ts.map +1 -1
- package/dist/rbac/authorize.js +4 -8
- package/dist/rbac/authorize.js.map +1 -1
- package/dist/rbac/catalog.d.ts.map +1 -1
- package/dist/rbac/catalog.js +414 -21
- package/dist/rbac/catalog.js.map +1 -1
- package/dist/subscription-billing/dunning.d.ts +18 -0
- package/dist/subscription-billing/dunning.d.ts.map +1 -0
- package/dist/subscription-billing/dunning.js +28 -0
- package/dist/subscription-billing/dunning.js.map +1 -0
- package/dist/subscription-billing/events.d.ts +58 -0
- package/dist/subscription-billing/events.d.ts.map +1 -0
- package/dist/subscription-billing/events.js +38 -0
- package/dist/subscription-billing/events.js.map +1 -0
- package/dist/subscription-billing/index.d.ts +18 -0
- package/dist/subscription-billing/index.d.ts.map +1 -0
- package/dist/subscription-billing/index.js +16 -0
- package/dist/subscription-billing/index.js.map +1 -0
- package/dist/subscription-billing/plans.d.ts +34 -0
- package/dist/subscription-billing/plans.d.ts.map +1 -0
- package/dist/subscription-billing/plans.js +85 -0
- package/dist/subscription-billing/plans.js.map +1 -0
- package/dist/subscription-billing/product-config.d.ts +61 -0
- package/dist/subscription-billing/product-config.d.ts.map +1 -0
- package/dist/subscription-billing/product-config.js +50 -0
- package/dist/subscription-billing/product-config.js.map +1 -0
- package/dist/subscription-billing/provider/asaas.d.ts +26 -0
- package/dist/subscription-billing/provider/asaas.d.ts.map +1 -0
- package/dist/subscription-billing/provider/asaas.js +229 -0
- package/dist/subscription-billing/provider/asaas.js.map +1 -0
- package/dist/subscription-billing/provider/disabled.d.ts +30 -0
- package/dist/subscription-billing/provider/disabled.d.ts.map +1 -0
- package/dist/subscription-billing/provider/disabled.js +42 -0
- package/dist/subscription-billing/provider/disabled.js.map +1 -0
- package/dist/subscription-billing/provider/registry.d.ts +10 -0
- package/dist/subscription-billing/provider/registry.d.ts.map +1 -0
- package/dist/subscription-billing/provider/registry.js +26 -0
- package/dist/subscription-billing/provider/registry.js.map +1 -0
- package/dist/subscription-billing/reconcile.d.ts +45 -0
- package/dist/subscription-billing/reconcile.d.ts.map +1 -0
- package/dist/subscription-billing/reconcile.js +192 -0
- package/dist/subscription-billing/reconcile.js.map +1 -0
- package/dist/subscription-billing/repository.d.ts +168 -0
- package/dist/subscription-billing/repository.d.ts.map +1 -0
- package/dist/subscription-billing/repository.js +336 -0
- package/dist/subscription-billing/repository.js.map +1 -0
- package/dist/subscription-billing/service.d.ts +175 -0
- package/dist/subscription-billing/service.d.ts.map +1 -0
- package/dist/subscription-billing/service.js +818 -0
- package/dist/subscription-billing/service.js.map +1 -0
- package/dist/subscription-billing/types.d.ts +161 -0
- package/dist/subscription-billing/types.d.ts.map +1 -0
- package/dist/subscription-billing/types.js +24 -0
- package/dist/subscription-billing/types.js.map +1 -0
- package/dist/vault/crypto.d.ts +22 -0
- package/dist/vault/crypto.d.ts.map +1 -0
- package/dist/vault/crypto.js +88 -0
- package/dist/vault/crypto.js.map +1 -0
- package/dist/vault/repository.d.ts +45 -0
- package/dist/vault/repository.d.ts.map +1 -0
- package/dist/vault/repository.js +111 -0
- package/dist/vault/repository.js.map +1 -0
- package/package.json +23 -13
- package/src/db/migrations/0012_vault.sql +51 -0
- package/src/db/migrations/0013_crm.sql +67 -0
- package/src/db/migrations/0014_billing.sql +146 -0
- package/src/db/migrations/0015_merchant_billing_ar.sql +201 -0
- package/src/db/migrations/0016_office_onboarding.sql +162 -0
- package/src/db/migrations/0017_office_onboarding_api.sql +21 -0
- package/src/db/migrations/0018_office_onboarding_portal_actions.sql +60 -0
- package/src/db/migrations/0019_office_onboarding_interaction_review.sql +134 -0
- package/src/db/migrations/0020_saas_billing.sql +157 -0
- package/src/db/migrations/0021_saas_billing_indexes.sql +23 -0
- package/src/db/migrations/0022_saas_billing_multi_product.sql +75 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
/**
|
|
3
|
+
* Repositório do CRM Engine — funil comercial agnóstico. Tenant-scoped por RLS
|
|
4
|
+
* (nenhum método filtra por `tenant_id`). A conversão lead→client vive na rota
|
|
5
|
+
* (orquestra `createClient` do Core), mantendo o CRM desacoplado do Directory.
|
|
6
|
+
*/
|
|
7
|
+
export type LeadStage = 'lead' | 'contact' | 'proposal' | 'won' | 'lost';
|
|
8
|
+
export type LeadStatus = 'open' | 'won' | 'lost';
|
|
9
|
+
/** Estágios canônicos do funil (o front usa para colunas do Kanban). */
|
|
10
|
+
export declare const CRM_STAGES: readonly {
|
|
11
|
+
key: LeadStage;
|
|
12
|
+
label: string;
|
|
13
|
+
}[];
|
|
14
|
+
export interface LeadRecord {
|
|
15
|
+
id: string;
|
|
16
|
+
name: string;
|
|
17
|
+
company: string | null;
|
|
18
|
+
email: string | null;
|
|
19
|
+
phone: string | null;
|
|
20
|
+
source: string | null;
|
|
21
|
+
stage: LeadStage;
|
|
22
|
+
status: LeadStatus;
|
|
23
|
+
estimatedValue: number | null;
|
|
24
|
+
probability: number;
|
|
25
|
+
ownerUserId: string | null;
|
|
26
|
+
tags: string[];
|
|
27
|
+
notes: string | null;
|
|
28
|
+
lostReason: string | null;
|
|
29
|
+
clientId: string | null;
|
|
30
|
+
createdAt: string;
|
|
31
|
+
updatedAt: string;
|
|
32
|
+
}
|
|
33
|
+
export interface CreateLeadInput {
|
|
34
|
+
name: string;
|
|
35
|
+
company?: string | null;
|
|
36
|
+
email?: string | null;
|
|
37
|
+
phone?: string | null;
|
|
38
|
+
source?: string | null;
|
|
39
|
+
stage?: LeadStage;
|
|
40
|
+
estimatedValue?: number | null;
|
|
41
|
+
probability?: number;
|
|
42
|
+
ownerUserId?: string | null;
|
|
43
|
+
tags?: string[];
|
|
44
|
+
notes?: string | null;
|
|
45
|
+
createdBy?: string | null;
|
|
46
|
+
}
|
|
47
|
+
export declare function createLead(tx: Tx, input: CreateLeadInput): Promise<LeadRecord>;
|
|
48
|
+
export interface ListLeadsFilter {
|
|
49
|
+
stage?: LeadStage;
|
|
50
|
+
status?: LeadStatus;
|
|
51
|
+
ownerUserId?: string;
|
|
52
|
+
search?: string;
|
|
53
|
+
limit?: number;
|
|
54
|
+
offset?: number;
|
|
55
|
+
}
|
|
56
|
+
export declare function listLeads(tx: Tx, filter?: ListLeadsFilter): Promise<{
|
|
57
|
+
items: LeadRecord[];
|
|
58
|
+
total: number;
|
|
59
|
+
}>;
|
|
60
|
+
export declare function getLead(tx: Tx, id: string): Promise<LeadRecord>;
|
|
61
|
+
export interface UpdateLeadInput {
|
|
62
|
+
name?: string;
|
|
63
|
+
company?: string | null;
|
|
64
|
+
email?: string | null;
|
|
65
|
+
phone?: string | null;
|
|
66
|
+
source?: string | null;
|
|
67
|
+
estimatedValue?: number | null;
|
|
68
|
+
probability?: number;
|
|
69
|
+
ownerUserId?: string | null;
|
|
70
|
+
tags?: string[];
|
|
71
|
+
notes?: string | null;
|
|
72
|
+
}
|
|
73
|
+
export declare function updateLead(tx: Tx, id: string, input: UpdateLeadInput): Promise<number>;
|
|
74
|
+
/** Move o lead de estágio. `won`/`lost` também fecham o status. */
|
|
75
|
+
export declare function moveLeadStage(tx: Tx, id: string, stage: LeadStage, opts?: {
|
|
76
|
+
lostReason?: string | null;
|
|
77
|
+
authorUserId?: string | null;
|
|
78
|
+
}): Promise<number>;
|
|
79
|
+
/** Marca o lead como convertido, ligando-o ao `client` criado. */
|
|
80
|
+
export declare function linkLeadToClient(tx: Tx, id: string, clientId: string): Promise<number>;
|
|
81
|
+
export declare function softDeleteLead(tx: Tx, id: string): Promise<number>;
|
|
82
|
+
export type ActivityKind = 'note' | 'call' | 'email' | 'meeting' | 'task' | 'stage_change' | 'system';
|
|
83
|
+
export interface ActivityRecord {
|
|
84
|
+
id: string;
|
|
85
|
+
leadId: string;
|
|
86
|
+
kind: ActivityKind;
|
|
87
|
+
body: string | null;
|
|
88
|
+
dueDate: string | null;
|
|
89
|
+
doneAt: string | null;
|
|
90
|
+
authorUserId: string | null;
|
|
91
|
+
createdAt: string;
|
|
92
|
+
}
|
|
93
|
+
export interface AddActivityInput {
|
|
94
|
+
leadId: string;
|
|
95
|
+
kind?: ActivityKind;
|
|
96
|
+
body?: string | null;
|
|
97
|
+
dueDate?: string | null;
|
|
98
|
+
authorUserId?: string | null;
|
|
99
|
+
}
|
|
100
|
+
export declare function addActivity(tx: Tx, input: AddActivityInput): Promise<ActivityRecord>;
|
|
101
|
+
export declare function listActivities(tx: Tx, leadId: string): Promise<ActivityRecord[]>;
|
|
102
|
+
export declare function completeTask(tx: Tx, id: string): Promise<number>;
|
|
103
|
+
/** Distribuição por estágio + soma de valor esperado — KPIs do funil. */
|
|
104
|
+
export declare function pipelineSummary(tx: Tx): Promise<{
|
|
105
|
+
stage: LeadStage;
|
|
106
|
+
count: number;
|
|
107
|
+
value: number;
|
|
108
|
+
}[]>;
|
|
109
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/crm/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { NotFoundError, uuidv7 } from '@baruk/shared';
|
|
2
|
+
/** Estágios canônicos do funil (o front usa para colunas do Kanban). */
|
|
3
|
+
export const CRM_STAGES = [
|
|
4
|
+
{ key: 'lead', label: 'Lead' },
|
|
5
|
+
{ key: 'contact', label: 'Contato' },
|
|
6
|
+
{ key: 'proposal', label: 'Proposta' },
|
|
7
|
+
{ key: 'won', label: 'Ganho' },
|
|
8
|
+
{ key: 'lost', label: 'Perdido' },
|
|
9
|
+
];
|
|
10
|
+
function mapLead(r) {
|
|
11
|
+
return {
|
|
12
|
+
id: r.id,
|
|
13
|
+
name: r.name,
|
|
14
|
+
company: r.company,
|
|
15
|
+
email: r.email,
|
|
16
|
+
phone: r.phone,
|
|
17
|
+
source: r.source,
|
|
18
|
+
stage: r.stage,
|
|
19
|
+
status: r.status,
|
|
20
|
+
estimatedValue: r.estimated_value === null ? null : Number(r.estimated_value),
|
|
21
|
+
probability: r.probability,
|
|
22
|
+
ownerUserId: r.owner_user_id,
|
|
23
|
+
tags: r.tags ?? [],
|
|
24
|
+
notes: r.notes,
|
|
25
|
+
lostReason: r.lost_reason,
|
|
26
|
+
clientId: r.client_id,
|
|
27
|
+
createdAt: r.created_at.toISOString(),
|
|
28
|
+
updatedAt: r.updated_at.toISOString(),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const LEAD_COLS = `
|
|
32
|
+
id, name, company, email, phone, source, stage, status, estimated_value,
|
|
33
|
+
probability, owner_user_id, tags, notes, lost_reason, client_id, created_at, updated_at
|
|
34
|
+
`;
|
|
35
|
+
export async function createLead(tx, input) {
|
|
36
|
+
const rows = await tx `
|
|
37
|
+
INSERT INTO lead (
|
|
38
|
+
id, tenant_id, name, company, email, phone, source, stage,
|
|
39
|
+
estimated_value, probability, owner_user_id, tags, notes, created_by
|
|
40
|
+
) VALUES (
|
|
41
|
+
${uuidv7()}, current_setting('app.current_tenant')::uuid,
|
|
42
|
+
${input.name}, ${input.company ?? null}, ${input.email ?? null}, ${input.phone ?? null},
|
|
43
|
+
${input.source ?? null}, ${input.stage ?? 'lead'},
|
|
44
|
+
${input.estimatedValue ?? null}, ${input.probability ?? 0},
|
|
45
|
+
${input.ownerUserId ?? null}, ${tx.json((input.tags ?? []))},
|
|
46
|
+
${input.notes ?? null}, ${input.createdBy ?? null}
|
|
47
|
+
)
|
|
48
|
+
RETURNING ${tx.unsafe(LEAD_COLS)}
|
|
49
|
+
`;
|
|
50
|
+
return mapLead(rows[0]);
|
|
51
|
+
}
|
|
52
|
+
export async function listLeads(tx, filter = {}) {
|
|
53
|
+
const limit = Math.min(filter.limit ?? 50, 200);
|
|
54
|
+
const offset = filter.offset ?? 0;
|
|
55
|
+
const like = filter.search ? `%${filter.search}%` : null;
|
|
56
|
+
const rows = await tx `
|
|
57
|
+
SELECT ${tx.unsafe(LEAD_COLS)}, count(*) OVER() AS total
|
|
58
|
+
FROM lead
|
|
59
|
+
WHERE deleted_at IS NULL
|
|
60
|
+
AND (${filter.stage ?? null}::text IS NULL OR stage = ${filter.stage ?? null})
|
|
61
|
+
AND (${filter.status ?? null}::text IS NULL OR status = ${filter.status ?? null})
|
|
62
|
+
AND (${filter.ownerUserId ?? null}::uuid IS NULL OR owner_user_id = ${filter.ownerUserId ?? null})
|
|
63
|
+
AND (${like}::text IS NULL OR name ILIKE ${like} OR company ILIKE ${like} OR email ILIKE ${like})
|
|
64
|
+
ORDER BY updated_at DESC
|
|
65
|
+
LIMIT ${limit} OFFSET ${offset}
|
|
66
|
+
`;
|
|
67
|
+
const total = rows[0] ? Number(rows[0].total) : 0;
|
|
68
|
+
return { items: rows.map(mapLead), total };
|
|
69
|
+
}
|
|
70
|
+
export async function getLead(tx, id) {
|
|
71
|
+
const rows = await tx `
|
|
72
|
+
SELECT ${tx.unsafe(LEAD_COLS)} FROM lead WHERE id = ${id} AND deleted_at IS NULL
|
|
73
|
+
`;
|
|
74
|
+
if (!rows[0])
|
|
75
|
+
throw new NotFoundError('Lead não encontrado');
|
|
76
|
+
return mapLead(rows[0]);
|
|
77
|
+
}
|
|
78
|
+
export async function updateLead(tx, id, input) {
|
|
79
|
+
const rows = await tx `
|
|
80
|
+
UPDATE lead SET
|
|
81
|
+
name = COALESCE(${input.name ?? null}::text, name),
|
|
82
|
+
company = COALESCE(${input.company ?? null}::text, company),
|
|
83
|
+
email = COALESCE(${input.email ?? null}::citext, email),
|
|
84
|
+
phone = COALESCE(${input.phone ?? null}::text, phone),
|
|
85
|
+
source = COALESCE(${input.source ?? null}::text, source),
|
|
86
|
+
estimated_value = COALESCE(${input.estimatedValue ?? null}::numeric, estimated_value),
|
|
87
|
+
probability = COALESCE(${input.probability ?? null}::int, probability),
|
|
88
|
+
owner_user_id = COALESCE(${input.ownerUserId ?? null}::uuid, owner_user_id),
|
|
89
|
+
tags = COALESCE(${input.tags ? tx.json(input.tags) : null}::jsonb, tags),
|
|
90
|
+
notes = COALESCE(${input.notes ?? null}::text, notes),
|
|
91
|
+
updated_at = now(),
|
|
92
|
+
version = version + 1
|
|
93
|
+
WHERE id = ${id} AND deleted_at IS NULL
|
|
94
|
+
RETURNING id
|
|
95
|
+
`;
|
|
96
|
+
return rows.count;
|
|
97
|
+
}
|
|
98
|
+
/** Move o lead de estágio. `won`/`lost` também fecham o status. */
|
|
99
|
+
export async function moveLeadStage(tx, id, stage, opts = {}) {
|
|
100
|
+
const status = stage === 'won' ? 'won' : stage === 'lost' ? 'lost' : 'open';
|
|
101
|
+
const rows = await tx `
|
|
102
|
+
UPDATE lead SET
|
|
103
|
+
stage = ${stage}, status = ${status},
|
|
104
|
+
lost_reason = ${stage === 'lost' ? opts.lostReason ?? null : null},
|
|
105
|
+
updated_at = now(), version = version + 1
|
|
106
|
+
WHERE id = ${id} AND deleted_at IS NULL
|
|
107
|
+
RETURNING id
|
|
108
|
+
`;
|
|
109
|
+
if (rows.count > 0) {
|
|
110
|
+
await tx `
|
|
111
|
+
INSERT INTO crm_activity (id, tenant_id, lead_id, kind, body, author_user_id)
|
|
112
|
+
VALUES (${uuidv7()}, current_setting('app.current_tenant')::uuid, ${id},
|
|
113
|
+
'stage_change', ${`Estágio alterado para ${stage}`}, ${opts.authorUserId ?? null})
|
|
114
|
+
`;
|
|
115
|
+
}
|
|
116
|
+
return rows.count;
|
|
117
|
+
}
|
|
118
|
+
/** Marca o lead como convertido, ligando-o ao `client` criado. */
|
|
119
|
+
export async function linkLeadToClient(tx, id, clientId) {
|
|
120
|
+
const rows = await tx `
|
|
121
|
+
UPDATE lead SET client_id = ${clientId}, stage = 'won', status = 'won',
|
|
122
|
+
updated_at = now(), version = version + 1
|
|
123
|
+
WHERE id = ${id} AND deleted_at IS NULL
|
|
124
|
+
RETURNING id
|
|
125
|
+
`;
|
|
126
|
+
return rows.count;
|
|
127
|
+
}
|
|
128
|
+
export async function softDeleteLead(tx, id) {
|
|
129
|
+
const rows = await tx `
|
|
130
|
+
UPDATE lead SET deleted_at = now() WHERE id = ${id} AND deleted_at IS NULL RETURNING id
|
|
131
|
+
`;
|
|
132
|
+
return rows.count;
|
|
133
|
+
}
|
|
134
|
+
function mapActivity(r) {
|
|
135
|
+
return {
|
|
136
|
+
id: r.id,
|
|
137
|
+
leadId: r.lead_id,
|
|
138
|
+
kind: r.kind,
|
|
139
|
+
body: r.body,
|
|
140
|
+
dueDate: r.due_date ? r.due_date.toISOString() : null,
|
|
141
|
+
doneAt: r.done_at ? r.done_at.toISOString() : null,
|
|
142
|
+
authorUserId: r.author_user_id,
|
|
143
|
+
createdAt: r.created_at.toISOString(),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export async function addActivity(tx, input) {
|
|
147
|
+
const rows = await tx `
|
|
148
|
+
INSERT INTO crm_activity (id, tenant_id, lead_id, kind, body, due_date, author_user_id)
|
|
149
|
+
VALUES (
|
|
150
|
+
${uuidv7()}, current_setting('app.current_tenant')::uuid, ${input.leadId},
|
|
151
|
+
${input.kind ?? 'note'}, ${input.body ?? null}, ${input.dueDate ?? null}, ${input.authorUserId ?? null}
|
|
152
|
+
)
|
|
153
|
+
RETURNING id, lead_id, kind, body, due_date, done_at, author_user_id, created_at
|
|
154
|
+
`;
|
|
155
|
+
return mapActivity(rows[0]);
|
|
156
|
+
}
|
|
157
|
+
export async function listActivities(tx, leadId) {
|
|
158
|
+
const rows = await tx `
|
|
159
|
+
SELECT id, lead_id, kind, body, due_date, done_at, author_user_id, created_at
|
|
160
|
+
FROM crm_activity WHERE lead_id = ${leadId}
|
|
161
|
+
ORDER BY created_at DESC
|
|
162
|
+
`;
|
|
163
|
+
return rows.map(mapActivity);
|
|
164
|
+
}
|
|
165
|
+
export async function completeTask(tx, id) {
|
|
166
|
+
const rows = await tx `
|
|
167
|
+
UPDATE crm_activity SET done_at = now()
|
|
168
|
+
WHERE id = ${id} AND kind = 'task' AND done_at IS NULL RETURNING id
|
|
169
|
+
`;
|
|
170
|
+
return rows.count;
|
|
171
|
+
}
|
|
172
|
+
/** Distribuição por estágio + soma de valor esperado — KPIs do funil. */
|
|
173
|
+
export async function pipelineSummary(tx) {
|
|
174
|
+
const rows = await tx `
|
|
175
|
+
SELECT stage, count(*)::int AS count, COALESCE(sum(estimated_value), 0) AS value
|
|
176
|
+
FROM lead WHERE deleted_at IS NULL AND status = 'open'
|
|
177
|
+
GROUP BY stage
|
|
178
|
+
`;
|
|
179
|
+
return rows.map((r) => ({ stage: r.stage, count: r.count, value: Number(r.value) }));
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/crm/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/db/context.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface DbContext {
|
|
|
14
14
|
* aplicação esquecesse o filtro. Não setado (staff) = vê todos os clientes do tenant.
|
|
15
15
|
*/
|
|
16
16
|
readonly clientId?: string;
|
|
17
|
+
/** Superfície de acesso usada por políticas sensíveis (Portal vs. equipe). */
|
|
18
|
+
readonly surface?: 'portal' | 'staff';
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Executa `fn` dentro de uma transação com as GUCs de contexto setadas via
|
package/dist/db/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/db/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/db/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,SAAS,EACd,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAED,mDAAmD;AACnD,wBAAgB,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE9F"}
|
package/dist/db/context.js
CHANGED
|
@@ -25,6 +25,9 @@ export async function withContext(db, ctx, fn) {
|
|
|
25
25
|
if (ctx.clientId !== undefined) {
|
|
26
26
|
await tx `select set_config('app.current_client', ${ctx.clientId}, true)`;
|
|
27
27
|
}
|
|
28
|
+
if (ctx.surface !== undefined) {
|
|
29
|
+
await tx `select set_config('app.current_surface', ${ctx.surface}, true)`;
|
|
30
|
+
}
|
|
28
31
|
return fn(tx);
|
|
29
32
|
});
|
|
30
33
|
return result;
|
package/dist/db/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/db/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/db/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAsB3D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAM,EACN,GAAc,EACd,EAA0B;IAE1B,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,kBAAkB,CAAC,kCAAkC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,kBAAkB,CAAC,kCAAkC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACzC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAA,2CAA2C,GAAG,CAAC,QAAQ,SAAS,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,EAAE,CAAA,yCAAyC,GAAG,CAAC,MAAM,SAAS,CAAC;QACvE,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,CAAA,2CAA2C,GAAG,CAAC,QAAQ,SAAS,CAAC;QAC3E,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,EAAE,CAAA,4CAA4C,GAAG,CAAC,OAAO,SAAS,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,CAAC,EAAmB,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,OAAO,MAAW,CAAC;AACrB,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,UAAU,CAAI,EAAM,EAAE,QAAgB,EAAE,EAA0B;IAChF,OAAO,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/db/migrate.js
CHANGED
|
@@ -119,8 +119,13 @@ async function main() {
|
|
|
119
119
|
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO baruk_app;
|
|
120
120
|
-- Append-only: app não pode alterar/apagar auditoria.
|
|
121
121
|
REVOKE UPDATE, DELETE ON audit_log FROM baruk_app;
|
|
122
|
-
-- Segredos de auth: app
|
|
123
|
-
|
|
122
|
+
-- Segredos de auth: app pode CRIAR credencial (signup self-service, BILL-01),
|
|
123
|
+
-- mas nunca sobrescrever/apagar uma existente (anti account-takeover).
|
|
124
|
+
REVOKE UPDATE, DELETE ON user_credential FROM baruk_app;
|
|
125
|
+
GRANT INSERT ON user_credential TO baruk_app;
|
|
126
|
+
-- Catálogo comercial: app só lê (seed/owner escreve) — evita reprecificação
|
|
127
|
+
-- por qualquer falha no papel de aplicação.
|
|
128
|
+
REVOKE INSERT, UPDATE, DELETE ON saas_plan FROM baruk_app;
|
|
124
129
|
-- Controle de migrations é privado do owner.
|
|
125
130
|
REVOKE ALL ON _migration FROM baruk_app;
|
|
126
131
|
`);
|
package/dist/db/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/db/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/db/seed.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* Idempotente. Uso: `pnpm db:seed`.
|
|
12
12
|
*/
|
|
13
|
-
import { assignSystemRole, createDb, ensureMembership, ensureOrganization, ensureProductCatalog, ensureRbacCatalog, ensureTenant, ensureTenantProduct, loadEnv, upsertUserWithPassword, } from '../index.js';
|
|
13
|
+
import { assignSystemRole, createDb, ensureMembership, ensureOrganization, ensureProductCatalog, ensureRbacCatalog, ensureTenant, ensureTenantProduct, loadEnv, seedSaasPlans, upsertUserWithPassword, } from '../index.js';
|
|
14
14
|
async function main() {
|
|
15
15
|
loadEnv();
|
|
16
16
|
const ownerUrl = process.env.DATABASE_URL;
|
|
@@ -51,6 +51,9 @@ async function main() {
|
|
|
51
51
|
await ensureMembership(db, tenantId, admin.id);
|
|
52
52
|
await assignSystemRole(db, tenantId, admin.id, 'owner');
|
|
53
53
|
console.log('✓ Membership + papel Owner atribuídos ao admin no tenant SC.');
|
|
54
|
+
// 6) Catálogo de planos do SaaS (BILL-01) — idempotente.
|
|
55
|
+
await seedSaasPlans(db);
|
|
56
|
+
console.log('✓ Catálogo de planos SaaS garantido (starter/pro/enterprise/pro-anual).');
|
|
54
57
|
console.log('\n✓ Seed concluído. Login dev: admin@sc.baruk.dev / (SEED_ADMIN_PASSWORD)');
|
|
55
58
|
}
|
|
56
59
|
finally {
|
package/dist/db/seed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/db/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,sBAAsB,GACvB,MAAM,aAAa,CAAC;AAErB,KAAK,UAAU,IAAI;IACjB,OAAO,EAAE,CAAC;IACV,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,IAAI,CAAC,aAAa;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAEzE,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,wDAAwD;QACxD,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;QAExE,oEAAoE;QACpE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE;YACtC,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,yBAAyB;YACtC,SAAS,EAAE,IAAI,EAAE,uDAAuD;YACxE,MAAM,EAAE,QAAQ;YAChB,cAAc,EAAE,UAAU;SAC3B,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QAElD,oEAAoE;QACpE,MAAM,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjD,MAAM,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QAEvE,0EAA0E;QAC1E,MAAM,UAAU,GAAG,oBAAoB,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,EAAE,EAAE;YAC7C,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,wBAAwB;YAClC,QAAQ,EAAE,aAAa;YACvB,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,oCAAoC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAE/D,4BAA4B;QAC5B,MAAM,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,gBAAgB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAE5E,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/db/seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { EntitlementRecord, EntitlementSource } from './types.js';
|
|
2
|
+
import { type SubscriptionStanding } from './standing.js';
|
|
3
|
+
/**
|
|
4
|
+
* Decision API canônica (contrato 1.0.0 — ENTITLEMENTS_CONTRACT_SPEC_2026-07-27.md
|
|
5
|
+
* §8-§10, §14). EXTENSÃO/facade sobre `deriveEntitlements`/`hasActiveEntitlement`
|
|
6
|
+
* (`derive.ts`, intactas) — pura, determinística, sem DB/rede/NestJS/mvb. Todos
|
|
7
|
+
* os fatos externos (standing, limites, uso, flag operacional) são injetados
|
|
8
|
+
* pelo consumidor via `EntitlementContext` — nunca resolvidos aqui.
|
|
9
|
+
*/
|
|
10
|
+
export declare const ENTITLEMENTS_CONTRACT_VERSION = "1.0.0";
|
|
11
|
+
/** Reason codes estáveis (§9 — conjunto fechado desta versão do contrato). */
|
|
12
|
+
export type ReasonCode = 'ENTITLEMENT_ACTIVE' | 'ENTITLEMENT_MISSING' | 'ENTITLEMENT_EXPIRED' | 'EXPLICIT_DENY' | 'SUBSCRIPTION_BLOCKED' | 'SUBSCRIPTION_RESTRICTED' | 'TENANT_CONTEXT_MISSING' | 'LIMIT_REACHED' | 'FEATURE_DISABLED_OPERATIONALLY' | 'FAIL_OPEN_PRIVILEGED' | 'CONTRACT_VERSION_UNSUPPORTED';
|
|
13
|
+
export interface EntitlementSubject {
|
|
14
|
+
tenantId: string;
|
|
15
|
+
/** Reservado para per-user/per-empresa (Office); ignorado em P1/P2 (decisão é por tenant). */
|
|
16
|
+
userId?: string;
|
|
17
|
+
scopeId?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Limite declarado (dono: Commercial Catalog) + quem concedeu (dono: Entitlements) — §14. */
|
|
20
|
+
export interface LimitDefinition {
|
|
21
|
+
moduleCode: string;
|
|
22
|
+
limitKey: string;
|
|
23
|
+
/** `null` = ilimitado — decisão nunca é tomada por limite. */
|
|
24
|
+
value: number | null;
|
|
25
|
+
unit: string;
|
|
26
|
+
period?: string;
|
|
27
|
+
}
|
|
28
|
+
export interface GrantedLimit extends LimitDefinition {
|
|
29
|
+
grantedBy: EntitlementSource;
|
|
30
|
+
}
|
|
31
|
+
/** Fato de uso — dono: Usage Metering (fora de escopo aqui; apenas consumido se injetado). */
|
|
32
|
+
export interface UsageSnapshot {
|
|
33
|
+
moduleCode: string;
|
|
34
|
+
limitKey: string;
|
|
35
|
+
consumed: number;
|
|
36
|
+
period?: string;
|
|
37
|
+
asOf: string;
|
|
38
|
+
}
|
|
39
|
+
export interface LimitView {
|
|
40
|
+
definition: GrantedLimit;
|
|
41
|
+
usage?: UsageSnapshot;
|
|
42
|
+
/** `null` = ilimitado; `undefined` = indisponível (medidor ausente). */
|
|
43
|
+
remaining?: number | null;
|
|
44
|
+
}
|
|
45
|
+
export interface EntitlementContext {
|
|
46
|
+
now: string;
|
|
47
|
+
standing: SubscriptionStanding;
|
|
48
|
+
/** Entitlements já materializados do subject (ex.: saída de `deriveEntitlements`). Filtrados por tenant abaixo. */
|
|
49
|
+
entitlements: EntitlementRecord[];
|
|
50
|
+
/** Kill-switch operacional (distinto de `FEATURE_FLAG` como source comercial — §13). `undefined`/`true` = habilitado. */
|
|
51
|
+
operationalFlag?: boolean;
|
|
52
|
+
/** Fato explícito injetado pelo consumidor (ex.: `tenantKind` FOUNDER/INTERNAL) — nunca inferido aqui. */
|
|
53
|
+
failOpenPrivileged?: boolean;
|
|
54
|
+
/** Limites concedidos, se o consumidor quiser que a decisão considere consumo (§14). Opcional. */
|
|
55
|
+
grantedLimits?: GrantedLimit[];
|
|
56
|
+
/** Uso corrente por (moduleCode, limitKey), se disponível (injetado, nunca medido aqui). */
|
|
57
|
+
usage?: UsageSnapshot[];
|
|
58
|
+
}
|
|
59
|
+
export interface DecisionResult {
|
|
60
|
+
allowed: boolean;
|
|
61
|
+
reasonCode: ReasonCode;
|
|
62
|
+
reason: string;
|
|
63
|
+
moduleCode: string;
|
|
64
|
+
tenantId: string;
|
|
65
|
+
/** Fontes canônicas que concederam (vazio se negado ou se só houver fonte desconhecida). */
|
|
66
|
+
sources: EntitlementSource[];
|
|
67
|
+
/** Menor `expiresAt` entre as fontes vencedoras; `null` se alguma for sem expiração (ilimitada). */
|
|
68
|
+
effectiveUntil: string | null;
|
|
69
|
+
standing: SubscriptionStanding;
|
|
70
|
+
policyVersion: string;
|
|
71
|
+
evaluatedAt: string;
|
|
72
|
+
}
|
|
73
|
+
/** Entitlements ativos do subject, isolados por tenant (nunca vaza entre tenants) — §7/§11. */
|
|
74
|
+
export declare function getEffectiveEntitlements(subject: EntitlementSubject, ctx: EntitlementContext): EntitlementRecord[];
|
|
75
|
+
/** Composição pura de limite declarado + uso injetado — sem medir, sem enforcement (§14). */
|
|
76
|
+
export declare function getLimits(subject: EntitlementSubject, moduleCode: string, ctx: EntitlementContext): LimitView[];
|
|
77
|
+
/**
|
|
78
|
+
* Decisão completa e explicável (formaliza `AccessDecision{allowed,reason}` do
|
|
79
|
+
* mvb, adicionando `reasonCode` estável). Ordem de avaliação (§7/§10/§11):
|
|
80
|
+
* tenant context → deny explícito → entitlement (ativo/expirado/ausente) →
|
|
81
|
+
* standing → limite consumível esgotado → flag operacional → allow.
|
|
82
|
+
*/
|
|
83
|
+
export declare function explainDecision(subject: EntitlementSubject, moduleCode: string, ctx: EntitlementContext): DecisionResult;
|
|
84
|
+
/** Facade booleana — composição de `explainDecision` (§8). */
|
|
85
|
+
export declare function can(subject: EntitlementSubject, moduleCode: string, ctx: EntitlementContext): boolean;
|
|
86
|
+
//# sourceMappingURL=decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/entitlements/decision.ts"],"names":[],"mappings":"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"}
|