react-native-expo-braintree
Version:
React native and expo wrapper around braintree sdk fro android and ios
89 lines (81 loc) • 2.69 kB
text/typescript
import { type ConfigPlugin, createRunOncePlugin } from '@expo/config-plugins';
import {
withExpoBraintreeAndroid,
withExpoBraintreeAndroidGradle,
} from './withExpoBraintree.android';
import {
withExpoBraintreePlist,
withVenmoScheme,
withExpoBraintreeAppDelegate,
withBraintreeWrapperFile,
type AppleLanguage,
} from './withExpoBraintree.ios';
const pkg = require('react-native-expo-braintree/package.json');
export type ExpoBraintreePluginProps = {
/**
* xCode project name, used for importing the swift expo braintree config header
*/
xCodeProjectAppName?: string;
/**
* Indicator that tell the plugin if you still use AppDelegate Objective C
* Optional Default = "swift"
*/
appDelegateLanguage?: AppleLanguage;
/**
* Android AppLink host
*/
host: string;
/**
* Android AppLink pathPrefix
*/
pathPrefix?: string;
/**
* Set this flag to true if you need to use requestVenmoNonce which will be using fallbackUrlScheme
* It will also add an intent-filter if it is not added before
* <intent-filter>
* <action android:name="android.intent.action.VIEW" />
* <category android:name="android.intent.category.DEFAULT" />
* <category android:name="android.intent.category.BROWSABLE" />
* <data android:scheme="${applicationId}.braintree" />
* </intent-filter>
*/
addFallbackUrlScheme?: 'true' | 'false';
/**
* Flag that determines if we should initialize 3ds secure flow
* It will also add an intent-filter if it is not added before
* <intent-filter>
* <action android:name="android.intent.action.VIEW" />
* <category android:name="android.intent.category.DEFAULT" />
* <category android:name="android.intent.category.BROWSABLE" />
* <data android:scheme="${applicationId}.braintree" />
* </intent-filter>
*/
initialize3DSecure?: 'true' | 'false';
/**
* Flag that determines if we should initialize Google Pay
*/
initializeGooglePay?: 'true' | 'false';
};
export const withExpoBraintreePlugin: ConfigPlugin<ExpoBraintreePluginProps> = (
expoConfig,
props
) => {
// Android mods
let config = withExpoBraintreeAndroid(expoConfig, props);
if (props?.initialize3DSecure === 'true') {
config = withExpoBraintreeAndroidGradle(config);
}
// IOS mods
config = withExpoBraintreeAppDelegate(config, props);
config = withBraintreeWrapperFile(config, {
appDelegateLanguage: props?.appDelegateLanguage || 'swift',
});
config = withExpoBraintreePlist(config);
config = withVenmoScheme(config);
return config;
};
export default createRunOncePlugin(
withExpoBraintreePlugin,
pkg.name,
pkg.version
);