@volter/twin-stripe 2.0.38 → 3.0.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/README.md +82 -207
- package/dist/generated/pack-facts.json +94 -0
- package/dist/spec/SOURCE.md +14 -0
- package/dist/spec/fixtures3.json.gz +0 -0
- package/dist/spec/openapi.json.gz +0 -0
- package/dist/spec/patches.json +34 -0
- package/dist/spec/sources.json +378 -0
- package/dist/src/cli.js +12 -30
- package/dist/src/engine/after-payment.d.ts +9 -0
- package/dist/src/engine/after-payment.js +28 -0
- package/dist/src/engine/apps-secrets.d.ts +1 -0
- package/dist/src/engine/apps-secrets.js +3 -0
- package/dist/src/engine/balance.d.ts +5 -0
- package/dist/src/engine/balance.js +15 -0
- package/dist/src/engine/billing.d.ts +5 -0
- package/dist/src/engine/billing.js +6 -0
- package/dist/src/engine/charges.d.ts +6 -0
- package/dist/src/engine/charges.js +13 -0
- package/dist/src/engine/checkout.d.ts +24 -0
- package/dist/src/engine/checkout.js +30 -0
- package/dist/src/engine/common.d.ts +19 -0
- package/dist/src/engine/common.js +32 -0
- package/dist/src/{screens → engine}/connect-settings.d.ts +1 -7
- package/dist/src/engine/connect-settings.js +26 -0
- package/dist/src/engine/connect.d.ts +66 -0
- package/dist/src/engine/connect.js +189 -0
- package/dist/src/engine/coupons.d.ts +0 -0
- package/dist/src/engine/coupons.js +5 -0
- package/dist/src/engine/credit-notes.d.ts +1 -0
- package/dist/src/engine/credit-notes.js +5 -0
- package/dist/src/engine/customers.d.ts +12 -0
- package/dist/src/engine/customers.js +30 -0
- package/dist/src/engine/display.d.ts +14 -0
- package/dist/src/engine/display.js +16 -0
- package/dist/src/engine/disputes.d.ts +0 -0
- package/dist/src/engine/disputes.js +9 -0
- package/dist/src/engine/entitlements.d.ts +1 -0
- package/dist/src/engine/entitlements.js +4 -0
- package/dist/src/engine/ephemeral-keys.d.ts +0 -0
- package/dist/src/engine/ephemeral-keys.js +4 -0
- package/dist/src/engine/files.d.ts +18 -0
- package/dist/src/engine/files.js +33 -0
- package/dist/src/engine/front.d.ts +5 -0
- package/dist/src/engine/front.js +25 -0
- package/dist/src/engine/invoices.d.ts +24 -0
- package/dist/src/engine/invoices.js +57 -0
- package/dist/src/engine/issuing.d.ts +35 -0
- package/dist/src/engine/issuing.js +45 -0
- package/dist/src/engine/ledger.d.ts +9 -0
- package/dist/src/engine/ledger.js +9 -0
- package/dist/src/engine/oauth.d.ts +4 -0
- package/dist/src/engine/oauth.js +25 -0
- package/dist/src/engine/onboarding.d.ts +13 -0
- package/dist/src/engine/onboarding.js +42 -0
- package/dist/src/{stripe-params.d.ts → engine/params.d.ts} +20 -3
- package/dist/src/{stripe-params.js → engine/params.js} +7 -60
- package/dist/src/engine/payment-intents.d.ts +10 -0
- package/dist/src/engine/payment-intents.js +27 -0
- package/dist/src/engine/payment-links.d.ts +1 -0
- package/dist/src/engine/payment-links.js +5 -0
- package/dist/src/engine/payment-methods.d.ts +16 -0
- package/dist/src/engine/payment-methods.js +22 -0
- package/dist/src/engine/plans.d.ts +6 -0
- package/dist/src/engine/plans.js +26 -0
- package/dist/src/engine/platform.d.ts +39 -0
- package/dist/src/engine/platform.js +34 -0
- package/dist/src/engine/products.d.ts +0 -0
- package/dist/src/engine/products.js +4 -0
- package/dist/src/engine/radar.d.ts +2 -0
- package/dist/src/engine/radar.js +5 -0
- package/dist/src/engine/refunds.d.ts +1 -0
- package/dist/src/engine/refunds.js +28 -0
- package/dist/src/engine/renewals.d.ts +36 -0
- package/dist/src/engine/renewals.js +65 -0
- package/dist/src/engine/setup-intents.d.ts +1 -0
- package/dist/src/engine/setup-intents.js +4 -0
- package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +11 -39
- package/dist/src/{stripe-twin.js → engine/stripe.js} +25 -310
- package/dist/src/engine/subscription-schedules.d.ts +3 -0
- package/dist/src/engine/subscription-schedules.js +1 -0
- package/dist/src/engine/subscriptions.d.ts +12 -0
- package/dist/src/engine/subscriptions.js +31 -0
- package/dist/src/engine/tax.d.ts +7 -0
- package/dist/src/engine/tax.js +28 -0
- package/dist/src/engine/terminal.d.ts +4 -0
- package/dist/src/engine/terminal.js +20 -0
- package/dist/src/engine/test-clocks.d.ts +5 -0
- package/dist/src/engine/test-clocks.js +9 -0
- package/dist/src/engine/tokens.d.ts +7 -0
- package/dist/src/engine/tokens.js +20 -0
- package/dist/src/engine/transfers.d.ts +2 -0
- package/dist/src/engine/transfers.js +1 -0
- package/dist/src/engine/treasury.d.ts +23 -0
- package/dist/src/engine/treasury.js +45 -0
- package/dist/src/{stripe-version.js → engine/version.js} +4 -3
- package/dist/src/engine/webhook-endpoints.d.ts +1 -0
- package/dist/src/engine/webhook-endpoints.js +12 -0
- package/dist/src/engine/webhooks.d.ts +31 -0
- package/dist/src/engine/webhooks.js +68 -0
- package/dist/src/fetch.d.ts +2 -0
- package/dist/src/fetch.js +26 -0
- package/dist/src/generated/surface.gen.json +1 -1
- package/dist/src/generated/ui.gen.json +1 -1
- package/dist/src/index.d.ts +5 -14
- package/dist/src/index.js +8 -75
- package/dist/src/manifest.js +232 -758
- package/dist/src/screens/billing-portal.d.ts +3 -0
- package/dist/src/screens/{portal.js → billing-portal.js} +28 -54
- package/dist/src/screens/checkout.d.ts +2 -31
- package/dist/src/screens/checkout.js +32 -121
- package/dist/src/screens/connect-oauth.d.ts +3 -27
- package/dist/src/screens/connect-oauth.js +51 -132
- package/dist/src/screens/connect-onboarding.d.ts +3 -0
- package/dist/src/screens/{onboarding.js → connect-onboarding.js} +36 -102
- package/dist/src/screens/dashboard.d.ts +3 -0
- package/dist/src/screens/dashboard.js +117 -0
- package/dist/src/screens/shared.d.ts +27 -0
- package/dist/src/screens/shared.js +87 -0
- package/dist/src/screens/stripe-js.d.ts +3 -0
- package/dist/src/screens/stripe-js.js +135 -0
- package/dist/src/semantics/account_links.d.ts +2 -0
- package/dist/src/semantics/account_links.js +22 -0
- package/dist/src/semantics/accounts.d.ts +4 -0
- package/dist/src/semantics/accounts.js +38 -0
- package/dist/src/semantics/apps.d.ts +4 -0
- package/dist/src/semantics/{apps-secrets.js → apps.js} +14 -26
- package/dist/src/semantics/around.d.ts +2 -0
- package/dist/src/semantics/around.js +16 -0
- package/dist/src/semantics/balance.d.ts +2 -11
- package/dist/src/semantics/balance.js +3 -194
- package/dist/src/semantics/balance_transactions.d.ts +2 -0
- package/dist/src/semantics/balance_transactions.js +15 -0
- package/dist/src/semantics/billing_portal.d.ts +5 -0
- package/dist/src/semantics/billing_portal.js +42 -0
- package/dist/src/semantics/charges.d.ts +3 -28
- package/dist/src/semantics/charges.js +5 -202
- package/dist/src/semantics/checkout.d.ts +3 -20
- package/dist/src/semantics/checkout.js +8 -261
- package/dist/src/semantics/clock.d.ts +2 -0
- package/dist/src/semantics/clock.js +21 -0
- package/dist/src/semantics/coupons.d.ts +2 -6
- package/dist/src/semantics/coupons.js +2 -60
- package/dist/src/semantics/customers.d.ts +6 -6
- package/dist/src/semantics/customers.js +27 -387
- package/dist/src/semantics/disputes.d.ts +2 -2
- package/dist/src/semantics/disputes.js +3 -49
- package/dist/src/semantics/doors.d.ts +23 -0
- package/dist/src/semantics/doors.js +73 -0
- package/dist/src/semantics/entitlements.d.ts +2 -2
- package/dist/src/semantics/entitlements.js +5 -50
- package/dist/src/semantics/events.d.ts +12 -0
- package/dist/src/semantics/events.js +36 -0
- package/dist/src/semantics/index.d.ts +2 -0
- package/dist/src/semantics/index.js +107 -0
- package/dist/src/semantics/invoice_payments.d.ts +2 -0
- package/dist/src/semantics/invoice_payments.js +12 -0
- package/dist/src/semantics/invoiceitems.d.ts +3 -0
- package/dist/src/semantics/invoiceitems.js +59 -0
- package/dist/src/semantics/invoices.d.ts +16 -18
- package/dist/src/semantics/invoices.js +118 -444
- package/dist/src/semantics/payment_intents.d.ts +4 -0
- package/dist/src/semantics/payment_intents.js +79 -0
- package/dist/src/semantics/payment_methods.d.ts +5 -0
- package/dist/src/semantics/payment_methods.js +39 -0
- package/dist/src/semantics/payouts.d.ts +2 -0
- package/dist/src/semantics/payouts.js +21 -0
- package/dist/src/semantics/prices.d.ts +4 -0
- package/dist/src/semantics/prices.js +37 -0
- package/dist/src/semantics/products.d.ts +6 -2
- package/dist/src/semantics/products.js +15 -130
- package/dist/src/semantics/promotion_codes.d.ts +3 -0
- package/dist/src/semantics/promotion_codes.js +35 -0
- package/dist/src/semantics/radar.d.ts +2 -2
- package/dist/src/semantics/radar.js +5 -74
- package/dist/src/semantics/refunds.d.ts +3 -9
- package/dist/src/semantics/refunds.js +6 -192
- package/dist/src/semantics/setup_intents.d.ts +3 -0
- package/dist/src/semantics/{setup-intents.js → setup_intents.js} +10 -53
- package/dist/src/semantics/shared.d.ts +822 -47
- package/dist/src/semantics/shared.js +3044 -78
- package/dist/src/semantics/states.d.ts +531 -0
- package/dist/src/semantics/states.js +852 -0
- package/dist/src/semantics/subscription_items.d.ts +5 -0
- package/dist/src/semantics/subscription_items.js +55 -0
- package/dist/src/semantics/subscription_schedules.d.ts +4 -0
- package/dist/src/semantics/subscription_schedules.js +60 -0
- package/dist/src/semantics/subscriptions.d.ts +7 -11
- package/dist/src/semantics/subscriptions.js +44 -415
- package/dist/src/semantics/test_helpers.d.ts +6 -0
- package/dist/src/semantics/{test-clocks.js → test_helpers.js} +14 -40
- package/dist/src/semantics/transfers.d.ts +2 -2
- package/dist/src/semantics/transfers.js +6 -101
- package/dist/src/server.d.ts +7 -0
- package/dist/src/server.js +7 -0
- package/generated/pack-facts.json +94 -0
- package/package.json +10 -20
- package/spec/SOURCE.md +14 -0
- package/spec/fixtures3.json.gz +0 -0
- package/spec/openapi.json.gz +0 -0
- package/spec/patches.json +34 -0
- package/spec/sources.json +378 -0
- package/src/cli.ts +12 -26
- package/src/engine/after-payment.ts +31 -0
- package/src/engine/apps-secrets.ts +4 -0
- package/src/engine/balance.ts +33 -0
- package/src/engine/billing.ts +16 -0
- package/src/engine/charges.ts +19 -0
- package/src/engine/checkout.ts +40 -0
- package/src/engine/common.ts +47 -0
- package/src/engine/connect-settings.ts +23 -0
- package/src/engine/connect.ts +184 -0
- package/src/engine/coupons.ts +5 -0
- package/src/engine/credit-notes.ts +6 -0
- package/src/engine/customers.ts +35 -0
- package/src/engine/display.ts +19 -0
- package/src/engine/disputes.ts +9 -0
- package/src/engine/entitlements.ts +5 -0
- package/src/engine/ephemeral-keys.ts +3 -0
- package/src/engine/files.ts +41 -0
- package/src/engine/front.ts +31 -0
- package/src/engine/invoices.ts +71 -0
- package/src/engine/issuing.ts +61 -0
- package/src/engine/ledger.ts +50 -0
- package/src/engine/oauth.ts +19 -0
- package/src/engine/onboarding.ts +54 -0
- package/src/{stripe-params.ts → engine/params.ts} +8 -56
- package/src/engine/payment-intents.ts +33 -0
- package/src/engine/payment-links.ts +6 -0
- package/src/engine/payment-methods.ts +25 -0
- package/src/engine/plans.ts +42 -0
- package/src/engine/platform.ts +47 -0
- package/src/engine/products.ts +3 -0
- package/src/engine/radar.ts +6 -0
- package/src/engine/refunds.ts +29 -0
- package/src/engine/renewals.ts +73 -0
- package/src/engine/setup-intents.ts +5 -0
- package/src/{stripe-twin.ts → engine/stripe.ts} +28 -323
- package/src/engine/subscription-schedules.ts +10 -0
- package/src/engine/subscriptions.ts +40 -0
- package/src/engine/tax.ts +39 -0
- package/src/engine/terminal.ts +23 -0
- package/src/engine/test-clocks.ts +11 -0
- package/src/engine/tokens.ts +22 -0
- package/src/engine/transfers.ts +23 -0
- package/src/engine/treasury.ts +47 -0
- package/src/{stripe-version.ts → engine/version.ts} +4 -3
- package/src/engine/webhook-endpoints.ts +14 -0
- package/src/engine/webhooks.ts +72 -0
- package/src/fetch.ts +27 -0
- package/src/generated/surface.gen.json +1 -1
- package/src/generated/ui.gen.json +1 -1
- package/src/index.ts +8 -116
- package/src/manifest.ts +234 -786
- package/src/screens/{portal.tsx → billing-portal.tsx} +32 -37
- package/src/screens/checkout.tsx +33 -95
- package/src/screens/connect-oauth.tsx +64 -88
- package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +38 -82
- package/src/screens/dashboard.tsx +198 -0
- package/src/screens/shared.tsx +84 -0
- package/src/screens/stripe-js.ts +170 -0
- package/src/semantics/account_links.ts +21 -0
- package/src/semantics/accounts.ts +43 -0
- package/src/semantics/{apps-secrets.ts → apps.ts} +17 -32
- package/src/semantics/around.ts +20 -0
- package/src/semantics/balance.ts +6 -207
- package/src/semantics/balance_transactions.ts +20 -0
- package/src/semantics/billing_portal.ts +51 -0
- package/src/semantics/charges.ts +12 -211
- package/src/semantics/checkout.ts +13 -268
- package/src/semantics/clock.ts +26 -0
- package/src/semantics/coupons.ts +5 -67
- package/src/semantics/customers.ts +29 -392
- package/src/semantics/disputes.ts +9 -59
- package/src/semantics/doors.ts +80 -0
- package/src/semantics/entitlements.ts +9 -56
- package/src/semantics/events.ts +44 -0
- package/src/semantics/index.ts +111 -0
- package/src/semantics/invoice_payments.ts +18 -0
- package/src/semantics/invoiceitems.ts +59 -0
- package/src/semantics/invoices.ts +109 -443
- package/src/semantics/payment_intents.ts +83 -0
- package/src/semantics/payment_methods.ts +43 -0
- package/src/semantics/payouts.ts +23 -0
- package/src/semantics/prices.ts +42 -0
- package/src/semantics/products.ts +18 -142
- package/src/semantics/promotion_codes.ts +39 -0
- package/src/semantics/radar.ts +8 -77
- package/src/semantics/refunds.ts +9 -212
- package/src/semantics/setup_intents.ts +45 -0
- package/src/semantics/shared.ts +3092 -106
- package/src/semantics/states.ts +883 -0
- package/src/semantics/subscription_items.ts +54 -0
- package/src/semantics/subscription_schedules.ts +66 -0
- package/src/semantics/subscriptions.ts +49 -432
- package/src/semantics/{test-clocks.ts → test_helpers.ts} +23 -47
- package/src/semantics/transfers.ts +11 -131
- package/src/server.ts +8 -0
- package/client/dashboard-api.ts +0 -286
- package/client/stripe-mirror.css +0 -277
- package/client/stripe-mirror.tsx +0 -1559
- package/dist/client/dashboard-api.d.ts +0 -107
- package/dist/client/dashboard-api.js +0 -238
- package/dist/client/dashboard-api.ts +0 -286
- package/dist/client/stripe-mirror.bundle.js +0 -236
- package/dist/client/stripe-mirror.css +0 -277
- package/dist/client/stripe-mirror.d.ts +0 -134
- package/dist/client/stripe-mirror.js +0 -859
- package/dist/client/stripe-mirror.tsx +0 -1559
- package/dist/src/screens/connect-settings.js +0 -103
- package/dist/src/screens/consent-skin.d.ts +0 -4
- package/dist/src/screens/consent-skin.js +0 -18
- package/dist/src/screens/financial-connections.d.ts +0 -5
- package/dist/src/screens/financial-connections.js +0 -90
- package/dist/src/screens/identity.d.ts +0 -5
- package/dist/src/screens/identity.js +0 -86
- package/dist/src/screens/onboarding.d.ts +0 -13
- package/dist/src/screens/portal.d.ts +0 -5
- package/dist/src/screens/public-details.d.ts +0 -5
- package/dist/src/screens/public-details.js +0 -90
- package/dist/src/semantics/after-payment.d.ts +0 -22
- package/dist/src/semantics/after-payment.js +0 -99
- package/dist/src/semantics/apps-secrets.d.ts +0 -2
- package/dist/src/semantics/billing.d.ts +0 -2
- package/dist/src/semantics/billing.js +0 -220
- package/dist/src/semantics/connect.d.ts +0 -5
- package/dist/src/semantics/connect.js +0 -493
- package/dist/src/semantics/credit-notes.d.ts +0 -2
- package/dist/src/semantics/credit-notes.js +0 -172
- package/dist/src/semantics/ephemeral-keys.d.ts +0 -2
- package/dist/src/semantics/ephemeral-keys.js +0 -34
- package/dist/src/semantics/files.d.ts +0 -2
- package/dist/src/semantics/files.js +0 -125
- package/dist/src/semantics/issuing.d.ts +0 -13
- package/dist/src/semantics/issuing.js +0 -575
- package/dist/src/semantics/ledger.d.ts +0 -59
- package/dist/src/semantics/ledger.js +0 -200
- package/dist/src/semantics/payment-intents.d.ts +0 -18
- package/dist/src/semantics/payment-intents.js +0 -452
- package/dist/src/semantics/payment-links.d.ts +0 -2
- package/dist/src/semantics/payment-links.js +0 -133
- package/dist/src/semantics/payment-methods.d.ts +0 -20
- package/dist/src/semantics/payment-methods.js +0 -140
- package/dist/src/semantics/plans.d.ts +0 -5
- package/dist/src/semantics/plans.js +0 -121
- package/dist/src/semantics/platform.d.ts +0 -9
- package/dist/src/semantics/platform.js +0 -206
- package/dist/src/semantics/renewals.d.ts +0 -47
- package/dist/src/semantics/renewals.js +0 -281
- package/dist/src/semantics/setup-intents.d.ts +0 -2
- package/dist/src/semantics/subscription-schedules.d.ts +0 -2
- package/dist/src/semantics/subscription-schedules.js +0 -119
- package/dist/src/semantics/tax.d.ts +0 -2
- package/dist/src/semantics/tax.js +0 -197
- package/dist/src/semantics/terminal.d.ts +0 -5
- package/dist/src/semantics/terminal.js +0 -182
- package/dist/src/semantics/test-clocks.d.ts +0 -6
- package/dist/src/semantics/tokens.d.ts +0 -4
- package/dist/src/semantics/tokens.js +0 -44
- package/dist/src/semantics/treasury.d.ts +0 -2
- package/dist/src/semantics/treasury.js +0 -377
- package/dist/src/semantics/webhook-endpoints.d.ts +0 -3
- package/dist/src/semantics/webhook-endpoints.js +0 -85
- package/dist/src/stripe-budget.d.ts +0 -55
- package/dist/src/stripe-budget.js +0 -155
- package/dist/src/stripe-capabilities.d.ts +0 -3
- package/dist/src/stripe-capabilities.js +0 -5836
- package/dist/src/stripe-conformance.d.ts +0 -43
- package/dist/src/stripe-conformance.js +0 -105
- package/dist/src/stripe-connector.d.ts +0 -161
- package/dist/src/stripe-connector.js +0 -414
- package/dist/src/stripe-emit.d.ts +0 -2
- package/dist/src/stripe-emit.js +0 -145
- package/dist/src/stripe-events.d.ts +0 -93
- package/dist/src/stripe-events.js +0 -392
- package/dist/src/stripe-js.d.ts +0 -4
- package/dist/src/stripe-js.js +0 -70
- package/dist/src/stripe-mirror-ui.d.ts +0 -15
- package/dist/src/stripe-mirror-ui.js +0 -87
- package/dist/src/stripe-perform-harness.d.ts +0 -9
- package/dist/src/stripe-perform-harness.js +0 -26
- package/dist/src/stripe-server.d.ts +0 -33
- package/dist/src/stripe-server.js +0 -429
- package/dist/src/stripe-shared.d.ts +0 -109
- package/dist/src/stripe-shared.js +0 -276
- package/dist/src/stripe-ui-conformance.d.ts +0 -5
- package/dist/src/stripe-ui-conformance.js +0 -79
- package/dist/src/stripe-ui-structure.d.ts +0 -3
- package/dist/src/stripe-ui-structure.js +0 -168
- package/dist/test-fixtures/stripe-known-deviations.json +0 -110
- package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +0 -14
- package/dist/test-fixtures/stripe-openapi-operations.json +0 -4717
- package/dist/test-fixtures/stripe-schemas.SOURCE.md +0 -35
- package/dist/test-fixtures/stripe-schemas.json +0 -3813
- package/src/screens/connect-settings.tsx +0 -121
- package/src/screens/consent-skin.ts +0 -20
- package/src/screens/financial-connections.tsx +0 -101
- package/src/screens/identity.tsx +0 -96
- package/src/screens/public-details.tsx +0 -105
- package/src/semantics/after-payment.ts +0 -118
- package/src/semantics/billing.ts +0 -216
- package/src/semantics/connect.ts +0 -487
- package/src/semantics/credit-notes.ts +0 -168
- package/src/semantics/ephemeral-keys.ts +0 -34
- package/src/semantics/files.ts +0 -143
- package/src/semantics/issuing.ts +0 -590
- package/src/semantics/ledger.ts +0 -253
- package/src/semantics/payment-intents.ts +0 -463
- package/src/semantics/payment-links.ts +0 -148
- package/src/semantics/payment-methods.ts +0 -145
- package/src/semantics/plans.ts +0 -131
- package/src/semantics/platform.ts +0 -220
- package/src/semantics/renewals.ts +0 -279
- package/src/semantics/setup-intents.ts +0 -87
- package/src/semantics/subscription-schedules.ts +0 -129
- package/src/semantics/tax.ts +0 -220
- package/src/semantics/terminal.ts +0 -195
- package/src/semantics/tokens.ts +0 -52
- package/src/semantics/treasury.ts +0 -383
- package/src/semantics/webhook-endpoints.ts +0 -87
- package/src/stripe-budget.ts +0 -181
- package/src/stripe-capabilities.ts +0 -5651
- package/src/stripe-conformance.ts +0 -124
- package/src/stripe-connector.ts +0 -462
- package/src/stripe-emit.ts +0 -157
- package/src/stripe-events.ts +0 -434
- package/src/stripe-js.ts +0 -70
- package/src/stripe-mirror-ui.ts +0 -90
- package/src/stripe-perform-harness.ts +0 -29
- package/src/stripe-server.ts +0 -393
- package/src/stripe-shared.ts +0 -297
- package/src/stripe-ui-conformance.ts +0 -88
- package/src/stripe-ui-structure.ts +0 -182
- package/test-fixtures/stripe-known-deviations.json +0 -110
- package/test-fixtures/stripe-openapi-operations.json +0 -4717
- package/test-fixtures/stripe-schemas.json +0 -3813
- /package/dist/src/{screens → engine}/industries.d.ts +0 -0
- /package/dist/src/{screens → engine}/industries.js +0 -0
- /package/dist/src/{semantics → engine}/test-cards.d.ts +0 -0
- /package/dist/src/{semantics → engine}/test-cards.js +0 -0
- /package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -0
- /package/src/{screens → engine}/industries.ts +0 -0
- /package/src/{semantics → engine}/test-cards.ts +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { inRange } from "../engine/common.js";
|
|
2
|
+
import { BT } from "../engine/ledger.js";
|
|
3
|
+
import { commonAsOf, kept, list, mine, newest, where } from "./shared.js";
|
|
4
|
+
export async function GetBalanceTransactions(ctx) {
|
|
5
|
+
const own = mine(ctx);
|
|
6
|
+
return list(ctx, BT, where(ctx, newest(ctx, BT).filter((t) => own.has(t.id)).map((t) => commonAsOf(ctx, t)), {
|
|
7
|
+
type: (t, v) => t.type === v,
|
|
8
|
+
currency: (t, v) => t.currency === v,
|
|
9
|
+
source: (t, v) => t.source === v,
|
|
10
|
+
// an automatic payout lists the entries it paid out, its own debit among them
|
|
11
|
+
payout: (t, v) => t.source === v || kept(ctx, BT, t, '_payout') === v,
|
|
12
|
+
// a range of creation times (docs.stripe.com/api/balance_transactions/list#balance_transaction_list-created)
|
|
13
|
+
created: (t, v) => inRange(t.created, v),
|
|
14
|
+
}));
|
|
15
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { HandlerContext } from '@volter/world-core';
|
|
2
|
+
export declare function GetBillingPortalConfigurations(ctx: HandlerContext): Promise<Response>;
|
|
3
|
+
export declare function PostBillingPortalConfigurations(ctx: HandlerContext): Promise<Response>;
|
|
4
|
+
export declare function PostBillingPortalConfigurationsConfiguration(ctx: HandlerContext): Promise<Response>;
|
|
5
|
+
export declare function PostBillingPortalSessions(ctx: HandlerContext): Promise<Response>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { filled, PBC, PORTAL_FEATURES } from "../engine/files.js";
|
|
2
|
+
import { asBool, nowUnix } from "../engine/stripe.js";
|
|
3
|
+
import { actingAccount, at, created, fail, list, mergeUpdate, newest, where } from "./shared.js";
|
|
4
|
+
export async function GetBillingPortalConfigurations(ctx) {
|
|
5
|
+
return list(ctx, PBC, where(ctx, newest(ctx, PBC), {
|
|
6
|
+
active: (c, v) => asBool(c.active) === asBool(v),
|
|
7
|
+
is_default: (c, v) => asBool(c.is_default) === asBool(v),
|
|
8
|
+
}));
|
|
9
|
+
}
|
|
10
|
+
export async function PostBillingPortalConfigurations(ctx) {
|
|
11
|
+
return ctx.reply(await created(ctx, PBC, { ...ctx.params, business_profile: filled({ headline: null, privacy_policy_url: null, terms_of_service_url: null }, ctx.params.business_profile), features: filled(PORTAL_FEATURES, ctx.params.features) }, {
|
|
12
|
+
active: true, is_default: false, livemode: false,
|
|
13
|
+
login_page: { enabled: false, url: null },
|
|
14
|
+
metadata: {}, default_return_url: ctx.params.default_return_url ?? null,
|
|
15
|
+
updated: nowUnix(ctx.occurredAt),
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
export async function PostBillingPortalConfigurationsConfiguration(ctx) {
|
|
19
|
+
const id = at(ctx, 'configuration');
|
|
20
|
+
if (!ctx.get(PBC, id))
|
|
21
|
+
return ctx.notFound(PBC, id);
|
|
22
|
+
return ctx.reply(await ctx.write(PBC, id, mergeUpdate(ctx, PBC, id, { ...ctx.params, updated: nowUnix(ctx.occurredAt) }), 'billing_portal.configuration.update'));
|
|
23
|
+
}
|
|
24
|
+
// ── the customer portal ──
|
|
25
|
+
// the configuration defaults to the account's default one
|
|
26
|
+
export async function PostBillingPortalSessions(ctx) {
|
|
27
|
+
const customer = typeof ctx.params.customer === 'string' ? ctx.params.customer : '';
|
|
28
|
+
if (!customer)
|
|
29
|
+
return fail(ctx, 'Missing required param: customer.', 400, 'parameter_missing');
|
|
30
|
+
if (!ctx.row('customer', customer, { withDeleted: true }))
|
|
31
|
+
return fail(ctx, `No such customer: '${customer}'`, 404, 'resource_missing');
|
|
32
|
+
const configuration = typeof ctx.params.configuration === 'string' && ctx.params.configuration
|
|
33
|
+
? ctx.params.configuration
|
|
34
|
+
: (ctx.rowsRaw('billing_portal.configuration', { withDeleted: true }).find((c) => c.is_default)?.id ?? 'bpc_twin_default');
|
|
35
|
+
const id = ctx.mint('billing_portal.session');
|
|
36
|
+
return ctx.reply(await created(ctx, 'billing_portal.session', {
|
|
37
|
+
id, customer, configuration, return_url: ctx.params.return_url ?? null, url: `https://billing.stripe.com/p/session/${id}`,
|
|
38
|
+
locale: ctx.params.locale ?? null, on_behalf_of: ctx.params.on_behalf_of ?? null, livemode: false,
|
|
39
|
+
// the account the session was made on (Stripe-Account), whose name the portal shows (screens/billing-portal.tsx)
|
|
40
|
+
...(actingAccount(ctx) ? { _brand_account: actingAccount(ctx) } : {}),
|
|
41
|
+
}, {}));
|
|
42
|
+
}
|
|
@@ -1,28 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare function chargeBody(ctx: SemanticsContext, c: Row): Row;
|
|
5
|
-
/** A capture=false charge refunded while uncaptured: its authorization is released by the refund, as it would be
|
|
6
|
-
* "automatically refunded if uncaptured" (spec/openapi.json.gz, `capture_before`). The charge stays uncaptured and
|
|
7
|
-
* becomes refunded in full, a Refund records the release, and no money moves: none was ever received. Written as
|
|
8
|
-
* charge.refunded. Where the documentation stops and the twin decides: Stripe's basil change ("Partially capturing or
|
|
9
|
-
* canceling payments no longer creates a Refund", docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-partial-
|
|
10
|
-
* capture-and-payment-cancellation-flow) names partial capture and cancellation, not a refund asked for, so a refund
|
|
11
|
-
* still makes one; its reason is null and it has no balance transaction. Answers the Refund. */
|
|
12
|
-
export declare function releaseAuthorization(ctx: SemanticsContext, ch: Row, operationId: string, given?: Row): Promise<Row>;
|
|
13
|
-
/** A PaymentIntent's authorization released by its cancel: "For PaymentIntents with a `status` of `requires_capture`, the
|
|
14
|
-
* remaining `amount_capturable` is automatically refunded" (docs.stripe.com/api/payment_intents/cancel), and since basil
|
|
15
|
-
* a cancellation makes no Refund: "`amount_captured` will be 0 instead of `nil` in payment cancellation flows",
|
|
16
|
-
* "`amount_refunded` will no longer be updated by these actions", "`refunded` will no longer be `true` for payment
|
|
17
|
-
* cancellation flows", and no charge.refunded is sent (docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-
|
|
18
|
-
* partial-capture-and-payment-cancellation-flow). The charge stays uncaptured; nothing is written as an event. */
|
|
19
|
-
export declare function cancelAuthorization(ctx: SemanticsContext, ch: Row): Promise<Row>;
|
|
20
|
-
/** An authorized charge captured, by the charge's capture or its PaymentIntent's: what is captured credits the balance.
|
|
21
|
-
* Written as charge.captured, "Occurs whenever a previously uncaptured charge is captured" (docs.stripe.com/api/events/types).
|
|
22
|
-
* A partial capture releases the rest with no Refund and leaves amount_refunded and refunded as they were: "The following
|
|
23
|
-
* flows no longer result in a `Refund` object created and linked to the payment: Partial capture", "`amount_refunded`
|
|
24
|
-
* will no longer be updated by these actions", and "There will only be a single balance transaction for partial captures"
|
|
25
|
-
* (docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-partial-capture-and-payment-cancellation-flow).
|
|
26
|
-
* The caller has asked the machine whether it may capture. */
|
|
27
|
-
export declare function captureAuthorization(ctx: SemanticsContext, ch: Row, toCapture: number, _operationId: string): Promise<Row>;
|
|
28
|
-
export declare const charges: Record<string, Semantics>;
|
|
1
|
+
import type { HandlerContext } from '@volter/world-core';
|
|
2
|
+
export declare function GetCharges(ctx: HandlerContext): Promise<Response>;
|
|
3
|
+
export declare function GetChargesCharge(ctx: HandlerContext): Promise<Response>;
|
|
@@ -1,209 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { settleCharge } from "./ledger.js";
|
|
4
|
-
import { paymentMethodDetails } from "./payment-methods.js";
|
|
5
|
-
import { refundCharge } from "./refunds.js";
|
|
6
|
-
import { at, created, expanded, fail, finder, list, newest, path, refundDestination, send, where } from "./shared.js";
|
|
7
|
-
const chargeMissing = (ctx, id) => fail(ctx, `No such charge: '${id}'`, 404, 'resource_missing');
|
|
8
|
-
/** Every egress of a charge carries its refunds, derived from the refund rows in list order. */
|
|
9
|
-
export function chargeBody(ctx, c) {
|
|
10
|
-
const data = newest(ctx, 'refund').filter((r) => r.charge === c.id);
|
|
11
|
-
return { ...c, refunds: { object: 'list', data, has_more: false, total_count: data.length, url: `/v1/charges/${String(c.id)}/refunds` } };
|
|
12
|
-
}
|
|
13
|
-
// A charge is written as the event Stripe sends for it (docs.stripe.com/api/events/types; Stripe has no
|
|
14
|
-
// `charge.created`): charge.succeeded, "Occurs whenever a charge is successful", for one made or authorized
|
|
15
|
-
// (capture=false: its status is succeeded, captured false), and charge.failed, "Occurs whenever a failed charge attempt
|
|
16
|
-
// occurs", for a declined attempt. The twin makes no pending charge (charge.pending, "Occurs whenever a pending charge is
|
|
17
|
-
// created"): its charges settle when made.
|
|
18
|
-
/** The create's parameters as the charge keeps them: without `card`, the request's card details ("A token, like the ones
|
|
19
|
-
* returned by Stripe.js", or a hash of the number, expiry and CVC). The Charge object has no `card` property (served
|
|
20
|
-
* spec, charge); the card it was made with is its payment_method_details. Kept, it answered the card's full number and
|
|
21
|
-
* CVC back on every read of the charge. */
|
|
22
|
-
function withoutCard(params) {
|
|
23
|
-
const { card: _card, ...rest } = params;
|
|
24
|
-
return rest;
|
|
25
|
-
}
|
|
26
|
-
/** A Charges-API charge a declining test card refuses: a 402 card_error naming the failed charge Stripe records for the
|
|
27
|
-
* attempt (docs.stripe.com/declines). */
|
|
28
|
-
async function declinedCharge(ctx, decline) {
|
|
29
|
-
const params = ctx.params;
|
|
30
|
-
const failedId = ctx.mint('charge');
|
|
31
|
-
const amount = Number(params.amount) || 0;
|
|
32
|
-
await created(ctx, 'charge', { ...withoutCard(params), id: failedId }, {
|
|
33
|
-
...chargeDefaults(failedId, amount, false, ctx.occurredAt), status: 'failed', paid: false, captured: false, capture_before: null,
|
|
34
|
-
failure_code: decline.code, failure_message: decline.message, balance_transaction: null,
|
|
35
|
-
outcome: { type: 'issuer_declined', network_status: 'declined_by_network', reason: decline.decline_code ?? decline.code, risk_level: 'normal', seller_message: 'The bank did not return any further details with this decline.' },
|
|
36
|
-
payment_method_details: paymentMethodDetails(ctx, params.payment_method ?? params.source ?? params.card) ?? null,
|
|
37
|
-
}, { operation: 'charge.failed' });
|
|
38
|
-
return send(ctx, cardError(decline, { charge: failedId }));
|
|
39
|
-
}
|
|
40
|
-
/** A charge's fraud report: "user_report … Assessments reported by you. If set, possible values of are `safe` and
|
|
41
|
-
* `fraudulent`" (docs.stripe.com/api/charges/object, fraud_details). */
|
|
42
|
-
function fraudReport(ctx, existing, fd) {
|
|
43
|
-
const report = String(fd.user_report);
|
|
44
|
-
if (report !== 'safe' && report !== 'fraudulent')
|
|
45
|
-
return fail(ctx, "Invalid fraud_details[user_report]: must be 'safe' or 'fraudulent'.", 400, 'parameter_invalid_string_enum');
|
|
46
|
-
const prior = existing.fraud_details && typeof existing.fraud_details === 'object' ? existing.fraud_details : {};
|
|
47
|
-
return { user_report: report, stripe_report: prior.stripe_report ?? null };
|
|
48
|
-
}
|
|
49
|
-
const create = async (ctx) => {
|
|
50
|
-
const params = ctx.params;
|
|
51
|
-
const bad = validateMoney(params);
|
|
52
|
-
if (bad)
|
|
53
|
-
return send(ctx, bad);
|
|
54
|
-
// a declining test card answers a 402 card_error naming the failed charge Stripe records for the attempt
|
|
55
|
-
const decline = declineFor(finder(ctx), params);
|
|
56
|
-
if (decline)
|
|
57
|
-
return declinedCharge(ctx, decline);
|
|
58
|
-
// capture=false authorizes only: succeeded and paid, but not captured, with a capture deadline
|
|
59
|
-
const captured = !(params.capture !== undefined && !asBool(params.capture));
|
|
60
|
-
// the id comes first so the charge's own `refunds` list can carry its URL
|
|
61
|
-
const id = typeof params.id === 'string' && params.id ? params.id : ctx.mint('charge');
|
|
62
|
-
const amount = Number(params.amount) || 0;
|
|
63
|
-
// a captured charge credits the balance; an authorization does when it is captured
|
|
64
|
-
const card = String(params.source ?? params.payment_method ?? params.card?.number ?? '');
|
|
65
|
-
const bt = captured ? await settleCharge(ctx, id, amount, String(params.currency ?? 'usd'), card) : null;
|
|
66
|
-
const details = paymentMethodDetails(ctx, params.payment_method ?? params.source ?? params.card);
|
|
67
|
-
await created(ctx, 'charge', { ...withoutCard(params), id }, { ...chargeDefaults(id, amount, captured, ctx.occurredAt), balance_transaction: bt, payment_method_details: details ?? null }, { operation: 'charge.succeeded' });
|
|
68
|
-
await afterCharge(ctx, id, { amount, currency: String(params.currency ?? 'usd'), application_fee_amount: params.application_fee_amount, destination: params.transfer_data?.destination }, params.payment_method ?? params.source ?? params.card);
|
|
69
|
-
return ctx.reply(chargeBody(ctx, ctx.get('charge', id)));
|
|
70
|
-
};
|
|
71
|
-
// capture takes `amount` (the whole authorization by default; docs.stripe.com/api/charges/capture); the rest of a
|
|
72
|
-
// partial capture is released with no Refund (captureAuthorization). `amount_to_capture` is the
|
|
73
|
-
// PaymentIntent capture's parameter, which a charge's capture does not know.
|
|
74
|
-
const capture = async (ctx) => {
|
|
75
|
-
const id = at(ctx, 'charge');
|
|
76
|
-
const ch = ctx.get('charge', id);
|
|
77
|
-
if (!ch)
|
|
78
|
-
return chargeMissing(ctx, id);
|
|
79
|
-
const refused = ctx.legal('charge', 'captured', 'PostChargesChargeCapture', ch.captured === true ? 'true' : 'false', undefined, id);
|
|
80
|
-
if (refused)
|
|
81
|
-
return ctx.refuse(refused);
|
|
82
|
-
// "Capturing a charge will always succeed, unless the charge is already refunded, expired, captured, or an invalid
|
|
83
|
-
// capture amount is specified" (docs.stripe.com/api/charges/capture): a released authorization is refunded
|
|
84
|
-
if (ch.refunded === true)
|
|
85
|
-
return fail(ctx, `Charge ${id} has already been refunded.`, 400, 'charge_already_refunded');
|
|
86
|
-
// a canceled PaymentIntent's authorization is released: "After it's canceled, no additional charges are made by the
|
|
87
|
-
// PaymentIntent and any operations on the PaymentIntent fail with an error" (docs.stripe.com/api/payment_intents/cancel).
|
|
88
|
-
// Where the documentation stops and the twin decides: its charge's capture answers payment_intent_unexpected_state
|
|
89
|
-
// ("The PaymentIntent's state was incompatible with the operation", docs.stripe.com/error-codes), in the twin's words.
|
|
90
|
-
const intent = typeof ch.payment_intent === 'string' ? ctx.get('payment_intent', ch.payment_intent) : undefined;
|
|
91
|
-
if (intent?.status === 'canceled')
|
|
92
|
-
return fail(ctx, `Charge ${id} belongs to PaymentIntent ${String(intent.id)}, which is canceled; its authorization was released.`, 400, 'payment_intent_unexpected_state');
|
|
93
|
-
const full = Number(ch.amount) || 0;
|
|
94
|
-
const toCapture = ctx.params.amount !== undefined ? Math.min(full, Math.max(0, Math.trunc(Number(ctx.params.amount) || 0))) : full;
|
|
95
|
-
return ctx.reply(chargeBody(ctx, await captureAuthorization(ctx, ch, toCapture, 'PostChargesChargeCapture')));
|
|
96
|
-
};
|
|
97
|
-
/** A capture=false charge refunded while uncaptured: its authorization is released by the refund, as it would be
|
|
98
|
-
* "automatically refunded if uncaptured" (spec/openapi.json.gz, `capture_before`). The charge stays uncaptured and
|
|
99
|
-
* becomes refunded in full, a Refund records the release, and no money moves: none was ever received. Written as
|
|
100
|
-
* charge.refunded. Where the documentation stops and the twin decides: Stripe's basil change ("Partially capturing or
|
|
101
|
-
* canceling payments no longer creates a Refund", docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-partial-
|
|
102
|
-
* capture-and-payment-cancellation-flow) names partial capture and cancellation, not a refund asked for, so a refund
|
|
103
|
-
* still makes one; its reason is null and it has no balance transaction. Answers the Refund. */
|
|
104
|
-
export async function releaseAuthorization(ctx, ch, operationId, given = {}) {
|
|
105
|
-
const id = String(ch.id);
|
|
106
|
-
const full = Number(ch.amount) || 0;
|
|
107
|
-
if (ch.refunded !== true)
|
|
108
|
-
ctx.legal('charge', 'refunded', operationId, 'false', 'true', id);
|
|
109
|
-
const refund = await created(ctx, 'refund', { ...given, charge: id, amount: full - (Number(ch.amount_refunded) || 0), currency: String(ch.currency ?? 'usd') }, {
|
|
110
|
-
status: 'succeeded', metadata: {}, reason: null, receipt_number: null,
|
|
111
|
-
balance_transaction: null, source_transfer_reversal: null, transfer_reversal: null, ...refundDestination(ch, 'reversal'),
|
|
112
|
-
...(typeof ch.payment_intent === 'string' ? { payment_intent: ch.payment_intent } : {}),
|
|
113
|
-
});
|
|
114
|
-
await ctx.write('charge', id, { amount_refunded: full, refunded: true }, 'charge.refunded');
|
|
115
|
-
return refund;
|
|
116
|
-
}
|
|
117
|
-
/** A PaymentIntent's authorization released by its cancel: "For PaymentIntents with a `status` of `requires_capture`, the
|
|
118
|
-
* remaining `amount_capturable` is automatically refunded" (docs.stripe.com/api/payment_intents/cancel), and since basil
|
|
119
|
-
* a cancellation makes no Refund: "`amount_captured` will be 0 instead of `nil` in payment cancellation flows",
|
|
120
|
-
* "`amount_refunded` will no longer be updated by these actions", "`refunded` will no longer be `true` for payment
|
|
121
|
-
* cancellation flows", and no charge.refunded is sent (docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-
|
|
122
|
-
* partial-capture-and-payment-cancellation-flow). The charge stays uncaptured; nothing is written as an event. */
|
|
123
|
-
export async function cancelAuthorization(ctx, ch) {
|
|
124
|
-
return ctx.write('charge', String(ch.id), { amount_captured: 0 }, 'charge.authorization_released');
|
|
125
|
-
}
|
|
126
|
-
/** An authorized charge captured, by the charge's capture or its PaymentIntent's: what is captured credits the balance.
|
|
127
|
-
* Written as charge.captured, "Occurs whenever a previously uncaptured charge is captured" (docs.stripe.com/api/events/types).
|
|
128
|
-
* A partial capture releases the rest with no Refund and leaves amount_refunded and refunded as they were: "The following
|
|
129
|
-
* flows no longer result in a `Refund` object created and linked to the payment: Partial capture", "`amount_refunded`
|
|
130
|
-
* will no longer be updated by these actions", and "There will only be a single balance transaction for partial captures"
|
|
131
|
-
* (docs.stripe.com/changelog/basil/2025-03-31/remove-refund-from-partial-capture-and-payment-cancellation-flow).
|
|
132
|
-
* The caller has asked the machine whether it may capture. */
|
|
133
|
-
export async function captureAuthorization(ctx, ch, toCapture, _operationId) {
|
|
134
|
-
const id = String(ch.id);
|
|
135
|
-
const bt = toCapture > 0 ? await settleCharge(ctx, id, toCapture, String(ch.currency ?? 'usd'), String(ch.source ?? ch.payment_method ?? '')) : null;
|
|
136
|
-
return ctx.write('charge', id, { captured: true, amount_captured: toCapture, balance_transaction: bt }, 'charge.captured');
|
|
137
|
-
}
|
|
138
|
-
const listCharges = async (ctx) => {
|
|
1
|
+
import { at, chargeBody, chargeMissing, expanded, list, newest, where } from "./shared.js";
|
|
2
|
+
export async function GetCharges(ctx) {
|
|
139
3
|
const items = where(ctx, newest(ctx, 'charge'), {
|
|
140
4
|
customer: (c, v) => c.customer === v,
|
|
141
5
|
payment_intent: (c, v) => c.payment_intent === v,
|
|
142
6
|
});
|
|
143
7
|
return list(ctx, 'charge', items.map((c) => chargeBody(ctx, c)));
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const found = searchOver(newest(ctx, 'charge'), ctx.params, path(ctx));
|
|
147
|
-
const body = found.body;
|
|
148
|
-
if (found.status === 200 && Array.isArray(body.data))
|
|
149
|
-
body.data = body.data.map((c) => chargeBody(ctx, c));
|
|
150
|
-
return send(ctx, found);
|
|
151
|
-
};
|
|
152
|
-
const retrieve = async (ctx) => {
|
|
8
|
+
}
|
|
9
|
+
export async function GetChargesCharge(ctx) {
|
|
153
10
|
const c = ctx.get('charge', at(ctx, 'charge'));
|
|
154
11
|
return c ? ctx.reply(expanded(ctx, 'charge', chargeBody(ctx, c))) : chargeMissing(ctx, at(ctx, 'charge'));
|
|
155
|
-
}
|
|
156
|
-
// fraud_details[user_report] marks a charge safe or fraudulent; Stripe keeps its own stripe_report
|
|
157
|
-
const update = async (ctx) => {
|
|
158
|
-
const id = at(ctx, 'charge');
|
|
159
|
-
const existing = ctx.get('charge', id);
|
|
160
|
-
if (!existing)
|
|
161
|
-
return chargeMissing(ctx, id);
|
|
162
|
-
const fields = { ...ctx.params };
|
|
163
|
-
const fd = ctx.params.fraud_details;
|
|
164
|
-
const fraud = fd && typeof fd === 'object' && 'user_report' in fd ? fraudReport(ctx, existing, fd) : undefined;
|
|
165
|
-
if (fraud instanceof Response)
|
|
166
|
-
return fraud;
|
|
167
|
-
if (fraud)
|
|
168
|
-
fields.fraud_details = fraud;
|
|
169
|
-
return ctx.reply(chargeBody(ctx, await ctx.write('charge', id, fields, 'charge.update')));
|
|
170
|
-
};
|
|
171
|
-
// ── the charge's own refunds: listed, created and read through it; another charge's refund is not found ──
|
|
172
|
-
const refunds = async (ctx) => {
|
|
173
|
-
const id = at(ctx, 'charge');
|
|
174
|
-
if (!ctx.get('charge', id))
|
|
175
|
-
return chargeMissing(ctx, id);
|
|
176
|
-
return list(ctx, 'refund', newest(ctx, 'refund').filter((r) => r.charge === id));
|
|
177
|
-
};
|
|
178
|
-
const createRefund = async (ctx) => {
|
|
179
|
-
const ch = ctx.get('charge', at(ctx, 'charge'));
|
|
180
|
-
if (!ch)
|
|
181
|
-
return chargeMissing(ctx, at(ctx, 'charge'));
|
|
182
|
-
return refundCharge(ctx, ch, ctx.params);
|
|
183
|
-
};
|
|
184
|
-
const chargeRefund = (ctx) => {
|
|
185
|
-
if (!ctx.get('charge', at(ctx, 'charge')))
|
|
186
|
-
return chargeMissing(ctx, at(ctx, 'charge'));
|
|
187
|
-
const r = ctx.get('refund', at(ctx, 'refund'));
|
|
188
|
-
return r && r.charge === at(ctx, 'charge') ? r : fail(ctx, `No such refund: '${at(ctx, 'refund')}'`, 404, 'resource_missing');
|
|
189
|
-
};
|
|
190
|
-
const refund = async (ctx) => {
|
|
191
|
-
const r = chargeRefund(ctx);
|
|
192
|
-
return r instanceof Response ? r : ctx.reply(r);
|
|
193
|
-
};
|
|
194
|
-
const updateRefund = async (ctx) => {
|
|
195
|
-
const r = chargeRefund(ctx);
|
|
196
|
-
return r instanceof Response ? r : ctx.reply(await ctx.write('refund', at(ctx, 'refund'), ctx.params, 'refund.update'));
|
|
197
|
-
};
|
|
198
|
-
export const charges = {
|
|
199
|
-
PostCharges: create,
|
|
200
|
-
PostChargesChargeCapture: capture,
|
|
201
|
-
GetCharges: listCharges,
|
|
202
|
-
GetChargesSearch: searchCharges,
|
|
203
|
-
GetChargesCharge: retrieve,
|
|
204
|
-
PostChargesCharge: update,
|
|
205
|
-
GetChargesChargeRefunds: refunds,
|
|
206
|
-
PostChargesChargeRefunds: createRefund,
|
|
207
|
-
GetChargesChargeRefundsRefund: refund,
|
|
208
|
-
PostChargesChargeRefundsRefund: updateRefund,
|
|
209
|
-
};
|
|
12
|
+
}
|
|
@@ -1,20 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* create's own is kept: "Individual keys can be unset by posting an empty value to them. All keys can be unset by
|
|
5
|
-
* posting an empty value to `metadata`" (every metadata parameter, docs.stripe.com/api/metadata), so a key posted
|
|
6
|
-
* empty is not set, and metadata posted empty is {} (stripe-server.ts createMetadata, the top-level case). */
|
|
7
|
-
export declare function nestedMetadata(given: unknown): Row | undefined;
|
|
8
|
-
/** The card the customer entered on the page. */
|
|
9
|
-
export type EnteredCard = {
|
|
10
|
-
number: string;
|
|
11
|
-
exp_month: number;
|
|
12
|
-
exp_year: number;
|
|
13
|
-
};
|
|
14
|
-
/** A line item of a one-time Price: a stored Price, or an inline `price_data`, without `recurring` ("Line items with
|
|
15
|
-
* one-time Prices will be on the initial invoice only", docs.stripe.com/api/checkout/sessions/create). */
|
|
16
|
-
export declare function isOneTime(item: Row, priceData?: Row | null): boolean;
|
|
17
|
-
/** The customer paying on the hosted page (src/screens/checkout.tsx): the external actor's move on the
|
|
18
|
-
* session's machine, then what the payment made, linked, and the session stored complete. */
|
|
19
|
-
export declare function completeSession(ctx: SemanticsContext, id: string, existing: Row, details?: Row, card?: EnteredCard): Promise<Row | Response>;
|
|
20
|
-
export declare const checkout: Record<string, Semantics>;
|
|
1
|
+
import type { HandlerContext } from '@volter/world-core';
|
|
2
|
+
export declare function PostCheckoutSessions(ctx: HandlerContext): Promise<Response>;
|
|
3
|
+
export declare function PostCheckoutSessionsSessionExpire(ctx: HandlerContext): Promise<Response>;
|