expo-mercadopago-integration
Version:
Expo library for integrating Mercado Pago native SDK without ejecting
90 lines (71 loc) • 2.54 kB
JavaScript
const { withAndroidManifest, withInfoPlist } = require('@expo/config-plugins');
const withMercadoPago = (config, { publicKey, siteId = 'MLA' } = {}) => {
if (!publicKey) {
throw new Error('MercadoPago: publicKey is required in plugin configuration');
}
// Android configuration
config = withAndroidManifest(config, (config) => {
const { manifest } = config.modResults;
// Add permissions
if (!manifest['uses-permission']) {
manifest['uses-permission'] = [];
}
const permissions = [
'android.permission.INTERNET',
'android.permission.ACCESS_NETWORK_STATE'
];
permissions.forEach(permission => {
if (!manifest['uses-permission'].find(p => p.$['android:name'] === permission)) {
manifest['uses-permission'].push({
$: {
'android:name': permission
}
});
}
});
// Add MercadoPago activity
if (!manifest.application) {
manifest.application = [{}];
}
if (!manifest.application[0].activity) {
manifest.application[0].activity = [];
}
const mercadoPagoActivity = {
$: {
'android:name': 'com.mercadopago.android.px.core.MercadoPagoCheckout$Activity',
'android:exported': 'false',
'android:theme': '@style/Theme.AppCompat.Light.NoActionBar'
}
};
if (!manifest.application[0].activity.find(a => a.$['android:name'] === mercadoPagoActivity.$['android:name'])) {
manifest.application[0].activity.push(mercadoPagoActivity);
}
return config;
});
// iOS configuration
config = withInfoPlist(config, (config) => {
const { modResults } = config;
// Add URL schemes for MercadoPago
if (!modResults.CFBundleURLTypes) {
modResults.CFBundleURLTypes = [];
}
const mercadoPagoURLScheme = {
CFBundleURLName: 'MercadoPago',
CFBundleURLSchemes: [`mp-${publicKey}`]
};
if (!modResults.CFBundleURLTypes.find(scheme => scheme.CFBundleURLName === 'MercadoPago')) {
modResults.CFBundleURLTypes.push(mercadoPagoURLScheme);
}
// Add LSApplicationQueriesSchemes for MercadoPago app
if (!modResults.LSApplicationQueriesSchemes) {
modResults.LSApplicationQueriesSchemes = [];
}
const mercadoPagoAppScheme = 'mercadopago';
if (!modResults.LSApplicationQueriesSchemes.includes(mercadoPagoAppScheme)) {
modResults.LSApplicationQueriesSchemes.push(mercadoPagoAppScheme);
}
return config;
});
return config;
};
module.exports = withMercadoPago;