import { withInfoPlist, withAndroidManifest, AndroidConfig, ConfigPlugin, withAppBuildGradle, withProjectBuildGradle, withMainApplication } from "expo/config-plugins"; /// 🎲 addDependency function addDependency(buildGradleContents: string, newDependency: string) { const regex = /implementation\("com\.facebook\.react:react-android"\)/; const replacement = `$&\n implementation '${newDependency}'`; const updatedContents = buildGradleContents.replace(regex, replacement); return updatedContents; } /// 🎲 addDefaultConfig function addDefaultConfig(buildGradleContents: string, param: string) { const regex = /defaultConfig \{/; const replacement = `$&\n \t${param}`; const updatedContents = buildGradleContents.replace(regex, replacement); return updatedContents; } /// 🎲 addMavenRepository const addMavenRepository = ( buildGradleContents: string, artifactoryUserName: string, artifactoryPassword: string, ) => { // Define the new Maven repository block const newRepositoryBlock = ` maven { url 'https://www.jitpack.io' } maven { url "https://repo.incode.com/artifactory/libs-incode-welcome" credentials { username = "${artifactoryUserName}" password = "${artifactoryPassword}" } } `; // Use regex to match and replace the existing Maven repository block const regex = /maven\s*{\s*url\s+'https:\/\/www.jitpack.io'\s*}/; // Replace the existing block with the new one const updatedContents = buildGradleContents.replace( regex, newRepositoryBlock, ); return updatedContents; }; const withIncodeSDKConfig: ConfigPlugin<{ artifactoryUserName: string; artifactoryPassword: string; }> = (config, { artifactoryUserName, artifactoryPassword }) => { /// ✅ [iOS] update info.plist config = withInfoPlist(config, (config) => { config.modResults["NSCameraUsageDescription"] = "The SDK uses the camera in order to verify the identity of the customer, e.g. in ID scan, Selfie scan and so on."; config.modResults["NSLocationWhenInUseUsageDescription"] = "The SDK uses the current user location in order to detect exact location for Geolocation step."; config.modResults["NSMicrophoneUsageDescription"] = "The SDK uses microphone for performing a video call during Video Conference step or for doing speech recognition during Video Selfie."; return config; }); /// ✅ [Android] update manifest config = withAndroidManifest(config, (config) => { const mainApplication = AndroidConfig.Manifest.getMainApplicationOrThrow( config.modResults, ); return config; }); /// ✅ [Android] update app build.gradle config = withAppBuildGradle(config, (config) => { config.modResults.contents = addDependency( config.modResults.contents, "com.android.support:multidex:1.0.3", ); config.modResults.contents = addDependency( config.modResults.contents, "com.incode.sdk:core-light:2.5.1", ); config.modResults.contents = addDefaultConfig( config.modResults.contents, "multiDexEnabled true", ); return config; }); /// ✅ [Android] modify MainApplication.java config = withMainApplication(config, (config) => { config.modResults.contents = config.modResults.contents.replace( "public class MainApplication extends Application implements ReactApplication {", "import androidx.multidex.MultiDexApplication;\n\npublic class MainApplication extends MultiDexApplication implements ReactApplication {" ); return config; }); /// ✅ [Android] update project build.gradle config = withProjectBuildGradle(config, (config) => { config.modResults.contents = addMavenRepository( config.modResults.contents, artifactoryUserName, artifactoryPassword, ); return config; }); return config; }; export default withIncodeSDKConfig;