diff --git a/types/stripe-v3/index.d.ts b/types/stripe-v3/index.d.ts index 5f8d9f4d0b..d1d1942679 100644 --- a/types/stripe-v3/index.d.ts +++ b/types/stripe-v3/index.d.ts @@ -44,27 +44,49 @@ declare namespace stripe { retrievePaymentIntent( clientSecret: string, ): Promise; + /** @deprecated */ handleCardPayment( clientSecret: string, element: elements.Element, options?: HandleCardPaymentOptions, ): Promise; + /** @deprecated */ handleCardPayment( clientSecret: string, options?: HandleCardPaymentWithoutElementsOptions, ): Promise; + confirmCardPayment( + clientSecret: string, + data?: ConfirmCardPaymentData, + options?: ConfirmCardPaymentOptions, + ): Promise; handleCardAction( clientSecret: string, ): Promise; + confirmSepaDebitPayment( + clientSecret: string, + data?: ConfirmSepaDebitPaymentData, + ): Promise; + /** @deprecated */ handleCardSetup( clientSecret: string, element: elements.Element, data?: HandleCardSetupOptions, ): Promise; + /** @deprecated */ handleCardSetup( clientSecret: string, data?: HandleCardSetupOptionsWithoutElementsOptions, ): Promise; + confirmCardSetup( + clientSecret: string, + data?: ConfirmCardSetupData, + options?: ConfirmCardSetupOptions, + ): Promise; + confirmSepaDebitSetup( + clientSecret: string, + data?: ConfirmSepaDebitSetupData, + ): Promise; confirmPaymentIntent( clientSecret: string, element: elements.Element, @@ -479,6 +501,67 @@ declare namespace stripe { */ source?: string; } + + interface ConfirmCardPaymentData { + /* + * Pass an object to confirm using data collected by a card or + * cardNumber Element or an with an existing token and to supply + * additional data relevant to the PaymentMethod, such as billing + * details: + */ + payment_method?: string | { + /* + * Uses the provided card or cardNumber Element to create a + * PaymentMethod to use for confirmation. + */ + card: elements.Element | { + /* + * Converts the provided token into a PaymentMethod to use for + * confirmation. + */ + token: string, + }, + /** + * The billing_details associated with the card. + */ + billing_details?: BillingDetails, + }; + } + interface ConfirmCardPaymentOptions { + /* + * Set this to false if you want to handle next actions yourself, or if + * you want to defer next action handling until later (e.g. for use in + * the PaymentRequest API). Default is true. + */ + handleActions?: boolean; + } + + interface ConfirmSepaDebitPaymentData { + /** + * Pass an object to confirm using data collected by an iban Element or + * by passing data directly and to supply additional required billing + * details: + */ + payment_method?: string | { + /** + * An iban Element. + */ + sepa_debit: elements.Element | { + /* + * An IBAN account number. + */ + iban: string, + }, + /** + * The customer's billing_details. name and email are required. + */ + billing_details: { + name: string, + email: string, + } + }; + } + interface HandleCardSetupOptions { /** * Use this parameter to supply additional data relevant to @@ -561,6 +644,66 @@ declare namespace stripe { }; } + interface ConfirmCardSetupData { + /* + * Pass an object to confirm using data collected by a card or + * cardNumber Element or an with an existing token and to supply + * additional data relevant to the PaymentMethod, such as billing + * details: + */ + payment_method?: string | { + /* + * Uses the provided card or cardNumber Element to create a + * PaymentMethod to use for confirmation. + */ + card: elements.Element | { + /* + * Converts the provided token into a PaymentMethod to use for + * confirmation. + */ + token: string, + }, + /** + * The billing_details associated with the card. + */ + billing_details?: BillingDetails, + }; + } + interface ConfirmCardSetupOptions { + /* + * Set this to false if you want to handle next actions yourself, or if + * you want to defer next action handling until later (e.g. for use in + * the PaymentRequest API). Default is true. + */ + handleActions?: boolean; + } + + interface ConfirmSepaDebitSetupData { + /** + * Pass an object to confirm using data collected by an iban Element or + * by passing data directly and to supply additional required billing + * details: + */ + payment_method?: string | { + /** + * An iban Element. + */ + sepa_debit: elements.Element | { + /* + * An IBAN account number. + */ + iban: string, + }, + /** + * The customer's billing_details. name and email are required. + */ + billing_details: { + name: string, + email: string, + } + }; + } + interface PaymentMethodResponse { paymentMethod?: paymentMethod.PaymentMethod; error?: Error; diff --git a/types/stripe-v3/stripe-v3-tests.ts b/types/stripe-v3/stripe-v3-tests.ts index f93cfcbee4..4ad0379779 100644 --- a/types/stripe-v3/stripe-v3-tests.ts +++ b/types/stripe-v3/stripe-v3-tests.ts @@ -277,6 +277,44 @@ describe("Stripe elements", () => { console.log(result.paymentIntent.source); } }); + + stripe.confirmCardPayment( + 'pi_18eYalAHEMiOZZp1l9ZTjSU0_secret_NibvRz4PMmJqjfb0sqmT7aq2', + { + payment_method: { + card, + billing_details: { + name: 'Jenny Rosen', + }, + } + } + ).then(result => { + if (result.error) { + console.error(result.error.message); + } else if (result.paymentIntent) { + console.log(result.paymentIntent.source); + } + }); + + const ibanElement = elements.create('iban'); + stripe.confirmSepaDebitPayment( + 'pi_18eYalAHEMiOZZp1l9ZTjSU0_secret_NibvRz4PMmJqjfb0sqmT7aq2', + { + payment_method: { + sepa_debit: ibanElement, + billing_details: { + name: 'Jenny Rosen', + email: 'jenny@example.com', + }, + } + } + ).then(result => { + if (result.error) { + console.error(result.error.message); + } else if (result.paymentIntent) { + console.log(result.paymentIntent.source); + } + }); }); it("should handle card setup", () => { @@ -301,6 +339,51 @@ describe("Stripe elements", () => { }); }); + it("should confirm card setup", () => { + const card = elements.create('card'); + + stripe.confirmCardSetup( + 'pi_18eYalAHEMiOZZp1l9ZTjSU0_secret_NibvRz4PMmJqjfb0sqmT7aq2', + { + payment_method: { + card, + billing_details: { + name: 'Jenny Rosen', + }, + } + } + ).then(result => { + if (result.error) { + console.error(result.error.message); + } else if (result.setupIntent) { + console.log(result.setupIntent.id); + } + }); + }); + + it("should confirm SEPA debit setup", () => { + const ibanElement = elements.create('iban'); + + stripe.confirmSepaDebitSetup( + 'pi_18eYalAHEMiOZZp1l9ZTjSU0_secret_NibvRz4PMmJqjfb0sqmT7aq2', + { + payment_method: { + sepa_debit: ibanElement, + billing_details: { + name: 'Jenny Rosen', + email: 'jenny@example.com', + }, + } + } + ).then(result => { + if (result.error) { + console.error(result.error.message); + } else if (result.setupIntent) { + console.log(result.setupIntent.id); + } + }); + }); + it("should get card element", () => { elements.create('card'); const card = elements.getElement('card');