From 4e30eafc6f14cec76c180c873e1852029fe8bc2e Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Thu, 5 Feb 2026 09:58:16 +0100 Subject: [PATCH 1/7] wip introduction of expo deps --- .../java/it/pagopa/io/app/MainActivity.kt | 3 +- .../java/it/pagopa/io/app/MainApplication.kt | 15 +- android/build.gradle | 3 +- android/settings.gradle | 20 +- ios/AppDelegate.swift | 27 +- ios/IO.xcodeproj/project.pbxproj | 94 +- ios/IO/PrivacyInfo.xcprivacy | 14 +- ios/Podfile | 21 +- ios/Podfile.lock | 112 +- package.json | 1 + yarn.lock | 2078 ++++++++++++++++- 11 files changed, 2315 insertions(+), 73 deletions(-) diff --git a/android/app/src/main/java/it/pagopa/io/app/MainActivity.kt b/android/app/src/main/java/it/pagopa/io/app/MainActivity.kt index 9cdef558cb1..c0c975cf0e8 100644 --- a/android/app/src/main/java/it/pagopa/io/app/MainActivity.kt +++ b/android/app/src/main/java/it/pagopa/io/app/MainActivity.kt @@ -1,4 +1,5 @@ package it.pagopa.io.app; +import expo.modules.ReactActivityDelegateWrapper import android.content.pm.ActivityInfo; import android.os.Build; @@ -27,7 +28,7 @@ class MainActivity : ReactActivity() { * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] */ override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) + ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)) // https://github.com/crazycodeboy/react-native-splash-screen#third-stepplugin-configuration override fun onCreate(savedInstanceState: Bundle?) { diff --git a/android/app/src/main/java/it/pagopa/io/app/MainApplication.kt b/android/app/src/main/java/it/pagopa/io/app/MainApplication.kt index 8b0b46d56b7..4037b2197c9 100644 --- a/android/app/src/main/java/it/pagopa/io/app/MainApplication.kt +++ b/android/app/src/main/java/it/pagopa/io/app/MainApplication.kt @@ -1,4 +1,7 @@ package it.pagopa.io.app +import android.content.res.Configuration +import expo.modules.ApplicationLifecycleDispatcher +import expo.modules.ReactNativeHostWrapper import android.app.Application import com.facebook.react.PackageList @@ -17,7 +20,7 @@ import it.pagopa.io.app.modules.PdfHighResGeneratorPackage class MainApplication : Application(), ReactApplication { override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { + ReactNativeHostWrapper(this, object : DefaultReactNativeHost(this) { override fun getPackages(): List = PackageList(this).packages.apply { // Packages that cannot be autolinked yet can be added manually here, for example: @@ -35,14 +38,20 @@ class MainApplication : Application(), ReactApplication { override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } + }) override val reactHost: ReactHost - get() = getDefaultReactHost(applicationContext, reactNativeHost) + get() = ReactNativeHostWrapper.createReactHost(applicationContext, reactNativeHost) override fun onCreate() { super.onCreate() loadReactNative(this) + ApplicationLifecycleDispatcher.onApplicationCreate(this) + } + + override fun onConfigurationChanged(newConfig: Configuration) { + super.onConfigurationChanged(newConfig) + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig) } } diff --git a/android/build.gradle b/android/build.gradle index c6f024abd3c..f4efdf4142c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -32,4 +32,5 @@ allprojects { } } -apply plugin: "com.facebook.react.rootproject" \ No newline at end of file +apply plugin: "com.facebook.react.rootproject" +apply plugin: "expo-root-project" \ No newline at end of file diff --git a/android/settings.gradle b/android/settings.gradle index 1b038d37741..84296202b43 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,8 +1,22 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } +pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") + def expoPluginsPath = new File( + providers.exec { + workingDir(rootDir) + commandLine("node", "--print", "require.resolve('expo-modules-autolinking/package.json', { paths: [require.resolve('expo/package.json')] })") + }.standardOutput.asText.get().trim(), + "../android/expo-gradle-plugin" + ).absolutePath + includeBuild(expoPluginsPath) +} +plugins { id("com.facebook.react.settings") +id("expo-autolinking-settings") +} +extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand(expoAutolinking.rnConfigCommand) } rootProject.name = 'IO' include ':app' includeBuild('../node_modules/@react-native/gradle-plugin') +expoAutolinking.useExpoModules() +expoAutolinking.useExpoVersionCatalog() +includeBuild(expoAutolinking.reactNativeGradlePlugin) include ':react-native-cie' project(':react-native-cie').projectDir = new File(rootProject.projectDir, '../node_modules/@pagopa/react-native-cie/android') \ No newline at end of file diff --git a/ios/AppDelegate.swift b/ios/AppDelegate.swift index b7e304ed0ab..a9d6b3dea9d 100644 --- a/ios/AppDelegate.swift +++ b/ios/AppDelegate.swift @@ -1,27 +1,29 @@ import UIKit +import Expo import React import React_RCTAppDelegate import ReactAppDependencyProvider import UserNotifications @main -class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { +class AppDelegate: ExpoAppDelegate, UNUserNotificationCenterDelegate { var window: UIWindow? var reactNativeDelegate: ReactNativeDelegate? var reactNativeFactory: RCTReactNativeFactory? - func application( + override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil ) -> Bool { let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() + let factory = ExpoReactNativeFactory(delegate: delegate) + delegate.dependencyProvider = RCTAppDependencyProvider() self.reactNativeDelegate = delegate self.reactNativeFactory = factory + bindReactNativeFactory(factory) self.window = UIWindow(frame: UIScreen.main.bounds) @@ -35,21 +37,21 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD let center = UNUserNotificationCenter.current() center.delegate = self - return true + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } // react-native-push-notification-ios - func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + override func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { RNCPushNotificationIOS.didRegisterForRemoteNotifications(withDeviceToken: deviceToken) } // react-native-push-notification-ios - func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { + override func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { RNCPushNotificationIOS.didReceiveRemoteNotification(userInfo, fetchCompletionHandler: completionHandler) } // react-native-push-notification-ios - func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { + override func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { RNCPushNotificationIOS.didFailToRegisterForRemoteNotificationsWithError(error) } @@ -65,18 +67,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterD } // Deep linking - func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { + override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { return RCTLinkingManager.application(app, open: url, options: options) } - func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { + override func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { return RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler) } } -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { +class ReactNativeDelegate: ExpoReactNativeFactoryDelegate { override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() + // needed to return the correct URL for expo-dev-client. + bridge.bundleURL ?? bundleURL() } override func bundleURL() -> URL? { diff --git a/ios/IO.xcodeproj/project.pbxproj b/ios/IO.xcodeproj/project.pbxproj index 469b43c8e47..c0d49ab3120 100644 --- a/ios/IO.xcodeproj/project.pbxproj +++ b/ios/IO.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -34,6 +34,7 @@ B57C5DCD2D8B12A500173EF4 /* AppReviewModule.m in Sources */ = {isa = PBXBuildFile; fileRef = B57C5DCC2D8B129A00173EF4 /* AppReviewModule.m */; }; B57C5DCF2D8B12DC00173EF4 /* AppReviewModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = B57C5DCE2D8B12D200173EF4 /* AppReviewModule.swift */; }; B7B71EAAE496484488FE3751 /* Titillio-Extrabold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 59423B676D254801BFAA4C5E /* Titillio-Extrabold.otf */; }; + B851B29045D067562CDFD92D /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34D8E6D4B7FD8B878BBDC56E /* ExpoModulesProvider.swift */; }; D2245B924B42442CAF4944D5 /* Titillio-SemiboldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = D688263BB87C4DFBA007CD92 /* Titillio-SemiboldItalic.otf */; }; D3577FD00169492CB2980CE3 /* Titillio-Extrablack.otf in Resources */ = {isa = PBXBuildFile; fileRef = 71A3E9FDB4AD4D74AB491DA4 /* Titillio-Extrablack.otf */; }; EC056373020AA03F7D8532D9 /* libPods-IO.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22DB90684FEFB1CA71467FD6 /* libPods-IO.a */; }; @@ -79,6 +80,7 @@ 22DB90684FEFB1CA71467FD6 /* libPods-IO.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-IO.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 2AD40B9824CB049500E4124A /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = IO/LaunchScreen.storyboard; sourceTree = ""; }; 2AFAC65324C9B7C300E85199 /* IO-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "IO-Bridging-Header.h"; sourceTree = ""; }; + 34D8E6D4B7FD8B878BBDC56E /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-IO/ExpoModulesProvider.swift"; sourceTree = ""; }; 3CA5B0F4CFD44E78900FE43A /* TitilliumSansPro-LightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "TitilliumSansPro-LightItalic.otf"; path = "../assets/fonts/TitilliumSansPro/TitilliumSansPro-LightItalic.otf"; sourceTree = ""; }; 3E5721DADB56490699700FBF /* Titillio-ThinItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Titillio-ThinItalic.otf"; path = "../assets/fonts/Titillio/Titillio-ThinItalic.otf"; sourceTree = ""; }; 4F54E8E3A56A4E139D5DC82D /* Titillio-BoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Titillio-BoldItalic.otf"; path = "../assets/fonts/Titillio/Titillio-BoldItalic.otf"; sourceTree = ""; }; @@ -227,6 +229,7 @@ 132A5D6B2032B79F00AB7333 /* Recovered References */, D4DC8E1B3B2C5EA1E4968752 /* Frameworks */, 591602A69619994F43D34A93 /* Pods */, + CB6FFFBCF241CCAEA81BE870 /* ExpoModulesProviders */, ); indentWidth = 2; sourceTree = ""; @@ -241,6 +244,22 @@ name = Products; sourceTree = ""; }; + A9112A8D11CAEC111D5D538E /* IO */ = { + isa = PBXGroup; + children = ( + 34D8E6D4B7FD8B878BBDC56E /* ExpoModulesProvider.swift */, + ); + name = IO; + sourceTree = ""; + }; + CB6FFFBCF241CCAEA81BE870 /* ExpoModulesProviders */ = { + isa = PBXGroup; + children = ( + A9112A8D11CAEC111D5D538E /* IO */, + ); + name = ExpoModulesProviders; + sourceTree = ""; + }; D4DC8E1B3B2C5EA1E4968752 /* Frameworks */ = { isa = PBXGroup; children = ( @@ -260,6 +279,7 @@ buildPhases = ( 0F252B699C890B1793DA31B8 /* [CP] Check Pods Manifest.lock */, 95AEBF4A23D0A295000598A9 /* Start Packager */, + 0B3AB38D673D5DA2F3853B63 /* [Expo] Configure project */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, @@ -379,6 +399,30 @@ shellPath = /bin/sh; shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; }; + 0B3AB38D673D5DA2F3853B63 /* [Expo] Configure project */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "$(SRCROOT)/.xcode.env", + "$(SRCROOT)/.xcode.env.local", + "$(SRCROOT)/IO/IO.entitlements", + "$(SRCROOT)/Pods/Target Support Files/Pods-IO/expo-configure-project.sh", + ); + name = "[Expo] Configure project"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(SRCROOT)/Pods/Target Support Files/Pods-IO/ExpoModulesProvider.swift", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-IO/expo-configure-project.sh\"\n"; + }; 0F252B699C890B1793DA31B8 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -440,6 +484,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-IO/Pods-IO-frameworks.sh", + "${PODS_ROOT}/../../node_modules/@pagopa/react-native-cie/ios/iociesdkios.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/CieSDK/CieSDK.framework/CieSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/IOWalletCBOR/IOWalletCBOR.framework/IOWalletCBOR", "${PODS_XCFRAMEWORKS_BUILD_DIR}/IOWalletProximity/IOWalletProximity.framework/IOWalletProximity", @@ -459,6 +504,7 @@ ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/iociesdkios.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CieSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IOWalletCBOR.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IOWalletProximity.framework", @@ -489,6 +535,9 @@ inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-IO/Pods-IO-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNCAsyncStorage/RNCAsyncStorage_resources.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/RNDeviceInfo/RNDeviceInfoPrivacyInfo.bundle", @@ -504,6 +553,9 @@ name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Alamofire.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNCAsyncStorage_resources.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RNDeviceInfoPrivacyInfo.bundle", @@ -533,6 +585,7 @@ B57C5DCF2D8B12DC00173EF4 /* AppReviewModule.swift in Sources */, A626A6B62ED9AED30084EC6E /* PdfHighResGenerator.swift in Sources */, B551AC412DA55A0E00A4E30F /* AppDelegate.swift in Sources */, + B851B29045D067562CDFD92D /* ExpoModulesProvider.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -583,13 +636,17 @@ INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; INFOPLIST_PREPROCESS = NO; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG"; PRODUCT_BUNDLE_IDENTIFIER = it.pagopa.app.io; PRODUCT_NAME = IO; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -620,13 +677,17 @@ INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; INFOPLIST_PREPROCESS = NO; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = it.pagopa.app.io; PRODUCT_NAME = IO; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -689,7 +750,10 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD = ""; LDPLUSPLUS = ""; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = ( "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", "\"$(inherited)\"", @@ -757,7 +821,10 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD = ""; LDPLUSPLUS = ""; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = ( "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", "\"$(inherited)\"", @@ -824,7 +891,10 @@ IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD = ""; LDPLUSPLUS = ""; - LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; + LD_RUNPATH_SEARCH_PATHS = ( + /usr/lib/swift, + "$(inherited)", + ); LIBRARY_SEARCH_PATHS = ( "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", "\"$(inherited)\"", @@ -861,13 +931,17 @@ INFOPLIST_OTHER_PREPROCESSOR_FLAGS = "-traditional"; INFOPLIST_PREFIX_HEADER = "${BUILD_DIR}/GeneratedInfoPlistDotEnv.h"; INFOPLIST_PREPROCESS = NO; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 15.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); + OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE"; PRODUCT_BUNDLE_IDENTIFIER = it.pagopa.app.io.canary; PRODUCT_NAME = IO; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/ios/IO/PrivacyInfo.xcprivacy b/ios/IO/PrivacyInfo.xcprivacy index 8bf123837de..c600bc72df4 100644 --- a/ios/IO/PrivacyInfo.xcprivacy +++ b/ios/IO/PrivacyInfo.xcprivacy @@ -14,20 +14,21 @@ NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPICategoryUserDefaults NSPrivacyAccessedAPITypeReasons - C617.1 - 3B52.1 + CA92.1 + 1C8F.1 NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPICategoryFileTimestamp NSPrivacyAccessedAPITypeReasons - CA92.1 - 1C8F.1 + 0A2A.1 + 3B52.1 + C617.1 @@ -35,6 +36,7 @@ NSPrivacyAccessedAPICategoryDiskSpace NSPrivacyAccessedAPITypeReasons + E174.1 85F4.1 7D9E.1 diff --git a/ios/Podfile b/ios/Podfile index ae58897d414..f4f5d9cb5b2 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,7 @@ ENV['RCT_NEW_ARCH_ENABLED'] = '1' +require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking") + def node_require(script) # Resolve script with node to allow for hoisting require Pod::Executable.execute_command('node', ['-p', @@ -39,7 +41,24 @@ production = ENV["PRODUCTION"] == "1" IS_CI = ENV['CI'] target 'IO' do - config = use_native_modules! + use_expo_modules! + + if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1' + config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"]; + else + config_command = [ + 'node', + '--no-warnings', + '--eval', + 'require(require.resolve(\'expo-modules-autolinking\', { paths: [require.resolve(\'expo/package.json\')] }))(process.argv.slice(1))', + 'react-native-config', + '--json', + '--platform', + 'ios' + ] + end + + config = use_native_modules!(config_command) pod 'RNCPushNotificationIOS', :path => '../node_modules/@react-native-community/push-notification-ios' use_react_native!( diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 7243d2b7e19..d7aa8226281 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -5,6 +5,76 @@ PODS: - React - CieSDK (0.1.17) - DoubleConversion (1.1.6) + - EXConstants (18.0.13): + - ExpoModulesCore + - Expo (54.0.33): + - boost + - DoubleConversion + - ExpoModulesCore + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTAppDelegate + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactAppDependencyProvider + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - ExpoAsset (12.0.12): + - ExpoModulesCore + - ExpoFileSystem (19.0.21): + - ExpoModulesCore + - ExpoFont (14.0.11): + - ExpoModulesCore + - ExpoKeepAwake (15.0.8): + - ExpoModulesCore + - ExpoModulesCore (3.0.29): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga - fast_float (8.0.0) - FBLazyVector (0.81.5) - fmt (11.0.2) @@ -2060,6 +2130,8 @@ PODS: - React - react-native-blob-util (0.15.0): - React-Core + - react-native-cie (1.5.0): + - React - react-native-config (1.4.5): - react-native-config/App (= 1.4.5) - react-native-config/App (1.4.5): @@ -2873,6 +2945,8 @@ PODS: - React-perflogger (= 0.81.5) - React-utils (= 0.81.5) - SocketRocket + - ReactNativeART (1.2.0): + - React - ReactNativeExceptionHandler (2.10.8): - React - RNBluetoothStateManager (1.3.5): @@ -3448,6 +3522,13 @@ DEPENDENCIES: - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - EXConstants (from `../node_modules/expo-constants/ios`) + - Expo (from `../node_modules/expo`) + - ExpoAsset (from `../node_modules/expo-asset/ios`) + - ExpoFileSystem (from `../node_modules/expo-file-system/ios`) + - ExpoFont (from `../node_modules/expo-font/ios`) + - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) + - ExpoModulesCore (from `../node_modules/expo-modules-core`) - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) @@ -3501,6 +3582,7 @@ DEPENDENCIES: - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) - react-native-blob-util (from `../node_modules/react-native-blob-util`) + - "react-native-cie (from `../node_modules/@pagopa/react-native-cie`)" - react-native-config (from `../node_modules/react-native-config`) - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" - "react-native-document-picker (from `../node_modules/@react-native-documents/picker`)" @@ -3547,6 +3629,7 @@ DEPENDENCIES: - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - "ReactNativeART (from `../node_modules/@react-native-community/art`)" - ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`) - RNBluetoothStateManager (from `../node_modules/react-native-bluetooth-state-manager`) - RNCalendarEvents (from `../node_modules/react-native-calendar-events`) @@ -3603,6 +3686,20 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-linear-gradient" DoubleConversion: :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + EXConstants: + :path: "../node_modules/expo-constants/ios" + Expo: + :path: "../node_modules/expo" + ExpoAsset: + :path: "../node_modules/expo-asset/ios" + ExpoFileSystem: + :path: "../node_modules/expo-file-system/ios" + ExpoFont: + :path: "../node_modules/expo-font/ios" + ExpoKeepAwake: + :path: "../node_modules/expo-keep-awake/ios" + ExpoModulesCore: + :path: "../node_modules/expo-modules-core" fast_float: :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: @@ -3708,6 +3805,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-background-timer" react-native-blob-util: :path: "../node_modules/react-native-blob-util" + react-native-cie: + :path: "../node_modules/@pagopa/react-native-cie" react-native-config: :path: "../node_modules/react-native-config" react-native-cookies: @@ -3800,6 +3899,8 @@ EXTERNAL SOURCES: :path: build/generated/ios ReactCommon: :path: "../node_modules/react-native/ReactCommon" + ReactNativeART: + :path: "../node_modules/@react-native-community/art" ReactNativeExceptionHandler: :path: "../node_modules/react-native-exception-handler" RNBluetoothStateManager: @@ -3849,6 +3950,13 @@ SPEC CHECKSUMS: BVLinearGradient: 44fd36b87f318e7933c4c91a6991442a5e3f5bcf CieSDK: 35739b36e34e184a59e1550d03cac91700208115 DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + EXConstants: fce59a631a06c4151602843667f7cfe35f81e271 + Expo: ffcd2fb31776b663b84501a2568cab7dd7c0f9cb + ExpoAsset: f867e55ceb428aab99e1e8c082b5aee7c159ea18 + ExpoFileSystem: 858a44267a3e6e9057e0888ad7c7cfbf55d52063 + ExpoFont: f543ce20a228dd702813668b1a07b46f51878d47 + ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 + ExpoModulesCore: d86dab8a6c8f1184f9b0b0503ace93919882aa15 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd @@ -3907,6 +4015,7 @@ SPEC CHECKSUMS: React-microtasksnativemodule: 6c4ee39a36958c39c97b074d28f360246a335e84 react-native-background-timer: 007ff829f79644caf2ed013e22f0563560336f86 react-native-blob-util: ce2014444133bd568c054bf58eece8375ae5ef3c + react-native-cie: e0e6414cdca0fe8ec3fcc622725d6c81981b7bf9 react-native-config: e588441fd919c50e75a1ae023763f760b5e3adfe react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 react-native-document-picker: 1661822ea34f02dfbcc86fb8a2f9a9acf75f0c4d @@ -3953,6 +4062,7 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 ReactCodegen: 6c26f8c25d0b5ae66f86a1cce1777076ac8bcbd8 ReactCommon: 5f0e5c09a64a2717215dd84380e1a747810406f2 + ReactNativeART: b0ebceda8689ce026fff56b2f820664029480a4e ReactNativeExceptionHandler: 6a2aace92f300a745c8b04461b9a99edd1d26cd6 RNBluetoothStateManager: 929f132d0dacf65cb4767a11e2803e47fdda9e73 RNCalendarEvents: f90f73666b6bcbb3cc8a491ffbb5e48c0db3de37 @@ -3990,6 +4100,6 @@ SPEC CHECKSUMS: ZendeskSupportSDK: b512cfc74b6bf8490e589f02cf52e27ed4f2bebe ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5 -PODFILE CHECKSUM: 1f9574204d498a3102112ae9c995e9a34364870d +PODFILE CHECKSUM: 3b409a8b9ff423e715f5411526b26eca3cb6e2da COCOAPODS: 1.15.2 diff --git a/package.json b/package.json index 84d14777e9e..2b85eb805f5 100644 --- a/package.json +++ b/package.json @@ -95,6 +95,7 @@ "color": "^3.0.0", "date-fns": "^1.29.0", "eslint-plugin-react-native": "^4.0.0", + "expo": "^54.0.33", "fp-ts": "^2.12.1", "front-matter": "^4.0.2", "hastscript": "^7.0.2", diff --git a/yarn.lock b/yarn.lock index 81fa3289894..399e95e80f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,18 @@ __metadata: version: 6 cacheKey: 8 +"@0no-co/graphql.web@npm:^1.0.13, @0no-co/graphql.web@npm:^1.0.8": + version: 1.2.0 + resolution: "@0no-co/graphql.web@npm:1.2.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + peerDependenciesMeta: + graphql: + optional: true + checksum: 4d5a54b93e6024b7d476e94b991e4e4ebc4ecb97e4ce886f76889741f5e419b587bedc6a00488753069534d8ae3e4de2e901ad58506ba2f74eeb8642edccc4ca + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.2.0": version: 2.2.1 resolution: "@ampproject/remapping@npm:2.2.1" @@ -76,6 +88,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.20.0, @babel/code-frame@npm:^7.28.6, @babel/code-frame@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/code-frame@npm:7.29.0" + dependencies: + "@babel/helper-validator-identifier": ^7.28.5 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 39f5b303757e4d63bbff8133e251094cd4f952b46e3fa9febc7368d907583911d6a1eded6090876dc1feeff5cf6e134fb19b706f8d58d26c5402cd50e5e1aeb2 + languageName: node + linkType: hard + "@babel/code-frame@npm:^7.25.9": version: 7.25.9 resolution: "@babel/code-frame@npm:7.25.9" @@ -108,6 +131,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:~7.10.4": + version: 7.10.4 + resolution: "@babel/code-frame@npm:7.10.4" + dependencies: + "@babel/highlight": ^7.10.4 + checksum: feb4543c8a509fe30f0f6e8d7aa84f82b41148b963b826cd330e34986f649a85cb63b2f13dd4effdf434ac555d16f14940b8ea5f4433297c2f5ff85486ded019 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.7": version: 7.24.7 resolution: "@babel/compat-data@npm:7.24.7" @@ -136,6 +168,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.28.6": + version: 7.29.0 + resolution: "@babel/compat-data@npm:7.29.0" + checksum: ad19db279dfd06cbe91b505d03be00d603c6d3fcc141cfc14f4ace5c558193e9b6aae4788cb01fd209c4c850e52d73c8f3c247680e3c0d84fa17ab8b3d50c808 + languageName: node + linkType: hard + "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": version: 7.24.7 resolution: "@babel/core@npm:7.24.7" @@ -159,6 +198,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.20.0": + version: 7.29.0 + resolution: "@babel/core@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-compilation-targets": ^7.28.6 + "@babel/helper-module-transforms": ^7.28.6 + "@babel/helpers": ^7.28.6 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/traverse": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/remapping": ^2.3.5 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 85e1df6e213382c46dee27bcd07ed9202fa108a85bb74eb37be656308fd949349171ad2aa17cc84cf0720c908dc9ea6309d25e64d2a7fcdaa63721ce0c67c10b + languageName: node + linkType: hard + "@babel/core@npm:^7.21.3": version: 7.28.0 resolution: "@babel/core@npm:7.28.0" @@ -242,6 +304,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.5, @babel/generator@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/generator@npm:7.29.0" + dependencies: + "@babel/parser": ^7.29.0 + "@babel/types": ^7.29.0 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 + jsesc: ^3.0.2 + checksum: 7d338a9278a401764605fac87f3e223c70b50be15ebd6cf856249db9554133a620cf841ff62e4dfcc46ca59f2c16b62a2ce12891d48e47ed987f19bfbfd5469e + languageName: node + linkType: hard + "@babel/generator@npm:^7.24.7, @babel/generator@npm:^7.7.2": version: 7.24.7 resolution: "@babel/generator@npm:7.24.7" @@ -323,6 +398,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-annotate-as-pure@npm:^7.27.1, @babel/helper-annotate-as-pure@npm:^7.27.3": + version: 7.27.3 + resolution: "@babel/helper-annotate-as-pure@npm:7.27.3" + dependencies: + "@babel/types": ^7.27.3 + checksum: 63863a5c936ef82b546ca289c9d1b18fabfc24da5c4ee382830b124e2e79b68d626207febc8d4bffc720f50b2ee65691d7d12cc0308679dee2cd6bdc926b7190 + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-compilation-targets@npm:7.24.7" @@ -375,6 +459,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-compilation-targets@npm:7.28.6" + dependencies: + "@babel/compat-data": ^7.28.6 + "@babel/helper-validator-option": ^7.27.1 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 8151e36b74eb1c5e414fe945c189436421f7bfa011884de5be3dd7fd77f12f1f733ff7c982581dfa0a49d8af724450243c2409427114b4a6cfeb8333259d001c + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-create-class-features-plugin@npm:7.24.7" @@ -411,6 +508,23 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-class-features-plugin@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-create-class-features-plugin@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.27.3 + "@babel/helper-member-expression-to-functions": ^7.28.5 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/helper-replace-supers": ^7.28.6 + "@babel/helper-skip-transparent-expression-wrappers": ^7.27.1 + "@babel/traverse": ^7.28.6 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f886ab302a83f8e410384aa635806b22374897fd9e3387c737ab9d91d1214bf9f7e57ae92619bd25dea63c9c0a49b25b44eb807873332e0eb9549219adc73639 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.24.7" @@ -522,6 +636,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-member-expression-to-functions@npm:7.28.5" + dependencies: + "@babel/traverse": ^7.28.5 + "@babel/types": ^7.28.5 + checksum: 447d385233bae2eea713df1785f819b5a5ca272950740da123c42d23f491045120f0fbbb5609c091f7a9bbd40f289a442846dde0cb1bf0c59440fa093690cf7c + languageName: node + linkType: hard + "@babel/helper-module-imports@npm:^7.14.5, @babel/helper-module-imports@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-module-imports@npm:7.24.7" @@ -552,6 +676,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-imports@npm:7.28.6" + dependencies: + "@babel/traverse": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 437513aa029898b588a38f7991d7656c539b22f595207d85d0c407240c9e3f2aff8b9d0d7115fdedc91e7fdce4465100549a052024e2fba6a810bcbb7584296b + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-module-transforms@npm:7.24.7" @@ -593,6 +727,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-module-transforms@npm:7.28.6" + dependencies: + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-validator-identifier": ^7.28.5 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 522f7d1d08b5e2ccd4ec912aca879bd1506af78d1fb30f46e3e6b4bb69c6ae6ab4e379a879723844230d27dc6d04a55b03f5215cd3141b7a2b40bb4a02f71a9f + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" @@ -611,6 +758,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-optimise-call-expression@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-optimise-call-expression@npm:7.27.1" + dependencies: + "@babel/types": ^7.27.1 + checksum: 0fb7ee824a384529d6b74f8a58279f9b56bfe3cce332168067dddeab2552d8eeb56dc8eaf86c04a3a09166a316cb92dfc79c4c623cd034ad4c563952c98b464f + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.24.7 resolution: "@babel/helper-plugin-utils@npm:7.24.7" @@ -639,6 +795,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-plugin-utils@npm:7.28.6" + checksum: a0b4caab5e2180b215faa4d141ceac9e82fad9d446b8023eaeb8d82a6e62024726675b07fe8e616dd12f34e2bb59747e8d57aa8adab3e0717d1b8d691b118379 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-remap-async-to-generator@npm:7.24.7" @@ -691,6 +854,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helper-replace-supers@npm:7.28.6" + dependencies: + "@babel/helper-member-expression-to-functions": ^7.28.5 + "@babel/helper-optimise-call-expression": ^7.27.1 + "@babel/traverse": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa6530a52010883b6be88465e3b9e789509786a40203650a23a51c315f7442b196e5925fb8e2d66d1e3dc2c604cdc817bd8c5c170dbb322ab5ebc7486fd8a022 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-simple-access@npm:7.24.7" @@ -721,6 +897,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.27.1" + dependencies: + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: 4f380c5d0e0769fa6942a468b0c2d7c8f0c438f941aaa88f785f8752c103631d0904c7b4e76207a3b0e6588b2dec376595370d92ca8f8f1b422c14a69aa146d4 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-split-export-declaration@npm:7.24.7" @@ -758,6 +944,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.24.7": version: 7.24.7 resolution: "@babel/helper-validator-option@npm:7.24.7" @@ -842,19 +1035,17 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" +"@babel/helpers@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/helpers@npm:7.28.6" dependencies: - "@babel/helper-validator-identifier": ^7.24.7 - chalk: ^2.4.2 - js-tokens: ^4.0.0 - picocolors: ^1.0.0 - checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + "@babel/template": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 4f3d555ec20dde40a2fcb244c86bfd9ec007b57ec9b30a9d04334c1ea2c1670bb82c151024124e1ab27ccf0b1f5ad30167633457a7c9ffbf4064fad2643f12fc languageName: node linkType: hard -"@babel/highlight@npm:^7.25.9": +"@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.25.9": version: 7.25.9 resolution: "@babel/highlight@npm:7.25.9" dependencies: @@ -866,6 +1057,18 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.24.7": + version: 7.24.7 + resolution: "@babel/highlight@npm:7.24.7" + dependencies: + "@babel/helper-validator-identifier": ^7.24.7 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + picocolors: ^1.0.0 + checksum: 5cd3a89f143671c4ac129960024ba678b669e6fc673ce078030f5175002d1d3d52bc10b22c5b916a6faf644b5028e9a4bd2bb264d053d9b05b6a98690f1d46f1 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.7": version: 7.24.7 resolution: "@babel/parser@npm:7.24.7" @@ -919,6 +1122,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/parser@npm:7.29.0" + dependencies: + "@babel/types": ^7.29.0 + bin: + parser: ./bin/babel-parser.js + checksum: b4a1bd3cf46712e439286db9a4105dfa741b5a7720fa1f38f33719cf4f1da9df9fc5b6686128890bd6a62debba287d8d472af153dd629fd4a0a44fe55413cd68 + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" @@ -978,6 +1192,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-decorators@npm:^7.12.9": + version: 7.29.0 + resolution: "@babel/plugin-proposal-decorators@npm:7.29.0" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/plugin-syntax-decorators": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e2aa792078a50e49b1fb2c0759863d4dc688aff19441b7f624361bde3f220b7dee7ab0ea73928e0e67ca21c89557c847ffe9f6e2c4bdcc9fbf066c6b5b372c54 + languageName: node + linkType: hard + "@babel/plugin-proposal-export-default-from@npm:^7.24.7": version: 7.25.9 resolution: "@babel/plugin-proposal-export-default-from@npm:7.25.9" @@ -1031,6 +1258,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-decorators@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-decorators@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f59a229e80398663c99519ab0785df389a802aedd6e0cfb6d37fa99a5802c22b270ff6273db7cf94cd8fcb9024feba11dcdbb0e907c5624e02c7fe5da056a91f + languageName: node + linkType: hard + "@babel/plugin-syntax-dynamic-import@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" @@ -1141,6 +1379,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/plugin-syntax-jsx@npm:7.28.6" + dependencies: + "@babel/helper-plugin-utils": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 572e38f5c1bb4b8124300e7e3dd13e82ae84a21f90d3f0786c98cd05e63c78ca1f32d1cfe462dfbaf5e7d5102fa7cd8fd741dfe4f3afc2e01a3b2877dcc8c866 + languageName: node + linkType: hard + "@babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.24.7 resolution: "@babel/plugin-syntax-jsx@npm:7.24.7" @@ -1381,6 +1630,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-class-static-block@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-class-static-block@npm:7.28.6" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 + peerDependencies: + "@babel/core": ^7.12.0 + checksum: 3db326156f73a0c0d1e2ea4d73e082b9ace2f6a9c965db1c2e51f3a186751b8b91bafb184d05e046bf970b50ecfde1f74862dd895f9a5ea0fad328369d74cfc4 + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.0.0-0, @babel/plugin-transform-classes@npm:^7.25.4, @babel/plugin-transform-classes@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-classes@npm:7.25.9" @@ -1930,6 +2191,28 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-display-name@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/plugin-transform-react-display-name@npm:7.28.0" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 268b1a9192974439d17949e170b01cac2a2aa003c844e2fe3b8361146f42f66487178cffdfa8ce862aa9e6c814bc37f879a70300cb3f067815d15fa6aad04e6d + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-development@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-development@npm:7.27.1" + dependencies: + "@babel/plugin-transform-react-jsx": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b88865d5b8c018992f2332da939faa15c4d4a864c9435a5937beaff3fe43781432cc42e0a5d5631098e0bd4066fc33f5fa72203b388b074c3545fe7aaa21e474 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-self@npm:^7.24.7": version: 7.25.9 resolution: "@babel/plugin-transform-react-jsx-self@npm:7.25.9" @@ -1967,6 +2250,33 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx@npm:^7.27.1": + version: 7.28.6 + resolution: "@babel/plugin-transform-react-jsx@npm:7.28.6" + dependencies: + "@babel/helper-annotate-as-pure": ^7.27.3 + "@babel/helper-module-imports": ^7.28.6 + "@babel/helper-plugin-utils": ^7.28.6 + "@babel/plugin-syntax-jsx": ^7.28.6 + "@babel/types": ^7.28.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e7d093b5ed6c06563e801d44d1212b451445d7600756efd7b8b8e6db4585c27fa8145176dcb3350968c59381af6c566dae9b6dc97ec15d2837493b238904d1c2 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-pure-annotations@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.27.1" + dependencies: + "@babel/helper-annotate-as-pure": ^7.27.1 + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a6f591c5e85a1ab0685d4a25afe591fe8d11dc0b73c677cf9560ff8d540d036a1cce9efcb729fc9092def4d854dc304ffdc063a89a9247900b69c516bf971a4c + languageName: node + linkType: hard + "@babel/plugin-transform-regenerator@npm:^7.18.6, @babel/plugin-transform-regenerator@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-regenerator@npm:7.25.9" @@ -2297,6 +2607,22 @@ __metadata: languageName: node linkType: hard +"@babel/preset-react@npm:^7.22.15": + version: 7.28.5 + resolution: "@babel/preset-react@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-transform-react-display-name": ^7.28.0 + "@babel/plugin-transform-react-jsx": ^7.27.1 + "@babel/plugin-transform-react-jsx-development": ^7.27.1 + "@babel/plugin-transform-react-pure-annotations": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 13bc1fe4dde0a29d00323e46749e5beb457844507cb3afa2fefbd85d283c2d4836f9e4a780be735de58a44c505870476dc2838f1f8faf9d6f056481e65f1a0fb + languageName: node + linkType: hard + "@babel/preset-typescript@npm:^7.16.7": version: 7.27.1 resolution: "@babel/preset-typescript@npm:7.27.1" @@ -2312,6 +2638,21 @@ __metadata: languageName: node linkType: hard +"@babel/preset-typescript@npm:^7.23.0": + version: 7.28.5 + resolution: "@babel/preset-typescript@npm:7.28.5" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + "@babel/helper-validator-option": ^7.27.1 + "@babel/plugin-syntax-jsx": ^7.27.1 + "@babel/plugin-transform-modules-commonjs": ^7.27.1 + "@babel/plugin-transform-typescript": ^7.28.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 22f889835d9db1e627846e71ca2f02e2d24e2eb9ebcf9845b3b1d37bd3a53787967bafabbbcb342f06aaf7627399a7102ba6ca18f9a0e17066c865d680d2ceb9 + languageName: node + linkType: hard + "@babel/regjsgen@npm:^0.8.0": version: 0.8.0 resolution: "@babel/regjsgen@npm:0.8.0" @@ -2328,6 +2669,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.20.0": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 42d8a868c2fc2e9a77927945a6daa7ec03c7ea49e611e0d15442933cdabb12f20e3a6849c729259076c10a4247adec229331d1f94c2d0073ea0979d7853e29fd + languageName: node + linkType: hard + "@babel/runtime@npm:^7.27.6": version: 7.28.4 resolution: "@babel/runtime@npm:7.28.4" @@ -2379,6 +2727,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.28.6": + version: 7.28.6 + resolution: "@babel/template@npm:7.28.6" + dependencies: + "@babel/code-frame": ^7.28.6 + "@babel/parser": ^7.28.6 + "@babel/types": ^7.28.6 + checksum: 8ab6383053e226025d9491a6e795293f2140482d14f60c1244bece6bf53610ed1e251d5e164de66adab765629881c7d9416e1e540c716541d2fd0f8f36a013d7 + languageName: node + linkType: hard + "@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.8": version: 7.27.0 resolution: "@babel/traverse@npm:7.27.0" @@ -2442,6 +2801,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.28.5, @babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": + version: 7.29.0 + resolution: "@babel/traverse@npm:7.29.0" + dependencies: + "@babel/code-frame": ^7.29.0 + "@babel/generator": ^7.29.0 + "@babel/helper-globals": ^7.28.0 + "@babel/parser": ^7.29.0 + "@babel/template": ^7.28.6 + "@babel/types": ^7.29.0 + debug: ^4.3.1 + checksum: fbb5085aa525b5d4ecd9fe2f5885d88413fff6ad9c0fac244c37f96069b6d3af9ce825750cd16af1d97d26fa3d354b38dbbdb5f31430e0d99ed89660ab65430e + languageName: node + linkType: hard + "@babel/types@npm:^7.23.6": version: 7.26.0 resolution: "@babel/types@npm:7.26.0" @@ -2517,6 +2891,404 @@ __metadata: languageName: node linkType: hard +"@expo/cli@npm:54.0.23": + version: 54.0.23 + resolution: "@expo/cli@npm:54.0.23" + dependencies: + "@0no-co/graphql.web": ^1.0.8 + "@expo/code-signing-certificates": ^0.0.6 + "@expo/config": ~12.0.13 + "@expo/config-plugins": ~54.0.4 + "@expo/devcert": ^1.2.1 + "@expo/env": ~2.0.8 + "@expo/image-utils": ^0.8.8 + "@expo/json-file": ^10.0.8 + "@expo/metro": ~54.2.0 + "@expo/metro-config": ~54.0.14 + "@expo/osascript": ^2.3.8 + "@expo/package-manager": ^1.9.10 + "@expo/plist": ^0.4.8 + "@expo/prebuild-config": ^54.0.8 + "@expo/schema-utils": ^0.1.8 + "@expo/spawn-async": ^1.7.2 + "@expo/ws-tunnel": ^1.0.1 + "@expo/xcpretty": ^4.3.0 + "@react-native/dev-middleware": 0.81.5 + "@urql/core": ^5.0.6 + "@urql/exchange-retry": ^1.3.0 + accepts: ^1.3.8 + arg: ^5.0.2 + better-opn: ~3.0.2 + bplist-creator: 0.1.0 + bplist-parser: ^0.3.1 + chalk: ^4.0.0 + ci-info: ^3.3.0 + compression: ^1.7.4 + connect: ^3.7.0 + debug: ^4.3.4 + env-editor: ^0.4.1 + expo-server: ^1.0.5 + freeport-async: ^2.0.0 + getenv: ^2.0.0 + glob: ^13.0.0 + lan-network: ^0.1.6 + minimatch: ^9.0.0 + node-forge: ^1.3.3 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + picomatch: ^3.0.1 + pretty-bytes: ^5.6.0 + pretty-format: ^29.7.0 + progress: ^2.0.3 + prompts: ^2.3.2 + qrcode-terminal: 0.11.0 + require-from-string: ^2.0.2 + requireg: ^0.2.2 + resolve: ^1.22.2 + resolve-from: ^5.0.0 + resolve.exports: ^2.0.3 + semver: ^7.6.0 + send: ^0.19.0 + slugify: ^1.3.4 + source-map-support: ~0.5.21 + stacktrace-parser: ^0.1.10 + structured-headers: ^0.4.1 + tar: ^7.5.2 + terminal-link: ^2.1.1 + undici: ^6.18.2 + wrap-ansi: ^7.0.0 + ws: ^8.12.1 + peerDependencies: + expo: "*" + expo-router: "*" + react-native: "*" + peerDependenciesMeta: + expo-router: + optional: true + react-native: + optional: true + bin: + expo-internal: build/bin/cli + checksum: 0a9fe9219f15921431abe024bfe85813f1ddea87e62d28d37683be5f532927007975b5a9654c62269a0cd516277a829c6ac416d97d8baaa306c717f43740366f + languageName: node + linkType: hard + +"@expo/code-signing-certificates@npm:^0.0.6": + version: 0.0.6 + resolution: "@expo/code-signing-certificates@npm:0.0.6" + dependencies: + node-forge: ^1.3.3 + checksum: 40f6cc39fbef48213b8d946720c49b897d2021cfd4276eba217181861f16a047bbd60c237c8af1596186ba0eeee267150cfe607bee3a6d237ce41617bc29b82d + languageName: node + linkType: hard + +"@expo/config-plugins@npm:~54.0.4": + version: 54.0.4 + resolution: "@expo/config-plugins@npm:54.0.4" + dependencies: + "@expo/config-types": ^54.0.10 + "@expo/json-file": ~10.0.8 + "@expo/plist": ^0.4.8 + "@expo/sdk-runtime-versions": ^1.0.0 + chalk: ^4.1.2 + debug: ^4.3.5 + getenv: ^2.0.0 + glob: ^13.0.0 + resolve-from: ^5.0.0 + semver: ^7.5.4 + slash: ^3.0.0 + slugify: ^1.6.6 + xcode: ^3.0.1 + xml2js: 0.6.0 + checksum: 31422e6562aa99ceebb356ce8beaeaa7a234e4cb2fa6fc1defd08762fc9e22484b76dcab3070f00846653241939748697bd2be376d499b3466eb2b067c97852b + languageName: node + linkType: hard + +"@expo/config-types@npm:^54.0.10": + version: 54.0.10 + resolution: "@expo/config-types@npm:54.0.10" + checksum: 123e59d498584371257c9ac5606ba2486215aeea88e0e08f87c6c5666231198d986ac261d0a05d95e4fb3345f919aad01cfadbef8961b9b9d9e3ccc6f406fc6d + languageName: node + linkType: hard + +"@expo/config@npm:~12.0.13": + version: 12.0.13 + resolution: "@expo/config@npm:12.0.13" + dependencies: + "@babel/code-frame": ~7.10.4 + "@expo/config-plugins": ~54.0.4 + "@expo/config-types": ^54.0.10 + "@expo/json-file": ^10.0.8 + deepmerge: ^4.3.1 + getenv: ^2.0.0 + glob: ^13.0.0 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + resolve-workspace-root: ^2.0.0 + semver: ^7.6.0 + slugify: ^1.3.4 + sucrase: ~3.35.1 + checksum: 63ff50b5924c49f44cc8161deda04cf9455b8860992b645c7e8f1f13c4fc989ea014f7a847033d1306e72cc41b9ab1fd59d35bf01ee32f51bf08f7ccf000c61b + languageName: node + linkType: hard + +"@expo/devcert@npm:^1.2.1": + version: 1.2.1 + resolution: "@expo/devcert@npm:1.2.1" + dependencies: + "@expo/sudo-prompt": ^9.3.1 + debug: ^3.1.0 + checksum: 62a21756edcf5bb6ad825affb65f5c5685ef795fb41128336bd0490897f88ef16099938a4d5690a60b576a887c00659214cea76202f73572867ed5ef7254cb98 + languageName: node + linkType: hard + +"@expo/devtools@npm:0.1.8": + version: 0.1.8 + resolution: "@expo/devtools@npm:0.1.8" + dependencies: + chalk: ^4.1.2 + peerDependencies: + react: "*" + react-native: "*" + peerDependenciesMeta: + react: + optional: true + react-native: + optional: true + checksum: 52684caa03c8cef56c42565f8e6b1b192ad0b01a24b3950009a07e58bf87ceba0c64010950358e11cb182e8cf447dfcc739336f8d4553c137c09b755e62b53c6 + languageName: node + linkType: hard + +"@expo/env@npm:~2.0.8": + version: 2.0.11 + resolution: "@expo/env@npm:2.0.11" + dependencies: + chalk: ^4.0.0 + debug: ^4.3.4 + dotenv: ~16.4.5 + dotenv-expand: ~11.0.6 + getenv: ^2.0.0 + checksum: 64d3df63ac737a57d0451fb1de51f86aeb4e43bee7828b2397cfbeff38d6256244a5c10bc4009382c4cfd134da8b5afcd7432fac93d8c3518e488dd5440099e5 + languageName: node + linkType: hard + +"@expo/fingerprint@npm:0.15.4": + version: 0.15.4 + resolution: "@expo/fingerprint@npm:0.15.4" + dependencies: + "@expo/spawn-async": ^1.7.2 + arg: ^5.0.2 + chalk: ^4.1.2 + debug: ^4.3.4 + getenv: ^2.0.0 + glob: ^13.0.0 + ignore: ^5.3.1 + minimatch: ^9.0.0 + p-limit: ^3.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + bin: + fingerprint: bin/cli.js + checksum: f9f648e46b70f2f5397d7e6d98e76e070d3986eeefbf177078d78585bc3f92b8d3921aa08998a838d62e8a6dbed24fb23f2187edbddac901769c50bedf1e5a06 + languageName: node + linkType: hard + +"@expo/image-utils@npm:^0.8.8": + version: 0.8.12 + resolution: "@expo/image-utils@npm:0.8.12" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.0.0 + getenv: ^2.0.0 + jimp-compact: 0.16.1 + parse-png: ^2.1.0 + resolve-from: ^5.0.0 + semver: ^7.6.0 + checksum: 6833aac7c369c9df18a84c398d81e8d4f89c2266fe44476ab3fe0d45596ea1d1c8c03089e3af4d57b3985440fd929d8eed860495c9f35e505b931fa06e929771 + languageName: node + linkType: hard + +"@expo/json-file@npm:^10.0.12, @expo/json-file@npm:^10.0.8, @expo/json-file@npm:~10.0.8": + version: 10.0.12 + resolution: "@expo/json-file@npm:10.0.12" + dependencies: + "@babel/code-frame": ^7.20.0 + json5: ^2.2.3 + checksum: dedf99415477c63efa37f5af923033a363e3ecf539831701d0d111a316db7fea6c210d4b3cb1e4e854ce5dfd40f02c3c1156acab38288e78e35555a12a06c1de + languageName: node + linkType: hard + +"@expo/metro-config@npm:54.0.14, @expo/metro-config@npm:~54.0.14": + version: 54.0.14 + resolution: "@expo/metro-config@npm:54.0.14" + dependencies: + "@babel/code-frame": ^7.20.0 + "@babel/core": ^7.20.0 + "@babel/generator": ^7.20.5 + "@expo/config": ~12.0.13 + "@expo/env": ~2.0.8 + "@expo/json-file": ~10.0.8 + "@expo/metro": ~54.2.0 + "@expo/spawn-async": ^1.7.2 + browserslist: ^4.25.0 + chalk: ^4.1.0 + debug: ^4.3.2 + dotenv: ~16.4.5 + dotenv-expand: ~11.0.6 + getenv: ^2.0.0 + glob: ^13.0.0 + hermes-parser: ^0.29.1 + jsc-safe-url: ^0.2.4 + lightningcss: ^1.30.1 + minimatch: ^9.0.0 + postcss: ~8.4.32 + resolve-from: ^5.0.0 + peerDependencies: + expo: "*" + peerDependenciesMeta: + expo: + optional: true + checksum: 5b1c167f638aa4fd2623424cc15c349ecb5a9d2b630065ffff033aae87056eae32e3ea1897321ce2a0d094f863dd4b1816c45cb9253257f4f1a03e5e67fa1c25 + languageName: node + linkType: hard + +"@expo/metro@npm:~54.2.0": + version: 54.2.0 + resolution: "@expo/metro@npm:54.2.0" + dependencies: + metro: 0.83.3 + metro-babel-transformer: 0.83.3 + metro-cache: 0.83.3 + metro-cache-key: 0.83.3 + metro-config: 0.83.3 + metro-core: 0.83.3 + metro-file-map: 0.83.3 + metro-minify-terser: 0.83.3 + metro-resolver: 0.83.3 + metro-runtime: 0.83.3 + metro-source-map: 0.83.3 + metro-symbolicate: 0.83.3 + metro-transform-plugins: 0.83.3 + metro-transform-worker: 0.83.3 + checksum: c9898063a316e78a89fcfd343b2c4036f9b33abd78052a1dba55ca0d2400f94a881805c7da83cfa31429398c657b2954da51c44c1b684e77c562b80dfaa28350 + languageName: node + linkType: hard + +"@expo/osascript@npm:^2.3.8": + version: 2.4.2 + resolution: "@expo/osascript@npm:2.4.2" + dependencies: + "@expo/spawn-async": ^1.7.2 + checksum: 5609b926bd68120b6a01edea0c7b14d4fa9fcd454bbcb49b89988f7acdb540f3b9c1c133acbbd3f9cd6a6937ce2a950c9cdde2a98ec8769d8a8b1481666a67d9 + languageName: node + linkType: hard + +"@expo/package-manager@npm:^1.9.10": + version: 1.10.3 + resolution: "@expo/package-manager@npm:1.10.3" + dependencies: + "@expo/json-file": ^10.0.12 + "@expo/spawn-async": ^1.7.2 + chalk: ^4.0.0 + npm-package-arg: ^11.0.0 + ora: ^3.4.0 + resolve-workspace-root: ^2.0.0 + checksum: de43963493dcb9a62a41e6ab1f00adde55aab849f0fe19853ab3f7f2041e52bc8a3851f1f79f5c233da10340f64757cf56f56a1ccb0321750a00e0912f5f9dba + languageName: node + linkType: hard + +"@expo/plist@npm:^0.4.8": + version: 0.4.8 + resolution: "@expo/plist@npm:0.4.8" + dependencies: + "@xmldom/xmldom": ^0.8.8 + base64-js: ^1.2.3 + xmlbuilder: ^15.1.1 + checksum: 575ff6067d7fddef43b5222310f8f8beb8d7a2184291e21b2fe58cd967a67052921ce2c4f25d72ebabae9fad681859a65222004000930ae24c57b366114ce0ed + languageName: node + linkType: hard + +"@expo/prebuild-config@npm:^54.0.8": + version: 54.0.8 + resolution: "@expo/prebuild-config@npm:54.0.8" + dependencies: + "@expo/config": ~12.0.13 + "@expo/config-plugins": ~54.0.4 + "@expo/config-types": ^54.0.10 + "@expo/image-utils": ^0.8.8 + "@expo/json-file": ^10.0.8 + "@react-native/normalize-colors": 0.81.5 + debug: ^4.3.1 + resolve-from: ^5.0.0 + semver: ^7.6.0 + xml2js: 0.6.0 + peerDependencies: + expo: "*" + checksum: 35b93da7091f669ab5981e5ed44a5df8db20be748ab881214be737f2a795a39f490c5a5142b76b2be0a82ba3b04e84adf5a2fc621be8c45ea273eda675fa9eef + languageName: node + linkType: hard + +"@expo/schema-utils@npm:^0.1.8": + version: 0.1.8 + resolution: "@expo/schema-utils@npm:0.1.8" + checksum: e8fc956dbeee3817c23bccc4d3e0817adc737ad10678ad5e670a067d5df30009ccd3af0c6d7958ac2fe4441d58a90e6edfcf88ab8872514c850dc386908d7117 + languageName: node + linkType: hard + +"@expo/sdk-runtime-versions@npm:^1.0.0": + version: 1.0.0 + resolution: "@expo/sdk-runtime-versions@npm:1.0.0" + checksum: 0942d5a356f590e8dc795761456cc48b3e2d6a38ad2a02d6774efcdc5a70424e05623b4e3e5d2fec0cdc30f40dde05c14391c781607eed3971bf8676518bfd9d + languageName: node + linkType: hard + +"@expo/spawn-async@npm:^1.7.2": + version: 1.7.2 + resolution: "@expo/spawn-async@npm:1.7.2" + dependencies: + cross-spawn: ^7.0.3 + checksum: d99e5ff6d303ec9b0105f97c4fa6c65bca526c7d4d0987997c35cc745fa8224adf009942d01808192ebb9fa30619a53316641958631e85cf17b773d9eeda2597 + languageName: node + linkType: hard + +"@expo/sudo-prompt@npm:^9.3.1": + version: 9.3.2 + resolution: "@expo/sudo-prompt@npm:9.3.2" + checksum: 5db5385d7ecaadee7ef768c56ed882ae1b266e4c390325f36967382edefaf6cc2e7845b12b35a91d3ad83b05868548acefe8a015aef3a47d91a2cfc5a0a3cc84 + languageName: node + linkType: hard + +"@expo/vector-icons@npm:^15.0.3": + version: 15.0.3 + resolution: "@expo/vector-icons@npm:15.0.3" + peerDependencies: + expo-font: ">=14.0.4" + react: "*" + react-native: "*" + checksum: 6b3a661f714e886a74aa8af7f4e1a18c1e505e98aae44f4a2dd3e6947fb3ccb476df3c2dd8930a79c902b73b7ba40c6af21132b98384c4c3b52dbf8b4057619b + languageName: node + linkType: hard + +"@expo/ws-tunnel@npm:^1.0.1": + version: 1.0.6 + resolution: "@expo/ws-tunnel@npm:1.0.6" + checksum: 0db9d5b94cfedfad7784cfd876bafbf9575d0cb00bb537f57954fa8fe6d7151f95b2fa0aa6071b7cc7ab49e3a68bdf647acbc323d7d6b23f07df21f97485ee4f + languageName: node + linkType: hard + +"@expo/xcpretty@npm:^4.3.0": + version: 4.4.0 + resolution: "@expo/xcpretty@npm:4.4.0" + dependencies: + "@babel/code-frame": ^7.20.0 + chalk: ^4.1.0 + js-yaml: ^4.1.0 + bin: + excpretty: build/cli.js + checksum: 79a11160956e1eea2222f879dc2e76662deca1a107685cce4525635c7953f715b5db177bfc085a1951d7a69b5713461a5a64c892cee03e759d38df20d52239db + languageName: node + linkType: hard + "@gorhom/bottom-sheet@npm:5.1.2": version: 5.1.2 resolution: "@gorhom/bottom-sheet@npm:5.1.2" @@ -2707,6 +3479,22 @@ __metadata: languageName: node linkType: hard +"@isaacs/balanced-match@npm:^4.0.1": + version: 4.0.1 + resolution: "@isaacs/balanced-match@npm:4.0.1" + checksum: 102fbc6d2c0d5edf8f6dbf2b3feb21695a21bc850f11bc47c4f06aa83bd8884fde3fe9d6d797d619901d96865fdcb4569ac2a54c937992c48885c5e3d9967fe8 + languageName: node + linkType: hard + +"@isaacs/brace-expansion@npm:^5.0.1": + version: 5.0.1 + resolution: "@isaacs/brace-expansion@npm:5.0.1" + dependencies: + "@isaacs/balanced-match": ^4.0.1 + checksum: 21f8192f022c320f7acf899730feb419b1a5f4ccc741481ef8f4b3111e97a41c06e5783871bb240da2e87de909c7fc5b0d07f73818db521fee06541c086ea351 + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -2721,6 +3509,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: ^7.0.4 + checksum: 5d36d289960e886484362d9eb6a51d1ea28baed5f5d0140bbe62b99bac52eaf06cc01c2bc0d3575977962f84f6b2c4387b043ee632216643d4787b0999465bf2 + languageName: node + linkType: hard + "@isaacs/ttlcache@npm:^1.4.1": version: 1.4.1 resolution: "@isaacs/ttlcache@npm:1.4.1" @@ -3026,6 +3823,26 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": ^1.5.0 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: f2105acefc433337145caa3c84bba286de954f61c0bc46279bbd85a9e6a02871089717fa060413cfb6a9d44189fe8313b2d1cabf3a2eb3284d208fd5f75c54ff + languageName: node + linkType: hard + +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: 4a66a7397c3dc9c6b5c14a0024b1f98c5e1d90a0dbc1e5955b5038f2db339904df2a0ee8a66559fafb4fc23ff33700a2639fd40bbdd2e9e82b58b3bdf83738e3 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.1 resolution: "@jridgewell/resolve-uri@npm:3.1.1" @@ -5548,6 +6365,35 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.3.0": + version: 1.3.0 + resolution: "@ungap/structured-clone@npm:1.3.0" + checksum: 64ed518f49c2b31f5b50f8570a1e37bde3b62f2460042c50f132430b2d869c4a6586f13aa33a58a4722715b8158c68cae2827389d6752ac54da2893c83e480fc + languageName: node + linkType: hard + +"@urql/core@npm:^5.0.6, @urql/core@npm:^5.1.2": + version: 5.2.0 + resolution: "@urql/core@npm:5.2.0" + dependencies: + "@0no-co/graphql.web": ^1.0.13 + wonka: ^6.3.2 + checksum: 89c1959abd9230ba06ed5dc4cc5ea6585101c4b0c12894ddbdd1ec36d76b70799b819b999cbcaf154b6f9903eb6c2ba8eef6dff447bc5c9c1870878748868e85 + languageName: node + linkType: hard + +"@urql/exchange-retry@npm:^1.3.0": + version: 1.3.2 + resolution: "@urql/exchange-retry@npm:1.3.2" + dependencies: + "@urql/core": ^5.1.2 + wonka: ^6.3.2 + peerDependencies: + "@urql/core": ^5.0.0 + checksum: 57aa6dc47d5869aa45580236fa1ab85487886dd7bfef68e2e4271980c6a10332db1f8e8d750694e89f29ad94f7a650d00ef1a441b739215483b9a3f776edf45f + languageName: node + linkType: hard + "@vscode/sudo-prompt@npm:^9.0.0": version: 9.3.1 resolution: "@vscode/sudo-prompt@npm:9.3.1" @@ -5634,7 +6480,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.7, accepts@npm:~1.3.5, accepts@npm:~1.3.7, accepts@npm:~1.3.8": +"accepts@npm:^1.3.7, accepts@npm:^1.3.8, accepts@npm:~1.3.5, accepts@npm:~1.3.7, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -5835,6 +6681,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + "anymatch@npm:^3.0.3": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -5864,6 +6717,13 @@ __metadata: languageName: node linkType: hard +"arg@npm:^5.0.2": + version: 5.0.2 + resolution: "arg@npm:5.0.2" + checksum: 6c69ada1a9943d332d9e5382393e897c500908d91d5cb735a01120d5f71daf1b339b7b8980cbeaba8fd1afc68e658a739746179e4315a26e8a28951ff9930078 + languageName: node + linkType: hard + "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" @@ -6386,6 +7246,22 @@ __metadata: languageName: node linkType: hard +"babel-plugin-react-compiler@npm:^1.0.0": + version: 1.0.0 + resolution: "babel-plugin-react-compiler@npm:1.0.0" + dependencies: + "@babel/types": ^7.26.0 + checksum: 4c5c6c209a27477b7af8ce2361f3e5ddbc1ef59ebac5fc9d85cf91c3921752c19ac814bb7f98e7f55084db3cb585fc966aa05191018fa70e4444f2f4a980fff2 + languageName: node + linkType: hard + +"babel-plugin-react-native-web@npm:~0.21.0": + version: 0.21.2 + resolution: "babel-plugin-react-native-web@npm:0.21.2" + checksum: ad02ffe67ab8368530f2b792663bd2367f8f3d8c9fd1bcd7e3f723f850aca20d98244fc874037586280a21543ace82edb6afd470f0a2c6181e3afd5fc6a78af1 + languageName: node + linkType: hard + "babel-plugin-react-transform@npm:^3.0.0": version: 3.0.0 resolution: "babel-plugin-react-transform@npm:3.0.0" @@ -6430,7 +7306,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-syntax-hermes-parser@npm:0.29.1": +"babel-plugin-syntax-hermes-parser@npm:0.29.1, babel-plugin-syntax-hermes-parser@npm:^0.29.1": version: 0.29.1 resolution: "babel-plugin-syntax-hermes-parser@npm:0.29.1" dependencies: @@ -6733,6 +7609,45 @@ __metadata: languageName: node linkType: hard +"babel-preset-expo@npm:~54.0.10": + version: 54.0.10 + resolution: "babel-preset-expo@npm:54.0.10" + dependencies: + "@babel/helper-module-imports": ^7.25.9 + "@babel/plugin-proposal-decorators": ^7.12.9 + "@babel/plugin-proposal-export-default-from": ^7.24.7 + "@babel/plugin-syntax-export-default-from": ^7.24.7 + "@babel/plugin-transform-class-static-block": ^7.27.1 + "@babel/plugin-transform-export-namespace-from": ^7.25.9 + "@babel/plugin-transform-flow-strip-types": ^7.25.2 + "@babel/plugin-transform-modules-commonjs": ^7.24.8 + "@babel/plugin-transform-object-rest-spread": ^7.24.7 + "@babel/plugin-transform-parameters": ^7.24.7 + "@babel/plugin-transform-private-methods": ^7.24.7 + "@babel/plugin-transform-private-property-in-object": ^7.24.7 + "@babel/plugin-transform-runtime": ^7.24.7 + "@babel/preset-react": ^7.22.15 + "@babel/preset-typescript": ^7.23.0 + "@react-native/babel-preset": 0.81.5 + babel-plugin-react-compiler: ^1.0.0 + babel-plugin-react-native-web: ~0.21.0 + babel-plugin-syntax-hermes-parser: ^0.29.1 + babel-plugin-transform-flow-enums: ^0.0.2 + debug: ^4.3.4 + resolve-from: ^5.0.0 + peerDependencies: + "@babel/runtime": ^7.20.0 + expo: "*" + react-refresh: ">=0.14.0 <1.0.0" + peerDependenciesMeta: + "@babel/runtime": + optional: true + expo: + optional: true + checksum: 96044a383445829ea5b3ac030166e308a41b5b70641fcdb2819b2ed98d6e92e90db2012c182895c5fa4e4125aecf4719353968a0497a18b3a60e0a495d64e2e7 + languageName: node + linkType: hard + "babel-preset-jest@npm:^29.6.3": version: 29.6.3 resolution: "babel-preset-jest@npm:29.6.3" @@ -6888,13 +7803,38 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.0.2, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": +"base64-js@npm:^1.0.2, base64-js@npm:^1.2.3, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.9.19 + resolution: "baseline-browser-mapping@npm:2.9.19" + bin: + baseline-browser-mapping: dist/cli.js + checksum: 5a9979a501f43d06188d6b4c1e5d540b3c5104d03439603af4bda0f1698b60ae2a44180fb7bdaeb9eea5118eb484a34e454211eb8cf0d104809fc668a0b2eb18 + languageName: node + linkType: hard + +"better-opn@npm:~3.0.2": + version: 3.0.2 + resolution: "better-opn@npm:3.0.2" + dependencies: + open: ^8.0.4 + checksum: 1471552fa7f733561e7f49e812be074b421153006ca744de985fb6d38939807959fc5fe9cb819cf09f864782e294704fd3b31711ea14c115baf3330a2f1135de + languageName: node + linkType: hard + +"big-integer@npm:1.6.x": + version: 1.6.52 + resolution: "big-integer@npm:1.6.52" + checksum: 6e86885787a20fed96521958ae9086960e4e4b5e74d04f3ef7513d4d0ad631a9f3bde2730fc8aaa4b00419fc865f6ec573e5320234531ef37505da7da192c40b + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -6967,6 +7907,33 @@ __metadata: languageName: node linkType: hard +"bplist-creator@npm:0.1.0": + version: 0.1.0 + resolution: "bplist-creator@npm:0.1.0" + dependencies: + stream-buffers: 2.2.x + checksum: d4ccd88ea16c9d50c2e99f484a5f5bed34d172f6f704463585c0c9c993fd01ddb5b30d6ef486dd9393ffba3c686727f6296e8adf826ce01705bd3741477ce955 + languageName: node + linkType: hard + +"bplist-creator@npm:0.1.1": + version: 0.1.1 + resolution: "bplist-creator@npm:0.1.1" + dependencies: + stream-buffers: 2.2.x + checksum: b0d40d1d1623f1afdbb575cfc8075d742d2c4f0eb458574be809e3857752d1042a39553b3943d2d7f505dde92bcd43e1d7bdac61c9cd44475d696deb79f897ce + languageName: node + linkType: hard + +"bplist-parser@npm:0.3.2, bplist-parser@npm:^0.3.1": + version: 0.3.2 + resolution: "bplist-parser@npm:0.3.2" + dependencies: + big-integer: 1.6.x + checksum: fad0f6eb155a9b636b4096a1725ce972a0386490d7d38df7be11a3a5645372446b7c44aacbc6626d24d2c17d8b837765361520ebf2960aeffcaf56765811620e + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -7115,6 +8082,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.25.0": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" + dependencies: + baseline-browser-mapping: ^2.9.0 + caniuse-lite: ^1.0.30001759 + electron-to-chromium: ^1.5.263 + node-releases: ^2.0.27 + update-browserslist-db: ^1.2.0 + bin: + browserslist: cli.js + checksum: 895357d912ae5a88a3fa454d2d280e9869e13432df30ca8918e206c0783b3b59375b178fdaf16d0041a1cf21ac45c8eb0a20f96f73dbd9662abf4cf613177a1e + languageName: node + linkType: hard + "bser@npm:2.1.1": version: 2.1.1 resolution: "bser@npm:2.1.1" @@ -7360,6 +8342,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001759": + version: 1.0.30001767 + resolution: "caniuse-lite@npm:1.0.30001767" + checksum: c55acc7e05b0645b02988421649fab155fd6c1cfaa9b4289d8b597261d096209b7b7483891399143cc10eb46f86b6ec419396de049c05f7c9f8f1992c648be31 + languageName: node + linkType: hard + "canvaskit-wasm@npm:0.40.0": version: 0.40.0 resolution: "canvaskit-wasm@npm:0.40.0" @@ -7487,6 +8476,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: fd73a4bab48b79e66903fe1cafbdc208956f41ea4f856df883d0c7277b7ab29fd33ee65f93b2ec9192fc0169238f2f8307b7735d27c155821d886b84aa97aa8d + languageName: node + linkType: hard + "chrome-launcher@npm:^0.15.2": version: 0.15.2 resolution: "chrome-launcher@npm:0.15.2" @@ -7529,6 +8525,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.3.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + "cipher-base@npm:^1.0.0, cipher-base@npm:^1.0.1, cipher-base@npm:^1.0.3": version: 1.0.4 resolution: "cipher-base@npm:1.0.4" @@ -7553,6 +8556,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + "cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" @@ -7562,6 +8574,13 @@ __metadata: languageName: node linkType: hard +"cli-spinners@npm:^2.0.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + "cli-spinners@npm:^2.5.0": version: 2.7.0 resolution: "cli-spinners@npm:2.7.0" @@ -7763,6 +8782,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + "commander@npm:^5.1.0": version: 5.1.0 resolution: "commander@npm:5.1.0" @@ -7801,7 +8827,7 @@ __metadata: languageName: node linkType: hard -"compressible@npm:~2.0.16": +"compressible@npm:~2.0.16, compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" dependencies: @@ -7825,6 +8851,21 @@ __metadata: languageName: node linkType: hard +"compression@npm:^1.7.4": + version: 1.8.1 + resolution: "compression@npm:1.8.1" + dependencies: + bytes: 3.1.2 + compressible: ~2.0.18 + debug: 2.6.9 + negotiator: ~0.6.4 + on-headers: ~1.1.0 + safe-buffer: 5.2.1 + vary: ~1.1.2 + checksum: 906325935180cd3507d30ed898fb129deccab03689383d55536245a94610f5003923bb14c95ee6adc8d658ee13be549407eb4346ef55169045f3e41e9969808e + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -8457,7 +9498,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.1, debug@npm:^3.2.7": +"debug@npm:^3.1.0, debug@npm:^3.1.1, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -8466,7 +9507,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.4.0": +"debug@npm:^4.3.5, debug@npm:^4.4.0": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -8535,6 +9576,13 @@ __metadata: languageName: node linkType: hard +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": version: 0.1.3 resolution: "deep-is@npm:0.1.3" @@ -8578,6 +9626,13 @@ __metadata: languageName: node linkType: hard +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + "define-properties@npm:^1.1.3, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" @@ -8608,7 +9663,7 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": +"depd@npm:2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a @@ -8657,6 +9712,13 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^2.0.3": + version: 2.1.2 + resolution: "detect-libc@npm:2.1.2" + checksum: 471740d52365084c4b2ae359e507b863f2b1d79b08a92835ebdf701918e08fc9cfba175b3db28483ca33b155e1311a91d69dc42c6d192b476f41a9e1f094ce6a + languageName: node + linkType: hard + "detect-newline@npm:^3.0.0, detect-newline@npm:^3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" @@ -8843,6 +9905,29 @@ __metadata: languageName: node linkType: hard +"dotenv-expand@npm:~11.0.6": + version: 11.0.7 + resolution: "dotenv-expand@npm:11.0.7" + dependencies: + dotenv: ^16.4.5 + checksum: 58455ad9ffedbf6180b49f8f35596da54f10b02efcaabcba5400363f432e1da057113eee39b42365535da41df1e794d54a4aa67b22b37c41686c3dce4e6a28c5 + languageName: node + linkType: hard + +"dotenv@npm:^16.4.5": + version: 16.6.1 + resolution: "dotenv@npm:16.6.1" + checksum: e8bd63c9a37f57934f7938a9cf35de698097fadf980cb6edb61d33b3e424ceccfe4d10f37130b904a973b9038627c2646a3365a904b4406514ea94d7f1816b69 + languageName: node + linkType: hard + +"dotenv@npm:~16.4.5": + version: 16.4.7 + resolution: "dotenv@npm:16.4.7" + checksum: c27419b5875a44addcc56cc69b7dc5b0e6587826ca85d5b355da9303c6fc317fc9989f1f18366a16378c9fdd9532d14117a1abe6029cc719cdbbef6eaef2cea4 + languageName: node + linkType: hard + "dotgitignore@npm:^2.1.0": version: 2.1.0 resolution: "dotgitignore@npm:2.1.0" @@ -8897,6 +9982,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.263": + version: 1.5.286 + resolution: "electron-to-chromium@npm:1.5.286" + checksum: e18483f490aaf4cffb6e93e770bd5b6cf45997252ae10a0332ed3a853ac5764eab8681e6f18ca6741500e5ea487a473154d8630ad1543a9bd4dd66cf0f32a8e2 + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.5.41": version: 1.5.45 resolution: "electron-to-chromium@npm:1.5.45" @@ -9016,6 +10108,13 @@ __metadata: languageName: node linkType: hard +"env-editor@npm:^0.4.1": + version: 0.4.2 + resolution: "env-editor@npm:0.4.2" + checksum: d162e161d9a1bddaf63f68428c587b1d823afe7d56cde039ce403cc68706c68350c92b9db44692f4ecea1d67ec80de9ba01ca70568299ed929d3fa056c40aebf + languageName: node + linkType: hard + "env-paths@npm:^2.2.0, env-paths@npm:^2.2.1": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -9775,6 +10874,146 @@ __metadata: languageName: node linkType: hard +"expo-asset@npm:~12.0.12": + version: 12.0.12 + resolution: "expo-asset@npm:12.0.12" + dependencies: + "@expo/image-utils": ^0.8.8 + expo-constants: ~18.0.12 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: e956e6101a5f844f86dc949b2bb95a45778322bb7982f55e2f7b58da08b3984180ebef18644a66e09d7cd69a431dda457e219218bb144b0c4997d81923b40210 + languageName: node + linkType: hard + +"expo-constants@npm:~18.0.12, expo-constants@npm:~18.0.13": + version: 18.0.13 + resolution: "expo-constants@npm:18.0.13" + dependencies: + "@expo/config": ~12.0.13 + "@expo/env": ~2.0.8 + peerDependencies: + expo: "*" + react-native: "*" + checksum: 71b1bbfe2d1ecce68c1d55f443627c25b4c940c62fb1d19fe8aa0ab437324cfc18efb73bdc61cd476d811f70a774355be79379aecb3a3b91548d252dc11f8bfb + languageName: node + linkType: hard + +"expo-file-system@npm:~19.0.21": + version: 19.0.21 + resolution: "expo-file-system@npm:19.0.21" + peerDependencies: + expo: "*" + react-native: "*" + checksum: 26b4c95c8d30580723995bf8e32287b72eadf0e3442ca14854c15dc47021c4c22eefbc490ab4fadf98b3f0b14847eba3012dfe663c8a8b42de7b1587f6811d8f + languageName: node + linkType: hard + +"expo-font@npm:~14.0.11": + version: 14.0.11 + resolution: "expo-font@npm:14.0.11" + dependencies: + fontfaceobserver: ^2.1.0 + peerDependencies: + expo: "*" + react: "*" + react-native: "*" + checksum: 7947e01b79f55fd8ddc28de0ced25931b8299d095a3a832e6a22e16d2a761ad77282dbc631c459aa895f01b5c32f9cd7240ab96e92d0af4b12aa4589b2c1bd82 + languageName: node + linkType: hard + +"expo-keep-awake@npm:~15.0.8": + version: 15.0.8 + resolution: "expo-keep-awake@npm:15.0.8" + peerDependencies: + expo: "*" + react: "*" + checksum: b74698acc5aad8c3534b6787ee515adadb4c155736890fde9b91470439d542a8161766b63b0b2ba17757ddf8714962f98f4762dd8babe6b55cbc0d27b4113e1a + languageName: node + linkType: hard + +"expo-modules-autolinking@npm:3.0.24": + version: 3.0.24 + resolution: "expo-modules-autolinking@npm:3.0.24" + dependencies: + "@expo/spawn-async": ^1.7.2 + chalk: ^4.1.0 + commander: ^7.2.0 + require-from-string: ^2.0.2 + resolve-from: ^5.0.0 + bin: + expo-modules-autolinking: bin/expo-modules-autolinking.js + checksum: 1a11c46aa7129030c171d051ee7602e22669fa8d193e04f7a339da13dbfc3e1e96d5d78d7bb965f4545d321747f28f5bd743f3b3ca48b442fe4c45da5982301d + languageName: node + linkType: hard + +"expo-modules-core@npm:3.0.29": + version: 3.0.29 + resolution: "expo-modules-core@npm:3.0.29" + dependencies: + invariant: ^2.2.4 + peerDependencies: + react: "*" + react-native: "*" + checksum: 43460a60dbff91660dd02be488f62feb91b4599ea1370656f2f5c3750422cbcfc861f0d66c84fd1227be2a0cbcb448d78805c1c0f9cd050581d4dfbc33ca2ead + languageName: node + linkType: hard + +"expo-server@npm:^1.0.5": + version: 1.0.5 + resolution: "expo-server@npm:1.0.5" + checksum: b22f58614e969dff93c4e961f7ab991e26dbc415cce7acc3bee74251765799c2ef2ece2c6f9dab444bde16d91ea22fbe4c3369bafee152b8ae40839bd0937eef + languageName: node + linkType: hard + +"expo@npm:^54.0.33": + version: 54.0.33 + resolution: "expo@npm:54.0.33" + dependencies: + "@babel/runtime": ^7.20.0 + "@expo/cli": 54.0.23 + "@expo/config": ~12.0.13 + "@expo/config-plugins": ~54.0.4 + "@expo/devtools": 0.1.8 + "@expo/fingerprint": 0.15.4 + "@expo/metro": ~54.2.0 + "@expo/metro-config": 54.0.14 + "@expo/vector-icons": ^15.0.3 + "@ungap/structured-clone": ^1.3.0 + babel-preset-expo: ~54.0.10 + expo-asset: ~12.0.12 + expo-constants: ~18.0.13 + expo-file-system: ~19.0.21 + expo-font: ~14.0.11 + expo-keep-awake: ~15.0.8 + expo-modules-autolinking: 3.0.24 + expo-modules-core: 3.0.29 + pretty-format: ^29.7.0 + react-refresh: ^0.14.2 + whatwg-url-without-unicode: 8.0.0-3 + peerDependencies: + "@expo/dom-webview": "*" + "@expo/metro-runtime": "*" + react: "*" + react-native: "*" + react-native-webview: "*" + peerDependenciesMeta: + "@expo/dom-webview": + optional: true + "@expo/metro-runtime": + optional: true + react-native-webview: + optional: true + bin: + expo: bin/cli + expo-modules-autolinking: bin/autolinking + fingerprint: bin/fingerprint + checksum: d9addf01af94b18a373c6e68de39f1415c8625d28c9ee9a39da4a9d9793636945b6904c65baffd8018b771b5e325ec0a4e6724b62cda492d477ad0f83eaff4c3 + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -9934,6 +11173,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: bd537daa9d3cd53887eed35efa0eab2dbb1ca408790e10e024120e7a36c6e9ae2b33710cb8381e35def01bc9c1d7eaba746f886338413e68ff6ebaee07b9a6e8 + languageName: node + linkType: hard + "fetch-ponyfill@npm:^7.1.0": version: 7.1.0 resolution: "fetch-ponyfill@npm:7.1.0" @@ -10093,6 +11344,13 @@ __metadata: languageName: node linkType: hard +"fontfaceobserver@npm:^2.1.0": + version: 2.3.0 + resolution: "fontfaceobserver@npm:2.3.0" + checksum: 5f14715974203b9d68f299f93a7623afd9d5701572d683e861cdbb7514573ac556f56e9b5d07d2d534e01aed19a3b0bbe568e735e0e5494cbea913fc3f12b856 + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -10153,7 +11411,14 @@ __metadata: languageName: node linkType: hard -"fresh@npm:0.5.2": +"freeport-async@npm:^2.0.0": + version: 2.0.0 + resolution: "freeport-async@npm:2.0.0" + checksum: 03156ab2179fbbf5b7ff3aafc56f3e01c9d7df5cc366fbf3c29f26007773632e33ed90847fa4a979c5412ad55de8b21a7292601c531acaf8957933d96225c76d + languageName: node + linkType: hard + +"fresh@npm:0.5.2, fresh@npm:~0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 @@ -10425,6 +11690,13 @@ __metadata: languageName: node linkType: hard +"getenv@npm:^2.0.0": + version: 2.0.0 + resolution: "getenv@npm:2.0.0" + checksum: d5e4cd001952db17d546c8ae5961b68dd83d0a6c6027cc4c613cbe0f88ca835f661364a7eff32428953e7677af95fb0a35f035c98b661bef2fcabb5d7c711c86 + languageName: node + linkType: hard + "git-raw-commits@npm:2.0.0": version: 2.0.0 resolution: "git-raw-commits@npm:2.0.0" @@ -10505,6 +11777,17 @@ __metadata: languageName: node linkType: hard +"glob@npm:^13.0.0": + version: 13.0.1 + resolution: "glob@npm:13.0.1" + dependencies: + minimatch: ^10.1.2 + minipass: ^7.1.2 + path-scurry: ^2.0.0 + checksum: 6952c5d1326b3e6f6d5e4198099337f96a9908c8f9488359fac4299bf1dc90e752aec2f55e5fda7f54071d58ce802147c64ac07ffb5bf8825254309fa9c13f34 + languageName: node + linkType: hard + "glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.0 resolution: "glob@npm:7.2.0" @@ -10886,7 +12169,7 @@ __metadata: languageName: node linkType: hard -"hermes-parser@npm:0.29.1": +"hermes-parser@npm:0.29.1, hermes-parser@npm:^0.29.1": version: 0.29.1 resolution: "hermes-parser@npm:0.29.1" dependencies: @@ -10931,6 +12214,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^7.0.0": + version: 7.0.2 + resolution: "hosted-git-info@npm:7.0.2" + dependencies: + lru-cache: ^10.0.1 + checksum: 467cf908a56556417b18e86ae3b8dee03c2360ef1d51e61c4028fe87f6f309b6ff038589c94b5666af207da9d972d5107698906aabeb78aca134641962a5c6f8 + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -11016,6 +12308,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:~2.0.1": + version: 2.0.1 + resolution: "http-errors@npm:2.0.1" + dependencies: + depd: ~2.0.0 + inherits: ~2.0.4 + setprototypeof: ~1.2.0 + statuses: ~2.0.2 + toidentifier: ~1.0.1 + checksum: 155d1a100a06e4964597013109590b97540a177b69c3600bbc93efc746465a99a2b718f43cdf76b3791af994bbe3a5711002046bf668cdc007ea44cea6df7ccd + languageName: node + linkType: hard + "http-proxy-agent@npm:^4.0.0, http-proxy-agent@npm:^4.0.1": version: 4.0.1 resolution: "http-proxy-agent@npm:4.0.1" @@ -11235,14 +12540,14 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard -"ini@npm:^1.3.2": +"ini@npm:^1.3.2, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -11387,6 +12692,7 @@ __metadata: eslint-plugin-react-native: ^4.0.0 eslint-plugin-react-native-a11y: ^3.3.0 eslint-plugin-sonarjs: ^0.11.0 + expo: ^54.0.33 fp-ts: ^2.12.1 front-matter: ^4.0.2 fs-extra: ^7.0.0 @@ -11626,6 +12932,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.16.1": + version: 2.16.1 + resolution: "is-core-module@npm:2.16.1" + dependencies: + hasown: ^2.0.2 + checksum: 6ec5b3c42d9cbf1ac23f164b16b8a140c3cec338bf8f884c076ca89950c7cc04c33e78f02b8cae7ff4751f3247e3174b2330f1fe4de194c7210deb8b1ea316a7 + languageName: node + linkType: hard + "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" @@ -11667,6 +12982,15 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -12608,6 +13932,13 @@ __metadata: languageName: node linkType: hard +"jimp-compact@npm:0.16.1": + version: 0.16.1 + resolution: "jimp-compact@npm:0.16.1" + checksum: 5a1c62d70881b31f79ea65fecfe03617be0eb56139bc451f37e8972365c99ac3b52c5176c446ff27144c98ab664a99107ae08d347044e94e1de637f165b41a57 + languageName: node + linkType: hard + "joi@npm:^17.2.1": version: 17.4.2 resolution: "joi@npm:17.4.2" @@ -12700,7 +14031,7 @@ __metadata: languageName: node linkType: hard -"jsc-safe-url@npm:^0.2.2": +"jsc-safe-url@npm:^0.2.2, jsc-safe-url@npm:^0.2.4": version: 0.2.4 resolution: "jsc-safe-url@npm:0.2.4" checksum: 53b5741ba2c0a54da1722929dc80becb2c6fcc9525124fb6c2aec1a00f48e79afffd26816c278111e7b938e37ace029e33cbb8cdaa4ac1f528a87e58022284af @@ -12891,6 +14222,15 @@ __metadata: languageName: node linkType: hard +"lan-network@npm:^0.1.6": + version: 0.1.7 + resolution: "lan-network@npm:0.1.7" + bin: + lan-network: dist/lan-network-cli.js + checksum: 7b7793a60de60fa152371eba8b00e73c160b4aef28c51790e75c958e6031dcf314fe7a0e10de0610d902dd26cc562c7d88d0cb3cb3f2e23be4e4defb41c258c3 + languageName: node + linkType: hard + "launch-editor@npm:^2.9.1": version: 2.11.1 resolution: "launch-editor@npm:2.11.1" @@ -12938,6 +14278,126 @@ __metadata: languageName: node linkType: hard +"lightningcss-android-arm64@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-android-arm64@npm:1.31.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-arm64@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-darwin-arm64@npm:1.31.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-darwin-x64@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-darwin-x64@npm:1.31.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-freebsd-x64@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-freebsd-x64@npm:1.31.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.31.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"lightningcss-linux-arm64-gnu@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-linux-arm64-gnu@npm:1.31.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-arm64-musl@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-linux-arm64-musl@npm:1.31.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-linux-x64-gnu@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-linux-x64-gnu@npm:1.31.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"lightningcss-linux-x64-musl@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-linux-x64-musl@npm:1.31.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"lightningcss-win32-arm64-msvc@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-win32-arm64-msvc@npm:1.31.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.31.1": + version: 1.31.1 + resolution: "lightningcss-win32-x64-msvc@npm:1.31.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"lightningcss@npm:^1.30.1": + version: 1.31.1 + resolution: "lightningcss@npm:1.31.1" + dependencies: + detect-libc: ^2.0.3 + lightningcss-android-arm64: 1.31.1 + lightningcss-darwin-arm64: 1.31.1 + lightningcss-darwin-x64: 1.31.1 + lightningcss-freebsd-x64: 1.31.1 + lightningcss-linux-arm-gnueabihf: 1.31.1 + lightningcss-linux-arm64-gnu: 1.31.1 + lightningcss-linux-arm64-musl: 1.31.1 + lightningcss-linux-x64-gnu: 1.31.1 + lightningcss-linux-x64-musl: 1.31.1 + lightningcss-win32-arm64-msvc: 1.31.1 + lightningcss-win32-x64-msvc: 1.31.1 + dependenciesMeta: + lightningcss-android-arm64: + optional: true + lightningcss-darwin-arm64: + optional: true + lightningcss-darwin-x64: + optional: true + lightningcss-freebsd-x64: + optional: true + lightningcss-linux-arm-gnueabihf: + optional: true + lightningcss-linux-arm64-gnu: + optional: true + lightningcss-linux-arm64-musl: + optional: true + lightningcss-linux-x64-gnu: + optional: true + lightningcss-linux-x64-musl: + optional: true + lightningcss-win32-arm64-msvc: + optional: true + lightningcss-win32-x64-msvc: + optional: true + checksum: d0479815ed405a0da52c3504878a787be3848b21a2869ef652363b0877a33ea3281e83dfa6773bb69284f565e006ae5ebd9af0ee2e07ec3452898f42d06fac26 + languageName: node + linkType: hard + "lilconfig@npm:2.1.0": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" @@ -13141,6 +14601,15 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + "log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" @@ -13227,6 +14696,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^11.0.0": + version: 11.2.5 + resolution: "lru-cache@npm:11.2.5" + checksum: b3cd18066c81e0540429507036e0a37f860325348f6a85376ed71196e5b893668af410849574c5fb49110bc0afff76b4f87646cb93b2482a315c9e7b8435630f + languageName: node + linkType: hard + "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" @@ -14287,6 +15763,13 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -14331,6 +15814,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^10.1.2": + version: 10.1.2 + resolution: "minimatch@npm:10.1.2" + dependencies: + "@isaacs/brace-expansion": ^5.0.1 + checksum: a6ad8bb522741fdf6aca0545054057a2a540d7c76c4f6ab0f34694e5de9616c5487dbab26b6ae564437636863d4d5cb3609fa0d8408b6e56312d7a3eb5e22e05 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -14340,6 +15832,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^9.0.0": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: ^2.0.1 + checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + languageName: node + linkType: hard + "minimatch@npm:^9.0.4": version: 9.0.4 resolution: "minimatch@npm:9.0.4" @@ -14444,7 +15945,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 2bfd325b95c555f2b4d2814d49325691c7bee937d753814861b0b49d5edcda55cbbf22b6b6a60bb91eddac8668771f03c5ff647dcd9d0f798e9548b9cdc46ee3 @@ -14461,6 +15962,15 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.1.0": + version: 3.1.0 + resolution: "minizlib@npm:3.1.0" + dependencies: + minipass: ^7.1.2 + checksum: a15e6f0128f514b7d41a1c68ce531155447f4669e32d279bba1c1c071ef6c2abd7e4d4579bb59ccc2ed1531346749665968fdd7be8d83eb6b6ae2fe1f3d370a7 + languageName: node + linkType: hard + "mitt@npm:^3.0.1": version: 3.0.1 resolution: "mitt@npm:3.0.1" @@ -14569,6 +16079,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + "nanoid@npm:^3.1.23": version: 3.2.0 resolution: "nanoid@npm:3.2.0" @@ -14578,7 +16099,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.1": +"nanoid@npm:^3.3.1, nanoid@npm:^3.3.7": version: 3.3.11 resolution: "nanoid@npm:3.3.11" bin: @@ -14615,7 +16136,7 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": +"negotiator@npm:^0.6.3, negotiator@npm:~0.6.4": version: 0.6.4 resolution: "negotiator@npm:0.6.4" checksum: 7ded10aa02a0707d1d12a9973fdb5954f98547ca7beb60e31cb3a403cc6e8f11138db7a3b0128425cf836fc85d145ec4ce983b2bdf83dca436af879c2d683510 @@ -14629,6 +16150,13 @@ __metadata: languageName: node linkType: hard +"nested-error-stacks@npm:~2.0.1": + version: 2.0.1 + resolution: "nested-error-stacks@npm:2.0.1" + checksum: 8430d7d80ad69b1add2992ee2992a363db6c1a26a54740963bc99a004c5acb1d2a67049397062eab2caa3a312b4da89a0b85de3bdf82d7d472a6baa166311fe6 + languageName: node + linkType: hard + "netmask@npm:^2.0.1": version: 2.0.2 resolution: "netmask@npm:2.0.2" @@ -14674,6 +16202,13 @@ __metadata: languageName: node linkType: hard +"node-forge@npm:^1.3.3": + version: 1.3.3 + resolution: "node-forge@npm:1.3.3" + checksum: 045b650d61eeba57588744b7be4671044e83871e2c4dc5d4a38a8eb5af7e55fa790c93ba9db1d1ee14a567d25fde41e97a5132e076cff738622e0916c77b48d2 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 10.2.0 resolution: "node-gyp@npm:10.2.0" @@ -14722,6 +16257,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.27": + version: 2.0.27 + resolution: "node-releases@npm:2.0.27" + checksum: a9a54079d894704c2ec728a690b41fbc779a710f5d47b46fa3e460acff08a3e7dfa7108e5599b2db390aa31dac062c47c5118317201f12784188dc5b415f692d + languageName: node + linkType: hard + "node-stream-zip@npm:^1.9.1": version: 1.11.2 resolution: "node-stream-zip@npm:1.11.2" @@ -14759,6 +16301,18 @@ __metadata: languageName: node linkType: hard +"npm-package-arg@npm:^11.0.0": + version: 11.0.3 + resolution: "npm-package-arg@npm:11.0.3" + dependencies: + hosted-git-info: ^7.0.0 + proc-log: ^4.0.0 + semver: ^7.3.5 + validate-npm-package-name: ^5.0.0 + checksum: cc6f22c39201aa14dcceeddb81bfbf7fa0484f94bcd2b3ad038e18afec5167c843cdde90c897f6034dc368faa0100c1eeee6e3f436a89e0af32ba932af4a8c28 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -14931,7 +16485,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:~2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -14956,6 +16510,13 @@ __metadata: languageName: node linkType: hard +"on-headers@npm:~1.1.0": + version: 1.1.0 + resolution: "on-headers@npm:1.1.0" + checksum: 98aa64629f986fb8cc4517dd8bede73c980e31208cba97f4442c330959f60ced3dc6214b83420491f5111fc7c4f4343abe2ea62c85f505cf041d67850f238776 + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -14965,6 +16526,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -15002,6 +16572,17 @@ __metadata: languageName: node linkType: hard +"open@npm:^8.0.4": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: ^2.0.0 + is-docker: ^2.1.1 + is-wsl: ^2.2.0 + checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 + languageName: node + linkType: hard + "openapi-types@npm:^10.0.0": version: 10.0.0 resolution: "openapi-types@npm:10.0.0" @@ -15037,6 +16618,20 @@ __metadata: languageName: node linkType: hard +"ora@npm:^3.4.0": + version: 3.4.0 + resolution: "ora@npm:3.4.0" + dependencies: + chalk: ^2.4.2 + cli-cursor: ^2.1.0 + cli-spinners: ^2.0.0 + log-symbols: ^2.2.0 + strip-ansi: ^5.2.0 + wcwidth: ^1.0.1 + checksum: f1f8e7f290b766276dcd19ddf2159a1971b1ec37eec4a5556b8f5e4afbe513a965ed65c183d38956724263b6a20989b3d8fb71b95ac4a2d6a01db2f1ed8899e4 + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -15295,6 +16890,15 @@ __metadata: languageName: node linkType: hard +"parse-png@npm:^2.1.0": + version: 2.1.0 + resolution: "parse-png@npm:2.1.0" + dependencies: + pngjs: ^3.3.0 + checksum: 0c6b6c42c8830cd16f6f9e9aedafd53111c0ad2ff350ba79c629996887567558f5639ad0c95764f96f7acd1f9ff63d4ac73737e80efa3911a6de9839ee520c96 + languageName: node + linkType: hard + "parse-url@npm:^9.2.0": version: 9.2.0 resolution: "parse-url@npm:9.2.0" @@ -15380,7 +16984,7 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.5, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a @@ -15397,6 +17001,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^2.0.0": + version: 2.0.1 + resolution: "path-scurry@npm:2.0.1" + dependencies: + lru-cache: ^11.0.0 + minipass: ^7.1.2 + checksum: a022c6c38fed836079d03f96540eafd4cd989acf287b99613c82300107f366e889513ad8b671a2039a9d251122621f9c6fa649f0bd4d50acf95a6943a6692dbf + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -15493,6 +17107,20 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^3.0.1": + version: 3.0.1 + resolution: "picomatch@npm:3.0.1" + checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914 + languageName: node + linkType: hard + +"picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 + languageName: node + linkType: hard + "pidtree@npm:^0.6.0": version: 0.6.0 resolution: "pidtree@npm:0.6.0" @@ -15532,6 +17160,13 @@ __metadata: languageName: node linkType: hard +"pirates@npm:^4.0.1": + version: 4.0.7 + resolution: "pirates@npm:4.0.7" + checksum: 3dcbaff13c8b5bc158416feb6dc9e49e3c6be5fddc1ea078a05a73ef6b85d79324bbb1ef59b954cdeff000dbf000c1d39f32dc69310c7b78fbada5171b583e40 + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" @@ -15559,6 +17194,13 @@ __metadata: languageName: node linkType: hard +"pngjs@npm:^3.3.0": + version: 3.4.0 + resolution: "pngjs@npm:3.4.0" + checksum: 8bd40bd698abd16b72c97b85cb858c80894fbedc76277ce72a784aa441e14795d45d9856e97333ca469b34b67528860ffc8a7317ca6beea349b645366df00bcd + languageName: node + linkType: hard + "pngjs@npm:^5.0.0": version: 5.0.0 resolution: "pngjs@npm:5.0.0" @@ -15584,6 +17226,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:~8.4.32": + version: 8.4.49 + resolution: "postcss@npm:8.4.49" + dependencies: + nanoid: ^3.3.7 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: eb5d6cbdca24f50399aafa5d2bea489e4caee4c563ea1edd5a2485bc5f84e9ceef3febf170272bc83a99c31d23a316ad179213e853f34c2a7a8ffa534559d63a + languageName: node + linkType: hard + "postinstall-postinstall@npm:^1.0.0": version: 1.0.0 resolution: "postinstall-postinstall@npm:1.0.0" @@ -15623,6 +17276,13 @@ __metadata: languageName: node linkType: hard +"pretty-bytes@npm:^5.6.0": + version: 5.6.0 + resolution: "pretty-bytes@npm:5.6.0" + checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd + languageName: node + linkType: hard + "pretty-format@npm:^24.0.0, pretty-format@npm:^24.9.0": version: 24.9.0 resolution: "pretty-format@npm:24.9.0" @@ -15653,7 +17313,7 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": +"proc-log@npm:^4.0.0, proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc @@ -15710,7 +17370,7 @@ __metadata: languageName: node linkType: hard -"prompts@npm:^2.4.2": +"prompts@npm:^2.3.2, prompts@npm:^2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -15797,6 +17457,15 @@ __metadata: languageName: node linkType: hard +"qrcode-terminal@npm:0.11.0": + version: 0.11.0 + resolution: "qrcode-terminal@npm:0.11.0" + bin: + qrcode-terminal: ./bin/qrcode-terminal.js + checksum: ad146ea1e339e1745402a3ea131631f64f40f0d1ff9cc6bd9c21677feaa1ca6dcd32eadf188fd3febdab8bf6191b3d24d533454903a72543645a72820e4d324c + languageName: node + linkType: hard + "qrcode@npm:^1.5.1": version: 1.5.4 resolution: "qrcode@npm:1.5.4" @@ -15941,6 +17610,20 @@ __metadata: languageName: node linkType: hard +"rc@npm:~1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: ^0.6.0 + ini: ~1.3.0 + minimist: ^1.2.0 + strip-json-comments: ~2.0.1 + bin: + rc: ./cli.js + checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e + languageName: node + linkType: hard + "react-deep-force-update@npm:^1.0.0": version: 1.1.2 resolution: "react-deep-force-update@npm:1.1.2" @@ -16789,7 +18472,7 @@ __metadata: languageName: node linkType: hard -"react-refresh@npm:^0.14.0": +"react-refresh@npm:^0.14.0, react-refresh@npm:^0.14.2": version: 0.14.2 resolution: "react-refresh@npm:0.14.2" checksum: d80db4bd40a36dab79010dc8aa317a5b931f960c0d83c4f3b81f0552cbcf7f29e115b84bb7908ec6a1eb67720fff7023084eff73ece8a7ddc694882478464382 @@ -17381,6 +19064,13 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -17388,6 +19078,17 @@ __metadata: languageName: node linkType: hard +"requireg@npm:^0.2.2": + version: 0.2.2 + resolution: "requireg@npm:0.2.2" + dependencies: + nested-error-stacks: ~2.0.1 + rc: ~1.2.7 + resolve: ~1.7.1 + checksum: 99b420a02e7272717153cdf75891cbb133c02c04b287721eb1bdb0668b6a98aa1da38c08d8148fc8b1443a668d939eeb622d390538ac8da17b18a977ebe998ae + languageName: node + linkType: hard + "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -17432,6 +19133,13 @@ __metadata: languageName: node linkType: hard +"resolve-workspace-root@npm:^2.0.0": + version: 2.0.1 + resolution: "resolve-workspace-root@npm:2.0.1" + checksum: 9f5d627d4565b7b4335b238e2ce7f7954caa8c2503c70289252998edef5f850f9b3d6811365f9501d9255ea092c849c05d8ba320023a2591d545ecb8e167e3ab + languageName: node + linkType: hard + "resolve.exports@npm:^2.0.0": version: 2.0.2 resolution: "resolve.exports@npm:2.0.2" @@ -17439,6 +19147,13 @@ __metadata: languageName: node linkType: hard +"resolve.exports@npm:^2.0.3": + version: 2.0.3 + resolution: "resolve.exports@npm:2.0.3" + checksum: abfb9f98278dcd0c19b8a49bb486abfafa23df4636d49128ea270dc982053c3ef230a530aecda1fae1322873fdfa6c97674fc539651ddfdb375ac58e0b8ef6df + languageName: node + linkType: hard + "resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" @@ -17452,6 +19167,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.2": + version: 1.22.11 + resolution: "resolve@npm:1.22.11" + dependencies: + is-core-module: ^2.16.1 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 6d5baa2156b95a65ac431e7642e21106584e9f4194da50871cae8bc1bbd2b53bb7cee573c92543d83bb999620b224a087f62379d800ed1ccb189da6df5d78d50 + languageName: node + linkType: hard + "resolve@npm:^2.0.0-next.5": version: 2.0.0-next.5 resolution: "resolve@npm:2.0.0-next.5" @@ -17465,6 +19193,15 @@ __metadata: languageName: node linkType: hard +"resolve@npm:~1.7.1": + version: 1.7.1 + resolution: "resolve@npm:1.7.1" + dependencies: + path-parse: ^1.0.5 + checksum: afb829d4b923f9b17aaf55320c2feaf8d44577674a3a71510d299f832fb80f6703e5a701e01cf774c3241fe8663d4b2b99053cfbca7995488d18ea9f8c7ac309 + languageName: node + linkType: hard + "resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" @@ -17478,6 +19215,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.22.2#~builtin": + version: 1.22.11 + resolution: "resolve@patch:resolve@npm%3A1.22.11#~builtin::version=1.22.11&hash=c3c19d" + dependencies: + is-core-module: ^2.16.1 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 1462da84ac3410d7c2e12e4f5f25c1423d8a174c3b4245c43eafea85e7bbe6af3eb7ec10a4850b5e518e8531608604742b8cbd761e1acd7ad1035108b7c98013 + languageName: node + linkType: hard + "resolve@patch:resolve@^2.0.0-next.5#~builtin": version: 2.0.0-next.5 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=c3c19d" @@ -17491,6 +19241,25 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@~1.7.1#~builtin": + version: 1.7.1 + resolution: "resolve@patch:resolve@npm%3A1.7.1#~builtin::version=1.7.1&hash=3bafbf" + dependencies: + path-parse: ^1.0.5 + checksum: c2a6f0e3856ac1ddc8297091c20ca6c36d99bf289ddea366c46bd2a7ed8b31075c7f9d01ff5d390ebed1fe41b9fabe57a79ae087992ba92e3592f0c3be07c1ac + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" @@ -17748,6 +19517,27 @@ __metadata: languageName: node linkType: hard +"send@npm:^0.19.0": + version: 0.19.2 + resolution: "send@npm:0.19.2" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: ~0.5.2 + http-errors: ~2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: ~2.4.1 + range-parser: ~1.2.1 + statuses: ~2.0.2 + checksum: f9e11b718b48dbea72daa6a80e36e5a00fb6d01b1a6cfda8b3135c9ca9db84257738283da23371f437148ccd8f400e6171cd2a3642fb43fda462da407d9d30c0 + languageName: node + linkType: hard + "serialize-error@npm:^2.1.0": version: 2.1.0 resolution: "serialize-error@npm:2.1.0" @@ -17812,7 +19602,7 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.2.0": +"setprototypeof@npm:1.2.0, setprototypeof@npm:~1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 @@ -17908,6 +19698,17 @@ __metadata: languageName: node linkType: hard +"simple-plist@npm:^1.1.0": + version: 1.4.0 + resolution: "simple-plist@npm:1.4.0" + dependencies: + bplist-creator: 0.1.1 + bplist-parser: 0.3.2 + plist: ^3.0.5 + checksum: fa8086f6b781c289f1abad21306481dda4af6373b32a5d998a70e53c2b7218a1d21ebb5ae3e736baae704c21d311d3d39d01d0e6a2387eda01b4020b9ebd909e + languageName: node + linkType: hard + "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" @@ -17974,6 +19775,13 @@ __metadata: languageName: node linkType: hard +"slugify@npm:^1.3.4, slugify@npm:^1.6.6": + version: 1.6.6 + resolution: "slugify@npm:1.6.6" + checksum: 04773c2d3b7aea8d2a61fa47cc7e5d29ce04e1a96cbaec409da57139df906acb3a449fac30b167d203212c806e73690abd4ff94fbad0a9a7b7ea109a2a638ae9 + languageName: node + linkType: hard + "smart-buffer@npm:^4.1.0, smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -18033,7 +19841,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.1": +"source-map-js@npm:^1.0.1, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b @@ -18050,7 +19858,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20, source-map-support@npm:~0.5.21": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -18234,6 +20042,20 @@ __metadata: languageName: node linkType: hard +"statuses@npm:~2.0.2": + version: 2.0.2 + resolution: "statuses@npm:2.0.2" + checksum: 6927feb50c2a75b2a4caab2c565491f7a93ad3d8dbad7b1398d52359e9243a20e2ebe35e33726dee945125ef7a515e9097d8a1b910ba2bbd818265a2f6c39879 + languageName: node + linkType: hard + +"stream-buffers@npm:2.2.x": + version: 2.2.0 + resolution: "stream-buffers@npm:2.2.0" + checksum: 4587d9e8f050d689fb38b4295e73408401b16de8edecc12026c6f4ae92956705ecfd995ae3845d7fa3ebf19502d5754df9143d91447fd881d86e518f43882c1c + languageName: node + linkType: hard + "stream-shift@npm:^1.0.0": version: 1.0.1 resolution: "stream-shift@npm:1.0.1" @@ -18417,7 +20239,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^5.0.0": +"strip-ansi@npm:^5.0.0, strip-ansi@npm:^5.2.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0" dependencies: @@ -18506,6 +20328,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + "strnum@npm:^1.0.5": version: 1.0.5 resolution: "strnum@npm:1.0.5" @@ -18513,6 +20342,31 @@ __metadata: languageName: node linkType: hard +"structured-headers@npm:^0.4.1": + version: 0.4.1 + resolution: "structured-headers@npm:0.4.1" + checksum: 2f3073b2c8b4f2515367a1647ba0b6764ce6d35b3943605940de41077c2afd2513257f4bf6fbfd67a3455f25a3e844905da6fddde6b6ad7974256495311a25a3 + languageName: node + linkType: hard + +"sucrase@npm:~3.35.1": + version: 3.35.1 + resolution: "sucrase@npm:3.35.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.2 + commander: ^4.0.0 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + tinyglobby: ^0.2.11 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 9a3ae3900f85ede60468bdaebc07a32691d5e44c80bb008734088dcde49cd0e05ead854786d90fbb6e63ed1c50592146cb50536321212773f6d72d1c85b2a51b + languageName: node + linkType: hard + "supports-color@npm:^2.0.0": version: 2.0.0 resolution: "supports-color@npm:2.0.0" @@ -18529,7 +20383,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.1.0": +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -18547,6 +20401,16 @@ __metadata: languageName: node linkType: hard +"supports-hyperlinks@npm:^2.0.0": + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" + dependencies: + has-flag: ^4.0.0 + supports-color: ^7.0.0 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -18608,6 +20472,29 @@ __metadata: languageName: node linkType: hard +"tar@npm:^7.5.2": + version: 7.5.7 + resolution: "tar@npm:7.5.7" + dependencies: + "@isaacs/fs-minipass": ^4.0.0 + chownr: ^3.0.0 + minipass: ^7.1.2 + minizlib: ^3.1.0 + yallist: ^5.0.0 + checksum: 82fa04804b6cae4c0b46b84e97a08c39e1c17bb959350baa32d139bcf5e1fc7ebc3ceb72465dd3e2e311992386ecc13599a257d5672158490ceb9464146d5573 + languageName: node + linkType: hard + +"terminal-link@npm:^2.1.1": + version: 2.1.1 + resolution: "terminal-link@npm:2.1.1" + dependencies: + ansi-escapes: ^4.2.1 + supports-hyperlinks: ^2.0.0 + checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f + languageName: node + linkType: hard + "terser@npm:^5.15.0": version: 5.31.1 resolution: "terser@npm:5.31.1" @@ -18654,6 +20541,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + "throat@npm:^5.0.0": version: 5.0.0 resolution: "throat@npm:5.0.0" @@ -18695,6 +20600,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.11": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: ^6.5.0 + picomatch: ^4.0.3 + checksum: 0e33b8babff966c6ab86e9b825a350a6a98a63700fa0bb7ae6cf36a7770a508892383adc272f7f9d17aaf46a9d622b455e775b9949a3f951eaaf5dfb26331d44 + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -18736,7 +20651,7 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.1": +"toidentifier@npm:1.0.1, toidentifier@npm:~1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 @@ -18812,6 +20727,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + "ts-node@npm:^7.0.1": version: 7.0.1 resolution: "ts-node@npm:7.0.1" @@ -19148,6 +21070,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^6.18.2": + version: 6.23.0 + resolution: "undici@npm:6.23.0" + checksum: f0953920330375e76d1614381af07da9d7c21ad3244d0785b3f7bd4072635c20a1f432ef3a129baa3e4a92278ce32e9ea2ca8b5f0e0554a5739222af332c08fe + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -19375,6 +21304,20 @@ __metadata: languageName: node linkType: hard +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" + dependencies: + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 6f209a97ae8eacdd3a1ef2eb365adf49d1e2a757e5b2dd4ac87dc8c99236cbe3e572d3e605a87dd7b538a11751b71d9f93edc47c7405262a293a493d155316cd + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.2.2 resolution: "uri-js@npm:4.2.2" @@ -19472,6 +21415,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^7.0.3": + version: 7.0.3 + resolution: "uuid@npm:7.0.3" + bin: + uuid: dist/bin/uuid + checksum: f5b7b5cc28accac68d5c083fd51cca64896639ebd4cca88c6cfb363801aaa83aa439c86dfc8446ea250a7a98d17afd2ad9e88d9d4958c79a412eccb93bae29de + languageName: node + linkType: hard + "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -19514,6 +21466,13 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-name@npm:^5.0.0": + version: 5.0.1 + resolution: "validate-npm-package-name@npm:5.0.1" + checksum: 0d583a1af23aeffea7748742cf22b6802458736fb8b60323ba5949763824d46f796474b0e1b9206beb716f9d75269e19dbd7795d6b038b29d561be95dd827381 + languageName: node + linkType: hard + "validator@npm:^13.7.0": version: 13.7.0 resolution: "validator@npm:13.7.0" @@ -19774,6 +21733,13 @@ __metadata: languageName: node linkType: hard +"wonka@npm:^6.3.2": + version: 6.3.5 + resolution: "wonka@npm:6.3.5" + checksum: bd9f4330664ea971ddbc762275c081d5a635bcebd1c567211d43278b925f3394ad454bb33a0ef5e8beadfaad552cdbc92c018dfb96350f3895341998efa5f521 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5, word-wrap@npm:~1.2.3": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" @@ -19914,6 +21880,41 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.12.1": + version: 8.19.0 + resolution: "ws@npm:8.19.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 7a426122c373e053a65a2affbcdcdbf8f643ba0265577afd4e08595397ca244c05de81570300711e2363a9dab5aea3ae644b445bc7468b1ebbb51bfe2efb20e1 + languageName: node + linkType: hard + +"xcode@npm:^3.0.1": + version: 3.0.1 + resolution: "xcode@npm:3.0.1" + dependencies: + simple-plist: ^1.1.0 + uuid: ^7.0.3 + checksum: 908ff85851f81aec6e36ca24427db092e1cc068f052716e14de5e762196858039efabbe053a1abe8920184622501049e74a93618e8692b982f7604a9847db108 + languageName: node + linkType: hard + +"xml2js@npm:0.6.0": + version: 0.6.0 + resolution: "xml2js@npm:0.6.0" + dependencies: + sax: ">=0.6.0" + xmlbuilder: ~11.0.0 + checksum: 437f353fd66d367bf158e9555a0625df9965d944e499728a5c6bc92a54a2763179b144f14b7e1c725040f56bbd22b0fa6cfcb09ec4faf39c45ce01efe631f40b + languageName: node + linkType: hard + "xml2js@npm:^0.5.0": version: 0.5.0 resolution: "xml2js@npm:0.5.0" @@ -20006,6 +22007,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: eba51182400b9f35b017daa7f419f434424410691bbc5de4f4240cc830fdef906b504424992700dc047f16b4d99100a6f8b8b11175c193f38008e9c96322b6a5 + languageName: node + linkType: hard + "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2" From bbdee5461be1e3e0a51869b125bcb20d26d1ce5e Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Thu, 5 Feb 2026 10:50:11 +0100 Subject: [PATCH 2/7] forces disable autolink on local env for cie package --- ios/IO.xcodeproj/project.pbxproj | 2 -- ios/Podfile.lock | 6 ------ package.json | 7 ++++--- react-native.config.js | 4 +++- 4 files changed, 7 insertions(+), 12 deletions(-) diff --git a/ios/IO.xcodeproj/project.pbxproj b/ios/IO.xcodeproj/project.pbxproj index c0d49ab3120..1ea9ae6aff3 100644 --- a/ios/IO.xcodeproj/project.pbxproj +++ b/ios/IO.xcodeproj/project.pbxproj @@ -484,7 +484,6 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-IO/Pods-IO-frameworks.sh", - "${PODS_ROOT}/../../node_modules/@pagopa/react-native-cie/ios/iociesdkios.framework", "${PODS_XCFRAMEWORKS_BUILD_DIR}/CieSDK/CieSDK.framework/CieSDK", "${PODS_XCFRAMEWORKS_BUILD_DIR}/IOWalletCBOR/IOWalletCBOR.framework/IOWalletCBOR", "${PODS_XCFRAMEWORKS_BUILD_DIR}/IOWalletProximity/IOWalletProximity.framework/IOWalletProximity", @@ -504,7 +503,6 @@ ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/iociesdkios.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CieSDK.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IOWalletCBOR.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/IOWalletProximity.framework", diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d7aa8226281..d15d82abc0d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2130,8 +2130,6 @@ PODS: - React - react-native-blob-util (0.15.0): - React-Core - - react-native-cie (1.5.0): - - React - react-native-config (1.4.5): - react-native-config/App (= 1.4.5) - react-native-config/App (1.4.5): @@ -3582,7 +3580,6 @@ DEPENDENCIES: - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - react-native-background-timer (from `../node_modules/react-native-background-timer`) - react-native-blob-util (from `../node_modules/react-native-blob-util`) - - "react-native-cie (from `../node_modules/@pagopa/react-native-cie`)" - react-native-config (from `../node_modules/react-native-config`) - "react-native-cookies (from `../node_modules/@react-native-cookies/cookies`)" - "react-native-document-picker (from `../node_modules/@react-native-documents/picker`)" @@ -3805,8 +3802,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-background-timer" react-native-blob-util: :path: "../node_modules/react-native-blob-util" - react-native-cie: - :path: "../node_modules/@pagopa/react-native-cie" react-native-config: :path: "../node_modules/react-native-config" react-native-cookies: @@ -4015,7 +4010,6 @@ SPEC CHECKSUMS: React-microtasksnativemodule: 6c4ee39a36958c39c97b074d28f360246a335e84 react-native-background-timer: 007ff829f79644caf2ed013e22f0563560336f86 react-native-blob-util: ce2014444133bd568c054bf58eece8375ae5ef3c - react-native-cie: e0e6414cdca0fe8ec3fcc622725d6c81981b7bf9 react-native-config: e588441fd919c50e75a1ae023763f760b5e3adfe react-native-cookies: d648ab7025833b977c0b19e142503034f5f29411 react-native-document-picker: 1661822ea34f02dfbcc86fb8a2f9a9acf75f0c4d diff --git a/package.json b/package.json index 2b85eb805f5..b79a45894a0 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,8 @@ "lint": "eslint . -c .eslintrc.js --ext .ts,.tsx", "lint-autofix": "eslint . -c .eslintrc.js --ext .ts,.tsx --fix", "check_urls": "python3 scripts/check_urls.py", - "cie-ios:prod": "mv node_modules/@pagopa/react-native-cie/.ios node_modules/@pagopa/react-native-cie/ios && mv node_modules/@pagopa/react-native-cie/.react-native-cie.podspec node_modules/@pagopa/react-native-cie/react-native-cie.podspec && cd ios && bundle exec pod install", - "cie-ios:dev": "mv node_modules/@pagopa/react-native-cie/ios node_modules/@pagopa/react-native-cie/.ios && mv node_modules/@pagopa/react-native-cie/react-native-cie.podspec node_modules/@pagopa/react-native-cie/.react-native-cie.podspec && cd ios && rm -rf Pods && bundle exec pod install", + "cie-ios:prod": "mv node_modules/@pagopa/react-native-cie/.ios node_modules/@pagopa/react-native-cie/ios && mv node_modules/@pagopa/react-native-cie/.react-native-cie.podspec node_modules/@pagopa/react-native-cie/react-native-cie.podspec && cd ios && bundle exec pod install && cd ..", + "cie-ios:dev": "mv node_modules/@pagopa/react-native-cie/ios node_modules/@pagopa/react-native-cie/.ios && mv node_modules/@pagopa/react-native-cie/react-native-cie.podspec node_modules/@pagopa/react-native-cie/.react-native-cie.podspec && cd ios && rm -rf Pods && NO_INTERNAL_MODULE=1 bundle exec pod install && cd ..", "cie-ios:ci": "mv node_modules/@pagopa/react-native-cie/.ios node_modules/@pagopa/react-native-cie/ios && mv node_modules/@pagopa/react-native-cie/.react-native-cie.podspec node_modules/@pagopa/react-native-cie/react-native-cie.podspec", "bundle:android-release": "node node_modules/react-native/local-cli/cli.js bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/", "generate": "./scripts/generate-api-models.sh", @@ -43,7 +43,8 @@ "remove_unused_locales": "ts-node --skip-project -O '{\"lib\":[\"es2015\"]}' scripts/remove-unused-locales.ts", "lollipop_checks:comment": "./scripts/toggle-comments-on-lollipop-checks.sh comment ./ts/sagas/startup.ts", "lollipop_checks:uncomment": "./scripts/toggle-comments-on-lollipop-checks.sh uncomment ./ts/sagas/startup.ts", - "prepare": "husky install" + "prepare": "husky install", + "dev:pod-install": "cd ios && NO_INTERNAL_MODULE=1 bundle exec pod install && cd .." }, "lint-staged": { "*.{ts,tsx}": [ diff --git a/react-native.config.js b/react-native.config.js index eed3218cafb..853dc6441f1 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -1,12 +1,14 @@ // "rnpm" is deprecated and support for it will be removed in next major version of the CLI. // Migration guide https://github.com/react-native-community/cli/blob/master/docs/configuration.md +const shouldExcludeInternalModule = process.env.NO_INTERNAL_MODULE === '1'; // eslint-disable-next-line functional/immutable-data module.exports = { dependencies: { "@pagopa/react-native-cie": { platforms: { - android: null // disable Android platform, other platforms will still autolink if provided + android: null, // disable Android platform, other platforms will still autolink if provided + ios: shouldExcludeInternalModule ? null : {} } } }, From ef8ab2b5d1ec8c3ee6671b9c1ca7885f23423549 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Thu, 5 Feb 2026 15:20:38 +0100 Subject: [PATCH 3/7] fixes android launch and removes unused deps --- ...e-pdf-thumbnail-npm-1.3.1-27dd544c32.patch | 13 ------- ios/Podfile.lock | 38 ------------------- package.json | 2 - react-native.config.js | 10 ++++- yarn.lock | 21 ---------- 5 files changed, 9 insertions(+), 75 deletions(-) delete mode 100644 .yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch diff --git a/.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch b/.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch deleted file mode 100644 index 5af3c2dbcb0..00000000000 --- a/.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/android/src/main/java/org/songsterq/pdfthumbnail/PdfThumbnailModule.kt b/android/src/main/java/org/songsterq/pdfthumbnail/PdfThumbnailModule.kt -index 921b5782b68b06d750795b5f86d63e4ec4bc62e6..60893b01087f80b9d8651cbbe99f43990be935c6 100644 ---- a/android/src/main/java/org/songsterq/pdfthumbnail/PdfThumbnailModule.kt -+++ b/android/src/main/java/org/songsterq/pdfthumbnail/PdfThumbnailModule.kt -@@ -98,7 +98,7 @@ class PdfThumbnailModule(reactContext: ReactApplicationContext) : - currentPage.close() - - // Some bitmaps have transparent background which results in a black thumbnail. Add a white background. -- val bitmapWhiteBG = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config) -+ val bitmapWhiteBG = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config!!) - val canvas = Canvas(bitmapWhiteBG) - canvas.drawBitmap(bitmap, 0f, 0f, null) - bitmap.recycle() diff --git a/ios/Podfile.lock b/ios/Podfile.lock index d15d82abc0d..e1bb7633a6a 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2261,34 +2261,6 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - react-native-pdf-thumbnail (1.3.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - react-native-safe-area-context (5.6.1): - boost - DoubleConversion @@ -2943,8 +2915,6 @@ PODS: - React-perflogger (= 0.81.5) - React-utils (= 0.81.5) - SocketRocket - - ReactNativeART (1.2.0): - - React - ReactNativeExceptionHandler (2.10.8): - React - RNBluetoothStateManager (1.3.5): @@ -3590,7 +3560,6 @@ DEPENDENCIES: - react-native-notifications-utils (from `../node_modules/react-native-notifications-utils`) - react-native-pager-view (from `../node_modules/react-native-pager-view`) - react-native-pdf (from `../node_modules/react-native-pdf`) - - react-native-pdf-thumbnail (from `../node_modules/react-native-pdf-thumbnail`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - react-native-screen-brightness (from `../node_modules/react-native-screen-brightness`) - "react-native-skia (from `../node_modules/@shopify/react-native-skia`)" @@ -3626,7 +3595,6 @@ DEPENDENCIES: - ReactAppDependencyProvider (from `build/generated/ios`) - ReactCodegen (from `build/generated/ios`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - "ReactNativeART (from `../node_modules/@react-native-community/art`)" - ReactNativeExceptionHandler (from `../node_modules/react-native-exception-handler`) - RNBluetoothStateManager (from `../node_modules/react-native-bluetooth-state-manager`) - RNCalendarEvents (from `../node_modules/react-native-calendar-events`) @@ -3822,8 +3790,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-pager-view" react-native-pdf: :path: "../node_modules/react-native-pdf" - react-native-pdf-thumbnail: - :path: "../node_modules/react-native-pdf-thumbnail" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" react-native-screen-brightness: @@ -3894,8 +3860,6 @@ EXTERNAL SOURCES: :path: build/generated/ios ReactCommon: :path: "../node_modules/react-native/ReactCommon" - ReactNativeART: - :path: "../node_modules/@react-native-community/art" ReactNativeExceptionHandler: :path: "../node_modules/react-native-exception-handler" RNBluetoothStateManager: @@ -4020,7 +3984,6 @@ SPEC CHECKSUMS: react-native-notifications-utils: 3e4bfc85db8610c150945472a8976a036a8931a7 react-native-pager-view: 5c3098839820aa73d75873e7b1a7eb9f119602b7 react-native-pdf: edc236298f13f1609e42d41e45b8b6ea88ed10f9 - react-native-pdf-thumbnail: 89dd3532effd7733a33229ce666fd02068dac985 react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 react-native-screen-brightness: 16a7b26d12d89654fc6a2e9ff1e55c1a4a10afcb react-native-skia: b60d0b9d9aea330baef956b7f015d0af2b42076d @@ -4056,7 +4019,6 @@ SPEC CHECKSUMS: ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 ReactCodegen: 6c26f8c25d0b5ae66f86a1cce1777076ac8bcbd8 ReactCommon: 5f0e5c09a64a2717215dd84380e1a747810406f2 - ReactNativeART: b0ebceda8689ce026fff56b2f820664029480a4e ReactNativeExceptionHandler: 6a2aace92f300a745c8b04461b9a99edd1d26cd6 RNBluetoothStateManager: 929f132d0dacf65cb4767a11e2803e47fdda9e73 RNCalendarEvents: f90f73666b6bcbb3cc8a491ffbb5e48c0db3de37 diff --git a/package.json b/package.json index b79a45894a0..fb7bfedf9a3 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,6 @@ "react-native-notifications-utils": "^0.3.0", "react-native-pager-view": "^7.0.1", "react-native-pdf": "7.0.3", - "react-native-pdf-thumbnail": "^1.3.1", "react-native-permissions": "^5.3.0", "react-native-push-notification": "^8.1.1", "react-native-qrcode-svg": "^6.3.12", @@ -268,7 +267,6 @@ "react-native-calendar-events@2.2.0": "patch:react-native-calendar-events@npm%3A2.2.0#./.yarn/patches/react-native-calendar-events-npm-2.2.0-7c2fb115c6.patch", "react-native-device-info@^14.0.4": "patch:react-native-device-info@npm%3A14.0.4#./.yarn/patches/react-native-device-info-npm-14.0.4-9bb10f6c3d.patch", "react-native-image-pan-zoom@^2.1.11": "patch:react-native-image-pan-zoom@npm%3A2.1.12#./.yarn/patches/react-native-image-pan-zoom-npm-2.1.12-83ba2c1dcc.patch", - "react-native-pdf-thumbnail@^1.3.1": "patch:react-native-pdf-thumbnail@npm%3A1.3.1#./.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch", "react-native-push-notification@^8.1.1": "patch:react-native-push-notification@npm%3A8.1.1#./.yarn/patches/react-native-push-notification-npm-8.1.1-bcb0d8a65e.patch", "react-native-screen-brightness@^2.0.0-alpha": "patch:react-native-screen-brightness@npm%3A2.0.0-alpha#./.yarn/patches/react-native-screen-brightness-npm-2.0.0-alpha-22c6aeb21e.patch", "react-native-webview@^13.13.5": "patch:react-native-webview@npm%3A13.13.5#./.yarn/patches/react-native-webview-npm-13.13.5-802657184f.patch", diff --git a/react-native.config.js b/react-native.config.js index 853dc6441f1..c7554805422 100644 --- a/react-native.config.js +++ b/react-native.config.js @@ -8,8 +8,16 @@ module.exports = { "@pagopa/react-native-cie": { platforms: { android: null, // disable Android platform, other platforms will still autolink if provided - ios: shouldExcludeInternalModule ? null : {} + ios: shouldExcludeInternalModule ? null : {} // Since we cannot use on local env or simulator, we disable autolinking when NO_INTERNAL_MODULE is set } + }, + // We can disable autolinking for art package since we don't use it. + // It is installed as a dependency of react-native-barcode-builder which is patched to use svg instead of art. + "@react-native-community/art": { + platforms: { + android: null, + ios: null + }, } }, assets: [ diff --git a/yarn.lock b/yarn.lock index 399e95e80f0..560fe842ab9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12742,7 +12742,6 @@ __metadata: react-native-notifications-utils: ^0.3.0 react-native-pager-view: ^7.0.1 react-native-pdf: 7.0.3 - react-native-pdf-thumbnail: ^1.3.1 react-native-permissions: ^5.3.0 react-native-push-notification: ^8.1.1 react-native-qrcode-svg: ^6.3.12 @@ -17993,26 +17992,6 @@ __metadata: languageName: node linkType: hard -"react-native-pdf-thumbnail@npm:1.3.1": - version: 1.3.1 - resolution: "react-native-pdf-thumbnail@npm:1.3.1" - peerDependencies: - react: "*" - react-native: "*" - checksum: c147435d74a677add6cfcad6590f76e9af044291a5a9582ffd82d544cf8147fea8337fb8a97824b84acba3d8b029ec610259dbbee8df32e3898923a99fc205f6 - languageName: node - linkType: hard - -"react-native-pdf-thumbnail@patch:react-native-pdf-thumbnail@npm%3A1.3.1#./.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch::locator=io%40workspace%3A.": - version: 1.3.1 - resolution: "react-native-pdf-thumbnail@patch:react-native-pdf-thumbnail@npm%3A1.3.1#./.yarn/patches/react-native-pdf-thumbnail-npm-1.3.1-27dd544c32.patch::version=1.3.1&hash=8b3cd5&locator=io%40workspace%3A." - peerDependencies: - react: "*" - react-native: "*" - checksum: 220e8e71ac3b8206659002d89fd87f91961fcbc1681133afca58b7b19d73670a006cdf5c7cd38a83c7c9a0614d5766b42a22c5111cae31977c576a501754a294 - languageName: node - linkType: hard - "react-native-pdf@npm:7.0.3": version: 7.0.3 resolution: "react-native-pdf@npm:7.0.3" From 5c9c3f7e8b2c0edc977bcb38ba3045c090528377 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Thu, 5 Feb 2026 15:35:35 +0100 Subject: [PATCH 4/7] Adds expo-screen-capture --- ios/Podfile.lock | 6 ++++++ package.json | 1 + ts/utils/hooks/usePreventScreenCapture.ts | 12 ++++++------ yarn.lock | 11 +++++++++++ 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e1bb7633a6a..3d8527d9578 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -75,6 +75,8 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga + - ExpoScreenCapture (8.0.9): + - ExpoModulesCore - fast_float (8.0.0) - FBLazyVector (0.81.5) - fmt (11.0.2) @@ -3497,6 +3499,7 @@ DEPENDENCIES: - ExpoFont (from `../node_modules/expo-font/ios`) - ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`) - ExpoModulesCore (from `../node_modules/expo-modules-core`) + - ExpoScreenCapture (from `../node_modules/expo-screen-capture/ios`) - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) @@ -3665,6 +3668,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-keep-awake/ios" ExpoModulesCore: :path: "../node_modules/expo-modules-core" + ExpoScreenCapture: + :path: "../node_modules/expo-screen-capture/ios" fast_float: :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" FBLazyVector: @@ -3916,6 +3921,7 @@ SPEC CHECKSUMS: ExpoFont: f543ce20a228dd702813668b1a07b46f51878d47 ExpoKeepAwake: 55f75eca6499bb9e4231ebad6f3e9cb8f99c0296 ExpoModulesCore: d86dab8a6c8f1184f9b0b0503ace93919882aa15 + ExpoScreenCapture: 73e5215ce972e245806c19a546ae0ffef33ead48 fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd diff --git a/package.json b/package.json index fb7bfedf9a3..d23963dffb5 100644 --- a/package.json +++ b/package.json @@ -97,6 +97,7 @@ "date-fns": "^1.29.0", "eslint-plugin-react-native": "^4.0.0", "expo": "^54.0.33", + "expo-screen-capture": "~8.0.9", "fp-ts": "^2.12.1", "front-matter": "^4.0.2", "hastscript": "^7.0.2", diff --git a/ts/utils/hooks/usePreventScreenCapture.ts b/ts/utils/hooks/usePreventScreenCapture.ts index 3a96789c1bd..2723aff4307 100644 --- a/ts/utils/hooks/usePreventScreenCapture.ts +++ b/ts/utils/hooks/usePreventScreenCapture.ts @@ -1,6 +1,6 @@ import { useFocusEffect } from "@react-navigation/native"; import { useCallback, useMemo, useRef } from "react"; -import RNScreenshotPrevent from "react-native-screenshot-prevent"; +import * as ScreenCapture from "expo-screen-capture"; import { v4 as uuidv4 } from "uuid"; import { isDevEnv } from "../environment"; @@ -9,14 +9,14 @@ const activeTags: Set = new Set(); const preventScreenCapture = (tag: string) => { if (!activeTags.has(tag)) { activeTags.add(tag); - RNScreenshotPrevent.enableSecureView(); + void ScreenCapture.preventScreenCaptureAsync(); } }; const allowScreenCapture = (tag: string) => { activeTags.delete(tag); if (activeTags.size === 0) { - RNScreenshotPrevent.disableSecureView(); + void ScreenCapture.allowScreenCaptureAsync(); } }; @@ -38,9 +38,9 @@ export function usePreventScreenCapture(key?: string) { useFocusEffect( useCallback(() => { - if (isDevEnv) { - return; - } + // if (isDevEnv) { + // return; + // } clearTimeout(timeoutRef.current); diff --git a/yarn.lock b/yarn.lock index 560fe842ab9..fb66a2c9fd3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10961,6 +10961,16 @@ __metadata: languageName: node linkType: hard +"expo-screen-capture@npm:~8.0.9": + version: 8.0.9 + resolution: "expo-screen-capture@npm:8.0.9" + peerDependencies: + expo: "*" + react: "*" + checksum: 2642315a7e56e63a55cf3c0f037dcf3ccd2e9b6b0e366de37d6865b057af23f72c429d0d352365c5c7c1c9d2247a416b96aad98c7058efdc1b37030450316b02 + languageName: node + linkType: hard + "expo-server@npm:^1.0.5": version: 1.0.5 resolution: "expo-server@npm:1.0.5" @@ -12693,6 +12703,7 @@ __metadata: eslint-plugin-react-native-a11y: ^3.3.0 eslint-plugin-sonarjs: ^0.11.0 expo: ^54.0.33 + expo-screen-capture: ~8.0.9 fp-ts: ^2.12.1 front-matter: ^4.0.2 fs-extra: ^7.0.0 From 82dc81a76c33c4614507fb43a416f73e8fcfa979 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Thu, 5 Feb 2026 16:01:19 +0100 Subject: [PATCH 5/7] Replaces react-native library --- .yarn/patches/patches.md | 8 - ...eenshot-prevent-npm-1.2.1-d115315590.patch | 1729 ----------------- ios/Podfile.lock | 33 - jestSetup.js | 2 +- package.json | 2 - .../MessageDetailsReminderExpiring.test.tsx | 2 +- .../PNActivationReminderBanner.test.tsx | 2 +- .../usePreventScreenCapture.test.tsx | 20 +- ts/utils/hooks/usePreventScreenCapture.ts | 15 +- yarn.lock | 21 - 10 files changed, 22 insertions(+), 1812 deletions(-) delete mode 100644 .yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch diff --git a/.yarn/patches/patches.md b/.yarn/patches/patches.md index 64320a7805c..770d441806d 100644 --- a/.yarn/patches/patches.md +++ b/.yarn/patches/patches.md @@ -82,14 +82,6 @@ Created on **19/05/2025** - Patch to fix a visualization error that prevented cards to be incorrectly rendered in Wallet Home Screen. -### react-native-screenshot-prevent-npm-1.2.1-d115315590.patch - -Created on **24/11/2025** - -#### Reason: - -- Patch to make the library ready for react-native new architecture - ### react-native-npm-0.81.5-d8232ef145.patch Created on **15/01/2026** diff --git a/.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch b/.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch deleted file mode 100644 index 60349ceeeaf..00000000000 --- a/.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch +++ /dev/null @@ -1,1729 +0,0 @@ -diff --git a/RNScreenshotPrevent.podspec b/RNScreenshotPrevent.podspec -index 5b8912dcd663e30b8dbd13b37f1ca7656b0b550d..30e50e1e1fcc7273959acdbb978cf3523ef8110e 100644 ---- a/RNScreenshotPrevent.podspec -+++ b/RNScreenshotPrevent.podspec -@@ -10,16 +10,29 @@ Pod::Spec.new do |s| - s.license = package['license'] - s.authors = package['author'] - s.homepage = package['homepage'] -- # s.license = { :type => "MIT", :file => "FILE_LICENSE" } -- s.platform = :ios, "9.0" -+ s.platform = :ios, "11.0" - s.source = { :git => "https://github.com/killserver/react-native-screenshot-prevent.git", :tag => "master" } -- s.source_files = "ios/**/*.{h,m}" -+ s.source_files = "ios/**/*.{h,m,mm}" - s.requires_arc = true - -+ install_modules_dependencies(s) - -- s.dependency "React" -- #s.dependency "others" -+ # Enable codegen for this library -+ if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then -+ s.compiler_flags = "-DRCT_NEW_ARCH_ENABLED=1" -+ s.pod_target_xcconfig = { -+ "HEADER_SEARCH_PATHS" => '"$(PODS_ROOT)/boost"', -+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17" -+ } - -+ s.dependency "React-Codegen" -+ s.dependency "RCT-Folly" -+ s.dependency "RCTRequired" -+ s.dependency "RCTTypeSafety" -+ s.dependency "ReactCommon/turbomodule/core" -+ else -+ s.dependency "React-Core" -+ end - end - - -\ No newline at end of file -diff --git a/android/build.gradle b/android/build.gradle -index 6ee6db648848012a47a1d95356c38d716ad29a15..30e7f5251365432ecf5d7a7007cb4e1712e749cc 100644 ---- a/android/build.gradle -+++ b/android/build.gradle -@@ -1,24 +1,22 @@ - apply plugin: 'com.android.library' -+apply plugin: 'com.facebook.react' - --buildscript { -- repositories { -- jcenter() -- } -- -- dependencies { -- classpath 'com.android.tools.build:gradle:1.3.1' -- } -+def isNewArchitectureEnabled() { -+ return rootProject.hasProperty("newArchEnabled") && rootProject.getProperty("newArchEnabled") == "true" - } - - def safeExtGet(prop, fallback) { - rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback - } - --def DEFAULT_COMPILE_SDK_VERSION = 23 --def DEFAULT_BUILD_TOOLS_VERSION = "23.0.1" --def DEFAULT_MIN_SDK_VERSION = 16 --def DEFAULT_TARGET_SDK_VERSION = 22 -+def DEFAULT_COMPILE_SDK_VERSION = 33 -+def DEFAULT_BUILD_TOOLS_VERSION = "33.0.0" -+def DEFAULT_MIN_SDK_VERSION = 21 -+def DEFAULT_TARGET_SDK_VERSION = 33 - -+react { -+ libraryName = "RNScreenshotPrevent" -+} - - android { - compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION) -@@ -29,14 +27,37 @@ android { - targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION) - versionCode 1 - versionName "1.0" -+ buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() -+ } -+ -+ buildTypes { -+ release { -+ minifyEnabled false -+ } - } - lintOptions { -- abortOnError false -+ disable 'GradleCompatible' -+ } -+ -+ compileOptions { -+ sourceCompatibility JavaVersion.VERSION_1_8 -+ targetCompatibility JavaVersion.VERSION_1_8 -+ } -+ -+ sourceSets { -+ main { -+ if (isNewArchitectureEnabled()) { -+ java.srcDirs += ['src/newArch/java'] -+ } else { -+ java.srcDirs += ['src/oldArch/java'] -+ } -+ } - } - } - - repositories { - mavenCentral() -+ google() - } - - dependencies { -diff --git a/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java b/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -deleted file mode 100644 -index d381e388ec81d0a456ea496891fc635fe48a863e..0000000000000000000000000000000000000000 ---- a/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -+++ /dev/null -@@ -1,183 +0,0 @@ -- --package com.killserver.screenshotprev; -- --import android.app.Activity; --import android.graphics.Bitmap; --import android.graphics.BitmapFactory; --import android.graphics.Color; --import android.view.ViewGroup; --import android.view.WindowManager; --import android.widget.RelativeLayout; --import android.widget.ImageView; -- --import com.facebook.react.bridge.ReactApplicationContext; --import com.facebook.react.bridge.LifecycleEventListener; --import com.facebook.react.bridge.ReactContextBaseJavaModule; --import com.facebook.react.bridge.ReactMethod; -- --import java.io.IOException; --import java.net.URL; -- --public class RNScreenshotPreventModule extends ReactContextBaseJavaModule implements LifecycleEventListener { -- -- private final ReactApplicationContext reactContext; -- private RelativeLayout overlayLayout; -- private boolean secureFlagWasSet; -- -- public RNScreenshotPreventModule(ReactApplicationContext reactContext) { -- super(reactContext); -- this.reactContext = reactContext; -- this.reactContext.addLifecycleEventListener(this); -- } -- -- @Override -- public String getName() { -- return "RNScreenshotPrevent"; -- } -- -- @ReactMethod -- public void enabled(boolean _enable) { -- if (this.reactContext.hasCurrentActivity()) { -- final Activity activity = this.reactContext.getCurrentActivity(); -- if (activity != null) { -- if (_enable) { -- activity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -- } -- }); -- } else { -- activity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -- } -- }); -- } -- } -- } -- } -- -- @ReactMethod -- public void enableSecureView(String imagePath) { -- if (this.reactContext.hasCurrentActivity()) { -- final Activity activity = this.reactContext.getCurrentActivity(); -- if (activity != null) { -- if (overlayLayout == null) { -- createOverlay(activity, imagePath); -- } -- activity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -- } -- }); -- } -- } -- } -- -- @ReactMethod -- public void disableSecureView() { -- if (this.reactContext.hasCurrentActivity()) { -- final Activity activity = this.reactContext.getCurrentActivity(); -- if (activity != null) { -- activity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- if (overlayLayout != null) { -- ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView().getRootView(); -- rootView.removeView(overlayLayout); -- overlayLayout = null; -- } -- activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -- } -- }); -- } -- } -- } -- -- private void createOverlay(Activity activity, String imagePath) { -- overlayLayout = new RelativeLayout(activity); -- overlayLayout.setBackgroundColor(Color.parseColor("#FFFFFF")); -- -- // Create an ImageView -- ImageView imageView = new ImageView(activity); -- RelativeLayout.LayoutParams imageParams = new RelativeLayout.LayoutParams( -- RelativeLayout.LayoutParams.MATCH_PARENT, -- RelativeLayout.LayoutParams.WRAP_CONTENT); -- imageParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); -- -- imageView.setLayoutParams(imageParams); -- -- // Set image resource -- Bitmap bitmap = decodeImageUrl(imagePath); -- -- if (bitmap != null) { -- int imageHeight = (int)(bitmap.getHeight() * ((float) activity.getResources().getDisplayMetrics().widthPixels / bitmap.getWidth())); -- Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, activity.getResources().getDisplayMetrics().widthPixels, imageHeight, true); -- imageView.setImageBitmap(scaledBitmap); -- } -- -- overlayLayout.addView(imageView); -- } -- -- @Override -- public void onHostResume() { -- Activity currentActivity = this.reactContext.getCurrentActivity(); -- if (currentActivity != null && overlayLayout != null) { -- currentActivity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- ViewGroup rootView = (ViewGroup) currentActivity.getWindow().getDecorView().getRootView(); -- rootView.removeView(overlayLayout); -- if (secureFlagWasSet) { -- currentActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -- secureFlagWasSet = false; -- } -- } -- }); -- } -- } -- -- @Override -- public void onHostPause() { -- Activity currentActivity = this.reactContext.getCurrentActivity(); -- if (currentActivity != null && overlayLayout != null) { -- currentActivity.runOnUiThread(new Runnable() { -- @Override -- public void run() { -- ViewGroup rootView = (ViewGroup) currentActivity.getWindow().getDecorView().getRootView(); -- RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( -- ViewGroup.LayoutParams.MATCH_PARENT, -- ViewGroup.LayoutParams.MATCH_PARENT); -- rootView.addView(overlayLayout, layoutParams); -- -- int flags = currentActivity.getWindow().getAttributes().flags; -- if ((flags & WindowManager.LayoutParams.FLAG_SECURE) != 0) { -- currentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -- secureFlagWasSet = true; -- } else { -- secureFlagWasSet = false; -- } -- } -- }); -- } -- } -- -- @Override -- public void onHostDestroy() { -- // Cleanup if needed -- } -- -- private Bitmap decodeImageUrl(String imagePath) { -- try { -- URL imageUrl = new URL(imagePath); -- Bitmap bitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream()); -- return bitmap; -- } catch (IOException e) { -- e.printStackTrace(); -- return null; -- } -- } --} -\ No newline at end of file -diff --git a/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventPackage.java b/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventPackage.java -index f853d05249d33d7ca405a2dcb4b528199be40f71..b26e7f7cddc6401a857cff9e44e9a0a142034ad9 100644 ---- a/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventPackage.java -+++ b/android/src/main/java/com/killserver/screenshotprev/RNScreenshotPreventPackage.java -@@ -1,29 +1,46 @@ -- - package com.killserver.screenshotprev; - --import java.util.Arrays; --import java.util.Collections; --import java.util.List; -- --import com.facebook.react.ReactPackage; -+import com.facebook.react.TurboReactPackage; - import com.facebook.react.bridge.NativeModule; - import com.facebook.react.bridge.ReactApplicationContext; --import com.facebook.react.uimanager.ViewManager; --import com.facebook.react.bridge.JavaScriptModule; -+import com.facebook.react.module.model.ReactModuleInfo; -+import com.facebook.react.module.model.ReactModuleInfoProvider; -+import com.facebook.react.turbomodule.core.interfaces.TurboModule; - --public class RNScreenshotPreventPackage implements ReactPackage { -- @Override -- public List createNativeModules(ReactApplicationContext reactContext) { -- return Arrays.asList(new RNScreenshotPreventModule(reactContext)); -- } -+import java.util.Collections; -+import java.util.List; -+import java.util.HashMap; -+import java.util.Map; -+ -+import javax.annotation.Nonnull; -+import javax.annotation.Nullable; - -- // Deprecated from RN 0.47 -- public List> createJSModules() { -- return Collections.emptyList(); -+public class RNScreenshotPreventPackage extends TurboReactPackage { -+ public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) { -+ if (name.equals(ScreenshotPreventImpl.NAME)) { -+ return new RNScreenshotPreventModule(reactContext); -+ } else { -+ return null; -+ } - } - - @Override -- public List createViewManagers(ReactApplicationContext reactContext) { -- return Collections.emptyList(); -+ public ReactModuleInfoProvider getReactModuleInfoProvider() { -+ return () -> { -+ final Map moduleInfos = new HashMap<>(); -+ boolean isTurboModule = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; -+ moduleInfos.put( -+ ScreenshotPreventImpl.NAME, -+ new ReactModuleInfo( -+ ScreenshotPreventImpl.NAME, -+ ScreenshotPreventImpl.NAME, -+ false, // canOverrideExistingModule -+ false, // needsEagerInit -+ false, // hasConstants -+ false, // isCxxModule -+ isTurboModule // isTurboModule -+ )); -+ return moduleInfos; -+ }; - } - } -\ No newline at end of file -diff --git a/android/src/main/java/com/killserver/screenshotprev/ScreenshotPreventImpl.java b/android/src/main/java/com/killserver/screenshotprev/ScreenshotPreventImpl.java -new file mode 100644 -index 0000000000000000000000000000000000000000..214a214fdb2762802174694ef2cd2056e87b1824 ---- /dev/null -+++ b/android/src/main/java/com/killserver/screenshotprev/ScreenshotPreventImpl.java -@@ -0,0 +1,162 @@ -+package com.killserver.screenshotprev; -+ -+import android.app.Activity; -+import android.graphics.Bitmap; -+import android.graphics.BitmapFactory; -+import android.graphics.Color; -+import android.view.ViewGroup; -+import android.view.WindowManager; -+import android.widget.RelativeLayout; -+import android.widget.ImageView; -+ -+import com.facebook.react.bridge.ReactApplicationContext; -+ -+import java.io.IOException; -+import java.net.URL; -+ -+/** -+ * Shared implementation for screenshot prevention functionality. -+ * This class contains the core logic used by both old and new architecture modules. -+ */ -+public class ScreenshotPreventImpl { -+ -+ public static final String NAME = "RNScreenshotPrevent"; -+ private static RelativeLayout overlayLayout; -+ private static boolean secureFlagWasSet; -+ -+ public static void enabled(boolean _enable, ReactApplicationContext reactContext) { -+ if (reactContext.hasCurrentActivity()) { -+ final Activity activity = reactContext.getCurrentActivity(); -+ if (activity != null) { -+ if (_enable) { -+ activity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -+ } -+ }); -+ } else { -+ activity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -+ } -+ }); -+ } -+ } -+ } -+ } -+ -+ public static void enableSecureView(String imagePath, ReactApplicationContext reactContext) { -+ if (reactContext.hasCurrentActivity()) { -+ final Activity activity = reactContext.getCurrentActivity(); -+ if (activity != null) { -+ if (overlayLayout == null) { -+ createOverlay(activity, imagePath); -+ } -+ activity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -+ } -+ }); -+ } -+ } -+ } -+ -+ public static void disableSecureView(ReactApplicationContext reactContext) { -+ if (reactContext.hasCurrentActivity()) { -+ final Activity activity = reactContext.getCurrentActivity(); -+ if (activity != null) { -+ activity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ if (overlayLayout != null) { -+ ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView().getRootView(); -+ rootView.removeView(overlayLayout); -+ overlayLayout = null; -+ } -+ activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -+ } -+ }); -+ } -+ } -+ } -+ -+ private static void createOverlay(Activity activity, String imagePath) { -+ overlayLayout = new RelativeLayout(activity); -+ overlayLayout.setBackgroundColor(Color.parseColor("#FFFFFF")); -+ -+ // Create an ImageView -+ ImageView imageView = new ImageView(activity); -+ RelativeLayout.LayoutParams imageParams = new RelativeLayout.LayoutParams( -+ RelativeLayout.LayoutParams.MATCH_PARENT, -+ RelativeLayout.LayoutParams.WRAP_CONTENT); -+ imageParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); -+ -+ imageView.setLayoutParams(imageParams); -+ -+ // Set image resource -+ Bitmap bitmap = decodeImageUrl(imagePath); -+ -+ if (bitmap != null) { -+ int imageHeight = (int)(bitmap.getHeight() * ((float) activity.getResources().getDisplayMetrics().widthPixels / bitmap.getWidth())); -+ Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, activity.getResources().getDisplayMetrics().widthPixels, imageHeight, true); -+ imageView.setImageBitmap(scaledBitmap); -+ } -+ -+ overlayLayout.addView(imageView); -+ } -+ -+ public static void onHostResume(ReactApplicationContext reactContext) { -+ Activity currentActivity = reactContext.getCurrentActivity(); -+ if (currentActivity != null && overlayLayout != null) { -+ currentActivity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ ViewGroup rootView = (ViewGroup) currentActivity.getWindow().getDecorView().getRootView(); -+ rootView.removeView(overlayLayout); -+ if (secureFlagWasSet) { -+ currentActivity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); -+ secureFlagWasSet = false; -+ } -+ } -+ }); -+ } -+ } -+ -+ public static void onHostPause(ReactApplicationContext reactContext) { -+ Activity currentActivity = reactContext.getCurrentActivity(); -+ if (currentActivity != null && overlayLayout != null) { -+ currentActivity.runOnUiThread(new Runnable() { -+ @Override -+ public void run() { -+ ViewGroup rootView = (ViewGroup) currentActivity.getWindow().getDecorView().getRootView(); -+ RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( -+ ViewGroup.LayoutParams.MATCH_PARENT, -+ ViewGroup.LayoutParams.MATCH_PARENT); -+ rootView.addView(overlayLayout, layoutParams); -+ -+ int flags = currentActivity.getWindow().getAttributes().flags; -+ if ((flags & WindowManager.LayoutParams.FLAG_SECURE) != 0) { -+ currentActivity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE); -+ secureFlagWasSet = true; -+ } else { -+ secureFlagWasSet = false; -+ } -+ } -+ }); -+ } -+ } -+ -+ private static Bitmap decodeImageUrl(String imagePath) { -+ try { -+ URL imageUrl = new URL(imagePath); -+ Bitmap bitmap = BitmapFactory.decodeStream(imageUrl.openConnection().getInputStream()); -+ return bitmap; -+ } catch (IOException e) { -+ e.printStackTrace(); -+ return null; -+ } -+ } -+} -diff --git a/android/src/newArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java b/android/src/newArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -new file mode 100644 -index 0000000000000000000000000000000000000000..b25f4aeb681219ad0a875cac89208998b45a09cf ---- /dev/null -+++ b/android/src/newArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -@@ -0,0 +1,63 @@ -+package com.killserver.screenshotprev; -+ -+import androidx.annotation.NonNull; -+import com.facebook.react.bridge.ReactApplicationContext; -+import com.facebook.react.module.annotations.ReactModule; -+ -+@ReactModule(name = ScreenshotPreventImpl.NAME) -+public class RNScreenshotPreventModule extends NativeRNScreenshotPreventSpec { -+ public RNScreenshotPreventModule(ReactApplicationContext reactContext) { -+ super(reactContext); -+ -+ reactContext.addLifecycleEventListener( -+ new com.facebook.react.bridge.LifecycleEventListener() { -+ @Override -+ public void onHostResume() { -+ ScreenshotPreventImpl.onHostResume(reactContext); -+ } -+ -+ @Override -+ public void onHostPause() { -+ ScreenshotPreventImpl.onHostPause(reactContext); -+ } -+ -+ @Override -+ public void onHostDestroy() { -+ // No-op: overlay/secure view state is managed by existing methods. -+ } -+ } -+ ); -+ } -+ -+ @Override -+ @NonNull -+ public String getName() { -+ return ScreenshotPreventImpl.NAME; -+ } -+ -+ @Override -+ public void enabled(boolean enable) { -+ ScreenshotPreventImpl.enabled(enable, getReactApplicationContext()); -+ } -+ -+ @Override -+ public void enableSecureView(String imagePath) { -+ ScreenshotPreventImpl.enableSecureView(imagePath, getReactApplicationContext()); -+ } -+ -+ @Override -+ public void disableSecureView() { -+ ScreenshotPreventImpl.disableSecureView(getReactApplicationContext()); -+ } -+ -+ @Override -+ public void addListener(String eventName) { -+ // Set up any upstream listeners or background tasks -+ // (Lifecycle listeners are anonymous and cannot be individually added here.) -+ } -+ @Override -+ public void removeListeners(double count) { -+ // Remove any upstream listeners or background tasks -+ // (Lifecycle listeners are anonymous and cannot be individually removed here.) -+ } -+} -\ No newline at end of file -diff --git a/android/src/oldArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java b/android/src/oldArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -new file mode 100644 -index 0000000000000000000000000000000000000000..e78f7265f2b1e0799dde3e63e6e36c206c9cfbfb ---- /dev/null -+++ b/android/src/oldArch/java/com/killserver/screenshotprev/RNScreenshotPreventModule.java -@@ -0,0 +1,52 @@ -+package com.killserver.screenshotprev; -+ -+import com.facebook.react.bridge.ReactApplicationContext; -+import com.facebook.react.bridge.LifecycleEventListener; -+import com.facebook.react.bridge.ReactContextBaseJavaModule; -+import com.facebook.react.bridge.ReactMethod; -+ -+public class RNScreenshotPreventModule extends ReactContextBaseJavaModule implements LifecycleEventListener { -+ -+ private final ReactApplicationContext reactContext; -+ -+ public RNScreenshotPreventModule(ReactApplicationContext reactContext) { -+ super(reactContext); -+ this.reactContext = reactContext; -+ this.reactContext.addLifecycleEventListener(this); -+ } -+ -+ @Override -+ public String getName() { -+ return ScreenshotPreventImpl.NAME; -+ } -+ -+ @ReactMethod -+ public void enabled(boolean _enable) { -+ ScreenshotPreventImpl.enabled(_enable, this.reactContext); -+ } -+ -+ @ReactMethod -+ public void enableSecureView(String imagePath) { -+ ScreenshotPreventImpl.enableSecureView(imagePath, this.reactContext); -+ } -+ -+ @ReactMethod -+ public void disableSecureView() { -+ ScreenshotPreventImpl.disableSecureView(this.reactContext); -+ } -+ -+ @Override -+ public void onHostResume() { -+ ScreenshotPreventImpl.onHostResume(this.reactContext); -+ } -+ -+ @Override -+ public void onHostPause() { -+ ScreenshotPreventImpl.onHostPause(this.reactContext); -+ } -+ -+ @Override -+ public void onHostDestroy() { -+ // Cleanup if needed -+ } -+} -\ No newline at end of file -diff --git a/ios/RNScreenshotPrevent.h b/ios/RNScreenshotPrevent.h -index 8c05c1aee3407d69f39b118556b33da5c53854b1..e4ccd701f55cb5b6bd7a19459a2d9dabcff2fe3a 100644 ---- a/ios/RNScreenshotPrevent.h -+++ b/ios/RNScreenshotPrevent.h -@@ -9,7 +9,15 @@ - #import - #endif - --@interface RNScreenshotPrevent : RCTEventEmitter -+#ifdef RCT_NEW_ARCH_ENABLED -+#import -+#endif -+ -+@interface RNScreenshotPrevent : RCTEventEmitter - - @end -- -diff --git a/ios/RNScreenshotPrevent.m b/ios/RNScreenshotPrevent.m -deleted file mode 100644 -index 37d55b5d4021c62e3adf8dd6c1a207a99c67b32e..0000000000000000000000000000000000000000 ---- a/ios/RNScreenshotPrevent.m -+++ /dev/null -@@ -1,204 +0,0 @@ --#import "RNScreenshotPrevent.h" --#import "UIImage+ImageEffects.h" -- --@implementation RNScreenshotPrevent { -- BOOL hasListeners; -- BOOL enabled; -- UIImageView *obfuscatingView; -- UITextField *secureField; -- --} -- --RCT_EXPORT_MODULE(); --- (NSArray *)supportedEvents { -- return @[@"userDidTakeScreenshot"]; --} -- --- (dispatch_queue_t)methodQueue --{ -- return dispatch_get_main_queue(); --} -- --#pragma mark - Lifecycle -- --- (void) startObserving { -- NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; -- // handle inactive event -- [center addObserver:self selector:@selector(handleAppStateResignActive) -- name:UIApplicationWillResignActiveNotification -- object:nil]; -- // handle active event -- [center addObserver:self selector:@selector(handleAppStateActive) -- name:UIApplicationDidBecomeActiveNotification -- object:nil]; -- // handle screenshot taken event -- [center addObserver:self selector:@selector(handleAppScreenshotNotification) -- name:UIApplicationUserDidTakeScreenshotNotification -- object:nil]; -- -- hasListeners = TRUE; --} -- --- (void) stopObserving { -- [[NSNotificationCenter defaultCenter] removeObserver:self]; -- -- hasListeners = FALSE; --} -- --#pragma mark - App Notification Methods -- --/** displays blurry view when app becomes inactive */ --- (void)handleAppStateResignActive { -- if (self->enabled) { -- UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; -- UIImageView *blurredScreenImageView = [[UIImageView alloc] initWithFrame:keyWindow.bounds]; -- -- UIGraphicsBeginImageContext(keyWindow.bounds.size); -- [keyWindow drawViewHierarchyInRect:keyWindow.frame afterScreenUpdates:NO]; -- UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); -- UIGraphicsEndImageContext(); -- -- blurredScreenImageView.image = [viewImage applyLightEffect]; -- -- self->obfuscatingView = blurredScreenImageView; -- [keyWindow addSubview:self->obfuscatingView]; -- } --} -- --/** removes blurry view when app becomes active */ --- (void)handleAppStateActive { -- if (self->obfuscatingView) { -- [UIView animateWithDuration: 0.3 -- animations: ^ { -- self->obfuscatingView.alpha = 0; -- } -- completion: ^(BOOL finished) { -- [self->obfuscatingView removeFromSuperview]; -- self->obfuscatingView = nil; -- } -- ]; -- } --} -- --/** sends screenshot taken event into app */ --- (void) handleAppScreenshotNotification { -- // only send events when we have some listeners -- if(hasListeners) { -- [self sendEventWithName:@"userDidTakeScreenshot" body:nil]; -- } --} -- --+(BOOL) requiresMainQueueSetup --{ -- return YES; --} -- --CGSize CGSizeAspectFit(const CGSize aspectRatio, const CGSize boundingSize) --{ -- CGSize aspectFitSize = CGSizeMake(boundingSize.width, boundingSize.height); -- float mW = boundingSize.width / aspectRatio.width; -- float mH = boundingSize.height / aspectRatio.height; -- if( mH < mW ) -- aspectFitSize.width = mH * aspectRatio.width; -- else if( mW < mH ) -- aspectFitSize.height = mW * aspectRatio.height; -- return aspectFitSize; --} -- --CGSize CGSizeAspectFill(const CGSize aspectRatio, const CGSize minimumSize) --{ -- CGSize aspectFillSize = CGSizeMake(minimumSize.width, minimumSize.height); -- float mW = minimumSize.width / aspectRatio.width; -- float mH = minimumSize.height / aspectRatio.height; -- if( mH > mW ) -- aspectFillSize.width = mH * aspectRatio.width; -- else if( mW > mH ) -- aspectFillSize.height = mW * aspectRatio.height; -- return aspectFillSize; --} -- -- --/** -- * creates secure text field inside rootView of the app -- * taken from https://stackoverflow.com/questions/18680028/prevent-screen-capture-in-an-ios-app -- * -- * converted to ObjC and modified to get it working with RCT -- */ ---(void) addSecureTextFieldToView:(UIView *) view :(NSString *) imagePath { -- -- UIView *rootView = [UIApplication sharedApplication].keyWindow.rootViewController.view; -- -- -- // fixes safe-area -- secureField = [[UITextField alloc] initWithFrame:rootView.frame]; -- secureField.secureTextEntry = TRUE; -- secureField.userInteractionEnabled = FALSE; -- -- if (imagePath && ![imagePath isEqualToString:@""]) { -- UIView * imgView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, rootView.frame.size.width, rootView.frame.size.height)]; -- NSURL *url = [NSURL URLWithString:imagePath]; -- NSData *data = [NSData dataWithContentsOfURL:url]; -- UIImage *img = [[UIImage alloc] initWithData:data]; -- -- CGSize sizeBeingScaledTo = CGSizeAspectFill(img.size, imgView.frame.size); -- -- // redraw the image to fit the screen size -- UIGraphicsBeginImageContextWithOptions(imgView.frame.size, NO, 0.f); -- -- float offsetX = (imgView.frame.size.width - sizeBeingScaledTo.width) / 2; -- float offsety = (imgView.frame.size.height - sizeBeingScaledTo.height) / 2; -- -- -- [img drawInRect:CGRectMake(offsetX, offsety, sizeBeingScaledTo.width, sizeBeingScaledTo.height)]; -- UIImage * resultImage = UIGraphicsGetImageFromCurrentImageContext(); -- UIGraphicsEndImageContext(); -- -- secureField.backgroundColor = [UIColor colorWithPatternImage:resultImage]; -- } -- -- [view sendSubviewToBack:secureField]; -- [view addSubview:secureField]; -- [view.layer.superlayer addSublayer:secureField.layer]; -- [[secureField.layer.sublayers lastObject] addSublayer:view.layer]; --} -- --// TODO: not working now, fix crash on _UITextFieldCanvasView contenttViewInvalidated: unrecognized selector sent to instance ---(void) removeSecureTextFieldFromView:(UIView *) view { -- for(UITextField *subview in view.subviews){ -- if([subview isMemberOfClass:[UITextField class]]) { -- if(subview.secureTextEntry == TRUE) { -- [subview removeFromSuperview]; -- subview.secureTextEntry = FALSE; -- secureField.userInteractionEnabled = TRUE; -- } -- } -- } --} -- --#pragma mark - Public API -- --RCT_EXPORT_METHOD(enabled:(BOOL) _enable) { -- self->enabled = _enable; --} -- --/** adds secure textfield view */ --RCT_EXPORT_METHOD(enableSecureView: (NSString *)imagePath) { -- if(secureField.secureTextEntry == false) { -- UIView *view = [UIApplication sharedApplication].keyWindow.rootViewController.view; -- for(UIView *subview in view.subviews) { -- [self addSecureTextFieldToView:subview :imagePath]; -- } -- } --} -- --/** removes secure textfield from the view */ --RCT_EXPORT_METHOD(disableSecureView) { -- secureField.secureTextEntry = false; -- UIView *view = [UIApplication sharedApplication].keyWindow.rootViewController.view; -- for(UIView *subview in view.subviews) { -- [self removeSecureTextFieldFromView:subview]; -- } --} -- -- --@end -diff --git a/ios/RNScreenshotPrevent.mm b/ios/RNScreenshotPrevent.mm -new file mode 100644 -index 0000000000000000000000000000000000000000..7acdf8b8f970653d7e9387535d89f01af60fd92e ---- /dev/null -+++ b/ios/RNScreenshotPrevent.mm -@@ -0,0 +1,217 @@ -+#import "RNScreenshotPrevent.h" -+#import "UIImage+ImageEffects.h" -+ -+#ifdef RCT_NEW_ARCH_ENABLED -+#import -+#import -+#import -+#endif -+ -+@implementation RNScreenshotPrevent { -+ BOOL hasListeners; -+ BOOL enabled; -+ UIImageView *obfuscatingView; -+ UITextField *secureField; -+ -+} -+ -+RCT_EXPORT_MODULE(); -+- (NSArray *)supportedEvents { -+ return @[@"userDidTakeScreenshot"]; -+} -+ -+- (dispatch_queue_t)methodQueue -+{ -+ return dispatch_get_main_queue(); -+} -+ -+#pragma mark - Lifecycle -+ -+- (void) startObserving { -+ NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; -+ // handle inactive event -+ [center addObserver:self selector:@selector(handleAppStateResignActive) -+ name:UIApplicationWillResignActiveNotification -+ object:nil]; -+ // handle active event -+ [center addObserver:self selector:@selector(handleAppStateActive) -+ name:UIApplicationDidBecomeActiveNotification -+ object:nil]; -+ // handle screenshot taken event -+ [center addObserver:self selector:@selector(handleAppScreenshotNotification) -+ name:UIApplicationUserDidTakeScreenshotNotification -+ object:nil]; -+ -+ hasListeners = TRUE; -+} -+ -+- (void) stopObserving { -+ [[NSNotificationCenter defaultCenter] removeObserver:self]; -+ -+ hasListeners = FALSE; -+} -+ -+#pragma mark - App Notification Methods -+ -+/** displays blurry view when app becomes inactive */ -+- (void)handleAppStateResignActive { -+ if (self->enabled) { -+ UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow; -+ UIImageView *blurredScreenImageView = [[UIImageView alloc] initWithFrame:keyWindow.bounds]; -+ -+ UIGraphicsBeginImageContext(keyWindow.bounds.size); -+ [keyWindow drawViewHierarchyInRect:keyWindow.frame afterScreenUpdates:NO]; -+ UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); -+ UIGraphicsEndImageContext(); -+ -+ blurredScreenImageView.image = [viewImage applyLightEffect]; -+ -+ self->obfuscatingView = blurredScreenImageView; -+ [keyWindow addSubview:self->obfuscatingView]; -+ } -+} -+ -+/** removes blurry view when app becomes active */ -+- (void)handleAppStateActive { -+ if (self->obfuscatingView) { -+ [UIView animateWithDuration: 0.3 -+ animations: ^ { -+ self->obfuscatingView.alpha = 0; -+ } -+ completion: ^(BOOL finished) { -+ [self->obfuscatingView removeFromSuperview]; -+ self->obfuscatingView = nil; -+ } -+ ]; -+ } -+} -+ -+/** sends screenshot taken event into app */ -+- (void) handleAppScreenshotNotification { -+ // only send events when we have some listeners -+ if(hasListeners) { -+ [self sendEventWithName:@"userDidTakeScreenshot" body:nil]; -+ } -+} -+ -++(BOOL) requiresMainQueueSetup -+{ -+ return YES; -+} -+ -+CGSize CGSizeAspectFit(const CGSize aspectRatio, const CGSize boundingSize) -+{ -+ CGSize aspectFitSize = CGSizeMake(boundingSize.width, boundingSize.height); -+ float mW = boundingSize.width / aspectRatio.width; -+ float mH = boundingSize.height / aspectRatio.height; -+ if( mH < mW ) -+ aspectFitSize.width = mH * aspectRatio.width; -+ else if( mW < mH ) -+ aspectFitSize.height = mW * aspectRatio.height; -+ return aspectFitSize; -+} -+ -+CGSize CGSizeAspectFill(const CGSize aspectRatio, const CGSize minimumSize) -+{ -+ CGSize aspectFillSize = CGSizeMake(minimumSize.width, minimumSize.height); -+ float mW = minimumSize.width / aspectRatio.width; -+ float mH = minimumSize.height / aspectRatio.height; -+ if( mH > mW ) -+ aspectFillSize.width = mH * aspectRatio.width; -+ else if( mW > mH ) -+ aspectFillSize.height = mW * aspectRatio.height; -+ return aspectFillSize; -+} -+ -+ -+/** -+ * creates secure text field inside rootView of the app -+ * taken from https://stackoverflow.com/questions/18680028/prevent-screen-capture-in-an-ios-app -+ * -+ * converted to ObjC and modified to get it working with RCT -+ */ -+-(void) addSecureTextFieldToView:(UIView *) view :(NSString *) imagePath { -+ -+ UIView *rootView = [UIApplication sharedApplication].keyWindow.rootViewController.view; -+ -+ -+ // fixes safe-area -+ secureField = [[UITextField alloc] initWithFrame:rootView.frame]; -+ secureField.secureTextEntry = TRUE; -+ secureField.userInteractionEnabled = FALSE; -+ -+ if (imagePath && ![imagePath isEqualToString:@""]) { -+ UIView * imgView = [[UIView alloc] initWithFrame:CGRectMake(0.f, 0.f, rootView.frame.size.width, rootView.frame.size.height)]; -+ NSURL *url = [NSURL URLWithString:imagePath]; -+ NSData *data = [NSData dataWithContentsOfURL:url]; -+ UIImage *img = [[UIImage alloc] initWithData:data]; -+ -+ CGSize sizeBeingScaledTo = CGSizeAspectFill(img.size, imgView.frame.size); -+ -+ // redraw the image to fit the screen size -+ UIGraphicsBeginImageContextWithOptions(imgView.frame.size, NO, 0.f); -+ -+ float offsetX = (imgView.frame.size.width - sizeBeingScaledTo.width) / 2; -+ float offsety = (imgView.frame.size.height - sizeBeingScaledTo.height) / 2; -+ -+ -+ [img drawInRect:CGRectMake(offsetX, offsety, sizeBeingScaledTo.width, sizeBeingScaledTo.height)]; -+ UIImage * resultImage = UIGraphicsGetImageFromCurrentImageContext(); -+ UIGraphicsEndImageContext(); -+ -+ secureField.backgroundColor = [UIColor colorWithPatternImage:resultImage]; -+ } -+ -+ [view sendSubviewToBack:secureField]; -+ [view addSubview:secureField]; -+ [view.layer.superlayer addSublayer:secureField.layer]; -+ [[secureField.layer.sublayers lastObject] addSublayer:view.layer]; -+} -+ -+// TODO: not working now, fix crash on _UITextFieldCanvasView contenttViewInvalidated: unrecognized selector sent to instance -+-(void) removeSecureTextFieldFromView:(UIView *) view { -+ for(UITextField *subview in view.subviews){ -+ if([subview isMemberOfClass:[UITextField class]]) { -+ if(subview.secureTextEntry == TRUE) { -+ [subview removeFromSuperview]; -+ subview.secureTextEntry = FALSE; -+ secureField.userInteractionEnabled = TRUE; -+ } -+ } -+ } -+} -+ -+#pragma mark - Public API -+ -+RCT_EXPORT_METHOD(enabled:(BOOL) _enable) { -+ self->enabled = _enable; -+} -+ -+/** adds secure textfield view */ -+RCT_EXPORT_METHOD(enableSecureView: (NSString *)imagePath) { -+ if(secureField.secureTextEntry == false) { -+ UIView *view = [UIApplication sharedApplication].keyWindow.rootViewController.view; -+ for(UIView *subview in view.subviews) { -+ [self addSecureTextFieldToView:subview :imagePath]; -+ } -+ } -+} -+ -+/** removes secure textfield from the view */ -+RCT_EXPORT_METHOD(disableSecureView) { -+ secureField.secureTextEntry = false; -+ UIView *view = [UIApplication sharedApplication].keyWindow.rootViewController.view; -+ for(UIView *subview in view.subviews) { -+ [self removeSecureTextFieldFromView:subview]; -+ } -+} -+ -+#ifdef RCT_NEW_ARCH_ENABLED -+- (std::shared_ptr)getTurboModule: -+ (const facebook::react::ObjCTurboModule::InitParams &)params -+{ -+ return std::make_shared(params); -+} -+#endif -+ -+@end -diff --git a/ios/UIImage+ImageEffects.h b/ios/UIImage+ImageEffects.h -index 3e83ea833329b8093919b8d222adeccc5c329f23..9cd9be3ffffac3eaafc053bd15ad8c7b69c8c5f9 100644 ---- a/ios/UIImage+ImageEffects.h -+++ b/ios/UIImage+ImageEffects.h -@@ -2,14 +2,14 @@ - File: UIImage+ImageEffects.h - Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code you’ll want to look out to find out how to use vImage to efficiently calculate a blur. - Version: 1.0 -- -+ - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. -- -+ - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the -@@ -25,13 +25,13 @@ - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. -- -+ - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. -- -+ - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -@@ -40,24 +40,24 @@ - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -- -+ - Copyright (C) 2013 Apple Inc. All Rights Reserved. -- -- -+ -+ - Copyright © 2013 Apple Inc. All rights reserved. - WWDC 2013 License -- -+ - NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013 - Session. Please refer to the applicable WWDC 2013 Session for further - information. -- -+ - IMPORTANT: This Apple software is supplied to you by Apple Inc. - ("Apple") in consideration of your agreement to the following terms, and - your use, installation, modification or redistribution of this Apple - software constitutes acceptance of these terms. If you do not agree with - these terms, please do not use, install, modify or redistribute this - Apple software. -- -+ - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a non-exclusive license, under - Apple's copyrights in this original Apple software (the "Apple -@@ -73,13 +73,13 @@ - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. -- -+ - The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES - NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE - IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. -- -+ - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -@@ -88,12 +88,16 @@ - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. -- -+ - EA1002 - 5/3/2013 - */ - --@import UIKit; -+#if __has_include("UIKit.h") -+#import "UIKit.h" -+#else -+#import -+#endif - - @interface UIImage (ImageEffects) - -diff --git a/lib/module/NativeRNScreenshotPrevent.js b/lib/module/NativeRNScreenshotPrevent.js -new file mode 100644 -index 0000000000000000000000000000000000000000..b26eeb7e27616b656f97935a0b806f3fb098c379 ---- /dev/null -+++ b/lib/module/NativeRNScreenshotPrevent.js -@@ -0,0 +1,3 @@ -+import { TurboModuleRegistry } from 'react-native'; -+export default TurboModuleRegistry.get('RNScreenshotPrevent'); -+//# sourceMappingURL=NativeRNScreenshotPrevent.js.map -\ No newline at end of file -diff --git a/lib/module/NativeRNScreenshotPrevent.js.map b/lib/module/NativeRNScreenshotPrevent.js.map -new file mode 100644 -index 0000000000000000000000000000000000000000..2f29d6b6f11884e3b1520b7266969a986451809d ---- /dev/null -+++ b/lib/module/NativeRNScreenshotPrevent.js.map -@@ -0,0 +1 @@ -+{"version":3,"names":["TurboModuleRegistry","get"],"sources":["NativeRNScreenshotPrevent.ts"],"sourcesContent":["import type { TurboModule } from 'react-native';\nimport { TurboModuleRegistry } from 'react-native';\n\nexport interface Spec extends TurboModule {\n\tenabled(enable: boolean): void;\n\tenableSecureView(imagePath: string): void;\n\tdisableSecureView(): void;\n\n\t// Required methods for event emitter support\n\taddListener(eventName: string): void;\n\tremoveListeners(count: number): void;\n}\n\nexport default TurboModuleRegistry.get('RNScreenshotPrevent');\n"],"mappings":"AACA,SAASA,mBAAmB,QAAQ,cAAc;AAYlD,eAAeA,mBAAmB,CAACC,GAAG,CAAO,qBAAqB,CAAC","ignoreList":[]} -\ No newline at end of file -diff --git a/lib/module/index.d.js.map b/lib/module/index.d.js.map -index d2a63bfab9856cc1eb68ec0c532699c4685f3131..272420a2104715362cfa090aa2099b25a736d0b1 100644 ---- a/lib/module/index.d.js.map -+++ b/lib/module/index.d.js.map -@@ -1 +1 @@ --{"version":3,"names":[],"sources":["index.d.ts"],"sourcesContent":["declare module 'react-native-screenshot-prevent' {\r\n export function enabled(value: boolean): void\r\n export function enableSecureView(imagePath?: string): void;\r\n export function disableSecureView(): void;\r\n export function usePreventScreenshot(): void;\r\n export function useDisableSecureView(): void;\r\n export function addListener(fn: Function): void;\r\n}"],"mappings":"","ignoreList":[]} -\ No newline at end of file -+{"version":3,"names":[],"sources":["index.d.ts"],"sourcesContent":["declare module 'react-native-screenshot-prevent' {\n\texport function enabled(value: boolean): void;\n\texport function enableSecureView(imagePath?: string): void;\n\texport function disableSecureView(): void;\n\texport function usePreventScreenshot(): void;\n\texport function useDisableSecureView(): void;\n\texport function addListener(fn: Function): void;\n}\n"],"mappings":"","ignoreList":[]} -\ No newline at end of file -diff --git a/lib/module/index.js b/lib/module/index.js -index 7302ec7dcd769b9ad4d87b4bdc6130d3c547d51f..70d4e669868a996d6d6cf7c41e23a827d51f2190 100644 ---- a/lib/module/index.js -+++ b/lib/module/index.js -@@ -1,44 +1,56 @@ - import { NativeModules, NativeEventEmitter, Platform } from 'react-native'; - import { useEffect } from 'react'; --let addListen, RNScreenshotPrevent; --if (Platform.OS !== "web") { -- const { -- RNScreenshotPrevent: RNScreenshotPreventNative -- } = NativeModules; -- RNScreenshotPrevent = { -- ...RNScreenshotPreventNative, -- enableSecureView: function enableSecureView(imagePath = "") { -- RNScreenshotPreventNative.enableSecureView(imagePath); -- } -- }; -- const eventEmitter = new NativeEventEmitter(RNScreenshotPrevent); -- -- /** -- * subscribes to userDidTakeScreenshot event -- * @param {function} callback handler -- * @returns {function} unsubscribe fn -- */ -- addListen = fn => { -- if (typeof fn !== 'function') { -- console.error('RNScreenshotPrevent: addListener requires valid callback function'); -- return { -- remove: () => { -- console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); -+import NativeScreenshotPrevent from './NativeRNScreenshotPrevent'; -+let addListen; -+let RNScreenshotPrevent = null; -+if (Platform.OS !== 'web') { -+ // Try to use TurboModule first, fallback to legacy bridge -+ const nativeModule = NativeScreenshotPrevent !== null && NativeScreenshotPrevent !== void 0 ? NativeScreenshotPrevent : NativeModules.RNScreenshotPrevent; -+ if (nativeModule) { -+ RNScreenshotPrevent = new Proxy(nativeModule, { -+ get(target, prop) { -+ if (prop === 'enableSecureView') { -+ return (imagePath = '') => { -+ target.enableSecureView(imagePath); -+ }; - } -- }; -- } -- return eventEmitter.addListener("userDidTakeScreenshot", fn); -- }; -+ const value = target[prop]; -+ return typeof value === 'function' ? value.bind(target) : value; -+ } -+ }); -+ const eventEmitter = new NativeEventEmitter(nativeModule); -+ addListen = fn => { -+ if (typeof fn !== 'function') { -+ console.error('RNScreenshotPrevent: addListener requires valid callback function'); -+ return { -+ remove: () => { -+ console.error('RNScreenshotPrevent: remove not work because addListener requires valid callback function'); -+ } -+ }; -+ } -+ return eventEmitter.addListener('userDidTakeScreenshot', fn); -+ }; -+ } else { -+ console.warn('RNScreenshotPrevent: Native module not found'); -+ RNScreenshotPrevent = { -+ enabled: () => {}, -+ enableSecureView: () => {}, -+ disableSecureView: () => {} -+ }; -+ addListen = () => ({ -+ remove: () => {} -+ }); -+ } - } else { - RNScreenshotPrevent = { - enabled: enabled => { -- console.warn("RNScreenshotPrevent: enabled not work in web. value: " + enabled); -+ console.warn('RNScreenshotPrevent: enabled not work in web. value: ', enabled); - }, -- enableSecureView: (imagePath = "") => { -- console.warn("RNScreenshotPrevent: enableSecureView not work in web." + (!!imagePath ? " send: " + imagePath : "")); -+ enableSecureView: (imagePath = '') => { -+ console.warn('RNScreenshotPrevent: enableSecureView not work in web.', !!imagePath ? `send: ${imagePath}` : ''); - }, - disableSecureView: () => { -- console.warn("RNScreenshotPrevent: disableSecureView not work in web"); -+ console.warn('RNScreenshotPrevent: disableSecureView not work in web'); - } - }; - addListen = fn => { -@@ -46,37 +58,51 @@ if (Platform.OS !== "web") { - console.error('RNScreenshotPrevent: addListener requires valid callback function'); - return { - remove: () => { -- console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); -+ console.error('RNScreenshotPrevent: remove not work because addListener requires valid callback function'); - } - }; - } -- console.warn("RNScreenshotPrevent: addListener not work in web"); -+ console.warn('RNScreenshotPrevent: addListener not work in web'); - return { - remove: () => { -- console.warn("RNScreenshotPrevent: remove addListener not work in web"); -+ console.warn('RNScreenshotPrevent: remove addListener not work in web'); - } - }; - }; - } - export const usePreventScreenshot = () => { - useEffect(() => { -- RNScreenshotPrevent.enabled(true); -+ var _RNScreenshotPrevent; -+ (_RNScreenshotPrevent = RNScreenshotPrevent) === null || _RNScreenshotPrevent === void 0 || _RNScreenshotPrevent.enabled(true); - return () => { -- RNScreenshotPrevent.enabled(false); -+ var _RNScreenshotPrevent2; -+ (_RNScreenshotPrevent2 = RNScreenshotPrevent) === null || _RNScreenshotPrevent2 === void 0 || _RNScreenshotPrevent2.enabled(false); - }; - }, []); - }; --export const useDisableSecureView = (imagePath = "") => { -+export const useDisableSecureView = (imagePath = '') => { - useEffect(() => { -- RNScreenshotPrevent.enableSecureView(imagePath); -+ var _RNScreenshotPrevent3; -+ (_RNScreenshotPrevent3 = RNScreenshotPrevent) === null || _RNScreenshotPrevent3 === void 0 || _RNScreenshotPrevent3.enableSecureView(imagePath); - return () => { -- RNScreenshotPrevent.disableSecureView(); -+ var _RNScreenshotPrevent4; -+ (_RNScreenshotPrevent4 = RNScreenshotPrevent) === null || _RNScreenshotPrevent4 === void 0 || _RNScreenshotPrevent4.disableSecureView(); - }; -+ // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - }; --export const enabled = RNScreenshotPrevent.enabled; --export const enableSecureView = RNScreenshotPrevent.enableSecureView; --export const disableSecureView = RNScreenshotPrevent.disableSecureView; -+export const enabled = enable => { -+ var _RNScreenshotPrevent5; -+ return (_RNScreenshotPrevent5 = RNScreenshotPrevent) === null || _RNScreenshotPrevent5 === void 0 ? void 0 : _RNScreenshotPrevent5.enabled(enable); -+}; -+export const enableSecureView = imagePath => { -+ var _RNScreenshotPrevent6; -+ return (_RNScreenshotPrevent6 = RNScreenshotPrevent) === null || _RNScreenshotPrevent6 === void 0 ? void 0 : _RNScreenshotPrevent6.enableSecureView(imagePath !== null && imagePath !== void 0 ? imagePath : ''); -+}; -+export const disableSecureView = () => { -+ var _RNScreenshotPrevent7; -+ return (_RNScreenshotPrevent7 = RNScreenshotPrevent) === null || _RNScreenshotPrevent7 === void 0 ? void 0 : _RNScreenshotPrevent7.disableSecureView(); -+}; - export const addListener = addListen; - export default RNScreenshotPrevent; - //# sourceMappingURL=index.js.map -\ No newline at end of file -diff --git a/lib/module/index.js.map b/lib/module/index.js.map -index d1900bcec3995691c2462b6395f167b89897c158..b818f6c7dcd53312c22a20891d95378dfb32cd86 100644 ---- a/lib/module/index.js.map -+++ b/lib/module/index.js.map -@@ -1 +1 @@ --{"version":3,"names":["NativeModules","NativeEventEmitter","Platform","useEffect","addListen","RNScreenshotPrevent","OS","RNScreenshotPreventNative","enableSecureView","imagePath","eventEmitter","fn","console","error","remove","addListener","enabled","warn","disableSecureView","usePreventScreenshot","useDisableSecureView"],"sources":["index.ts"],"sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\r\nimport { useEffect } from 'react';\r\n\r\ntype FN = (resp: any) => void\r\ntype Return = {\r\n readonly remove: () => void\r\n}\r\nlet addListen: any, RNScreenshotPrevent: any;\r\nif (Platform.OS !== \"web\") {\r\n const { RNScreenshotPrevent: RNScreenshotPreventNative } = NativeModules;\r\n RNScreenshotPrevent = {\r\n ...RNScreenshotPreventNative,\r\n enableSecureView: function enableSecureView(imagePath: string = \"\") {\r\n RNScreenshotPreventNative.enableSecureView(imagePath)\r\n }\r\n }\r\n const eventEmitter = new NativeEventEmitter(RNScreenshotPrevent);\r\n\r\n /**\r\n * subscribes to userDidTakeScreenshot event\r\n * @param {function} callback handler\r\n * @returns {function} unsubscribe fn\r\n */\r\n addListen = (fn: FN): Return => {\r\n if (typeof (fn) !== 'function') {\r\n console.error('RNScreenshotPrevent: addListener requires valid callback function');\r\n return {\r\n remove: (): void => {\r\n console.error(\"RNScreenshotPrevent: remove not work because addListener requires valid callback function\");\r\n }\r\n };\r\n }\r\n\r\n return eventEmitter.addListener(\"userDidTakeScreenshot\", fn);\r\n }\r\n} else {\r\n RNScreenshotPrevent = {\r\n enabled: (enabled: boolean): void => {\r\n console.warn(\"RNScreenshotPrevent: enabled not work in web. value: \" + enabled);\r\n },\r\n enableSecureView: (imagePath: string = \"\"): void => {\r\n console.warn(\"RNScreenshotPrevent: enableSecureView not work in web.\"+(!!imagePath ? \" send: \"+imagePath : \"\"));\r\n },\r\n disableSecureView: (): void => {\r\n console.warn(\"RNScreenshotPrevent: disableSecureView not work in web\");\r\n }\r\n }\r\n addListen = (fn: FN): Return => {\r\n if (typeof (fn) !== 'function') {\r\n console.error('RNScreenshotPrevent: addListener requires valid callback function');\r\n return {\r\n remove: (): void => {\r\n console.error(\"RNScreenshotPrevent: remove not work because addListener requires valid callback function\");\r\n }\r\n };\r\n }\r\n console.warn(\"RNScreenshotPrevent: addListener not work in web\");\r\n return {\r\n remove: (): void => {\r\n console.warn(\"RNScreenshotPrevent: remove addListener not work in web\");\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const usePreventScreenshot = () => {\r\n useEffect(() => {\r\n RNScreenshotPrevent.enabled(true);\r\n return () => {\r\n RNScreenshotPrevent.enabled(false);\r\n };\r\n }, []);\r\n}\r\n\r\nexport const useDisableSecureView = (imagePath: string = \"\") => {\r\n useEffect(() => {\r\n RNScreenshotPrevent.enableSecureView(imagePath);\r\n return () => {\r\n RNScreenshotPrevent.disableSecureView();\r\n };\r\n }, []);\r\n}\r\n\r\nexport const enabled: (enabled: boolean) => void = RNScreenshotPrevent.enabled\r\nexport const enableSecureView: (imagePath?: string) => void = RNScreenshotPrevent.enableSecureView\r\nexport const disableSecureView: () => void = RNScreenshotPrevent.disableSecureView\r\nexport const addListener: (fn: FN) => void = addListen\r\nexport default RNScreenshotPrevent;\r\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAC1E,SAASC,SAAS,QAAQ,OAAO;AAMjC,IAAIC,SAAc,EAAEC,mBAAwB;AAC5C,IAAIH,QAAQ,CAACI,EAAE,KAAK,KAAK,EAAE;EACvB,MAAM;IAAED,mBAAmB,EAAEE;EAA0B,CAAC,GAAGP,aAAa;EACxEK,mBAAmB,GAAG;IAClB,GAAGE,yBAAyB;IAC5BC,gBAAgB,EAAE,SAASA,gBAAgBA,CAACC,SAAiB,GAAG,EAAE,EAAE;MAChEF,yBAAyB,CAACC,gBAAgB,CAACC,SAAS,CAAC;IACzD;EACJ,CAAC;EACD,MAAMC,YAAY,GAAG,IAAIT,kBAAkB,CAACI,mBAAmB,CAAC;;EAEhE;AACJ;AACA;AACA;AACA;EACID,SAAS,GAAIO,EAAM,IAAa;IAC5B,IAAI,OAAQA,EAAG,KAAK,UAAU,EAAE;MAC5BC,OAAO,CAACC,KAAK,CAAC,mEAAmE,CAAC;MAClF,OAAO;QACHC,MAAM,EAAEA,CAAA,KAAY;UAChBF,OAAO,CAACC,KAAK,CAAC,2FAA2F,CAAC;QAC9G;MACJ,CAAC;IACL;IAEA,OAAOH,YAAY,CAACK,WAAW,CAAC,uBAAuB,EAAEJ,EAAE,CAAC;EAChE,CAAC;AACL,CAAC,MAAM;EACHN,mBAAmB,GAAG;IAClBW,OAAO,EAAGA,OAAgB,IAAW;MACjCJ,OAAO,CAACK,IAAI,CAAC,uDAAuD,GAAGD,OAAO,CAAC;IACnF,CAAC;IACDR,gBAAgB,EAAEA,CAACC,SAAiB,GAAG,EAAE,KAAW;MAChDG,OAAO,CAACK,IAAI,CAAC,wDAAwD,IAAE,CAAC,CAACR,SAAS,GAAG,SAAS,GAACA,SAAS,GAAG,EAAE,CAAC,CAAC;IACnH,CAAC;IACDS,iBAAiB,EAAEA,CAAA,KAAY;MAC3BN,OAAO,CAACK,IAAI,CAAC,wDAAwD,CAAC;IAC1E;EACJ,CAAC;EACDb,SAAS,GAAIO,EAAM,IAAa;IAC5B,IAAI,OAAQA,EAAG,KAAK,UAAU,EAAE;MAC5BC,OAAO,CAACC,KAAK,CAAC,mEAAmE,CAAC;MAClF,OAAO;QACHC,MAAM,EAAEA,CAAA,KAAY;UAChBF,OAAO,CAACC,KAAK,CAAC,2FAA2F,CAAC;QAC9G;MACJ,CAAC;IACL;IACAD,OAAO,CAACK,IAAI,CAAC,kDAAkD,CAAC;IAChE,OAAO;MACHH,MAAM,EAAEA,CAAA,KAAY;QAChBF,OAAO,CAACK,IAAI,CAAC,yDAAyD,CAAC;MAC3E;IACJ,CAAC;EACL,CAAC;AACL;AAEA,OAAO,MAAME,oBAAoB,GAAGA,CAAA,KAAM;EACtChB,SAAS,CAAC,MAAM;IACZE,mBAAmB,CAACW,OAAO,CAAC,IAAI,CAAC;IACjC,OAAO,MAAM;MACTX,mBAAmB,CAACW,OAAO,CAAC,KAAK,CAAC;IACtC,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAED,OAAO,MAAMI,oBAAoB,GAAGA,CAACX,SAAiB,GAAG,EAAE,KAAK;EAC5DN,SAAS,CAAC,MAAM;IACZE,mBAAmB,CAACG,gBAAgB,CAACC,SAAS,CAAC;IAC/C,OAAO,MAAM;MACTJ,mBAAmB,CAACa,iBAAiB,CAAC,CAAC;IAC3C,CAAC;EACL,CAAC,EAAE,EAAE,CAAC;AACV,CAAC;AAED,OAAO,MAAMF,OAAmC,GAAGX,mBAAmB,CAACW,OAAO;AAC9E,OAAO,MAAMR,gBAA8C,GAAGH,mBAAmB,CAACG,gBAAgB;AAClG,OAAO,MAAMU,iBAA6B,GAAGb,mBAAmB,CAACa,iBAAiB;AAClF,OAAO,MAAMH,WAA6B,GAAGX,SAAS;AACtD,eAAeC,mBAAmB","ignoreList":[]} -\ No newline at end of file -+{"version":3,"names":["NativeModules","NativeEventEmitter","Platform","useEffect","NativeScreenshotPrevent","addListen","RNScreenshotPrevent","OS","nativeModule","Proxy","get","target","prop","imagePath","enableSecureView","value","bind","eventEmitter","fn","console","error","remove","addListener","warn","enabled","disableSecureView","usePreventScreenshot","_RNScreenshotPrevent","_RNScreenshotPrevent2","useDisableSecureView","_RNScreenshotPrevent3","_RNScreenshotPrevent4","enable","_RNScreenshotPrevent5","_RNScreenshotPrevent6","_RNScreenshotPrevent7"],"sources":["index.ts"],"sourcesContent":["import { NativeModules, NativeEventEmitter, Platform } from 'react-native';\nimport { useEffect } from 'react';\nimport NativeScreenshotPrevent from './NativeRNScreenshotPrevent';\n\ntype FN = (resp: any) => void;\ntype Return = {\n\treadonly remove: () => void;\n};\n\nlet addListen: any;\nlet RNScreenshotPrevent: any = null;\n\nif (Platform.OS !== 'web') {\n\t// Try to use TurboModule first, fallback to legacy bridge\n\tconst nativeModule =\n\t\tNativeScreenshotPrevent ?? NativeModules.RNScreenshotPrevent;\n\n\tif (nativeModule) {\n\t\tRNScreenshotPrevent = new Proxy(nativeModule, {\n\t\t\tget(target, prop) {\n\t\t\t\tif (prop === 'enableSecureView') {\n\t\t\t\t\treturn (imagePath: string = ''): void => {\n\t\t\t\t\t\ttarget.enableSecureView(imagePath);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst value = target[prop];\n\t\t\t\treturn typeof value === 'function' ? value.bind(target) : value;\n\t\t\t},\n\t\t});\n\n\t\tconst eventEmitter = new NativeEventEmitter(nativeModule);\n\n\t\taddListen = (fn: FN): Return => {\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\tconsole.error(\n\t\t\t\t\t'RNScreenshotPrevent: addListener requires valid callback function'\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tremove: (): void => {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t'RNScreenshotPrevent: remove not work because addListener requires valid callback function'\n\t\t\t\t\t\t);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn eventEmitter.addListener('userDidTakeScreenshot', fn);\n\t\t};\n\t} else {\n\t\tconsole.warn('RNScreenshotPrevent: Native module not found');\n\t\tRNScreenshotPrevent = {\n\t\t\tenabled: () => {},\n\t\t\tenableSecureView: () => {},\n\t\t\tdisableSecureView: () => {},\n\t\t};\n\t\taddListen = () => ({ remove: () => {} });\n\t}\n} else {\n\tRNScreenshotPrevent = {\n\t\tenabled: (enabled: boolean): void => {\n\t\t\tconsole.warn(\n\t\t\t\t'RNScreenshotPrevent: enabled not work in web. value: ',\n\t\t\t\tenabled\n\t\t\t);\n\t\t},\n\t\tenableSecureView: (imagePath: string = ''): void => {\n\t\t\tconsole.warn(\n\t\t\t\t'RNScreenshotPrevent: enableSecureView not work in web.',\n\t\t\t\t!!imagePath ? `send: ${imagePath}` : ''\n\t\t\t);\n\t\t},\n\t\tdisableSecureView: (): void => {\n\t\t\tconsole.warn(\n\t\t\t\t'RNScreenshotPrevent: disableSecureView not work in web'\n\t\t\t);\n\t\t},\n\t};\n\taddListen = (fn: FN): Return => {\n\t\tif (typeof fn !== 'function') {\n\t\t\tconsole.error(\n\t\t\t\t'RNScreenshotPrevent: addListener requires valid callback function'\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tremove: (): void => {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t'RNScreenshotPrevent: remove not work because addListener requires valid callback function'\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\tconsole.warn('RNScreenshotPrevent: addListener not work in web');\n\t\treturn {\n\t\t\tremove: (): void => {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'RNScreenshotPrevent: remove addListener not work in web'\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t};\n}\n\nexport const usePreventScreenshot = () => {\n\tuseEffect(() => {\n\t\tRNScreenshotPrevent?.enabled(true);\n\t\treturn () => {\n\t\t\tRNScreenshotPrevent?.enabled(false);\n\t\t};\n\t}, []);\n};\n\nexport const useDisableSecureView = (imagePath: string = '') => {\n\tuseEffect(() => {\n\t\tRNScreenshotPrevent?.enableSecureView(imagePath);\n\t\treturn () => {\n\t\t\tRNScreenshotPrevent?.disableSecureView();\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, []);\n};\n\nexport const enabled: (enabled: boolean) => void = (enable) =>\n\tRNScreenshotPrevent?.enabled(enable);\n\nexport const enableSecureView: (imagePath?: string) => void = (imagePath) =>\n\tRNScreenshotPrevent?.enableSecureView(imagePath ?? '');\n\nexport const disableSecureView: () => void = () =>\n\tRNScreenshotPrevent?.disableSecureView();\n\nexport const addListener: (fn: FN) => Return = addListen;\n\nexport default RNScreenshotPrevent;\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAC1E,SAASC,SAAS,QAAQ,OAAO;AACjC,OAAOC,uBAAuB,MAAM,6BAA6B;AAOjE,IAAIC,SAAc;AAClB,IAAIC,mBAAwB,GAAG,IAAI;AAEnC,IAAIJ,QAAQ,CAACK,EAAE,KAAK,KAAK,EAAE;EAC1B;EACA,MAAMC,YAAY,GACjBJ,uBAAuB,aAAvBA,uBAAuB,cAAvBA,uBAAuB,GAAIJ,aAAa,CAACM,mBAAmB;EAE7D,IAAIE,YAAY,EAAE;IACjBF,mBAAmB,GAAG,IAAIG,KAAK,CAACD,YAAY,EAAE;MAC7CE,GAAGA,CAACC,MAAM,EAAEC,IAAI,EAAE;QACjB,IAAIA,IAAI,KAAK,kBAAkB,EAAE;UAChC,OAAO,CAACC,SAAiB,GAAG,EAAE,KAAW;YACxCF,MAAM,CAACG,gBAAgB,CAACD,SAAS,CAAC;UACnC,CAAC;QACF;QACA,MAAME,KAAK,GAAGJ,MAAM,CAACC,IAAI,CAAC;QAC1B,OAAO,OAAOG,KAAK,KAAK,UAAU,GAAGA,KAAK,CAACC,IAAI,CAACL,MAAM,CAAC,GAAGI,KAAK;MAChE;IACD,CAAC,CAAC;IAEF,MAAME,YAAY,GAAG,IAAIhB,kBAAkB,CAACO,YAAY,CAAC;IAEzDH,SAAS,GAAIa,EAAM,IAAa;MAC/B,IAAI,OAAOA,EAAE,KAAK,UAAU,EAAE;QAC7BC,OAAO,CAACC,KAAK,CACZ,mEACD,CAAC;QACD,OAAO;UACNC,MAAM,EAAEA,CAAA,KAAY;YACnBF,OAAO,CAACC,KAAK,CACZ,2FACD,CAAC;UACF;QACD,CAAC;MACF;MAEA,OAAOH,YAAY,CAACK,WAAW,CAAC,uBAAuB,EAAEJ,EAAE,CAAC;IAC7D,CAAC;EACF,CAAC,MAAM;IACNC,OAAO,CAACI,IAAI,CAAC,8CAA8C,CAAC;IAC5DjB,mBAAmB,GAAG;MACrBkB,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;MACjBV,gBAAgB,EAAEA,CAAA,KAAM,CAAC,CAAC;MAC1BW,iBAAiB,EAAEA,CAAA,KAAM,CAAC;IAC3B,CAAC;IACDpB,SAAS,GAAGA,CAAA,MAAO;MAAEgB,MAAM,EAAEA,CAAA,KAAM,CAAC;IAAE,CAAC,CAAC;EACzC;AACD,CAAC,MAAM;EACNf,mBAAmB,GAAG;IACrBkB,OAAO,EAAGA,OAAgB,IAAW;MACpCL,OAAO,CAACI,IAAI,CACX,uDAAuD,EACvDC,OACD,CAAC;IACF,CAAC;IACDV,gBAAgB,EAAEA,CAACD,SAAiB,GAAG,EAAE,KAAW;MACnDM,OAAO,CAACI,IAAI,CACX,wDAAwD,EACxD,CAAC,CAACV,SAAS,GAAG,SAASA,SAAS,EAAE,GAAG,EACtC,CAAC;IACF,CAAC;IACDY,iBAAiB,EAAEA,CAAA,KAAY;MAC9BN,OAAO,CAACI,IAAI,CACX,wDACD,CAAC;IACF;EACD,CAAC;EACDlB,SAAS,GAAIa,EAAM,IAAa;IAC/B,IAAI,OAAOA,EAAE,KAAK,UAAU,EAAE;MAC7BC,OAAO,CAACC,KAAK,CACZ,mEACD,CAAC;MACD,OAAO;QACNC,MAAM,EAAEA,CAAA,KAAY;UACnBF,OAAO,CAACC,KAAK,CACZ,2FACD,CAAC;QACF;MACD,CAAC;IACF;IACAD,OAAO,CAACI,IAAI,CAAC,kDAAkD,CAAC;IAChE,OAAO;MACNF,MAAM,EAAEA,CAAA,KAAY;QACnBF,OAAO,CAACI,IAAI,CACX,yDACD,CAAC;MACF;IACD,CAAC;EACF,CAAC;AACF;AAEA,OAAO,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACzCvB,SAAS,CAAC,MAAM;IAAA,IAAAwB,oBAAA;IACf,CAAAA,oBAAA,GAAArB,mBAAmB,cAAAqB,oBAAA,eAAnBA,oBAAA,CAAqBH,OAAO,CAAC,IAAI,CAAC;IAClC,OAAO,MAAM;MAAA,IAAAI,qBAAA;MACZ,CAAAA,qBAAA,GAAAtB,mBAAmB,cAAAsB,qBAAA,eAAnBA,qBAAA,CAAqBJ,OAAO,CAAC,KAAK,CAAC;IACpC,CAAC;EACF,CAAC,EAAE,EAAE,CAAC;AACP,CAAC;AAED,OAAO,MAAMK,oBAAoB,GAAGA,CAAChB,SAAiB,GAAG,EAAE,KAAK;EAC/DV,SAAS,CAAC,MAAM;IAAA,IAAA2B,qBAAA;IACf,CAAAA,qBAAA,GAAAxB,mBAAmB,cAAAwB,qBAAA,eAAnBA,qBAAA,CAAqBhB,gBAAgB,CAACD,SAAS,CAAC;IAChD,OAAO,MAAM;MAAA,IAAAkB,qBAAA;MACZ,CAAAA,qBAAA,GAAAzB,mBAAmB,cAAAyB,qBAAA,eAAnBA,qBAAA,CAAqBN,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD;EACD,CAAC,EAAE,EAAE,CAAC;AACP,CAAC;AAED,OAAO,MAAMD,OAAmC,GAAIQ,MAAM;EAAA,IAAAC,qBAAA;EAAA,QAAAA,qBAAA,GACzD3B,mBAAmB,cAAA2B,qBAAA,uBAAnBA,qBAAA,CAAqBT,OAAO,CAACQ,MAAM,CAAC;AAAA;AAErC,OAAO,MAAMlB,gBAA8C,GAAID,SAAS;EAAA,IAAAqB,qBAAA;EAAA,QAAAA,qBAAA,GACvE5B,mBAAmB,cAAA4B,qBAAA,uBAAnBA,qBAAA,CAAqBpB,gBAAgB,CAACD,SAAS,aAATA,SAAS,cAATA,SAAS,GAAI,EAAE,CAAC;AAAA;AAEvD,OAAO,MAAMY,iBAA6B,GAAGA,CAAA;EAAA,IAAAU,qBAAA;EAAA,QAAAA,qBAAA,GAC5C7B,mBAAmB,cAAA6B,qBAAA,uBAAnBA,qBAAA,CAAqBV,iBAAiB,CAAC,CAAC;AAAA;AAEzC,OAAO,MAAMH,WAA+B,GAAGjB,SAAS;AAExD,eAAeC,mBAAmB","ignoreList":[]} -\ No newline at end of file -diff --git a/lib/typescript/NativeRNScreenshotPrevent.d.ts b/lib/typescript/NativeRNScreenshotPrevent.d.ts -new file mode 100644 -index 0000000000000000000000000000000000000000..d0a0e96c0816a795d73132b4696089360a20b247 ---- /dev/null -+++ b/lib/typescript/NativeRNScreenshotPrevent.d.ts -@@ -0,0 +1,10 @@ -+import type { TurboModule } from 'react-native'; -+export interface Spec extends TurboModule { -+ enabled(enable: boolean): void; -+ enableSecureView(imagePath: string): void; -+ disableSecureView(): void; -+ addListener(eventName: string): void; -+ removeListeners(count: number): void; -+} -+declare const _default: Spec | null; -+export default _default; -diff --git a/lib/typescript/index.d.ts b/lib/typescript/index.d.ts -index bfbde95cd58cfd922419b3af59d5a152b69dbde8..f353e85e82ba7480352036ef35dfde869017d0d5 100644 ---- a/lib/typescript/index.d.ts -+++ b/lib/typescript/index.d.ts -@@ -1,9 +1,12 @@ - type FN = (resp: any) => void; -+type Return = { -+ readonly remove: () => void; -+}; - declare let RNScreenshotPrevent: any; - export declare const usePreventScreenshot: () => void; - export declare const useDisableSecureView: (imagePath?: string) => void; - export declare const enabled: (enabled: boolean) => void; - export declare const enableSecureView: (imagePath?: string) => void; - export declare const disableSecureView: () => void; --export declare const addListener: (fn: FN) => void; -+export declare const addListener: (fn: FN) => Return; - export default RNScreenshotPrevent; -diff --git a/package.json b/package.json -index 42c26ead07c8d2c70443aa312fe0502c4dffd4be..961ef91f5d1599c3fd8f1fde44429abf8f2fdc54 100644 ---- a/package.json -+++ b/package.json -@@ -127,6 +127,12 @@ - "codegenConfig": { - "name": "RNScreenshotPreventSpec", - "type": "modules", -- "jsSrcsDir": "src" -+ "jsSrcsDir": "src", -+ "android": { -+ "javaPackageName": "com.killserver.screenshotprev" -+ }, -+ "ios": { -+ "libraryName": "RNScreenshotPrevent" -+ } - } - } -diff --git a/src/NativeRNScreenshotPrevent.ts b/src/NativeRNScreenshotPrevent.ts -new file mode 100644 -index 0000000000000000000000000000000000000000..e0c2ae2ed44e86e68e750e701baf9df841e5a91f ---- /dev/null -+++ b/src/NativeRNScreenshotPrevent.ts -@@ -0,0 +1,14 @@ -+import type { TurboModule } from 'react-native'; -+import { TurboModuleRegistry } from 'react-native'; -+ -+export interface Spec extends TurboModule { -+ enabled(enable: boolean): void; -+ enableSecureView(imagePath: string): void; -+ disableSecureView(): void; -+ -+ // Required methods for event emitter support -+ addListener(eventName: string): void; -+ removeListeners(count: number): void; -+} -+ -+export default TurboModuleRegistry.get('RNScreenshotPrevent'); -diff --git a/src/index.d.ts b/src/index.d.ts -index 4ae53861dca03cbda558f7cd2779824f0f8e6097..1d1d3c259702e0c7da618dff7020e2fb558a9af5 100644 ---- a/src/index.d.ts -+++ b/src/index.d.ts -@@ -1,8 +1,8 @@ - declare module 'react-native-screenshot-prevent' { -- export function enabled(value: boolean): void -- export function enableSecureView(imagePath?: string): void; -- export function disableSecureView(): void; -- export function usePreventScreenshot(): void; -- export function useDisableSecureView(): void; -- export function addListener(fn: Function): void; -+ export function enabled(value: boolean): void; -+ export function enableSecureView(imagePath?: string): void; -+ export function disableSecureView(): void; -+ export function usePreventScreenshot(): void; -+ export function useDisableSecureView(): void; -+ export function addListener(fn: Function): void; - } -diff --git a/src/index.ts b/src/index.ts -index aa8f952601bb8d0c8c0d8b0f08ab4710f7e05fce..c2d11627c75da1fce5730e4734e2398148a3ce7d 100644 ---- a/src/index.ts -+++ b/src/index.ts -@@ -1,88 +1,132 @@ - import { NativeModules, NativeEventEmitter, Platform } from 'react-native'; - import { useEffect } from 'react'; -+import NativeScreenshotPrevent from './NativeRNScreenshotPrevent'; - --type FN = (resp: any) => void -+type FN = (resp: any) => void; - type Return = { -- readonly remove: () => void --} --let addListen: any, RNScreenshotPrevent: any; --if (Platform.OS !== "web") { -- const { RNScreenshotPrevent: RNScreenshotPreventNative } = NativeModules; -- RNScreenshotPrevent = { -- ...RNScreenshotPreventNative, -- enableSecureView: function enableSecureView(imagePath: string = "") { -- RNScreenshotPreventNative.enableSecureView(imagePath) -- } -- } -- const eventEmitter = new NativeEventEmitter(RNScreenshotPrevent); -+ readonly remove: () => void; -+}; -+ -+let addListen: any; -+let RNScreenshotPrevent: any = null; -+ -+if (Platform.OS !== 'web') { -+ // Try to use TurboModule first, fallback to legacy bridge -+ const nativeModule = -+ NativeScreenshotPrevent ?? NativeModules.RNScreenshotPrevent; - -- /** -- * subscribes to userDidTakeScreenshot event -- * @param {function} callback handler -- * @returns {function} unsubscribe fn -- */ -- addListen = (fn: FN): Return => { -- if (typeof (fn) !== 'function') { -- console.error('RNScreenshotPrevent: addListener requires valid callback function'); -- return { -- remove: (): void => { -- console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); -- } -- }; -- } -+ if (nativeModule) { -+ RNScreenshotPrevent = new Proxy(nativeModule, { -+ get(target, prop) { -+ if (prop === 'enableSecureView') { -+ return (imagePath: string = ''): void => { -+ target.enableSecureView(imagePath); -+ }; -+ } -+ const value = target[prop]; -+ return typeof value === 'function' ? value.bind(target) : value; -+ }, -+ }); -+ -+ const eventEmitter = new NativeEventEmitter(nativeModule); - -- return eventEmitter.addListener("userDidTakeScreenshot", fn); -- } -+ addListen = (fn: FN): Return => { -+ if (typeof fn !== 'function') { -+ console.error( -+ 'RNScreenshotPrevent: addListener requires valid callback function' -+ ); -+ return { -+ remove: (): void => { -+ console.error( -+ 'RNScreenshotPrevent: remove not work because addListener requires valid callback function' -+ ); -+ }, -+ }; -+ } -+ -+ return eventEmitter.addListener('userDidTakeScreenshot', fn); -+ }; -+ } else { -+ console.warn('RNScreenshotPrevent: Native module not found'); -+ RNScreenshotPrevent = { -+ enabled: () => {}, -+ enableSecureView: () => {}, -+ disableSecureView: () => {}, -+ }; -+ addListen = () => ({ remove: () => {} }); -+ } - } else { -- RNScreenshotPrevent = { -- enabled: (enabled: boolean): void => { -- console.warn("RNScreenshotPrevent: enabled not work in web. value: " + enabled); -- }, -- enableSecureView: (imagePath: string = ""): void => { -- console.warn("RNScreenshotPrevent: enableSecureView not work in web."+(!!imagePath ? " send: "+imagePath : "")); -- }, -- disableSecureView: (): void => { -- console.warn("RNScreenshotPrevent: disableSecureView not work in web"); -- } -- } -- addListen = (fn: FN): Return => { -- if (typeof (fn) !== 'function') { -- console.error('RNScreenshotPrevent: addListener requires valid callback function'); -- return { -- remove: (): void => { -- console.error("RNScreenshotPrevent: remove not work because addListener requires valid callback function"); -- } -- }; -- } -- console.warn("RNScreenshotPrevent: addListener not work in web"); -- return { -- remove: (): void => { -- console.warn("RNScreenshotPrevent: remove addListener not work in web"); -- } -- } -- } -+ RNScreenshotPrevent = { -+ enabled: (enabled: boolean): void => { -+ console.warn( -+ 'RNScreenshotPrevent: enabled not work in web. value: ', -+ enabled -+ ); -+ }, -+ enableSecureView: (imagePath: string = ''): void => { -+ console.warn( -+ 'RNScreenshotPrevent: enableSecureView not work in web.', -+ !!imagePath ? `send: ${imagePath}` : '' -+ ); -+ }, -+ disableSecureView: (): void => { -+ console.warn( -+ 'RNScreenshotPrevent: disableSecureView not work in web' -+ ); -+ }, -+ }; -+ addListen = (fn: FN): Return => { -+ if (typeof fn !== 'function') { -+ console.error( -+ 'RNScreenshotPrevent: addListener requires valid callback function' -+ ); -+ return { -+ remove: (): void => { -+ console.error( -+ 'RNScreenshotPrevent: remove not work because addListener requires valid callback function' -+ ); -+ }, -+ }; -+ } -+ console.warn('RNScreenshotPrevent: addListener not work in web'); -+ return { -+ remove: (): void => { -+ console.warn( -+ 'RNScreenshotPrevent: remove addListener not work in web' -+ ); -+ }, -+ }; -+ }; - } - - export const usePreventScreenshot = () => { -- useEffect(() => { -- RNScreenshotPrevent.enabled(true); -- return () => { -- RNScreenshotPrevent.enabled(false); -- }; -- }, []); --} -+ useEffect(() => { -+ RNScreenshotPrevent?.enabled(true); -+ return () => { -+ RNScreenshotPrevent?.enabled(false); -+ }; -+ }, []); -+}; - --export const useDisableSecureView = (imagePath: string = "") => { -- useEffect(() => { -- RNScreenshotPrevent.enableSecureView(imagePath); -- return () => { -- RNScreenshotPrevent.disableSecureView(); -- }; -- }, []); --} -+export const useDisableSecureView = (imagePath: string = '') => { -+ useEffect(() => { -+ RNScreenshotPrevent?.enableSecureView(imagePath); -+ return () => { -+ RNScreenshotPrevent?.disableSecureView(); -+ }; -+ // eslint-disable-next-line react-hooks/exhaustive-deps -+ }, []); -+}; -+ -+export const enabled: (enabled: boolean) => void = (enable) => -+ RNScreenshotPrevent?.enabled(enable); -+ -+export const enableSecureView: (imagePath?: string) => void = (imagePath) => -+ RNScreenshotPrevent?.enableSecureView(imagePath ?? ''); -+ -+export const disableSecureView: () => void = () => -+ RNScreenshotPrevent?.disableSecureView(); -+ -+export const addListener: (fn: FN) => Return = addListen; - --export const enabled: (enabled: boolean) => void = RNScreenshotPrevent.enabled --export const enableSecureView: (imagePath?: string) => void = RNScreenshotPrevent.enableSecureView --export const disableSecureView: () => void = RNScreenshotPrevent.disableSecureView --export const addListener: (fn: FN) => void = addListen - export default RNScreenshotPrevent; diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 3d8527d9578..c1fa4669587 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3308,35 +3308,6 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - RNScreenshotPrevent (1.2.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Codegen - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - RNSentry (7.4.0): - boost - DoubleConversion @@ -3613,7 +3584,6 @@ DEPENDENCIES: - RNReactNativeHapticFeedback (from `../node_modules/react-native-haptic-feedback`) - RNReanimated (from `../node_modules/react-native-reanimated`) - RNScreens (from `../node_modules/react-native-screens`) - - RNScreenshotPrevent (from `../node_modules/react-native-screenshot-prevent`) - "RNSentry (from `../node_modules/@sentry/react-native`)" - RNShare (from `../node_modules/react-native-share`) - RNSVG (from `../node_modules/react-native-svg`) @@ -3895,8 +3865,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-reanimated" RNScreens: :path: "../node_modules/react-native-screens" - RNScreenshotPrevent: - :path: "../node_modules/react-native-screenshot-prevent" RNSentry: :path: "../node_modules/@sentry/react-native" RNShare: @@ -4040,7 +4008,6 @@ SPEC CHECKSUMS: RNReactNativeHapticFeedback: be4f1b4bf0398c30b59b76ed92ecb0a2ff3a69c6 RNReanimated: 9af1b9f7d221d1cc2f99d935bab08419cae7c1ce RNScreens: 0bbf16c074ae6bb1058a7bf2d1ae017f4306797c - RNScreenshotPrevent: 53b27bc29a4c71d5e60e404f10d78f91711c2a44 RNSentry: 3ffb79c1393af4800c85bc96bc880c20316fc67a RNShare: 1dba46787d6e5543e05655efaefa0e4bb98380d9 RNSVG: d260beec1775108e1bd065a0ed666ff2c5565158 diff --git a/jestSetup.js b/jestSetup.js index 1a7326bc595..b574d1af587 100644 --- a/jestSetup.js +++ b/jestSetup.js @@ -26,7 +26,7 @@ const mockRNQRGenerator = { import "react-native-get-random-values"; require("@shopify/flash-list/jestSetup"); jest.mock("rn-qr-generator", () => mockRNQRGenerator); -jest.mock("react-native-screenshot-prevent", () => ({})); +jest.mock("expo-screen-capture", () => ({})); jest.mock("react-native-haptic-feedback", () => ({ ...jest.requireActual("react-native-haptic-feedback"), trigger: jest.fn() diff --git a/package.json b/package.json index d23963dffb5..8827ac140b2 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,6 @@ "react-native-safe-area-context": "^5.5.2", "react-native-screen-brightness": "^2.0.0-alpha", "react-native-screens": "4.16.0", - "react-native-screenshot-prevent": "^1.2.1", "react-native-share": "^12.0.9", "react-native-splash-screen": "^3.2.0", "react-native-svg": "^15.15.1", @@ -274,7 +273,6 @@ "react-native-reanimated@^3.17.5": "patch:react-native-reanimated@npm%3A3.17.5#./.yarn/patches/react-native-reanimated-npm-3.17.5-134bd4e99e.patch", "react-native-pdf@6.7.7": "patch:react-native-pdf@npm%3A6.7.7#./.yarn/patches/react-native-pdf-npm-6.7.7-7aa1e3a631.patch", "react-native-webview@^13.16.0": "patch:react-native-webview@npm%3A13.16.0#./.yarn/patches/react-native-webview-npm-13.16.0-82f4e13202.patch", - "react-native-screenshot-prevent@^1.2.1": "patch:react-native-screenshot-prevent@npm%3A1.2.1#./.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch", "react-native-pdf@7.0.3": "patch:react-native-pdf@npm%3A7.0.3#./.yarn/patches/react-native-pdf-npm-7.0.3-6313469aca.patch", "react-native@0.81.5": "patch:react-native@npm%3A0.81.5#./.yarn/patches/react-native-npm-0.81.5-d8232ef145.patch" }, diff --git a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsReminderExpiring.test.tsx b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsReminderExpiring.test.tsx index 175179d1f5d..beb27ffbf34 100644 --- a/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsReminderExpiring.test.tsx +++ b/ts/features/messages/components/MessageDetail/__tests__/MessageDetailsReminderExpiring.test.tsx @@ -11,7 +11,7 @@ import { renderComponentWithStoreAndNavigationContextForFocus } from "../../../u const messageId = "01HSG6GR1JT2E23AJ5RBTAMZZP"; jest.mock("rn-qr-generator", () => ({})); -jest.mock("react-native-screenshot-prevent", () => ({})); +jest.mock("expo-screen-capture", () => ({})); jest.mock("react-native-calendar-events", () => ({ checkPermissions: () => new Promise(resolve => resolve("authorized")) })); diff --git a/ts/features/pn/reminderBanner/components/__test__/PNActivationReminderBanner.test.tsx b/ts/features/pn/reminderBanner/components/__test__/PNActivationReminderBanner.test.tsx index c4705d91963..341653e4de9 100644 --- a/ts/features/pn/reminderBanner/components/__test__/PNActivationReminderBanner.test.tsx +++ b/ts/features/pn/reminderBanner/components/__test__/PNActivationReminderBanner.test.tsx @@ -13,7 +13,7 @@ import { PNActivationReminderBanner } from "../PNActivationReminderBanner"; import { renderComponentWithStoreAndNavigationContextForFocus } from "../../../../messages/utils/__tests__/testUtils.test"; jest.mock("rn-qr-generator", () => ({})); -jest.mock("react-native-screenshot-prevent", () => ({})); +jest.mock("expo-screen-capture", () => ({})); describe("pnActivationBanner", () => { it("should match snapshot", () => { diff --git a/ts/utils/hooks/__tests__/usePreventScreenCapture.test.tsx b/ts/utils/hooks/__tests__/usePreventScreenCapture.test.tsx index 15c6aed5443..4c4602e7987 100644 --- a/ts/utils/hooks/__tests__/usePreventScreenCapture.test.tsx +++ b/ts/utils/hooks/__tests__/usePreventScreenCapture.test.tsx @@ -1,7 +1,7 @@ import { - enableSecureView, - disableSecureView -} from "react-native-screenshot-prevent"; + preventScreenCaptureAsync, + allowScreenCaptureAsync +} from "expo-screen-capture"; import { createStore } from "redux"; import { appReducer } from "../../../store/reducers"; import { applicationChangeState } from "../../../store/actions/application"; @@ -13,9 +13,9 @@ jest.mock("../../environment", () => ({ isDevEnv: false })); -jest.mock("react-native-screenshot-prevent", () => ({ - enableSecureView: jest.fn(), - disableSecureView: jest.fn() +jest.mock("expo-screen-capture", () => ({ + preventScreenCaptureAsync: jest.fn(), + allowScreenCaptureAsync: jest.fn() })); describe("usePreventScreenCapture", () => { @@ -27,10 +27,10 @@ describe("usePreventScreenCapture", () => { it("calls native methods once if mounted & unmounted", async () => { const { unmount } = renderHook(); - expect(enableSecureView).toHaveBeenCalledTimes(1); + expect(preventScreenCaptureAsync).toHaveBeenCalledTimes(1); unmount(); jest.advanceTimersByTime(500); - expect(disableSecureView).toHaveBeenCalledTimes(1); + expect(allowScreenCaptureAsync).toHaveBeenCalledTimes(1); }); it("does not re-allow screen capture when two hooks are active and one is unmounted", async () => { @@ -38,8 +38,8 @@ describe("usePreventScreenCapture", () => { const hook2 = renderHook({ key: "B" }); hook2.unmount(); jest.advanceTimersByTime(500); - expect(enableSecureView).toHaveBeenCalledTimes(2); - expect(disableSecureView).toHaveBeenCalledTimes(0); + expect(preventScreenCaptureAsync).toHaveBeenCalledTimes(2); + expect(allowScreenCaptureAsync).toHaveBeenCalledTimes(0); }); }); diff --git a/ts/utils/hooks/usePreventScreenCapture.ts b/ts/utils/hooks/usePreventScreenCapture.ts index 2723aff4307..5eea037fe82 100644 --- a/ts/utils/hooks/usePreventScreenCapture.ts +++ b/ts/utils/hooks/usePreventScreenCapture.ts @@ -1,6 +1,9 @@ import { useFocusEffect } from "@react-navigation/native"; import { useCallback, useMemo, useRef } from "react"; -import * as ScreenCapture from "expo-screen-capture"; +import { + preventScreenCaptureAsync, + allowScreenCaptureAsync +} from "expo-screen-capture"; import { v4 as uuidv4 } from "uuid"; import { isDevEnv } from "../environment"; @@ -9,14 +12,14 @@ const activeTags: Set = new Set(); const preventScreenCapture = (tag: string) => { if (!activeTags.has(tag)) { activeTags.add(tag); - void ScreenCapture.preventScreenCaptureAsync(); + void preventScreenCaptureAsync(); } }; const allowScreenCapture = (tag: string) => { activeTags.delete(tag); if (activeTags.size === 0) { - void ScreenCapture.allowScreenCaptureAsync(); + void allowScreenCaptureAsync(); } }; @@ -38,9 +41,9 @@ export function usePreventScreenCapture(key?: string) { useFocusEffect( useCallback(() => { - // if (isDevEnv) { - // return; - // } + if (isDevEnv) { + return; + } clearTimeout(timeoutRef.current); diff --git a/yarn.lock b/yarn.lock index fb66a2c9fd3..264571b94b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12760,7 +12760,6 @@ __metadata: react-native-safe-area-context: ^5.5.2 react-native-screen-brightness: ^2.0.0-alpha react-native-screens: 4.16.0 - react-native-screenshot-prevent: ^1.2.1 react-native-share: ^12.0.9 react-native-splash-screen: ^3.2.0 react-native-svg: ^15.15.1 @@ -18152,26 +18151,6 @@ __metadata: languageName: node linkType: hard -"react-native-screenshot-prevent@npm:1.2.1": - version: 1.2.1 - resolution: "react-native-screenshot-prevent@npm:1.2.1" - peerDependencies: - react: "*" - react-native: "*" - checksum: 5563adea419627ce1a066495c7779ffdfa85bdb9c180b47eb25215175a02fc4af402bf24cea684d208ae18651df9396fb545998dd3c566afe67f119ecfa62a4a - languageName: node - linkType: hard - -"react-native-screenshot-prevent@patch:react-native-screenshot-prevent@npm%3A1.2.1#./.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch::locator=io%40workspace%3A.": - version: 1.2.1 - resolution: "react-native-screenshot-prevent@patch:react-native-screenshot-prevent@npm%3A1.2.1#./.yarn/patches/react-native-screenshot-prevent-npm-1.2.1-d115315590.patch::version=1.2.1&hash=7682fa&locator=io%40workspace%3A." - peerDependencies: - react: "*" - react-native: "*" - checksum: 2b17f9e11946507d401d17b551fc794ea48df1b7b33203e7fddfcd31a9d31f49f5b8d13579980cb8448ceb5462480097f34b81891f6ade4f86a33f3319138b09 - languageName: node - linkType: hard - "react-native-share@npm:^12.0.9": version: 12.0.9 resolution: "react-native-share@npm:12.0.9" From 103313166dd8c62a82c6d10d3eeda6336afa3f32 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Fri, 6 Feb 2026 15:53:48 +0100 Subject: [PATCH 6/7] Updates readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 21711f04a57..f08a5bff8d1 100644 --- a/README.md +++ b/README.md @@ -382,7 +382,7 @@ $ yarn && yarn setup # Install podfiles when targeting iOS (ignore this step for Android) # Run this only during the first setup and when Pods dependencies change -$ cd iOS && bundle exec pod install && cd .. +$ yarn dev:pod-install # Generate the definitions from the OpenAPI specs and from the YAML translations # Run this only during the first setup and when specs/translations change From 022fc786042b012c81d7c8832cc2066cdefa6f21 Mon Sep 17 00:00:00 2001 From: Cristiano Tofani Date: Wed, 11 Feb 2026 11:30:52 +0100 Subject: [PATCH 7/7] updates command with new pod-install script --- docs/agents/commands.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/agents/commands.md b/docs/agents/commands.md index 588d06114ab..685613f019a 100644 --- a/docs/agents/commands.md +++ b/docs/agents/commands.md @@ -5,6 +5,7 @@ ```bash yarn setup # Install deps + generate APIs + locales yarn sync # Full sync including iOS pods (bundle + pod install + generate) +yarn dev:pod-install. # Specific command to install iOS Pods on local environment with script variable ``` ## Running the App diff --git a/package.json b/package.json index e81e528034f..5fae3a0f890 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "start": "react-native start", "setup": "yarn install && yarn postinstall && yarn prepare", - "sync": "yarn setup && bundle && (cd ios && bundle exec pod install) && yarn generate", + "sync": "yarn setup && bundle && yarn dev:pod-install && yarn generate", "run-ios": "react-native run-ios", "run-android": "react-native run-android", "dev:run-android": "yarn run-android --mode=productionDebug --active-arch-only",