@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# @baruk/core — changelog
|
|
2
|
+
|
|
3
|
+
Formato: [Keep a Changelog](https://keepachangelog.com/pt-BR/1.1.0/) ·
|
|
4
|
+
Versionamento: [SemVer](https://semver.org/lang/pt-BR/).
|
|
5
|
+
|
|
6
|
+
## [0.2.0] — 2026-07-31
|
|
7
|
+
|
|
8
|
+
Primeira versão que carrega o motor de billing e o contrato de entitlements.
|
|
9
|
+
Publicada a partir de `staging`; a 0.1.0 saiu de `main`, que não tinha nenhum
|
|
10
|
+
dos dois — por isso os consumidores que migraram de `file:` para o registry na
|
|
11
|
+
ECO-06 R4.5 ficaram sem resolver os imports.
|
|
12
|
+
|
|
13
|
+
### Adicionado
|
|
14
|
+
|
|
15
|
+
- **`cap.billing.subscription-billing`** (Concern A — CMI-4, RFC-CAPABILITY-BILLING-001):
|
|
16
|
+
máquina de estados de assinatura (`applySubscriptionEvent`, `changePlan`,
|
|
17
|
+
`cancelSubscription`, `startTrial`), Provider Pattern com adaptador ASAAS e
|
|
18
|
+
provider `disabled` fail-safe, verificação de webhook timing-safe, régua de
|
|
19
|
+
inadimplência e envelope de eventos de domínio.
|
|
20
|
+
- **`cap.entitlements.access`** — contrato canônico 1.0.0: `explainDecision`,
|
|
21
|
+
`canEntitlement`, `getEffectiveEntitlements`, `getLimits`,
|
|
22
|
+
`normalizeSubscriptionStanding`, `isStandingOk`, normalização de fontes e os
|
|
23
|
+
tipos `EntitlementSubject`, `EntitlementContext`, `EntitlementDecisionResult`.
|
|
24
|
+
- **Merchant Billing (Concern B)** — tipos de contas a receber e régua
|
|
25
|
+
compartilhada. Ainda M0: sem serviço nem máquina de estados.
|
|
26
|
+
- **Pricing Engine** headless (CMI-4) e **catálogo comercial**.
|
|
27
|
+
- **Vault**, **CRM** e **compliance contábil**.
|
|
28
|
+
|
|
29
|
+
Superfície pública: de 39 para 104 exports.
|
|
30
|
+
|
|
31
|
+
### Alterado
|
|
32
|
+
|
|
33
|
+
- `@baruk/shared` alinhado a `0.1.1`, que adiciona a distribuição CommonJS sem
|
|
34
|
+
alterar a API pública; `workspace:^` resolve para `^0.1.1` no tarball.
|
|
35
|
+
- `build` agora limpa `dist/` antes de compilar, para o tarball nunca carregar
|
|
36
|
+
artefato obsoleto.
|
|
37
|
+
- `files` exclui `dist/__tests__`.
|
|
38
|
+
- exports condicionais `import`/`require` no Core e no Shared. Consumidores ESM
|
|
39
|
+
continuam usando o build original; backends Nest/Jest CommonJS usam
|
|
40
|
+
`dist/cjs` sem transformar dependências dentro de `node_modules`.
|
|
41
|
+
|
|
42
|
+
### Compatibilidade
|
|
43
|
+
|
|
44
|
+
Aditiva sobre a 0.1.0 — nenhum export anterior foi removido ou renomeado.
|
|
45
|
+
Consumidores em `^0.1.0` continuam funcionando; para usar billing ou
|
|
46
|
+
entitlements, subir para `^0.2.0`.
|
|
47
|
+
|
|
48
|
+
Validado com o tarball real (`pnpm pack`, que converte `workspace:` em range
|
|
49
|
+
concreto — `npm pack` não converte e produziria um artefato quebrado):
|
|
50
|
+
|
|
51
|
+
| Consumidor | Antes | Com 0.2.0 |
|
|
52
|
+
| ----------------------- | -------------------- | --------------------------------------- |
|
|
53
|
+
| Dental Plataforma | 4 erros de typecheck | **0 erros**, 432/432 testes |
|
|
54
|
+
| Baruk Rep/Ind (backend) | 7 erros de typecheck | **0 erros**, 247/247 testes de `access` |
|
|
55
|
+
|
|
56
|
+
## [0.1.0] — 2026-07-30
|
|
57
|
+
|
|
58
|
+
Primeira publicação pública (ECO-06 R4.4): db, tenancy, RBAC, auth, mail, audit,
|
|
59
|
+
clients, requests, notifications, portal, users, dashboard e import.
|
|
@@ -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,MAAM,iBAAiB,CAAC;AAM1C,UAAU,KAAK;IACb,GAAG,IAAI,MAAM,CAAC;CACf;AAGD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAcnD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,KAAkB,GACxB,OAAO,CAAC,OAAO,CAAC,CAsBlB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { uuidv7 } from '@baruk/shared';
|
|
2
|
-
|
|
3
|
-
import { hashPasswordAsync } from './password.js';
|
|
2
|
+
import { hashPassword } from './password.js';
|
|
4
3
|
import { generateSessionToken, hashToken } from './session-token.js';
|
|
5
4
|
const RESET_TTL_MS = 60 * 60 * 1000; // 1h
|
|
6
5
|
const REAL_CLOCK = { now: () => Date.now() };
|
|
@@ -39,11 +38,10 @@ export async function resetPassword(db, token, newPassword, clock = REAL_CLOCK)
|
|
|
39
38
|
const reset = rows[0];
|
|
40
39
|
if (!reset)
|
|
41
40
|
return false;
|
|
42
|
-
const passwordHash = await hashPasswordAsync(newPassword);
|
|
43
41
|
await db.begin(async (tx) => {
|
|
44
42
|
await tx `
|
|
45
43
|
INSERT INTO user_credential (user_id, password_hash, must_change_password)
|
|
46
|
-
VALUES (${reset.user_id}, ${
|
|
44
|
+
VALUES (${reset.user_id}, ${hashPassword(newPassword)}, false)
|
|
47
45
|
ON CONFLICT (user_id) DO UPDATE
|
|
48
46
|
SET password_hash = EXCLUDED.password_hash, must_change_password = false, updated_at = now()
|
|
49
47
|
`;
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"password-reset.js","sourceRoot":"","sources":["../../src/auth/password-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAErE,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,KAAK;AAK1C,MAAM,UAAU,GAAU,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAEpD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAAM,EACN,KAAa,EACb,QAAe,UAAU;IAEzB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAkC;kDACR,KAAK;GACpD,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAErD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACpD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,EAAE,CAAA;;cAEI,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC;GAC9E,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAM,EACN,KAAa,EACb,WAAmB,EACnB,QAAe,UAAU;IAEzB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzC,MAAM,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,MAAM,EAAE,CAAmC;;yBAEjC,EAAE,yCAAyC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;GACtF,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IAEzB,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC1B,MAAM,EAAE,CAAA;;gBAEI,KAAK,CAAC,OAAO,KAAK,YAAY,CAAC,WAAW,CAAC;;;KAGtD,CAAC;QACF,MAAM,EAAE,CAAA,wDAAwD,KAAK,CAAC,EAAE,EAAE,CAAC;QAC3E,iDAAiD;QACjD,MAAM,EAAE,CAAA,8DAA8D,KAAK,CAAC,OAAO,yBAAyB,CAAC;IAC/G,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/auth/password.d.ts
CHANGED
|
@@ -1,21 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* [contrato público — SÍNCRONO] Deriva um hash scrypt (keylen 64) com salt aleatório,
|
|
3
|
-
* no formato `scrypt$N$r$p$saltB64$hashB64`. Idêntico ao pré-R1.
|
|
4
|
-
*/
|
|
1
|
+
/** Deriva um hash scrypt com salt aleatório, no formato `scrypt$N$r$p$salt$hash`. */
|
|
5
2
|
export declare function hashPassword(password: string): string;
|
|
6
|
-
/**
|
|
7
|
-
* [contrato público — SÍNCRONO] Verifica a senha contra o hash armazenado, em tempo
|
|
8
|
-
* constante. Aceita o encoding legado (base64) e o canônico (base64url).
|
|
9
|
-
*/
|
|
3
|
+
/** Verifica uma senha contra o hash armazenado, em tempo constante. */
|
|
10
4
|
export declare function verifyPassword(password: string, stored: string): boolean;
|
|
11
|
-
/**
|
|
12
|
-
* [aditivo — convergência RFC-IDENTITY-003 §3.2] Deriva o hash via KDF CANÔNICO de
|
|
13
|
-
* @baruk/identity (scrypt keylen 64). Assíncrono (scrypt não-bloqueante). Emite base64url.
|
|
14
|
-
*/
|
|
15
|
-
export declare function hashPasswordAsync(password: string): Promise<string>;
|
|
16
|
-
/**
|
|
17
|
-
* [aditivo — convergência RFC-IDENTITY-003 §3.2] Verifica via verify CANÔNICO de
|
|
18
|
-
* @baruk/identity — aceita os hashes legados (base64/keylen 64). Assíncrono.
|
|
19
|
-
*/
|
|
20
|
-
export declare function verifyPasswordAsync(password: string, stored: string): Promise<boolean>;
|
|
21
5
|
//# sourceMappingURL=password.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAQA,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAYxE"}
|
package/dist/auth/password.js
CHANGED
|
@@ -1,48 +1,23 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Senha/KDF do @baruk/core — contrato público SÍNCRONO preservado + convergência ADITIVA.
|
|
3
|
-
* ---------------------------------------------------------------------------
|
|
4
|
-
* RFC-IDENTITY-003 §3.2/§4 (remediação R1 — restauração de compatibilidade).
|
|
5
|
-
*
|
|
6
|
-
* Contrato público (barrel `@baruk/core`): `hashPassword`/`verifyPassword` seguem
|
|
7
|
-
* SÍNCRONOS (`string`/`boolean`), byte-a-byte idênticos ao pré-R1 — a superfície
|
|
8
|
-
* pública NÃO muda (SemVer preservado; RFC §2). O `verifyPassword` aceita tanto o
|
|
9
|
-
* encoding legado (base64) quanto o canônico (base64url), portanto não há gap de
|
|
10
|
-
* formato entre os hashes gravados pela via síncrona e pela via canônica.
|
|
11
|
-
*
|
|
12
|
-
* Convergência sobre @baruk/identity (RFC-IDENTITY-003 §3.2) é ADITIVA: exposta
|
|
13
|
-
* via `hashPasswordAsync`/`verifyPasswordAsync`, que consomem o KDF canônico
|
|
14
|
-
* (scrypt, params da plataforma keylen 64). Novos hashes canônicos saem em
|
|
15
|
-
* base64url (uniformização sancionada pela RFC §4); os legados seguem válidos.
|
|
16
|
-
*/
|
|
17
1
|
import { randomBytes, scryptSync, timingSafeEqual } from 'node:crypto';
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* [contrato público — SÍNCRONO] Deriva um hash scrypt (keylen 64) com salt aleatório,
|
|
27
|
-
* no formato `scrypt$N$r$p$saltB64$hashB64`. Idêntico ao pré-R1.
|
|
28
|
-
*/
|
|
2
|
+
// scrypt (nativo do Node, sem dependência). Parâmetros dentro do maxmem padrão.
|
|
3
|
+
const N = 16384;
|
|
4
|
+
const R = 8;
|
|
5
|
+
const P = 1;
|
|
6
|
+
const KEYLEN = 64;
|
|
7
|
+
/** Deriva um hash scrypt com salt aleatório, no formato `scrypt$N$r$p$salt$hash`. */
|
|
29
8
|
export function hashPassword(password) {
|
|
30
|
-
const { N, r, p, keylen } = PLATFORM_SCRYPT;
|
|
31
9
|
const salt = randomBytes(16);
|
|
32
|
-
const derived = scryptSync(password, salt,
|
|
33
|
-
return ['scrypt', N,
|
|
10
|
+
const derived = scryptSync(password, salt, KEYLEN, { N, r: R, p: P });
|
|
11
|
+
return ['scrypt', N, R, P, salt.toString('base64'), derived.toString('base64')].join('$');
|
|
34
12
|
}
|
|
35
|
-
/**
|
|
36
|
-
* [contrato público — SÍNCRONO] Verifica a senha contra o hash armazenado, em tempo
|
|
37
|
-
* constante. Aceita o encoding legado (base64) e o canônico (base64url).
|
|
38
|
-
*/
|
|
13
|
+
/** Verifica uma senha contra o hash armazenado, em tempo constante. */
|
|
39
14
|
export function verifyPassword(password, stored) {
|
|
40
15
|
const parts = stored.split('$');
|
|
41
16
|
if (parts.length !== 6 || parts[0] !== 'scrypt')
|
|
42
17
|
return false;
|
|
43
|
-
const [, n, r, p,
|
|
44
|
-
const salt =
|
|
45
|
-
const expected =
|
|
18
|
+
const [, n, r, p, saltB64, hashB64] = parts;
|
|
19
|
+
const salt = Buffer.from(saltB64, 'base64');
|
|
20
|
+
const expected = Buffer.from(hashB64, 'base64');
|
|
46
21
|
const derived = scryptSync(password, salt, expected.length, {
|
|
47
22
|
N: Number(n),
|
|
48
23
|
r: Number(r),
|
|
@@ -50,18 +25,4 @@ export function verifyPassword(password, stored) {
|
|
|
50
25
|
});
|
|
51
26
|
return derived.length === expected.length && timingSafeEqual(derived, expected);
|
|
52
27
|
}
|
|
53
|
-
/**
|
|
54
|
-
* [aditivo — convergência RFC-IDENTITY-003 §3.2] Deriva o hash via KDF CANÔNICO de
|
|
55
|
-
* @baruk/identity (scrypt keylen 64). Assíncrono (scrypt não-bloqueante). Emite base64url.
|
|
56
|
-
*/
|
|
57
|
-
export function hashPasswordAsync(password) {
|
|
58
|
-
return canonicalHash(password, PLATFORM_SCRYPT);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* [aditivo — convergência RFC-IDENTITY-003 §3.2] Verifica via verify CANÔNICO de
|
|
62
|
-
* @baruk/identity — aceita os hashes legados (base64/keylen 64). Assíncrono.
|
|
63
|
-
*/
|
|
64
|
-
export function verifyPasswordAsync(password, stored) {
|
|
65
|
-
return canonicalVerify(password, stored);
|
|
66
|
-
}
|
|
67
28
|
//# sourceMappingURL=password.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"password.js","sourceRoot":"","sources":["../../src/auth/password.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvE,gFAAgF;AAChF,MAAM,CAAC,GAAG,KAAK,CAAC;AAChB,MAAM,CAAC,GAAG,CAAC,CAAC;AACZ,MAAM,CAAC,GAAG,CAAC,CAAC;AACZ,MAAM,MAAM,GAAG,EAAE,CAAC;AAElB,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5F,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,MAAc;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,EAAE;QAC1D,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;KACb,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAClF,CAAC"}
|
package/dist/auth/service.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { type UserType } from '@baruk/shared';
|
|
|
2
2
|
import type { AuditContext } from '@baruk/shared';
|
|
3
3
|
import type { Db } from '../db/client.js';
|
|
4
4
|
import { type ProductAccess } from '../products/repository.js';
|
|
5
|
-
import type { Principal, Membership } from '@baruk/identity';
|
|
6
5
|
export interface AuthUser {
|
|
7
6
|
id: string;
|
|
8
7
|
email: string;
|
|
@@ -67,16 +66,5 @@ export declare function sessionProducts(db: Db, token: string): Promise<{
|
|
|
67
66
|
}>;
|
|
68
67
|
/** Revoga a sessão (logout). */
|
|
69
68
|
export declare function logout(db: Db, token: string): Promise<void>;
|
|
70
|
-
/**
|
|
71
|
-
* Convergência de contratos (RFC-IDENTITY-003 §3.5) — adaptadores finos que
|
|
72
|
-
* projetam os tipos de DOMÍNIO da plataforma sobre os contratos CANÔNICOS de
|
|
73
|
-
* `@baruk/identity`. São ADITIVOS: não alteram o schema/DB nem os tipos que a
|
|
74
|
-
* API consome hoje (`AuthUser`/`MembershipView`/`AuthContext` permanecem os
|
|
75
|
-
* contratos de domínio multi-tenant). Habilitam a adoção incremental dos
|
|
76
|
-
* canônicos no cutover para o registry (C10). O `AuthContext` canônico usa
|
|
77
|
-
* `permissions` como mapa escopo→chaves e `activeScopeId = tenantId`.
|
|
78
|
-
*/
|
|
79
|
-
export declare function toPrincipal(user: AuthUser, scopeId: string): Principal;
|
|
80
|
-
export declare function toMembership(view: MembershipView, principalId: string): Membership;
|
|
81
69
|
export {};
|
|
82
70
|
//# sourceMappingURL=service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6C,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAK1C,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;
|
|
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
|
@@ -4,9 +4,7 @@ import { appendAudit } from '../audit/audit.js';
|
|
|
4
4
|
import { loadUserPermissions } from '../rbac/authorize.js';
|
|
5
5
|
import { getPortalClientId } from '../portal/repository.js';
|
|
6
6
|
import { listProductsForUser } from '../products/repository.js';
|
|
7
|
-
|
|
8
|
-
// async (o contrato público síncrono hashPassword/verifyPassword segue exportado no barrel).
|
|
9
|
-
import { hashPasswordAsync, verifyPasswordAsync } from './password.js';
|
|
7
|
+
import { hashPassword, verifyPassword } from './password.js';
|
|
10
8
|
import { generateSessionToken, hashToken } from './session-token.js';
|
|
11
9
|
const SESSION_TTL_MS = 12 * 60 * 60 * 1000; // 12h
|
|
12
10
|
const REAL_CLOCK = { now: () => Date.now() };
|
|
@@ -20,10 +18,9 @@ export async function upsertUserWithPassword(db, input) {
|
|
|
20
18
|
RETURNING id
|
|
21
19
|
`;
|
|
22
20
|
const userId = rows[0].id;
|
|
23
|
-
const passwordHash = await hashPasswordAsync(input.password);
|
|
24
21
|
await db `
|
|
25
22
|
INSERT INTO user_credential (user_id, password_hash)
|
|
26
|
-
VALUES (${userId}, ${
|
|
23
|
+
VALUES (${userId}, ${hashPassword(input.password)})
|
|
27
24
|
ON CONFLICT (user_id) DO UPDATE SET password_hash = EXCLUDED.password_hash, updated_at = now()
|
|
28
25
|
`;
|
|
29
26
|
return {
|
|
@@ -46,7 +43,7 @@ export async function login(db, input, clock = REAL_CLOCK) {
|
|
|
46
43
|
const creds = await db `
|
|
47
44
|
SELECT password_hash FROM user_credential WHERE user_id = ${user.id}
|
|
48
45
|
`;
|
|
49
|
-
if (!creds[0] || !(
|
|
46
|
+
if (!creds[0] || !verifyPassword(input.password, creds[0].password_hash)) {
|
|
50
47
|
throw new UnauthorizedError('Credenciais inválidas');
|
|
51
48
|
}
|
|
52
49
|
const { token, tokenHash } = generateSessionToken();
|
|
@@ -181,34 +178,4 @@ export async function logout(db, token) {
|
|
|
181
178
|
async function auditWithinTenant(db, tenantId, actorId, entry) {
|
|
182
179
|
await withContext(db, { tenantId, userId: actorId }, (tx) => appendAudit(tx, entry));
|
|
183
180
|
}
|
|
184
|
-
/**
|
|
185
|
-
* Convergência de contratos (RFC-IDENTITY-003 §3.5) — adaptadores finos que
|
|
186
|
-
* projetam os tipos de DOMÍNIO da plataforma sobre os contratos CANÔNICOS de
|
|
187
|
-
* `@baruk/identity`. São ADITIVOS: não alteram o schema/DB nem os tipos que a
|
|
188
|
-
* API consome hoje (`AuthUser`/`MembershipView`/`AuthContext` permanecem os
|
|
189
|
-
* contratos de domínio multi-tenant). Habilitam a adoção incremental dos
|
|
190
|
-
* canônicos no cutover para o registry (C10). O `AuthContext` canônico usa
|
|
191
|
-
* `permissions` como mapa escopo→chaves e `activeScopeId = tenantId`.
|
|
192
|
-
*/
|
|
193
|
-
export function toPrincipal(user, scopeId) {
|
|
194
|
-
return {
|
|
195
|
-
id: user.id,
|
|
196
|
-
email: user.email,
|
|
197
|
-
kind: user.userType === 'client_portal' ? 'client' : 'staff',
|
|
198
|
-
scopeId,
|
|
199
|
-
status: 'active',
|
|
200
|
-
sessionVersion: 0,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
export function toMembership(view, principalId) {
|
|
204
|
-
return {
|
|
205
|
-
id: `${principalId}:${view.tenantId}`,
|
|
206
|
-
principalId,
|
|
207
|
-
scopeId: view.tenantId,
|
|
208
|
-
scopeSlug: view.tenantCode,
|
|
209
|
-
scopeName: view.tenantName,
|
|
210
|
-
roleKeys: [],
|
|
211
|
-
status: view.status === 'active' ? 'active' : 'suspended',
|
|
212
|
-
};
|
|
213
|
-
}
|
|
214
181
|
//# sourceMappingURL=service.js.map
|
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,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAiB,MAAM,eAAe,CAAC;AAGzF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAsB,MAAM,2BAA2B,CAAC;AACpF,
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/auth/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Sessão opaca: o cliente recebe um token aleatório; o banco guarda apenas o
|
|
3
|
+
* hash SHA-256 (nunca o token em claro). Resolver a sessão = hashear o token
|
|
4
|
+
* recebido e buscar por igualdade.
|
|
5
|
+
*/
|
|
2
6
|
export declare function generateSessionToken(): {
|
|
3
7
|
token: string;
|
|
4
8
|
tokenHash: string;
|
|
5
9
|
};
|
|
6
|
-
/** Hash determinístico (SHA-256 hex) para armazenar/resolver a sessão. */
|
|
7
10
|
export declare function hashToken(token: string): string;
|
|
8
11
|
//# sourceMappingURL=session-token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-token.d.ts","sourceRoot":"","sources":["../../src/auth/session-token.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-token.d.ts","sourceRoot":"","sources":["../../src/auth/session-token.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAG3E;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -1,19 +1,14 @@
|
|
|
1
|
+
import { createHash, randomBytes } from 'node:crypto';
|
|
1
2
|
/**
|
|
2
|
-
* Sessão opaca
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* token de 32B base64url + hash SHA-256 hex — idêntico byte-a-byte ao anterior,
|
|
6
|
-
* portanto zero mudança de formato ou de schema/DB. Mantém a assinatura pública
|
|
7
|
-
* `generateSessionToken` (thin wrapper `{ token, tokenHash }`) e `hashToken`.
|
|
3
|
+
* Sessão opaca: o cliente recebe um token aleatório; o banco guarda apenas o
|
|
4
|
+
* hash SHA-256 (nunca o token em claro). Resolver a sessão = hashear o token
|
|
5
|
+
* recebido e buscar por igualdade.
|
|
8
6
|
*/
|
|
9
|
-
import { generateOpaqueToken, hashToken as canonicalHashToken } from '@baruk/identity';
|
|
10
|
-
/** Gera o token opaco entregue ao cliente + o hash a persistir (nunca o token cru). */
|
|
11
7
|
export function generateSessionToken() {
|
|
12
|
-
const token =
|
|
13
|
-
return { token, tokenHash:
|
|
8
|
+
const token = randomBytes(32).toString('base64url');
|
|
9
|
+
return { token, tokenHash: hashToken(token) };
|
|
14
10
|
}
|
|
15
|
-
/** Hash determinístico (SHA-256 hex) para armazenar/resolver a sessão. */
|
|
16
11
|
export function hashToken(token) {
|
|
17
|
-
return
|
|
12
|
+
return createHash('sha256').update(token).digest('hex');
|
|
18
13
|
}
|
|
19
14
|
//# sourceMappingURL=session-token.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-token.js","sourceRoot":"","sources":["../../src/auth/session-token.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"session-token.js","sourceRoot":"","sources":["../../src/auth/session-token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor de régua de inadimplência (dunning) — PURO e determinístico. Não envia
|
|
3
|
+
* nada: apenas decide QUAIS passos estão vencidos para uma cobrança numa data de
|
|
4
|
+
* referência. O disparo efetivo (WhatsApp/Email/Notificação) é responsabilidade
|
|
5
|
+
* do Communication/Automation Engine — o Billing só define a política. Assim a
|
|
6
|
+
* régua é 100% testável sem I/O e pronta para rodar num cron/queue.
|
|
7
|
+
*/
|
|
8
|
+
export type DunningChannel = 'whatsapp' | 'email' | 'notification';
|
|
9
|
+
export interface DunningStep {
|
|
10
|
+
/** Dias relativos ao vencimento: negativo = antes; 0 = no dia; positivo = após. */
|
|
11
|
+
offsetDays: number;
|
|
12
|
+
channel: DunningChannel;
|
|
13
|
+
/** Chave do template no Communication Engine. */
|
|
14
|
+
template?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface DunningStepDue extends DunningStep {
|
|
17
|
+
/** Identificador idempotente do passo (casa com `dunning_event.step_key`). */
|
|
18
|
+
stepKey: string;
|
|
19
|
+
scheduledFor: string;
|
|
20
|
+
}
|
|
21
|
+
/** Régua padrão de contabilidade: lembrete antes + escalonamento após o vencimento. */
|
|
22
|
+
export declare const DEFAULT_DUNNING_STEPS: readonly DunningStep[];
|
|
23
|
+
export declare function stepKey(step: DunningStep): string;
|
|
24
|
+
export interface DunningChargeView {
|
|
25
|
+
dueDate: string | null;
|
|
26
|
+
status: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Retorna os passos VENCIDOS (data agendada <= hoje) ainda não executados, para
|
|
30
|
+
* uma cobrança em aberto. `today` e `executed` são injetados (determinismo).
|
|
31
|
+
*/
|
|
32
|
+
export declare function dueDunningSteps(steps: readonly DunningStep[], charge: DunningChargeView, today: string, executed?: ReadonlySet<string>): DunningStepDue[];
|
|
33
|
+
//# sourceMappingURL=dunning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dunning.d.ts","sourceRoot":"","sources":["../../src/billing/dunning.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,CAAC;IACxB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IACjD,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,EAAE,SAAS,WAAW,EASvD,CAAC;AAEF,wBAAgB,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAGjD;AAQD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAa,GACxC,cAAc,EAAE,CAclB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motor de régua de inadimplência (dunning) — PURO e determinístico. Não envia
|
|
3
|
+
* nada: apenas decide QUAIS passos estão vencidos para uma cobrança numa data de
|
|
4
|
+
* referência. O disparo efetivo (WhatsApp/Email/Notificação) é responsabilidade
|
|
5
|
+
* do Communication/Automation Engine — o Billing só define a política. Assim a
|
|
6
|
+
* régua é 100% testável sem I/O e pronta para rodar num cron/queue.
|
|
7
|
+
*/
|
|
8
|
+
/** Régua padrão de contabilidade: lembrete antes + escalonamento após o vencimento. */
|
|
9
|
+
export const DEFAULT_DUNNING_STEPS = [
|
|
10
|
+
{ offsetDays: -3, channel: 'whatsapp', template: 'lembrete_previo' },
|
|
11
|
+
{ offsetDays: 0, channel: 'whatsapp', template: 'vencimento_hoje' },
|
|
12
|
+
{ offsetDays: 3, channel: 'whatsapp', template: 'atraso_3d' },
|
|
13
|
+
{ offsetDays: 7, channel: 'email', template: 'atraso_7d' },
|
|
14
|
+
{ offsetDays: 15, channel: 'email', template: 'atraso_15d' },
|
|
15
|
+
{ offsetDays: 30, channel: 'whatsapp', template: 'atraso_30d' },
|
|
16
|
+
{ offsetDays: 60, channel: 'email', template: 'atraso_60d' },
|
|
17
|
+
{ offsetDays: 90, channel: 'notification', template: 'atraso_90d' },
|
|
18
|
+
];
|
|
19
|
+
export function stepKey(step) {
|
|
20
|
+
const tag = step.offsetDays === 0 ? 'D0' : step.offsetDays > 0 ? `D+${step.offsetDays}` : `D${step.offsetDays}`;
|
|
21
|
+
return `${tag}:${step.channel}`;
|
|
22
|
+
}
|
|
23
|
+
function addDays(isoDate, days) {
|
|
24
|
+
const d = new Date(`${isoDate}T00:00:00Z`);
|
|
25
|
+
d.setUTCDate(d.getUTCDate() + days);
|
|
26
|
+
return d.toISOString().slice(0, 10);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Retorna os passos VENCIDOS (data agendada <= hoje) ainda não executados, para
|
|
30
|
+
* uma cobrança em aberto. `today` e `executed` são injetados (determinismo).
|
|
31
|
+
*/
|
|
32
|
+
export function dueDunningSteps(steps, charge, today, executed = new Set()) {
|
|
33
|
+
if (!charge.dueDate)
|
|
34
|
+
return [];
|
|
35
|
+
if (charge.status === 'paid' || charge.status === 'canceled' || charge.status === 'refunded')
|
|
36
|
+
return [];
|
|
37
|
+
const due = [];
|
|
38
|
+
for (const step of steps) {
|
|
39
|
+
const key = stepKey(step);
|
|
40
|
+
if (executed.has(key))
|
|
41
|
+
continue;
|
|
42
|
+
const scheduledFor = addDays(charge.dueDate, step.offsetDays);
|
|
43
|
+
if (scheduledFor <= today) {
|
|
44
|
+
due.push({ ...step, stepKey: key, scheduledFor });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return due.sort((a, b) => a.scheduledFor.localeCompare(b.scheduledFor));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=dunning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dunning.js","sourceRoot":"","sources":["../../src/billing/dunning.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,uFAAuF;AACvF,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE;IACpE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE;IACnE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC7D,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC1D,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC5D,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC/D,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;IAC5D,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE;CACpE,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,IAAiB;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAChH,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,OAAO,CAAC,OAAe,EAAE,IAAY;IAC5C,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAOD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,KAA6B,EAC7B,MAAyB,EACzB,KAAa,EACb,WAAgC,IAAI,GAAG,EAAE;IAEzC,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,EAAE,CAAC;IAExG,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AAC1E,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BillingProvider, ChargeRequest, ChargeResult, ProviderConfig, SubscriptionRequest, SubscriptionResult, WebhookEvent } from './types.js';
|
|
2
|
+
export declare class AsaasProvider implements BillingProvider {
|
|
3
|
+
readonly key = "asaas";
|
|
4
|
+
private readonly apiKey;
|
|
5
|
+
private readonly baseUrl;
|
|
6
|
+
private readonly fetchImpl;
|
|
7
|
+
constructor(config: ProviderConfig);
|
|
8
|
+
private call;
|
|
9
|
+
createCharge(req: ChargeRequest): Promise<ChargeResult>;
|
|
10
|
+
cancelCharge(externalId: string): Promise<void>;
|
|
11
|
+
createSubscription(req: SubscriptionRequest): Promise<SubscriptionResult>;
|
|
12
|
+
cancelSubscription(externalId: string): Promise<void>;
|
|
13
|
+
parseWebhook(payload: unknown): WebhookEvent;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=asaas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asaas.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/asaas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AAyBpB,qBAAa,aAAc,YAAW,eAAe;IACnD,QAAQ,CAAC,GAAG,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;gBAE7B,MAAM,EAAE,cAAc;YAOpB,IAAI;IAaZ,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBvD,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,kBAAkB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkBzE,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY;CAiB7C"}
|