expo-pngme-sdk
Version:
Module for Pngme partners to build credit score from phone information
78 lines (72 loc) • 2.72 kB
JavaScript
const {
withAndroidManifest,
withAppBuildGradle,
withProjectBuildGradle,
createRunOncePlugin,
} = require('@expo/config-plugins');
// This function adds the required Android permissions
const withPngmePermissions = (config) => {
return withAndroidManifest(config, async (config) => {
let androidManifest = config.modResults;
if (!Array.isArray(androidManifest.manifest['uses-permission'])) {
androidManifest.manifest['uses-permission'] = [];
}
const requiredPermissions = [
'android.permission.INTERNET',
'android.permission.READ_SMS',
'android.permission.RECEIVE_SMS',
];
requiredPermissions.forEach((permission) => {
if (!androidManifest.manifest['uses-permission'].some((item) => item.$['android:name'] === permission)) {
androidManifest.manifest['uses-permission'].push({
$: { 'android:name': permission },
});
}
});
return config;
});
};
// This function updates the Java version compatibility in the consumer's app
const withPngmeAppGradle = (config) => {
return withAppBuildGradle(config, (config) => {
if (config.modResults.language === 'groovy') {
config.modResults.contents = config.modResults.contents.replace(
/JavaVersion\.VERSION_1_8/g,
'JavaVersion.VERSION_17'
);
config.modResults.contents = config.modResults.contents.replace(
/jvmTarget = '1.8'/g,
"jvmTarget = '17'"
);
}
return config;
});
};
// This function adds the SDK version to the root project's build.gradle
const withPngmeProjectGradle = (config, pngmeAndroidSdk) => {
return withProjectBuildGradle(config, (config) => {
if (config.modResults.language === 'groovy') {
// Ensure the ext block exists
if (!/ext\s*{/.test(config.modResults.contents)) {
config.modResults.contents = `ext {}\n${config.modResults.contents}`;
}
// Add the pngmeAndroidSdkVersion property if it doesn't exist
if (!config.modResults.contents.includes('pngmeAndroidSdkVersion =')) {
config.modResults.contents = config.modResults.contents.replace(
/ext\s*{/,
`ext {\n pngmeAndroidSdkVersion = "${pngmeAndroidSdk}"`
);
}
}
return config;
});
};
const withPngme = (config, props) => {
const { pngmeAndroidSdk = 'v7.0.6' } = props || {};
config = withPngmePermissions(config);
config = withPngmeAppGradle(config); // For Java version in app
config = withPngmeProjectGradle(config, pngmeAndroidSdk); // For SDK version
return config;
};
const pkg = require('./package.json');
module.exports = createRunOncePlugin(withPngme, pkg.name, pkg.version);