@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,290 @@
|
|
|
1
|
+
import { callbackifyPromiseWithTimeout, getDataFromArgs, getAPIMode, } from './utils.js';
|
|
2
|
+
class V1Iterator {
|
|
3
|
+
constructor(firstPagePromise, requestArgs, spec, stripeResource) {
|
|
4
|
+
this.index = 0;
|
|
5
|
+
this.pagePromise = firstPagePromise;
|
|
6
|
+
this.promiseCache = { currentPromise: null };
|
|
7
|
+
this.requestArgs = requestArgs;
|
|
8
|
+
this.spec = spec;
|
|
9
|
+
this.stripeResource = stripeResource;
|
|
10
|
+
}
|
|
11
|
+
async iterate(pageResult) {
|
|
12
|
+
if (!(pageResult &&
|
|
13
|
+
pageResult.data &&
|
|
14
|
+
typeof pageResult.data.length === 'number')) {
|
|
15
|
+
throw Error('Unexpected: Stripe API response does not have a well-formed `data` array.');
|
|
16
|
+
}
|
|
17
|
+
const reverseIteration = isReverseIteration(this.requestArgs);
|
|
18
|
+
if (this.index < pageResult.data.length) {
|
|
19
|
+
const idx = reverseIteration
|
|
20
|
+
? pageResult.data.length - 1 - this.index
|
|
21
|
+
: this.index;
|
|
22
|
+
const value = pageResult.data[idx];
|
|
23
|
+
this.index += 1;
|
|
24
|
+
return { value, done: false };
|
|
25
|
+
}
|
|
26
|
+
else if (pageResult.has_more) {
|
|
27
|
+
// Reset counter, request next page, and recurse.
|
|
28
|
+
this.index = 0;
|
|
29
|
+
this.pagePromise = this.getNextPage(pageResult);
|
|
30
|
+
const nextPageResult = await this.pagePromise;
|
|
31
|
+
return this.iterate(nextPageResult);
|
|
32
|
+
}
|
|
33
|
+
return { done: true, value: undefined };
|
|
34
|
+
}
|
|
35
|
+
/** @abstract */
|
|
36
|
+
getNextPage(_pageResult) {
|
|
37
|
+
throw new Error('Unimplemented');
|
|
38
|
+
}
|
|
39
|
+
async _next() {
|
|
40
|
+
return this.iterate(await this.pagePromise);
|
|
41
|
+
}
|
|
42
|
+
next() {
|
|
43
|
+
/**
|
|
44
|
+
* If a user calls `.next()` multiple times in parallel,
|
|
45
|
+
* return the same result until something has resolved
|
|
46
|
+
* to prevent page-turning race conditions.
|
|
47
|
+
*/
|
|
48
|
+
if (this.promiseCache.currentPromise) {
|
|
49
|
+
return this.promiseCache.currentPromise;
|
|
50
|
+
}
|
|
51
|
+
const nextPromise = (async () => {
|
|
52
|
+
const ret = await this._next();
|
|
53
|
+
this.promiseCache.currentPromise = null;
|
|
54
|
+
return ret;
|
|
55
|
+
})();
|
|
56
|
+
this.promiseCache.currentPromise = nextPromise;
|
|
57
|
+
return nextPromise;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
class V1ListIterator extends V1Iterator {
|
|
61
|
+
getNextPage(pageResult) {
|
|
62
|
+
const reverseIteration = isReverseIteration(this.requestArgs);
|
|
63
|
+
const lastId = getLastId(pageResult, reverseIteration);
|
|
64
|
+
return this.stripeResource._makeRequest(this.requestArgs, this.spec, {
|
|
65
|
+
[reverseIteration ? 'ending_before' : 'starting_after']: lastId,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
class V1SearchIterator extends V1Iterator {
|
|
70
|
+
getNextPage(pageResult) {
|
|
71
|
+
if (!pageResult.next_page) {
|
|
72
|
+
throw Error('Unexpected: Stripe API response does not have a well-formed `next_page` field, but `has_more` was true.');
|
|
73
|
+
}
|
|
74
|
+
return this.stripeResource._makeRequest(this.requestArgs, this.spec, {
|
|
75
|
+
page: pageResult.next_page,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
class V2ListIterator {
|
|
80
|
+
constructor(firstPagePromise, requestArgs, spec, stripeResource) {
|
|
81
|
+
this.firstPagePromise = firstPagePromise;
|
|
82
|
+
this.currentPageIterator = null;
|
|
83
|
+
this.nextPageUrl = null;
|
|
84
|
+
this.requestArgs = requestArgs;
|
|
85
|
+
this.spec = spec;
|
|
86
|
+
this.stripeResource = stripeResource;
|
|
87
|
+
}
|
|
88
|
+
async initFirstPage() {
|
|
89
|
+
if (this.firstPagePromise) {
|
|
90
|
+
const page = await this.firstPagePromise;
|
|
91
|
+
this.firstPagePromise = null;
|
|
92
|
+
this.currentPageIterator = page.data[Symbol.iterator]();
|
|
93
|
+
this.nextPageUrl = page.next_page_url || null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async turnPage() {
|
|
97
|
+
if (!this.nextPageUrl)
|
|
98
|
+
return null;
|
|
99
|
+
this.spec.fullPath = this.nextPageUrl;
|
|
100
|
+
const page = await this.stripeResource._makeRequest([], this.spec, {});
|
|
101
|
+
this.nextPageUrl = page.next_page_url || null;
|
|
102
|
+
this.currentPageIterator = page.data[Symbol.iterator]();
|
|
103
|
+
return this.currentPageIterator;
|
|
104
|
+
}
|
|
105
|
+
async next() {
|
|
106
|
+
await this.initFirstPage();
|
|
107
|
+
if (this.currentPageIterator) {
|
|
108
|
+
const result = this.currentPageIterator.next();
|
|
109
|
+
if (!result.done)
|
|
110
|
+
return { done: false, value: result.value };
|
|
111
|
+
}
|
|
112
|
+
const nextPageIterator = await this.turnPage();
|
|
113
|
+
if (!nextPageIterator) {
|
|
114
|
+
return { done: true, value: undefined };
|
|
115
|
+
}
|
|
116
|
+
const result = nextPageIterator.next();
|
|
117
|
+
if (!result.done)
|
|
118
|
+
return { done: false, value: result.value };
|
|
119
|
+
return { done: true, value: undefined };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export const makeAutoPaginationMethods = (stripeResource, requestArgs, spec, firstPagePromise) => {
|
|
123
|
+
const apiMode = getAPIMode(spec.fullPath || spec.path);
|
|
124
|
+
if (apiMode !== 'v2' && spec.methodType === 'search') {
|
|
125
|
+
return makeAutoPaginationMethodsFromIterator(new V1SearchIterator(firstPagePromise, requestArgs, spec, stripeResource));
|
|
126
|
+
}
|
|
127
|
+
if (apiMode !== 'v2' && spec.methodType === 'list') {
|
|
128
|
+
return makeAutoPaginationMethodsFromIterator(new V1ListIterator(firstPagePromise, requestArgs, spec, stripeResource));
|
|
129
|
+
}
|
|
130
|
+
if (apiMode === 'v2' && spec.methodType === 'list') {
|
|
131
|
+
return makeAutoPaginationMethodsFromIterator(new V2ListIterator(firstPagePromise, requestArgs, spec, stripeResource));
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
};
|
|
135
|
+
const makeAutoPaginationMethodsFromIterator = (iterator) => {
|
|
136
|
+
const autoPagingEach = makeAutoPagingEach((...args) => iterator.next(...args));
|
|
137
|
+
const autoPagingToArray = makeAutoPagingToArray(autoPagingEach);
|
|
138
|
+
const autoPaginationMethods = {
|
|
139
|
+
autoPagingEach,
|
|
140
|
+
autoPagingToArray,
|
|
141
|
+
// Async iterator functions:
|
|
142
|
+
next: () => iterator.next(),
|
|
143
|
+
return: () => {
|
|
144
|
+
// This is required for `break`.
|
|
145
|
+
return {};
|
|
146
|
+
},
|
|
147
|
+
[getAsyncIteratorSymbol()]: () => {
|
|
148
|
+
return autoPaginationMethods;
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
return autoPaginationMethods;
|
|
152
|
+
};
|
|
153
|
+
/**
|
|
154
|
+
* ----------------
|
|
155
|
+
* Private Helpers:
|
|
156
|
+
* ----------------
|
|
157
|
+
*/
|
|
158
|
+
function getAsyncIteratorSymbol() {
|
|
159
|
+
if (typeof Symbol !== 'undefined' && Symbol.asyncIterator) {
|
|
160
|
+
return Symbol.asyncIterator;
|
|
161
|
+
}
|
|
162
|
+
// Follow the convention from libraries like iterall: https://github.com/leebyron/iterall#asynciterator-1
|
|
163
|
+
return '@@asyncIterator';
|
|
164
|
+
}
|
|
165
|
+
function getDoneCallback(args) {
|
|
166
|
+
if (args.length < 2) {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
const onDone = args[1];
|
|
170
|
+
if (typeof onDone !== 'function') {
|
|
171
|
+
throw Error(`The second argument to autoPagingEach, if present, must be a callback function; received ${typeof onDone}`);
|
|
172
|
+
}
|
|
173
|
+
return onDone;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* We allow four forms of the `onItem` callback (the middle two being equivalent),
|
|
177
|
+
*
|
|
178
|
+
* 1. `.autoPagingEach((item) => { doSomething(item); return false; });`
|
|
179
|
+
* 2. `.autoPagingEach(async (item) => { await doSomething(item); return false; });`
|
|
180
|
+
* 3. `.autoPagingEach((item) => doSomething(item).then(() => false));`
|
|
181
|
+
* 4. `.autoPagingEach((item, next) => { doSomething(item); next(false); });`
|
|
182
|
+
*
|
|
183
|
+
* In addition to standard validation, this helper
|
|
184
|
+
* coalesces the former forms into the latter form.
|
|
185
|
+
*/
|
|
186
|
+
function getItemCallback(args) {
|
|
187
|
+
if (args.length === 0) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
const onItem = args[0];
|
|
191
|
+
if (typeof onItem !== 'function') {
|
|
192
|
+
throw Error(`The first argument to autoPagingEach, if present, must be a callback function; received ${typeof onItem}`);
|
|
193
|
+
}
|
|
194
|
+
// 4. `.autoPagingEach((item, next) => { doSomething(item); next(false); });`
|
|
195
|
+
if (onItem.length === 2) {
|
|
196
|
+
return onItem;
|
|
197
|
+
}
|
|
198
|
+
if (onItem.length > 2) {
|
|
199
|
+
throw Error(`The \`onItem\` callback function passed to autoPagingEach must accept at most two arguments; got ${onItem}`);
|
|
200
|
+
}
|
|
201
|
+
// This magically handles all three of these usecases (the latter two being functionally identical):
|
|
202
|
+
// 1. `.autoPagingEach((item) => { doSomething(item); return false; });`
|
|
203
|
+
// 2. `.autoPagingEach(async (item) => { await doSomething(item); return false; });`
|
|
204
|
+
// 3. `.autoPagingEach((item) => doSomething(item).then(() => false));`
|
|
205
|
+
return function _onItem(item, next) {
|
|
206
|
+
const shouldContinue = onItem(item);
|
|
207
|
+
next(shouldContinue);
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function getLastId(listResult, reverseIteration) {
|
|
211
|
+
const lastIdx = reverseIteration ? 0 : listResult.data.length - 1;
|
|
212
|
+
const lastItem = listResult.data[lastIdx];
|
|
213
|
+
const lastId = lastItem && lastItem.id;
|
|
214
|
+
if (!lastId) {
|
|
215
|
+
throw Error('Unexpected: No `id` found on the last item while auto-paging a list.');
|
|
216
|
+
}
|
|
217
|
+
return lastId;
|
|
218
|
+
}
|
|
219
|
+
function makeAutoPagingEach(asyncIteratorNext) {
|
|
220
|
+
return function autoPagingEach( /* onItem?, onDone? */) {
|
|
221
|
+
const args = [].slice.call(arguments);
|
|
222
|
+
const onItem = getItemCallback(args);
|
|
223
|
+
const onDone = getDoneCallback(args);
|
|
224
|
+
if (args.length > 2) {
|
|
225
|
+
throw Error(`autoPagingEach takes up to two arguments; received ${args}`);
|
|
226
|
+
}
|
|
227
|
+
const autoPagePromise = wrapAsyncIteratorWithCallback(asyncIteratorNext,
|
|
228
|
+
// @ts-ignore we might need a null check
|
|
229
|
+
onItem);
|
|
230
|
+
return callbackifyPromiseWithTimeout(autoPagePromise, onDone);
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
function makeAutoPagingToArray(autoPagingEach) {
|
|
234
|
+
return function autoPagingToArray(opts, onDone) {
|
|
235
|
+
const limit = opts && opts.limit;
|
|
236
|
+
if (!limit) {
|
|
237
|
+
throw Error('You must pass a `limit` option to autoPagingToArray, e.g., `autoPagingToArray({limit: 1000});`.');
|
|
238
|
+
}
|
|
239
|
+
if (limit > 10000) {
|
|
240
|
+
throw Error('You cannot specify a limit of more than 10,000 items to fetch in `autoPagingToArray`; use `autoPagingEach` to iterate through longer lists.');
|
|
241
|
+
}
|
|
242
|
+
const promise = new Promise((resolve, reject) => {
|
|
243
|
+
const items = [];
|
|
244
|
+
autoPagingEach((item) => {
|
|
245
|
+
items.push(item);
|
|
246
|
+
if (items.length >= limit) {
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
})
|
|
250
|
+
.then(() => {
|
|
251
|
+
resolve(items);
|
|
252
|
+
})
|
|
253
|
+
.catch(reject);
|
|
254
|
+
});
|
|
255
|
+
// @ts-ignore
|
|
256
|
+
return callbackifyPromiseWithTimeout(promise, onDone);
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
function wrapAsyncIteratorWithCallback(asyncIteratorNext, onItem) {
|
|
260
|
+
return new Promise((resolve, reject) => {
|
|
261
|
+
function handleIteration(iterResult) {
|
|
262
|
+
if (iterResult.done) {
|
|
263
|
+
resolve();
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
const item = iterResult.value;
|
|
267
|
+
return new Promise((next) => {
|
|
268
|
+
// Bit confusing, perhaps; we pass a `resolve` fn
|
|
269
|
+
// to the user, so they can decide when and if to continue.
|
|
270
|
+
// They can return false, or a promise which resolves to false, to break.
|
|
271
|
+
onItem(item, next);
|
|
272
|
+
}).then((shouldContinue) => {
|
|
273
|
+
if (shouldContinue === false) {
|
|
274
|
+
return handleIteration({ done: true, value: undefined });
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
return asyncIteratorNext().then(handleIteration);
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
asyncIteratorNext()
|
|
282
|
+
.then(handleIteration)
|
|
283
|
+
.catch(reject);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function isReverseIteration(requestArgs) {
|
|
287
|
+
const args = [].slice.call(requestArgs);
|
|
288
|
+
const dataFromArgs = getDataFromArgs(args);
|
|
289
|
+
return !!dataFromArgs.ending_before;
|
|
290
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface encapsulating the various crypto computations used by the library,
|
|
3
|
+
* allowing pluggable underlying crypto implementations.
|
|
4
|
+
*/
|
|
5
|
+
export class CryptoProvider {
|
|
6
|
+
/**
|
|
7
|
+
* Computes a SHA-256 HMAC given a secret and a payload (encoded in UTF-8).
|
|
8
|
+
* The output HMAC should be encoded in hexadecimal.
|
|
9
|
+
*
|
|
10
|
+
* Sample values for implementations:
|
|
11
|
+
* - computeHMACSignature('', 'test_secret') => 'f7f9bd47fb987337b5796fdc1fdb9ba221d0d5396814bfcaf9521f43fd8927fd'
|
|
12
|
+
* - computeHMACSignature('\ud83d\ude00', 'test_secret') => '837da296d05c4fe31f61d5d7ead035099d9585a5bcde87de952012a78f0b0c43
|
|
13
|
+
*/
|
|
14
|
+
computeHMACSignature(payload, secret) {
|
|
15
|
+
throw new Error('computeHMACSignature not implemented.');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Asynchronous version of `computeHMACSignature`. Some implementations may
|
|
19
|
+
* only allow support async signature computation.
|
|
20
|
+
*
|
|
21
|
+
* Computes a SHA-256 HMAC given a secret and a payload (encoded in UTF-8).
|
|
22
|
+
* The output HMAC should be encoded in hexadecimal.
|
|
23
|
+
*
|
|
24
|
+
* Sample values for implementations:
|
|
25
|
+
* - computeHMACSignature('', 'test_secret') => 'f7f9bd47fb987337b5796fdc1fdb9ba221d0d5396814bfcaf9521f43fd8927fd'
|
|
26
|
+
* - computeHMACSignature('\ud83d\ude00', 'test_secret') => '837da296d05c4fe31f61d5d7ead035099d9585a5bcde87de952012a78f0b0c43
|
|
27
|
+
*/
|
|
28
|
+
computeHMACSignatureAsync(payload, secret) {
|
|
29
|
+
throw new Error('computeHMACSignatureAsync not implemented.');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Computes a SHA-256 hash of the data.
|
|
33
|
+
*/
|
|
34
|
+
computeSHA256Async(data) {
|
|
35
|
+
throw new Error('computeSHA256 not implemented.');
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* If the crypto provider only supports asynchronous operations,
|
|
40
|
+
* throw CryptoProviderOnlySupportsAsyncError instead of
|
|
41
|
+
* a generic error so that the caller can choose to provide
|
|
42
|
+
* a more helpful error message to direct the user to use
|
|
43
|
+
* an asynchronous pathway.
|
|
44
|
+
*/
|
|
45
|
+
export class CryptoProviderOnlySupportsAsyncError extends Error {
|
|
46
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as crypto from 'crypto';
|
|
2
|
+
import { CryptoProvider } from './CryptoProvider.js';
|
|
3
|
+
/**
|
|
4
|
+
* `CryptoProvider which uses the Node `crypto` package for its computations.
|
|
5
|
+
*/
|
|
6
|
+
export class NodeCryptoProvider extends CryptoProvider {
|
|
7
|
+
/** @override */
|
|
8
|
+
computeHMACSignature(payload, secret) {
|
|
9
|
+
return crypto
|
|
10
|
+
.createHmac('sha256', secret)
|
|
11
|
+
.update(payload, 'utf8')
|
|
12
|
+
.digest('hex');
|
|
13
|
+
}
|
|
14
|
+
/** @override */
|
|
15
|
+
async computeHMACSignatureAsync(payload, secret) {
|
|
16
|
+
const signature = await this.computeHMACSignature(payload, secret);
|
|
17
|
+
return signature;
|
|
18
|
+
}
|
|
19
|
+
/** @override */
|
|
20
|
+
async computeSHA256Async(data) {
|
|
21
|
+
return new Uint8Array(await crypto
|
|
22
|
+
.createHash('sha256')
|
|
23
|
+
.update(data)
|
|
24
|
+
.digest());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CryptoProvider, CryptoProviderOnlySupportsAsyncError, } from './CryptoProvider.js';
|
|
2
|
+
/**
|
|
3
|
+
* `CryptoProvider which uses the SubtleCrypto interface of the Web Crypto API.
|
|
4
|
+
*
|
|
5
|
+
* This only supports asynchronous operations.
|
|
6
|
+
*/
|
|
7
|
+
export class SubtleCryptoProvider extends CryptoProvider {
|
|
8
|
+
constructor(subtleCrypto) {
|
|
9
|
+
super();
|
|
10
|
+
// If no subtle crypto is interface, default to the global namespace. This
|
|
11
|
+
// is to allow custom interfaces (eg. using the Node webcrypto interface in
|
|
12
|
+
// tests).
|
|
13
|
+
this.subtleCrypto = subtleCrypto || crypto.subtle;
|
|
14
|
+
}
|
|
15
|
+
/** @override */
|
|
16
|
+
computeHMACSignature(payload, secret) {
|
|
17
|
+
throw new CryptoProviderOnlySupportsAsyncError('SubtleCryptoProvider cannot be used in a synchronous context.');
|
|
18
|
+
}
|
|
19
|
+
/** @override */
|
|
20
|
+
async computeHMACSignatureAsync(payload, secret) {
|
|
21
|
+
const encoder = new TextEncoder();
|
|
22
|
+
const key = await this.subtleCrypto.importKey('raw', encoder.encode(secret), {
|
|
23
|
+
name: 'HMAC',
|
|
24
|
+
hash: { name: 'SHA-256' },
|
|
25
|
+
}, false, ['sign']);
|
|
26
|
+
const signatureBuffer = await this.subtleCrypto.sign('hmac', key, encoder.encode(payload));
|
|
27
|
+
// crypto.subtle returns the signature in base64 format. This must be
|
|
28
|
+
// encoded in hex to match the CryptoProvider contract. We map each byte in
|
|
29
|
+
// the buffer to its corresponding hex octet and then combine into a string.
|
|
30
|
+
const signatureBytes = new Uint8Array(signatureBuffer);
|
|
31
|
+
const signatureHexCodes = new Array(signatureBytes.length);
|
|
32
|
+
for (let i = 0; i < signatureBytes.length; i++) {
|
|
33
|
+
signatureHexCodes[i] = byteHexMapping[signatureBytes[i]];
|
|
34
|
+
}
|
|
35
|
+
return signatureHexCodes.join('');
|
|
36
|
+
}
|
|
37
|
+
/** @override */
|
|
38
|
+
async computeSHA256Async(data) {
|
|
39
|
+
return new Uint8Array(await this.subtleCrypto.digest('SHA-256', data));
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Cached mapping of byte to hex representation. We do this once to avoid re-
|
|
43
|
+
// computing every time we need to convert the result of a signature to hex.
|
|
44
|
+
const byteHexMapping = new Array(256);
|
|
45
|
+
for (let i = 0; i < byteHexMapping.length; i++) {
|
|
46
|
+
byteHexMapping[i] = i.toString(16).padStart(2, '0');
|
|
47
|
+
}
|
package/esm/multipart.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { flattenAndStringify, queryStringifyRequestData } from './utils.js';
|
|
2
|
+
// Method for formatting HTTP body for the multipart/form-data specification
|
|
3
|
+
// Mostly taken from Fermata.js
|
|
4
|
+
// https://github.com/natevw/fermata/blob/5d9732a33d776ce925013a265935facd1626cc88/fermata.js#L315-L343
|
|
5
|
+
const multipartDataGenerator = (method, data, headers) => {
|
|
6
|
+
const segno = (Math.round(Math.random() * 1e16) + Math.round(Math.random() * 1e16)).toString();
|
|
7
|
+
headers['Content-Type'] = `multipart/form-data; boundary=${segno}`;
|
|
8
|
+
const textEncoder = new TextEncoder();
|
|
9
|
+
let buffer = new Uint8Array(0);
|
|
10
|
+
const endBuffer = textEncoder.encode('\r\n');
|
|
11
|
+
function push(l) {
|
|
12
|
+
const prevBuffer = buffer;
|
|
13
|
+
const newBuffer = l instanceof Uint8Array ? l : new Uint8Array(textEncoder.encode(l));
|
|
14
|
+
buffer = new Uint8Array(prevBuffer.length + newBuffer.length + 2);
|
|
15
|
+
buffer.set(prevBuffer);
|
|
16
|
+
buffer.set(newBuffer, prevBuffer.length);
|
|
17
|
+
buffer.set(endBuffer, buffer.length - 2);
|
|
18
|
+
}
|
|
19
|
+
function q(s) {
|
|
20
|
+
return `"${s.replace(/"|"/g, '%22').replace(/\r\n|\r|\n/g, ' ')}"`;
|
|
21
|
+
}
|
|
22
|
+
const flattenedData = flattenAndStringify(data);
|
|
23
|
+
for (const k in flattenedData) {
|
|
24
|
+
if (!Object.prototype.hasOwnProperty.call(flattenedData, k)) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const v = flattenedData[k];
|
|
28
|
+
push(`--${segno}`);
|
|
29
|
+
if (Object.prototype.hasOwnProperty.call(v, 'data')) {
|
|
30
|
+
const typedEntry = v;
|
|
31
|
+
push(`Content-Disposition: form-data; name=${q(k)}; filename=${q(typedEntry.name || 'blob')}`);
|
|
32
|
+
push(`Content-Type: ${typedEntry.type || 'application/octet-stream'}`);
|
|
33
|
+
push('');
|
|
34
|
+
push(typedEntry.data);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
push(`Content-Disposition: form-data; name=${q(k)}`);
|
|
38
|
+
push('');
|
|
39
|
+
push(v);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
push(`--${segno}--`);
|
|
43
|
+
return buffer;
|
|
44
|
+
};
|
|
45
|
+
export function multipartRequestDataProcessor(method, data, headers, callback) {
|
|
46
|
+
data = data || {};
|
|
47
|
+
if (method !== 'POST') {
|
|
48
|
+
return callback(null, queryStringifyRequestData(data));
|
|
49
|
+
}
|
|
50
|
+
this._stripe._platformFunctions
|
|
51
|
+
.tryBufferData(data)
|
|
52
|
+
.then((bufferedData) => {
|
|
53
|
+
const buffer = multipartDataGenerator(method, bufferedData, headers);
|
|
54
|
+
return callback(null, buffer);
|
|
55
|
+
})
|
|
56
|
+
.catch((err) => callback(err, null));
|
|
57
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { parseHeadersForFetch } from '../utils.js';
|
|
2
|
+
import { HttpClient, HttpClientResponse, } from './HttpClient.js';
|
|
3
|
+
/**
|
|
4
|
+
* HTTP client which uses a `fetch` function to issue requests.
|
|
5
|
+
*
|
|
6
|
+
* By default relies on the global `fetch` function, but an optional function
|
|
7
|
+
* can be passed in. If passing in a function, it is expected to match the Web
|
|
8
|
+
* Fetch API. As an example, this could be the function provided by the
|
|
9
|
+
* node-fetch package (https://github.com/node-fetch/node-fetch).
|
|
10
|
+
*/
|
|
11
|
+
export class FetchHttpClient extends HttpClient {
|
|
12
|
+
constructor(fetchFn) {
|
|
13
|
+
super();
|
|
14
|
+
// Default to global fetch if available
|
|
15
|
+
if (!fetchFn) {
|
|
16
|
+
if (!globalThis.fetch) {
|
|
17
|
+
throw new Error('fetch() function not provided and is not defined in the global scope. ' +
|
|
18
|
+
'You must provide a fetch implementation.');
|
|
19
|
+
}
|
|
20
|
+
fetchFn = globalThis.fetch;
|
|
21
|
+
}
|
|
22
|
+
// Both timeout behaviors differs from Node:
|
|
23
|
+
// - Fetch uses a single timeout for the entire length of the request.
|
|
24
|
+
// - Node is more fine-grained and resets the timeout after each stage of the request.
|
|
25
|
+
if (globalThis.AbortController) {
|
|
26
|
+
// Utilise native AbortController if available
|
|
27
|
+
// AbortController was added in Node v15.0.0, v14.17.0
|
|
28
|
+
this._fetchFn = FetchHttpClient.makeFetchWithAbortTimeout(fetchFn);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
// Fall back to racing against a timeout promise if not available in the runtime
|
|
32
|
+
// This does not actually cancel the underlying fetch operation or resources
|
|
33
|
+
this._fetchFn = FetchHttpClient.makeFetchWithRaceTimeout(fetchFn);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
static makeFetchWithRaceTimeout(fetchFn) {
|
|
37
|
+
return (url, init, timeout) => {
|
|
38
|
+
let pendingTimeoutId;
|
|
39
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
40
|
+
pendingTimeoutId = setTimeout(() => {
|
|
41
|
+
pendingTimeoutId = null;
|
|
42
|
+
reject(HttpClient.makeTimeoutError());
|
|
43
|
+
}, timeout);
|
|
44
|
+
});
|
|
45
|
+
const fetchPromise = fetchFn(url, init);
|
|
46
|
+
return Promise.race([fetchPromise, timeoutPromise]).finally(() => {
|
|
47
|
+
if (pendingTimeoutId) {
|
|
48
|
+
clearTimeout(pendingTimeoutId);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
static makeFetchWithAbortTimeout(fetchFn) {
|
|
54
|
+
return async (url, init, timeout) => {
|
|
55
|
+
// Use AbortController because AbortSignal.timeout() was added later in Node v17.3.0, v16.14.0
|
|
56
|
+
const abort = new AbortController();
|
|
57
|
+
let timeoutId = setTimeout(() => {
|
|
58
|
+
timeoutId = null;
|
|
59
|
+
abort.abort(HttpClient.makeTimeoutError());
|
|
60
|
+
}, timeout);
|
|
61
|
+
try {
|
|
62
|
+
return await fetchFn(url, {
|
|
63
|
+
...init,
|
|
64
|
+
signal: abort.signal,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// Some implementations, like node-fetch, do not respect the reason passed to AbortController.abort()
|
|
69
|
+
// and instead it always throws an AbortError
|
|
70
|
+
// We catch this case to normalise all timeout errors
|
|
71
|
+
if (err.name === 'AbortError') {
|
|
72
|
+
throw HttpClient.makeTimeoutError();
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
if (timeoutId) {
|
|
80
|
+
clearTimeout(timeoutId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/** @override. */
|
|
86
|
+
getClientName() {
|
|
87
|
+
return 'fetch';
|
|
88
|
+
}
|
|
89
|
+
async makeRequest(host, port, path, method, headers, requestData, protocol, timeout) {
|
|
90
|
+
const isInsecureConnection = protocol === 'http';
|
|
91
|
+
const url = new URL(path, `${isInsecureConnection ? 'http' : 'https'}://${host}`);
|
|
92
|
+
url.port = port;
|
|
93
|
+
// For methods which expect payloads, we should always pass a body value
|
|
94
|
+
// even when it is empty. Without this, some JS runtimes (eg. Deno) will
|
|
95
|
+
// inject a second Content-Length header. See https://github.com/stripe/stripe-node/issues/1519
|
|
96
|
+
// for more details.
|
|
97
|
+
const methodHasPayload = method == 'POST' || method == 'PUT' || method == 'PATCH';
|
|
98
|
+
const body = requestData || (methodHasPayload ? '' : undefined);
|
|
99
|
+
const res = await this._fetchFn(url.toString(), {
|
|
100
|
+
method,
|
|
101
|
+
headers: parseHeadersForFetch(headers),
|
|
102
|
+
body: body,
|
|
103
|
+
}, timeout);
|
|
104
|
+
return new FetchHttpClientResponse(res);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export class FetchHttpClientResponse extends HttpClientResponse {
|
|
108
|
+
constructor(res) {
|
|
109
|
+
super(res.status, FetchHttpClientResponse._transformHeadersToObject(res.headers));
|
|
110
|
+
this._res = res;
|
|
111
|
+
}
|
|
112
|
+
getRawResponse() {
|
|
113
|
+
return this._res;
|
|
114
|
+
}
|
|
115
|
+
toStream(streamCompleteCallback) {
|
|
116
|
+
// Unfortunately `fetch` does not have event handlers for when the stream is
|
|
117
|
+
// completely read. We therefore invoke the streamCompleteCallback right
|
|
118
|
+
// away. This callback emits a response event with metadata and completes
|
|
119
|
+
// metrics, so it's ok to do this without waiting for the stream to be
|
|
120
|
+
// completely read.
|
|
121
|
+
streamCompleteCallback();
|
|
122
|
+
// Fetch's `body` property is expected to be a readable stream of the body.
|
|
123
|
+
return this._res.body;
|
|
124
|
+
}
|
|
125
|
+
toJSON() {
|
|
126
|
+
return this._res.json();
|
|
127
|
+
}
|
|
128
|
+
static _transformHeadersToObject(headers) {
|
|
129
|
+
// Fetch uses a Headers instance so this must be converted to a barebones
|
|
130
|
+
// JS object to meet the HttpClient interface.
|
|
131
|
+
const headersObj = {};
|
|
132
|
+
for (const entry of headers) {
|
|
133
|
+
if (!Array.isArray(entry) || entry.length != 2) {
|
|
134
|
+
throw new Error('Response objects produced by the fetch function given to FetchHttpClient do not have an iterable headers map. Response#headers should be an iterable object.');
|
|
135
|
+
}
|
|
136
|
+
headersObj[entry[0]] = entry[1];
|
|
137
|
+
}
|
|
138
|
+
return headersObj;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encapsulates the logic for issuing a request to the Stripe API.
|
|
3
|
+
*
|
|
4
|
+
* A custom HTTP client should should implement:
|
|
5
|
+
* 1. A response class which extends HttpClientResponse and wraps around their
|
|
6
|
+
* own internal representation of a response.
|
|
7
|
+
* 2. A client class which extends HttpClient and implements all methods,
|
|
8
|
+
* returning their own response class when making requests.
|
|
9
|
+
*/
|
|
10
|
+
export class HttpClient {
|
|
11
|
+
/** The client name used for diagnostics. */
|
|
12
|
+
getClientName() {
|
|
13
|
+
throw new Error('getClientName not implemented.');
|
|
14
|
+
}
|
|
15
|
+
makeRequest(host, port, path, method, headers, requestData, protocol, timeout) {
|
|
16
|
+
throw new Error('makeRequest not implemented.');
|
|
17
|
+
}
|
|
18
|
+
/** Helper to make a consistent timeout error across implementations. */
|
|
19
|
+
static makeTimeoutError() {
|
|
20
|
+
const timeoutErr = new TypeError(HttpClient.TIMEOUT_ERROR_CODE);
|
|
21
|
+
timeoutErr.code = HttpClient.TIMEOUT_ERROR_CODE;
|
|
22
|
+
return timeoutErr;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
// Public API accessible via Stripe.HttpClient
|
|
26
|
+
HttpClient.CONNECTION_CLOSED_ERROR_CODES = ['ECONNRESET', 'EPIPE'];
|
|
27
|
+
HttpClient.TIMEOUT_ERROR_CODE = 'ETIMEDOUT';
|
|
28
|
+
export class HttpClientResponse {
|
|
29
|
+
constructor(statusCode, headers) {
|
|
30
|
+
this._statusCode = statusCode;
|
|
31
|
+
this._headers = headers;
|
|
32
|
+
}
|
|
33
|
+
getStatusCode() {
|
|
34
|
+
return this._statusCode;
|
|
35
|
+
}
|
|
36
|
+
getHeaders() {
|
|
37
|
+
return this._headers;
|
|
38
|
+
}
|
|
39
|
+
getRawResponse() {
|
|
40
|
+
throw new Error('getRawResponse not implemented.');
|
|
41
|
+
}
|
|
42
|
+
toStream(streamCompleteCallback) {
|
|
43
|
+
throw new Error('toStream not implemented.');
|
|
44
|
+
}
|
|
45
|
+
toJSON() {
|
|
46
|
+
throw new Error('toJSON not implemented.');
|
|
47
|
+
}
|
|
48
|
+
}
|