@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,121 @@
|
|
|
1
|
+
import { AppError } from '@baruk/shared';
|
|
2
|
+
/**
|
|
3
|
+
* Adapter Asaas — implementação REAL do Provider Pattern (não um mock). Mapeia os
|
|
4
|
+
* DTOs agnósticos do Billing Engine para o formato da API Asaas e vice-versa. A
|
|
5
|
+
* apiKey NUNCA é hardcoded: vem do Vault via `ProviderConfig`. `fetchImpl` é
|
|
6
|
+
* injetável, o que permite testar o mapeamento sem tocar a rede.
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANTE: nenhum outro arquivo do Core importa este adapter diretamente — o
|
|
9
|
+
* acesso é sempre via `resolveBillingProvider('asaas', config)`. Assim, trocar
|
|
10
|
+
* Asaas por Stripe é trocar a string registrada, sem tocar em regra de negócio.
|
|
11
|
+
*/
|
|
12
|
+
const BILLING_TYPE = {
|
|
13
|
+
pix: 'PIX',
|
|
14
|
+
boleto: 'BOLETO',
|
|
15
|
+
card: 'CREDIT_CARD',
|
|
16
|
+
manual: 'UNDEFINED',
|
|
17
|
+
};
|
|
18
|
+
class AsaasError extends AppError {
|
|
19
|
+
constructor(message, status = 502) {
|
|
20
|
+
super(`Asaas: ${message}`, { status, code: 'billing_provider_error' });
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class AsaasProvider {
|
|
24
|
+
key = 'asaas';
|
|
25
|
+
apiKey;
|
|
26
|
+
baseUrl;
|
|
27
|
+
fetchImpl;
|
|
28
|
+
constructor(config) {
|
|
29
|
+
if (!config.apiKey)
|
|
30
|
+
throw new AsaasError('apiKey ausente (configure no Vault).', 500);
|
|
31
|
+
this.apiKey = config.apiKey;
|
|
32
|
+
this.baseUrl = (config.baseUrl ?? 'https://api.asaas.com/v3').replace(/\/$/, '');
|
|
33
|
+
this.fetchImpl = config.fetchImpl ?? fetch;
|
|
34
|
+
}
|
|
35
|
+
async call(path, method, body) {
|
|
36
|
+
const res = await this.fetchImpl(`${this.baseUrl}${path}`, {
|
|
37
|
+
method,
|
|
38
|
+
headers: { 'content-type': 'application/json', access_token: this.apiKey },
|
|
39
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
40
|
+
});
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
const text = await res.text().catch(() => '');
|
|
43
|
+
throw new AsaasError(`HTTP ${res.status} em ${method} ${path} — ${text.slice(0, 200)}`);
|
|
44
|
+
}
|
|
45
|
+
return (await res.json());
|
|
46
|
+
}
|
|
47
|
+
async createCharge(req) {
|
|
48
|
+
// Asaas exige um customer; aqui assumimos que o id do cliente Asaas veio no
|
|
49
|
+
// metadata (provisionamento fora do escopo). O mapeamento demonstra o contrato.
|
|
50
|
+
const payload = {
|
|
51
|
+
billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
|
|
52
|
+
value: req.amount,
|
|
53
|
+
dueDate: req.dueDate,
|
|
54
|
+
description: req.description ?? undefined,
|
|
55
|
+
externalReference: req.referenceId,
|
|
56
|
+
};
|
|
57
|
+
const res = await this.call('/payments', 'POST', payload);
|
|
58
|
+
return {
|
|
59
|
+
externalId: res.id,
|
|
60
|
+
status: mapAsaasStatus(res.status),
|
|
61
|
+
payment: { boletoUrl: res.bankSlipUrl, invoiceUrl: res.invoiceUrl },
|
|
62
|
+
raw: res,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
async cancelCharge(externalId) {
|
|
66
|
+
await this.call(`/payments/${externalId}`, 'DELETE');
|
|
67
|
+
}
|
|
68
|
+
async createSubscription(req) {
|
|
69
|
+
const cycle = { monthly: 'MONTHLY', quarterly: 'QUARTERLY', yearly: 'YEARLY' };
|
|
70
|
+
const res = await this.call('/subscriptions', 'POST', {
|
|
71
|
+
billingType: BILLING_TYPE[req.method] ?? 'UNDEFINED',
|
|
72
|
+
value: req.amount,
|
|
73
|
+
cycle: cycle[req.periodicity],
|
|
74
|
+
nextDueDate: req.nextDueDate,
|
|
75
|
+
description: req.description ?? undefined,
|
|
76
|
+
externalReference: req.referenceId,
|
|
77
|
+
});
|
|
78
|
+
return {
|
|
79
|
+
externalId: res.id,
|
|
80
|
+
status: res.status === 'ACTIVE' ? 'active' : res.status === 'PAUSED' ? 'paused' : 'canceled',
|
|
81
|
+
nextChargeOn: res.nextDueDate ?? null,
|
|
82
|
+
raw: res,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
async cancelSubscription(externalId) {
|
|
86
|
+
await this.call(`/subscriptions/${externalId}`, 'DELETE');
|
|
87
|
+
}
|
|
88
|
+
parseWebhook(payload) {
|
|
89
|
+
const p = payload;
|
|
90
|
+
const externalId = p.payment?.id ?? null;
|
|
91
|
+
switch (p.event) {
|
|
92
|
+
case 'PAYMENT_RECEIVED':
|
|
93
|
+
case 'PAYMENT_CONFIRMED':
|
|
94
|
+
return { type: 'charge.paid', externalId, paidAt: p.payment?.paymentDate ?? null, raw: payload };
|
|
95
|
+
case 'PAYMENT_OVERDUE':
|
|
96
|
+
return { type: 'charge.overdue', externalId, raw: payload };
|
|
97
|
+
case 'PAYMENT_DELETED':
|
|
98
|
+
return { type: 'charge.canceled', externalId, raw: payload };
|
|
99
|
+
case 'PAYMENT_REFUNDED':
|
|
100
|
+
return { type: 'charge.refunded', externalId, raw: payload };
|
|
101
|
+
default:
|
|
102
|
+
return { type: 'unknown', externalId, raw: payload };
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function mapAsaasStatus(status) {
|
|
107
|
+
switch (status) {
|
|
108
|
+
case 'RECEIVED':
|
|
109
|
+
case 'CONFIRMED':
|
|
110
|
+
return 'paid';
|
|
111
|
+
case 'OVERDUE':
|
|
112
|
+
return 'overdue';
|
|
113
|
+
case 'REFUNDED':
|
|
114
|
+
return 'refunded';
|
|
115
|
+
case 'DELETED':
|
|
116
|
+
return 'canceled';
|
|
117
|
+
default:
|
|
118
|
+
return 'pending';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=asaas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asaas.js","sourceRoot":"","sources":["../../../src/billing/provider/asaas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BillingProvider, ChargeRequest, ChargeResult, WebhookEvent } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Provider padrão — SEM gateway externo. As cobranças são controladas apenas
|
|
4
|
+
* internamente (o escritório gera PIX/boleto por fora e concilia manualmente).
|
|
5
|
+
* É o default seguro quando o tenant ainda não conectou um gateway, e o baseline
|
|
6
|
+
* para os testes: prova que o Billing Engine funciona sem NENHUM provider real.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ManualProvider implements BillingProvider {
|
|
9
|
+
readonly key = "manual";
|
|
10
|
+
createCharge(req: ChargeRequest): Promise<ChargeResult>;
|
|
11
|
+
cancelCharge(): Promise<void>;
|
|
12
|
+
parseWebhook(): WebhookEvent;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=manual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/manual.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7F;;;;;GAKG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,GAAG,YAAY;IAElB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IASvD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,YAAY,IAAI,YAAY;CAG7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider padrão — SEM gateway externo. As cobranças são controladas apenas
|
|
3
|
+
* internamente (o escritório gera PIX/boleto por fora e concilia manualmente).
|
|
4
|
+
* É o default seguro quando o tenant ainda não conectou um gateway, e o baseline
|
|
5
|
+
* para os testes: prova que o Billing Engine funciona sem NENHUM provider real.
|
|
6
|
+
*/
|
|
7
|
+
export class ManualProvider {
|
|
8
|
+
key = 'manual';
|
|
9
|
+
async createCharge(req) {
|
|
10
|
+
// Nada é enviado para fora. A cobrança nasce 'pending' e é conciliada à mão.
|
|
11
|
+
return {
|
|
12
|
+
externalId: null,
|
|
13
|
+
status: 'pending',
|
|
14
|
+
payment: req.method === 'pix' ? { pixPayload: undefined } : undefined,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async cancelCharge() {
|
|
18
|
+
// No-op — cancelamento é apenas mudança de status interno.
|
|
19
|
+
}
|
|
20
|
+
parseWebhook() {
|
|
21
|
+
return { type: 'unknown', externalId: null };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=manual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual.js","sourceRoot":"","sources":["../../../src/billing/provider/manual.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IAChB,GAAG,GAAG,QAAQ,CAAC;IAExB,KAAK,CAAC,YAAY,CAAC,GAAkB;QACnC,6EAA6E;QAC7E,OAAO;YACL,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;SACtE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,2DAA2D;IAC7D,CAAC;IAED,YAAY;QACV,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { BillingProvider, ProviderConfig } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry de providers de billing. Um `factory` por chave. Adicionar um novo
|
|
4
|
+
* gateway = registrar aqui — NENHUM outro arquivo do Core precisa mudar. Esta é
|
|
5
|
+
* a única fronteira onde o Core "conhece" nomes de gateways; a partir da
|
|
6
|
+
* interface `BillingProvider`, tudo é agnóstico.
|
|
7
|
+
*/
|
|
8
|
+
export type ProviderFactory = (config: ProviderConfig) => BillingProvider;
|
|
9
|
+
export declare function registerBillingProvider(key: string, factory: ProviderFactory): void;
|
|
10
|
+
export declare function availableProviders(): string[];
|
|
11
|
+
export declare function resolveBillingProvider(key: string, config?: ProviderConfig): BillingProvider;
|
|
12
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIlE;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,eAAe,CAAC;AAQ1E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAEnF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,cAAmB,GAAG,eAAe,CAQhG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ValidationError } from '@baruk/shared';
|
|
2
|
+
import { ManualProvider } from './manual.js';
|
|
3
|
+
import { AsaasProvider } from './asaas.js';
|
|
4
|
+
const REGISTRY = new Map([
|
|
5
|
+
['manual', () => new ManualProvider()],
|
|
6
|
+
['asaas', (config) => new AsaasProvider(config)],
|
|
7
|
+
// Futuro (mesma assinatura): stripe, efi, iugu, mercadopago, inter, openfinance.
|
|
8
|
+
]);
|
|
9
|
+
export function registerBillingProvider(key, factory) {
|
|
10
|
+
REGISTRY.set(key, factory);
|
|
11
|
+
}
|
|
12
|
+
export function availableProviders() {
|
|
13
|
+
return [...REGISTRY.keys()];
|
|
14
|
+
}
|
|
15
|
+
export function resolveBillingProvider(key, config = {}) {
|
|
16
|
+
const factory = REGISTRY.get(key);
|
|
17
|
+
if (!factory) {
|
|
18
|
+
throw new ValidationError(`Provider de billing desconhecido: "${key}". Disponíveis: ${availableProviders().join(', ')}.`);
|
|
19
|
+
}
|
|
20
|
+
return factory(config);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/billing/provider/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA0B;IAChD,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;IACtC,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,iFAAiF;CAClF,CAAC,CAAC;AAEH,MAAM,UAAU,uBAAuB,CAAC,GAAW,EAAE,OAAwB;IAC3E,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW,EAAE,SAAyB,EAAE;IAC7E,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,sCAAsC,GAAG,mBAAmB,kBAAkB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAC/F,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Pattern do Billing Engine. O Core (e todo módulo de negócio) fala
|
|
3
|
+
* SOMENTE com esta interface — nunca com a API de um gateway específico. Adapters
|
|
4
|
+
* concretos (Asaas, Stripe, Efí, Iugu, Mercado Pago, Inter, Open Finance) vivem
|
|
5
|
+
* em arquivos-irmãos e são resolvidos pelo `registry`. Trocar de gateway = trocar
|
|
6
|
+
* o adapter registrado, sem tocar em nenhuma regra de negócio.
|
|
7
|
+
*/
|
|
8
|
+
export type BillingMethod = 'pix' | 'boleto' | 'card' | 'manual';
|
|
9
|
+
export interface ChargeRequest {
|
|
10
|
+
/** Id interno da cobrança (idempotência ponta-a-ponta). */
|
|
11
|
+
referenceId: string;
|
|
12
|
+
amount: number;
|
|
13
|
+
method: BillingMethod;
|
|
14
|
+
dueDate?: string | null;
|
|
15
|
+
description?: string | null;
|
|
16
|
+
customer: {
|
|
17
|
+
name: string;
|
|
18
|
+
documentNumber?: string | null;
|
|
19
|
+
email?: string | null;
|
|
20
|
+
phone?: string | null;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface ChargeResult {
|
|
24
|
+
/** Id da cobrança no gateway (nulo para provider 'manual'). */
|
|
25
|
+
externalId: string | null;
|
|
26
|
+
status: 'pending' | 'sent' | 'paid' | 'overdue' | 'canceled' | 'refunded';
|
|
27
|
+
/** Dados não sensíveis para o cliente pagar (PIX copia-e-cola, url do boleto…). */
|
|
28
|
+
payment?: {
|
|
29
|
+
pixPayload?: string;
|
|
30
|
+
pixQrCodeImage?: string;
|
|
31
|
+
boletoUrl?: string;
|
|
32
|
+
invoiceUrl?: string;
|
|
33
|
+
};
|
|
34
|
+
raw?: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface SubscriptionRequest {
|
|
37
|
+
referenceId: string;
|
|
38
|
+
amount: number;
|
|
39
|
+
method: BillingMethod;
|
|
40
|
+
periodicity: 'monthly' | 'quarterly' | 'yearly';
|
|
41
|
+
nextDueDate?: string | null;
|
|
42
|
+
description?: string | null;
|
|
43
|
+
customer: ChargeRequest['customer'];
|
|
44
|
+
}
|
|
45
|
+
export interface SubscriptionResult {
|
|
46
|
+
externalId: string | null;
|
|
47
|
+
status: 'active' | 'paused' | 'canceled';
|
|
48
|
+
nextChargeOn?: string | null;
|
|
49
|
+
raw?: unknown;
|
|
50
|
+
}
|
|
51
|
+
/** Evento normalizado a partir de um webhook do gateway. */
|
|
52
|
+
export interface WebhookEvent {
|
|
53
|
+
type: 'charge.paid' | 'charge.overdue' | 'charge.canceled' | 'charge.refunded' | 'unknown';
|
|
54
|
+
externalId: string | null;
|
|
55
|
+
paidAt?: string | null;
|
|
56
|
+
raw?: unknown;
|
|
57
|
+
}
|
|
58
|
+
export interface BillingProvider {
|
|
59
|
+
/** Identificador estável do adapter — casa com `charge.provider`. */
|
|
60
|
+
readonly key: string;
|
|
61
|
+
createCharge(req: ChargeRequest): Promise<ChargeResult>;
|
|
62
|
+
cancelCharge(externalId: string): Promise<void>;
|
|
63
|
+
createSubscription?(req: SubscriptionRequest): Promise<SubscriptionResult>;
|
|
64
|
+
cancelSubscription?(externalId: string): Promise<void>;
|
|
65
|
+
/** Traduz o corpo bruto de um webhook para o evento normalizado. */
|
|
66
|
+
parseWebhook(payload: unknown, headers?: Record<string, string>): WebhookEvent;
|
|
67
|
+
}
|
|
68
|
+
/** Config passada ao construir um adapter (segredos vêm do Vault, nunca hardcoded). */
|
|
69
|
+
export interface ProviderConfig {
|
|
70
|
+
apiKey?: string;
|
|
71
|
+
baseUrl?: string;
|
|
72
|
+
webhookSecret?: string;
|
|
73
|
+
/** Injeção de fetch para testes; default = global fetch. */
|
|
74
|
+
fetchImpl?: typeof fetch;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/billing/provider/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Pattern do Billing Engine. O Core (e todo módulo de negócio) fala
|
|
3
|
+
* SOMENTE com esta interface — nunca com a API de um gateway específico. Adapters
|
|
4
|
+
* concretos (Asaas, Stripe, Efí, Iugu, Mercado Pago, Inter, Open Finance) vivem
|
|
5
|
+
* em arquivos-irmãos e são resolvidos pelo `registry`. Trocar de gateway = trocar
|
|
6
|
+
* o adapter registrado, sem tocar em nenhuma regra de negócio.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/billing/provider/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { BillingMethod } from './provider/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Contratos de Accounts Receivable (AR) — Merchant Billing Core, M0
|
|
4
|
+
* (RFC-CAPABILITY-MERCHANT-BILLING-CORE-001 §4/§20). Apenas TIPOS nesta fase —
|
|
5
|
+
* "M0: contratos e schema". Nenhuma função de domínio ou repositório ainda:
|
|
6
|
+
* a máquina de estados, a geração por competência e as queries são M1
|
|
7
|
+
* ("Merchant Billing Core"), fora do escopo autorizado nesta sessão.
|
|
8
|
+
*
|
|
9
|
+
* Separação dura (RFC §4, nunca colapsar): serviço executado ≠ conta a
|
|
10
|
+
* receber (Receivable) ≠ instrumento de cobrança (Charge, já existe em
|
|
11
|
+
* repository.ts) ≠ pagamento (Payment) ≠ liquidação (Settlement) ≠
|
|
12
|
+
* conciliação (Reconciliation). Boleto/Pix/cartão são o instrumento —
|
|
13
|
+
* NUNCA a própria dívida.
|
|
14
|
+
*/
|
|
15
|
+
export type ReceivableStatus = 'open' | 'partially_paid' | 'paid' | 'overdue' | 'canceled' | 'renegotiated' | 'written_off';
|
|
16
|
+
export interface ReceivableRecord {
|
|
17
|
+
id: string;
|
|
18
|
+
clientId: string;
|
|
19
|
+
/** Honorário recorrente que originou esta Receivable (null = avulsa). */
|
|
20
|
+
feeAgreementId: string | null;
|
|
21
|
+
/** Competência (YYYY-MM) — null para cobrança avulsa sem fechamento. */
|
|
22
|
+
competence: string | null;
|
|
23
|
+
amount: number;
|
|
24
|
+
status: ReceivableStatus;
|
|
25
|
+
dueDate: string | null;
|
|
26
|
+
issuedAt: string;
|
|
27
|
+
/** Se esta Receivable nasceu de uma renegociação, aponta para a original. */
|
|
28
|
+
renegotiatedFromId: string | null;
|
|
29
|
+
createdAt: string;
|
|
30
|
+
}
|
|
31
|
+
/** Item que compõe a Receivable — preserva a rastreabilidade ao serviço/trabalho de origem. */
|
|
32
|
+
export interface ReceivableItemRecord {
|
|
33
|
+
id: string;
|
|
34
|
+
receivableId: string;
|
|
35
|
+
description: string;
|
|
36
|
+
amount: number;
|
|
37
|
+
/**
|
|
38
|
+
* Referência ao serviço/trabalho de origem (ex.: caseId do dental). `ServiceItem`
|
|
39
|
+
* não é modelado neste M0 (RFC §3 — preparado pelo contrato, implementado depois);
|
|
40
|
+
* este campo é a costura que evita migração de forma quando ele chegar.
|
|
41
|
+
*/
|
|
42
|
+
serviceItemRef: string | null;
|
|
43
|
+
createdAt: string;
|
|
44
|
+
}
|
|
45
|
+
export type PaymentStatus = 'detected' | 'confirmed' | 'refunded';
|
|
46
|
+
export interface PaymentRecord {
|
|
47
|
+
id: string;
|
|
48
|
+
receivableId: string;
|
|
49
|
+
/** Instrumento que originou o pagamento (null = baixa manual sem Charge). */
|
|
50
|
+
chargeId: string | null;
|
|
51
|
+
amount: number;
|
|
52
|
+
method: BillingMethod;
|
|
53
|
+
status: PaymentStatus;
|
|
54
|
+
paidAt: string;
|
|
55
|
+
createdAt: string;
|
|
56
|
+
}
|
|
57
|
+
export interface SettlementRecord {
|
|
58
|
+
id: string;
|
|
59
|
+
paymentId: string;
|
|
60
|
+
provider: string;
|
|
61
|
+
externalId: string | null;
|
|
62
|
+
/** Valor líquido após taxas do provider. */
|
|
63
|
+
netAmount: number;
|
|
64
|
+
settledAt: string;
|
|
65
|
+
createdAt: string;
|
|
66
|
+
}
|
|
67
|
+
export type ReconciliationStatus = 'matched' | 'mismatched' | 'pending';
|
|
68
|
+
export interface ReconciliationRecord {
|
|
69
|
+
id: string;
|
|
70
|
+
chargeId: string | null;
|
|
71
|
+
receivableId: string | null;
|
|
72
|
+
provider: string;
|
|
73
|
+
externalId: string | null;
|
|
74
|
+
status: ReconciliationStatus;
|
|
75
|
+
detail: Record<string, unknown>;
|
|
76
|
+
createdAt: string;
|
|
77
|
+
}
|
|
78
|
+
export type ProviderAccountEnvironment = 'sandbox' | 'live';
|
|
79
|
+
export type ProviderAccountStatus = 'active' | 'disabled' | 'pending_validation' | 'revoked';
|
|
80
|
+
export interface PaymentProviderAccountRecord {
|
|
81
|
+
id: string;
|
|
82
|
+
provider: string;
|
|
83
|
+
/** Recebedor/id da conta no provider (não é a credencial). */
|
|
84
|
+
accountReference: string | null;
|
|
85
|
+
environment: ProviderAccountEnvironment;
|
|
86
|
+
supportedCapabilities: BillingMethod[];
|
|
87
|
+
status: ProviderAccountStatus;
|
|
88
|
+
/** Referência ao Vault (`ctx.devplatform.vault`) — a credencial NUNCA vive aqui. */
|
|
89
|
+
credentialRef: string | null;
|
|
90
|
+
configVersion: number;
|
|
91
|
+
lastValidatedAt: string | null;
|
|
92
|
+
rotatedAt: string | null;
|
|
93
|
+
revokedAt: string | null;
|
|
94
|
+
createdAt: string;
|
|
95
|
+
}
|
|
96
|
+
export type WebhookEventStatus = 'received' | 'processed' | 'ignored' | 'failed';
|
|
97
|
+
export interface WebhookEventRecord {
|
|
98
|
+
id: string;
|
|
99
|
+
/** Nulo até o tenant ser resolvido (resolveContext) — o webhook chega antes disso. */
|
|
100
|
+
tenantId: string | null;
|
|
101
|
+
provider: string;
|
|
102
|
+
externalEventId: string;
|
|
103
|
+
eventType: string;
|
|
104
|
+
status: WebhookEventStatus;
|
|
105
|
+
processedAt: string | null;
|
|
106
|
+
createdAt: string;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=receivable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receivable.d.ts","sourceRoot":"","sources":["../../src/billing/receivable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receivable.js","sourceRoot":"","sources":["../../src/billing/receivable.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { Tx } from '../db/client.js';
|
|
2
|
+
import type { BillingMethod } from './provider/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Repositório do Billing Engine — honorários, cobranças e assinaturas.
|
|
5
|
+
* Tenant-scoped por RLS. Persiste apenas o identificador do `provider` e o
|
|
6
|
+
* `external_id` do gateway; a comunicação com o gateway é feita pelos adapters
|
|
7
|
+
* (Provider Pattern), nunca aqui.
|
|
8
|
+
*/
|
|
9
|
+
export type Periodicity = 'monthly' | 'quarterly' | 'yearly' | 'one_time';
|
|
10
|
+
export type FeeStatus = 'active' | 'suspended' | 'canceled';
|
|
11
|
+
export interface FeeAgreementRecord {
|
|
12
|
+
id: string;
|
|
13
|
+
clientId: string;
|
|
14
|
+
description: string;
|
|
15
|
+
amount: number;
|
|
16
|
+
periodicity: Periodicity;
|
|
17
|
+
dueDay: number | null;
|
|
18
|
+
billingMethod: BillingMethod;
|
|
19
|
+
discount: number;
|
|
20
|
+
finePercent: number;
|
|
21
|
+
interestPercent: number;
|
|
22
|
+
status: FeeStatus;
|
|
23
|
+
startsOn: string | null;
|
|
24
|
+
endsOn: string | null;
|
|
25
|
+
createdAt: string;
|
|
26
|
+
}
|
|
27
|
+
export interface CreateFeeInput {
|
|
28
|
+
clientId: string;
|
|
29
|
+
amount: number;
|
|
30
|
+
description?: string;
|
|
31
|
+
periodicity?: Periodicity;
|
|
32
|
+
dueDay?: number | null;
|
|
33
|
+
billingMethod?: BillingMethod;
|
|
34
|
+
discount?: number;
|
|
35
|
+
finePercent?: number;
|
|
36
|
+
interestPercent?: number;
|
|
37
|
+
startsOn?: string | null;
|
|
38
|
+
createdBy?: string | null;
|
|
39
|
+
}
|
|
40
|
+
export declare function createFeeAgreement(tx: Tx, input: CreateFeeInput): Promise<FeeAgreementRecord>;
|
|
41
|
+
export declare function listFeeAgreements(tx: Tx, clientId?: string): Promise<FeeAgreementRecord[]>;
|
|
42
|
+
export declare function setFeeStatus(tx: Tx, id: string, status: FeeStatus): Promise<number>;
|
|
43
|
+
export type ChargeStatus = 'pending' | 'sent' | 'paid' | 'overdue' | 'canceled' | 'refunded';
|
|
44
|
+
export interface ChargeRecord {
|
|
45
|
+
id: string;
|
|
46
|
+
clientId: string;
|
|
47
|
+
feeAgreementId: string | null;
|
|
48
|
+
provider: string;
|
|
49
|
+
externalId: string | null;
|
|
50
|
+
method: BillingMethod;
|
|
51
|
+
amount: number;
|
|
52
|
+
status: ChargeStatus;
|
|
53
|
+
description: string | null;
|
|
54
|
+
dueDate: string | null;
|
|
55
|
+
paidAt: string | null;
|
|
56
|
+
metadata: Record<string, unknown>;
|
|
57
|
+
createdAt: string;
|
|
58
|
+
}
|
|
59
|
+
export interface CreateChargeInput {
|
|
60
|
+
clientId: string;
|
|
61
|
+
amount: number;
|
|
62
|
+
method?: BillingMethod;
|
|
63
|
+
provider?: string;
|
|
64
|
+
externalId?: string | null;
|
|
65
|
+
feeAgreementId?: string | null;
|
|
66
|
+
description?: string | null;
|
|
67
|
+
dueDate?: string | null;
|
|
68
|
+
status?: ChargeStatus;
|
|
69
|
+
metadata?: Record<string, unknown>;
|
|
70
|
+
createdBy?: string | null;
|
|
71
|
+
}
|
|
72
|
+
export declare function createCharge(tx: Tx, input: CreateChargeInput): Promise<ChargeRecord>;
|
|
73
|
+
export interface ListChargesFilter {
|
|
74
|
+
clientId?: string;
|
|
75
|
+
status?: ChargeStatus;
|
|
76
|
+
limit?: number;
|
|
77
|
+
offset?: number;
|
|
78
|
+
}
|
|
79
|
+
export declare function listCharges(tx: Tx, filter?: ListChargesFilter): Promise<{
|
|
80
|
+
items: ChargeRecord[];
|
|
81
|
+
total: number;
|
|
82
|
+
}>;
|
|
83
|
+
export declare function getCharge(tx: Tx, id: string): Promise<ChargeRecord>;
|
|
84
|
+
export declare function markChargePaid(tx: Tx, id: string, paidAt?: string): Promise<number>;
|
|
85
|
+
/** Reconciliação por webhook: encontra a cobrança pelo (provider, external_id) e marca paga. */
|
|
86
|
+
export declare function markChargePaidByExternal(tx: Tx, provider: string, externalId: string, paidAt?: string): Promise<number>;
|
|
87
|
+
export declare function setChargeStatus(tx: Tx, id: string, status: ChargeStatus): Promise<number>;
|
|
88
|
+
/** KPIs financeiros do dashboard: previsto, recebido e inadimplência. */
|
|
89
|
+
export declare function billingSummary(tx: Tx): Promise<{
|
|
90
|
+
expected: number;
|
|
91
|
+
received: number;
|
|
92
|
+
overdue: number;
|
|
93
|
+
overdueCount: number;
|
|
94
|
+
}>;
|
|
95
|
+
/** Cobranças em aberto vencidas até `today` — usadas pela régua de inadimplência. */
|
|
96
|
+
export declare function listOpenCharges(tx: Tx): Promise<ChargeRecord[]>;
|
|
97
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/billing/repository.ts"],"names":[],"mappings":"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"}
|