@adonis-agora/payments 0.2.0 → 0.4.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 +2375 -0
- package/dist/assets/spa/assets/index-B7rU8eIL.css +2 -0
- package/dist/assets/spa/assets/index-BcM2VH5k.js +10 -0
- package/dist/assets/spa/assets/index-BcM2VH5k.js.map +1 -0
- package/dist/assets/spa/index.html +20 -0
- package/dist/commands/main.d.ts +4 -3
- package/dist/commands/main.d.ts.map +1 -1
- package/dist/commands/main.js +9 -2
- package/dist/commands/main.js.map +1 -1
- package/dist/commands/make_billable.d.ts.map +1 -1
- package/dist/commands/make_billable.js +1 -1
- package/dist/commands/make_billable.js.map +1 -1
- package/dist/commands/make_webhook_handler.d.ts.map +1 -1
- package/dist/commands/make_webhook_handler.js +1 -1
- package/dist/commands/make_webhook_handler.js.map +1 -1
- package/dist/commands/payments_health.d.ts +31 -0
- package/dist/commands/payments_health.d.ts.map +1 -0
- package/dist/commands/payments_health.js +113 -0
- package/dist/commands/payments_health.js.map +1 -0
- package/dist/commands/payments_sync.d.ts +18 -4
- package/dist/commands/payments_sync.d.ts.map +1 -1
- package/dist/commands/payments_sync.js +136 -40
- package/dist/commands/payments_sync.js.map +1 -1
- package/dist/commands/payments_webhook.d.ts.map +1 -1
- package/dist/commands/payments_webhook.js.map +1 -1
- package/dist/configure.d.ts +12 -5
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +18 -5
- package/dist/configure.js.map +1 -1
- package/dist/providers/dashboard_provider.d.ts +97 -0
- package/dist/providers/dashboard_provider.d.ts.map +1 -0
- package/dist/providers/dashboard_provider.js +430 -0
- package/dist/providers/dashboard_provider.js.map +1 -0
- package/dist/providers/payments_client_provider.d.ts +41 -0
- package/dist/providers/payments_client_provider.d.ts.map +1 -0
- package/dist/providers/payments_client_provider.js +95 -0
- package/dist/providers/payments_client_provider.js.map +1 -0
- package/dist/providers/payments_provider.d.ts +35 -0
- package/dist/providers/payments_provider.d.ts.map +1 -1
- package/dist/providers/payments_provider.js +250 -36
- package/dist/providers/payments_provider.js.map +1 -1
- package/dist/src/billing/billing_health.d.ts +85 -0
- package/dist/src/billing/billing_health.d.ts.map +1 -0
- package/dist/src/billing/billing_health.js +155 -0
- package/dist/src/billing/billing_health.js.map +1 -0
- package/dist/src/billing/billing_overview.d.ts +4 -3
- package/dist/src/billing/billing_overview.d.ts.map +1 -1
- package/dist/src/billing/billing_overview.js +14 -5
- package/dist/src/billing/billing_overview.js.map +1 -1
- package/dist/src/billing/billing_store.d.ts +634 -5
- package/dist/src/billing/billing_store.d.ts.map +1 -1
- package/dist/src/billing/billing_store.js +18 -1
- package/dist/src/billing/billing_store.js.map +1 -1
- package/dist/src/billing/index.d.ts +4 -3
- package/dist/src/billing/index.d.ts.map +1 -1
- package/dist/src/billing/index.js +2 -1
- package/dist/src/billing/index.js.map +1 -1
- package/dist/src/billing/list_query.d.ts +16 -0
- package/dist/src/billing/list_query.d.ts.map +1 -0
- package/dist/src/billing/list_query.js +28 -0
- package/dist/src/billing/list_query.js.map +1 -0
- package/dist/src/billing/lucid_billing_store.d.ts +122 -4
- package/dist/src/billing/lucid_billing_store.d.ts.map +1 -1
- package/dist/src/billing/lucid_billing_store.js +811 -13
- package/dist/src/billing/lucid_billing_store.js.map +1 -1
- package/dist/src/billing/mixins/index.d.ts +5 -2
- package/dist/src/billing/mixins/index.d.ts.map +1 -1
- package/dist/src/billing/mixins/index.js +5 -2
- package/dist/src/billing/mixins/index.js.map +1 -1
- package/dist/src/billing/mixins/with_audit_event.d.ts +48 -0
- package/dist/src/billing/mixins/with_audit_event.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_audit_event.js +77 -0
- package/dist/src/billing/mixins/with_audit_event.js.map +1 -0
- package/dist/src/billing/mixins/with_billable.d.ts.map +1 -1
- package/dist/src/billing/mixins/with_customer.d.ts +39 -0
- package/dist/src/billing/mixins/with_customer.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_customer.js +68 -0
- package/dist/src/billing/mixins/with_customer.js.map +1 -0
- package/dist/src/billing/mixins/with_dispute.d.ts +68 -0
- package/dist/src/billing/mixins/with_dispute.d.ts.map +1 -0
- package/dist/src/billing/mixins/with_dispute.js +83 -0
- package/dist/src/billing/mixins/with_dispute.js.map +1 -0
- package/dist/src/billing/mixins/with_payment.d.ts +42 -0
- package/dist/src/billing/mixins/with_payment.d.ts.map +1 -1
- package/dist/src/billing/mixins/with_payment.js +29 -3
- package/dist/src/billing/mixins/with_payment.js.map +1 -1
- package/dist/src/billing/mixins/with_subscription.d.ts +7 -0
- package/dist/src/billing/mixins/with_subscription.d.ts.map +1 -1
- package/dist/src/billing/mixins/with_subscription.js +15 -1
- package/dist/src/billing/mixins/with_subscription.js.map +1 -1
- package/dist/src/billing/mixins/with_usage_event.d.ts +7 -0
- package/dist/src/billing/mixins/with_usage_event.d.ts.map +1 -1
- package/dist/src/billing/mixins/with_usage_event.js +15 -1
- package/dist/src/billing/mixins/with_usage_event.js.map +1 -1
- package/dist/src/billing/mixins/with_webhook_event.d.ts +18 -0
- package/dist/src/billing/mixins/with_webhook_event.d.ts.map +1 -1
- package/dist/src/billing/mixins/with_webhook_event.js +18 -1
- package/dist/src/billing/mixins/with_webhook_event.js.map +1 -1
- package/dist/src/billing/resolve_dispatch.d.ts +22 -0
- package/dist/src/billing/resolve_dispatch.d.ts.map +1 -0
- package/dist/src/billing/resolve_dispatch.js +44 -0
- package/dist/src/billing/resolve_dispatch.js.map +1 -0
- package/dist/src/billing/resolve_store.d.ts +18 -0
- package/dist/src/billing/resolve_store.d.ts.map +1 -0
- package/dist/src/billing/resolve_store.js +35 -0
- package/dist/src/billing/resolve_store.js.map +1 -0
- package/dist/src/billing/schema.d.ts +108 -0
- package/dist/src/billing/schema.d.ts.map +1 -0
- package/dist/src/billing/schema.js +350 -0
- package/dist/src/billing/schema.js.map +1 -0
- package/dist/src/billing/webhook_dispatcher.d.ts +95 -16
- package/dist/src/billing/webhook_dispatcher.d.ts.map +1 -1
- package/dist/src/billing/webhook_dispatcher.js +186 -33
- package/dist/src/billing/webhook_dispatcher.js.map +1 -1
- package/dist/src/billing/webhook_events.d.ts +67 -1
- package/dist/src/billing/webhook_events.d.ts.map +1 -1
- package/dist/src/billing/webhook_events.js +15 -0
- package/dist/src/billing/webhook_events.js.map +1 -1
- package/dist/src/billing/webhook_processor.d.ts.map +1 -1
- package/dist/src/billing/webhook_processor.js +325 -5
- package/dist/src/billing/webhook_processor.js.map +1 -1
- package/dist/src/client/define_config.d.ts +150 -0
- package/dist/src/client/define_config.d.ts.map +1 -0
- package/dist/src/client/define_config.js +98 -0
- package/dist/src/client/define_config.js.map +1 -0
- package/dist/src/client/handlers.d.ts +71 -0
- package/dist/src/client/handlers.d.ts.map +1 -0
- package/dist/src/client/handlers.js +119 -0
- package/dist/src/client/handlers.js.map +1 -0
- package/dist/src/client/index.d.ts +15 -0
- package/dist/src/client/index.d.ts.map +1 -0
- package/dist/src/client/index.js +12 -0
- package/dist/src/client/index.js.map +1 -0
- package/dist/src/client/statuses.d.ts +38 -0
- package/dist/src/client/statuses.d.ts.map +1 -0
- package/dist/src/client/statuses.js +42 -0
- package/dist/src/client/statuses.js.map +1 -0
- package/dist/src/dashboard/actions.d.ts +143 -0
- package/dist/src/dashboard/actions.d.ts.map +1 -0
- package/dist/src/dashboard/actions.js +112 -0
- package/dist/src/dashboard/actions.js.map +1 -0
- package/dist/src/dashboard/auth.d.ts +136 -0
- package/dist/src/dashboard/auth.d.ts.map +1 -0
- package/dist/src/dashboard/auth.js +152 -0
- package/dist/src/dashboard/auth.js.map +1 -0
- package/dist/src/dashboard/define_config.d.ts +80 -0
- package/dist/src/dashboard/define_config.d.ts.map +1 -0
- package/dist/src/dashboard/define_config.js +83 -0
- package/dist/src/dashboard/define_config.js.map +1 -0
- package/dist/src/dashboard/handlers.d.ts +281 -0
- package/dist/src/dashboard/handlers.d.ts.map +1 -0
- package/dist/src/dashboard/handlers.js +960 -0
- package/dist/src/dashboard/handlers.js.map +1 -0
- package/dist/src/dashboard/index.d.ts +17 -0
- package/dist/src/dashboard/index.d.ts.map +1 -0
- package/dist/src/dashboard/index.js +13 -0
- package/dist/src/dashboard/index.js.map +1 -0
- package/dist/src/dashboard/login_page.d.ts +23 -0
- package/dist/src/dashboard/login_page.d.ts.map +1 -0
- package/dist/src/dashboard/login_page.js +170 -0
- package/dist/src/dashboard/login_page.js.map +1 -0
- package/dist/src/dashboard/period.d.ts +31 -0
- package/dist/src/dashboard/period.d.ts.map +1 -0
- package/dist/src/dashboard/period.js +44 -0
- package/dist/src/dashboard/period.js.map +1 -0
- package/dist/src/dashboard/session_cookie.d.ts +42 -0
- package/dist/src/dashboard/session_cookie.d.ts.map +1 -0
- package/dist/src/dashboard/session_cookie.js +97 -0
- package/dist/src/dashboard/session_cookie.js.map +1 -0
- package/dist/src/dashboard/spa.d.ts +24 -0
- package/dist/src/dashboard/spa.d.ts.map +1 -0
- package/dist/src/dashboard/spa.js +52 -0
- package/dist/src/dashboard/spa.js.map +1 -0
- package/dist/src/define_config.d.ts +245 -10
- package/dist/src/define_config.d.ts.map +1 -1
- package/dist/src/define_config.js +97 -1
- package/dist/src/define_config.js.map +1 -1
- package/dist/src/diagnostics.d.ts +287 -7
- package/dist/src/diagnostics.d.ts.map +1 -1
- package/dist/src/diagnostics.js +317 -1
- package/dist/src/diagnostics.js.map +1 -1
- package/dist/src/driver.d.ts +139 -5
- package/dist/src/driver.d.ts.map +1 -1
- package/dist/src/drivers/abacate.d.ts +13 -3
- package/dist/src/drivers/abacate.d.ts.map +1 -1
- package/dist/src/drivers/abacate.js +112 -19
- package/dist/src/drivers/abacate.js.map +1 -1
- package/dist/src/drivers/adyen.d.ts +164 -0
- package/dist/src/drivers/adyen.d.ts.map +1 -0
- package/dist/src/drivers/adyen.js +678 -0
- package/dist/src/drivers/adyen.js.map +1 -0
- package/dist/src/drivers/asaas.d.ts +53 -3
- package/dist/src/drivers/asaas.d.ts.map +1 -1
- package/dist/src/drivers/asaas.js +364 -29
- package/dist/src/drivers/asaas.js.map +1 -1
- package/dist/src/drivers/dodo.d.ts +135 -0
- package/dist/src/drivers/dodo.d.ts.map +1 -0
- package/dist/src/drivers/dodo.js +864 -0
- package/dist/src/drivers/dodo.js.map +1 -0
- package/dist/src/drivers/efi.d.ts +98 -0
- package/dist/src/drivers/efi.d.ts.map +1 -0
- package/dist/src/drivers/efi.js +628 -0
- package/dist/src/drivers/efi.js.map +1 -0
- package/dist/src/drivers/infinitepay.d.ts +156 -0
- package/dist/src/drivers/infinitepay.d.ts.map +1 -0
- package/dist/src/drivers/infinitepay.js +321 -0
- package/dist/src/drivers/infinitepay.js.map +1 -0
- package/dist/src/drivers/lemonsqueezy.d.ts +125 -0
- package/dist/src/drivers/lemonsqueezy.d.ts.map +1 -0
- package/dist/src/drivers/lemonsqueezy.js +632 -0
- package/dist/src/drivers/lemonsqueezy.js.map +1 -0
- package/dist/src/drivers/mercadopago.d.ts +97 -0
- package/dist/src/drivers/mercadopago.d.ts.map +1 -0
- package/dist/src/drivers/mercadopago.js +844 -0
- package/dist/src/drivers/mercadopago.js.map +1 -0
- package/dist/src/drivers/mollie.d.ts +125 -0
- package/dist/src/drivers/mollie.d.ts.map +1 -0
- package/dist/src/drivers/mollie.js +812 -0
- package/dist/src/drivers/mollie.js.map +1 -0
- package/dist/src/drivers/paddle.d.ts +148 -0
- package/dist/src/drivers/paddle.d.ts.map +1 -0
- package/dist/src/drivers/paddle.js +738 -0
- package/dist/src/drivers/paddle.js.map +1 -0
- package/dist/src/drivers/pagarme.d.ts +97 -0
- package/dist/src/drivers/pagarme.d.ts.map +1 -0
- package/dist/src/drivers/pagarme.js +829 -0
- package/dist/src/drivers/pagarme.js.map +1 -0
- package/dist/src/drivers/pagbank.d.ts +57 -0
- package/dist/src/drivers/pagbank.d.ts.map +1 -0
- package/dist/src/drivers/pagbank.js +499 -0
- package/dist/src/drivers/pagbank.js.map +1 -0
- package/dist/src/drivers/paypal.d.ts +120 -0
- package/dist/src/drivers/paypal.d.ts.map +1 -0
- package/dist/src/drivers/paypal.js +891 -0
- package/dist/src/drivers/paypal.js.map +1 -0
- package/dist/src/drivers/polar.d.ts +118 -0
- package/dist/src/drivers/polar.d.ts.map +1 -0
- package/dist/src/drivers/polar.js +604 -0
- package/dist/src/drivers/polar.js.map +1 -0
- package/dist/src/drivers/razorpay.d.ts +103 -0
- package/dist/src/drivers/razorpay.d.ts.map +1 -0
- package/dist/src/drivers/razorpay.js +867 -0
- package/dist/src/drivers/razorpay.js.map +1 -0
- package/dist/src/drivers/shared.d.ts +33 -0
- package/dist/src/drivers/shared.d.ts.map +1 -0
- package/dist/src/drivers/shared.js +37 -0
- package/dist/src/drivers/shared.js.map +1 -0
- package/dist/src/drivers/square.d.ts +133 -0
- package/dist/src/drivers/square.d.ts.map +1 -0
- package/dist/src/drivers/square.js +905 -0
- package/dist/src/drivers/square.js.map +1 -0
- package/dist/src/drivers/stripe.d.ts +41 -4
- package/dist/src/drivers/stripe.d.ts.map +1 -1
- package/dist/src/drivers/stripe.js +823 -26
- package/dist/src/drivers/stripe.js.map +1 -1
- package/dist/src/drivers/woovi.d.ts +11 -4
- package/dist/src/drivers/woovi.d.ts.map +1 -1
- package/dist/src/drivers/woovi.js +162 -29
- package/dist/src/drivers/woovi.js.map +1 -1
- package/dist/src/ensure_customer.d.ts +34 -1
- package/dist/src/ensure_customer.d.ts.map +1 -1
- package/dist/src/ensure_customer.js +29 -4
- package/dist/src/ensure_customer.js.map +1 -1
- package/dist/src/hooks/webhook_handlers.d.ts.map +1 -1
- package/dist/src/hooks/webhook_handlers.js.map +1 -1
- package/dist/src/http.d.ts +37 -3
- package/dist/src/http.d.ts.map +1 -1
- package/dist/src/http.js +69 -5
- package/dist/src/http.js.map +1 -1
- package/dist/src/index.d.ts +54 -26
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +29 -12
- package/dist/src/index.js.map +1 -1
- package/dist/src/invoice/drivers/asaas.d.ts.map +1 -1
- package/dist/src/invoice/drivers/asaas.js.map +1 -1
- package/dist/src/invoice/drivers/enotas.d.ts.map +1 -1
- package/dist/src/invoice/drivers/enotas.js.map +1 -1
- package/dist/src/invoice/drivers/focus.d.ts.map +1 -1
- package/dist/src/invoice/drivers/focus.js.map +1 -1
- package/dist/src/invoice/drivers/plugnotas.d.ts.map +1 -1
- package/dist/src/invoice/drivers/plugnotas.js.map +1 -1
- package/dist/src/invoice/drivers/tecnospeed.d.ts.map +1 -1
- package/dist/src/invoice/drivers/tecnospeed.js.map +1 -1
- package/dist/src/invoice/emit_invoice.d.ts.map +1 -1
- package/dist/src/invoice/emit_invoice.js +31 -11
- package/dist/src/invoice/emit_invoice.js.map +1 -1
- package/dist/src/invoice/invoice_manager.d.ts.map +1 -1
- package/dist/src/money.d.ts +23 -5
- package/dist/src/money.d.ts.map +1 -1
- package/dist/src/money.js +72 -7
- package/dist/src/money.js.map +1 -1
- package/dist/src/payments_manager.d.ts +8 -1
- package/dist/src/payments_manager.d.ts.map +1 -1
- package/dist/src/payments_manager.js +168 -6
- package/dist/src/payments_manager.js.map +1 -1
- package/dist/src/services/main.d.ts +38 -0
- package/dist/src/services/main.d.ts.map +1 -1
- package/dist/src/services/main.js +130 -0
- package/dist/src/services/main.js.map +1 -1
- package/dist/src/telescope/index.d.ts +2 -0
- package/dist/src/telescope/index.d.ts.map +1 -1
- package/dist/src/telescope/index.js +1 -0
- package/dist/src/telescope/index.js.map +1 -1
- package/dist/src/telescope/payments_watcher.d.ts +10 -4
- package/dist/src/telescope/payments_watcher.d.ts.map +1 -1
- package/dist/src/telescope/payments_watcher.js +66 -14
- package/dist/src/telescope/payments_watcher.js.map +1 -1
- package/dist/src/telescope/register.d.ts +62 -0
- package/dist/src/telescope/register.d.ts.map +1 -0
- package/dist/src/telescope/register.js +48 -0
- package/dist/src/telescope/register.js.map +1 -0
- package/dist/src/testing/fake_payments.d.ts +62 -0
- package/dist/src/testing/fake_payments.d.ts.map +1 -0
- package/dist/src/testing/fake_payments.js +82 -0
- package/dist/src/testing/fake_payments.js.map +1 -0
- package/dist/src/testing/fake_payments_driver.d.ts +1 -1
- package/dist/src/testing/fake_payments_driver.d.ts.map +1 -1
- package/dist/src/testing/fake_payments_driver.js.map +1 -1
- package/dist/src/testing/in_memory_billing_store.d.ts +151 -2
- package/dist/src/testing/in_memory_billing_store.d.ts.map +1 -1
- package/dist/src/testing/in_memory_billing_store.js +517 -4
- package/dist/src/testing/in_memory_billing_store.js.map +1 -1
- package/dist/src/testing/index.d.ts +3 -2
- package/dist/src/testing/index.d.ts.map +1 -1
- package/dist/src/testing/index.js +1 -0
- package/dist/src/testing/index.js.map +1 -1
- package/dist/src/testing/mutable_clock.d.ts.map +1 -1
- package/dist/src/types.d.ts +161 -5
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +30 -1
- package/dist/src/types.js.map +1 -1
- package/dist/src/webhook_handlers.d.ts +96 -2
- package/dist/src/webhook_handlers.d.ts.map +1 -1
- package/dist/src/webhook_handlers.js +91 -10
- package/dist/src/webhook_handlers.js.map +1 -1
- package/dist/src/webhook_security.d.ts +94 -3
- package/dist/src/webhook_security.d.ts.map +1 -1
- package/dist/src/webhook_security.js +173 -9
- package/dist/src/webhook_security.js.map +1 -1
- package/dist/stubs/config/payments.stub +13 -0
- package/dist/stubs/config/payments_client.stub +42 -0
- package/dist/stubs/config/payments_dashboard.stub +38 -0
- package/dist/stubs/database/migrations/create_billing_tables.stub +35 -77
- package/dist/stubs/main.js.map +1 -1
- package/dist/stubs/make/webhook_handler/main.stub +29 -11
- package/package.json +67 -32
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"efi.js","sourceRoot":"","sources":["../../../src/drivers/efi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAWxF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAWzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AA8EhD;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,SAAgC;IACtD,OAAO,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;AACxD,CAAC;AAED,kEAAkE;AAClE,MAAM,0BAA0B,GAAG,EAAE,CAAC;AACtC,6FAA6F;AAC7F,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,OAAO,SAAS;IACX,QAAQ,GAAG,KAAK,CAAC;IAC1B,sFAAsF;IAC7E,gBAAgB,GAAG,CAAC,KAAK,CAAU,CAAC;IACpC,YAAY,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAEjF,QAAQ,CAAS;IACjB,UAAU,CAAS;IACnB,OAAO,CAAS;IAChB,MAAM,CAA0B;IAChC,WAAW,CAAqB;IAChC,kBAAkB,CAAS;IAC3B,uFAAuF;IACvF,MAAM,CAAmD;IACzD,8EAA8E;IAC9E,cAAc,CAA8B;IAE5C,YAAY,GAAuB,EAAE,MAAM,GAAoB,EAAE;QAC/D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,MAAM,QAAQ,GAAG,iBAAiB,CAAC;YACjC,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,UAAU;YAClB,GAAG,EAAE,eAAe;YACpB,KAAK,EAAE,MAAM,CAAC,QAAQ;SACvB,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,iBAAiB,CAAC;YACrC,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,cAAc;YACtB,GAAG,EAAE,mBAAmB;YACxB,KAAK,EAAE,MAAM,CAAC,YAAY;SAC3B,CAAC,CAAC;QACH,uFAAuF;QACvF,qEAAqE;QACrE,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC;YAC/B,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,QAAQ;YAChB,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;QACxE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,+BAA+B,CAAC;QAC9F,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC3D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,wFAAwF;IAExF,KAAK,CAAC,cAAc,CAAC,MAA2B;QAC9C,MAAM,IAAI,KAAK,CACb,2GAA2G;YACzG,wFAAwF,CAC3F,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,MAA2B;QACnE,MAAM,IAAI,KAAK,CACb,oGAAoG,CACrG,CAAC;IACJ,CAAC;IAED,wFAAwF;IAExF,KAAK,CAAC,MAAM,CAAC,KAAkB;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,2EAA2E,KAAK,CAAC,MAAM,2EAA2E,CACnK,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjD,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QAEF,sFAAsF;QACtF,qFAAqF;QACrF,gFAAgF;QAChF,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC;QAClE,MAAM,GAAG,GACP,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAS,WAAW,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9E,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAS,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,MAAM,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACrE,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAS,WAAW,SAAS,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,UAAU,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CACV,gBAAwB,EACxB,MAAc,EACd,OAAqC;QAErC,iFAAiF;QACjF,uEAAuE;QACvE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,oFAAoF;QACpF,yFAAyF;QACzF,MAAM,QAAQ,GACZ,wBAAwB,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAe,WAAW,UAAU,cAAc,QAAQ,EAAE,EAAE;YAC5F,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SACvB,CAAC,CAAC;QACH,MAAM,MAAM,GAAW;YACrB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,IAAI,QAAQ;YAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC7E,MAAM,EACJ,IAAI,CAAC,MAAM,KAAK,WAAW;gBACzB,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,eAAe;oBAC/B,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,SAAS;YACjB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACjE,CAAC;QACF,wBAAwB,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,wFAAwF;IAExF,KAAK,CAAC,cAAc,CAAC,KAAoB;QACvC,mFAAmF;QACnF,yEAAyE;QACzE,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,EAAE;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACjD,KAAK,EAAE,IAAI,CAAC,OAAO;YACnB,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE,kBAAkB,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;gBACzD,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,oFAAoF;QACpF,wEAAwE;QACxE,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC;QAClE,MAAM,GAAG,GACP,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC;YAC/C,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAS,WAAW,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAC9E,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAS,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,OAAO;YACL,EAAE,EAAE,GAAG,CAAC,IAAI;YACZ,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG,EAAE,EAAE;YACP,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM;YACxD,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;YACjD,GAAG,CAAC,GAAG,CAAC,aAAa,KAAK,SAAS;gBACjC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC,aAAa,EAAE;gBAClE,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,wFAAwF;IAExF,KAAK,CAAC,kBAAkB,CAAC,MAA+B;QACtD,MAAM,IAAI,KAAK,CACb,+FAA+F;YAC7F,sGAAsG;YACtG,sCAAsC,CACzC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,sBAA8B,EAC9B,QAAoC;QAEpC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,sBAA8B,EAC9B,MAA+B;QAE/B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED,wFAAwF;IAExF;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,kFAAkF;QAClF,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CACb,qFAAqF;YACnF,oFAAoF;YACpF,iFAAiF;YACjF,oFAAoF,CACvF,CAAC;IACJ,CAAC;IAED,wFAAwF;IAExF;;;;;;;;OAQG;IACH,KAAK,CAAC,kBAAkB,CAAC,GAAW,EAAE,OAAO,GAA2B,EAAE;QACxE,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE;YACrE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;YACzB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,sBAAsB,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH;;;;;;OAMG;IACH,IAAI,mBAAmB;QACrB,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,YAAY,CACV,OAAe,EACf,QAAuD;QAEvD,iFAAiF;QACjF,iFAAiF;QACjF,uFAAuF;QACvF,qFAAqF;QACrF,4EAA4E;QAC5E,EAAE;QACF,yFAAyF;QACzF,sFAAsF;QACtF,0FAA0F;QAC1F,IAAI,OAA4C,CAAC;QACjD,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAwC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,EAAE,CAAC;YACxB,mFAAmF;YACnF,gFAAgF;YAChF,oCAAoC;YACpC,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC;YAClF,OAAO;gBACL,EAAE,EAAE,OAAO,IAAI,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC5F,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,OAAO,IAAI,EAAE;gBACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,IAAI,EAAE,OAAkC;gBACxC,GAAG,EAAE,OAAkC;aACxC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,wFAAwF;QACxF,iFAAiF;QACjF,wFAAwF;QACxF,MAAM,MAAM,GAAI,IAA6B,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxD,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CACvC,CAAC;QACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,2DAA2D;IAC3D,mBAAmB,CACjB,GAAuB,EACvB,OAA4C;QAE5C,sFAAsF;QACtF,qFAAqF;QACrF,kFAAkF;QAClF,gBAAgB;QAChB,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAA6B,CAAC;QAClE,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACxC,mFAAmF;QACnF,wFAAwF;QACxF,mFAAmF;QACnF,sFAAsF;QACtF,+EAA+E;QAC/E,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG;YACX,mFAAmF;YACnF,oEAAoE;YACpE,SAAS,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU;YACrC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,QAAQ,EAAE,KAAK;YACf,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,QAAQ,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;SACzC,CAAC;QAEF,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;YACxD,gFAAgF;YAChF,mFAAmF;YACnF,qFAAqF;YACrF,mFAAmF;YACnF,oDAAoD;YACpD,EAAE;YACF,mFAAmF;YACnF,oEAAoE;YACpE,uDAAuD;YACvD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC;YAC7C,OAAO;gBACL,EAAE,EAAE,GAAG,GAAG,CAAC,UAAU,QAAQ,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE;gBACnD,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,yBAAyB;gBAChE,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBAClD,IAAI,EAAE;oBACJ,GAAG,IAAI;oBACP,SAAS,EAAE,GAAG,CAAC,EAAE;oBACjB,6EAA6E;oBAC7E,wEAAwE;oBACxE,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC/D,gFAAgF;oBAChF,2EAA2E;iBAC5E;gBACD,GAAG;aACJ,CAAC;QACJ,CAAC;QAED,OAAO;YACL,qFAAqF;YACrF,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB;YACzD,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAClD,IAAI;YACJ,GAAG;SACJ,CAAC;IACJ,CAAC;IAED,wFAAwF;IAExF,OAAO,CAAC,GAAW;QACjB,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;QACrF,wFAAwF;QACxF,sFAAsF;QACtF,8DAA8D;QAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAY;YACtB,EAAE,EAAE,GAAG,CAAC,IAAI;YACZ,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE;YAC5E,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,WAAW;wBAC1B,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,OAAO;4BACtB,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,UAAU;YACpB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,GAAyC;YAClD,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC/D,CAAC;QACF,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;YACnC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,OAAgB,EAAE,GAAW;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAe,WAAW,KAAK,SAAS,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC7D,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC;gBAC5B,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,MAAM,CAAC;YACpC,CAAC;YACD,IAAI,EAAE,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;gBAClC,wEAAwE;gBACxE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC,CAAC;gBACvE,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;gBAChC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM,CAAC,KAAkB;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC;QAC9D,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACzF,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACnF,CAAC;IAED,WAAW,CAAC,KAAkB;QAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC;QACnD,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC7E,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,kBAAkB,CAAC,SAAiB;QACxC,IAAI,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAqB,WAAW,SAAS,EAAE,CAAC,CAAC;YAC9E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,EAAE,CAAC;QACrE,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAS,WAAW,SAAS,EAAE,CAAC,CAAC;QAChE,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,mDAAmD,CACtF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IACtE,CAAC;IAED,wFAAwF;IAExF;;;;;;;OAOG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC;QAC/E,qDAAqD;QACrD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC,cAAc,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC7C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,MAAM,WAAW,CAAmB,cAAc,EAAE;YAC/D,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE;YAC1C,UAAU,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,EAAE;YACxE,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACnF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG;YACZ,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;SAChD,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAAY,EACZ,OAAO,GAIH,EAAE;QAEN,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,KAAK,CAAI,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kFAAkF;YAClF,sDAAsD;YACtD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YACxC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,CAAI,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CACH,IAAY,EACZ,OAA8F,EAC9F,KAAa;QAEb,OAAO,WAAW,CAAI,IAAI,EAAE;YAC1B,OAAO,EAAE,IAAI,CAAC,QAAQ;YACtB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,WAAW,EAAE,KAAK;YAClB,KAAK,EAAE,IAAI,CAAC,MAAM;SACnB,CAAC,CAAC;IACL,CAAC;CACF;AAED,0FAA0F;AAE1F;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAa;IACnC,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAAC,GAAuB;IACvD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,kEAAkE,GAAG,6KAA6K,CACnP,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,mDAAmD;AACnD,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,QAAQ,IAAI,KAAK;QAChB,KAA6B,CAAC,MAAM,KAAK,GAAG,CAC9C,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,SAAS,CAAC,MAAuB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IACtE,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,kFAAkF;YAChF,2GAA2G;YAC3G,kEAAkE;YAClE,qEAAqE,CACxE,CAAC;IACJ,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,sDAAsD,WAAW,MAC/D,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,sEAAsE,CACvE,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;QAC3B,SAAS,EAAE,IAAI;QACf,qFAAqF;QACrF,GAAG,CAAC,KAAK;YACP,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;YACjC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,qBAAqB,IAAI,EAAE,EAAE,CAAC;KACtE,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvE,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACjD,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpF,OAAO,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,YAAY,CAC1B,GAAG,EACH,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EACjD,CAAC,QAAQ,EAAE,EAAE;gBACX,MAAM,MAAM,GAAa,EAAE,CAAC;gBAC5B,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3D,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;oBAC1C,0DAA0D;oBAC1D,MAAM,OAAO,GACX,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpF,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;gBACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC,CACF,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { InfinitePayDriverConfig } from '../define_config.js';
|
|
2
|
+
import type { ChargeInput, CheckoutInput, CreateCustomerInput, CreateSubscriptionInput, PaymentsDriver, UpdateCustomerInput, UpdateSubscriptionInput, WebhookVerificationState } from '../driver.js';
|
|
3
|
+
import type { EmitInvoiceContext } from '../invoice/emit_invoice.js';
|
|
4
|
+
import type { CheckoutSession, Customer, Invoice, Money, Payment, Refund, Subscription, WebhookEvent } from '../types.js';
|
|
5
|
+
/** One line of an InfinitePay checkout cart. `price` is in centavos, like {@link Money}. */
|
|
6
|
+
export interface InfinitePayItem {
|
|
7
|
+
quantity: number;
|
|
8
|
+
price: number;
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
/** The buyer data a checkout link can be pre-filled with (write-only — nothing reads it back). */
|
|
12
|
+
export interface InfinitePayCustomerInput {
|
|
13
|
+
name?: string;
|
|
14
|
+
email?: string;
|
|
15
|
+
phone_number?: string;
|
|
16
|
+
}
|
|
17
|
+
/** The delivery address a checkout link can be pre-filled with. */
|
|
18
|
+
export interface InfinitePayAddressInput {
|
|
19
|
+
cep?: string;
|
|
20
|
+
street?: string;
|
|
21
|
+
neighborhood?: string;
|
|
22
|
+
number?: string;
|
|
23
|
+
complement?: string;
|
|
24
|
+
}
|
|
25
|
+
/** The three ids `payment_check` needs; all three only exist once a payment happened. */
|
|
26
|
+
export interface InfinitePayCheckInput {
|
|
27
|
+
/** Your own order id, the one sent as `order_nsu` when the link was created. */
|
|
28
|
+
orderNsu: string;
|
|
29
|
+
/** The gateway transaction id, from the webhook or the redirect query string. */
|
|
30
|
+
transactionNsu: string;
|
|
31
|
+
/** The invoice slug, from the webhook (`invoice_slug`) or the redirect query string. */
|
|
32
|
+
slug: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* InfinitePay driver — CloudWalk's Brazilian payments product (infinitepay.io).
|
|
36
|
+
*
|
|
37
|
+
* **This is a redirect-checkout driver, and nothing more.** InfinitePay's only currently
|
|
38
|
+
* documented developer API is the Checkout / Payment Link API: you create a link, send the
|
|
39
|
+
* payer to it, and InfinitePay calls a per-link webhook once the payment is approved. There
|
|
40
|
+
* is no documented server-side charge API, no refund endpoint, no customer resource, no
|
|
41
|
+
* subscription API and no way to list anything — so every method outside
|
|
42
|
+
* {@link InfinitePayDriver.createCheckout}, {@link InfinitePayDriver.parseWebhook} and
|
|
43
|
+
* {@link InfinitePayDriver.checkPayment} throws rather than calling an endpoint that does
|
|
44
|
+
* not exist. (A v2 transactions API did exist and is still referenced by CloudWalk's
|
|
45
|
+
* abandoned WooCommerce and Magento plugins, but its documentation host is gone and its
|
|
46
|
+
* credentials were handed out by email; building on it would be building on an archive.)
|
|
47
|
+
*
|
|
48
|
+
* Three consequences worth knowing before you configure it:
|
|
49
|
+
*
|
|
50
|
+
* - **The credential is a `handle`, not a secret.** The link endpoint is public and
|
|
51
|
+
* unauthenticated; the `handle` (your InfiniteTag) is what identifies the merchant. Enable
|
|
52
|
+
* *Vendas → Checkout → Configurações → Habilitar Checkout Integrado* in the app first, or
|
|
53
|
+
* link creation is refused.
|
|
54
|
+
* - **The webhook is unauthenticated.** No signature, no HMAC, no shared token — InfinitePay
|
|
55
|
+
* documents none. `parseWebhook` therefore cannot verify anything; treat the payload as a
|
|
56
|
+
* hint that something happened and confirm it with {@link InfinitePayDriver.checkPayment}
|
|
57
|
+
* before you credit an order.
|
|
58
|
+
* - **`webhook_url` is per link.** There is no global endpoint to register, so the driver
|
|
59
|
+
* sends one on every link it creates — configure `webhookUrl` (or `INFINITEPAY_WEBHOOK_URL`)
|
|
60
|
+
* or no webhook will ever arrive.
|
|
61
|
+
*/
|
|
62
|
+
export declare class InfinitePayDriver implements PaymentsDriver {
|
|
63
|
+
#private;
|
|
64
|
+
readonly provider = "infinitepay";
|
|
65
|
+
/**
|
|
66
|
+
* What the hosted checkout page settles with (`capture_method` comes back as
|
|
67
|
+
* `credit_card` or `pix`). Boleto is not offered. These are the methods a *link* accepts —
|
|
68
|
+
* routing a charge here still fails, because there is no charge API.
|
|
69
|
+
*/
|
|
70
|
+
readonly supportedMethods: readonly ['pix', 'credit_card'];
|
|
71
|
+
/** Nothing beyond checkout: no refunds, no invoices, no subscriptions. */
|
|
72
|
+
readonly capabilities: {
|
|
73
|
+
refunds: boolean;
|
|
74
|
+
invoices: boolean;
|
|
75
|
+
subscriptions: boolean;
|
|
76
|
+
};
|
|
77
|
+
constructor(_ctx: EmitInvoiceContext, config?: InfinitePayDriverConfig);
|
|
78
|
+
/**
|
|
79
|
+
* Creates a checkout link (`POST /links`) and returns the URL to send the payer to.
|
|
80
|
+
*
|
|
81
|
+
* The gateway answers with `{ "url": … }` and nothing else — no link id, no session id —
|
|
82
|
+
* so the session's `id`/`gatewayId` is the `order_nsu` this call sent. That is also the
|
|
83
|
+
* only id the webhook and {@link InfinitePayDriver.checkPayment} speak in, which makes it
|
|
84
|
+
* the right thing to store against your local order.
|
|
85
|
+
*
|
|
86
|
+
* `cancelUrl` is ignored: a link has one `redirect_url`, used on success, and the API has
|
|
87
|
+
* no cancel destination to map onto.
|
|
88
|
+
*/
|
|
89
|
+
createCheckout(input: CheckoutInput): Promise<CheckoutSession>;
|
|
90
|
+
/**
|
|
91
|
+
* Confirms a payment with `POST /payment_check` — the only status lookup InfinitePay
|
|
92
|
+
* documents, and the one its own docs tell you to run before crediting an order.
|
|
93
|
+
*
|
|
94
|
+
* It needs all three of `orderNsu`, `transactionNsu` and `slug`, and the last two only
|
|
95
|
+
* come into existence when the payment does (they arrive on the webhook and on the
|
|
96
|
+
* redirect query string). There is consequently **no way to poll a link that has not been
|
|
97
|
+
* paid** — a pending link is invisible to the API, which is why
|
|
98
|
+
* {@link InfinitePayDriver.findPayment} cannot be implemented and this method exists in
|
|
99
|
+
* its place.
|
|
100
|
+
*/
|
|
101
|
+
checkPayment(input: InfinitePayCheckInput): Promise<Payment | null>;
|
|
102
|
+
/**
|
|
103
|
+
* Normalizes the per-link webhook InfinitePay POSTs when a payment is approved.
|
|
104
|
+
*
|
|
105
|
+
* **It verifies nothing, because there is nothing to verify.** InfinitePay documents no
|
|
106
|
+
* signature, no HMAC and no shared token for the checkout webhook — the security advice in
|
|
107
|
+
* its own docs is to re-check the payment instead. So an event out of this method means
|
|
108
|
+
* "somebody claimed a payment happened", not "a payment happened": confirm it with
|
|
109
|
+
* {@link InfinitePayDriver.checkPayment} (`event.raw` carries the three ids it needs)
|
|
110
|
+
* before you credit anything, and put an unguessable segment in the `webhookUrl` you
|
|
111
|
+
* configure so the endpoint is at least not trivially discoverable.
|
|
112
|
+
*/
|
|
113
|
+
/**
|
|
114
|
+
* Whether a delivery to `POST /payments/webhook/:provider` can be authenticated.
|
|
115
|
+
*
|
|
116
|
+
* InfinitePay's checkout notification is unsigned — the reference documents no signature
|
|
117
|
+
* header and no shared secret — so there is nothing to verify with.
|
|
118
|
+
*/
|
|
119
|
+
get webhookVerification(): WebhookVerificationState;
|
|
120
|
+
parseWebhook(rawBody: string, _headers: Record<string, string | string[] | undefined>): WebhookEvent;
|
|
121
|
+
/**
|
|
122
|
+
* Not supported. InfinitePay documents no server-side charge API — the only way to take
|
|
123
|
+
* money is to send the payer to a checkout link.
|
|
124
|
+
*/
|
|
125
|
+
charge(_input: ChargeInput): Promise<Payment>;
|
|
126
|
+
/**
|
|
127
|
+
* Not supported. `payment_check` needs the transaction id and the invoice slug alongside
|
|
128
|
+
* your order id, and both only exist after payment — see
|
|
129
|
+
* {@link InfinitePayDriver.checkPayment}.
|
|
130
|
+
*/
|
|
131
|
+
findPayment(gatewayId: string): Promise<Payment | null>;
|
|
132
|
+
/** Not supported. InfinitePay documents no refund endpoint; refunds go through the app. */
|
|
133
|
+
refund(_paymentGatewayId: string, _amount?: Money): Promise<Refund>;
|
|
134
|
+
/**
|
|
135
|
+
* Not supported. A checkout link takes buyer data as a write-only field; InfinitePay has
|
|
136
|
+
* no customer resource to create, read or update.
|
|
137
|
+
*/
|
|
138
|
+
createCustomer(_input: CreateCustomerInput): Promise<Customer>;
|
|
139
|
+
/** Not supported — see {@link InfinitePayDriver.createCustomer}. */
|
|
140
|
+
findCustomer(_customerId: string): Promise<Customer | null>;
|
|
141
|
+
/** Not supported — see {@link InfinitePayDriver.createCustomer}. */
|
|
142
|
+
updateCustomer(_customerId: string, _input: UpdateCustomerInput): Promise<Customer>;
|
|
143
|
+
/** Not supported. InfinitePay sells recurring billing as an app feature, with no public API. */
|
|
144
|
+
createSubscription(_input: CreateSubscriptionInput): Promise<Subscription>;
|
|
145
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
146
|
+
cancelSubscription(_subscriptionGatewayId: string, _options?: {
|
|
147
|
+
atPeriodEnd?: boolean;
|
|
148
|
+
}): Promise<Subscription>;
|
|
149
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
150
|
+
updateSubscription(_subscriptionGatewayId: string, _input: UpdateSubscriptionInput): Promise<Subscription>;
|
|
151
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
152
|
+
findSubscription(_gatewayId: string): Promise<Subscription | null>;
|
|
153
|
+
/** Not supported. InfinitePay exposes no list or search endpoint of any kind. */
|
|
154
|
+
listInvoices(_customerId: string): Promise<Invoice[]>;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=infinitepay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infinitepay.d.ts","sourceRoot":"","sources":["../../../src/drivers/infinitepay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { publishPaymentDiagnostics } from '../diagnostics.js';
|
|
3
|
+
import { httpRequest } from '../http.js';
|
|
4
|
+
import { requireCredential } from './shared.js';
|
|
5
|
+
/**
|
|
6
|
+
* InfinitePay driver — CloudWalk's Brazilian payments product (infinitepay.io).
|
|
7
|
+
*
|
|
8
|
+
* **This is a redirect-checkout driver, and nothing more.** InfinitePay's only currently
|
|
9
|
+
* documented developer API is the Checkout / Payment Link API: you create a link, send the
|
|
10
|
+
* payer to it, and InfinitePay calls a per-link webhook once the payment is approved. There
|
|
11
|
+
* is no documented server-side charge API, no refund endpoint, no customer resource, no
|
|
12
|
+
* subscription API and no way to list anything — so every method outside
|
|
13
|
+
* {@link InfinitePayDriver.createCheckout}, {@link InfinitePayDriver.parseWebhook} and
|
|
14
|
+
* {@link InfinitePayDriver.checkPayment} throws rather than calling an endpoint that does
|
|
15
|
+
* not exist. (A v2 transactions API did exist and is still referenced by CloudWalk's
|
|
16
|
+
* abandoned WooCommerce and Magento plugins, but its documentation host is gone and its
|
|
17
|
+
* credentials were handed out by email; building on it would be building on an archive.)
|
|
18
|
+
*
|
|
19
|
+
* Three consequences worth knowing before you configure it:
|
|
20
|
+
*
|
|
21
|
+
* - **The credential is a `handle`, not a secret.** The link endpoint is public and
|
|
22
|
+
* unauthenticated; the `handle` (your InfiniteTag) is what identifies the merchant. Enable
|
|
23
|
+
* *Vendas → Checkout → Configurações → Habilitar Checkout Integrado* in the app first, or
|
|
24
|
+
* link creation is refused.
|
|
25
|
+
* - **The webhook is unauthenticated.** No signature, no HMAC, no shared token — InfinitePay
|
|
26
|
+
* documents none. `parseWebhook` therefore cannot verify anything; treat the payload as a
|
|
27
|
+
* hint that something happened and confirm it with {@link InfinitePayDriver.checkPayment}
|
|
28
|
+
* before you credit an order.
|
|
29
|
+
* - **`webhook_url` is per link.** There is no global endpoint to register, so the driver
|
|
30
|
+
* sends one on every link it creates — configure `webhookUrl` (or `INFINITEPAY_WEBHOOK_URL`)
|
|
31
|
+
* or no webhook will ever arrive.
|
|
32
|
+
*/
|
|
33
|
+
export class InfinitePayDriver {
|
|
34
|
+
provider = 'infinitepay';
|
|
35
|
+
/**
|
|
36
|
+
* What the hosted checkout page settles with (`capture_method` comes back as
|
|
37
|
+
* `credit_card` or `pix`). Boleto is not offered. These are the methods a *link* accepts —
|
|
38
|
+
* routing a charge here still fails, because there is no charge API.
|
|
39
|
+
*/
|
|
40
|
+
supportedMethods = ['pix', 'credit_card'];
|
|
41
|
+
/** Nothing beyond checkout: no refunds, no invoices, no subscriptions. */
|
|
42
|
+
capabilities = { refunds: false, invoices: false, subscriptions: false };
|
|
43
|
+
#baseUrl;
|
|
44
|
+
#handle;
|
|
45
|
+
#webhookUrl;
|
|
46
|
+
constructor(_ctx, config = {}) {
|
|
47
|
+
this.#handle = requireCredential({
|
|
48
|
+
driver: 'infinitepay',
|
|
49
|
+
option: 'handle',
|
|
50
|
+
env: 'INFINITEPAY_HANDLE',
|
|
51
|
+
value: config.handle,
|
|
52
|
+
});
|
|
53
|
+
this.#baseUrl = config.baseUrl ?? 'https://api.checkout.infinitepay.io';
|
|
54
|
+
this.#webhookUrl = config.webhookUrl ?? process.env.INFINITEPAY_WEBHOOK_URL;
|
|
55
|
+
}
|
|
56
|
+
// ── Checkout ─────────────────────────────────────────────────────────────────────────
|
|
57
|
+
/**
|
|
58
|
+
* Creates a checkout link (`POST /links`) and returns the URL to send the payer to.
|
|
59
|
+
*
|
|
60
|
+
* The gateway answers with `{ "url": … }` and nothing else — no link id, no session id —
|
|
61
|
+
* so the session's `id`/`gatewayId` is the `order_nsu` this call sent. That is also the
|
|
62
|
+
* only id the webhook and {@link InfinitePayDriver.checkPayment} speak in, which makes it
|
|
63
|
+
* the right thing to store against your local order.
|
|
64
|
+
*
|
|
65
|
+
* `cancelUrl` is ignored: a link has one `redirect_url`, used on success, and the API has
|
|
66
|
+
* no cancel destination to map onto.
|
|
67
|
+
*/
|
|
68
|
+
async createCheckout(input) {
|
|
69
|
+
if (input.planId !== undefined || input.trialDays !== undefined) {
|
|
70
|
+
throw new Error('[payments] InfinitePay has no documented subscription API — a checkout link cannot ' +
|
|
71
|
+
'create a recurring plan. Drop `planId`/`trialDays`, or route subscriptions to another provider.');
|
|
72
|
+
}
|
|
73
|
+
const items = this.#items(input);
|
|
74
|
+
const orderNsu = this.#orderNsu(input);
|
|
75
|
+
const webhookUrl = input.metadata?.webhookUrl ?? this.#webhookUrl;
|
|
76
|
+
const body = {
|
|
77
|
+
handle: this.#handle,
|
|
78
|
+
order_nsu: orderNsu,
|
|
79
|
+
items,
|
|
80
|
+
redirect_url: input.successUrl,
|
|
81
|
+
...(webhookUrl !== undefined ? { webhook_url: webhookUrl } : {}),
|
|
82
|
+
...(input.metadata?.customer !== undefined ? { customer: input.metadata.customer } : {}),
|
|
83
|
+
...(input.metadata?.address !== undefined ? { address: input.metadata.address } : {}),
|
|
84
|
+
};
|
|
85
|
+
const data = await this.#request('/links', {
|
|
86
|
+
method: 'POST',
|
|
87
|
+
body,
|
|
88
|
+
});
|
|
89
|
+
if (typeof data.url !== 'string' || data.url === '') {
|
|
90
|
+
throw new Error(`[payments] InfinitePay returned no checkout URL for handle "${this.#handle}". Check the handle and that "Checkout Integrado" is enabled in the InfinitePay app.`);
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
id: orderNsu,
|
|
94
|
+
gatewayId: orderNsu,
|
|
95
|
+
provider: this.provider,
|
|
96
|
+
url: data.url,
|
|
97
|
+
status: 'open',
|
|
98
|
+
amount: {
|
|
99
|
+
amount: items.reduce((sum, item) => sum + item.price * item.quantity, 0),
|
|
100
|
+
currency: 'brl',
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// ── Payment status ───────────────────────────────────────────────────────────────────
|
|
105
|
+
/**
|
|
106
|
+
* Confirms a payment with `POST /payment_check` — the only status lookup InfinitePay
|
|
107
|
+
* documents, and the one its own docs tell you to run before crediting an order.
|
|
108
|
+
*
|
|
109
|
+
* It needs all three of `orderNsu`, `transactionNsu` and `slug`, and the last two only
|
|
110
|
+
* come into existence when the payment does (they arrive on the webhook and on the
|
|
111
|
+
* redirect query string). There is consequently **no way to poll a link that has not been
|
|
112
|
+
* paid** — a pending link is invisible to the API, which is why
|
|
113
|
+
* {@link InfinitePayDriver.findPayment} cannot be implemented and this method exists in
|
|
114
|
+
* its place.
|
|
115
|
+
*/
|
|
116
|
+
async checkPayment(input) {
|
|
117
|
+
const data = await this.#request('/payment_check', {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
body: {
|
|
120
|
+
handle: this.#handle,
|
|
121
|
+
order_nsu: input.orderNsu,
|
|
122
|
+
transaction_nsu: input.transactionNsu,
|
|
123
|
+
slug: input.slug,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
if (data.success === false)
|
|
127
|
+
return null;
|
|
128
|
+
const payment = this.#mapPayment({
|
|
129
|
+
order_nsu: input.orderNsu,
|
|
130
|
+
transaction_nsu: input.transactionNsu,
|
|
131
|
+
invoice_slug: input.slug,
|
|
132
|
+
...(data.amount !== undefined ? { amount: data.amount } : {}),
|
|
133
|
+
...(data.paid_amount !== undefined ? { paid_amount: data.paid_amount } : {}),
|
|
134
|
+
...(data.installments !== undefined ? { installments: data.installments } : {}),
|
|
135
|
+
...(data.capture_method !== undefined ? { capture_method: data.capture_method } : {}),
|
|
136
|
+
});
|
|
137
|
+
if (data.paid !== true)
|
|
138
|
+
payment.status = 'pending';
|
|
139
|
+
publishPaymentDiagnostics(payment);
|
|
140
|
+
return payment;
|
|
141
|
+
}
|
|
142
|
+
// ── Webhooks ─────────────────────────────────────────────────────────────────────────
|
|
143
|
+
/**
|
|
144
|
+
* Normalizes the per-link webhook InfinitePay POSTs when a payment is approved.
|
|
145
|
+
*
|
|
146
|
+
* **It verifies nothing, because there is nothing to verify.** InfinitePay documents no
|
|
147
|
+
* signature, no HMAC and no shared token for the checkout webhook — the security advice in
|
|
148
|
+
* its own docs is to re-check the payment instead. So an event out of this method means
|
|
149
|
+
* "somebody claimed a payment happened", not "a payment happened": confirm it with
|
|
150
|
+
* {@link InfinitePayDriver.checkPayment} (`event.raw` carries the three ids it needs)
|
|
151
|
+
* before you credit anything, and put an unguessable segment in the `webhookUrl` you
|
|
152
|
+
* configure so the endpoint is at least not trivially discoverable.
|
|
153
|
+
*/
|
|
154
|
+
/**
|
|
155
|
+
* Whether a delivery to `POST /payments/webhook/:provider` can be authenticated.
|
|
156
|
+
*
|
|
157
|
+
* InfinitePay's checkout notification is unsigned — the reference documents no signature
|
|
158
|
+
* header and no shared secret — so there is nothing to verify with.
|
|
159
|
+
*/
|
|
160
|
+
get webhookVerification() {
|
|
161
|
+
return 'unsupported';
|
|
162
|
+
}
|
|
163
|
+
parseWebhook(rawBody, _headers) {
|
|
164
|
+
const payload = JSON.parse(rawBody);
|
|
165
|
+
const payment = this.#mapPayment(payload);
|
|
166
|
+
return {
|
|
167
|
+
// The webhook has no event id of its own; the transaction is the stable, idempotent key.
|
|
168
|
+
id: payload.transaction_nsu ?? payload.invoice_slug ?? `infinitepay-${randomUUID()}`,
|
|
169
|
+
provider: this.provider,
|
|
170
|
+
// The webhook fires on approved payments only. InfinitePay's checkout reference
|
|
171
|
+
// documents exactly one notification — "quando o pagamento for aprovado" — and two
|
|
172
|
+
// endpoints (`POST /links`, `POST /payment_check`). There is no failure event, no
|
|
173
|
+
// refund event and **no dispute vocabulary at all**: no chargeback webhook, no
|
|
174
|
+
// pre-dispute alert, no dispute resource. A contested sale is handled inside the
|
|
175
|
+
// InfinitePay app, which is also the only place defense documents can be uploaded,
|
|
176
|
+
// and the first the integration hears of one is the debit on the statement. So this
|
|
177
|
+
// is unconditionally `payment.succeeded` — there is nothing else it could be.
|
|
178
|
+
type: 'payment.succeeded',
|
|
179
|
+
createdAt: new Date().toISOString(),
|
|
180
|
+
data: {
|
|
181
|
+
gatewayId: payment.gatewayId,
|
|
182
|
+
amount: payment.amount.amount,
|
|
183
|
+
currency: payment.amount.currency,
|
|
184
|
+
...(payload.order_nsu !== undefined ? { externalReference: payload.order_nsu } : {}),
|
|
185
|
+
},
|
|
186
|
+
raw: payload,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// ── Not exposed by the gateway ───────────────────────────────────────────────────────
|
|
190
|
+
/**
|
|
191
|
+
* Not supported. InfinitePay documents no server-side charge API — the only way to take
|
|
192
|
+
* money is to send the payer to a checkout link.
|
|
193
|
+
*/
|
|
194
|
+
async charge(_input) {
|
|
195
|
+
throw new Error('[payments] InfinitePay has no documented server-side charge API. ' +
|
|
196
|
+
'Use `createCheckout()` and redirect the payer to the returned URL.');
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Not supported. `payment_check` needs the transaction id and the invoice slug alongside
|
|
200
|
+
* your order id, and both only exist after payment — see
|
|
201
|
+
* {@link InfinitePayDriver.checkPayment}.
|
|
202
|
+
*/
|
|
203
|
+
async findPayment(gatewayId) {
|
|
204
|
+
throw new Error(`[payments] InfinitePay cannot look payment "${gatewayId}" up by id alone: \`payment_check\` needs order_nsu + transaction_nsu + slug, and the last two only exist once the payment does. ` +
|
|
205
|
+
`Call \`checkPayment({ orderNsu: '${gatewayId}', transactionNsu, slug })\` with the ids from the webhook or the redirect URL.`);
|
|
206
|
+
}
|
|
207
|
+
/** Not supported. InfinitePay documents no refund endpoint; refunds go through the app. */
|
|
208
|
+
async refund(_paymentGatewayId, _amount) {
|
|
209
|
+
throw new Error('[payments] InfinitePay has no documented refund API. Refund from the InfinitePay app.');
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Not supported. A checkout link takes buyer data as a write-only field; InfinitePay has
|
|
213
|
+
* no customer resource to create, read or update.
|
|
214
|
+
*/
|
|
215
|
+
async createCustomer(_input) {
|
|
216
|
+
throw new Error('[payments] InfinitePay has no customer API. Pass buyer data per checkout instead ' +
|
|
217
|
+
'(`metadata.customer` on `createCheckout`).');
|
|
218
|
+
}
|
|
219
|
+
/** Not supported — see {@link InfinitePayDriver.createCustomer}. */
|
|
220
|
+
async findCustomer(_customerId) {
|
|
221
|
+
throw new Error('[payments] InfinitePay has no customer API to look a customer up in.');
|
|
222
|
+
}
|
|
223
|
+
/** Not supported — see {@link InfinitePayDriver.createCustomer}. */
|
|
224
|
+
async updateCustomer(_customerId, _input) {
|
|
225
|
+
throw new Error('[payments] InfinitePay has no customer API to update.');
|
|
226
|
+
}
|
|
227
|
+
/** Not supported. InfinitePay sells recurring billing as an app feature, with no public API. */
|
|
228
|
+
async createSubscription(_input) {
|
|
229
|
+
throw new Error('[payments] InfinitePay has no documented subscription API. Route subscriptions to another provider.');
|
|
230
|
+
}
|
|
231
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
232
|
+
async cancelSubscription(_subscriptionGatewayId, _options) {
|
|
233
|
+
throw new Error('[payments] InfinitePay has no documented subscription API to cancel.');
|
|
234
|
+
}
|
|
235
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
236
|
+
async updateSubscription(_subscriptionGatewayId, _input) {
|
|
237
|
+
throw new Error('[payments] InfinitePay has no documented subscription API to update.');
|
|
238
|
+
}
|
|
239
|
+
/** Not supported — see {@link InfinitePayDriver.createSubscription}. */
|
|
240
|
+
async findSubscription(_gatewayId) {
|
|
241
|
+
throw new Error('[payments] InfinitePay has no documented subscription API to read.');
|
|
242
|
+
}
|
|
243
|
+
/** Not supported. InfinitePay exposes no list or search endpoint of any kind. */
|
|
244
|
+
async listInvoices(_customerId) {
|
|
245
|
+
throw new Error('[payments] InfinitePay has no invoice or listing API. Read your own billing tables instead.');
|
|
246
|
+
}
|
|
247
|
+
// ── Internals ────────────────────────────────────────────────────────────────────────
|
|
248
|
+
/**
|
|
249
|
+
* The cart the link is built from. One line by default; `metadata.items` passes a real
|
|
250
|
+
* cart, which must add up to `amount` — a mismatch would charge one number while the
|
|
251
|
+
* caller booked another.
|
|
252
|
+
*/
|
|
253
|
+
#items(input) {
|
|
254
|
+
const provided = input.metadata?.items;
|
|
255
|
+
if (Array.isArray(provided) && provided.length > 0) {
|
|
256
|
+
const total = provided.reduce((sum, item) => sum + item.price * item.quantity, 0);
|
|
257
|
+
if (total !== input.amount) {
|
|
258
|
+
throw new Error(`[payments] InfinitePay checkout items add up to ${total} but the checkout amount ` +
|
|
259
|
+
`is ${input.amount}. Both are in centavos — make them agree.`);
|
|
260
|
+
}
|
|
261
|
+
return provided;
|
|
262
|
+
}
|
|
263
|
+
return [{ quantity: 1, price: input.amount, description: input.description ?? 'Checkout' }];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* The `order_nsu` — the one field InfinitePay echoes back, on the webhook and on the
|
|
267
|
+
* redirect. It is therefore where {@link CheckoutInput.externalReference} goes: without
|
|
268
|
+
* it a confirmation cannot be routed to an order. Falls back to `metadata.orderNsu`,
|
|
269
|
+
* then the idempotency key (routing, not deduplication: InfinitePay documents no
|
|
270
|
+
* idempotency, so a repeated call makes a second link), then a generated id.
|
|
271
|
+
*/
|
|
272
|
+
#orderNsu(input) {
|
|
273
|
+
return (input.externalReference ??
|
|
274
|
+
input.metadata?.orderNsu ??
|
|
275
|
+
input.idempotencyKey ??
|
|
276
|
+
randomUUID());
|
|
277
|
+
}
|
|
278
|
+
#mapPayment(payload) {
|
|
279
|
+
const amount = payload.paid_amount ?? payload.amount ?? 0;
|
|
280
|
+
const payment = {
|
|
281
|
+
// The transaction is the gateway's own id for the money; `order_nsu` is ours.
|
|
282
|
+
id: payload.transaction_nsu ?? payload.order_nsu ?? payload.invoice_slug ?? '',
|
|
283
|
+
gatewayId: payload.transaction_nsu ?? payload.order_nsu ?? payload.invoice_slug ?? '',
|
|
284
|
+
provider: this.provider,
|
|
285
|
+
// Amounts are integer centavos on both sides — no conversion, unlike the decimal-reais
|
|
286
|
+
// Brazilian gateways.
|
|
287
|
+
amount: { amount, currency: 'brl' },
|
|
288
|
+
// The webhook only fires on approval, and `payment_check` answers `paid`.
|
|
289
|
+
status: 'paid',
|
|
290
|
+
payload: payload,
|
|
291
|
+
createdAt: new Date().toISOString(),
|
|
292
|
+
paidAt: new Date().toISOString(),
|
|
293
|
+
};
|
|
294
|
+
const method = this.#mapMethod(payload.capture_method);
|
|
295
|
+
if (method !== 'unknown')
|
|
296
|
+
payment.method = method;
|
|
297
|
+
if (payload.receipt_url !== undefined)
|
|
298
|
+
payment.hostedUrl = payload.receipt_url;
|
|
299
|
+
return payment;
|
|
300
|
+
}
|
|
301
|
+
#mapMethod(captureMethod) {
|
|
302
|
+
switch (captureMethod) {
|
|
303
|
+
case 'pix':
|
|
304
|
+
return 'pix';
|
|
305
|
+
case 'credit_card':
|
|
306
|
+
case 'credit':
|
|
307
|
+
return 'card';
|
|
308
|
+
default:
|
|
309
|
+
return 'unknown';
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
async #request(path, options = {}) {
|
|
313
|
+
// No auth header: the checkout endpoints are public and identify the merchant by `handle`.
|
|
314
|
+
return httpRequest(path, {
|
|
315
|
+
baseUrl: this.#baseUrl,
|
|
316
|
+
...(options.method !== undefined ? { method: options.method } : {}),
|
|
317
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=infinitepay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infinitepay.js","sourceRoot":"","sources":["../../../src/drivers/infinitepay.ts"],"names":[],"mappings":"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"}
|