UNPKG

expo-payments-stripe

Version:

Provides support for payments through Stripe and Apple Pay on iOS (in bare apps), and Stripe on Android (plus Android Pay with bare apps).

224 lines (195 loc) 7.14 kB
import { NativeModulesProxy, UnavailabilityError } from '@unimodules/core'; import { Platform } from 'react-native'; import errorCodes from './errorCodes'; import checkArgs from './utils/checkArgs'; import processTheme from './utils/processTheme'; import * as types from './utils/types'; import * as validators from './utils/validators'; const { StripeModule } = NativeModulesProxy; console.warn( '`expo-payments-stripe` has been deprecated in favor of `@stripe/stripe-react-native`. For more information on the new library, and how to migrate away from `expo-payments-stripe`, please refer to https://docs.expo.io/versions/latest/sdk/stripe/. This package will no longer be available in SDK 43.' ); function checkInit(instance: Stripe) { if (!instance.stripeInitialized) { throw new Error( `You should call init first.\nRead more https://github.com/tipsi/tipsi-stripe#usage` ); } } class Stripe { stripeInitialized = false; setOptionsAsync = (options: types.StripeOptions) => { checkArgs(validators.setOptionsOptionsPropTypes, options, 'options', 'Stripe.setOptions'); this.stripeInitialized = true; return StripeModule.init(options, errorCodes); }; /** @deprecated use `deviceSupportsNativePay` */ deviceSupportsAndroidPayAsync = (): Promise<boolean> => StripeModule.deviceSupportsAndroidPay(); /** @deprecated use `deviceSupportsNativePay` */ deviceSupportsApplePayAsync = (): Promise<boolean> => StripeModule.deviceSupportsApplePay(); deviceSupportsNativePayAsync = () => Platform.select({ ios: () => this.deviceSupportsApplePayAsync(), android: () => this.deviceSupportsAndroidPayAsync(), default: () => Promise.resolve(false), })(); /** @deprecated use `canMakeNativePayPayments` */ canMakeApplePayPaymentsAsync = ( options: types.CanMakeApplePayPaymentsOptions = {} ): Promise<boolean> => { checkArgs( validators.canMakeApplePayPaymentsOptionsPropTypes, options, 'options', 'Stripe.canMakeApplePayPayments' ); return StripeModule.canMakeApplePayPayments(options); }; /** @deprecated use `canMakeNativePayPayments` */ canMakeAndroidPayPaymentsAsync = (): Promise<boolean> => StripeModule.canMakeAndroidPayPayments(); // iOS requires networks array while Android requires nothing canMakeNativePayPaymentsAsync = (options: types.CanMakeApplePayPaymentsOptions = {}) => Platform.select({ ios: () => this.canMakeApplePayPaymentsAsync(options), android: () => this.canMakeAndroidPayPaymentsAsync(), default: () => Promise.resolve(false), })(); /** @deprecated use `paymentRequestWithNativePay` */ paymentRequestWithAndroidPayAsync = ( options: types.PaymentRequestWithAndroidPayOptions ): Promise<types.AndroidToken> => { checkInit(this); checkArgs( validators.paymentRequestWithAndroidPayOptionsPropTypes, options, 'options', 'Stripe.paymentRequestWithAndroidPay' ); return StripeModule.paymentRequestWithAndroidPay(options); }; /** @deprecated use `paymentRequestWithNativePay` */ paymentRequestWithApplePayAsync = ( items: types.PaymentRequestWithApplePayItem[], options: types.PaymentRequestWithApplePayOptions ): Promise<types.AppleToken> => { checkInit(this); checkArgs( validators.paymentRequestWithApplePayItemsPropTypes, { items }, 'items', 'Stripe.paymentRequestWithApplePay' ); checkArgs( validators.paymentRequestWithApplePayOptionsPropTypes, options, 'options', 'Stripe.paymentRequestWithApplePay' ); return StripeModule.paymentRequestWithApplePay(items, options); }; paymentRequestWithNativePayAsync( options: types.PaymentRequestWithApplePayOptions | types.PaymentRequestWithAndroidPayOptions, items: types.PaymentRequestWithApplePayItem[] = [] ) { const nativePaymentFunction = Platform.select< () => Promise<types.AppleToken | types.AndroidToken> >({ ios: () => this.paymentRequestWithApplePayAsync( items, options as types.PaymentRequestWithApplePayOptions ), android: () => this.paymentRequestWithAndroidPayAsync( options as types.PaymentRequestWithAndroidPayOptions ), default: () => Promise.reject( new UnavailabilityError('expo-payments-stripe', 'paymentRequestWithNativePayAsync') ), }); return nativePaymentFunction(); } /** @deprecated use completeNativePayRequest */ completeApplePayRequestAsync = (): Promise<void> => { checkInit(this); return StripeModule.completeApplePayRequest(); }; // no corresponding android impl exists completeNativePayRequestAsync = () => Platform.select({ ios: () => this.completeApplePayRequestAsync(), default: () => Promise.resolve(), })(); /** @deprecated use `cancelNativePayRequest` */ cancelApplePayRequestAsync = (): Promise<void> => { checkInit(this); return StripeModule.cancelApplePayRequest(); }; // no corresponding android impl exists cancelNativePayRequestAsync = () => Platform.select({ ios: () => this.cancelApplePayRequestAsync(), default: () => Promise.resolve(), })(); /** @deprecated use `openNativePaySetup` */ openApplePaySetupAsync = (): Promise<void> => StripeModule.openApplePaySetup(); // no corresponding android impl exists openNativePaySetupAsync = () => Platform.select({ ios: () => this.openApplePaySetupAsync(), default: () => Promise.resolve(), })(); paymentRequestWithCardFormAsync = ( options: types.PaymentRequestWithCardFormOptions = {} ): Promise<types.AndroidToken | types.AppleToken> => { checkInit(this); checkArgs( validators.paymentRequestWithCardFormOptionsPropTypes, options, 'options', 'Stripe.paymentRequestWithCardForm' ); return StripeModule.paymentRequestWithCardForm({ ...options, theme: processTheme(options.theme), }); }; createTokenWithCardAsync = ( params: types.CreateTokenWithCardOptions ): Promise<types.AndroidToken | types.AppleToken> => { checkInit(this); checkArgs( validators.createTokenWithCardParamsPropTypes, params, 'params', 'Stripe.createTokenWithCard' ); return StripeModule.createTokenWithCard(params); }; createTokenWithBankAccountAsync = ( params = {} ): Promise<types.AndroidToken | types.AppleToken> => { checkInit(this); checkArgs( validators.createTokenWithBankAccountParamsPropTypes, params, 'params', 'Stripe.createTokenWithBankAccount' ); return StripeModule.createTokenWithBankAccount(params); }; createSourceWithParamsAsync = ( params: types.CreateSourceWithParamsOptions ): Promise<types.Source> => { checkInit(this); checkArgs( validators.createSourceWithParamsPropType, params, 'params', 'Stripe.createSourceWithParams' ); return StripeModule.createSourceWithParams(params); }; } export default new Stripe();