expo-pngme-sdk
Version:
Expo SDK for Pngme financial insights - Android only, optimized for managed workflow
88 lines (71 loc) • 2.48 kB
text/typescript
import {
ConfigPlugin,
withAndroidManifest,
withAppBuildGradle,
} from '@expo/config-plugins';
export interface PngmePluginProps {
pngmeSdkVersion?: string;
pngmeMavenUrl?: string;
}
/**
* Add Pngme SDK repository and dependencies to Android project
*/
const withPngmeAndroid: ConfigPlugin<PngmePluginProps> = (config, props = {}) => {
const PNGME_MAVEN_URL = props.pngmeMavenUrl || 'https://jitpack.io';
const PNGME_SDK_VERSION = props.pngmeSdkVersion || '7.0.6';
// Add permissions to AndroidManifest.xml
config = withAndroidManifest(config, async (config) => {
const manifest = config.modResults;
// Ensure permissions array exists
if (!manifest.manifest.permission) {
manifest.manifest.permission = [];
}
const requiredPermissions = [
'android.permission.READ_SMS',
'android.permission.INTERNET',
'android.permission.ACCESS_NETWORK_STATE',
];
requiredPermissions.forEach((permission) => {
const exists = manifest.manifest.permission?.some(
(p: any) => p.$?.['android:name'] === permission
);
if (!exists) {
manifest.manifest.permission?.push({
$: {
'android:name': permission,
},
});
}
});
return config;
});
// Add repository and dependencies to app/build.gradle
config = withAppBuildGradle(config, (config) => {
let buildGradle = config.modResults.contents;
// Add repository if not exists
if (!buildGradle.includes(PNGME_MAVEN_URL)) {
const repoPattern = /repositories\s*\{/;
const repoReplacement = `repositories {
maven { url '${PNGME_MAVEN_URL}' }`;
buildGradle = buildGradle.replace(repoPattern, repoReplacement);
}
// Add Pngme SDK dependency if not exists
if (!buildGradle.includes('com.pngme:pngme-sdk')) {
const depPattern = /dependencies\s*\{/;
const depReplacement = `dependencies {
implementation 'com.pngme:pngme-sdk:${PNGME_SDK_VERSION}'`;
buildGradle = buildGradle.replace(depPattern, depReplacement);
}
config.modResults.contents = buildGradle;
return config;
});
return config;
};
/**
* Expo config plugin for Pngme SDK
* Automatically configures Android permissions and dependencies
*/
const withPngme: ConfigPlugin<PngmePluginProps | void> = (config, props) => {
return withPngmeAndroid(config, props || {});
};
export default withPngme;