@volter/twin-stripe 2.0.38 → 3.0.1
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 +112 -207
- package/dist/generated/pack-facts.json +94 -0
- package/dist/journeys/coverage.json +596 -0
- package/dist/journeys/customer-life.json +6108 -0
- package/dist/journeys/customer-life.outline.md +371 -0
- package/dist/journeys/decisions.json +677 -0
- package/dist/journeys/demand.json +706 -0
- package/dist/journeys/score.json +853 -0
- package/dist/journeys/unreachable.json +102 -0
- package/dist/journeys/vendor-examples.json +8010 -0
- package/dist/spec/SOURCE.md +18 -0
- package/dist/spec/doc-examples.json +445 -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 +306 -0
- package/dist/src/cli.d.ts +0 -1
- package/dist/src/cli.js +11 -31
- package/dist/src/engine/after-payment.d.ts +8 -0
- package/dist/src/engine/after-payment.js +27 -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/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 +34 -0
- package/dist/src/engine/connect.d.ts +45 -0
- package/dist/src/engine/connect.js +108 -0
- package/dist/src/engine/customers.d.ts +4 -0
- package/dist/src/engine/customers.js +8 -0
- package/dist/src/engine/display.d.ts +11 -0
- package/dist/src/engine/display.js +13 -0
- package/dist/src/engine/files.d.ts +11 -0
- package/dist/src/engine/files.js +23 -0
- package/dist/src/engine/invoices.d.ts +21 -0
- package/dist/src/engine/invoices.js +84 -0
- package/dist/src/engine/issuing.d.ts +33 -0
- package/dist/src/engine/issuing.js +54 -0
- package/dist/src/engine/ledger.d.ts +8 -0
- package/dist/src/engine/ledger.js +8 -0
- package/dist/src/engine/oauth.d.ts +4 -0
- package/dist/src/engine/oauth.js +24 -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-methods.d.ts +16 -0
- package/dist/src/engine/payment-methods.js +22 -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 +3 -0
- package/dist/src/engine/renewals.d.ts +36 -0
- package/dist/src/engine/renewals.js +65 -0
- package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +12 -45
- package/dist/src/{stripe-twin.js → engine/stripe.js} +53 -387
- package/dist/src/engine/subscriptions.d.ts +11 -0
- package/dist/src/engine/subscriptions.js +30 -0
- package/dist/src/engine/transfers.d.ts +2 -0
- package/dist/src/engine/transfers.js +1 -0
- package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -2
- package/dist/src/{stripe-version.js → engine/version.js} +21 -9
- 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 +10 -75
- package/dist/src/manifest.js +478 -876
- package/dist/src/screens/billing-portal.d.ts +3 -0
- package/dist/src/screens/{portal.js → billing-portal.js} +32 -58
- package/dist/src/screens/checkout-js.d.ts +2 -0
- package/dist/src/screens/checkout-js.js +84 -0
- package/dist/src/screens/checkout.d.ts +2 -31
- package/dist/src/screens/checkout.js +32 -121
- package/dist/src/screens/connect-onboarding.d.ts +3 -0
- package/dist/src/screens/{onboarding.js → connect-onboarding.js} +38 -104
- package/dist/src/screens/dashboard.d.ts +3 -0
- package/dist/src/screens/dashboard.js +116 -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 +95 -0
- package/dist/src/semantics/account.d.ts +2 -0
- package/dist/src/semantics/account.js +8 -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 +40 -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 +13 -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 +4 -0
- package/dist/src/semantics/billing_portal.js +36 -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 +21 -271
- package/dist/src/semantics/clock.d.ts +2 -0
- package/dist/src/semantics/clock.js +15 -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 +5 -6
- package/dist/src/semantics/customers.js +47 -413
- package/dist/src/semantics/doors.d.ts +23 -0
- package/dist/src/semantics/doors.js +73 -0
- package/dist/src/semantics/entitlements.d.ts +0 -2
- package/dist/src/semantics/entitlements.js +4 -95
- package/dist/src/semantics/events.d.ts +11 -0
- package/dist/src/semantics/events.js +31 -0
- package/dist/src/semantics/index.d.ts +2 -0
- package/dist/src/semantics/index.js +85 -0
- package/dist/src/semantics/invoice_payments.d.ts +2 -0
- package/dist/src/semantics/invoice_payments.js +12 -0
- package/dist/src/semantics/invoices.d.ts +11 -18
- package/dist/src/semantics/invoices.js +121 -440
- package/dist/src/semantics/issuing.d.ts +6 -13
- package/dist/src/semantics/issuing.js +58 -556
- package/dist/src/semantics/payment_intents.d.ts +3 -0
- package/dist/src/semantics/payment_intents.js +71 -0
- package/dist/src/semantics/payment_methods.d.ts +3 -0
- package/dist/src/semantics/payment_methods.js +15 -0
- package/dist/src/semantics/payouts.d.ts +3 -0
- package/dist/src/semantics/payouts.js +28 -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 +4 -2
- package/dist/src/semantics/products.js +12 -138
- 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 +2 -9
- package/dist/src/semantics/refunds.js +3 -193
- package/dist/src/semantics/shared.d.ts +558 -55
- package/dist/src/semantics/shared.js +2070 -114
- package/dist/src/semantics/states.d.ts +462 -0
- package/dist/src/semantics/states.js +634 -0
- package/dist/src/semantics/subscriptions.d.ts +6 -11
- package/dist/src/semantics/subscriptions.js +37 -530
- package/dist/src/semantics/test_helpers.d.ts +3 -0
- package/dist/src/semantics/test_helpers.js +125 -0
- package/dist/src/semantics/transfers.d.ts +2 -2
- package/dist/src/semantics/transfers.js +6 -101
- package/dist/src/semantics/webhook_endpoints.d.ts +2 -0
- package/dist/src/semantics/webhook_endpoints.js +26 -0
- package/dist/src/server.d.ts +7 -0
- package/dist/src/server.js +7 -0
- package/generated/pack-facts.json +94 -0
- package/journeys/coverage.json +596 -0
- package/journeys/customer-life.json +6108 -0
- package/journeys/customer-life.outline.md +371 -0
- package/journeys/decisions.json +677 -0
- package/journeys/demand.json +706 -0
- package/journeys/score.json +853 -0
- package/journeys/unreachable.json +102 -0
- package/journeys/vendor-examples.json +8010 -0
- package/package.json +11 -20
- package/spec/SOURCE.md +18 -0
- package/spec/doc-examples.json +445 -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 +306 -0
- package/src/cli.ts +11 -28
- package/src/engine/after-payment.ts +29 -0
- package/src/engine/apps-secrets.ts +4 -0
- package/src/engine/balance.ts +32 -0
- package/src/engine/checkout.ts +39 -0
- package/src/engine/common.ts +49 -0
- package/src/engine/connect.ts +106 -0
- package/src/engine/customers.ts +10 -0
- package/src/engine/display.ts +18 -0
- package/src/engine/files.ts +28 -0
- package/src/engine/invoices.ts +102 -0
- package/src/engine/issuing.ts +66 -0
- package/src/engine/ledger.ts +48 -0
- package/src/engine/oauth.ts +18 -0
- package/src/engine/onboarding.ts +53 -0
- package/src/{stripe-params.ts → engine/params.ts} +7 -56
- package/src/engine/payment-intents.ts +32 -0
- package/src/engine/payment-methods.ts +24 -0
- package/src/engine/radar.ts +6 -0
- package/src/engine/refunds.ts +3 -0
- package/src/engine/renewals.ts +72 -0
- package/src/{stripe-twin.ts → engine/stripe.ts} +57 -400
- package/src/engine/subscriptions.ts +37 -0
- package/src/engine/transfers.ts +22 -0
- package/src/{stripe-version.ts → engine/version.ts} +19 -10
- package/src/engine/webhook-endpoints.ts +14 -0
- package/src/engine/webhooks.ts +70 -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 +10 -116
- package/src/manifest.ts +480 -904
- package/src/screens/{portal.tsx → billing-portal.tsx} +35 -42
- package/src/screens/checkout-js.ts +80 -0
- package/src/screens/checkout.tsx +32 -96
- package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +39 -85
- package/src/screens/dashboard.tsx +178 -0
- package/src/screens/shared.tsx +84 -0
- package/src/screens/stripe-js.ts +102 -0
- package/src/semantics/account.ts +10 -0
- package/src/semantics/account_links.ts +20 -0
- package/src/semantics/accounts.ts +44 -0
- package/src/semantics/{apps-secrets.ts → apps.ts} +17 -33
- package/src/semantics/around.ts +17 -0
- package/src/semantics/balance.ts +6 -208
- package/src/semantics/balance_transactions.ts +18 -0
- package/src/semantics/billing_portal.ts +45 -0
- package/src/semantics/charges.ts +8 -212
- package/src/semantics/checkout.ts +25 -276
- package/src/semantics/clock.ts +19 -0
- package/src/semantics/coupons.ts +5 -68
- package/src/semantics/customers.ts +48 -414
- package/src/semantics/doors.ts +79 -0
- package/src/semantics/entitlements.ts +3 -94
- package/src/semantics/events.ts +37 -0
- package/src/semantics/index.ts +89 -0
- package/src/semantics/invoice_payments.ts +16 -0
- package/src/semantics/invoices.ts +112 -441
- package/src/semantics/issuing.ts +57 -573
- package/src/semantics/payment_intents.ts +76 -0
- package/src/semantics/payment_methods.ts +20 -0
- package/src/semantics/payouts.ts +29 -0
- package/src/semantics/prices.ts +41 -0
- package/src/semantics/products.ts +12 -146
- package/src/semantics/promotion_codes.ts +38 -0
- package/src/semantics/radar.ts +8 -79
- package/src/semantics/refunds.ts +4 -216
- package/src/semantics/shared.ts +2089 -135
- package/src/semantics/states.ts +662 -0
- package/src/semantics/subscriptions.ts +39 -542
- package/src/semantics/test_helpers.ts +119 -0
- package/src/semantics/transfers.ts +10 -132
- package/src/semantics/webhook_endpoints.ts +27 -0
- package/src/server.ts +7 -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-oauth.d.ts +0 -27
- package/dist/src/screens/connect-oauth.js +0 -414
- package/dist/src/screens/connect-settings.d.ts +0 -22
- 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/disputes.d.ts +0 -2
- package/dist/src/semantics/disputes.js +0 -51
- 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/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/setup-intents.js +0 -84
- 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/test-clocks.js +0 -73
- 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-oauth.tsx +0 -400
- 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/disputes.ts +0 -62
- package/src/semantics/ephemeral-keys.ts +0 -34
- package/src/semantics/files.ts +0 -143
- 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/test-clocks.ts +0 -77
- 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/src/{screens → engine}/industries.ts +0 -0
- /package/src/{semantics → engine}/test-cards.ts +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { platformAccountDefault } from "../engine/connect.js";
|
|
2
|
+
import { accountSettings, PLATFORM_ACCOUNT_ID } from "../engine/stripe.js";
|
|
3
|
+
import { balanceBody, payDuePayouts, settleDueEntries } from "./shared.js";
|
|
4
|
+
/** The platform's own account settings (its payout schedule, its public name) change on Stripe's Dashboard, which has no
|
|
5
|
+
* API: this stands in for that page. The account is Stripe's default until the page first changes it (the same default
|
|
6
|
+
* GET /v1/account answers); a hash is merged into what the account holds, as an update merges it. */
|
|
7
|
+
export async function account(ctx) {
|
|
8
|
+
const ex = ctx.get('account', PLATFORM_ACCOUNT_ID);
|
|
9
|
+
const given = ctx.params;
|
|
10
|
+
const { type: _t, settings: rawSettings, business_profile: rawProfile, ...rest } = given;
|
|
11
|
+
const { id: _id, ...base } = platformAccountDefault();
|
|
12
|
+
const fields = {
|
|
13
|
+
...(ex ? {} : base),
|
|
14
|
+
...rest,
|
|
15
|
+
settings: accountSettings(rawSettings, ex?.settings),
|
|
16
|
+
...(rawProfile && typeof rawProfile === 'object' ? { business_profile: { ...(ex?.business_profile ?? {}), ...rawProfile } } : {}),
|
|
17
|
+
};
|
|
18
|
+
return ctx.reply(await ctx.write('account', PLATFORM_ACCOUNT_ID, fields, 'account.update'));
|
|
19
|
+
}
|
|
20
|
+
/** Time's events, sent when a caller drives them (a runner's drainer): what time settled on each account is written —
|
|
21
|
+
* payouts whose arrival date came (pending → paid, sent as payout.paid) and funds that came due (pending → available),
|
|
22
|
+
* for which the account is sent one balance.available ("Occurs whenever your Stripe balance has been updated (e.g., when
|
|
23
|
+
* a charge is available to be paid out)", docs.stripe.com/api/events/types) carrying its Balance, when an entry that
|
|
24
|
+
* settled adds to it ("This event is not fired for negative transactions", the same page); a connected account's
|
|
25
|
+
* events go to Connect endpoints. A read already sees these moves; the drain is what makes Stripe's events about them
|
|
26
|
+
* arrive. Answers what it sent. */
|
|
27
|
+
export async function drain(ctx) {
|
|
28
|
+
const accounts = [undefined, ...ctx.rows('account').map((a) => String(a.id)).filter((id) => id !== PLATFORM_ACCOUNT_ID)];
|
|
29
|
+
const delivered = [];
|
|
30
|
+
for (const account of accounts) {
|
|
31
|
+
for (const id of await payDuePayouts(ctx, account))
|
|
32
|
+
delivered.push({ type: 'payout.paid', id, ...(account ? { account } : {}) });
|
|
33
|
+
if ((await settleDueEntries(ctx, account)).some((t) => Number(t.net) > 0)) {
|
|
34
|
+
// the notice the event is sent for: the account's Balance, which has no id of its own (./events.ts renders it)
|
|
35
|
+
await ctx.write('_balance_notice', `${account ?? PLATFORM_ACCOUNT_ID}:${ctx.occurredAt}`, { account: account ?? null, balance: balanceBody(ctx, account) }, 'balance.available');
|
|
36
|
+
delivered.push({ type: 'balance.available', ...(account ? { account } : {}) });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return Response.json({ delivered });
|
|
40
|
+
}
|
|
41
|
+
/** POST /_twin/app-credentials: the platform's API keys as the dashboard's API keys page shows them, a secret key and a
|
|
42
|
+
* publishable key (`sk_test_…`, `pk_test_…`), held by their SHA-256, and the signing secrets its webhook endpoints
|
|
43
|
+
* are made with. The runtime issues them to a World's applications at every boot (the descriptor's credentialDoor), so
|
|
44
|
+
* the answer is the same each time: the account's one pair of keys, made the first time. Where the documentation
|
|
45
|
+
* stops: the keys' length and alphabet after the prefix. */
|
|
46
|
+
// source: https://docs.stripe.com/keys "Publishable keys"
|
|
47
|
+
export async function appCredentials(ctx) {
|
|
48
|
+
const secretKey = `sk_test_51${(await ctx.secret('stripe-platform-key:app')).replace(/[^A-Za-z0-9]/g, '').slice(0, 96)}`;
|
|
49
|
+
const publishableKey = `pk_test_51${(await ctx.secret('stripe-publishable-key:app')).replace(/[^A-Za-z0-9]/g, '').slice(0, 96)}`;
|
|
50
|
+
if (!ctx.rowsRaw('_platform_key').some((k) => k.id === 'secret:app' && k._sha256 === ctx.crypto.sha256(secretKey))) {
|
|
51
|
+
await ctx.record('_platform_key', { kind: 'secret', _sha256: ctx.crypto.sha256(secretKey), created: ctx.occurredAt, deleted: false }, 'secret:app');
|
|
52
|
+
await ctx.record('_platform_key', { kind: 'publishable', _sha256: ctx.crypto.sha256(publishableKey), created: ctx.occurredAt, deleted: false }, 'publishable:app');
|
|
53
|
+
}
|
|
54
|
+
// the signing secrets the application verifies its webhooks with, its account's and its Connect endpoint's: an
|
|
55
|
+
// endpoint made for it (the webhookEndpoints door) is signed with the one of its kind, so the two agree
|
|
56
|
+
return Response.json({ secret_key: secretKey, publishable_key: publishableKey, webhook_secret: await appEndpointSecret(ctx, false), connect_webhook_secret: await appEndpointSecret(ctx, true) }, { status: 201 });
|
|
57
|
+
}
|
|
58
|
+
/** The signing secret the World's application is issued for its account's endpoints, or for its Connect endpoint. */
|
|
59
|
+
const appEndpointSecret = async (ctx, connect) => `whsec_${(await ctx.secret(connect ? 'stripe-webhook-secret:connect' : 'stripe-webhook-secret:app')).replace(/[^A-Za-z0-9]/g, '').slice(0, 32)}`;
|
|
60
|
+
/** POST /_twin/webhook-endpoints {url, events, connect?}: an endpoint added on the Dashboard's Webhooks page, the events
|
|
61
|
+
* it takes, signed with the secret the World's application is issued (./doors.ts `appCredentials`): the twin's
|
|
62
|
+
* decision, since Stripe mints an endpoint's secret and lets no one choose one. */
|
|
63
|
+
// source: https://docs.stripe.com/webhooks "register a webhook endpoint, Stripe pushes real-time data to it when"
|
|
64
|
+
export async function webhookEndpoints(ctx) {
|
|
65
|
+
const b = (ctx.body && typeof ctx.body === 'object' ? ctx.body : {});
|
|
66
|
+
if (typeof b.url !== 'string' || !/^https?:\/\//.test(b.url) || !Array.isArray(b.events) || !b.events.length)
|
|
67
|
+
return Response.json({ error: 'a url and its events are required' }, { status: 400 });
|
|
68
|
+
const connect = b.connect === true;
|
|
69
|
+
const id = ctx.mint('webhook_endpoint');
|
|
70
|
+
const secret = await appEndpointSecret(ctx, connect);
|
|
71
|
+
await ctx.write('webhook_endpoint', id, { id, object: 'webhook_endpoint', url: b.url, enabled_events: b.events.map(String), status: 'enabled', connect, livemode: false, metadata: {}, api_version: null, application: null, description: null, secret, created: Math.floor(Date.parse(ctx.occurredAt) / 1000) }, 'webhook_endpoint.create');
|
|
72
|
+
return Response.json({ id, secret }, { status: 201 });
|
|
73
|
+
}
|
|
@@ -1,95 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
* (docs.stripe.com/api/entitlements/feature/create). */
|
|
6
|
-
function lookupKeyTaken(ctx, lookupKey) {
|
|
7
|
-
return fail(ctx, `A feature with lookup_key '${lookupKey}' already exists.`, 400, 'resource_already_exists');
|
|
8
|
-
}
|
|
9
|
-
const create = async (ctx) => {
|
|
10
|
-
const params = ctx.params;
|
|
11
|
-
if (typeof params.name !== 'string' || !params.name)
|
|
12
|
-
return fail(ctx, 'Missing required param: name.', 400, 'parameter_missing');
|
|
13
|
-
const lookupKey = typeof params.lookup_key === 'string' ? params.lookup_key : '';
|
|
14
|
-
if (!lookupKey)
|
|
15
|
-
return fail(ctx, 'Missing required param: lookup_key.', 400, 'parameter_missing');
|
|
16
|
-
if (ctx.rowsRaw(FEAT, { withDeleted: true }).some((f) => f.lookup_key === lookupKey && !f._archived))
|
|
17
|
-
return lookupKeyTaken(ctx, lookupKey);
|
|
18
|
-
return ctx.reply(await created(ctx, FEAT, {}, {
|
|
19
|
-
name: params.name, lookup_key: lookupKey, active: true, livemode: false,
|
|
20
|
-
metadata: params.metadata && typeof params.metadata === 'object' ? params.metadata : {},
|
|
21
|
-
}));
|
|
22
|
-
};
|
|
23
|
-
const listFeatures = async (ctx) => list(ctx, FEAT, where(ctx, newest(ctx, FEAT), {
|
|
24
|
-
lookup_key: (f, v) => f.lookup_key === v,
|
|
25
|
-
archived: (f, v) => asBool(kept(ctx, FEAT, f, '_archived')) === asBool(v),
|
|
26
|
-
}));
|
|
27
|
-
// name, active and metadata change
|
|
28
|
-
const update = async (ctx) => {
|
|
29
|
-
const id = at(ctx, 'id');
|
|
30
|
-
if (!ctx.get(FEAT, id))
|
|
31
|
-
return ctx.notFound(FEAT, id);
|
|
32
|
-
const patch = {};
|
|
33
|
-
if (ctx.params.name !== undefined)
|
|
34
|
-
patch.name = ctx.params.name;
|
|
35
|
-
if (ctx.params.active !== undefined) {
|
|
36
|
-
patch.active = asBool(ctx.params.active);
|
|
37
|
-
patch._archived = undefined;
|
|
38
|
-
}
|
|
39
|
-
if (ctx.params.metadata !== undefined)
|
|
40
|
-
patch.metadata = ctx.params.metadata;
|
|
41
|
-
return ctx.reply(await ctx.write(FEAT, id, patch, 'entitlements_feature.update'));
|
|
42
|
-
};
|
|
43
|
-
// a customer is entitled to every feature granted to a product its live subscriptions bill, as the product stood when
|
|
44
|
-
// the subscription's current period began: "When a customer purchases or subscribes to a product with an attached
|
|
45
|
-
// feature, Stripe creates and manages an Active Entitlement for that customer and feature"; "Existing subscriptions will
|
|
46
|
-
// create active entitlements for any product feature changes at the start of the next billing period"
|
|
47
|
-
// (docs.stripe.com/billing/entitlements). Where the documentation stops and the twin decides: a feature removed from a
|
|
48
|
-
// product is kept, the same way, until the next period begins.
|
|
49
|
-
const activeEntitlements = async (ctx) => {
|
|
50
|
-
const customer = typeof ctx.params.customer === 'string' ? ctx.params.customer : '';
|
|
51
|
-
if (!customer)
|
|
52
|
-
return fail(ctx, 'Missing required param: customer.', 400, 'parameter_missing');
|
|
53
|
-
if (!ctx.row('customer', customer, { withDeleted: true }))
|
|
54
|
-
return fail(ctx, `No such customer: '${customer}'`, 404, 'resource_missing');
|
|
55
|
-
// each product a live subscription bills, with the start of the period it is billed for
|
|
56
|
-
const productIds = new Map();
|
|
57
|
-
for (const sub of newest(ctx, 'subscription')) {
|
|
58
|
-
// a subscription entitles while it runs: not before its first payment (incomplete), nor once it has ended
|
|
59
|
-
// (docs.stripe.com/billing/entitlements; past_due keeps access during retries — that edge is the twin's reading)
|
|
60
|
-
if (sub.customer !== customer || !['active', 'trialing', 'past_due'].includes(String(sub.status)))
|
|
61
|
-
continue;
|
|
62
|
-
const periodStart = Number(sub.current_period_start ?? sub.start_date ?? sub.created ?? 0);
|
|
63
|
-
for (const it of subscriptionItemPairs(sub)) {
|
|
64
|
-
const price = ctx.get('price', it.price);
|
|
65
|
-
if (price && typeof price.product === 'string')
|
|
66
|
-
productIds.set(price.product, Math.max(productIds.get(price.product) ?? -Infinity, periodStart));
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const seen = new Set();
|
|
70
|
-
const data = [];
|
|
71
|
-
for (const pf of ctx.rowsRaw('product_feature', { withDeleted: true })) {
|
|
72
|
-
const periodStart = productIds.get(String(pf._product));
|
|
73
|
-
if (periodStart === undefined)
|
|
74
|
-
continue;
|
|
75
|
-
// attached by the period's start, and not removed before it
|
|
76
|
-
if (Number(pf._created ?? 0) > periodStart)
|
|
77
|
-
continue;
|
|
78
|
-
if (pf.deleted && !(Number(pf._removed_at) > periodStart))
|
|
79
|
-
continue;
|
|
80
|
-
const featId = String(pf._feature ?? pf.entitlement_feature?.id ?? pf.entitlement_feature);
|
|
81
|
-
if (seen.has(featId))
|
|
82
|
-
continue;
|
|
83
|
-
seen.add(featId);
|
|
84
|
-
const feat = ctx.get(FEAT, featId);
|
|
85
|
-
if (feat)
|
|
86
|
-
data.push({ id: `ent_twin_${customer}_${featId}`, object: 'entitlements.active_entitlement', feature: featId, lookup_key: feat.lookup_key, livemode: false });
|
|
87
|
-
}
|
|
88
|
-
return ctx.reply({ object: 'list', url: path(ctx), has_more: false, data });
|
|
89
|
-
};
|
|
90
|
-
export const entitlements = {
|
|
91
|
-
PostEntitlementsFeatures: create,
|
|
92
|
-
GetEntitlementsFeatures: listFeatures,
|
|
93
|
-
PostEntitlementsFeaturesId: update,
|
|
94
|
-
GetEntitlementsActiveEntitlements: activeEntitlements,
|
|
95
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
// Stripe's entitlements operations (docs/contributing/architecture.md, "What an author writes"): each handler over the
|
|
3
|
+
// handler contract's context, computing with the engine (../engine/).
|
|
4
|
+
// source: spec:PostEntitlementsFeatures "Creates a feature"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EventWrite, WriteHookContext } from '@volter/world-core';
|
|
2
|
+
/** An event's `data`: the object the write concerns, as Stripe sends it in the event's API version. An Issuing
|
|
3
|
+
* authorization carries its full card; the balance notice the drain writes carries the account's Balance. */
|
|
4
|
+
export declare function data(ctx: WriteHookContext, write: EventWrite): Record<string, unknown>;
|
|
5
|
+
/** An event's further envelope values: the connected account it is about ("Each event for a connected account contains
|
|
6
|
+
* a top-level `account` property that identifies the connected account", docs.stripe.com/connect/webhooks) — the
|
|
7
|
+
* account a request acts as (Stripe-Account), a connected account's own account.updated, or the account whose books the
|
|
8
|
+
* written row is kept on (its `_account`) — and the API version it is rendered in. A connected account whose OAuth
|
|
9
|
+
* connection was revoked "can't be accessed by your platform" (docs.stripe.com/connect/oauth-reference): its events are
|
|
10
|
+
* kept but no longer sent (`$send: false`), except the account.application.deauthorized that says so. */
|
|
11
|
+
export declare function values(ctx: WriteHookContext, write: EventWrite, type: string): Record<string, unknown>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { isValidApiVersion, PLATFORM_ACCOUNT_ID, TWIN_API_VERSION } from "../engine/stripe.js";
|
|
2
|
+
import { render } from "../engine/version.js";
|
|
3
|
+
// ── the events Stripe's writes send (the manifest's `events`: ./shared.ts STRIPE_EVENTS) ──
|
|
4
|
+
/** An event's `data`: the object the write concerns, as Stripe sends it in the event's API version. An Issuing
|
|
5
|
+
* authorization carries its full card; the balance notice the drain writes carries the account's Balance. */
|
|
6
|
+
export function data(ctx, write) {
|
|
7
|
+
const object = write.storedType === '_balance_notice' ? write.body.balance
|
|
8
|
+
: write.storedType === 'issuing_authorization' ? ctx.expand('issuing.authorization', write.body)
|
|
9
|
+
: write.storedType === 'issuing_card' ? ctx.expand('issuing.card', write.body) : ctx.expand(String(write.body.object ?? write.storedType), write.body);
|
|
10
|
+
return { object: render(object, eventVersion(write)) };
|
|
11
|
+
}
|
|
12
|
+
/** An event's further envelope values: the connected account it is about ("Each event for a connected account contains
|
|
13
|
+
* a top-level `account` property that identifies the connected account", docs.stripe.com/connect/webhooks) — the
|
|
14
|
+
* account a request acts as (Stripe-Account), a connected account's own account.updated, or the account whose books the
|
|
15
|
+
* written row is kept on (its `_account`) — and the API version it is rendered in. A connected account whose OAuth
|
|
16
|
+
* connection was revoked "can't be accessed by your platform" (docs.stripe.com/connect/oauth-reference): its events are
|
|
17
|
+
* kept but no longer sent (`$send: false`), except the account.application.deauthorized that says so. */
|
|
18
|
+
export function values(ctx, write, type) {
|
|
19
|
+
const id = write.body.id;
|
|
20
|
+
const kept = typeof id === 'string' ? ctx.rowsRaw(write.storedType, { withDeleted: true }).find((r) => r.id === id)?._account : undefined;
|
|
21
|
+
const account = write.request?.headers.get('stripe-account')
|
|
22
|
+
?? (write.storedType === 'account' && typeof id === 'string' && id !== PLATFORM_ACCOUNT_ID ? id : undefined)
|
|
23
|
+
?? (write.storedType === '_balance_notice' && typeof write.body.account === 'string' ? write.body.account : undefined)
|
|
24
|
+
?? (typeof kept === 'string' ? kept : undefined);
|
|
25
|
+
return { $account: account, $version: eventVersion(write) };
|
|
26
|
+
}
|
|
27
|
+
/** The API version an event is rendered in: the one the writing request pinned, when it is one, else the served one. */
|
|
28
|
+
const eventVersion = (write) => {
|
|
29
|
+
const pinned = write.request?.headers.get('stripe-version');
|
|
30
|
+
return pinned && isValidApiVersion(pinned) ? pinned : TWIN_API_VERSION;
|
|
31
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import * as account from "./account.js";
|
|
2
|
+
import * as account_links from "./account_links.js";
|
|
3
|
+
import * as accounts from "./accounts.js";
|
|
4
|
+
import * as apps from "./apps.js";
|
|
5
|
+
import * as balance from "./balance.js";
|
|
6
|
+
import * as balance_transactions from "./balance_transactions.js";
|
|
7
|
+
import * as billing_portal from "./billing_portal.js";
|
|
8
|
+
import * as charges from "./charges.js";
|
|
9
|
+
import * as checkout from "./checkout.js";
|
|
10
|
+
import * as coupons from "./coupons.js";
|
|
11
|
+
import * as customers from "./customers.js";
|
|
12
|
+
import * as invoice_payments from "./invoice_payments.js";
|
|
13
|
+
import * as invoices from "./invoices.js";
|
|
14
|
+
import * as issuing from "./issuing.js";
|
|
15
|
+
import * as payment_intents from "./payment_intents.js";
|
|
16
|
+
import * as payment_methods from "./payment_methods.js";
|
|
17
|
+
import * as payouts from "./payouts.js";
|
|
18
|
+
import * as prices from "./prices.js";
|
|
19
|
+
import * as products from "./products.js";
|
|
20
|
+
import * as promotion_codes from "./promotion_codes.js";
|
|
21
|
+
import * as radar from "./radar.js";
|
|
22
|
+
import * as refunds from "./refunds.js";
|
|
23
|
+
import * as subscriptions from "./subscriptions.js";
|
|
24
|
+
import * as test_helpers from "./test_helpers.js";
|
|
25
|
+
import * as transfers from "./transfers.js";
|
|
26
|
+
import * as webhook_endpoints from "./webhook_endpoints.js";
|
|
27
|
+
export const stripeSemantics = {
|
|
28
|
+
DeleteSubscriptionsSubscriptionExposedId: subscriptions.DeleteSubscriptionsSubscriptionExposedId,
|
|
29
|
+
DeleteSubscriptionsSubscriptionExposedIdDiscount: subscriptions.DeleteSubscriptionsSubscriptionExposedIdDiscount,
|
|
30
|
+
GetAccount: account.GetAccount,
|
|
31
|
+
GetAccountsAccountExternalAccounts: accounts.GetAccountsAccountExternalAccounts,
|
|
32
|
+
GetAppsSecretsFind: apps.GetAppsSecretsFind,
|
|
33
|
+
GetBalance: balance.GetBalance,
|
|
34
|
+
GetBalanceTransactions: balance_transactions.GetBalanceTransactions,
|
|
35
|
+
GetBillingPortalConfigurations: billing_portal.GetBillingPortalConfigurations,
|
|
36
|
+
GetCharges: charges.GetCharges,
|
|
37
|
+
GetChargesCharge: charges.GetChargesCharge,
|
|
38
|
+
GetCheckoutSessionsSessionLineItems: checkout.GetCheckoutSessionsSessionLineItems,
|
|
39
|
+
GetCustomersCustomer: customers.GetCustomersCustomer,
|
|
40
|
+
GetCustomersSearch: customers.GetCustomersSearch,
|
|
41
|
+
GetInvoicePayments: invoice_payments.GetInvoicePayments,
|
|
42
|
+
GetInvoicesInvoice: invoices.GetInvoicesInvoice,
|
|
43
|
+
GetIssuingCardsCard: issuing.GetIssuingCardsCard,
|
|
44
|
+
GetPaymentMethodsPaymentMethod: payment_methods.GetPaymentMethodsPaymentMethod,
|
|
45
|
+
GetPayouts: payouts.GetPayouts,
|
|
46
|
+
GetPrices: prices.GetPrices,
|
|
47
|
+
GetPricesPrice: prices.GetPricesPrice,
|
|
48
|
+
GetProducts: products.GetProducts,
|
|
49
|
+
GetPromotionCodes: promotion_codes.GetPromotionCodes,
|
|
50
|
+
GetSubscriptions: subscriptions.GetSubscriptions,
|
|
51
|
+
GetSubscriptionsSubscriptionExposedId: subscriptions.GetSubscriptionsSubscriptionExposedId,
|
|
52
|
+
PostAccountLinks: account_links.PostAccountLinks,
|
|
53
|
+
PostAccounts: accounts.PostAccounts,
|
|
54
|
+
PostAccountsAccountLoginLinks: accounts.PostAccountsAccountLoginLinks,
|
|
55
|
+
PostAppsSecrets: apps.PostAppsSecrets,
|
|
56
|
+
PostAppsSecretsDelete: apps.PostAppsSecretsDelete,
|
|
57
|
+
PostBillingPortalConfigurations: billing_portal.PostBillingPortalConfigurations,
|
|
58
|
+
PostBillingPortalSessions: billing_portal.PostBillingPortalSessions,
|
|
59
|
+
PostCheckoutSessions: checkout.PostCheckoutSessions,
|
|
60
|
+
PostCoupons: coupons.PostCoupons,
|
|
61
|
+
PostCustomers: customers.PostCustomers,
|
|
62
|
+
PostCustomersCustomer: customers.PostCustomersCustomer,
|
|
63
|
+
PostInvoices: invoices.PostInvoices,
|
|
64
|
+
PostInvoicesCreatePreview: invoices.PostInvoicesCreatePreview,
|
|
65
|
+
PostInvoicesInvoicePay: invoices.PostInvoicesInvoicePay,
|
|
66
|
+
PostInvoicesInvoiceVoid: invoices.PostInvoicesInvoiceVoid,
|
|
67
|
+
PostIssuingAuthorizationsAuthorizationApprove: issuing.PostIssuingAuthorizationsAuthorizationApprove,
|
|
68
|
+
PostIssuingAuthorizationsAuthorizationDecline: issuing.PostIssuingAuthorizationsAuthorizationDecline,
|
|
69
|
+
PostIssuingCards: issuing.PostIssuingCards,
|
|
70
|
+
PostIssuingCardsCard: issuing.PostIssuingCardsCard,
|
|
71
|
+
PostPaymentIntents: payment_intents.PostPaymentIntents,
|
|
72
|
+
PostPaymentIntentsIntentCancel: payment_intents.PostPaymentIntentsIntentCancel,
|
|
73
|
+
PostPaymentMethodsPaymentMethodDetach: payment_methods.PostPaymentMethodsPaymentMethodDetach,
|
|
74
|
+
PostPayouts: payouts.PostPayouts,
|
|
75
|
+
PostPrices: prices.PostPrices,
|
|
76
|
+
PostProducts: products.PostProducts,
|
|
77
|
+
PostPromotionCodes: promotion_codes.PostPromotionCodes,
|
|
78
|
+
PostRadarValueListItems: radar.PostRadarValueListItems,
|
|
79
|
+
PostRefunds: refunds.PostRefunds,
|
|
80
|
+
PostSubscriptionsSubscriptionExposedId: subscriptions.PostSubscriptionsSubscriptionExposedId,
|
|
81
|
+
PostTestHelpersIssuingAuthorizations: test_helpers.PostTestHelpersIssuingAuthorizations,
|
|
82
|
+
PostTestHelpersIssuingAuthorizationsAuthorizationCapture: test_helpers.PostTestHelpersIssuingAuthorizationsAuthorizationCapture,
|
|
83
|
+
PostTransfers: transfers.PostTransfers,
|
|
84
|
+
PostWebhookEndpoints: webhook_endpoints.PostWebhookEndpoints,
|
|
85
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { INV, invoicePayment } from "../engine/invoices.js";
|
|
2
|
+
import { list, newest } from "./shared.js";
|
|
3
|
+
export async function GetInvoicePayments(ctx) {
|
|
4
|
+
const p = ctx.params;
|
|
5
|
+
const wanted = p.payment?.payment_intent;
|
|
6
|
+
const items = newest(ctx, INV)
|
|
7
|
+
.filter((inv) => typeof p.invoice !== 'string' || inv.id === p.invoice)
|
|
8
|
+
.map(invoicePayment).filter((x) => !!x)
|
|
9
|
+
.filter((x) => typeof wanted !== 'string' || x.payment.payment_intent === wanted)
|
|
10
|
+
.filter((x) => typeof p.status !== 'string' || x.status === p.status);
|
|
11
|
+
return list(ctx, 'invoice_payment', items);
|
|
12
|
+
}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export declare function
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* (https://docs.stripe.com/api/invoices/object#invoice_object-number), and for send_invoice a
|
|
13
|
-
* `due_date` days_until_due after finalization (#invoice_object-due_date). */
|
|
14
|
-
/** A customer's invoice_prefix, "The prefix for the customer used to generate unique invoice numbers"
|
|
15
|
-
* (docs.stripe.com/api/customers/object): the twin's, from the customer's id. */
|
|
16
|
-
export declare const invoicePrefix: (customerId: string) => string;
|
|
17
|
-
export declare function finalizedFields(ctx: SemanticsContext, inv: Row, now: number): Row;
|
|
18
|
-
export declare const invoices: Record<string, Semantics>;
|
|
1
|
+
import type { HandlerContext } from '@volter/world-core';
|
|
2
|
+
export declare function GetInvoicesInvoice(ctx: HandlerContext): Promise<Response>;
|
|
3
|
+
export declare function PostInvoicesInvoicePay(ctx: HandlerContext): Promise<Response>;
|
|
4
|
+
export declare function PostInvoicesInvoiceVoid(ctx: HandlerContext): Promise<Response>;
|
|
5
|
+
export declare function PostInvoices(ctx: HandlerContext): Promise<Response>;
|
|
6
|
+
/**
|
|
7
|
+
* A preview of the next invoice for a customer or subscription (create_preview), computed and never
|
|
8
|
+
* stored: the subscription's items at their prices, the customer's pending items, the subscription's
|
|
9
|
+
* discount, and an update's unused-time credit and remaining-time charge at the old and new prices.
|
|
10
|
+
*/
|
|
11
|
+
export declare function PostInvoicesCreatePreview(ctx: HandlerContext): Promise<Response>;
|