@baruk/core 0.1.0 → 0.3.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 +63 -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 +43 -0
- package/dist/commercial-catalog/coupon.d.ts.map +1 -0
- package/dist/commercial-catalog/coupon.js +57 -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 +175 -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,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runBillingCron = exports.retryFailedWebhookEvents = exports.backofficeActivateSubscription = exports.backofficeListWebhookEvents = exports.backofficeOverview = exports.backofficeListSubscriptions = exports.reactivateForTenant = exports.cancelForTenant = exports.changePlanForTenant = exports.processWebhook = exports.startCheckout = exports.entitlementsForPlan = exports.standingFor = exports.subscriptionOverview = exports.signupSelfService = exports.seedSaasPlans = exports.withOperatorContext = exports.listBillingEvents = exports.listInvoices = exports.upsertSubscription = exports.getSubscriptionByTenant = exports.getSubscription = exports.getPlan = exports.listPublicPlans = exports.ensureSaasPlanCatalog = exports.DEFAULT_TRIAL_DAYS = exports.SAAS_PLANS = exports.DisabledSubscriptionProvider = exports.AsaasSubscriptionProvider = exports.resolveSubscriptionBillingProvider = exports.dunningStepsAsEvents = exports.startTrial = exports.cancelSubscription = exports.changePlan = exports.applySubscriptionEvent = exports.InMemoryEventPublisher = exports.NoopEventPublisher = exports.MANDATORY_EVENT_TYPES = exports.isMandatoryEvent = exports.createDomainEvent = exports.SUBSCRIPTION_BILLING_CONTRACT_VERSION = exports.CANONICAL_PROVIDER_ERROR_MESSAGES = exports.isRetryableProviderError = void 0;
|
|
4
|
+
var types_js_1 = require("./types.js");
|
|
5
|
+
Object.defineProperty(exports, "isRetryableProviderError", { enumerable: true, get: function () { return types_js_1.isRetryableProviderError; } });
|
|
6
|
+
Object.defineProperty(exports, "CANONICAL_PROVIDER_ERROR_MESSAGES", { enumerable: true, get: function () { return types_js_1.CANONICAL_PROVIDER_ERROR_MESSAGES; } });
|
|
7
|
+
Object.defineProperty(exports, "SUBSCRIPTION_BILLING_CONTRACT_VERSION", { enumerable: true, get: function () { return types_js_1.SUBSCRIPTION_BILLING_CONTRACT_VERSION; } });
|
|
8
|
+
var events_js_1 = require("./events.js");
|
|
9
|
+
Object.defineProperty(exports, "createDomainEvent", { enumerable: true, get: function () { return events_js_1.createDomainEvent; } });
|
|
10
|
+
Object.defineProperty(exports, "isMandatoryEvent", { enumerable: true, get: function () { return events_js_1.isMandatoryEvent; } });
|
|
11
|
+
Object.defineProperty(exports, "MANDATORY_EVENT_TYPES", { enumerable: true, get: function () { return events_js_1.MANDATORY_EVENT_TYPES; } });
|
|
12
|
+
Object.defineProperty(exports, "NoopEventPublisher", { enumerable: true, get: function () { return events_js_1.NoopEventPublisher; } });
|
|
13
|
+
Object.defineProperty(exports, "InMemoryEventPublisher", { enumerable: true, get: function () { return events_js_1.InMemoryEventPublisher; } });
|
|
14
|
+
var reconcile_js_1 = require("./reconcile.js");
|
|
15
|
+
Object.defineProperty(exports, "applySubscriptionEvent", { enumerable: true, get: function () { return reconcile_js_1.applySubscriptionEvent; } });
|
|
16
|
+
Object.defineProperty(exports, "changePlan", { enumerable: true, get: function () { return reconcile_js_1.changePlan; } });
|
|
17
|
+
Object.defineProperty(exports, "cancelSubscription", { enumerable: true, get: function () { return reconcile_js_1.cancelSubscription; } });
|
|
18
|
+
Object.defineProperty(exports, "startTrial", { enumerable: true, get: function () { return reconcile_js_1.startTrial; } });
|
|
19
|
+
// DEFAULT_DUNNING_STEPS/DunningStep/DunningStepDue sao os MESMOS simbolos ja
|
|
20
|
+
// exportados por `../billing/dunning.js` no barrel do pacote (`src/index.ts`) —
|
|
21
|
+
// nao redeclarados aqui para nao colidir. So a funcao nova (genuina desta
|
|
22
|
+
// Capability) e exportada.
|
|
23
|
+
var dunning_js_1 = require("./dunning.js");
|
|
24
|
+
Object.defineProperty(exports, "dunningStepsAsEvents", { enumerable: true, get: function () { return dunning_js_1.dunningStepsAsEvents; } });
|
|
25
|
+
var registry_js_1 = require("./provider/registry.js");
|
|
26
|
+
Object.defineProperty(exports, "resolveSubscriptionBillingProvider", { enumerable: true, get: function () { return registry_js_1.resolveSubscriptionBillingProvider; } });
|
|
27
|
+
var asaas_js_1 = require("./provider/asaas.js");
|
|
28
|
+
Object.defineProperty(exports, "AsaasSubscriptionProvider", { enumerable: true, get: function () { return asaas_js_1.AsaasSubscriptionProvider; } });
|
|
29
|
+
var disabled_js_1 = require("./provider/disabled.js");
|
|
30
|
+
Object.defineProperty(exports, "DisabledSubscriptionProvider", { enumerable: true, get: function () { return disabled_js_1.DisabledSubscriptionProvider; } });
|
|
31
|
+
// ── BILL-01 (Fase 17): persistência + serviço do Billing SaaS ────────────────
|
|
32
|
+
var plans_js_1 = require("./plans.js");
|
|
33
|
+
Object.defineProperty(exports, "SAAS_PLANS", { enumerable: true, get: function () { return plans_js_1.SAAS_PLANS; } });
|
|
34
|
+
Object.defineProperty(exports, "DEFAULT_TRIAL_DAYS", { enumerable: true, get: function () { return plans_js_1.DEFAULT_TRIAL_DAYS; } });
|
|
35
|
+
var repository_js_1 = require("./repository.js");
|
|
36
|
+
Object.defineProperty(exports, "ensureSaasPlanCatalog", { enumerable: true, get: function () { return repository_js_1.ensureSaasPlanCatalog; } });
|
|
37
|
+
Object.defineProperty(exports, "listPublicPlans", { enumerable: true, get: function () { return repository_js_1.listPublicPlans; } });
|
|
38
|
+
Object.defineProperty(exports, "getPlan", { enumerable: true, get: function () { return repository_js_1.getPlan; } });
|
|
39
|
+
Object.defineProperty(exports, "getSubscription", { enumerable: true, get: function () { return repository_js_1.getSubscription; } });
|
|
40
|
+
Object.defineProperty(exports, "getSubscriptionByTenant", { enumerable: true, get: function () { return repository_js_1.getSubscriptionByTenant; } });
|
|
41
|
+
Object.defineProperty(exports, "upsertSubscription", { enumerable: true, get: function () { return repository_js_1.upsertSubscription; } });
|
|
42
|
+
Object.defineProperty(exports, "listInvoices", { enumerable: true, get: function () { return repository_js_1.listInvoices; } });
|
|
43
|
+
Object.defineProperty(exports, "listBillingEvents", { enumerable: true, get: function () { return repository_js_1.listBillingEvents; } });
|
|
44
|
+
Object.defineProperty(exports, "withOperatorContext", { enumerable: true, get: function () { return repository_js_1.withOperatorContext; } });
|
|
45
|
+
var service_js_1 = require("./service.js");
|
|
46
|
+
Object.defineProperty(exports, "seedSaasPlans", { enumerable: true, get: function () { return service_js_1.seedSaasPlans; } });
|
|
47
|
+
Object.defineProperty(exports, "signupSelfService", { enumerable: true, get: function () { return service_js_1.signupSelfService; } });
|
|
48
|
+
Object.defineProperty(exports, "subscriptionOverview", { enumerable: true, get: function () { return service_js_1.subscriptionOverview; } });
|
|
49
|
+
Object.defineProperty(exports, "standingFor", { enumerable: true, get: function () { return service_js_1.standingFor; } });
|
|
50
|
+
Object.defineProperty(exports, "entitlementsForPlan", { enumerable: true, get: function () { return service_js_1.entitlementsForPlan; } });
|
|
51
|
+
Object.defineProperty(exports, "startCheckout", { enumerable: true, get: function () { return service_js_1.startCheckout; } });
|
|
52
|
+
Object.defineProperty(exports, "processWebhook", { enumerable: true, get: function () { return service_js_1.processWebhook; } });
|
|
53
|
+
Object.defineProperty(exports, "changePlanForTenant", { enumerable: true, get: function () { return service_js_1.changePlanForTenant; } });
|
|
54
|
+
Object.defineProperty(exports, "cancelForTenant", { enumerable: true, get: function () { return service_js_1.cancelForTenant; } });
|
|
55
|
+
Object.defineProperty(exports, "reactivateForTenant", { enumerable: true, get: function () { return service_js_1.reactivateForTenant; } });
|
|
56
|
+
Object.defineProperty(exports, "backofficeListSubscriptions", { enumerable: true, get: function () { return service_js_1.backofficeListSubscriptions; } });
|
|
57
|
+
Object.defineProperty(exports, "backofficeOverview", { enumerable: true, get: function () { return service_js_1.backofficeOverview; } });
|
|
58
|
+
Object.defineProperty(exports, "backofficeListWebhookEvents", { enumerable: true, get: function () { return service_js_1.backofficeListWebhookEvents; } });
|
|
59
|
+
Object.defineProperty(exports, "backofficeActivateSubscription", { enumerable: true, get: function () { return service_js_1.backofficeActivateSubscription; } });
|
|
60
|
+
Object.defineProperty(exports, "retryFailedWebhookEvents", { enumerable: true, get: function () { return service_js_1.retryFailedWebhookEvents; } });
|
|
61
|
+
Object.defineProperty(exports, "runBillingCron", { enumerable: true, get: function () { return service_js_1.runBillingCron; } });
|
|
62
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subscription-billing/index.ts"],"names":[],"mappings":";;;AAuBA,uCAAgI;AAAvH,oHAAA,wBAAwB,OAAA;AAAE,6HAAA,iCAAiC,OAAA;AAAE,iIAAA,qCAAqC,OAAA;AAG3G,yCAAqI;AAA5H,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,kHAAA,qBAAqB,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AAG/G,+CAAoG;AAA3F,sHAAA,sBAAsB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAAE,0GAAA,UAAU,OAAA;AAE3E,6EAA6E;AAC7E,gFAAgF;AAChF,0EAA0E;AAC1E,2BAA2B;AAC3B,2CAAoD;AAA3C,kHAAA,oBAAoB,OAAA;AAE7B,sDAA4E;AAAnE,iIAAA,kCAAkC,OAAA;AAE3C,gDAAgE;AAAvD,qHAAA,yBAAyB,OAAA;AAClC,sDAAsE;AAA7D,2HAAA,4BAA4B,OAAA;AAErC,gFAAgF;AAChF,uCAA4D;AAAnD,sGAAA,UAAU,OAAA;AAAE,8GAAA,kBAAkB,OAAA;AAEvC,iDAUyB;AATvB,sHAAA,qBAAqB,OAAA;AACrB,gHAAA,eAAe,OAAA;AACf,wGAAA,OAAO,OAAA;AACP,gHAAA,eAAe,OAAA;AACf,wHAAA,uBAAuB,OAAA;AACvB,mHAAA,kBAAkB,OAAA;AAClB,6GAAA,YAAY,OAAA;AACZ,kHAAA,iBAAiB,OAAA;AACjB,oHAAA,mBAAmB,OAAA;AAGrB,2CAiBsB;AAhBpB,2GAAA,aAAa,OAAA;AACb,+GAAA,iBAAiB,OAAA;AACjB,kHAAA,oBAAoB,OAAA;AACpB,yGAAA,WAAW,OAAA;AACX,iHAAA,mBAAmB,OAAA;AACnB,2GAAA,aAAa,OAAA;AACb,4GAAA,cAAc,OAAA;AACd,iHAAA,mBAAmB,OAAA;AACnB,6GAAA,eAAe,OAAA;AACf,iHAAA,mBAAmB,OAAA;AACnB,yHAAA,2BAA2B,OAAA;AAC3B,gHAAA,kBAAkB,OAAA;AAClB,yHAAA,2BAA2B,OAAA;AAC3B,4HAAA,8BAA8B,OAAA;AAC9B,sHAAA,wBAAwB,OAAA;AACxB,4GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Catálogo padrão de planos do SaaS (Concern A). Fonte declarativa — o seed
|
|
4
|
+
* materializa em `saas_plan` de forma idempotente (mesmo padrão de
|
|
5
|
+
* `products/catalog.ts` e do RBAC). Preço em CENTAVOS de BRL (v0.1 flat).
|
|
6
|
+
*
|
|
7
|
+
* `modules` alimenta os Entitlements finos (EntitlementSource 'PLAN');
|
|
8
|
+
* `limits` são as franquias por plano (commercial-catalog: PlanFranchises).
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.SAAS_PLANS = exports.DEFAULT_TRIAL_DAYS = exports.DEFAULT_PRODUCT_KEY = void 0;
|
|
12
|
+
/**
|
|
13
|
+
* Produto dono do plano (`product.key` — ver `products/catalog.ts`). O motor de
|
|
14
|
+
* Billing é infraestrutura compartilhada do ecossistema; o catálogo comercial
|
|
15
|
+
* não é. Planos do Baruk Office, do Rep, do Ind e do futuro Varejo coexistem na
|
|
16
|
+
* mesma tabela, separados por esta chave, e `key` só precisa ser único dentro
|
|
17
|
+
* do produto.
|
|
18
|
+
*/
|
|
19
|
+
exports.DEFAULT_PRODUCT_KEY = 'contabil';
|
|
20
|
+
exports.DEFAULT_TRIAL_DAYS = 14;
|
|
21
|
+
exports.SAAS_PLANS = [
|
|
22
|
+
{
|
|
23
|
+
key: 'starter',
|
|
24
|
+
name: 'Starter',
|
|
25
|
+
description: 'Para escritórios começando a digitalizar a operação.',
|
|
26
|
+
amountCents: 9700,
|
|
27
|
+
periodicity: 'monthly',
|
|
28
|
+
trialDays: exports.DEFAULT_TRIAL_DAYS,
|
|
29
|
+
modules: ['clients', 'requests', 'portal'],
|
|
30
|
+
limits: { users: 3, clients: 50, storageGb: 5 },
|
|
31
|
+
isPublic: true,
|
|
32
|
+
isActive: true,
|
|
33
|
+
sortOrder: 1,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
key: 'pro',
|
|
37
|
+
name: 'Pro',
|
|
38
|
+
description: 'Operação completa: portal do cliente, financeiro e auditoria.',
|
|
39
|
+
amountCents: 24700,
|
|
40
|
+
periodicity: 'monthly',
|
|
41
|
+
trialDays: exports.DEFAULT_TRIAL_DAYS,
|
|
42
|
+
modules: ['clients', 'requests', 'portal', 'billing', 'audit', 'notifications'],
|
|
43
|
+
limits: { users: 10, clients: 300, storageGb: 25 },
|
|
44
|
+
isPublic: true,
|
|
45
|
+
isActive: true,
|
|
46
|
+
sortOrder: 2,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: 'enterprise',
|
|
50
|
+
name: 'Enterprise',
|
|
51
|
+
description: 'Times grandes, múltiplas unidades e necessidades sob medida.',
|
|
52
|
+
amountCents: 59700,
|
|
53
|
+
periodicity: 'monthly',
|
|
54
|
+
trialDays: exports.DEFAULT_TRIAL_DAYS,
|
|
55
|
+
modules: [
|
|
56
|
+
'clients',
|
|
57
|
+
'requests',
|
|
58
|
+
'portal',
|
|
59
|
+
'billing',
|
|
60
|
+
'audit',
|
|
61
|
+
'notifications',
|
|
62
|
+
'crm',
|
|
63
|
+
'compliance',
|
|
64
|
+
],
|
|
65
|
+
limits: { users: 50, clients: 2000, storageGb: 100 },
|
|
66
|
+
isPublic: true,
|
|
67
|
+
isActive: true,
|
|
68
|
+
sortOrder: 3,
|
|
69
|
+
},
|
|
70
|
+
// Plano anual do Pro — mesma franquia, 2 meses de desconto (12x → 10x).
|
|
71
|
+
// NÃO CONTRATÁVEL na v0.1: o checkout certificado cria link RECURRENT MENSAL
|
|
72
|
+
// (asaas.ts, subscriptionCycle fixo) — vender anual cobraria 12x o valor.
|
|
73
|
+
// Reativar quando o contrato de checkout suportar ciclo (v0.2).
|
|
74
|
+
{
|
|
75
|
+
key: 'pro-anual',
|
|
76
|
+
name: 'Pro Anual',
|
|
77
|
+
description: 'Plano Pro com cobrança anual — economize 2 mensalidades.',
|
|
78
|
+
amountCents: 247000,
|
|
79
|
+
periodicity: 'yearly',
|
|
80
|
+
trialDays: exports.DEFAULT_TRIAL_DAYS,
|
|
81
|
+
modules: ['clients', 'requests', 'portal', 'billing', 'audit', 'notifications'],
|
|
82
|
+
limits: { users: 10, clients: 300, storageGb: 25 },
|
|
83
|
+
isPublic: false,
|
|
84
|
+
isActive: false,
|
|
85
|
+
sortOrder: 4,
|
|
86
|
+
},
|
|
87
|
+
];
|
|
88
|
+
//# sourceMappingURL=plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/subscription-billing/plans.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH;;;;;;GAMG;AACU,QAAA,mBAAmB,GAAG,UAAU,CAAC;AAkBjC,QAAA,kBAAkB,GAAG,EAAE,CAAC;AAExB,QAAA,UAAU,GAA2B;IAChD;QACE,GAAG,EAAE,SAAS;QACd,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC;QAC1C,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE;QAC/C,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD;QACE,GAAG,EAAE,KAAK;QACV,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,+DAA+D;QAC5E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC;QAC/E,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QAClD,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD;QACE,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,8DAA8D;QAC3E,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,SAAS;QACtB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE;YACP,SAAS;YACT,UAAU;YACV,QAAQ;YACR,SAAS;YACT,OAAO;YACP,eAAe;YACf,KAAK;YACL,YAAY;SACb;QACD,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;QACpD,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,CAAC;KACb;IACD,wEAAwE;IACxE,6EAA6E;IAC7E,0EAA0E;IAC1E,gEAAgE;IAChE;QACE,GAAG,EAAE,WAAW;QAChB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,0DAA0D;QACvE,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,0BAAkB;QAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,eAAe,CAAC;QAC/E,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;QAClD,QAAQ,EAAE,KAAK;QACf,QAAQ,EAAE,KAAK;QACf,SAAS,EAAE,CAAC;KACb;CACF,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createProductBillingRegistry = createProductBillingRegistry;
|
|
4
|
+
exports.singleProductRegistry = singleProductRegistry;
|
|
5
|
+
const shared_1 = require("@baruk/shared");
|
|
6
|
+
const plans_js_1 = require("./plans.js");
|
|
7
|
+
/**
|
|
8
|
+
* Registry imutável a partir de uma lista de configurações por produto.
|
|
9
|
+
*
|
|
10
|
+
* Sem `fallbackProductKey`, pedir um produto não configurado é erro. Com ele, o
|
|
11
|
+
* produto indicado responde pelos demais — usado só na transição, enquanto os
|
|
12
|
+
* ambientes ainda têm uma conta só.
|
|
13
|
+
*/
|
|
14
|
+
function createProductBillingRegistry(configs, options = {}) {
|
|
15
|
+
const byKey = new Map();
|
|
16
|
+
for (const cfg of configs) {
|
|
17
|
+
if (!cfg.productKey)
|
|
18
|
+
throw new shared_1.ValidationError('ProductBillingConfig sem productKey');
|
|
19
|
+
if (byKey.has(cfg.productKey)) {
|
|
20
|
+
throw new shared_1.ValidationError(`Configuração de billing duplicada para o produto ${cfg.productKey}`);
|
|
21
|
+
}
|
|
22
|
+
byKey.set(cfg.productKey, cfg);
|
|
23
|
+
}
|
|
24
|
+
const fallback = options.fallbackProductKey;
|
|
25
|
+
if (fallback && !byKey.has(fallback)) {
|
|
26
|
+
throw new shared_1.ValidationError(`fallbackProductKey '${fallback}' não está configurado`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
resolve({ productKey }) {
|
|
30
|
+
const direct = byKey.get(productKey);
|
|
31
|
+
if (direct)
|
|
32
|
+
return direct;
|
|
33
|
+
if (fallback) {
|
|
34
|
+
const shared = byKey.get(fallback);
|
|
35
|
+
// A config emprestada responde pelo produto pedido, mas se declara como
|
|
36
|
+
// tal — quem audita um checkout vê o produto real, não o fallback.
|
|
37
|
+
return { ...shared, productKey };
|
|
38
|
+
}
|
|
39
|
+
throw new shared_1.ValidationError(`Produto sem configuração de billing: ${productKey}`);
|
|
40
|
+
},
|
|
41
|
+
has: (productKey) => byKey.has(productKey),
|
|
42
|
+
productKeys: () => [...byKey.keys()],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Registry de um produto só — atalho para ambientes de um produto e para os
|
|
47
|
+
* testes que já existiam antes do multi-produto.
|
|
48
|
+
*/
|
|
49
|
+
function singleProductRegistry(config, productKey = plans_js_1.DEFAULT_PRODUCT_KEY) {
|
|
50
|
+
return createProductBillingRegistry([{ ...config, productKey }], {
|
|
51
|
+
fallbackProductKey: productKey,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=product-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-config.js","sourceRoot":"","sources":["../../../src/subscription-billing/product-config.ts"],"names":[],"mappings":";;AA0DA,oEAmCC;AAMD,sDAOC;AA1GD,0CAAgD;AAEhD,yCAAiD;AAiDjD;;;;;;GAMG;AACH,SAAgB,4BAA4B,CAC1C,OAAwC,EACxC,UAA2C,EAAE;IAE7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,MAAM,IAAI,wBAAe,CAAC,qCAAqC,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,wBAAe,CACvB,oDAAoD,GAAG,CAAC,UAAU,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAC5C,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,wBAAe,CAAC,uBAAuB,QAAQ,wBAAwB,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACL,OAAO,CAAC,EAAE,UAAU,EAAsB;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACrC,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;gBACpC,wEAAwE;gBACxE,mEAAmE;gBACnE,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC;YACnC,CAAC;YACD,MAAM,IAAI,wBAAe,CAAC,wCAAwC,UAAU,EAAE,CAAC,CAAC;QAClF,CAAC;QACD,GAAG,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC;QAClD,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CACnC,MAAyB,EACzB,aAAqB,8BAAmB;IAExC,OAAO,4BAA4B,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE;QAC/D,kBAAkB,EAAE,UAAU;KAC/B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AsaasSubscriptionProvider = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const shared_1 = require("@baruk/shared");
|
|
6
|
+
const sanitize_js_1 = require("../../mail/sanitize.js");
|
|
7
|
+
/**
|
|
8
|
+
* Adapter ASAAS — Golden Provider (RFC §7). A Capability NUNCA importa este
|
|
9
|
+
* arquivo fora de `registry.ts` — trocar de gateway e trocar a string
|
|
10
|
+
* registrada, sem tocar em regra de dominio (ADR-ECO-0019, ja validado em
|
|
11
|
+
* `cap.communication.transactional-email` e no `dental-platform-engine`
|
|
12
|
+
* real, RFC §3). `apiKey` nunca hardcoded (vem de `SubscriptionProviderConfig`, Vault na
|
|
13
|
+
* borda do consumidor); `fetchImpl` injetavel para teste sem rede.
|
|
14
|
+
*/
|
|
15
|
+
const SANDBOX_BASE = 'https://api-sandbox.asaas.com/v3';
|
|
16
|
+
const LIVE_BASE = 'https://api.asaas.com/v3';
|
|
17
|
+
const TIMEOUT_MS = 12_000;
|
|
18
|
+
class AsaasProviderError extends shared_1.AppError {
|
|
19
|
+
constructor(message, status = 502) {
|
|
20
|
+
super(`Provider de pagamento: ${message}`, { status, code: 'billing_provider_error' });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function safeEqual(a, b) {
|
|
24
|
+
const ba = Buffer.from(a);
|
|
25
|
+
const bb = Buffer.from(b);
|
|
26
|
+
if (ba.length !== bb.length)
|
|
27
|
+
return false;
|
|
28
|
+
return (0, node_crypto_1.timingSafeEqual)(ba, bb);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Mapeia o vocabulario do ASAAS para o enum NORMALIZADO PELO DOMINIO (RFC §6) — nunca
|
|
32
|
+
* o contrario. Alinhado ao mapeamento real e ja validado em producao do Golden Project
|
|
33
|
+
* (`dental-platform-engine/gateway/asaas-map.ts`, RFC §10) — cobre `REFUND_REQUESTED`/
|
|
34
|
+
* `CHARGEBACK_*`/`CANCELED` explicito e e case-insensitive (ASAAS nao garante caixa
|
|
35
|
+
* consistente entre ambientes).
|
|
36
|
+
*/
|
|
37
|
+
function normalizeAsaasStatus(status) {
|
|
38
|
+
switch ((status ?? '').toUpperCase()) {
|
|
39
|
+
case 'PENDING':
|
|
40
|
+
case 'AWAITING_RISK_ANALYSIS':
|
|
41
|
+
return 'pending';
|
|
42
|
+
case 'CONFIRMED':
|
|
43
|
+
return 'confirmed';
|
|
44
|
+
case 'RECEIVED':
|
|
45
|
+
case 'RECEIVED_IN_CASH':
|
|
46
|
+
return 'received';
|
|
47
|
+
case 'OVERDUE':
|
|
48
|
+
return 'overdue';
|
|
49
|
+
case 'REFUNDED':
|
|
50
|
+
case 'REFUND_REQUESTED':
|
|
51
|
+
case 'CHARGEBACK_REQUESTED':
|
|
52
|
+
case 'CHARGEBACK_DISPUTE':
|
|
53
|
+
return 'refunded';
|
|
54
|
+
case 'DELETED':
|
|
55
|
+
case 'CANCELED':
|
|
56
|
+
return 'canceled';
|
|
57
|
+
default:
|
|
58
|
+
return 'failed';
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Mesma origem do mapeamento acima — status de ASSINATURA (evento `kind: 'subscription'`). */
|
|
62
|
+
function normalizeAsaasSubscriptionStatus(status) {
|
|
63
|
+
switch ((status ?? '').toUpperCase()) {
|
|
64
|
+
case 'ACTIVE':
|
|
65
|
+
return 'active';
|
|
66
|
+
case 'EXPIRED':
|
|
67
|
+
case 'OVERDUE':
|
|
68
|
+
return 'past_due';
|
|
69
|
+
case 'INACTIVE':
|
|
70
|
+
case 'CANCELED':
|
|
71
|
+
return 'canceled';
|
|
72
|
+
default:
|
|
73
|
+
return 'active';
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function normalizeAsaasPayment(p) {
|
|
77
|
+
return {
|
|
78
|
+
externalId: String(p['id']),
|
|
79
|
+
status: normalizeAsaasStatus(p['status']),
|
|
80
|
+
value: Number(p['value'] ?? 0),
|
|
81
|
+
billingType: p['billingType'] ?? null,
|
|
82
|
+
dueDate: p['dueDate'] ?? null,
|
|
83
|
+
paidAt: p['paymentDate'] ?? null,
|
|
84
|
+
externalSubscriptionId: p['subscription'] ?? null,
|
|
85
|
+
invoiceUrl: p['invoiceUrl'] ?? null,
|
|
86
|
+
bankSlipUrl: p['bankSlipUrl'] ?? null,
|
|
87
|
+
pixPayload: p['pixCopyAndPaste'] ?? null,
|
|
88
|
+
description: p['description'] ?? null,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
class AsaasSubscriptionProvider {
|
|
92
|
+
name = 'asaas';
|
|
93
|
+
mode;
|
|
94
|
+
apiKey;
|
|
95
|
+
webhookSecret;
|
|
96
|
+
baseUrl;
|
|
97
|
+
fetchImpl;
|
|
98
|
+
constructor(config) {
|
|
99
|
+
if (!config.apiKey)
|
|
100
|
+
throw new AsaasProviderError('apiKey ausente (configure no Vault).', 500);
|
|
101
|
+
this.apiKey = config.apiKey;
|
|
102
|
+
this.webhookSecret = config.webhookSecret;
|
|
103
|
+
this.mode = config.mode ?? 'sandbox';
|
|
104
|
+
this.baseUrl = config.baseUrl ?? (this.mode === 'live' ? LIVE_BASE : SANDBOX_BASE);
|
|
105
|
+
this.fetchImpl = config.fetchImpl ?? fetch;
|
|
106
|
+
}
|
|
107
|
+
async call(method, path, body) {
|
|
108
|
+
const controller = new AbortController();
|
|
109
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
110
|
+
try {
|
|
111
|
+
const res = await this.fetchImpl(`${this.baseUrl}${path}`, {
|
|
112
|
+
method,
|
|
113
|
+
headers: { 'content-type': 'application/json', access_token: this.apiKey },
|
|
114
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
115
|
+
signal: controller.signal,
|
|
116
|
+
});
|
|
117
|
+
const text = await res.text();
|
|
118
|
+
const json = text ? JSON.parse(text) : {};
|
|
119
|
+
if (!res.ok) {
|
|
120
|
+
// Nunca propaga o corpo bruto do provider (pode conter a propria apiKey ecoada) —
|
|
121
|
+
// mesma invariante ja endurecida em 2 rounds de Certification (mail/, RFC §9).
|
|
122
|
+
const errors = json['errors'];
|
|
123
|
+
const detail = errors?.[0]?.description ?? `HTTP ${res.status}`;
|
|
124
|
+
(0, sanitize_js_1.logSanitized)(`[subscription-billing] asaas ${method} ${path} falhou:`, detail, [this.apiKey, this.webhookSecret]);
|
|
125
|
+
throw new AsaasProviderError('falha ao contatar o provider de pagamento.');
|
|
126
|
+
}
|
|
127
|
+
return json;
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (err instanceof AsaasProviderError)
|
|
131
|
+
throw err;
|
|
132
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
133
|
+
throw new AsaasProviderError(`timeout apos ${TIMEOUT_MS}ms`, 504);
|
|
134
|
+
}
|
|
135
|
+
(0, sanitize_js_1.logSanitized)(`[subscription-billing] asaas ${method} ${path} erro de rede:`, err instanceof Error ? err.message : String(err), [
|
|
136
|
+
this.apiKey,
|
|
137
|
+
this.webhookSecret,
|
|
138
|
+
]);
|
|
139
|
+
throw new AsaasProviderError('falha de rede ao contatar o provider de pagamento.');
|
|
140
|
+
}
|
|
141
|
+
finally {
|
|
142
|
+
clearTimeout(timer);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async ensureCustomer(input) {
|
|
146
|
+
const created = await this.call('POST', '/customers', {
|
|
147
|
+
name: input.name,
|
|
148
|
+
email: input.email ?? undefined,
|
|
149
|
+
cpfCnpj: input.taxId ?? undefined,
|
|
150
|
+
externalReference: input.tenantId,
|
|
151
|
+
});
|
|
152
|
+
return { externalId: created.id };
|
|
153
|
+
}
|
|
154
|
+
async createCheckout(input) {
|
|
155
|
+
// Payment link hospedado, recorrente — cobre o caso de subscription (RFC §7).
|
|
156
|
+
// Cobranca direta PIX/boleto sem redirect e do Concern B, fora de escopo (RFC §7).
|
|
157
|
+
const link = await this.call('POST', '/paymentLinks', {
|
|
158
|
+
name: input.description,
|
|
159
|
+
billingType: 'UNDEFINED',
|
|
160
|
+
chargeType: 'RECURRENT',
|
|
161
|
+
subscriptionCycle: 'MONTHLY',
|
|
162
|
+
value: input.amountBRL,
|
|
163
|
+
dueDateLimitDays: 7,
|
|
164
|
+
externalReference: `${input.tenantId}:${input.planKey}`,
|
|
165
|
+
callback: { successUrl: input.returnUrl, autoRedirect: true },
|
|
166
|
+
});
|
|
167
|
+
return { externalId: link.id, url: link.url };
|
|
168
|
+
}
|
|
169
|
+
async getPayment(externalId) {
|
|
170
|
+
const p = await this.call('GET', `/payments/${encodeURIComponent(externalId)}`);
|
|
171
|
+
return normalizeAsaasPayment(p);
|
|
172
|
+
}
|
|
173
|
+
/** Autenticidade — SEMPRE antes de `parseWebhookEvent` (RFC §7, passo separado). */
|
|
174
|
+
verifyWebhook(headers, _rawBody) {
|
|
175
|
+
void _rawBody;
|
|
176
|
+
if (!this.webhookSecret)
|
|
177
|
+
return false; // sem token configurado → nunca confia no evento
|
|
178
|
+
const received = headers['asaas-access-token'] ?? headers['Asaas-Access-Token'] ?? '';
|
|
179
|
+
return typeof received === 'string' && received.length > 0 && safeEqual(received, this.webhookSecret);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Reescrito a partir do mapeamento real e ja validado em producao do Golden Project
|
|
183
|
+
* (`dental-platform-engine/gateway/asaas-map.ts`, RFC §10) — a versao anterior
|
|
184
|
+
* zerava `paymentLinkId`/`externalReference`/`externalCustomerId` (nunca extraia do
|
|
185
|
+
* payload real), o que quebraria a atribuicao de tenant (`resolveContext`) de
|
|
186
|
+
* qualquer consumidor que dependesse desses campos. Tambem nao tratava eventos
|
|
187
|
+
* `kind: 'subscription'`, so `kind: 'invoice'`.
|
|
188
|
+
*/
|
|
189
|
+
parseWebhookEvent(payload) {
|
|
190
|
+
const p = payload;
|
|
191
|
+
if (!p || typeof p !== 'object' || !p.event)
|
|
192
|
+
return null;
|
|
193
|
+
const eventType = p.event;
|
|
194
|
+
const paymentId = p.payment?.['id'];
|
|
195
|
+
if (typeof paymentId === 'string') {
|
|
196
|
+
// ASAAS envia o objeto `payment` completo no webhook (mesmo shape de GET /payments/{id}) —
|
|
197
|
+
// reusa o mesmo mapeador do gateway, sem duplicar a normalizacao (RFC §6).
|
|
198
|
+
const invoice = normalizeAsaasPayment(p.payment);
|
|
199
|
+
const externalEventId = p.id ?? `${eventType}:${paymentId}:${p.dateCreated ?? ''}`;
|
|
200
|
+
return {
|
|
201
|
+
externalEventId,
|
|
202
|
+
eventType,
|
|
203
|
+
kind: 'invoice',
|
|
204
|
+
invoice,
|
|
205
|
+
externalCustomerId: p.payment['customer'] ?? null,
|
|
206
|
+
externalReference: p.payment['externalReference'] ?? null,
|
|
207
|
+
paymentLinkId: p.payment['paymentLink'] ?? null,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
if (p.subscription?.id) {
|
|
211
|
+
const externalEventId = p.id ?? `${eventType}:${p.subscription.id}:${p.dateCreated ?? ''}`;
|
|
212
|
+
return {
|
|
213
|
+
externalEventId,
|
|
214
|
+
eventType,
|
|
215
|
+
kind: 'subscription',
|
|
216
|
+
subscription: {
|
|
217
|
+
externalId: p.subscription.id,
|
|
218
|
+
status: normalizeAsaasSubscriptionStatus(p.subscription.status),
|
|
219
|
+
},
|
|
220
|
+
externalCustomerId: p.subscription.customer ?? null,
|
|
221
|
+
externalReference: p.subscription.externalReference ?? null,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
// Evento reconhecido mas sem recurso acionavel → 'unknown' (ainda assim deduplicavel/logavel).
|
|
225
|
+
return {
|
|
226
|
+
externalEventId: p.id ?? `${eventType}:${p.dateCreated ?? ''}`,
|
|
227
|
+
eventType,
|
|
228
|
+
kind: 'unknown',
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
exports.AsaasSubscriptionProvider = AsaasSubscriptionProvider;
|
|
233
|
+
//# sourceMappingURL=asaas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/asaas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DisabledSubscriptionProvider = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Provider `disabled` — estado de primeira classe (RFC §7): sem apiKey
|
|
6
|
+
* configurada, o registry resolve para este stub. NUNCA toca a rede, nunca
|
|
7
|
+
* cobra. Preserva o comportamento de dry-run que o `dental-platform-engine`
|
|
8
|
+
* ja usa em producao hoje (RFC §3).
|
|
9
|
+
*
|
|
10
|
+
* `name` e injetavel (default `'disabled'`) para preservar qual provider FOI
|
|
11
|
+
* PEDIDO mesmo sem chave configurada (ex.: `resolveSubscriptionBillingProvider('asaas', {})`
|
|
12
|
+
* → `name: 'asaas'`) — o Golden Project (`dental`) grava `provider.name` em registros
|
|
13
|
+
* de DB (`CheckoutSession`, `BillingCustomer` etc.) e precisa do nome pedido, nao do
|
|
14
|
+
* literal `'disabled'`, para manter consistencia quando a chave for configurada depois.
|
|
15
|
+
*/
|
|
16
|
+
class DisabledSubscriptionProvider {
|
|
17
|
+
name;
|
|
18
|
+
mode = 'disabled';
|
|
19
|
+
constructor(name = 'disabled') {
|
|
20
|
+
this.name = name;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Lanca erro deliberadamente (nao devolve stub) — contrato ja validado e testado no
|
|
24
|
+
* Golden Project (`dental-platform-engine`, RFC §10): `ensureCustomer` so e chamado
|
|
25
|
+
* apos o chamador checar `mode !== 'disabled'`; chegar aqui e um bug de chamada, e
|
|
26
|
+
* falhar alto e melhor do que persistir um `externalId` fake que parece real.
|
|
27
|
+
*/
|
|
28
|
+
async ensureCustomer(_input) {
|
|
29
|
+
void _input;
|
|
30
|
+
throw new Error('Gateway de pagamento nao configurado (modo desabilitado).');
|
|
31
|
+
}
|
|
32
|
+
async createCheckout(_input) {
|
|
33
|
+
return { externalId: null, url: null };
|
|
34
|
+
}
|
|
35
|
+
async getPayment(_externalId) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
verifyWebhook(_headers, _rawBody) {
|
|
39
|
+
return false; // nenhum webhook e confiavel quando desabilitado — nao ha token para validar
|
|
40
|
+
}
|
|
41
|
+
parseWebhookEvent(_payload) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.DisabledSubscriptionProvider = DisabledSubscriptionProvider;
|
|
46
|
+
//# sourceMappingURL=disabled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disabled.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/disabled.ts"],"names":[],"mappings":";;;AAWA;;;;;;;;;;;GAWG;AACH,MAAa,4BAA4B;IAC9B,IAAI,CAAS;IACb,IAAI,GAAG,UAAmB,CAAC;IAEpC,YAAY,IAAI,GAAG,UAAU;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,KAAK,MAAM,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,WAAmB;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,QAAwB,EAAE,QAAgB;QACtD,OAAO,KAAK,CAAC,CAAC,6EAA6E;IAC7F,CAAC;IAED,iBAAiB,CAAC,QAAiB;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAlCD,oEAkCC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveSubscriptionBillingProvider = resolveSubscriptionBillingProvider;
|
|
4
|
+
const shared_1 = require("@baruk/shared");
|
|
5
|
+
const asaas_js_1 = require("./asaas.js");
|
|
6
|
+
const disabled_js_1 = require("./disabled.js");
|
|
7
|
+
const FACTORIES = {
|
|
8
|
+
asaas: (config) => new asaas_js_1.AsaasSubscriptionProvider(config),
|
|
9
|
+
disabled: () => new disabled_js_1.DisabledSubscriptionProvider(),
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Resolve o Provider por nome (RFC §7) — nenhum outro modulo importa
|
|
13
|
+
* `provider/asaas.ts` diretamente. Sem `apiKey` configurada, resolve para
|
|
14
|
+
* `disabled` automaticamente, independente do nome pedido — nunca cobra por
|
|
15
|
+
* falta de configuracao (mesmo padrao best-effort de `cap.communication.transactional-email`).
|
|
16
|
+
*/
|
|
17
|
+
function resolveSubscriptionBillingProvider(name, config) {
|
|
18
|
+
if (!config.apiKey || config.mode === 'disabled') {
|
|
19
|
+
// Preserva o nome pedido mesmo desabilitado (ver `disabled.ts`) — consumidores que
|
|
20
|
+
// gravam `provider.name` em DB precisam do nome configurado, nao do literal `'disabled'`.
|
|
21
|
+
return new disabled_js_1.DisabledSubscriptionProvider(name);
|
|
22
|
+
}
|
|
23
|
+
const factory = FACTORIES[name];
|
|
24
|
+
if (!factory) {
|
|
25
|
+
throw new shared_1.ValidationError(`Provider de pagamento desconhecido: "${name}".`);
|
|
26
|
+
}
|
|
27
|
+
return factory(config);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/subscription-billing/provider/registry.ts"],"names":[],"mappings":";;AAkBA,gFAWC;AA7BD,0CAAgD;AAEhD,yCAAuD;AACvD,+CAA6D;AAI7D,MAAM,SAAS,GAAgD;IAC7D,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,oCAAyB,CAAC,MAAM,CAAC;IACxD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,0CAA4B,EAAE;CACnD,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,kCAAkC,CAAC,IAAY,EAAE,MAAkC;IACjG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjD,mFAAmF;QACnF,0FAA0F;QAC1F,OAAO,IAAI,0CAA4B,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,wBAAe,CAAC,wCAAwC,IAAI,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}
|