@depup/stripe 21.0.0-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4529 -0
- package/LICENSE +20 -0
- package/OPENAPI_VERSION +1 -0
- package/README.md +25 -0
- package/VERSION +1 -0
- package/changes.json +5 -0
- package/cjs/Decimal.js +854 -0
- package/cjs/Error.js +284 -0
- package/cjs/RequestSender.js +469 -0
- package/cjs/ResourceNamespace.js +21 -0
- package/cjs/StripeContext.js +56 -0
- package/cjs/StripeEmitter.js +46 -0
- package/cjs/StripeMethod.js +36 -0
- package/cjs/StripeResource.js +188 -0
- package/cjs/V2Coercion.js +109 -0
- package/cjs/Webhooks.js +225 -0
- package/cjs/apiVersion.js +6 -0
- package/cjs/autoPagination.js +294 -0
- package/cjs/crypto/CryptoProvider.js +51 -0
- package/cjs/crypto/NodeCryptoProvider.js +30 -0
- package/cjs/crypto/SubtleCryptoProvider.js +51 -0
- package/cjs/multipart.js +61 -0
- package/cjs/net/FetchHttpClient.js +145 -0
- package/cjs/net/HttpClient.js +53 -0
- package/cjs/net/NodeHttpClient.js +108 -0
- package/cjs/package.json +1 -0
- package/cjs/platform/NodePlatformFunctions.js +98 -0
- package/cjs/platform/PlatformFunctions.js +98 -0
- package/cjs/platform/WebPlatformFunctions.js +38 -0
- package/cjs/resources/AccountLinks.js +9 -0
- package/cjs/resources/AccountSessions.js +9 -0
- package/cjs/resources/Accounts.js +101 -0
- package/cjs/resources/ApplePayDomains.js +22 -0
- package/cjs/resources/ApplicationFees.js +34 -0
- package/cjs/resources/Apps/Secrets.js +19 -0
- package/cjs/resources/Balance.js +9 -0
- package/cjs/resources/BalanceSettings.js +10 -0
- package/cjs/resources/BalanceTransactions.js +17 -0
- package/cjs/resources/Billing/Alerts.js +27 -0
- package/cjs/resources/Billing/CreditBalanceSummary.js +12 -0
- package/cjs/resources/Billing/CreditBalanceTransactions.js +17 -0
- package/cjs/resources/Billing/CreditGrants.js +30 -0
- package/cjs/resources/Billing/MeterEventAdjustments.js +12 -0
- package/cjs/resources/Billing/MeterEvents.js +9 -0
- package/cjs/resources/Billing/Meters.js +29 -0
- package/cjs/resources/BillingPortal/Configurations.js +25 -0
- package/cjs/resources/BillingPortal/Sessions.js +12 -0
- package/cjs/resources/Charges.js +25 -0
- package/cjs/resources/Checkout/Sessions.js +538 -0
- package/cjs/resources/Climate/Orders.js +61 -0
- package/cjs/resources/Climate/Products.js +33 -0
- package/cjs/resources/Climate/Suppliers.js +17 -0
- package/cjs/resources/ConfirmationTokens.js +12 -0
- package/cjs/resources/CountrySpecs.js +17 -0
- package/cjs/resources/Coupons.js +17 -0
- package/cjs/resources/CreditNotes.js +253 -0
- package/cjs/resources/CustomerSessions.js +9 -0
- package/cjs/resources/Customers.js +581 -0
- package/cjs/resources/Disputes.js +19 -0
- package/cjs/resources/Entitlements/ActiveEntitlements.js +17 -0
- package/cjs/resources/Entitlements/Features.js +22 -0
- package/cjs/resources/EphemeralKeys.js +18 -0
- package/cjs/resources/Events.js +14 -0
- package/cjs/resources/ExchangeRates.js +17 -0
- package/cjs/resources/FileLinks.js +16 -0
- package/cjs/resources/Files.js +24 -0
- package/cjs/resources/FinancialConnections/Accounts.js +38 -0
- package/cjs/resources/FinancialConnections/Sessions.js +16 -0
- package/cjs/resources/FinancialConnections/Transactions.js +17 -0
- package/cjs/resources/Forwarding/Requests.js +18 -0
- package/cjs/resources/Identity/VerificationReports.js +17 -0
- package/cjs/resources/Identity/VerificationSessions.js +33 -0
- package/cjs/resources/InvoiceItems.js +131 -0
- package/cjs/resources/InvoicePayments.js +17 -0
- package/cjs/resources/InvoiceRenderingTemplates.js +25 -0
- package/cjs/resources/Invoices.js +776 -0
- package/cjs/resources/Issuing/Authorizations.js +847 -0
- package/cjs/resources/Issuing/Cardholders.js +22 -0
- package/cjs/resources/Issuing/Cards.js +16 -0
- package/cjs/resources/Issuing/Disputes.js +26 -0
- package/cjs/resources/Issuing/PersonalizationDesigns.js +25 -0
- package/cjs/resources/Issuing/PhysicalBundles.js +17 -0
- package/cjs/resources/Issuing/Tokens.js +21 -0
- package/cjs/resources/Issuing/Transactions.js +275 -0
- package/cjs/resources/Mandates.js +9 -0
- package/cjs/resources/OAuth.js +44 -0
- package/cjs/resources/PaymentAttemptRecords.js +17 -0
- package/cjs/resources/PaymentIntents.js +56 -0
- package/cjs/resources/PaymentLinks.js +420 -0
- package/cjs/resources/PaymentMethodConfigurations.js +25 -0
- package/cjs/resources/PaymentMethodDomains.js +29 -0
- package/cjs/resources/PaymentMethods.js +30 -0
- package/cjs/resources/PaymentRecords.js +37 -0
- package/cjs/resources/Payouts.js +24 -0
- package/cjs/resources/Plans.js +141 -0
- package/cjs/resources/Prices.js +346 -0
- package/cjs/resources/Products.js +72 -0
- package/cjs/resources/PromotionCodes.js +22 -0
- package/cjs/resources/Quotes.js +825 -0
- package/cjs/resources/Radar/EarlyFraudWarnings.js +17 -0
- package/cjs/resources/Radar/PaymentEvaluations.js +12 -0
- package/cjs/resources/Radar/ValueListItems.js +25 -0
- package/cjs/resources/Radar/ValueLists.js +26 -0
- package/cjs/resources/Refunds.js +20 -0
- package/cjs/resources/Reporting/ReportRuns.js +18 -0
- package/cjs/resources/Reporting/ReportTypes.js +17 -0
- package/cjs/resources/Reviews.js +18 -0
- package/cjs/resources/SetupAttempts.js +13 -0
- package/cjs/resources/SetupIntents.js +34 -0
- package/cjs/resources/ShippingRates.js +22 -0
- package/cjs/resources/Sigma/ScheduledQueryRuns.js +17 -0
- package/cjs/resources/Sources.js +20 -0
- package/cjs/resources/SubscriptionItems.js +378 -0
- package/cjs/resources/SubscriptionSchedules.js +107 -0
- package/cjs/resources/Subscriptions.js +888 -0
- package/cjs/resources/Tax/Associations.js +9 -0
- package/cjs/resources/Tax/Calculations.js +18 -0
- package/cjs/resources/Tax/Registrations.js +22 -0
- package/cjs/resources/Tax/Settings.js +10 -0
- package/cjs/resources/Tax/Transactions.js +25 -0
- package/cjs/resources/TaxCodes.js +14 -0
- package/cjs/resources/TaxIds.js +16 -0
- package/cjs/resources/TaxRates.js +16 -0
- package/cjs/resources/Terminal/Configurations.js +29 -0
- package/cjs/resources/Terminal/ConnectionTokens.js +12 -0
- package/cjs/resources/Terminal/Locations.js +26 -0
- package/cjs/resources/Terminal/OnboardingLinks.js +12 -0
- package/cjs/resources/Terminal/Readers.js +58 -0
- package/cjs/resources/TestHelpers/ConfirmationTokens.js +12 -0
- package/cjs/resources/TestHelpers/Customers.js +12 -0
- package/cjs/resources/TestHelpers/Issuing/Authorizations.js +1293 -0
- package/cjs/resources/TestHelpers/Issuing/Cards.js +28 -0
- package/cjs/resources/TestHelpers/Issuing/PersonalizationDesigns.js +20 -0
- package/cjs/resources/TestHelpers/Issuing/Transactions.js +364 -0
- package/cjs/resources/TestHelpers/Refunds.js +12 -0
- package/cjs/resources/TestHelpers/Terminal/Readers.js +20 -0
- package/cjs/resources/TestHelpers/TestClocks.js +29 -0
- package/cjs/resources/TestHelpers/Treasury/InboundTransfers.js +20 -0
- package/cjs/resources/TestHelpers/Treasury/OutboundPayments.js +24 -0
- package/cjs/resources/TestHelpers/Treasury/OutboundTransfers.js +24 -0
- package/cjs/resources/TestHelpers/Treasury/ReceivedCredits.js +12 -0
- package/cjs/resources/TestHelpers/Treasury/ReceivedDebits.js +12 -0
- package/cjs/resources/Tokens.js +10 -0
- package/cjs/resources/Topups.js +17 -0
- package/cjs/resources/Transfers.js +33 -0
- package/cjs/resources/Treasury/CreditReversals.js +21 -0
- package/cjs/resources/Treasury/DebitReversals.js +21 -0
- package/cjs/resources/Treasury/FinancialAccounts.js +37 -0
- package/cjs/resources/Treasury/InboundTransfers.js +25 -0
- package/cjs/resources/Treasury/OutboundPayments.js +25 -0
- package/cjs/resources/Treasury/OutboundTransfers.js +25 -0
- package/cjs/resources/Treasury/ReceivedCredits.js +17 -0
- package/cjs/resources/Treasury/ReceivedDebits.js +17 -0
- package/cjs/resources/Treasury/TransactionEntries.js +393 -0
- package/cjs/resources/Treasury/Transactions.js +447 -0
- package/cjs/resources/V2/Billing/MeterEventAdjustments.js +12 -0
- package/cjs/resources/V2/Billing/MeterEventSession.js +12 -0
- package/cjs/resources/V2/Billing/MeterEventStream.js +13 -0
- package/cjs/resources/V2/Billing/MeterEvents.js +9 -0
- package/cjs/resources/V2/Core/AccountLinks.js +9 -0
- package/cjs/resources/V2/Core/AccountTokens.js +35 -0
- package/cjs/resources/V2/Core/Accounts/PersonTokens.js +25 -0
- package/cjs/resources/V2/Core/Accounts/Persons.js +91 -0
- package/cjs/resources/V2/Core/Accounts.js +177 -0
- package/cjs/resources/V2/Core/EventDestinations.js +41 -0
- package/cjs/resources/V2/Core/Events.js +66 -0
- package/cjs/resources/WebhookEndpoints.js +26 -0
- package/cjs/resources.js +324 -0
- package/cjs/stripe.cjs.node.js +13 -0
- package/cjs/stripe.cjs.worker.js +13 -0
- package/cjs/stripe.core.js +412 -0
- package/cjs/utils.js +477 -0
- package/esm/Decimal.js +850 -0
- package/esm/Error.js +259 -0
- package/esm/RequestSender.js +465 -0
- package/esm/ResourceNamespace.js +17 -0
- package/esm/StripeContext.js +52 -0
- package/esm/StripeEmitter.js +42 -0
- package/esm/StripeMethod.js +32 -0
- package/esm/StripeResource.js +185 -0
- package/esm/V2Coercion.js +104 -0
- package/esm/Webhooks.js +221 -0
- package/esm/apiVersion.js +3 -0
- package/esm/autoPagination.js +290 -0
- package/esm/crypto/CryptoProvider.js +46 -0
- package/esm/crypto/NodeCryptoProvider.js +26 -0
- package/esm/crypto/SubtleCryptoProvider.js +47 -0
- package/esm/multipart.js +57 -0
- package/esm/net/FetchHttpClient.js +140 -0
- package/esm/net/HttpClient.js +48 -0
- package/esm/net/NodeHttpClient.js +103 -0
- package/esm/package.json +1 -0
- package/esm/platform/NodePlatformFunctions.js +94 -0
- package/esm/platform/PlatformFunctions.js +94 -0
- package/esm/platform/WebPlatformFunctions.js +34 -0
- package/esm/resources/AccountLinks.js +6 -0
- package/esm/resources/AccountSessions.js +6 -0
- package/esm/resources/Accounts.js +98 -0
- package/esm/resources/ApplePayDomains.js +19 -0
- package/esm/resources/ApplicationFees.js +31 -0
- package/esm/resources/Apps/Secrets.js +16 -0
- package/esm/resources/Balance.js +6 -0
- package/esm/resources/BalanceSettings.js +7 -0
- package/esm/resources/BalanceTransactions.js +14 -0
- package/esm/resources/Billing/Alerts.js +24 -0
- package/esm/resources/Billing/CreditBalanceSummary.js +9 -0
- package/esm/resources/Billing/CreditBalanceTransactions.js +14 -0
- package/esm/resources/Billing/CreditGrants.js +27 -0
- package/esm/resources/Billing/MeterEventAdjustments.js +9 -0
- package/esm/resources/Billing/MeterEvents.js +6 -0
- package/esm/resources/Billing/Meters.js +26 -0
- package/esm/resources/BillingPortal/Configurations.js +22 -0
- package/esm/resources/BillingPortal/Sessions.js +9 -0
- package/esm/resources/Charges.js +22 -0
- package/esm/resources/Checkout/Sessions.js +535 -0
- package/esm/resources/Climate/Orders.js +58 -0
- package/esm/resources/Climate/Products.js +30 -0
- package/esm/resources/Climate/Suppliers.js +14 -0
- package/esm/resources/ConfirmationTokens.js +9 -0
- package/esm/resources/CountrySpecs.js +14 -0
- package/esm/resources/Coupons.js +14 -0
- package/esm/resources/CreditNotes.js +250 -0
- package/esm/resources/CustomerSessions.js +6 -0
- package/esm/resources/Customers.js +578 -0
- package/esm/resources/Disputes.js +16 -0
- package/esm/resources/Entitlements/ActiveEntitlements.js +14 -0
- package/esm/resources/Entitlements/Features.js +19 -0
- package/esm/resources/EphemeralKeys.js +15 -0
- package/esm/resources/Events.js +11 -0
- package/esm/resources/ExchangeRates.js +14 -0
- package/esm/resources/FileLinks.js +13 -0
- package/esm/resources/Files.js +21 -0
- package/esm/resources/FinancialConnections/Accounts.js +35 -0
- package/esm/resources/FinancialConnections/Sessions.js +13 -0
- package/esm/resources/FinancialConnections/Transactions.js +14 -0
- package/esm/resources/Forwarding/Requests.js +15 -0
- package/esm/resources/Identity/VerificationReports.js +14 -0
- package/esm/resources/Identity/VerificationSessions.js +30 -0
- package/esm/resources/InvoiceItems.js +128 -0
- package/esm/resources/InvoicePayments.js +14 -0
- package/esm/resources/InvoiceRenderingTemplates.js +22 -0
- package/esm/resources/Invoices.js +773 -0
- package/esm/resources/Issuing/Authorizations.js +844 -0
- package/esm/resources/Issuing/Cardholders.js +19 -0
- package/esm/resources/Issuing/Cards.js +13 -0
- package/esm/resources/Issuing/Disputes.js +23 -0
- package/esm/resources/Issuing/PersonalizationDesigns.js +22 -0
- package/esm/resources/Issuing/PhysicalBundles.js +14 -0
- package/esm/resources/Issuing/Tokens.js +18 -0
- package/esm/resources/Issuing/Transactions.js +272 -0
- package/esm/resources/Mandates.js +6 -0
- package/esm/resources/OAuth.js +42 -0
- package/esm/resources/PaymentAttemptRecords.js +14 -0
- package/esm/resources/PaymentIntents.js +53 -0
- package/esm/resources/PaymentLinks.js +417 -0
- package/esm/resources/PaymentMethodConfigurations.js +22 -0
- package/esm/resources/PaymentMethodDomains.js +26 -0
- package/esm/resources/PaymentMethods.js +27 -0
- package/esm/resources/PaymentRecords.js +34 -0
- package/esm/resources/Payouts.js +21 -0
- package/esm/resources/Plans.js +138 -0
- package/esm/resources/Prices.js +343 -0
- package/esm/resources/Products.js +69 -0
- package/esm/resources/PromotionCodes.js +19 -0
- package/esm/resources/Quotes.js +822 -0
- package/esm/resources/Radar/EarlyFraudWarnings.js +14 -0
- package/esm/resources/Radar/PaymentEvaluations.js +9 -0
- package/esm/resources/Radar/ValueListItems.js +22 -0
- package/esm/resources/Radar/ValueLists.js +23 -0
- package/esm/resources/Refunds.js +17 -0
- package/esm/resources/Reporting/ReportRuns.js +15 -0
- package/esm/resources/Reporting/ReportTypes.js +14 -0
- package/esm/resources/Reviews.js +15 -0
- package/esm/resources/SetupAttempts.js +10 -0
- package/esm/resources/SetupIntents.js +31 -0
- package/esm/resources/ShippingRates.js +19 -0
- package/esm/resources/Sigma/ScheduledQueryRuns.js +14 -0
- package/esm/resources/Sources.js +17 -0
- package/esm/resources/SubscriptionItems.js +375 -0
- package/esm/resources/SubscriptionSchedules.js +104 -0
- package/esm/resources/Subscriptions.js +885 -0
- package/esm/resources/Tax/Associations.js +6 -0
- package/esm/resources/Tax/Calculations.js +15 -0
- package/esm/resources/Tax/Registrations.js +19 -0
- package/esm/resources/Tax/Settings.js +7 -0
- package/esm/resources/Tax/Transactions.js +22 -0
- package/esm/resources/TaxCodes.js +11 -0
- package/esm/resources/TaxIds.js +13 -0
- package/esm/resources/TaxRates.js +13 -0
- package/esm/resources/Terminal/Configurations.js +26 -0
- package/esm/resources/Terminal/ConnectionTokens.js +9 -0
- package/esm/resources/Terminal/Locations.js +23 -0
- package/esm/resources/Terminal/OnboardingLinks.js +9 -0
- package/esm/resources/Terminal/Readers.js +55 -0
- package/esm/resources/TestHelpers/ConfirmationTokens.js +9 -0
- package/esm/resources/TestHelpers/Customers.js +9 -0
- package/esm/resources/TestHelpers/Issuing/Authorizations.js +1290 -0
- package/esm/resources/TestHelpers/Issuing/Cards.js +25 -0
- package/esm/resources/TestHelpers/Issuing/PersonalizationDesigns.js +17 -0
- package/esm/resources/TestHelpers/Issuing/Transactions.js +361 -0
- package/esm/resources/TestHelpers/Refunds.js +9 -0
- package/esm/resources/TestHelpers/Terminal/Readers.js +17 -0
- package/esm/resources/TestHelpers/TestClocks.js +26 -0
- package/esm/resources/TestHelpers/Treasury/InboundTransfers.js +17 -0
- package/esm/resources/TestHelpers/Treasury/OutboundPayments.js +21 -0
- package/esm/resources/TestHelpers/Treasury/OutboundTransfers.js +21 -0
- package/esm/resources/TestHelpers/Treasury/ReceivedCredits.js +9 -0
- package/esm/resources/TestHelpers/Treasury/ReceivedDebits.js +9 -0
- package/esm/resources/Tokens.js +7 -0
- package/esm/resources/Topups.js +14 -0
- package/esm/resources/Transfers.js +30 -0
- package/esm/resources/Treasury/CreditReversals.js +18 -0
- package/esm/resources/Treasury/DebitReversals.js +18 -0
- package/esm/resources/Treasury/FinancialAccounts.js +34 -0
- package/esm/resources/Treasury/InboundTransfers.js +22 -0
- package/esm/resources/Treasury/OutboundPayments.js +22 -0
- package/esm/resources/Treasury/OutboundTransfers.js +22 -0
- package/esm/resources/Treasury/ReceivedCredits.js +14 -0
- package/esm/resources/Treasury/ReceivedDebits.js +14 -0
- package/esm/resources/Treasury/TransactionEntries.js +390 -0
- package/esm/resources/Treasury/Transactions.js +444 -0
- package/esm/resources/V2/Billing/MeterEventAdjustments.js +9 -0
- package/esm/resources/V2/Billing/MeterEventSession.js +9 -0
- package/esm/resources/V2/Billing/MeterEventStream.js +10 -0
- package/esm/resources/V2/Billing/MeterEvents.js +6 -0
- package/esm/resources/V2/Core/AccountLinks.js +6 -0
- package/esm/resources/V2/Core/AccountTokens.js +32 -0
- package/esm/resources/V2/Core/Accounts/PersonTokens.js +22 -0
- package/esm/resources/V2/Core/Accounts/Persons.js +88 -0
- package/esm/resources/V2/Core/Accounts.js +174 -0
- package/esm/resources/V2/Core/EventDestinations.js +38 -0
- package/esm/resources/V2/Core/Events.js +63 -0
- package/esm/resources/WebhookEndpoints.js +23 -0
- package/esm/resources.js +263 -0
- package/esm/stripe.core.js +408 -0
- package/esm/stripe.esm.node.js +5 -0
- package/esm/stripe.esm.worker.js +5 -0
- package/esm/utils.js +450 -0
- package/package.json +110 -0
- package/types/.eslintrc.js +22 -0
- package/types/AccountLinks.d.ts +33 -0
- package/types/AccountLinksResource.d.ts +78 -0
- package/types/AccountSessions.d.ts +578 -0
- package/types/AccountSessionsResource.d.ts +677 -0
- package/types/Accounts.d.ts +1736 -0
- package/types/AccountsResource.d.ts +5312 -0
- package/types/ApplePayDomains.d.ts +57 -0
- package/types/ApplePayDomainsResource.d.ts +77 -0
- package/types/ApplicationFees.d.ts +108 -0
- package/types/ApplicationFeesResource.d.ts +162 -0
- package/types/Applications.d.ts +55 -0
- package/types/Apps/Secrets.d.ts +80 -0
- package/types/Apps/SecretsResource.d.ts +186 -0
- package/types/Balance.d.ts +343 -0
- package/types/BalanceResource.d.ts +26 -0
- package/types/BalanceSettings.d.ts +103 -0
- package/types/BalanceSettingsResource.d.ts +124 -0
- package/types/BalanceTransactionSources.d.ts +23 -0
- package/types/BalanceTransactions.d.ts +176 -0
- package/types/BalanceTransactionsResource.d.ts +72 -0
- package/types/BankAccounts.d.ts +433 -0
- package/types/Billing/AlertTriggereds.d.ts +42 -0
- package/types/Billing/Alerts.d.ts +84 -0
- package/types/Billing/AlertsResource.d.ts +183 -0
- package/types/Billing/CreditBalanceSummary.d.ts +99 -0
- package/types/Billing/CreditBalanceSummaryResource.d.ts +83 -0
- package/types/Billing/CreditBalanceTransactions.d.ts +178 -0
- package/types/Billing/CreditBalanceTransactionsResource.d.ts +62 -0
- package/types/Billing/CreditGrants.d.ts +150 -0
- package/types/Billing/CreditGrantsResource.d.ts +248 -0
- package/types/Billing/MeterEventAdjustments.d.ts +53 -0
- package/types/Billing/MeterEventAdjustmentsResource.d.ts +48 -0
- package/types/Billing/MeterEventSummaries.d.ts +50 -0
- package/types/Billing/MeterEvents.d.ts +49 -0
- package/types/Billing/MeterEventsResource.d.ts +46 -0
- package/types/Billing/Meters.d.ts +110 -0
- package/types/Billing/MetersResource.d.ts +234 -0
- package/types/BillingPortal/Configurations.d.ts +319 -0
- package/types/BillingPortal/ConfigurationsResource.d.ts +679 -0
- package/types/BillingPortal/Sessions.d.ts +293 -0
- package/types/BillingPortal/SessionsResource.d.ts +273 -0
- package/types/Capabilities.d.ts +422 -0
- package/types/Cards.d.ts +225 -0
- package/types/CashBalances.d.ts +57 -0
- package/types/Charges.d.ts +2646 -0
- package/types/ChargesResource.d.ts +426 -0
- package/types/Checkout/Sessions.d.ts +2878 -0
- package/types/Checkout/SessionsResource.d.ts +4027 -0
- package/types/Climate/Orders.d.ts +197 -0
- package/types/Climate/OrdersResource.d.ts +159 -0
- package/types/Climate/Products.d.ts +81 -0
- package/types/Climate/ProductsResource.d.ts +45 -0
- package/types/Climate/Suppliers.d.ts +82 -0
- package/types/Climate/SuppliersResource.d.ts +45 -0
- package/types/ConfirmationTokens.d.ts +1755 -0
- package/types/ConfirmationTokensResource.d.ts +27 -0
- package/types/ConnectCollectionTransfers.d.ts +40 -0
- package/types/CountrySpecs.d.ts +88 -0
- package/types/CountrySpecsResource.d.ts +43 -0
- package/types/Coupons.d.ts +139 -0
- package/types/CouponsResource.d.ts +203 -0
- package/types/CreditNoteLineItems.d.ts +195 -0
- package/types/CreditNotes.d.ts +408 -0
- package/types/CreditNotesResource.d.ts +765 -0
- package/types/CustomerBalanceTransactions.d.ts +106 -0
- package/types/CustomerCashBalanceTransactions.d.ts +230 -0
- package/types/CustomerSessions.d.ts +283 -0
- package/types/CustomerSessionsResource.d.ts +263 -0
- package/types/CustomerSources.d.ts +9 -0
- package/types/Customers.d.ts +326 -0
- package/types/CustomersResource.d.ts +1554 -0
- package/types/Discounts.d.ts +175 -0
- package/types/Disputes.d.ts +519 -0
- package/types/DisputesResource.d.ts +384 -0
- package/types/Entitlements/ActiveEntitlementSummaries.d.ts +32 -0
- package/types/Entitlements/ActiveEntitlements.d.ts +37 -0
- package/types/Entitlements/ActiveEntitlementsResource.d.ts +49 -0
- package/types/Entitlements/Features.d.ts +48 -0
- package/types/Entitlements/FeaturesResource.d.ts +118 -0
- package/types/EphemeralKeys.d.ts +40 -0
- package/types/EphemeralKeysResource.d.ts +65 -0
- package/types/Errors.d.ts +356 -0
- package/types/EventTypes.d.ts +4443 -0
- package/types/Events.d.ts +373 -0
- package/types/EventsResource.d.ts +63 -0
- package/types/ExchangeRates.d.ts +54 -0
- package/types/ExchangeRatesResource.d.ts +49 -0
- package/types/ExternalAccounts.d.ts +9 -0
- package/types/FeeRefunds.d.ts +54 -0
- package/types/FileLinks.d.ts +57 -0
- package/types/FileLinksResource.d.ts +114 -0
- package/types/Files.d.ts +96 -0
- package/types/FilesResource.d.ts +146 -0
- package/types/FinancialConnections/AccountOwners.d.ts +52 -0
- package/types/FinancialConnections/AccountOwnerships.d.ts +32 -0
- package/types/FinancialConnections/Accounts.d.ts +325 -0
- package/types/FinancialConnections/AccountsResource.d.ts +184 -0
- package/types/FinancialConnections/Sessions.d.ts +113 -0
- package/types/FinancialConnections/SessionsResource.d.ts +128 -0
- package/types/FinancialConnections/Transactions.d.ts +85 -0
- package/types/FinancialConnections/TransactionsResource.d.ts +68 -0
- package/types/Forwarding/Requests.d.ts +165 -0
- package/types/Forwarding/RequestsResource.d.ts +127 -0
- package/types/FundingInstructions.d.ts +297 -0
- package/types/Identity/VerificationReports.d.ts +487 -0
- package/types/Identity/VerificationReportsResource.d.ts +71 -0
- package/types/Identity/VerificationSessions.d.ts +352 -0
- package/types/Identity/VerificationSessionsResource.d.ts +366 -0
- package/types/InvoiceItems.d.ts +240 -0
- package/types/InvoiceItemsResource.d.ts +424 -0
- package/types/InvoiceLineItems.d.ts +366 -0
- package/types/InvoicePayments.d.ts +111 -0
- package/types/InvoicePaymentsResource.d.ts +88 -0
- package/types/InvoiceRenderingTemplates.d.ts +55 -0
- package/types/InvoiceRenderingTemplatesResource.d.ts +93 -0
- package/types/Invoices.d.ts +1650 -0
- package/types/InvoicesResource.d.ts +4196 -0
- package/types/Issuing/Authorizations.d.ts +689 -0
- package/types/Issuing/AuthorizationsResource.d.ts +151 -0
- package/types/Issuing/Cardholders.d.ts +1184 -0
- package/types/Issuing/CardholdersResource.d.ts +2411 -0
- package/types/Issuing/Cards.d.ts +1312 -0
- package/types/Issuing/CardsResource.d.ts +2371 -0
- package/types/Issuing/Disputes.d.ts +383 -0
- package/types/Issuing/DisputesResource.d.ts +776 -0
- package/types/Issuing/PersonalizationDesigns.d.ts +142 -0
- package/types/Issuing/PersonalizationDesignsResource.d.ts +253 -0
- package/types/Issuing/PhysicalBundles.d.ts +75 -0
- package/types/Issuing/PhysicalBundlesResource.d.ts +63 -0
- package/types/Issuing/Tokens.d.ts +273 -0
- package/types/Issuing/TokensResource.d.ts +88 -0
- package/types/Issuing/Transactions.d.ts +479 -0
- package/types/Issuing/TransactionsResource.d.ts +92 -0
- package/types/LineItems.d.ts +145 -0
- package/types/LoginLinks.d.ts +26 -0
- package/types/Mandates.d.ts +373 -0
- package/types/MandatesResource.d.ts +27 -0
- package/types/OAuth.d.ts +355 -0
- package/types/PaymentAttemptRecords.d.ts +2438 -0
- package/types/PaymentAttemptRecordsResource.d.ts +57 -0
- package/types/PaymentIntentAmountDetailsLineItems.d.ts +126 -0
- package/types/PaymentIntents.d.ts +3162 -0
- package/types/PaymentIntentsResource.d.ts +11473 -0
- package/types/PaymentLinks.d.ts +1051 -0
- package/types/PaymentLinksResource.d.ts +2334 -0
- package/types/PaymentMethodConfigurations.d.ts +2045 -0
- package/types/PaymentMethodConfigurationsResource.d.ts +2958 -0
- package/types/PaymentMethodDomains.d.ts +213 -0
- package/types/PaymentMethodDomainsResource.d.ts +126 -0
- package/types/PaymentMethods.d.ts +1645 -0
- package/types/PaymentMethodsResource.d.ts +1223 -0
- package/types/PaymentRecords.d.ts +2438 -0
- package/types/PaymentRecordsResource.d.ts +657 -0
- package/types/Payouts.d.ts +177 -0
- package/types/PayoutsResource.d.ts +201 -0
- package/types/Persons.d.ts +824 -0
- package/types/Plans.d.ts +195 -0
- package/types/PlansResource.d.ts +303 -0
- package/types/Prices.d.ts +325 -0
- package/types/PricesResource.d.ts +607 -0
- package/types/ProductFeatures.d.ts +57 -0
- package/types/Products.d.ts +170 -0
- package/types/ProductsResource.d.ts +616 -0
- package/types/PromotionCodes.d.ts +125 -0
- package/types/PromotionCodesResource.d.ts +233 -0
- package/types/Quotes.d.ts +690 -0
- package/types/QuotesResource.d.ts +898 -0
- package/types/Radar/EarlyFraudWarnings.d.ts +55 -0
- package/types/Radar/EarlyFraudWarningsResource.d.ts +64 -0
- package/types/Radar/PaymentEvaluations.d.ts +580 -0
- package/types/Radar/PaymentEvaluationsResource.d.ts +208 -0
- package/types/Radar/ValueListItems.d.ts +74 -0
- package/types/Radar/ValueListItemsResource.d.ts +99 -0
- package/types/Radar/ValueLists.d.ts +104 -0
- package/types/Radar/ValueListsResource.d.ts +156 -0
- package/types/Refunds.d.ts +487 -0
- package/types/RefundsResource.d.ts +187 -0
- package/types/Reporting/ReportRuns.d.ts +115 -0
- package/types/Reporting/ReportRunsResource.d.ts +763 -0
- package/types/Reporting/ReportTypes.d.ts +64 -0
- package/types/Reporting/ReportTypesResource.d.ts +47 -0
- package/types/Reserve/Holds.d.ts +104 -0
- package/types/Reserve/Plans.d.ts +103 -0
- package/types/Reserve/Releases.d.ts +105 -0
- package/types/ReserveTransactions.d.ts +32 -0
- package/types/Reviews.d.ts +146 -0
- package/types/ReviewsResource.d.ts +68 -0
- package/types/SetupAttempts.d.ts +878 -0
- package/types/SetupAttemptsResource.d.ts +35 -0
- package/types/SetupIntents.d.ts +1105 -0
- package/types/SetupIntentsResource.d.ts +5251 -0
- package/types/ShippingRates.d.ts +155 -0
- package/types/ShippingRatesResource.d.ts +262 -0
- package/types/Sigma/ScheduledQueryRuns.d.ts +76 -0
- package/types/Sigma/ScheduledQueryRunsResource.d.ts +47 -0
- package/types/SourceMandateNotifications.d.ts +105 -0
- package/types/SourceTransactions.d.ts +203 -0
- package/types/Sources.d.ts +746 -0
- package/types/SourcesResource.d.ts +611 -0
- package/types/SubscriptionItems.d.ts +122 -0
- package/types/SubscriptionItemsResource.d.ts +441 -0
- package/types/SubscriptionSchedules.d.ts +687 -0
- package/types/SubscriptionSchedulesResource.d.ts +1565 -0
- package/types/Subscriptions.d.ts +852 -0
- package/types/SubscriptionsResource.d.ts +2326 -0
- package/types/Tax/Associations.d.ts +82 -0
- package/types/Tax/AssociationsResource.d.ts +29 -0
- package/types/Tax/CalculationLineItems.d.ts +187 -0
- package/types/Tax/Calculations.d.ts +511 -0
- package/types/Tax/CalculationsResource.d.ts +406 -0
- package/types/Tax/Registrations.d.ts +1710 -0
- package/types/Tax/RegistrationsResource.d.ts +2583 -0
- package/types/Tax/Settings.d.ts +86 -0
- package/types/Tax/SettingsResource.d.ts +77 -0
- package/types/Tax/TransactionLineItems.d.ts +90 -0
- package/types/Tax/Transactions.d.ts +418 -0
- package/types/Tax/TransactionsResource.d.ts +182 -0
- package/types/TaxCodes.d.ts +30 -0
- package/types/TaxCodesResource.d.ts +43 -0
- package/types/TaxDeductedAtSources.d.ts +35 -0
- package/types/TaxIds.d.ts +262 -0
- package/types/TaxIdsResource.d.ts +263 -0
- package/types/TaxRates.d.ts +144 -0
- package/types/TaxRatesResource.d.ts +215 -0
- package/types/Terminal/Configurations.d.ts +630 -0
- package/types/Terminal/ConfigurationsResource.d.ts +1469 -0
- package/types/Terminal/ConnectionTokens.d.ts +29 -0
- package/types/Terminal/ConnectionTokensResource.d.ts +32 -0
- package/types/Terminal/Locations.d.ts +166 -0
- package/types/Terminal/LocationsResource.d.ts +233 -0
- package/types/Terminal/OnboardingLinks.d.ts +57 -0
- package/types/Terminal/OnboardingLinksResource.d.ts +62 -0
- package/types/Terminal/Readers.d.ts +676 -0
- package/types/Terminal/ReadersResource.d.ts +665 -0
- package/types/TestHelpers/ConfirmationTokensResource.d.ts +936 -0
- package/types/TestHelpers/CustomersResource.d.ts +40 -0
- package/types/TestHelpers/Issuing/AuthorizationsResource.d.ts +1404 -0
- package/types/TestHelpers/Issuing/CardsResource.d.ts +121 -0
- package/types/TestHelpers/Issuing/PersonalizationDesignsResource.d.ts +113 -0
- package/types/TestHelpers/Issuing/TransactionsResource.d.ts +1354 -0
- package/types/TestHelpers/RefundsResource.d.ts +29 -0
- package/types/TestHelpers/Terminal/ReadersResource.d.ts +151 -0
- package/types/TestHelpers/TestClocks.d.ts +98 -0
- package/types/TestHelpers/TestClocksResource.d.ts +108 -0
- package/types/TestHelpers/Treasury/InboundTransfersResource.d.ts +108 -0
- package/types/TestHelpers/Treasury/OutboundPaymentsResource.d.ts +175 -0
- package/types/TestHelpers/Treasury/OutboundTransfersResource.d.ts +175 -0
- package/types/TestHelpers/Treasury/ReceivedCreditsResource.d.ts +93 -0
- package/types/TestHelpers/Treasury/ReceivedDebitsResource.d.ts +91 -0
- package/types/Tokens.d.ts +84 -0
- package/types/TokensResource.d.ts +1086 -0
- package/types/Topups.d.ts +103 -0
- package/types/TopupsResource.d.ts +158 -0
- package/types/TransferReversals.d.ts +72 -0
- package/types/Transfers.d.ts +104 -0
- package/types/TransfersResource.d.ts +260 -0
- package/types/Treasury/CreditReversals.d.ts +92 -0
- package/types/Treasury/CreditReversalsResource.d.ts +88 -0
- package/types/Treasury/DebitReversals.d.ts +104 -0
- package/types/Treasury/DebitReversalsResource.d.ts +95 -0
- package/types/Treasury/FinancialAccountFeatures.d.ts +623 -0
- package/types/Treasury/FinancialAccounts.d.ts +250 -0
- package/types/Treasury/FinancialAccountsResource.d.ts +733 -0
- package/types/Treasury/InboundTransfers.d.ts +235 -0
- package/types/Treasury/InboundTransfersResource.d.ts +128 -0
- package/types/Treasury/OutboundPayments.d.ts +324 -0
- package/types/Treasury/OutboundPaymentsResource.d.ts +285 -0
- package/types/Treasury/OutboundTransfers.d.ts +299 -0
- package/types/Treasury/OutboundTransfersResource.d.ts +179 -0
- package/types/Treasury/ReceivedCredits.d.ts +279 -0
- package/types/Treasury/ReceivedCreditsResource.d.ts +79 -0
- package/types/Treasury/ReceivedDebits.d.ts +227 -0
- package/types/Treasury/ReceivedDebitsResource.d.ts +58 -0
- package/types/Treasury/TransactionEntries.d.ts +203 -0
- package/types/Treasury/TransactionEntriesResource.d.ts +70 -0
- package/types/Treasury/Transactions.d.ts +202 -0
- package/types/Treasury/TransactionsResource.d.ts +82 -0
- package/types/UpcomingInvoices.d.ts +5 -0
- package/types/V2/Billing/MeterEventAdjustments.d.ts +65 -0
- package/types/V2/Billing/MeterEventAdjustmentsResource.d.ts +47 -0
- package/types/V2/Billing/MeterEventSessionResource.d.ts +26 -0
- package/types/V2/Billing/MeterEventSessions.d.ts +45 -0
- package/types/V2/Billing/MeterEventStreamResource.d.ts +62 -0
- package/types/V2/Billing/MeterEvents.d.ts +55 -0
- package/types/V2/Billing/MeterEventsResource.d.ts +52 -0
- package/types/V2/Core/AccountLinks.d.ts +160 -0
- package/types/V2/Core/AccountLinksResource.d.ts +145 -0
- package/types/V2/Core/AccountPersonTokens.d.ts +44 -0
- package/types/V2/Core/AccountPersons.d.ts +661 -0
- package/types/V2/Core/AccountTokens.d.ts +44 -0
- package/types/V2/Core/AccountTokensResource.d.ts +1149 -0
- package/types/V2/Core/Accounts/PersonTokensResource.d.ts +556 -0
- package/types/V2/Core/Accounts/PersonsResource.d.ts +1260 -0
- package/types/V2/Core/Accounts.d.ts +5422 -0
- package/types/V2/Core/AccountsResource.d.ts +5042 -0
- package/types/V2/Core/EventDestinations.d.ts +168 -0
- package/types/V2/Core/EventDestinationsResource.d.ts +278 -0
- package/types/V2/Core/EventTypes.d.ts +798 -0
- package/types/V2/Core/Events.d.ts +86 -0
- package/types/V2/Core/EventsResource.d.ts +63 -0
- package/types/V2/DeletedObject.d.ts +22 -0
- package/types/V2/EventMisc.d.ts +80 -0
- package/types/WebhookEndpoints.d.ts +101 -0
- package/types/WebhookEndpointsResource.d.ts +798 -0
- package/types/Webhooks.d.ts +164 -0
- package/types/apiVersion.d.ts +4 -0
- package/types/crypto/crypto.d.ts +59 -0
- package/types/index.d.ts +596 -0
- package/types/lib.d.ts +420 -0
- package/types/net/net.d.ts +99 -0
- package/types/shared.d.ts +178 -0
- package/types/test/.eslintrc.js +6 -0
- package/types/test/tsconfig.json +67 -0
- package/types/test/typescriptTest.ts +357 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
import { StripeAPIError, StripeConnectionError, StripeError, generateOAuthError, generateV1Error, generateV2Error, } from './Error.js';
|
|
2
|
+
import { HttpClient } from './net/HttpClient.js';
|
|
3
|
+
import { emitWarning, jsonStringifyRequestData, normalizeHeaders, queryStringifyRequestData, removeNullish, getAPIMode, getOptionsFromArgs, getDataFromArgs, parseHttpHeaderAsString, parseHttpHeaderAsNumber, } from './utils.js';
|
|
4
|
+
const MAX_RETRY_AFTER_WAIT = 60;
|
|
5
|
+
export class RequestSender {
|
|
6
|
+
constructor(stripe, maxBufferedRequestMetric) {
|
|
7
|
+
this._stripe = stripe;
|
|
8
|
+
this._maxBufferedRequestMetric = maxBufferedRequestMetric;
|
|
9
|
+
}
|
|
10
|
+
_normalizeStripeContext(optsContext, clientContext) {
|
|
11
|
+
if (optsContext) {
|
|
12
|
+
return optsContext.toString() || null; // return null for empty strings
|
|
13
|
+
}
|
|
14
|
+
return clientContext?.toString() || null; // return null for empty strings
|
|
15
|
+
}
|
|
16
|
+
_addHeadersDirectlyToObject(obj, headers) {
|
|
17
|
+
// For convenience, make some headers easily accessible on
|
|
18
|
+
// lastResponse.
|
|
19
|
+
// NOTE: Stripe responds with lowercase header names/keys.
|
|
20
|
+
obj.requestId = headers['request-id'];
|
|
21
|
+
obj.stripeAccount = obj.stripeAccount || headers['stripe-account'];
|
|
22
|
+
obj.apiVersion = obj.apiVersion || headers['stripe-version'];
|
|
23
|
+
obj.idempotencyKey = obj.idempotencyKey || headers['idempotency-key'];
|
|
24
|
+
}
|
|
25
|
+
_makeResponseEvent(requestEvent, statusCode, headers) {
|
|
26
|
+
const requestEndTime = Date.now();
|
|
27
|
+
const requestDurationMs = requestEndTime - requestEvent.request_start_time;
|
|
28
|
+
return removeNullish({
|
|
29
|
+
api_version: headers['stripe-version'],
|
|
30
|
+
account: headers['stripe-account'],
|
|
31
|
+
idempotency_key: headers['idempotency-key'],
|
|
32
|
+
method: requestEvent.method,
|
|
33
|
+
path: requestEvent.path,
|
|
34
|
+
status: statusCode,
|
|
35
|
+
request_id: this._getRequestId(headers),
|
|
36
|
+
elapsed: requestDurationMs,
|
|
37
|
+
request_start_time: requestEvent.request_start_time,
|
|
38
|
+
request_end_time: requestEndTime,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
_getRequestId(headers) {
|
|
42
|
+
return headers['request-id'];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Used by methods with spec.streaming === true. For these methods, we do not
|
|
46
|
+
* buffer successful responses into memory or do parse them into stripe
|
|
47
|
+
* objects, we delegate that all of that to the user and pass back the raw
|
|
48
|
+
* http.Response object to the callback.
|
|
49
|
+
*
|
|
50
|
+
* (Unsuccessful responses shouldn't make it here, they should
|
|
51
|
+
* still be buffered/parsed and handled by _jsonResponseHandler -- see
|
|
52
|
+
* makeRequest)
|
|
53
|
+
*/
|
|
54
|
+
_streamingResponseHandler(requestEvent, usage, callback) {
|
|
55
|
+
return (res) => {
|
|
56
|
+
const headers = res.getHeaders();
|
|
57
|
+
const streamCompleteCallback = () => {
|
|
58
|
+
const responseEvent = this._makeResponseEvent(requestEvent, res.getStatusCode(), headers);
|
|
59
|
+
this._stripe._emitter.emit('response', responseEvent);
|
|
60
|
+
this._recordRequestMetrics(this._getRequestId(headers), responseEvent.elapsed, usage);
|
|
61
|
+
};
|
|
62
|
+
const stream = res.toStream(streamCompleteCallback);
|
|
63
|
+
// This is here for backwards compatibility, as the stream is a raw
|
|
64
|
+
// HTTP response in Node and the legacy behavior was to mutate this
|
|
65
|
+
// response.
|
|
66
|
+
this._addHeadersDirectlyToObject(stream, headers);
|
|
67
|
+
return callback(null, stream);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Default handler for Stripe responses. Buffers the response into memory,
|
|
72
|
+
* parses the JSON and returns it (i.e. passes it to the callback) if there
|
|
73
|
+
* is no "error" field. Otherwise constructs/passes an appropriate Error.
|
|
74
|
+
*/
|
|
75
|
+
_jsonResponseHandler(requestEvent, apiMode, usage, callback) {
|
|
76
|
+
return (res) => {
|
|
77
|
+
const headers = res.getHeaders();
|
|
78
|
+
const requestId = this._getRequestId(headers);
|
|
79
|
+
const statusCode = res.getStatusCode();
|
|
80
|
+
const responseEvent = this._makeResponseEvent(requestEvent, statusCode, headers);
|
|
81
|
+
this._stripe._emitter.emit('response', responseEvent);
|
|
82
|
+
res
|
|
83
|
+
.toJSON()
|
|
84
|
+
.then((jsonResponse) => {
|
|
85
|
+
if (jsonResponse.error) {
|
|
86
|
+
const isOAuth = typeof jsonResponse.error === 'string';
|
|
87
|
+
if (isOAuth) {
|
|
88
|
+
jsonResponse.error = {
|
|
89
|
+
type: jsonResponse.error,
|
|
90
|
+
message: jsonResponse.error_description,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
jsonResponse.error.headers = headers;
|
|
94
|
+
jsonResponse.error.statusCode = statusCode;
|
|
95
|
+
jsonResponse.error.requestId = requestId;
|
|
96
|
+
let err;
|
|
97
|
+
if (isOAuth) {
|
|
98
|
+
err = generateOAuthError(jsonResponse.error);
|
|
99
|
+
}
|
|
100
|
+
else if (apiMode === 'v2') {
|
|
101
|
+
err = generateV2Error(jsonResponse.error);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
err = generateV1Error(jsonResponse.error);
|
|
105
|
+
}
|
|
106
|
+
throw err;
|
|
107
|
+
}
|
|
108
|
+
return jsonResponse;
|
|
109
|
+
}, (e) => {
|
|
110
|
+
throw new StripeAPIError({
|
|
111
|
+
message: 'Invalid JSON received from the Stripe API',
|
|
112
|
+
exception: e,
|
|
113
|
+
requestId: headers['request-id'],
|
|
114
|
+
});
|
|
115
|
+
})
|
|
116
|
+
.then((jsonResponse) => {
|
|
117
|
+
this._recordRequestMetrics(requestId, responseEvent.elapsed, usage);
|
|
118
|
+
// Expose raw response object.
|
|
119
|
+
const rawResponse = res.getRawResponse();
|
|
120
|
+
this._addHeadersDirectlyToObject(rawResponse, headers);
|
|
121
|
+
Object.defineProperty(jsonResponse, 'lastResponse', {
|
|
122
|
+
enumerable: false,
|
|
123
|
+
writable: false,
|
|
124
|
+
value: rawResponse,
|
|
125
|
+
});
|
|
126
|
+
callback(null, jsonResponse);
|
|
127
|
+
}, (e) => callback(e, null));
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
static _generateConnectionErrorMessage(requestRetries) {
|
|
131
|
+
return `An error occurred with our connection to Stripe.${requestRetries > 0 ? ` Request was retried ${requestRetries} times.` : ''}`;
|
|
132
|
+
}
|
|
133
|
+
// For more on when and how to retry API requests, see https://stripe.com/docs/error-handling#safely-retrying-requests-with-idempotency
|
|
134
|
+
static _shouldRetry(res, numRetries, maxRetries, error) {
|
|
135
|
+
if (error &&
|
|
136
|
+
numRetries === 0 &&
|
|
137
|
+
HttpClient.CONNECTION_CLOSED_ERROR_CODES.includes(error.code)) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
// Do not retry if we are out of retries.
|
|
141
|
+
if (numRetries >= maxRetries) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
// Retry on connection error.
|
|
145
|
+
if (!res) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
// The API may ask us not to retry (e.g., if doing so would be a no-op)
|
|
149
|
+
// or advise us to retry (e.g., in cases of lock timeouts); we defer to that.
|
|
150
|
+
if (res.getHeaders()['stripe-should-retry'] === 'false') {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
if (res.getHeaders()['stripe-should-retry'] === 'true') {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
// Retry on conflict errors.
|
|
157
|
+
if (res.getStatusCode() === 409) {
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
// Retry on 500, 503, and other internal errors.
|
|
161
|
+
//
|
|
162
|
+
// Note that we expect the stripe-should-retry header to be false
|
|
163
|
+
// in most cases when a 500 is returned, since our idempotency framework
|
|
164
|
+
// would typically replay it anyway.
|
|
165
|
+
if (res.getStatusCode() >= 500) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
_getSleepTimeInMS(numRetries, retryAfter = null) {
|
|
171
|
+
const initialNetworkRetryDelay = this._stripe.getInitialNetworkRetryDelay();
|
|
172
|
+
const maxNetworkRetryDelay = this._stripe.getMaxNetworkRetryDelay();
|
|
173
|
+
// Apply exponential backoff with initialNetworkRetryDelay on the
|
|
174
|
+
// number of numRetries so far as inputs. Do not allow the number to exceed
|
|
175
|
+
// maxNetworkRetryDelay.
|
|
176
|
+
let sleepSeconds = Math.min(initialNetworkRetryDelay * Math.pow(2, numRetries - 1), maxNetworkRetryDelay);
|
|
177
|
+
// Apply some jitter by randomizing the value in the range of
|
|
178
|
+
// (sleepSeconds / 2) to (sleepSeconds).
|
|
179
|
+
sleepSeconds *= 0.5 * (1 + Math.random());
|
|
180
|
+
// But never sleep less than the base sleep seconds.
|
|
181
|
+
sleepSeconds = Math.max(initialNetworkRetryDelay, sleepSeconds);
|
|
182
|
+
// And never sleep less than the time the API asks us to wait, assuming it's a reasonable ask.
|
|
183
|
+
if (Number.isInteger(retryAfter) && retryAfter <= MAX_RETRY_AFTER_WAIT) {
|
|
184
|
+
sleepSeconds = Math.max(sleepSeconds, retryAfter);
|
|
185
|
+
}
|
|
186
|
+
return sleepSeconds * 1000;
|
|
187
|
+
}
|
|
188
|
+
// Max retries can be set on a per request basis. Favor those over the global setting
|
|
189
|
+
_getMaxNetworkRetries(settings = {}) {
|
|
190
|
+
return settings.maxNetworkRetries !== undefined &&
|
|
191
|
+
Number.isInteger(settings.maxNetworkRetries)
|
|
192
|
+
? settings.maxNetworkRetries
|
|
193
|
+
: this._stripe.getMaxNetworkRetries();
|
|
194
|
+
}
|
|
195
|
+
_defaultIdempotencyKey(method, settings, apiMode) {
|
|
196
|
+
// If this is a POST and we allow multiple retries, ensure an idempotency key.
|
|
197
|
+
const maxRetries = this._getMaxNetworkRetries(settings);
|
|
198
|
+
const genKey = () => `stripe-node-retry-${this._stripe._platformFunctions.uuid4()}`;
|
|
199
|
+
// more verbose than it needs to be, but gives clear separation between V1 and V2 behavior
|
|
200
|
+
if (apiMode === 'v2') {
|
|
201
|
+
if (method === 'POST' || method === 'DELETE') {
|
|
202
|
+
return genKey();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else if (apiMode === 'v1') {
|
|
206
|
+
if (method === 'POST' && maxRetries > 0) {
|
|
207
|
+
return genKey();
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
_makeHeaders({ contentType, contentLength, apiVersion, clientUserAgent, method, userSuppliedHeaders, userSuppliedSettings, stripeAccount, stripeContext, apiMode, }) {
|
|
213
|
+
const defaultHeaders = {
|
|
214
|
+
Accept: 'application/json',
|
|
215
|
+
'Content-Type': contentType,
|
|
216
|
+
'User-Agent': this._getUserAgentString(apiMode),
|
|
217
|
+
'X-Stripe-Client-User-Agent': clientUserAgent,
|
|
218
|
+
'X-Stripe-Client-Telemetry': this._getTelemetryHeader(),
|
|
219
|
+
'Stripe-Version': apiVersion,
|
|
220
|
+
'Stripe-Account': stripeAccount,
|
|
221
|
+
'Stripe-Context': stripeContext,
|
|
222
|
+
'Idempotency-Key': this._defaultIdempotencyKey(method, userSuppliedSettings, apiMode),
|
|
223
|
+
};
|
|
224
|
+
// As per https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2:
|
|
225
|
+
// A user agent SHOULD send a Content-Length in a request message when
|
|
226
|
+
// no Transfer-Encoding is sent and the request method defines a meaning
|
|
227
|
+
// for an enclosed payload body. For example, a Content-Length header
|
|
228
|
+
// field is normally sent in a POST request even when the value is 0
|
|
229
|
+
// (indicating an empty payload body). A user agent SHOULD NOT send a
|
|
230
|
+
// Content-Length header field when the request message does not contain
|
|
231
|
+
// a payload body and the method semantics do not anticipate such a
|
|
232
|
+
// body.
|
|
233
|
+
//
|
|
234
|
+
// These method types are expected to have bodies and so we should always
|
|
235
|
+
// include a Content-Length.
|
|
236
|
+
const methodHasPayload = method == 'POST' || method == 'PUT' || method == 'PATCH';
|
|
237
|
+
// If a content length was specified, we always include it regardless of
|
|
238
|
+
// whether the method semantics anticipate such a body. This keeps us
|
|
239
|
+
// consistent with historical behavior. We do however want to warn on this
|
|
240
|
+
// and fix these cases as they are semantically incorrect.
|
|
241
|
+
if (methodHasPayload || contentLength) {
|
|
242
|
+
if (!methodHasPayload) {
|
|
243
|
+
emitWarning(`${method} method had non-zero contentLength but no payload is expected for this verb`);
|
|
244
|
+
}
|
|
245
|
+
defaultHeaders['Content-Length'] = contentLength;
|
|
246
|
+
}
|
|
247
|
+
return Object.assign(removeNullish(defaultHeaders),
|
|
248
|
+
// If the user supplied, say 'idempotency-key', override instead of appending by ensuring caps are the same.
|
|
249
|
+
normalizeHeaders(userSuppliedHeaders));
|
|
250
|
+
}
|
|
251
|
+
_getUserAgentString(apiMode) {
|
|
252
|
+
const packageVersion = this._stripe.getConstant('PACKAGE_VERSION');
|
|
253
|
+
const appInfo = this._stripe._appInfo
|
|
254
|
+
? this._stripe.getAppInfoAsString()
|
|
255
|
+
: '';
|
|
256
|
+
const aiAgent = this._stripe.getConstant('AI_AGENT');
|
|
257
|
+
let uaString = `Stripe/${apiMode} NodeBindings/${packageVersion}`;
|
|
258
|
+
if (appInfo) {
|
|
259
|
+
uaString += ` ${appInfo}`;
|
|
260
|
+
}
|
|
261
|
+
if (aiAgent) {
|
|
262
|
+
uaString += ` AIAgent/${aiAgent}`;
|
|
263
|
+
}
|
|
264
|
+
return uaString;
|
|
265
|
+
}
|
|
266
|
+
_getTelemetryHeader() {
|
|
267
|
+
if (this._stripe.getTelemetryEnabled() &&
|
|
268
|
+
this._stripe._prevRequestMetrics.length > 0) {
|
|
269
|
+
const metrics = this._stripe._prevRequestMetrics.shift();
|
|
270
|
+
return JSON.stringify({
|
|
271
|
+
last_request_metrics: metrics,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
_recordRequestMetrics(requestId, requestDurationMs, usage) {
|
|
276
|
+
if (this._stripe.getTelemetryEnabled() && requestId) {
|
|
277
|
+
if (this._stripe._prevRequestMetrics.length > this._maxBufferedRequestMetric) {
|
|
278
|
+
emitWarning('Request metrics buffer is full, dropping telemetry message.');
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
const m = {
|
|
282
|
+
request_id: requestId,
|
|
283
|
+
request_duration_ms: requestDurationMs,
|
|
284
|
+
};
|
|
285
|
+
if (usage && usage.length > 0) {
|
|
286
|
+
m.usage = usage;
|
|
287
|
+
}
|
|
288
|
+
this._stripe._prevRequestMetrics.push(m);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
_rawRequest(method, path, params, options, usage) {
|
|
293
|
+
const requestPromise = new Promise((resolve, reject) => {
|
|
294
|
+
let opts;
|
|
295
|
+
try {
|
|
296
|
+
const requestMethod = method.toUpperCase();
|
|
297
|
+
if (requestMethod !== 'POST' &&
|
|
298
|
+
params &&
|
|
299
|
+
Object.keys(params).length !== 0) {
|
|
300
|
+
throw new Error('rawRequest only supports params on POST requests. Please pass null and add your parameters to path.');
|
|
301
|
+
}
|
|
302
|
+
const args = [].slice.call([params, options]);
|
|
303
|
+
// Pull request data and options (headers, auth) from args.
|
|
304
|
+
const dataFromArgs = getDataFromArgs(args);
|
|
305
|
+
const data = requestMethod === 'POST' ? Object.assign({}, dataFromArgs) : null;
|
|
306
|
+
const calculatedOptions = getOptionsFromArgs(args);
|
|
307
|
+
const headers = calculatedOptions.headers;
|
|
308
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
309
|
+
const authenticator = calculatedOptions.authenticator;
|
|
310
|
+
opts = {
|
|
311
|
+
requestMethod,
|
|
312
|
+
requestPath: path,
|
|
313
|
+
bodyData: data,
|
|
314
|
+
queryData: {},
|
|
315
|
+
authenticator,
|
|
316
|
+
headers,
|
|
317
|
+
host: calculatedOptions.host,
|
|
318
|
+
streaming: !!calculatedOptions.streaming,
|
|
319
|
+
settings: {},
|
|
320
|
+
// We use this for thin event internals, so we should record the more specific `usage`, when available
|
|
321
|
+
usage: usage || ['raw_request'],
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
reject(err);
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
function requestCallback(err, response) {
|
|
329
|
+
if (err) {
|
|
330
|
+
reject(err);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
resolve(response);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const { headers, settings } = opts;
|
|
337
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
338
|
+
const authenticator = opts.authenticator;
|
|
339
|
+
this._request(opts.requestMethod, opts.host, path, opts.bodyData, authenticator, { headers, settings, streaming: opts.streaming }, opts.usage, requestCallback);
|
|
340
|
+
});
|
|
341
|
+
return requestPromise;
|
|
342
|
+
}
|
|
343
|
+
_getContentLength(data) {
|
|
344
|
+
// if we calculate this wrong, the server treats it as invalid json
|
|
345
|
+
// or if content length is too big, the request never finishes and it
|
|
346
|
+
// times out.
|
|
347
|
+
return typeof data === 'string'
|
|
348
|
+
? new TextEncoder().encode(data).length
|
|
349
|
+
: data.length;
|
|
350
|
+
}
|
|
351
|
+
_request(method, host, path, data, authenticator, options, usage = [], callback, requestDataProcessor = null) {
|
|
352
|
+
let requestData;
|
|
353
|
+
authenticator = authenticator ?? this._stripe._authenticator ?? null;
|
|
354
|
+
const apiMode = getAPIMode(path);
|
|
355
|
+
const retryRequest = (requestFn, apiVersion, headers, requestRetries, retryAfter) => {
|
|
356
|
+
return setTimeout(requestFn, this._getSleepTimeInMS(requestRetries, retryAfter), apiVersion, headers, requestRetries + 1);
|
|
357
|
+
};
|
|
358
|
+
const makeRequest = (apiVersion, headers, numRetries) => {
|
|
359
|
+
// timeout can be set on a per-request basis. Favor that over the global setting
|
|
360
|
+
const timeout = options.settings &&
|
|
361
|
+
options.settings.timeout &&
|
|
362
|
+
Number.isInteger(options.settings.timeout) &&
|
|
363
|
+
options.settings.timeout >= 0
|
|
364
|
+
? options.settings.timeout
|
|
365
|
+
: this._stripe.getApiField('timeout');
|
|
366
|
+
const request = {
|
|
367
|
+
host: host || this._stripe.getApiField('host'),
|
|
368
|
+
port: this._stripe.getApiField('port'),
|
|
369
|
+
path: path,
|
|
370
|
+
method: method,
|
|
371
|
+
headers: Object.assign({}, headers),
|
|
372
|
+
body: requestData,
|
|
373
|
+
protocol: this._stripe.getApiField('protocol'),
|
|
374
|
+
};
|
|
375
|
+
authenticator(request)
|
|
376
|
+
.then(() => {
|
|
377
|
+
const req = this._stripe
|
|
378
|
+
.getApiField('httpClient')
|
|
379
|
+
.makeRequest(request.host, request.port, request.path, request.method, request.headers, request.body, request.protocol, timeout);
|
|
380
|
+
const requestStartTime = Date.now();
|
|
381
|
+
const requestEvent = removeNullish({
|
|
382
|
+
api_version: apiVersion,
|
|
383
|
+
account: parseHttpHeaderAsString(headers['Stripe-Account']),
|
|
384
|
+
idempotency_key: parseHttpHeaderAsString(headers['Idempotency-Key']),
|
|
385
|
+
method,
|
|
386
|
+
path,
|
|
387
|
+
request_start_time: requestStartTime,
|
|
388
|
+
});
|
|
389
|
+
const requestRetries = numRetries || 0;
|
|
390
|
+
const maxRetries = this._getMaxNetworkRetries(options.settings || {});
|
|
391
|
+
this._stripe._emitter.emit('request', requestEvent);
|
|
392
|
+
req
|
|
393
|
+
.then((res) => {
|
|
394
|
+
if (RequestSender._shouldRetry(res, requestRetries, maxRetries)) {
|
|
395
|
+
return retryRequest(makeRequest, apiVersion, headers, requestRetries, parseHttpHeaderAsNumber(res.getHeaders()['retry-after']));
|
|
396
|
+
}
|
|
397
|
+
else if (options.streaming && res.getStatusCode() < 400) {
|
|
398
|
+
return this._streamingResponseHandler(requestEvent, usage, callback)(res);
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
return this._jsonResponseHandler(requestEvent, apiMode, usage, callback)(res);
|
|
402
|
+
}
|
|
403
|
+
})
|
|
404
|
+
.catch((error) => {
|
|
405
|
+
if (RequestSender._shouldRetry(null, requestRetries, maxRetries, error)) {
|
|
406
|
+
return retryRequest(makeRequest, apiVersion, headers, requestRetries, null);
|
|
407
|
+
}
|
|
408
|
+
else {
|
|
409
|
+
const isTimeoutError = error.code && error.code === HttpClient.TIMEOUT_ERROR_CODE;
|
|
410
|
+
return callback(new StripeConnectionError({
|
|
411
|
+
message: isTimeoutError
|
|
412
|
+
? `Request aborted due to timeout being reached (${timeout}ms)`
|
|
413
|
+
: RequestSender._generateConnectionErrorMessage(requestRetries),
|
|
414
|
+
detail: error,
|
|
415
|
+
}));
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
})
|
|
419
|
+
.catch((e) => {
|
|
420
|
+
throw new StripeError({
|
|
421
|
+
message: 'Unable to authenticate the request',
|
|
422
|
+
exception: e,
|
|
423
|
+
});
|
|
424
|
+
});
|
|
425
|
+
};
|
|
426
|
+
const prepareAndMakeRequest = (error, data) => {
|
|
427
|
+
if (error) {
|
|
428
|
+
return callback(error);
|
|
429
|
+
}
|
|
430
|
+
requestData = data;
|
|
431
|
+
this._stripe.getClientUserAgent((clientUserAgent) => {
|
|
432
|
+
const apiVersion = this._stripe.getApiField('version');
|
|
433
|
+
const headers = this._makeHeaders({
|
|
434
|
+
contentType: apiMode == 'v2'
|
|
435
|
+
? 'application/json'
|
|
436
|
+
: 'application/x-www-form-urlencoded',
|
|
437
|
+
contentLength: this._getContentLength(data),
|
|
438
|
+
apiVersion: apiVersion,
|
|
439
|
+
clientUserAgent,
|
|
440
|
+
method,
|
|
441
|
+
// other callers expect null, but .headers being optional means it's undefined if not supplied. So we normalize to null.
|
|
442
|
+
userSuppliedHeaders: options.headers ?? null,
|
|
443
|
+
userSuppliedSettings: options.settings ?? {},
|
|
444
|
+
stripeAccount: options.stripeAccount ?? this._stripe.getApiField('stripeAccount'),
|
|
445
|
+
stripeContext: this._normalizeStripeContext(options.stripeContext, this._stripe.getApiField('stripeContext')),
|
|
446
|
+
apiMode: apiMode,
|
|
447
|
+
});
|
|
448
|
+
makeRequest(apiVersion, headers, 0);
|
|
449
|
+
});
|
|
450
|
+
};
|
|
451
|
+
if (requestDataProcessor) {
|
|
452
|
+
requestDataProcessor(method, data, options.headers, prepareAndMakeRequest);
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
let stringifiedData;
|
|
456
|
+
if (apiMode == 'v2') {
|
|
457
|
+
stringifiedData = data ? jsonStringifyRequestData(data) : '';
|
|
458
|
+
}
|
|
459
|
+
else {
|
|
460
|
+
stringifiedData = queryStringifyRequestData(data || {});
|
|
461
|
+
}
|
|
462
|
+
prepareAndMakeRequest(null, stringifiedData);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// ResourceNamespace allows you to create nested resources, i.e. `stripe.issuing.cards`.
|
|
2
|
+
// It also works recursively, so you could do i.e. `stripe.billing.invoicing.pay`.
|
|
3
|
+
function ResourceNamespace(stripe, resources) {
|
|
4
|
+
for (const name in resources) {
|
|
5
|
+
if (!Object.prototype.hasOwnProperty.call(resources, name)) {
|
|
6
|
+
continue;
|
|
7
|
+
}
|
|
8
|
+
const camelCaseName = name[0].toLowerCase() + name.substring(1);
|
|
9
|
+
const resource = new resources[name](stripe);
|
|
10
|
+
this[camelCaseName] = resource;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function resourceNamespace(namespace, resources) {
|
|
14
|
+
return function (stripe) {
|
|
15
|
+
return new ResourceNamespace(stripe, resources);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The StripeContext class provides an immutable container and convenience methods for interacting with the `Stripe-Context` header. All methods return a new instance of StripeContext.
|
|
3
|
+
* You can use it whenever you're initializing a `Stripe` instance or sending `stripeContext` with a request. It's also found in the `EventNotification.context` property.
|
|
4
|
+
*/
|
|
5
|
+
export class StripeContext {
|
|
6
|
+
/**
|
|
7
|
+
* Creates a new StripeContext with the given segments.
|
|
8
|
+
*/
|
|
9
|
+
constructor(segments = []) {
|
|
10
|
+
this._segments = [...segments];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Gets a copy of the segments of this Context.
|
|
14
|
+
*/
|
|
15
|
+
get segments() {
|
|
16
|
+
return [...this._segments];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new StripeContext with an additional segment appended.
|
|
20
|
+
*/
|
|
21
|
+
push(segment) {
|
|
22
|
+
if (!segment) {
|
|
23
|
+
throw new Error('Segment cannot be null or undefined');
|
|
24
|
+
}
|
|
25
|
+
return new StripeContext([...this._segments, segment]);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new StripeContext with the last segment removed.
|
|
29
|
+
* If there are no segments, throws an error.
|
|
30
|
+
*/
|
|
31
|
+
pop() {
|
|
32
|
+
if (this._segments.length === 0) {
|
|
33
|
+
throw new Error('Cannot pop from an empty context');
|
|
34
|
+
}
|
|
35
|
+
return new StripeContext(this._segments.slice(0, -1));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Converts this context to its string representation.
|
|
39
|
+
*/
|
|
40
|
+
toString() {
|
|
41
|
+
return this._segments.join('/');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parses a context string into a StripeContext instance.
|
|
45
|
+
*/
|
|
46
|
+
static parse(contextStr) {
|
|
47
|
+
if (!contextStr) {
|
|
48
|
+
return new StripeContext([]);
|
|
49
|
+
}
|
|
50
|
+
return new StripeContext(contextStr.split('/'));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @private
|
|
3
|
+
* (For internal use in stripe-node.)
|
|
4
|
+
* Wrapper around the Event Web API.
|
|
5
|
+
*/
|
|
6
|
+
class _StripeEvent extends Event {
|
|
7
|
+
constructor(eventName, data) {
|
|
8
|
+
super(eventName);
|
|
9
|
+
this.data = data;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** Minimal EventEmitter wrapper around EventTarget. */
|
|
13
|
+
export class StripeEmitter {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.eventTarget = new EventTarget();
|
|
16
|
+
this.listenerMapping = new Map();
|
|
17
|
+
}
|
|
18
|
+
on(eventName, listener) {
|
|
19
|
+
const listenerWrapper = (event) => {
|
|
20
|
+
listener(event.data);
|
|
21
|
+
};
|
|
22
|
+
this.listenerMapping.set(listener, listenerWrapper);
|
|
23
|
+
return this.eventTarget.addEventListener(eventName, listenerWrapper);
|
|
24
|
+
}
|
|
25
|
+
removeListener(eventName, listener) {
|
|
26
|
+
const listenerWrapper = this.listenerMapping.get(listener);
|
|
27
|
+
this.listenerMapping.delete(listener);
|
|
28
|
+
return this.eventTarget.removeEventListener(eventName, listenerWrapper);
|
|
29
|
+
}
|
|
30
|
+
once(eventName, listener) {
|
|
31
|
+
const listenerWrapper = (event) => {
|
|
32
|
+
listener(event.data);
|
|
33
|
+
};
|
|
34
|
+
this.listenerMapping.set(listener, listenerWrapper);
|
|
35
|
+
return this.eventTarget.addEventListener(eventName, listenerWrapper, {
|
|
36
|
+
once: true,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
emit(eventName, data) {
|
|
40
|
+
return this.eventTarget.dispatchEvent(new _StripeEvent(eventName, data));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { callbackifyPromiseWithTimeout, extractUrlParams } from './utils.js';
|
|
2
|
+
import { makeAutoPaginationMethods } from './autoPagination.js';
|
|
3
|
+
/**
|
|
4
|
+
* Create an API method from the declared spec.
|
|
5
|
+
*
|
|
6
|
+
* @param [spec.method='GET'] Request Method (POST, GET, DELETE, PUT)
|
|
7
|
+
* @param [spec.path=''] Path to be appended to the API BASE_PATH, joined with
|
|
8
|
+
* the instance's path (e.g. 'charges' or 'customers')
|
|
9
|
+
* @param [spec.fullPath=''] Fully qualified path to the method (eg. /v1/a/b/c).
|
|
10
|
+
* If this is specified, path should not be specified.
|
|
11
|
+
* @param [spec.urlParams=[]] Array of required arguments in the order that they
|
|
12
|
+
* must be passed by the consumer of the API. Subsequent optional arguments are
|
|
13
|
+
* optionally passed through a hash (Object) as the penultimate argument
|
|
14
|
+
* (preceding the also-optional callback argument
|
|
15
|
+
* @param [spec.encode] Function for mutating input parameters to a method.
|
|
16
|
+
* Usefully for applying transforms to data on a per-method basis.
|
|
17
|
+
* @param [spec.host] Hostname for the request.
|
|
18
|
+
*
|
|
19
|
+
* <!-- Public API accessible via Stripe.StripeResource.method -->
|
|
20
|
+
*/
|
|
21
|
+
export function stripeMethod(spec) {
|
|
22
|
+
if (spec.path !== undefined && spec.fullPath !== undefined) {
|
|
23
|
+
throw new Error(`Method spec specified both a 'path' (${spec.path}) and a 'fullPath' (${spec.fullPath}).`);
|
|
24
|
+
}
|
|
25
|
+
return function (...args) {
|
|
26
|
+
const callback = typeof args[args.length - 1] == 'function' && args.pop();
|
|
27
|
+
spec.urlParams = extractUrlParams(spec.fullPath || this.createResourcePathWithSymbols(spec.path || ''));
|
|
28
|
+
const requestPromise = callbackifyPromiseWithTimeout(this._makeRequest(args, spec, {}), callback);
|
|
29
|
+
Object.assign(requestPromise, makeAutoPaginationMethods(this, args, spec, requestPromise));
|
|
30
|
+
return requestPromise;
|
|
31
|
+
};
|
|
32
|
+
}
|