@volter/twin-stripe 2.0.37 → 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,57 @@
|
|
|
1
|
+
export const INV = 'invoice';
|
|
2
|
+
export const linesOf = (inv) => inv.lines?.data ?? [];
|
|
3
|
+
export const sumLines = (lines) => lines.reduce((s, l) => s + (Number(l.amount) || 0), 0);
|
|
4
|
+
/** A draft's line no invoice item made (a subscription's) stays as it is when an item changes. */
|
|
5
|
+
export function unlinkedLine(line) {
|
|
6
|
+
return line;
|
|
7
|
+
}
|
|
8
|
+
/** A preview's proration for a change at proration_date. Where the documentation stops and the twin decides: half the
|
|
9
|
+
* period's charge credited as unused time and half charged as remaining time. */
|
|
10
|
+
export function prorationLines(out, subtotal, currency, now, period) {
|
|
11
|
+
const half = Math.round(subtotal / 2);
|
|
12
|
+
out.unshift({ id: 'il_twin_proration_unused', object: 'line_item', type: 'invoiceitem', amount: -half, currency, proration: true, period: { start: now, end: period }, description: 'Unused time (proration credit)' });
|
|
13
|
+
out.push({ id: 'il_twin_proration_remaining', object: 'line_item', type: 'invoiceitem', amount: half, currency, proration: true, period: { start: now, end: period }, description: 'Remaining time (proration charge)' });
|
|
14
|
+
}
|
|
15
|
+
// ── invoices ──
|
|
16
|
+
/** A draft invoice's fields before anything is on it: what a new invoice and a preview start from. */
|
|
17
|
+
export const draft = (now) => ({
|
|
18
|
+
status: 'draft', livemode: false, currency: 'usd', collection_method: 'charge_automatically',
|
|
19
|
+
auto_advance: false, attempt_count: 0, attempted: false,
|
|
20
|
+
amount_due: 0, amount_paid: 0, amount_remaining: 0, amount_overpaid: 0, amount_paid_off_stripe: 0, amount_shipping: 0,
|
|
21
|
+
subtotal: 0, total: 0, starting_balance: 0, post_payment_credit_notes_amount: 0, pre_payment_credit_notes_amount: 0,
|
|
22
|
+
period_start: now, period_end: now, default_tax_rates: [], discounts: [],
|
|
23
|
+
lines: { object: 'list', data: [], has_more: false, total_count: 0 },
|
|
24
|
+
automatic_tax: { enabled: false, liability: null, status: null },
|
|
25
|
+
status_transitions: { finalized_at: null, marked_uncollectible_at: null, paid_at: null, voided_at: null },
|
|
26
|
+
issuer: { type: 'self' },
|
|
27
|
+
payment_settings: { default_mandate: null, payment_method_options: null, payment_method_types: null },
|
|
28
|
+
// a draft has no PaymentIntent: finalize mints it
|
|
29
|
+
payment_intent: null,
|
|
30
|
+
});
|
|
31
|
+
/** Whether leaving draft mints a PaymentIntent: only a charge_automatically invoice with a balance. */
|
|
32
|
+
// "Finalizing an invoice does the following: ... It creates an incomplete payment intent for the invoice"
|
|
33
|
+
// (docs.stripe.com/invoicing/integration/workflow-transitions), whichever its collection method
|
|
34
|
+
export const collectsThroughIntent = (inv) => inv.status === 'draft' && (Number(inv.amount_due) || 0) > 0;
|
|
35
|
+
export const transitions = (inv) => inv.status_transitions ?? {};
|
|
36
|
+
/** What finalizing assigns: the invoice's `number`, the customer's invoice_prefix and a sequence
|
|
37
|
+
* (https://docs.stripe.com/api/invoices/object#invoice_object-number), and for send_invoice a
|
|
38
|
+
* `due_date` days_until_due after finalization (#invoice_object-due_date). */
|
|
39
|
+
/** A customer's invoice_prefix, "The prefix for the customer used to generate unique invoice numbers"
|
|
40
|
+
* (docs.stripe.com/api/customers/object): the twin's, from the customer's id. */
|
|
41
|
+
export const invoicePrefix = (customerId) => customerId.replace(/[^a-z0-9]/gi, '').slice(-8).toUpperCase() || 'TWIN';
|
|
42
|
+
/** An invoice's payment as Stripe answers it (docs.stripe.com/api/invoice-payment/object): the PaymentIntent that
|
|
43
|
+
* collects the invoice, open until the invoice is paid. Where the documentation stops and the twin decides: an
|
|
44
|
+
* invoice has one payment, its default, and the payment's id is the invoice's with `inpay_`. */
|
|
45
|
+
export function invoicePayment(inv) {
|
|
46
|
+
if (typeof inv.payment_intent !== 'string')
|
|
47
|
+
return undefined;
|
|
48
|
+
const paid = inv.status === 'paid';
|
|
49
|
+
const transitions = inv.status_transitions ?? {};
|
|
50
|
+
return {
|
|
51
|
+
id: `inpay_${String(inv.id).replace(/^in_/, '')}`, object: 'invoice_payment', invoice: inv.id, is_default: true, livemode: false,
|
|
52
|
+
amount_requested: Number(inv.amount_due ?? 0), amount_paid: paid ? Number(inv.amount_paid ?? inv.amount_due ?? 0) : null, currency: inv.currency,
|
|
53
|
+
created: inv.created, payment: { type: 'payment_intent', payment_intent: inv.payment_intent },
|
|
54
|
+
status: paid ? 'paid' : inv.status === 'void' ? 'canceled' : 'open',
|
|
55
|
+
status_transitions: { paid_at: paid ? (transitions.paid_at ?? null) : null, canceled_at: inv.status === 'void' ? (transitions.voided_at ?? null) : null },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const CH = "issuing.cardholder";
|
|
3
|
+
/** The id of a card's cardholder: the card answers the cardholder in full (the served spec's issuing.card.cardholder is
|
|
4
|
+
* the Cardholder object, not an id); its id is read from it for filtering and for the objects that name it by id. */
|
|
5
|
+
export declare const holderId: (c: Row) => string;
|
|
6
|
+
export declare const CARD = "issuing.card";
|
|
7
|
+
export declare const AUTH = "issuing.authorization";
|
|
8
|
+
export declare const TXN = "issuing.transaction";
|
|
9
|
+
export declare const DSP = "issuing.dispute";
|
|
10
|
+
export declare const TOK = "issuing.token";
|
|
11
|
+
export declare const PD = "issuing.personalization_design";
|
|
12
|
+
/** One request_history entry; the authorization code is derived from the request time (Stripe's is not unique either). */
|
|
13
|
+
export declare function historyEntry(o: {
|
|
14
|
+
amount: number;
|
|
15
|
+
currency: string;
|
|
16
|
+
approved: boolean;
|
|
17
|
+
reason: string;
|
|
18
|
+
reasonMessage: string | null;
|
|
19
|
+
createdSec: number;
|
|
20
|
+
merchantAmount: number;
|
|
21
|
+
merchantCurrency: string;
|
|
22
|
+
}): Row;
|
|
23
|
+
/** The test helper's default merchant, under any merchant_data the caller gives. */
|
|
24
|
+
export declare function merchantData(param: unknown): Row;
|
|
25
|
+
/** The card's stored id (an embedded card answers with its id). */
|
|
26
|
+
export declare const cardId: (auth: Row) => unknown;
|
|
27
|
+
/** The real-time window: "If Stripe doesn't receive your approve or decline response within 2 seconds, the
|
|
28
|
+
* Authorization is automatically approved or declined based on your timeout settings"
|
|
29
|
+
* (docs.stripe.com/issuing/controls/real-time-authorizations). */
|
|
30
|
+
export declare const REALTIME_WINDOW_SECONDS = 2;
|
|
31
|
+
/** Stripe's physical bundles are its catalog, not the account's: the twin serves the one its reference publishes
|
|
32
|
+
* (docs.stripe.com/api/issuing/physical_bundles: "US Visa Credit White", standard, active, a card logo required and
|
|
33
|
+
* carrier text optional). Where the documentation stops and the twin decides: the catalog is that one bundle, and its
|
|
34
|
+
* second_line (required by the served spec, absent from the example) is optional. */
|
|
35
|
+
export declare const PHYSICAL_BUNDLES: Row[];
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export const CH = 'issuing.cardholder';
|
|
2
|
+
/** The id of a card's cardholder: the card answers the cardholder in full (the served spec's issuing.card.cardholder is
|
|
3
|
+
* the Cardholder object, not an id); its id is read from it for filtering and for the objects that name it by id. */
|
|
4
|
+
export const holderId = (c) => (typeof c.cardholder === 'string' ? c.cardholder : String(c.cardholder?.id ?? ''));
|
|
5
|
+
export const CARD = 'issuing.card';
|
|
6
|
+
export const AUTH = 'issuing.authorization';
|
|
7
|
+
export const TXN = 'issuing.transaction';
|
|
8
|
+
export const DSP = 'issuing.dispute';
|
|
9
|
+
export const TOK = 'issuing.token';
|
|
10
|
+
export const PD = 'issuing.personalization_design';
|
|
11
|
+
/** One request_history entry; the authorization code is derived from the request time (Stripe's is not unique either). */
|
|
12
|
+
export function historyEntry(o) {
|
|
13
|
+
return {
|
|
14
|
+
amount: o.amount, amount_details: null, approved: o.approved,
|
|
15
|
+
authorization_code: o.approved ? `S${String(100000 + (o.createdSec % 900000))}` : null,
|
|
16
|
+
created: o.createdSec, currency: o.currency,
|
|
17
|
+
merchant_amount: o.merchantAmount, merchant_currency: o.merchantCurrency,
|
|
18
|
+
network_risk_score: null, reason: o.reason, reason_message: o.reasonMessage,
|
|
19
|
+
requested_at: o.createdSec,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/** The test helper's default merchant, under any merchant_data the caller gives. */
|
|
23
|
+
export function merchantData(param) {
|
|
24
|
+
const base = {
|
|
25
|
+
category: 'general', category_code: '5399', city: 'San Francisco', country: 'US',
|
|
26
|
+
name: 'Twin Test Merchant', network_id: '1234567890', postal_code: '94103', state: 'CA',
|
|
27
|
+
tax_id: null, terminal_id: null, url: null,
|
|
28
|
+
};
|
|
29
|
+
if (param && typeof param === 'object' && !Array.isArray(param))
|
|
30
|
+
Object.assign(base, param);
|
|
31
|
+
return base;
|
|
32
|
+
}
|
|
33
|
+
/** The card's stored id (an embedded card answers with its id). */
|
|
34
|
+
export const cardId = (auth) => (auth.card && typeof auth.card === 'object' ? auth.card.id : auth.card);
|
|
35
|
+
/** The real-time window: "If Stripe doesn't receive your approve or decline response within 2 seconds, the
|
|
36
|
+
* Authorization is automatically approved or declined based on your timeout settings"
|
|
37
|
+
* (docs.stripe.com/issuing/controls/real-time-authorizations). */
|
|
38
|
+
export const REALTIME_WINDOW_SECONDS = 2;
|
|
39
|
+
/** Stripe's physical bundles are its catalog, not the account's: the twin serves the one its reference publishes
|
|
40
|
+
* (docs.stripe.com/api/issuing/physical_bundles: "US Visa Credit White", standard, active, a card logo required and
|
|
41
|
+
* carrier text optional). Where the documentation stops and the twin decides: the catalog is that one bundle, and its
|
|
42
|
+
* second_line (required by the served spec, absent from the example) is optional. */
|
|
43
|
+
export const PHYSICAL_BUNDLES = [
|
|
44
|
+
{ id: 'ics_NLuXJPDYSTjFON', object: 'issuing.physical_bundle', livemode: false, name: 'US Visa Credit White', features: { card_logo: 'required', carrier_text: 'optional', second_line: 'optional' }, status: 'active', type: 'standard' },
|
|
45
|
+
];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const BT = "balance_transaction";
|
|
3
|
+
export declare const DAY = 86400;
|
|
4
|
+
/** A ledger entry's mark: available at once, its balance.available not yet sent (settleDueEntries). */
|
|
5
|
+
export declare const UNSENT = "_availableUnsent";
|
|
6
|
+
export declare const BYPASS_NUMBERS: Set<string>;
|
|
7
|
+
export declare const feeOf: (amount: number) => number;
|
|
8
|
+
/** Whether a stored ledger entry is on this account's balance (undefined: the platform's). */
|
|
9
|
+
export declare const onAccount: (t: Row, account: string | undefined) => boolean;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BYPASS_PENDING_CARDS } from "./test-cards.js";
|
|
2
|
+
export const BT = 'balance_transaction';
|
|
3
|
+
export const DAY = 86_400;
|
|
4
|
+
/** A ledger entry's mark: available at once, its balance.available not yet sent (settleDueEntries). */
|
|
5
|
+
export const UNSENT = '_availableUnsent';
|
|
6
|
+
export const BYPASS_NUMBERS = new Set(Object.values(BYPASS_PENDING_CARDS).map((c) => c.number));
|
|
7
|
+
export const feeOf = (amount) => (amount > 0 ? Math.round(amount * 0.029) + 30 : 0);
|
|
8
|
+
/** Whether a stored ledger entry is on this account's balance (undefined: the platform's). */
|
|
9
|
+
export const onAccount = (t, account) => (typeof t._account === 'string' ? t._account : undefined) === account;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** A key shown the way Stripe's errors show one: its prefix and its last four. */
|
|
2
|
+
export declare const redactKey: (key: string) => string;
|
|
3
|
+
/** The API key a request carries: Bearer, or Basic's user (`curl -u sk_…:`, docs.stripe.com/api/authentication). */
|
|
4
|
+
export declare function requestKey(request: Request): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// A connected account's OAuth connection to the platform (../screens/connect-oauth.tsx makes it), as the API reads it:
|
|
2
|
+
// whether it was revoked, which account an OAuth key acts as, and a key shown as Stripe's errors show one.
|
|
3
|
+
/** A key shown the way Stripe's errors show one: its prefix and its last four. */
|
|
4
|
+
export const redactKey = (key) => {
|
|
5
|
+
const prefix = /^(sk|rk|pk)_(test|live)_/.exec(key)?.[0] ?? '';
|
|
6
|
+
const rest = key.slice(prefix.length);
|
|
7
|
+
return rest.length > 4 ? `${prefix}${'*'.repeat(rest.length - 4)}${rest.slice(-4)}` : `${prefix}${'*'.repeat(rest.length)}`;
|
|
8
|
+
};
|
|
9
|
+
/** The API key a request carries: Bearer, or Basic's user (`curl -u sk_…:`, docs.stripe.com/api/authentication). */
|
|
10
|
+
export function requestKey(request) {
|
|
11
|
+
const header = request.headers.get('authorization') ?? '';
|
|
12
|
+
const bearer = /^bearer\s+(\S+)/i.exec(header)?.[1];
|
|
13
|
+
if (bearer)
|
|
14
|
+
return bearer;
|
|
15
|
+
const basic = /^basic\s+(\S+)/i.exec(header)?.[1];
|
|
16
|
+
if (basic) {
|
|
17
|
+
try {
|
|
18
|
+
return atob(basic).split(':')[0] ?? '';
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type Row = Record<string, unknown>;
|
|
2
|
+
export declare const OFFERED: Set<string>;
|
|
3
|
+
export type Form = Record<string, string>;
|
|
4
|
+
export type Kind = 'company' | 'individual';
|
|
5
|
+
export declare const has: (v: Form, k: string) => boolean;
|
|
6
|
+
export declare const dobPart: (v: Form, i: number) => boolean;
|
|
7
|
+
/** Each requirement Stripe names, the form's answer that meets it, and which of the two sets it belongs to. */
|
|
8
|
+
export declare const REQUIREMENTS: Array<[string, (v: Form) => boolean, Kind[]]>;
|
|
9
|
+
/** The set an account onboards against: the two US sets the twin models, or none. */
|
|
10
|
+
export declare function kindOf(account: Row): Kind | undefined;
|
|
11
|
+
/** What an account of this kind still owes, given the form's answers (none: all of it). */
|
|
12
|
+
export declare function currentlyDue(kind: Kind, v?: Form): string[];
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// What a connected account owes Stripe before it can take payments (the requirements its onboarding collects,
|
|
2
|
+
// ../screens/connect-onboarding.tsx), as the Accounts API reports them (`requirements.currently_due`): the two US sets the twin
|
|
3
|
+
// models, a company's and an individual's.
|
|
4
|
+
import { INDUSTRIES as MCCS } from "./industries.js";
|
|
5
|
+
export const OFFERED = new Set(MCCS.map(([mcc]) => mcc));
|
|
6
|
+
export const has = (v, k) => (v[k] ?? '').trim() !== '';
|
|
7
|
+
export const dobPart = (v, i) => /^\d{4}-\d{2}-\d{2}$/.test(v.dob ?? '') && Number((v.dob ?? '').split('-')[i]) > 0;
|
|
8
|
+
/** Each requirement Stripe names, the form's answer that meets it, and which of the two sets it belongs to. */
|
|
9
|
+
export const REQUIREMENTS = [
|
|
10
|
+
['business_profile.mcc', (v) => OFFERED.has((v.mcc ?? '').trim()), ['company', 'individual']],
|
|
11
|
+
['business_profile.url', (v) => has(v, 'url'), ['company', 'individual']],
|
|
12
|
+
['settings.payments.statement_descriptor', (v) => has(v, 'statement_descriptor'), ['company', 'individual']],
|
|
13
|
+
['company.name', (v) => has(v, 'company_name'), ['company']],
|
|
14
|
+
['company.tax_id', (v) => has(v, 'company_tax_id'), ['company']],
|
|
15
|
+
['company.phone', (v) => has(v, 'company_phone'), ['company']],
|
|
16
|
+
['company.address.line1', (v) => has(v, 'company_line1'), ['company']],
|
|
17
|
+
['company.address.city', (v) => has(v, 'company_city'), ['company']],
|
|
18
|
+
['company.address.state', (v) => has(v, 'company_state'), ['company']],
|
|
19
|
+
['company.address.postal_code', (v) => has(v, 'company_postal_code'), ['company']],
|
|
20
|
+
['company.owners_provided', (v) => v.owners_provided === 'provided', ['company']],
|
|
21
|
+
['owners.first_name', (v) => has(v, 'owner_first_name'), ['company']],
|
|
22
|
+
['owners.last_name', (v) => has(v, 'owner_last_name'), ['company']],
|
|
23
|
+
['owners.email', (v) => has(v, 'owner_email'), ['company']],
|
|
24
|
+
...['first_name', 'last_name', 'email', 'phone'].flatMap((f) => [[`representative.${f}`, (v) => has(v, f), ['company']], [`individual.${f}`, (v) => has(v, f), ['individual']]]),
|
|
25
|
+
...['day', 'month', 'year'].flatMap((f, i) => [[`representative.dob.${f}`, (v) => dobPart(v, 2 - i), ['company']], [`individual.dob.${f}`, (v) => dobPart(v, 2 - i), ['individual']]]),
|
|
26
|
+
...['line1', 'city', 'state', 'postal_code'].flatMap((f) => [[`representative.address.${f}`, (v) => has(v, f), ['company']], [`individual.address.${f}`, (v) => has(v, f), ['individual']]]),
|
|
27
|
+
['representative.relationship.title', (v) => has(v, 'title'), ['company']],
|
|
28
|
+
['representative.ssn_last_4', (v) => /^\d{4}$/.test(v.ssn_last_4 ?? ''), ['company']],
|
|
29
|
+
['individual.ssn_last_4', (v) => /^\d{4}$/.test(v.ssn_last_4 ?? ''), ['individual']],
|
|
30
|
+
['tos_acceptance.date', (v) => v.tos === 'accepted', ['company', 'individual']],
|
|
31
|
+
['tos_acceptance.ip', (v) => v.tos === 'accepted', ['company', 'individual']],
|
|
32
|
+
['external_account', (v) => has(v, 'routing_number') && has(v, 'account_number'), ['company', 'individual']],
|
|
33
|
+
];
|
|
34
|
+
/** The set an account onboards against: the two US sets the twin models, or none. */
|
|
35
|
+
export function kindOf(account) {
|
|
36
|
+
const type = account.business_type ?? 'individual';
|
|
37
|
+
return (account.country ?? 'US') === 'US' && (type === 'company' || type === 'individual') ? type : undefined;
|
|
38
|
+
}
|
|
39
|
+
/** What an account of this kind still owes, given the form's answers (none: all of it). */
|
|
40
|
+
export function currentlyDue(kind, v = {}) {
|
|
41
|
+
return REQUIREMENTS.filter(([, met, kinds]) => kinds.includes(kind) && !met(v)).map(([req]) => req);
|
|
42
|
+
}
|
|
@@ -1,8 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
type Param = {
|
|
2
|
+
name: string;
|
|
3
|
+
required?: boolean;
|
|
4
|
+
};
|
|
5
|
+
type Op = {
|
|
6
|
+
id: string;
|
|
7
|
+
method: string;
|
|
8
|
+
query?: Param[];
|
|
9
|
+
body?: Param[];
|
|
10
|
+
};
|
|
11
|
+
export declare const OPS: Map<string, Op>;
|
|
12
|
+
/** Parameters Stripe documents outside its published spec, each with the page that documents it. */
|
|
13
|
+
export declare const DOCUMENTED: Record<string, string[]>;
|
|
2
14
|
/** The version that removed payment_method_types from the intents: a caller pinned to it or later is refused. */
|
|
3
15
|
export declare const METHOD_TYPES_REMOVED_IN = "2026-08-26.preview";
|
|
4
16
|
/** Whether a pinned version is at or after the removal: versions order by their date (YYYY-MM-DD). */
|
|
5
17
|
export declare const methodTypesRemoved: (pinned: string) => boolean;
|
|
18
|
+
export declare const REMOVED_TYPES: Set<string>;
|
|
19
|
+
export declare const TYPED: Set<string>;
|
|
6
20
|
/** The payment method types there are: the PaymentMethod object's `type` in the served spec. */
|
|
7
21
|
export declare const PAYMENT_METHOD_TYPES: readonly string[];
|
|
8
22
|
/** The payment method types a Checkout Session takes: the vendored spec's (2026-09-30.endive) PostCheckoutSessions
|
|
@@ -10,5 +24,8 @@ export declare const PAYMENT_METHOD_TYPES: readonly string[];
|
|
|
10
24
|
* payment methods (e.g., `card`) this Checkout Session can accept"). It holds no in-person type (card_present,
|
|
11
25
|
* interac_present) and no `custom`. The surface keeps no request enums, so it is copied here. */
|
|
12
26
|
export declare const CHECKOUT_METHOD_TYPES: readonly string[];
|
|
13
|
-
/**
|
|
14
|
-
export declare
|
|
27
|
+
/** The create page each intent's refusal links to. */
|
|
28
|
+
export declare const TYPES_DOC: Record<string, string>;
|
|
29
|
+
/** An enum's values as Stripe lists them in a refusal: "a, b, or c". */
|
|
30
|
+
export declare const oneOf: (values: readonly string[]) => string;
|
|
31
|
+
export {};
|
|
@@ -9,13 +9,10 @@
|
|
|
9
9
|
// Where the evidence stops: the check knows only the served version's parameters (the spec's, surface.version). A
|
|
10
10
|
// request pinning an earlier version with Stripe-Version is not checked, since the pack holds no earlier spec, beyond
|
|
11
11
|
// the values of the payment_method_types it still takes (PAYMENT_METHOD_TYPES below); nested parameters are not checked.
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
import { manifest } from "./manifest.js";
|
|
15
|
-
import { SERVED_VERSION } from "./stripe-version.js";
|
|
16
|
-
const OPS = new Map(surface.operations.map((o) => [o.id, o]));
|
|
12
|
+
import surface from '../generated/surface.gen.json' with { type: 'json' };
|
|
13
|
+
export const OPS = new Map(surface.operations.map((o) => [o.id, o]));
|
|
17
14
|
/** Parameters Stripe documents outside its published spec, each with the page that documents it. */
|
|
18
|
-
const DOCUMENTED = {
|
|
15
|
+
export const DOCUMENTED = {
|
|
19
16
|
// a top-up into the Issuing balance (docs.stripe.com/issuing/funding/balance: "destination_balance=issuing")
|
|
20
17
|
PostTopups: ['destination_balance'],
|
|
21
18
|
};
|
|
@@ -45,8 +42,8 @@ const DOCUMENTED = {
|
|
|
45
42
|
export const METHOD_TYPES_REMOVED_IN = '2026-08-26.preview';
|
|
46
43
|
/** Whether a pinned version is at or after the removal: versions order by their date (YYYY-MM-DD). */
|
|
47
44
|
export const methodTypesRemoved = (pinned) => pinned.slice(0, 10) >= METHOD_TYPES_REMOVED_IN.slice(0, 10);
|
|
48
|
-
const REMOVED_TYPES = new Set(['PostPaymentIntents', 'PostPaymentIntentsIntent', 'PostPaymentIntentsIntentConfirm', 'PostSetupIntents', 'PostSetupIntentsIntent']);
|
|
49
|
-
const TYPED = new Set([...REMOVED_TYPES, 'PostCheckoutSessions']);
|
|
45
|
+
export const REMOVED_TYPES = new Set(['PostPaymentIntents', 'PostPaymentIntentsIntent', 'PostPaymentIntentsIntentConfirm', 'PostSetupIntents', 'PostSetupIntentsIntent']);
|
|
46
|
+
export const TYPED = new Set([...REMOVED_TYPES, 'PostCheckoutSessions']);
|
|
50
47
|
/** The payment method types there are: the PaymentMethod object's `type` in the served spec. */
|
|
51
48
|
export const PAYMENT_METHOD_TYPES = surface.resources.find((r) => r.name === 'payment_method')?.fields.find((f) => f.name === 'type')?.enum ?? [];
|
|
52
49
|
/** The payment method types a Checkout Session takes: the vendored spec's (2026-09-30.endive) PostCheckoutSessions
|
|
@@ -55,59 +52,9 @@ export const PAYMENT_METHOD_TYPES = surface.resources.find((r) => r.name === 'pa
|
|
|
55
52
|
* interac_present) and no `custom`. The surface keeps no request enums, so it is copied here. */
|
|
56
53
|
export const CHECKOUT_METHOD_TYPES = ['acss_debit', 'affirm', 'afterpay_clearpay', 'alipay', 'alma', 'amazon_pay', 'au_becs_debit', 'bacs_debit', 'bancontact', 'billie', 'bizum', 'blik', 'boleto', 'card', 'cashapp', 'crypto', 'customer_balance', 'eps', 'fpx', 'giropay', 'grabpay', 'ideal', 'kakao_pay', 'klarna', 'konbini', 'kr_card', 'link', 'mb_way', 'mobilepay', 'multibanco', 'naver_pay', 'nz_bank_account', 'oxxo', 'p24', 'pay_by_bank', 'payco', 'paynow', 'paypal', 'paypay', 'payto', 'pix', 'promptpay', 'revolut_pay', 'samsung_pay', 'satispay', 'scalapay', 'sepa_debit', 'sequra', 'sofort', 'sunbit', 'swish', 'twint', 'upi', 'us_bank_account', 'wechat_pay', 'zip'];
|
|
57
54
|
/** The create page each intent's refusal links to. */
|
|
58
|
-
const TYPES_DOC = {
|
|
55
|
+
export const TYPES_DOC = {
|
|
59
56
|
payment_intents: 'https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_types',
|
|
60
57
|
setup_intents: 'https://stripe.com/docs/api/setup_intents/create#create_setup_intent-payment_method_types',
|
|
61
58
|
};
|
|
62
59
|
/** An enum's values as Stripe lists them in a refusal: "a, b, or c". */
|
|
63
|
-
const oneOf = (values) => (values.length > 1 ? `${values.slice(0, -1).join(', ')}, or ${values.at(-1)}` : values.join(''));
|
|
64
|
-
/** An earlier version's payment_method_types refused: the first value that names no payment method type the
|
|
65
|
-
* operation takes, in the intent's words or (a Checkout Session) the enum's. */
|
|
66
|
-
function unknownMethodType(opId, given) {
|
|
67
|
-
const values = Array.isArray(given) ? given : given && typeof given === 'object' ? Object.values(given) : [given];
|
|
68
|
-
const checkout = opId === 'PostCheckoutSessions';
|
|
69
|
-
const known = checkout ? CHECKOUT_METHOD_TYPES : PAYMENT_METHOD_TYPES;
|
|
70
|
-
const i = values.findIndex((v) => !known.includes(String(v)));
|
|
71
|
-
if (i < 0)
|
|
72
|
-
return undefined;
|
|
73
|
-
if (checkout) {
|
|
74
|
-
const param = `payment_method_types[${i}]`;
|
|
75
|
-
return vendorError(manifest, { status: 400, param, message: `Invalid ${param}: must be one of ${oneOf(known)}` });
|
|
76
|
-
}
|
|
77
|
-
const doc = TYPES_DOC[opId.startsWith('PostSetupIntents') ? 'setup_intents' : 'payment_intents'];
|
|
78
|
-
return vendorError(manifest, { status: 400, param: 'payment_method_types', message: `The payment method type "${String(values[i])}" is invalid. See ${doc} for the full list of supported payment method types.` });
|
|
79
|
-
}
|
|
80
|
-
/** payment_method_types refused where the caller's version removed it. */
|
|
81
|
-
const noLongerSupported = (version) => vendorError(manifest, { status: 400, code: 'payment_method_types_no_longer_supported', param: 'payment_method_types', message: `payment_method_types is no longer supported in API version ${version}. Use allowed_payment_method_types, or dynamic payment methods, instead.` });
|
|
82
|
-
/** Stripe's refusal of a request whose top-level parameters the operation does not take, or undefined. */
|
|
83
|
-
export async function refuseParameters(call) {
|
|
84
|
-
const op = OPS.get(call.operation.id);
|
|
85
|
-
if (!op)
|
|
86
|
-
return undefined;
|
|
87
|
-
const pinned = call.request.headers.get('stripe-version');
|
|
88
|
-
if (pinned && pinned < SERVED_VERSION) {
|
|
89
|
-
if (!TYPED.has(op.id))
|
|
90
|
-
return undefined;
|
|
91
|
-
const earlier = await readParams(manifest, call.request.clone(), call.operation);
|
|
92
|
-
if (earlier.payment_method_types === undefined)
|
|
93
|
-
return undefined;
|
|
94
|
-
if (REMOVED_TYPES.has(op.id) && methodTypesRemoved(pinned))
|
|
95
|
-
return noLongerSupported(pinned);
|
|
96
|
-
return unknownMethodType(op.id, earlier.payment_method_types);
|
|
97
|
-
}
|
|
98
|
-
const method = call.request.method.toUpperCase();
|
|
99
|
-
const known = new Set([...(op.query ?? []), ...(op.body ?? [])].map((p) => p.name).concat(DOCUMENTED[op.id] ?? []));
|
|
100
|
-
const params = await readParams(manifest, call.request.clone(), call.operation);
|
|
101
|
-
if (REMOVED_TYPES.has(op.id) && params.payment_method_types !== undefined)
|
|
102
|
-
return noLongerSupported(pinned ?? SERVED_VERSION);
|
|
103
|
-
for (const name of Object.keys(params)) {
|
|
104
|
-
if (!known.has(name))
|
|
105
|
-
return vendorError(manifest, { status: 400, code: 'parameter_unknown', param: name, message: `Received unknown parameter: ${name}` });
|
|
106
|
-
}
|
|
107
|
-
const required = method === 'GET' || method === 'DELETE' ? (op.query ?? []) : (op.body ?? []);
|
|
108
|
-
for (const p of required) {
|
|
109
|
-
if (p.required && params[p.name] === undefined)
|
|
110
|
-
return vendorError(manifest, { status: 400, code: 'parameter_missing', param: p.name, message: `Missing required param: ${p.name}.` });
|
|
111
|
-
}
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
60
|
+
export const oneOf = (values) => (values.length > 1 ? `${values.slice(0, -1).join(', ')}, or ${values.at(-1)}` : values.join(''));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const PI = "payment_intent";
|
|
3
|
+
/** Bookkeeping: the intents whose caller named the methods (payment_method_types, allowed_payment_method_types) on
|
|
4
|
+
* create. The twin's default list (['card']) stands for Stripe's choice and restricts nothing, so only a named list
|
|
5
|
+
* refuses a confirm with a method of another type. Kept apart from the intent: a `_` subject is never pushed
|
|
6
|
+
* (world-core isTwinBookkeeping). */
|
|
7
|
+
export declare const TYPES_GIVEN = "_payment_intent_types_given";
|
|
8
|
+
/** What every charge an intent makes carries of it: its transfer_group, which "identifies the resulting payment as part
|
|
9
|
+
* of a group" (docs.stripe.com/api/payment_intents/object), its description and its metadata. */
|
|
10
|
+
export declare function intentCarries(pi: Row): Row;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export const PI = 'payment_intent';
|
|
2
|
+
/** Bookkeeping: the intents whose caller named the methods (payment_method_types, allowed_payment_method_types) on
|
|
3
|
+
* create. The twin's default list (['card']) stands for Stripe's choice and restricts nothing, so only a named list
|
|
4
|
+
* refuses a confirm with a method of another type. Kept apart from the intent: a `_` subject is never pushed
|
|
5
|
+
* (world-core isTwinBookkeeping). */
|
|
6
|
+
export const TYPES_GIVEN = '_payment_intent_types_given';
|
|
7
|
+
// ── THE MONEY MODEL, continued: a succeeded intent has a Charge ──
|
|
8
|
+
//
|
|
9
|
+
// Real Stripe always materializes a Charge when a PaymentIntent succeeds and points the intent's
|
|
10
|
+
// `latest_charge` at it: the charge is what a refund lands on, so an intent that succeeds without
|
|
11
|
+
// one cannot answer "refund this payment" at all. Idempotent against a repeated confirm: an intent
|
|
12
|
+
// that already names a successful charge keeps it (a second one would double the money collected); a
|
|
13
|
+
// declined attempt's failed charge is history, and the payment that succeeds makes its own. The id is
|
|
14
|
+
// returned so the caller folds `latest_charge` into the same intent write (one write, one event). The
|
|
15
|
+
// charge is written as the event Stripe sends for it, `charge.succeeded` ("Occurs whenever a charge is
|
|
16
|
+
// successful", docs.stripe.com/api/events/types); Stripe has no `charge.created`.
|
|
17
|
+
/** What every charge an intent makes carries of it: its transfer_group, which "identifies the resulting payment as part
|
|
18
|
+
* of a group" (docs.stripe.com/api/payment_intents/object), its description and its metadata. */
|
|
19
|
+
export function intentCarries(pi) {
|
|
20
|
+
return {
|
|
21
|
+
...(typeof pi.transfer_group === 'string' ? { transfer_group: pi.transfer_group } : {}),
|
|
22
|
+
...(typeof pi.description === 'string' ? { description: pi.description } : {}),
|
|
23
|
+
// "When a PaymentIntent creates a Charge, the metadata copies to the Charge in a one-time snapshot"
|
|
24
|
+
// (docs.stripe.com/metadata, "Copy metadata to another object")
|
|
25
|
+
...(pi.metadata && typeof pi.metadata === 'object' ? { metadata: { ...pi.metadata } } : {}),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PL = "payment_link";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Payment Link and Quote semantics. Both carry line items resolved from existing prices. A payment
|
|
2
|
+
// link is a reusable hosted-checkout URL, active until switched off; a quote moves draft → open
|
|
3
|
+
// (finalize) → accepted or canceled, the machine in ../manifest.ts. Link retrieve and update
|
|
4
|
+
// (`active`, its machine), quote retrieve and the quote list are the derived core's.
|
|
5
|
+
export const PL = 'payment_link';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const PM = "payment_method";
|
|
3
|
+
export declare const noBilling: {
|
|
4
|
+
address: null;
|
|
5
|
+
email: null;
|
|
6
|
+
name: null;
|
|
7
|
+
phone: null;
|
|
8
|
+
};
|
|
9
|
+
export declare const TEST_PM_CARDS: Record<string, {
|
|
10
|
+
brand: string;
|
|
11
|
+
number: string;
|
|
12
|
+
}>;
|
|
13
|
+
/** Attach a payment method to a customer (both known to exist or be attachable): a stored one moves to the
|
|
14
|
+
* customer; a test name mints a new PaymentMethod on the customer carrying that card's outcome. */
|
|
15
|
+
/** The card a test name (pm_card_*, tok_*) stands for, never stored as a PaymentMethod (docs.stripe.com/testing#cards). */
|
|
16
|
+
export declare function testCardOf(ref: string): Row | undefined;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// PaymentMethod semantics: a PaymentMethod is created detached, attached to a customer, and
|
|
2
|
+
// detached again. The list is the derived core's.
|
|
3
|
+
import { paymentMethodSubObject } from "./stripe.js";
|
|
4
|
+
import { AFTER_SUCCESS_CARDS } from "./after-payment.js";
|
|
5
|
+
export const PM = 'payment_method';
|
|
6
|
+
export const noBilling = { address: null, email: null, name: null, phone: null };
|
|
7
|
+
export const TEST_PM_CARDS = {
|
|
8
|
+
...AFTER_SUCCESS_CARDS,
|
|
9
|
+
pm_card_mastercard: { brand: 'mastercard', number: '5555555555554444' },
|
|
10
|
+
pm_card_amex: { brand: 'amex', number: '378282246310005' },
|
|
11
|
+
pm_card_discover: { brand: 'discover', number: '6011111111111117' },
|
|
12
|
+
};
|
|
13
|
+
/** Attach a payment method to a customer (both known to exist or be attachable): a stored one moves to the
|
|
14
|
+
* customer; a test name mints a new PaymentMethod on the customer carrying that card's outcome. */
|
|
15
|
+
/** The card a test name (pm_card_*, tok_*) stands for, never stored as a PaymentMethod (docs.stripe.com/testing#cards). */
|
|
16
|
+
export function testCardOf(ref) {
|
|
17
|
+
const name = ref.replace(/^tok_/, 'pm_card_');
|
|
18
|
+
if (!name.startsWith('pm_card_'))
|
|
19
|
+
return undefined;
|
|
20
|
+
const test = TEST_PM_CARDS[name] ?? { brand: 'visa', number: '4242424242424242' };
|
|
21
|
+
return { ...paymentMethodSubObject('card', { card: { number: test.number } }).card, brand: test.brand };
|
|
22
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const INTERVALS: Set<string>;
|
|
3
|
+
/** A recurring price in the plan object's shape (the create page's example response). */
|
|
4
|
+
export declare function planOf(price: Row): Row;
|
|
5
|
+
/** Metadata after an update: an empty value unsets the key, an empty `metadata` unsets them all. */
|
|
6
|
+
export declare function metadataAfter(was: Row, given: unknown): Row;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const INTERVALS = new Set(['day', 'week', 'month', 'year']);
|
|
2
|
+
/** A recurring price in the plan object's shape (the create page's example response). */
|
|
3
|
+
export function planOf(price) {
|
|
4
|
+
const r = (price.recurring ?? {});
|
|
5
|
+
const amount = typeof price.unit_amount === 'number' ? price.unit_amount : null;
|
|
6
|
+
const decimal = typeof price.unit_amount_decimal === 'string' ? price.unit_amount_decimal : amount === null ? null : String(amount);
|
|
7
|
+
return {
|
|
8
|
+
id: price.id, object: 'plan', active: price.active ?? true, amount, amount_decimal: decimal,
|
|
9
|
+
billing_scheme: price.billing_scheme ?? 'per_unit', created: price.created, currency: price.currency, interval: r.interval ?? null,
|
|
10
|
+
interval_count: r.interval_count ?? 1, livemode: false, metadata: price.metadata ?? {}, meter: r.meter ?? null, nickname: price.nickname ?? null,
|
|
11
|
+
product: price.product, tiers_mode: price.tiers_mode ?? null, transform_usage: price.transform_quantity ?? null,
|
|
12
|
+
trial_period_days: r.trial_period_days ?? null, usage_type: r.usage_type ?? 'licensed',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/** Metadata after an update: an empty value unsets the key, an empty `metadata` unsets them all. */
|
|
16
|
+
export function metadataAfter(was, given) {
|
|
17
|
+
if (given === '' || given === null || typeof given !== 'object')
|
|
18
|
+
return {};
|
|
19
|
+
const next = { ...was };
|
|
20
|
+
for (const [k, v] of Object.entries(given))
|
|
21
|
+
if (v === '' || v === null)
|
|
22
|
+
delete next[k];
|
|
23
|
+
else
|
|
24
|
+
next[k] = v;
|
|
25
|
+
return next;
|
|
26
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Row } from './common.js';
|
|
2
|
+
export declare const CLIMATE_SUPPLIERS: readonly [{
|
|
3
|
+
readonly id: "climsup_charm_industrial";
|
|
4
|
+
readonly name: "Charm Industrial";
|
|
5
|
+
readonly removal_pathway: "biomass_carbon_removal_and_storage";
|
|
6
|
+
readonly info_url: "https://frontierclimate.com/portfolio/charm-industrial";
|
|
7
|
+
readonly locations: readonly [{
|
|
8
|
+
readonly city: "San Francisco";
|
|
9
|
+
readonly country: "US";
|
|
10
|
+
readonly latitude: 37.7749;
|
|
11
|
+
readonly longitude: -122.4194;
|
|
12
|
+
readonly region: "CA";
|
|
13
|
+
}];
|
|
14
|
+
}];
|
|
15
|
+
export declare const CLIMATE_PRODUCTS: readonly [{
|
|
16
|
+
readonly id: "climsku_frontier_offtake_portfolio_2027";
|
|
17
|
+
readonly name: "Frontier's 2027 offtake portfolio";
|
|
18
|
+
readonly subtotal: 55000;
|
|
19
|
+
readonly fees: 1650;
|
|
20
|
+
readonly currency: "usd";
|
|
21
|
+
readonly delivery_year: 2027;
|
|
22
|
+
readonly metric_tons_available: "18000";
|
|
23
|
+
readonly created: 1881439203;
|
|
24
|
+
readonly suppliers: readonly ["climsup_charm_industrial"];
|
|
25
|
+
}];
|
|
26
|
+
export declare const supplierView: (s: (typeof CLIMATE_SUPPLIERS)[number]) => Row;
|
|
27
|
+
export declare const productView: (p: (typeof CLIMATE_PRODUCTS)[number]) => Row;
|
|
28
|
+
export declare const ORDER = "climate.order";
|
|
29
|
+
export declare const FCS = "financial_connections.session";
|
|
30
|
+
export declare const FCA = "financial_connections.account";
|
|
31
|
+
export declare const FCT = "financial_connections.transaction";
|
|
32
|
+
export declare const REPORT_TYPES: Array<{
|
|
33
|
+
id: string;
|
|
34
|
+
name: string;
|
|
35
|
+
}>;
|
|
36
|
+
export declare const reportTypeView: (t: {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
}) => Row;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// ── Climate: Stripe's catalog is managed and account-independent. The twin serves the catalog Stripe's reference
|
|
2
|
+
// publishes (docs.stripe.com/api/climate/product/object, /api/climate/supplier/object): Frontier's 2027 offtake
|
|
3
|
+
// portfolio at $550 a ton plus Frontier's service fees of $16.50 (3%), 18,000 tons, from Charm Industrial.
|
|
4
|
+
// Where the documentation stops and the twin decides: the catalog is that one product and supplier. ──
|
|
5
|
+
export const CLIMATE_SUPPLIERS = [
|
|
6
|
+
{ id: 'climsup_charm_industrial', name: 'Charm Industrial', removal_pathway: 'biomass_carbon_removal_and_storage', info_url: 'https://frontierclimate.com/portfolio/charm-industrial', locations: [{ city: 'San Francisco', country: 'US', latitude: 37.7749, longitude: -122.4194, region: 'CA' }] },
|
|
7
|
+
];
|
|
8
|
+
export const CLIMATE_PRODUCTS = [
|
|
9
|
+
{ id: 'climsku_frontier_offtake_portfolio_2027', name: "Frontier's 2027 offtake portfolio", subtotal: 55000, fees: 1650, currency: 'usd', delivery_year: 2027, metric_tons_available: '18000', created: 1881439203, suppliers: ['climsup_charm_industrial'] },
|
|
10
|
+
];
|
|
11
|
+
export const supplierView = (s) => ({ id: s.id, object: 'climate.supplier', name: s.name, removal_pathway: s.removal_pathway, info_url: s.info_url, locations: s.locations, livemode: false });
|
|
12
|
+
export const productView = (p) => ({
|
|
13
|
+
id: p.id, object: 'climate.product', name: p.name, livemode: false, delivery_year: p.delivery_year,
|
|
14
|
+
metric_tons_available: p.metric_tons_available, created: p.created,
|
|
15
|
+
current_prices_per_metric_ton: { [p.currency]: { amount_fees: p.fees, amount_subtotal: p.subtotal, amount_total: p.subtotal + p.fees } },
|
|
16
|
+
suppliers: p.suppliers.map((id) => supplierView(CLIMATE_SUPPLIERS.find((s) => s.id === id))),
|
|
17
|
+
});
|
|
18
|
+
export const ORDER = 'climate.order';
|
|
19
|
+
// ── Financial Connections: a session is created for an account holder and its permissions; accounts
|
|
20
|
+
// are linked in the authentication flow Stripe.js opens (../screens/financial-connections.tsx) ──
|
|
21
|
+
export const FCS = 'financial_connections.session';
|
|
22
|
+
export const FCA = 'financial_connections.account';
|
|
23
|
+
export const FCT = 'financial_connections.transaction';
|
|
24
|
+
// ── Reporting: a representative subset of Stripe's report types; a run succeeds at once ──
|
|
25
|
+
export const REPORT_TYPES = [
|
|
26
|
+
{ id: 'balance.summary.1', name: 'Balance summary' },
|
|
27
|
+
{ id: 'balance_change_from_activity.summary.1', name: 'Balance change from activity (summary)' },
|
|
28
|
+
{ id: 'payouts.summary.1', name: 'Payouts (summary)' },
|
|
29
|
+
{ id: 'payout_reconciliation.by_id.itemized.4', name: 'Payout reconciliation (itemized)' },
|
|
30
|
+
];
|
|
31
|
+
export const reportTypeView = (t) => ({
|
|
32
|
+
id: t.id, object: 'reporting.report_type', name: t.name, version: 1,
|
|
33
|
+
data_available_start: 0, data_available_end: 0, default_columns: null, updated: 0, livemode: false,
|
|
34
|
+
});
|
|
File without changes
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Radar semantics: reviews of payments Radar held (approving closes one, the machine in
|
|
2
|
+
// ../manifest.ts) and the value lists custom rules reference, with their items. Review list and
|
|
3
|
+
// retrieve, value-list list and retrieve, and value-list-item retrieve are the derived core's.
|
|
4
|
+
export const VL = 'radar.value_list';
|
|
5
|
+
export const VLI = 'radar.value_list_item';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const REFUND_REASONS: Set<string>;
|