@expo/cli 0.22.25 → 0.22.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bin/cli +91 -93
- package/build/bin/cli.map +1 -1
- package/build/metro-require/require.js +52 -53
- package/build/src/api/endpoint.js +2 -6
- package/build/src/api/endpoint.js.map +1 -1
- package/build/src/api/getExpoGoIntermediateCertificate.js +3 -5
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
- package/build/src/api/getExpoSchema.js +12 -16
- package/build/src/api/getExpoSchema.js.map +1 -1
- package/build/src/api/getNativeModuleVersions.js +4 -6
- package/build/src/api/getNativeModuleVersions.js.map +1 -1
- package/build/src/api/getProjectDevelopmentCertificate.js +3 -5
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
- package/build/src/api/getVersions.js +5 -7
- package/build/src/api/getVersions.js.map +1 -1
- package/build/src/api/graphql/client.js +26 -32
- package/build/src/api/graphql/client.js.map +1 -1
- package/build/src/api/graphql/queries/AppQuery.js +4 -6
- package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
- package/build/src/api/graphql/queries/UserQuery.js +3 -5
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
- package/build/src/api/graphql/types/App.js +1 -3
- package/build/src/api/graphql/types/App.js.map +1 -1
- package/build/src/api/rest/cache/FileSystemResponseCache.js +8 -10
- package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/ResponseCache.js +12 -20
- package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
- package/build/src/api/rest/cache/wrapFetchWithCache.js +11 -13
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
- package/build/src/api/rest/client.js +35 -53
- package/build/src/api/rest/client.js.map +1 -1
- package/build/src/api/rest/client.types.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +3 -5
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithOffline.js +3 -5
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProgress.js +7 -11
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithProxy.js +3 -5
- package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
- package/build/src/api/rest/wrapFetchWithUserAgent.js +6 -8
- package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
- package/build/src/api/settings.js +5 -7
- package/build/src/api/settings.js.map +1 -1
- package/build/src/api/updateDevelopmentSession.js +17 -23
- package/build/src/api/updateDevelopmentSession.js.map +1 -1
- package/build/src/api/user/UserSettings.js +21 -39
- package/build/src/api/user/UserSettings.js.map +1 -1
- package/build/src/api/user/actions.js +21 -27
- package/build/src/api/user/actions.js.map +1 -1
- package/build/src/api/user/expoSsoLauncher.js +26 -30
- package/build/src/api/user/expoSsoLauncher.js.map +1 -1
- package/build/src/api/user/otp.js +29 -35
- package/build/src/api/user/otp.js.map +1 -1
- package/build/src/api/user/user.js +30 -44
- package/build/src/api/user/user.js.map +1 -1
- package/build/src/config/configAsync.js +23 -29
- package/build/src/config/configAsync.js.map +1 -1
- package/build/src/config/index.js +21 -25
- package/build/src/config/index.js.map +1 -1
- package/build/src/customize/customizeAsync.js +6 -8
- package/build/src/customize/customizeAsync.js.map +1 -1
- package/build/src/customize/generate.js +16 -20
- package/build/src/customize/generate.js.map +1 -1
- package/build/src/customize/index.js +12 -14
- package/build/src/customize/index.js.map +1 -1
- package/build/src/customize/resolveOptions.js +2 -4
- package/build/src/customize/resolveOptions.js.map +1 -1
- package/build/src/customize/templates.js +54 -58
- package/build/src/customize/templates.js.map +1 -1
- package/build/src/customize/typescript.js +7 -11
- package/build/src/customize/typescript.js.map +1 -1
- package/build/src/export/createMetadataJson.js +9 -11
- package/build/src/export/createMetadataJson.js.map +1 -1
- package/build/src/export/embed/exportEager.js +6 -8
- package/build/src/export/embed/exportEager.js.map +1 -1
- package/build/src/export/embed/exportEmbedAsync.js +61 -71
- package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
- package/build/src/export/embed/exportServer.js +55 -57
- package/build/src/export/embed/exportServer.js.map +1 -1
- package/build/src/export/embed/index.js +40 -44
- package/build/src/export/embed/index.js.map +1 -1
- package/build/src/export/embed/resolveOptions.js +36 -44
- package/build/src/export/embed/resolveOptions.js.map +1 -1
- package/build/src/export/embed/xcodeCompilerLogger.js +27 -39
- package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
- package/build/src/export/exportApp.js +63 -67
- package/build/src/export/exportApp.js.map +1 -1
- package/build/src/export/exportAssets.js +27 -35
- package/build/src/export/exportAssets.js.map +1 -1
- package/build/src/export/exportAsync.js +9 -13
- package/build/src/export/exportAsync.js.map +1 -1
- package/build/src/export/exportDomComponents.js +45 -53
- package/build/src/export/exportDomComponents.js.map +1 -1
- package/build/src/export/exportHermes.js +63 -85
- package/build/src/export/exportHermes.js.map +1 -1
- package/build/src/export/exportStaticAsync.js +62 -72
- package/build/src/export/exportStaticAsync.js.map +1 -1
- package/build/src/export/favicon.js +27 -33
- package/build/src/export/favicon.js.map +1 -1
- package/build/src/export/getPublicExpoManifest.js +5 -7
- package/build/src/export/getPublicExpoManifest.js.map +1 -1
- package/build/src/export/getResolvedLocales.js +9 -11
- package/build/src/export/getResolvedLocales.js.map +1 -1
- package/build/src/export/html.js +6 -10
- package/build/src/export/html.js.map +1 -1
- package/build/src/export/index.js +28 -32
- package/build/src/export/index.js.map +1 -1
- package/build/src/export/metroAssetLocalPath.js +30 -36
- package/build/src/export/metroAssetLocalPath.js.map +1 -1
- package/build/src/export/persistMetroAssets.js +34 -42
- package/build/src/export/persistMetroAssets.js.map +1 -1
- package/build/src/export/publicFolder.js +6 -10
- package/build/src/export/publicFolder.js.map +1 -1
- package/build/src/export/resolveOptions.js +24 -28
- package/build/src/export/resolveOptions.js.map +1 -1
- package/build/src/export/saveAssets.js +46 -50
- package/build/src/export/saveAssets.js.map +1 -1
- package/build/src/export/web/exportWebAsync.js +11 -13
- package/build/src/export/web/exportWebAsync.js.map +1 -1
- package/build/src/export/web/index.js +15 -19
- package/build/src/export/web/index.js.map +1 -1
- package/build/src/export/web/resolveOptions.js +3 -5
- package/build/src/export/web/resolveOptions.js.map +1 -1
- package/build/src/export/writeContents.js +2 -4
- package/build/src/export/writeContents.js.map +1 -1
- package/build/src/graphql/generated.js +274 -400
- package/build/src/graphql/generated.js.map +1 -1
- package/build/src/install/applyPlugins.js +8 -11
- package/build/src/install/applyPlugins.js.map +1 -1
- package/build/src/install/checkPackages.js +22 -26
- package/build/src/install/checkPackages.js.map +1 -1
- package/build/src/install/fixPackages.js +13 -17
- package/build/src/install/fixPackages.js.map +1 -1
- package/build/src/install/index.js +16 -18
- package/build/src/install/index.js.map +1 -1
- package/build/src/install/installAsync.js +26 -32
- package/build/src/install/installAsync.js.map +1 -1
- package/build/src/install/installExpoPackage.js +18 -22
- package/build/src/install/installExpoPackage.js.map +1 -1
- package/build/src/install/resolveOptions.js +19 -21
- package/build/src/install/resolveOptions.js.map +1 -1
- package/build/src/install/utils/autoAddConfigPlugins.js +14 -18
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
- package/build/src/install/utils/checkPackagesCompatibility.js +11 -13
- package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
- package/build/src/install/utils/parsePackageSpecifier.js +22 -0
- package/build/src/install/utils/parsePackageSpecifier.js.map +1 -0
- package/build/src/lint/ESlintPrerequisite.js +44 -50
- package/build/src/lint/ESlintPrerequisite.js.map +1 -1
- package/build/src/lint/index.js +8 -12
- package/build/src/lint/index.js.map +1 -1
- package/build/src/lint/lintAsync.js +8 -10
- package/build/src/lint/lintAsync.js.map +1 -1
- package/build/src/log.js +16 -36
- package/build/src/log.js.map +1 -1
- package/build/src/login/index.js +20 -24
- package/build/src/login/index.js.map +1 -1
- package/build/src/logout/index.js +7 -11
- package/build/src/logout/index.js.map +1 -1
- package/build/src/prebuild/clearNativeFolder.js +26 -38
- package/build/src/prebuild/clearNativeFolder.js.map +1 -1
- package/build/src/prebuild/configureProjectAsync.js +14 -18
- package/build/src/prebuild/configureProjectAsync.js.map +1 -1
- package/build/src/prebuild/copyTemplateFiles.js +13 -17
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
- package/build/src/prebuild/ensureConfigAsync.js +4 -6
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
- package/build/src/prebuild/index.js +32 -36
- package/build/src/prebuild/index.js.map +1 -1
- package/build/src/prebuild/prebuildAsync.js +25 -29
- package/build/src/prebuild/prebuildAsync.js.map +1 -1
- package/build/src/prebuild/renameTemplateAppName.js +40 -46
- package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
- package/build/src/prebuild/resolveOptions.js +52 -66
- package/build/src/prebuild/resolveOptions.js.map +1 -1
- package/build/src/prebuild/resolveTemplate.js +32 -36
- package/build/src/prebuild/resolveTemplate.js.map +1 -1
- package/build/src/prebuild/updateFromTemplate.js +13 -19
- package/build/src/prebuild/updateFromTemplate.js.map +1 -1
- package/build/src/prebuild/updatePackageJson.js +39 -53
- package/build/src/prebuild/updatePackageJson.js.map +1 -1
- package/build/src/prebuild/validateTemplatePlatforms.js +8 -12
- package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
- package/build/src/register/index.js +7 -11
- package/build/src/register/index.js.map +1 -1
- package/build/src/register/registerAsync.js +3 -5
- package/build/src/register/registerAsync.js.map +1 -1
- package/build/src/run/android/index.js +32 -36
- package/build/src/run/android/index.js.map +1 -1
- package/build/src/run/android/resolveDevice.js +8 -10
- package/build/src/run/android/resolveDevice.js.map +1 -1
- package/build/src/run/android/resolveGradlePropsAsync.js +16 -18
- package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
- package/build/src/run/android/resolveInstallApkName.js +15 -17
- package/build/src/run/android/resolveInstallApkName.js.map +1 -1
- package/build/src/run/android/resolveLaunchProps.js +10 -12
- package/build/src/run/android/resolveLaunchProps.js.map +1 -1
- package/build/src/run/android/resolveOptions.js +2 -4
- package/build/src/run/android/resolveOptions.js.map +1 -1
- package/build/src/run/android/runAndroidAsync.js +21 -23
- package/build/src/run/android/runAndroidAsync.js.map +1 -1
- package/build/src/run/ensureNativeProject.js +5 -7
- package/build/src/run/ensureNativeProject.js.map +1 -1
- package/build/src/run/hints.js +7 -13
- package/build/src/run/hints.js.map +1 -1
- package/build/src/run/index.js +23 -27
- package/build/src/run/index.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.js +56 -74
- package/build/src/run/ios/XcodeBuild.js.map +1 -1
- package/build/src/run/ios/XcodeBuild.types.js.map +1 -1
- package/build/src/run/ios/appleDevice/AppleDevice.js +63 -69
- package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
- package/build/src/run/ios/appleDevice/ClientManager.js +26 -29
- package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/AFCClient.js +25 -28
- package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js +26 -29
- package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +21 -22
- package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js +29 -32
- package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +24 -28
- package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/ServiceClient.js +4 -7
- package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +27 -28
- package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +17 -23
- package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +132 -146
- package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +21 -29
- package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +21 -29
- package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +22 -34
- package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +17 -27
- package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
- package/build/src/run/ios/codeSigning/Security.js +39 -53
- package/build/src/run/ios/codeSigning/Security.js.map +1 -1
- package/build/src/run/ios/codeSigning/configureCodeSigning.js +9 -13
- package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +19 -27
- package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
- package/build/src/run/ios/codeSigning/settings.js +5 -9
- package/build/src/run/ios/codeSigning/settings.js.map +1 -1
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +12 -14
- package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -1
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +21 -27
- package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
- package/build/src/run/ios/index.js +36 -40
- package/build/src/run/ios/index.js.map +1 -1
- package/build/src/run/ios/launchApp.js +17 -23
- package/build/src/run/ios/launchApp.js.map +1 -1
- package/build/src/run/ios/options/appleDestinations.js +36 -38
- package/build/src/run/ios/options/appleDestinations.js.map +1 -1
- package/build/src/run/ios/options/promptDevice.js +16 -20
- package/build/src/run/ios/options/promptDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveDevice.js +24 -30
- package/build/src/run/ios/options/resolveDevice.js.map +1 -1
- package/build/src/run/ios/options/resolveNativeScheme.js +23 -31
- package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
- package/build/src/run/ios/options/resolveOptions.js +5 -7
- package/build/src/run/ios/options/resolveOptions.js.map +1 -1
- package/build/src/run/ios/options/resolveXcodeProject.js +5 -7
- package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
- package/build/src/run/ios/runIosAsync.js +44 -48
- package/build/src/run/ios/runIosAsync.js.map +1 -1
- package/build/src/run/ios/validateExternalBinary.js +22 -24
- package/build/src/run/ios/validateExternalBinary.js.map +1 -1
- package/build/src/run/resolveBundlerProps.js +2 -4
- package/build/src/run/resolveBundlerProps.js.map +1 -1
- package/build/src/run/startBundler.js +12 -16
- package/build/src/run/startBundler.js.map +1 -1
- package/build/src/serve/index.js +16 -20
- package/build/src/serve/index.js.map +1 -1
- package/build/src/serve/serveAsync.js +32 -36
- package/build/src/serve/serveAsync.js.map +1 -1
- package/build/src/start/detectDevClient.js +9 -13
- package/build/src/start/detectDevClient.js.map +1 -1
- package/build/src/start/doctor/Prerequisite.js +7 -12
- package/build/src/start/doctor/Prerequisite.js.map +1 -1
- package/build/src/start/doctor/SecurityBinPrerequisite.js +11 -13
- package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +19 -23
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +19 -23
- package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcodePrerequisite.js +45 -51
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +16 -18
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -1
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +19 -23
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +25 -31
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
- package/build/src/start/doctor/dependencies/getMissingPackages.js +17 -25
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +32 -40
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/resolvePackages.js +26 -32
- package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +31 -41
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
- package/build/src/start/doctor/ngrok/ExternalModule.js +29 -34
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
- package/build/src/start/doctor/ngrok/NgrokResolver.js +8 -12
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +28 -32
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
- package/build/src/start/doctor/typescript/updateTSConfig.js +17 -23
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +27 -33
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
- package/build/src/start/index.js +42 -46
- package/build/src/start/index.js.map +1 -1
- package/build/src/start/interface/KeyPressHandler.js +14 -18
- package/build/src/start/interface/KeyPressHandler.js.map +1 -1
- package/build/src/start/interface/commandsTable.js +80 -94
- package/build/src/start/interface/commandsTable.js.map +1 -1
- package/build/src/start/interface/interactiveActions.js +40 -44
- package/build/src/start/interface/interactiveActions.js.map +1 -1
- package/build/src/start/interface/startInterface.js +61 -65
- package/build/src/start/interface/startInterface.js.map +1 -1
- package/build/src/start/platforms/AppIdResolver.js +4 -6
- package/build/src/start/platforms/AppIdResolver.js.map +1 -1
- package/build/src/start/platforms/DeviceManager.js +6 -10
- package/build/src/start/platforms/DeviceManager.js.map +1 -1
- package/build/src/start/platforms/ExpoGoInstaller.js +20 -25
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
- package/build/src/start/platforms/PlatformManager.js +15 -17
- package/build/src/start/platforms/PlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/ADBServer.js +35 -39
- package/build/src/start/platforms/android/ADBServer.js.map +1 -1
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +16 -18
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/android/AndroidDeviceManager.js +20 -24
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidPlatformManager.js +17 -17
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
- package/build/src/start/platforms/android/AndroidSdk.js +9 -11
- package/build/src/start/platforms/android/AndroidSdk.js.map +1 -1
- package/build/src/start/platforms/android/activateWindow.js +22 -26
- package/build/src/start/platforms/android/activateWindow.js.map +1 -1
- package/build/src/start/platforms/android/adb.js +83 -121
- package/build/src/start/platforms/android/adb.js.map +1 -1
- package/build/src/start/platforms/android/adbReverse.js +12 -20
- package/build/src/start/platforms/android/adbReverse.js.map +1 -1
- package/build/src/start/platforms/android/emulator.js +26 -36
- package/build/src/start/platforms/android/emulator.js.map +1 -1
- package/build/src/start/platforms/android/getDevices.js +5 -7
- package/build/src/start/platforms/android/getDevices.js.map +1 -1
- package/build/src/start/platforms/android/gradle.js +28 -36
- package/build/src/start/platforms/android/gradle.js.map +1 -1
- package/build/src/start/platforms/android/promptAndroidDevice.js +15 -19
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +19 -21
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
- package/build/src/start/platforms/ios/AppleDeviceManager.js +31 -37
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
- package/build/src/start/platforms/ios/ApplePlatformManager.js +12 -12
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
- package/build/src/start/platforms/ios/assertSystemRequirements.js +7 -9
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -1
- package/build/src/start/platforms/ios/devicectl.js +73 -87
- package/build/src/start/platforms/ios/devicectl.js.map +1 -1
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +18 -22
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
- package/build/src/start/platforms/ios/getBestSimulator.js +19 -29
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
- package/build/src/start/platforms/ios/promptAppleDevice.js +10 -14
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
- package/build/src/start/platforms/ios/simctl.js +74 -102
- package/build/src/start/platforms/ios/simctl.js.map +1 -1
- package/build/src/start/platforms/ios/simctlLogging.js +52 -57
- package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
- package/build/src/start/platforms/ios/xcrun.js +18 -22
- package/build/src/start/platforms/ios/xcrun.js.map +1 -1
- package/build/src/start/project/devices.js +9 -19
- package/build/src/start/project/devices.js.map +1 -1
- package/build/src/start/project/dotExpo.js +11 -15
- package/build/src/start/project/dotExpo.js.map +1 -1
- package/build/src/start/project/settings.js +2 -4
- package/build/src/start/project/settings.js.map +1 -1
- package/build/src/start/resolveOptions.js +40 -48
- package/build/src/start/resolveOptions.js.map +1 -1
- package/build/src/start/server/AsyncNgrok.js +51 -55
- package/build/src/start/server/AsyncNgrok.js.map +1 -1
- package/build/src/start/server/AsyncWsTunnel.js +36 -40
- package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
- package/build/src/start/server/BundlerDevServer.js +79 -81
- package/build/src/start/server/BundlerDevServer.js.map +1 -1
- package/build/src/start/server/DevServerManager.js +38 -42
- package/build/src/start/server/DevServerManager.js.map +1 -1
- package/build/src/start/server/DevToolsPluginManager.js +14 -18
- package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
- package/build/src/start/server/DevelopmentSession.js +14 -18
- package/build/src/start/server/DevelopmentSession.js.map +1 -1
- package/build/src/start/server/ReactDevToolsProxy.js +10 -16
- package/build/src/start/server/ReactDevToolsProxy.js.map +1 -1
- package/build/src/start/server/UrlCreator.js +33 -36
- package/build/src/start/server/UrlCreator.js.map +1 -1
- package/build/src/start/server/getStaticRenderFunctions.js +21 -29
- package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +4 -6
- package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
- package/build/src/start/server/metro/MetroBundlerDevServer.js +275 -269
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
- package/build/src/start/server/metro/MetroTerminalReporter.js +56 -63
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.js +33 -39
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
- package/build/src/start/server/metro/createExpoMetroResolver.js +40 -46
- package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
- package/build/src/start/server/metro/createJResolver.js +28 -32
- package/build/src/start/server/metro/createJResolver.js.map +1 -1
- package/build/src/start/server/metro/createServerComponentsMiddleware.js +92 -96
- package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/metro/createServerRouteMiddleware.js +30 -32
- package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js +11 -13
- package/build/src/start/server/metro/debugging/AtlasPrerequisite.js.map +1 -1
- package/build/src/start/server/metro/debugging/MessageHandler.js +1 -3
- package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
- package/build/src/start/server/metro/debugging/attachAtlas.js +22 -26
- package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js +17 -19
- package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
- package/build/src/start/server/metro/debugging/createHandlersFactory.js +31 -25
- package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
- package/build/src/start/server/metro/debugging/getDebuggerType.js +4 -6
- package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +8 -14
- package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +5 -7
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +6 -8
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +5 -7
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js +12 -14
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js.map +1 -1
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js +10 -14
- package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -1
- package/build/src/start/server/metro/debugging/pageIsSupported.js +4 -6
- package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
- package/build/src/start/server/metro/debugging/types.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createEventSocket.js +16 -18
- package/build/src/start/server/metro/dev-server/createEventSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMessageSocket.js +21 -23
- package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +21 -23
- package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js +2 -4
- package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/createSocketMap.js +2 -4
- package/build/src/start/server/metro/dev-server/utils/createSocketMap.js.map +1 -1
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js +4 -8
- package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
- package/build/src/start/server/metro/externals.js +25 -33
- package/build/src/start/server/metro/externals.js.map +1 -1
- package/build/src/start/server/metro/fetchRouterManifest.js +12 -16
- package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
- package/build/src/start/server/metro/formatFileCandidates.js +9 -11
- package/build/src/start/server/metro/formatFileCandidates.js.map +1 -1
- package/build/src/start/server/metro/getCssModulesFromBundler.js +18 -22
- package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
- package/build/src/start/server/metro/instantiateMetro.js +79 -85
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxLog.js +36 -40
- package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +14 -20
- package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js +6 -10
- package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
- package/build/src/start/server/metro/metroErrorInterface.js +78 -88
- package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
- package/build/src/start/server/metro/metroErrors.js +4 -8
- package/build/src/start/server/metro/metroErrors.js.map +1 -1
- package/build/src/start/server/metro/metroPrivateServer.js +7 -9
- package/build/src/start/server/metro/metroPrivateServer.js.map +1 -1
- package/build/src/start/server/metro/metroVirtualModules.js +8 -10
- package/build/src/start/server/metro/metroVirtualModules.js.map +1 -1
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +22 -24
- package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
- package/build/src/start/server/metro/router.js +32 -48
- package/build/src/start/server/metro/router.js.map +1 -1
- package/build/src/start/server/metro/runServer-fork.js +22 -24
- package/build/src/start/server/metro/runServer-fork.js.map +1 -1
- package/build/src/start/server/metro/serializeHtml.js +22 -24
- package/build/src/start/server/metro/serializeHtml.js.map +1 -1
- package/build/src/start/server/metro/symbolicate.js.map +1 -1
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +29 -35
- package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
- package/build/src/start/server/metro/withMetroMultiPlatform.js +139 -149
- package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
- package/build/src/start/server/metro/withMetroResolvers.js +39 -49
- package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js +6 -8
- package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CorsMiddleware.js +15 -17
- package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/CreateFileMiddleware.js +90 -52
- package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +19 -22
- package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/DomComponentsMiddleware.js +27 -33
- package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +60 -64
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ExpoMiddleware.js +9 -15
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/FaviconMiddleware.js +14 -15
- package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +2 -4
- package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +31 -34
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ManifestMiddleware.js +56 -64
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js +19 -23
- package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +19 -20
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/ServeStaticMiddleware.js +9 -11
- package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js +11 -17
- package/build/src/start/server/middleware/createBuiltinAPIRequestHandler.js.map +1 -1
- package/build/src/start/server/middleware/inspector/CdpClient.js +10 -12
- package/build/src/start/server/middleware/inspector/CdpClient.js.map +1 -1
- package/build/src/start/server/middleware/inspector/JsInspector.js +27 -35
- package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +19 -21
- package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
- package/build/src/start/server/middleware/inspector/middlwareMutations.js +2 -6
- package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
- package/build/src/start/server/middleware/metroOptions.js +96 -120
- package/build/src/start/server/middleware/metroOptions.js.map +1 -1
- package/build/src/start/server/middleware/mutations.js +3 -7
- package/build/src/start/server/middleware/mutations.js.map +1 -1
- package/build/src/start/server/middleware/resolveAssets.js +18 -26
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
- package/build/src/start/server/middleware/resolvePlatform.js +15 -23
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js +9 -11
- package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
- package/build/src/start/server/middleware/server.types.js.map +1 -1
- package/build/src/start/server/openPlatforms.js +8 -10
- package/build/src/start/server/openPlatforms.js.map +1 -1
- package/build/src/start/server/platformBundlers.js +11 -13
- package/build/src/start/server/platformBundlers.js.map +1 -1
- package/build/src/start/server/serverLogLikeMetro.js +50 -58
- package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
- package/build/src/start/server/type-generation/expo-env.js +7 -11
- package/build/src/start/server/type-generation/expo-env.js.map +1 -1
- package/build/src/start/server/type-generation/routes.js +54 -76
- package/build/src/start/server/type-generation/routes.js.map +1 -1
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +19 -21
- package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
- package/build/src/start/server/type-generation/tsconfig.js +28 -36
- package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
- package/build/src/start/server/webTemplate.js +24 -28
- package/build/src/start/server/webTemplate.js.map +1 -1
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +46 -52
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
- package/build/src/start/server/webpack/compile.js +11 -15
- package/build/src/start/server/webpack/compile.js.map +1 -1
- package/build/src/start/server/webpack/formatWebpackMessages.js +26 -28
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
- package/build/src/start/server/webpack/resolveFromProject.js +12 -18
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
- package/build/src/start/server/webpack/tls.js +12 -18
- package/build/src/start/server/webpack/tls.js.map +1 -1
- package/build/src/start/startAsync.js +27 -31
- package/build/src/start/startAsync.js.map +1 -1
- package/build/src/utils/FileNotifier.js +17 -20
- package/build/src/utils/FileNotifier.js.map +1 -1
- package/build/src/utils/ansi.js +5 -7
- package/build/src/utils/ansi.js.map +1 -1
- package/build/src/utils/args.js +14 -24
- package/build/src/utils/args.js.map +1 -1
- package/build/src/utils/array.js +6 -18
- package/build/src/utils/array.js.map +1 -1
- package/build/src/utils/cocoapods.js +46 -54
- package/build/src/utils/cocoapods.js.map +1 -1
- package/build/src/utils/codesigning.js +68 -78
- package/build/src/utils/codesigning.js.map +1 -1
- package/build/src/utils/createFileTransform.js +12 -16
- package/build/src/utils/createFileTransform.js.map +1 -1
- package/build/src/utils/createTempPath.js +13 -17
- package/build/src/utils/createTempPath.js.map +1 -1
- package/build/src/utils/delay.js +6 -12
- package/build/src/utils/delay.js.map +1 -1
- package/build/src/utils/dir.js +28 -46
- package/build/src/utils/dir.js.map +1 -1
- package/build/src/utils/downloadAppAsync.js +8 -10
- package/build/src/utils/downloadAppAsync.js.map +1 -1
- package/build/src/utils/downloadExpoGoAsync.js +21 -25
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
- package/build/src/utils/editor.js +35 -41
- package/build/src/utils/editor.js.map +1 -1
- package/build/src/utils/env.js +59 -63
- package/build/src/utils/env.js.map +1 -1
- package/build/src/utils/errors.js +30 -37
- package/build/src/utils/errors.js.map +1 -1
- package/build/src/utils/exit.js +31 -35
- package/build/src/utils/exit.js.map +1 -1
- package/build/src/utils/expoUpdatesCli.js +22 -32
- package/build/src/utils/expoUpdatesCli.js.map +1 -1
- package/build/src/utils/fetch.js +4 -8
- package/build/src/utils/fetch.js.map +1 -1
- package/build/src/utils/filePath.js +6 -10
- package/build/src/utils/filePath.js.map +1 -1
- package/build/src/utils/findUp.js +9 -13
- package/build/src/utils/findUp.js.map +1 -1
- package/build/src/utils/fn.js +2 -6
- package/build/src/utils/fn.js.map +1 -1
- package/build/src/utils/getOrPromptApplicationId.js +26 -32
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
- package/build/src/utils/getRunningProcess.js +21 -29
- package/build/src/utils/getRunningProcess.js.map +1 -1
- package/build/src/utils/git.js +20 -26
- package/build/src/utils/git.js.map +1 -1
- package/build/src/utils/glob.js +4 -8
- package/build/src/utils/glob.js.map +1 -1
- package/build/src/utils/interactive.js +1 -3
- package/build/src/utils/interactive.js.map +1 -1
- package/build/src/utils/ip.js +19 -21
- package/build/src/utils/ip.js.map +1 -1
- package/build/src/utils/isModuleSymlinked.js +9 -11
- package/build/src/utils/isModuleSymlinked.js.map +1 -1
- package/build/src/utils/jsonSchemaDeref.js +18 -20
- package/build/src/utils/jsonSchemaDeref.js.map +1 -1
- package/build/src/utils/link.js +13 -17
- package/build/src/utils/link.js.map +1 -1
- package/build/src/utils/mergeGitIgnorePaths.js +28 -46
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
- package/build/src/utils/modifyConfigAsync.js +10 -16
- package/build/src/utils/modifyConfigAsync.js.map +1 -1
- package/build/src/utils/modifyConfigPlugins.js +6 -10
- package/build/src/utils/modifyConfigPlugins.js.map +1 -1
- package/build/src/utils/nodeEnv.js +6 -12
- package/build/src/utils/nodeEnv.js.map +1 -1
- package/build/src/utils/nodeModules.js +8 -10
- package/build/src/utils/nodeModules.js.map +1 -1
- package/build/src/utils/npm.js +36 -50
- package/build/src/utils/npm.js.map +1 -1
- package/build/src/utils/obj.js +5 -11
- package/build/src/utils/obj.js.map +1 -1
- package/build/src/utils/open.js +8 -10
- package/build/src/utils/open.js.map +1 -1
- package/build/src/utils/ora.js +7 -13
- package/build/src/utils/ora.js.map +1 -1
- package/build/src/utils/plist.js +15 -21
- package/build/src/utils/plist.js.map +1 -1
- package/build/src/utils/port.js +33 -43
- package/build/src/utils/port.js.map +1 -1
- package/build/src/utils/profile.js +7 -11
- package/build/src/utils/profile.js.map +1 -1
- package/build/src/utils/progress.js +5 -11
- package/build/src/utils/progress.js.map +1 -1
- package/build/src/utils/prompts.js +29 -47
- package/build/src/utils/prompts.js.map +1 -1
- package/build/src/utils/resolveArgs.js +24 -36
- package/build/src/utils/resolveArgs.js.map +1 -1
- package/build/src/utils/scheme.js +32 -40
- package/build/src/utils/scheme.js.map +1 -1
- package/build/src/utils/stream.js +3 -5
- package/build/src/utils/stream.js.map +1 -1
- package/build/src/utils/strings.js +4 -6
- package/build/src/utils/strings.js.map +1 -1
- package/build/src/utils/tar.js +15 -19
- package/build/src/utils/tar.js.map +1 -1
- package/build/src/utils/telemetry/Telemetry.js +27 -29
- package/build/src/utils/telemetry/Telemetry.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchClient.js +13 -15
- package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/FetchDetachedClient.js +22 -26
- package/build/src/utils/telemetry/clients/FetchDetachedClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/RudderClient.js +8 -10
- package/build/src/utils/telemetry/clients/RudderClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/RudderDetachedClient.js +22 -26
- package/build/src/utils/telemetry/clients/RudderDetachedClient.js.map +1 -1
- package/build/src/utils/telemetry/clients/flushFetchDetached.js +10 -10
- package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
- package/build/src/utils/telemetry/clients/flushRudderDetached.js +10 -10
- package/build/src/utils/telemetry/clients/flushRudderDetached.js.map +1 -1
- package/build/src/utils/telemetry/events.js +2 -4
- package/build/src/utils/telemetry/events.js.map +1 -1
- package/build/src/utils/telemetry/flushDetached.js.map +1 -1
- package/build/src/utils/telemetry/index.js +29 -25
- package/build/src/utils/telemetry/index.js.map +1 -1
- package/build/src/utils/telemetry/types.js.map +1 -1
- package/build/src/utils/telemetry/utils/constants.js +4 -8
- package/build/src/utils/telemetry/utils/constants.js.map +1 -1
- package/build/src/utils/telemetry/utils/context.js +14 -18
- package/build/src/utils/telemetry/utils/context.js.map +1 -1
- package/build/src/utils/template.js +4 -6
- package/build/src/utils/template.js.map +1 -1
- package/build/src/utils/terminal.js +2 -4
- package/build/src/utils/terminal.js.map +1 -1
- package/build/src/utils/tsconfig/evaluateTsConfig.js +17 -21
- package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -1
- package/build/src/utils/tsconfig/loadTsConfigPaths.js +14 -18
- package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +5 -7
- package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -1
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +12 -14
- package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
- package/build/src/utils/url.js +13 -23
- package/build/src/utils/url.js.map +1 -1
- package/build/src/utils/validateApplicationId.js +86 -108
- package/build/src/utils/validateApplicationId.js.map +1 -1
- package/build/src/utils/variadic.js +16 -22
- package/build/src/utils/variadic.js.map +1 -1
- package/build/src/whoami/index.js +7 -11
- package/build/src/whoami/index.js.map +1 -1
- package/build/src/whoami/whoamiAsync.js +7 -11
- package/build/src/whoami/whoamiAsync.js.map +1 -1
- package/package.json +3 -3
|
@@ -10,27 +10,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "LockdowndClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get:
|
|
14
|
-
return LockdowndClient;
|
|
15
|
-
}
|
|
13
|
+
get: ()=>LockdowndClient
|
|
16
14
|
});
|
|
17
15
|
function _debug() {
|
|
18
|
-
const data = /*#__PURE__*/
|
|
16
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("debug"));
|
|
19
17
|
_debug = function() {
|
|
20
18
|
return data;
|
|
21
19
|
};
|
|
22
20
|
return data;
|
|
23
21
|
}
|
|
24
22
|
function _tls() {
|
|
25
|
-
const data = /*#__PURE__*/
|
|
23
|
+
const data = /*#__PURE__*/ _interopRequireWildcard(require("tls"));
|
|
26
24
|
_tls = function() {
|
|
27
25
|
return data;
|
|
28
26
|
};
|
|
29
27
|
return data;
|
|
30
28
|
}
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
function
|
|
29
|
+
const _serviceClient = require("./ServiceClient");
|
|
30
|
+
const _lockdownProtocol = require("../protocol/LockdownProtocol");
|
|
31
|
+
function _interopRequireDefault(obj) {
|
|
34
32
|
return obj && obj.__esModule ? obj : {
|
|
35
33
|
default: obj
|
|
36
34
|
};
|
|
@@ -43,7 +41,7 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
43
41
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
44
42
|
})(nodeInterop);
|
|
45
43
|
}
|
|
46
|
-
function
|
|
44
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
47
45
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
48
46
|
return obj;
|
|
49
47
|
}
|
|
@@ -56,9 +54,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
56
54
|
if (cache && cache.has(obj)) {
|
|
57
55
|
return cache.get(obj);
|
|
58
56
|
}
|
|
59
|
-
var newObj = {
|
|
60
|
-
__proto__: null
|
|
61
|
-
};
|
|
57
|
+
var newObj = {};
|
|
62
58
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
63
59
|
for(var key in obj){
|
|
64
60
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
@@ -76,30 +72,31 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
76
72
|
}
|
|
77
73
|
return newObj;
|
|
78
74
|
}
|
|
79
|
-
const debug = (0, _debug().default)(
|
|
75
|
+
const debug = (0, _debug().default)("expo:apple-device:client:lockdownd");
|
|
80
76
|
function isLockdowndServiceResponse(resp) {
|
|
81
|
-
return resp.Request ===
|
|
77
|
+
return resp.Request === "StartService" && resp.Service !== undefined && resp.Port !== undefined;
|
|
82
78
|
}
|
|
83
79
|
function isLockdowndSessionResponse(resp) {
|
|
84
|
-
return resp.Request ===
|
|
80
|
+
return resp.Request === "StartSession";
|
|
85
81
|
}
|
|
86
82
|
function isLockdowndAllValuesResponse(resp) {
|
|
87
|
-
return resp.Request ===
|
|
83
|
+
return resp.Request === "GetValue" && resp.Value !== undefined;
|
|
88
84
|
}
|
|
89
85
|
function isLockdowndValueResponse(resp) {
|
|
90
|
-
return resp.Request ===
|
|
86
|
+
return resp.Request === "GetValue" && resp.Key !== undefined && typeof resp.Value === "string";
|
|
91
87
|
}
|
|
92
88
|
function isLockdowndQueryTypeResponse(resp) {
|
|
93
|
-
return resp.Request ===
|
|
89
|
+
return resp.Request === "QueryType" && resp.Type !== undefined;
|
|
94
90
|
}
|
|
95
|
-
class LockdowndClient extends
|
|
91
|
+
class LockdowndClient extends _serviceClient.ServiceClient {
|
|
96
92
|
constructor(socket){
|
|
97
|
-
super(socket, new
|
|
93
|
+
super(socket, new _lockdownProtocol.LockdownProtocolClient(socket));
|
|
94
|
+
this.socket = socket;
|
|
98
95
|
}
|
|
99
96
|
async startService(name) {
|
|
100
97
|
debug(`startService: ${name}`);
|
|
101
98
|
const resp = await this.protocolClient.sendMessage({
|
|
102
|
-
Request:
|
|
99
|
+
Request: "StartService",
|
|
103
100
|
Service: name
|
|
104
101
|
});
|
|
105
102
|
if (isLockdowndServiceResponse(resp)) {
|
|
@@ -108,13 +105,13 @@ class LockdowndClient extends _ServiceClient.ServiceClient {
|
|
|
108
105
|
enableServiceSSL: !!resp.EnableServiceSSL
|
|
109
106
|
};
|
|
110
107
|
} else {
|
|
111
|
-
throw new
|
|
108
|
+
throw new _serviceClient.ResponseError(`Error starting service ${name}`, resp);
|
|
112
109
|
}
|
|
113
110
|
}
|
|
114
111
|
async startSession(pairRecord) {
|
|
115
112
|
debug(`startSession: ${pairRecord}`);
|
|
116
113
|
const resp = await this.protocolClient.sendMessage({
|
|
117
|
-
Request:
|
|
114
|
+
Request: "StartSession",
|
|
118
115
|
HostID: pairRecord.HostID,
|
|
119
116
|
SystemBUID: pairRecord.SystemBUID
|
|
120
117
|
});
|
|
@@ -135,45 +132,45 @@ class LockdowndClient extends _ServiceClient.ServiceClient {
|
|
|
135
132
|
}
|
|
136
133
|
// TODO: save sessionID for StopSession?
|
|
137
134
|
} else {
|
|
138
|
-
throw new
|
|
135
|
+
throw new _serviceClient.ResponseError("Error starting session", resp);
|
|
139
136
|
}
|
|
140
137
|
}
|
|
141
138
|
async getAllValues() {
|
|
142
139
|
debug(`getAllValues`);
|
|
143
140
|
const resp = await this.protocolClient.sendMessage({
|
|
144
|
-
Request:
|
|
141
|
+
Request: "GetValue"
|
|
145
142
|
});
|
|
146
143
|
if (isLockdowndAllValuesResponse(resp)) {
|
|
147
144
|
return resp.Value;
|
|
148
145
|
} else {
|
|
149
|
-
throw new
|
|
146
|
+
throw new _serviceClient.ResponseError("Error getting lockdown value", resp);
|
|
150
147
|
}
|
|
151
148
|
}
|
|
152
149
|
async getValue(val) {
|
|
153
150
|
debug(`getValue: ${val}`);
|
|
154
151
|
const resp = await this.protocolClient.sendMessage({
|
|
155
|
-
Request:
|
|
152
|
+
Request: "GetValue",
|
|
156
153
|
Key: val
|
|
157
154
|
});
|
|
158
155
|
if (isLockdowndValueResponse(resp)) {
|
|
159
156
|
return resp.Value;
|
|
160
157
|
} else {
|
|
161
|
-
throw new
|
|
158
|
+
throw new _serviceClient.ResponseError("Error getting lockdown value", resp);
|
|
162
159
|
}
|
|
163
160
|
}
|
|
164
161
|
async queryType() {
|
|
165
|
-
debug(
|
|
162
|
+
debug("queryType");
|
|
166
163
|
const resp = await this.protocolClient.sendMessage({
|
|
167
|
-
Request:
|
|
164
|
+
Request: "QueryType"
|
|
168
165
|
});
|
|
169
166
|
if (isLockdowndQueryTypeResponse(resp)) {
|
|
170
167
|
return resp.Type;
|
|
171
168
|
} else {
|
|
172
|
-
throw new
|
|
169
|
+
throw new _serviceClient.ResponseError("Error getting lockdown query type", resp);
|
|
173
170
|
}
|
|
174
171
|
}
|
|
175
172
|
async doHandshake(pairRecord) {
|
|
176
|
-
debug(
|
|
173
|
+
debug("doHandshake");
|
|
177
174
|
// if (await this.lockdownQueryType() !== 'com.apple.mobile.lockdown') {
|
|
178
175
|
// throw new CommandError('Invalid type received from lockdown handshake');
|
|
179
176
|
// }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/LockdowndClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\nimport * as tls from 'tls';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { UsbmuxdPairRecord } from './UsbmuxdClient';\nimport { LockdownProtocolClient } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:lockdownd');\n\nexport interface DeviceValues {\n BasebandCertId: number;\n BasebandKeyHashInformation: {\n AKeyStatus: number;\n SKeyHash: Buffer;\n SKeyStatus: number;\n };\n BasebandSerialNumber: Buffer;\n BasebandVersion: string;\n BoardId: number;\n BuildVersion: string;\n ChipID: number;\n ConnectionType: 'USB' | 'Network';\n DeviceClass: string;\n DeviceColor: string;\n DeviceName: string;\n DieID: number;\n HardwareModel: string;\n HasSiDP: boolean;\n PartitionType: string;\n ProductName: string;\n ProductType: string;\n ProductVersion: string;\n ProductionSOC: boolean;\n ProtocolVersion: string;\n TelephonyCapability: boolean;\n UniqueChipID: number;\n UniqueDeviceID: string;\n WiFiAddress: string;\n [key: string]: any;\n}\n\ninterface LockdowndServiceResponse {\n Request: 'StartService';\n Service: string;\n Port: number;\n EnableServiceSSL?: boolean; // Only on iOS 13+\n}\n\ninterface LockdowndSessionResponse {\n Request: 'StartSession';\n EnableSessionSSL: boolean;\n}\n\ninterface LockdowndAllValuesResponse {\n Request: 'GetValue';\n Value: DeviceValues;\n}\n\ninterface LockdowndValueResponse {\n Request: 'GetValue';\n Key: string;\n Value: string;\n}\n\ninterface LockdowndQueryTypeResponse {\n Request: 'QueryType';\n Type: string;\n}\n\nfunction isLockdowndServiceResponse(resp: any): resp is LockdowndServiceResponse {\n return resp.Request === 'StartService' && resp.Service !== undefined && resp.Port !== undefined;\n}\n\nfunction isLockdowndSessionResponse(resp: any): resp is LockdowndSessionResponse {\n return resp.Request === 'StartSession';\n}\n\nfunction isLockdowndAllValuesResponse(resp: any): resp is LockdowndAllValuesResponse {\n return resp.Request === 'GetValue' && resp.Value !== undefined;\n}\n\nfunction isLockdowndValueResponse(resp: any): resp is LockdowndValueResponse {\n return resp.Request === 'GetValue' && resp.Key !== undefined && typeof resp.Value === 'string';\n}\n\nfunction isLockdowndQueryTypeResponse(resp: any): resp is LockdowndQueryTypeResponse {\n return resp.Request === 'QueryType' && resp.Type !== undefined;\n}\n\nexport class LockdowndClient extends ServiceClient<LockdownProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async startService(name: string) {\n debug(`startService: ${name}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'StartService',\n Service: name,\n });\n\n if (isLockdowndServiceResponse(resp)) {\n return { port: resp.Port, enableServiceSSL: !!resp.EnableServiceSSL };\n } else {\n throw new ResponseError(`Error starting service ${name}`, resp);\n }\n }\n\n async startSession(pairRecord: UsbmuxdPairRecord) {\n debug(`startSession: ${pairRecord}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'StartSession',\n HostID: pairRecord.HostID,\n SystemBUID: pairRecord.SystemBUID,\n });\n\n if (isLockdowndSessionResponse(resp)) {\n if (resp.EnableSessionSSL) {\n this.protocolClient.socket = new tls.TLSSocket(this.protocolClient.socket, {\n secureContext: tls.createSecureContext({\n // Avoid using `secureProtocol` fixing the socket to a single TLS version.\n // Newer Node versions might not support older TLS versions.\n // By using the default `minVersion` and `maxVersion` options,\n // The socket will automatically use the appropriate TLS version.\n // See: https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions\n cert: pairRecord.RootCertificate,\n key: pairRecord.RootPrivateKey,\n }),\n });\n debug(`Socket upgraded to TLS connection`);\n }\n // TODO: save sessionID for StopSession?\n } else {\n throw new ResponseError('Error starting session', resp);\n }\n }\n\n async getAllValues() {\n debug(`getAllValues`);\n\n const resp = await this.protocolClient.sendMessage({ Request: 'GetValue' });\n\n if (isLockdowndAllValuesResponse(resp)) {\n return resp.Value;\n } else {\n throw new ResponseError('Error getting lockdown value', resp);\n }\n }\n\n async getValue(val: string) {\n debug(`getValue: ${val}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'GetValue',\n Key: val,\n });\n\n if (isLockdowndValueResponse(resp)) {\n return resp.Value;\n } else {\n throw new ResponseError('Error getting lockdown value', resp);\n }\n }\n\n async queryType() {\n debug('queryType');\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'QueryType',\n });\n\n if (isLockdowndQueryTypeResponse(resp)) {\n return resp.Type;\n } else {\n throw new ResponseError('Error getting lockdown query type', resp);\n }\n }\n\n async doHandshake(pairRecord: UsbmuxdPairRecord) {\n debug('doHandshake');\n\n // if (await this.lockdownQueryType() !== 'com.apple.mobile.lockdown') {\n // throw new CommandError('Invalid type received from lockdown handshake');\n // }\n // await this.getLockdownValue('ProductVersion');\n // TODO: validate pair and pair\n await this.startSession(pairRecord);\n }\n}\n"],"names":["LockdowndClient","debug","Debug","isLockdowndServiceResponse","resp","Request","Service","undefined","Port","isLockdowndSessionResponse","isLockdowndAllValuesResponse","Value","isLockdowndValueResponse","Key","isLockdowndQueryTypeResponse","Type","ServiceClient","constructor","socket","LockdownProtocolClient","startService","name","protocolClient","sendMessage","port","enableServiceSSL","EnableServiceSSL","ResponseError","startSession","pairRecord","HostID","SystemBUID","EnableSessionSSL","tls","TLSSocket","secureContext","createSecureContext","cert","RootCertificate","key","RootPrivateKey","getAllValues","getValue","val","queryType","doHandshake"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/LockdowndClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport { Socket } from 'net';\nimport * as tls from 'tls';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { UsbmuxdPairRecord } from './UsbmuxdClient';\nimport { LockdownProtocolClient } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:lockdownd');\n\nexport interface DeviceValues {\n BasebandCertId: number;\n BasebandKeyHashInformation: {\n AKeyStatus: number;\n SKeyHash: Buffer;\n SKeyStatus: number;\n };\n BasebandSerialNumber: Buffer;\n BasebandVersion: string;\n BoardId: number;\n BuildVersion: string;\n ChipID: number;\n ConnectionType: 'USB' | 'Network';\n DeviceClass: string;\n DeviceColor: string;\n DeviceName: string;\n DieID: number;\n HardwareModel: string;\n HasSiDP: boolean;\n PartitionType: string;\n ProductName: string;\n ProductType: string;\n ProductVersion: string;\n ProductionSOC: boolean;\n ProtocolVersion: string;\n TelephonyCapability: boolean;\n UniqueChipID: number;\n UniqueDeviceID: string;\n WiFiAddress: string;\n [key: string]: any;\n}\n\ninterface LockdowndServiceResponse {\n Request: 'StartService';\n Service: string;\n Port: number;\n EnableServiceSSL?: boolean; // Only on iOS 13+\n}\n\ninterface LockdowndSessionResponse {\n Request: 'StartSession';\n EnableSessionSSL: boolean;\n}\n\ninterface LockdowndAllValuesResponse {\n Request: 'GetValue';\n Value: DeviceValues;\n}\n\ninterface LockdowndValueResponse {\n Request: 'GetValue';\n Key: string;\n Value: string;\n}\n\ninterface LockdowndQueryTypeResponse {\n Request: 'QueryType';\n Type: string;\n}\n\nfunction isLockdowndServiceResponse(resp: any): resp is LockdowndServiceResponse {\n return resp.Request === 'StartService' && resp.Service !== undefined && resp.Port !== undefined;\n}\n\nfunction isLockdowndSessionResponse(resp: any): resp is LockdowndSessionResponse {\n return resp.Request === 'StartSession';\n}\n\nfunction isLockdowndAllValuesResponse(resp: any): resp is LockdowndAllValuesResponse {\n return resp.Request === 'GetValue' && resp.Value !== undefined;\n}\n\nfunction isLockdowndValueResponse(resp: any): resp is LockdowndValueResponse {\n return resp.Request === 'GetValue' && resp.Key !== undefined && typeof resp.Value === 'string';\n}\n\nfunction isLockdowndQueryTypeResponse(resp: any): resp is LockdowndQueryTypeResponse {\n return resp.Request === 'QueryType' && resp.Type !== undefined;\n}\n\nexport class LockdowndClient extends ServiceClient<LockdownProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async startService(name: string) {\n debug(`startService: ${name}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'StartService',\n Service: name,\n });\n\n if (isLockdowndServiceResponse(resp)) {\n return { port: resp.Port, enableServiceSSL: !!resp.EnableServiceSSL };\n } else {\n throw new ResponseError(`Error starting service ${name}`, resp);\n }\n }\n\n async startSession(pairRecord: UsbmuxdPairRecord) {\n debug(`startSession: ${pairRecord}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'StartSession',\n HostID: pairRecord.HostID,\n SystemBUID: pairRecord.SystemBUID,\n });\n\n if (isLockdowndSessionResponse(resp)) {\n if (resp.EnableSessionSSL) {\n this.protocolClient.socket = new tls.TLSSocket(this.protocolClient.socket, {\n secureContext: tls.createSecureContext({\n // Avoid using `secureProtocol` fixing the socket to a single TLS version.\n // Newer Node versions might not support older TLS versions.\n // By using the default `minVersion` and `maxVersion` options,\n // The socket will automatically use the appropriate TLS version.\n // See: https://nodejs.org/api/tls.html#tlscreatesecurecontextoptions\n cert: pairRecord.RootCertificate,\n key: pairRecord.RootPrivateKey,\n }),\n });\n debug(`Socket upgraded to TLS connection`);\n }\n // TODO: save sessionID for StopSession?\n } else {\n throw new ResponseError('Error starting session', resp);\n }\n }\n\n async getAllValues() {\n debug(`getAllValues`);\n\n const resp = await this.protocolClient.sendMessage({ Request: 'GetValue' });\n\n if (isLockdowndAllValuesResponse(resp)) {\n return resp.Value;\n } else {\n throw new ResponseError('Error getting lockdown value', resp);\n }\n }\n\n async getValue(val: string) {\n debug(`getValue: ${val}`);\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'GetValue',\n Key: val,\n });\n\n if (isLockdowndValueResponse(resp)) {\n return resp.Value;\n } else {\n throw new ResponseError('Error getting lockdown value', resp);\n }\n }\n\n async queryType() {\n debug('queryType');\n\n const resp = await this.protocolClient.sendMessage({\n Request: 'QueryType',\n });\n\n if (isLockdowndQueryTypeResponse(resp)) {\n return resp.Type;\n } else {\n throw new ResponseError('Error getting lockdown query type', resp);\n }\n }\n\n async doHandshake(pairRecord: UsbmuxdPairRecord) {\n debug('doHandshake');\n\n // if (await this.lockdownQueryType() !== 'com.apple.mobile.lockdown') {\n // throw new CommandError('Invalid type received from lockdown handshake');\n // }\n // await this.getLockdownValue('ProductVersion');\n // TODO: validate pair and pair\n await this.startSession(pairRecord);\n }\n}\n"],"names":["LockdowndClient","debug","Debug","isLockdowndServiceResponse","resp","Request","Service","undefined","Port","isLockdowndSessionResponse","isLockdowndAllValuesResponse","Value","isLockdowndValueResponse","Key","isLockdowndQueryTypeResponse","Type","ServiceClient","constructor","socket","LockdownProtocolClient","startService","name","protocolClient","sendMessage","port","enableServiceSSL","EnableServiceSSL","ResponseError","startSession","pairRecord","HostID","SystemBUID","EnableSessionSSL","tls","TLSSocket","secureContext","createSecureContext","cert","RootCertificate","key","RootPrivateKey","getAllValues","getValue","val","queryType","doHandshake"],"mappings":"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"}
|
|
@@ -10,27 +10,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "MobileImageMounterClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get:
|
|
14
|
-
return MobileImageMounterClient;
|
|
15
|
-
}
|
|
13
|
+
get: ()=>MobileImageMounterClient
|
|
16
14
|
});
|
|
17
15
|
function _debug() {
|
|
18
|
-
const data = /*#__PURE__*/
|
|
16
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("debug"));
|
|
19
17
|
_debug = function() {
|
|
20
18
|
return data;
|
|
21
19
|
};
|
|
22
20
|
return data;
|
|
23
21
|
}
|
|
24
22
|
function _fs() {
|
|
25
|
-
const data = /*#__PURE__*/
|
|
23
|
+
const data = /*#__PURE__*/ _interopRequireWildcard(require("fs"));
|
|
26
24
|
_fs = function() {
|
|
27
25
|
return data;
|
|
28
26
|
};
|
|
29
27
|
return data;
|
|
30
28
|
}
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
function
|
|
29
|
+
const _serviceClient = require("./ServiceClient");
|
|
30
|
+
const _lockdownProtocol = require("../protocol/LockdownProtocol");
|
|
31
|
+
function _interopRequireDefault(obj) {
|
|
34
32
|
return obj && obj.__esModule ? obj : {
|
|
35
33
|
default: obj
|
|
36
34
|
};
|
|
@@ -43,7 +41,7 @@ function _getRequireWildcardCache(nodeInterop) {
|
|
|
43
41
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
44
42
|
})(nodeInterop);
|
|
45
43
|
}
|
|
46
|
-
function
|
|
44
|
+
function _interopRequireWildcard(obj, nodeInterop) {
|
|
47
45
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
48
46
|
return obj;
|
|
49
47
|
}
|
|
@@ -56,9 +54,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
56
54
|
if (cache && cache.has(obj)) {
|
|
57
55
|
return cache.get(obj);
|
|
58
56
|
}
|
|
59
|
-
var newObj = {
|
|
60
|
-
__proto__: null
|
|
61
|
-
};
|
|
57
|
+
var newObj = {};
|
|
62
58
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
63
59
|
for(var key in obj){
|
|
64
60
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
@@ -76,56 +72,56 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
76
72
|
}
|
|
77
73
|
return newObj;
|
|
78
74
|
}
|
|
79
|
-
const debug = (0, _debug().default)(
|
|
75
|
+
const debug = (0, _debug().default)("expo:apple-device:client:mobile_image_mounter");
|
|
80
76
|
function isMIMUploadCompleteResponse(resp) {
|
|
81
|
-
return resp.Status ===
|
|
77
|
+
return resp.Status === "Complete";
|
|
82
78
|
}
|
|
83
79
|
function isMIMUploadReceiveBytesResponse(resp) {
|
|
84
|
-
return resp.Status ===
|
|
80
|
+
return resp.Status === "ReceiveBytesAck";
|
|
85
81
|
}
|
|
86
|
-
class MobileImageMounterClient extends
|
|
82
|
+
class MobileImageMounterClient extends _serviceClient.ServiceClient {
|
|
87
83
|
constructor(socket){
|
|
88
|
-
super(socket, new
|
|
84
|
+
super(socket, new _lockdownProtocol.LockdownProtocolClient(socket));
|
|
89
85
|
}
|
|
90
86
|
async mountImage(imagePath, imageSig) {
|
|
91
87
|
debug(`mountImage: ${imagePath}`);
|
|
92
88
|
const resp = await this.protocolClient.sendMessage({
|
|
93
|
-
Command:
|
|
89
|
+
Command: "MountImage",
|
|
94
90
|
ImagePath: imagePath,
|
|
95
91
|
ImageSignature: imageSig,
|
|
96
|
-
ImageType:
|
|
92
|
+
ImageType: "Developer"
|
|
97
93
|
});
|
|
98
|
-
if (!(0,
|
|
99
|
-
throw new
|
|
94
|
+
if (!(0, _lockdownProtocol.isLockdownResponse)(resp) || resp.Status !== "Complete") {
|
|
95
|
+
throw new _serviceClient.ResponseError(`There was an error mounting ${imagePath} on device`, resp);
|
|
100
96
|
}
|
|
101
97
|
}
|
|
102
98
|
async uploadImage(imagePath, imageSig) {
|
|
103
99
|
debug(`uploadImage: ${imagePath}`);
|
|
104
100
|
const imageSize = _fs().statSync(imagePath).size;
|
|
105
101
|
return this.protocolClient.sendMessage({
|
|
106
|
-
Command:
|
|
102
|
+
Command: "ReceiveBytes",
|
|
107
103
|
ImageSize: imageSize,
|
|
108
104
|
ImageSignature: imageSig,
|
|
109
|
-
ImageType:
|
|
105
|
+
ImageType: "Developer"
|
|
110
106
|
}, (resp, resolve, reject)=>{
|
|
111
107
|
if (isMIMUploadReceiveBytesResponse(resp)) {
|
|
112
108
|
const imageStream = _fs().createReadStream(imagePath);
|
|
113
109
|
imageStream.pipe(this.protocolClient.socket, {
|
|
114
110
|
end: false
|
|
115
111
|
});
|
|
116
|
-
imageStream.on(
|
|
112
|
+
imageStream.on("error", (err)=>reject(err));
|
|
117
113
|
} else if (isMIMUploadCompleteResponse(resp)) {
|
|
118
114
|
resolve();
|
|
119
115
|
} else {
|
|
120
|
-
reject(new
|
|
116
|
+
reject(new _serviceClient.ResponseError(`There was an error uploading image ${imagePath} to the device`, resp));
|
|
121
117
|
}
|
|
122
118
|
});
|
|
123
119
|
}
|
|
124
120
|
async lookupImage() {
|
|
125
|
-
debug(
|
|
121
|
+
debug("lookupImage");
|
|
126
122
|
return this.protocolClient.sendMessage({
|
|
127
|
-
Command:
|
|
128
|
-
ImageType:
|
|
123
|
+
Command: "LookupImage",
|
|
124
|
+
ImageType: "Developer"
|
|
129
125
|
});
|
|
130
126
|
}
|
|
131
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/MobileImageMounterClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport * as fs from 'fs';\nimport { Socket } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport type { LockdownCommand, LockdownResponse } from '../protocol/LockdownProtocol';\nimport { isLockdownResponse, LockdownProtocolClient } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:mobile_image_mounter');\n\nexport type MIMMountResponse = LockdownResponse;\n\nexport interface MIMMessage extends LockdownCommand {\n ImageType: string;\n}\n\nexport interface MIMLookupResponse extends LockdownResponse {\n ImageSignature?: string;\n}\n\nexport interface MIMUploadCompleteResponse extends LockdownResponse {\n Status: 'Complete';\n}\n\nexport interface MIMUploadReceiveBytesResponse extends LockdownResponse {\n Status: 'ReceiveBytesAck';\n}\n\nfunction isMIMUploadCompleteResponse(resp: any): resp is MIMUploadCompleteResponse {\n return resp.Status === 'Complete';\n}\n\nfunction isMIMUploadReceiveBytesResponse(resp: any): resp is MIMUploadReceiveBytesResponse {\n return resp.Status === 'ReceiveBytesAck';\n}\n\nexport class MobileImageMounterClient extends ServiceClient<LockdownProtocolClient<MIMMessage>> {\n constructor(socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async mountImage(imagePath: string, imageSig: Buffer) {\n debug(`mountImage: ${imagePath}`);\n\n const resp = await this.protocolClient.sendMessage({\n Command: 'MountImage',\n ImagePath: imagePath,\n ImageSignature: imageSig,\n ImageType: 'Developer',\n });\n\n if (!isLockdownResponse(resp) || resp.Status !== 'Complete') {\n throw new ResponseError(`There was an error mounting ${imagePath} on device`, resp);\n }\n }\n\n async uploadImage(imagePath: string, imageSig: Buffer) {\n debug(`uploadImage: ${imagePath}`);\n\n const imageSize = fs.statSync(imagePath).size;\n return this.protocolClient.sendMessage(\n {\n Command: 'ReceiveBytes',\n ImageSize: imageSize,\n ImageSignature: imageSig,\n ImageType: 'Developer',\n },\n (resp: any, resolve, reject) => {\n if (isMIMUploadReceiveBytesResponse(resp)) {\n const imageStream = fs.createReadStream(imagePath);\n imageStream.pipe(this.protocolClient.socket, { end: false });\n imageStream.on('error', (err) => reject(err));\n } else if (isMIMUploadCompleteResponse(resp)) {\n resolve();\n } else {\n reject(\n new ResponseError(`There was an error uploading image ${imagePath} to the device`, resp)\n );\n }\n }\n );\n }\n\n async lookupImage() {\n debug('lookupImage');\n\n return this.protocolClient.sendMessage<MIMLookupResponse>({\n Command: 'LookupImage',\n ImageType: 'Developer',\n });\n }\n}\n"],"names":["MobileImageMounterClient","debug","Debug","isMIMUploadCompleteResponse","resp","Status","isMIMUploadReceiveBytesResponse","ServiceClient","constructor","socket","LockdownProtocolClient","mountImage","imagePath","imageSig","protocolClient","sendMessage","Command","ImagePath","ImageSignature","ImageType","isLockdownResponse","ResponseError","uploadImage","imageSize","fs","statSync","size","ImageSize","resolve","reject","imageStream","createReadStream","pipe","end","on","err","lookupImage"],"mappings":"AAAA;;;;;;CAMC;;;;+
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/MobileImageMounterClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport Debug from 'debug';\nimport * as fs from 'fs';\nimport { Socket } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport type { LockdownCommand, LockdownResponse } from '../protocol/LockdownProtocol';\nimport { isLockdownResponse, LockdownProtocolClient } from '../protocol/LockdownProtocol';\n\nconst debug = Debug('expo:apple-device:client:mobile_image_mounter');\n\nexport type MIMMountResponse = LockdownResponse;\n\nexport interface MIMMessage extends LockdownCommand {\n ImageType: string;\n}\n\nexport interface MIMLookupResponse extends LockdownResponse {\n ImageSignature?: string;\n}\n\nexport interface MIMUploadCompleteResponse extends LockdownResponse {\n Status: 'Complete';\n}\n\nexport interface MIMUploadReceiveBytesResponse extends LockdownResponse {\n Status: 'ReceiveBytesAck';\n}\n\nfunction isMIMUploadCompleteResponse(resp: any): resp is MIMUploadCompleteResponse {\n return resp.Status === 'Complete';\n}\n\nfunction isMIMUploadReceiveBytesResponse(resp: any): resp is MIMUploadReceiveBytesResponse {\n return resp.Status === 'ReceiveBytesAck';\n}\n\nexport class MobileImageMounterClient extends ServiceClient<LockdownProtocolClient<MIMMessage>> {\n constructor(socket: Socket) {\n super(socket, new LockdownProtocolClient(socket));\n }\n\n async mountImage(imagePath: string, imageSig: Buffer) {\n debug(`mountImage: ${imagePath}`);\n\n const resp = await this.protocolClient.sendMessage({\n Command: 'MountImage',\n ImagePath: imagePath,\n ImageSignature: imageSig,\n ImageType: 'Developer',\n });\n\n if (!isLockdownResponse(resp) || resp.Status !== 'Complete') {\n throw new ResponseError(`There was an error mounting ${imagePath} on device`, resp);\n }\n }\n\n async uploadImage(imagePath: string, imageSig: Buffer) {\n debug(`uploadImage: ${imagePath}`);\n\n const imageSize = fs.statSync(imagePath).size;\n return this.protocolClient.sendMessage(\n {\n Command: 'ReceiveBytes',\n ImageSize: imageSize,\n ImageSignature: imageSig,\n ImageType: 'Developer',\n },\n (resp: any, resolve, reject) => {\n if (isMIMUploadReceiveBytesResponse(resp)) {\n const imageStream = fs.createReadStream(imagePath);\n imageStream.pipe(this.protocolClient.socket, { end: false });\n imageStream.on('error', (err) => reject(err));\n } else if (isMIMUploadCompleteResponse(resp)) {\n resolve();\n } else {\n reject(\n new ResponseError(`There was an error uploading image ${imagePath} to the device`, resp)\n );\n }\n }\n );\n }\n\n async lookupImage() {\n debug('lookupImage');\n\n return this.protocolClient.sendMessage<MIMLookupResponse>({\n Command: 'LookupImage',\n ImageType: 'Developer',\n });\n }\n}\n"],"names":["MobileImageMounterClient","debug","Debug","isMIMUploadCompleteResponse","resp","Status","isMIMUploadReceiveBytesResponse","ServiceClient","constructor","socket","LockdownProtocolClient","mountImage","imagePath","imageSig","protocolClient","sendMessage","Command","ImagePath","ImageSignature","ImageType","isLockdownResponse","ResponseError","uploadImage","imageSize","fs","statSync","size","ImageSize","resolve","reject","imageStream","createReadStream","pipe","end","on","err","lookupImage"],"mappings":"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"}
|
|
@@ -15,12 +15,8 @@ function _export(target, all) {
|
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
_export(exports, {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
ServiceClient: function() {
|
|
22
|
-
return ServiceClient;
|
|
23
|
-
}
|
|
18
|
+
ServiceClient: ()=>ServiceClient,
|
|
19
|
+
ResponseError: ()=>ResponseError
|
|
24
20
|
});
|
|
25
21
|
const _errors = require("../../../../utils/errors");
|
|
26
22
|
class ServiceClient {
|
|
@@ -31,7 +27,8 @@ class ServiceClient {
|
|
|
31
27
|
}
|
|
32
28
|
class ResponseError extends _errors.CommandError {
|
|
33
29
|
constructor(msg, response){
|
|
34
|
-
super(msg)
|
|
30
|
+
super(msg);
|
|
31
|
+
this.response = response;
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/ServiceClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Socket } from 'net';\n\nimport { CommandError } from '../../../../utils/errors';\nimport { ProtocolClient } from '../protocol/AbstractProtocol';\n\nexport abstract class ServiceClient<T extends ProtocolClient> {\n constructor(\n public socket: Socket,\n protected protocolClient: T\n ) {}\n}\n\nexport class ResponseError extends CommandError {\n constructor(\n msg: string,\n public response: any\n ) {\n super(msg);\n }\n}\n"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/ServiceClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport { Socket } from 'net';\n\nimport { CommandError } from '../../../../utils/errors';\nimport { ProtocolClient } from '../protocol/AbstractProtocol';\n\nexport abstract class ServiceClient<T extends ProtocolClient> {\n constructor(\n public socket: Socket,\n protected protocolClient: T\n ) {}\n}\n\nexport class ResponseError extends CommandError {\n constructor(\n msg: string,\n public response: any\n ) {\n super(msg);\n }\n}\n"],"names":["ServiceClient","ResponseError","constructor","socket","protocolClient","CommandError","msg","response"],"mappings":"AAAA;;;;;;CAMC,GACD;;;;;;;;;;;IAKsBA,aAAa,MAAbA,aAAa;IAOtBC,aAAa,MAAbA,aAAa;;wBAVG,0BAA0B;AAGhD,MAAeD,aAAa;IACjCE,YACSC,MAAc,EACXC,cAAiB,CAC3B;QAFOD,cAAAA,MAAc,CAAA;QACXC,sBAAAA,cAAiB,CAAA;IAC1B;CACJ;AAEM,MAAMH,aAAa,SAASI,OAAY,aAAA;IAC7CH,YACEI,GAAW,EACJC,QAAa,CACpB;QACA,KAAK,CAACD,GAAG,CAAC,CAAC;QAFJC,gBAAAA,QAAa,CAAA;IAGtB;CACD"}
|
|
@@ -10,19 +10,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
10
10
|
});
|
|
11
11
|
Object.defineProperty(exports, "UsbmuxdClient", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get:
|
|
14
|
-
return UsbmuxdClient;
|
|
15
|
-
}
|
|
13
|
+
get: ()=>UsbmuxdClient
|
|
16
14
|
});
|
|
17
15
|
function _plist() {
|
|
18
|
-
const data = /*#__PURE__*/
|
|
16
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("@expo/plist"));
|
|
19
17
|
_plist = function() {
|
|
20
18
|
return data;
|
|
21
19
|
};
|
|
22
20
|
return data;
|
|
23
21
|
}
|
|
24
22
|
function _debug() {
|
|
25
|
-
const data = /*#__PURE__*/
|
|
23
|
+
const data = /*#__PURE__*/ _interopRequireDefault(require("debug"));
|
|
26
24
|
_debug = function() {
|
|
27
25
|
return data;
|
|
28
26
|
};
|
|
@@ -35,18 +33,18 @@ function _net() {
|
|
|
35
33
|
};
|
|
36
34
|
return data;
|
|
37
35
|
}
|
|
38
|
-
const
|
|
36
|
+
const _serviceClient = require("./ServiceClient");
|
|
39
37
|
const _errors = require("../../../../utils/errors");
|
|
40
38
|
const _plist1 = require("../../../../utils/plist");
|
|
41
|
-
const
|
|
42
|
-
function
|
|
39
|
+
const _usbmuxProtocol = require("../protocol/UsbmuxProtocol");
|
|
40
|
+
function _interopRequireDefault(obj) {
|
|
43
41
|
return obj && obj.__esModule ? obj : {
|
|
44
42
|
default: obj
|
|
45
43
|
};
|
|
46
44
|
}
|
|
47
|
-
const debug = (0, _debug().default)(
|
|
45
|
+
const debug = (0, _debug().default)("expo:apple-device:client:usbmuxd");
|
|
48
46
|
function isUsbmuxdConnectResponse(resp) {
|
|
49
|
-
return resp.MessageType ===
|
|
47
|
+
return resp.MessageType === "Result" && resp.Number !== undefined;
|
|
50
48
|
}
|
|
51
49
|
function isUsbmuxdDeviceResponse(resp) {
|
|
52
50
|
return resp.DeviceList !== undefined;
|
|
@@ -54,20 +52,21 @@ function isUsbmuxdDeviceResponse(resp) {
|
|
|
54
52
|
function isUsbmuxdPairRecordResponse(resp) {
|
|
55
53
|
return resp.PairRecordData !== undefined;
|
|
56
54
|
}
|
|
57
|
-
class UsbmuxdClient extends
|
|
55
|
+
class UsbmuxdClient extends _serviceClient.ServiceClient {
|
|
58
56
|
constructor(socket){
|
|
59
|
-
super(socket, new
|
|
57
|
+
super(socket, new _usbmuxProtocol.UsbmuxProtocolClient(socket));
|
|
58
|
+
this.socket = socket;
|
|
60
59
|
}
|
|
61
60
|
static connectUsbmuxdSocket() {
|
|
62
|
-
debug(
|
|
63
|
-
if (process.platform ===
|
|
61
|
+
debug("connectUsbmuxdSocket");
|
|
62
|
+
if (process.platform === "win32") {
|
|
64
63
|
return (0, _net().connect)({
|
|
65
64
|
port: 27015,
|
|
66
|
-
host:
|
|
65
|
+
host: "localhost"
|
|
67
66
|
});
|
|
68
67
|
} else {
|
|
69
68
|
return (0, _net().connect)({
|
|
70
|
-
path:
|
|
69
|
+
path: "/var/run/usbmuxd"
|
|
71
70
|
});
|
|
72
71
|
}
|
|
73
72
|
}
|
|
@@ -75,7 +74,7 @@ class UsbmuxdClient extends _ServiceClient.ServiceClient {
|
|
|
75
74
|
debug(`connect: ${device.DeviceID} on port ${port}`);
|
|
76
75
|
debug(`connect:device: %O`, device);
|
|
77
76
|
const response = await this.protocolClient.sendMessage({
|
|
78
|
-
messageType:
|
|
77
|
+
messageType: "Connect",
|
|
79
78
|
extraFields: {
|
|
80
79
|
DeviceID: device.DeviceID,
|
|
81
80
|
PortNumber: htons(port)
|
|
@@ -85,25 +84,25 @@ class UsbmuxdClient extends _ServiceClient.ServiceClient {
|
|
|
85
84
|
if (isUsbmuxdConnectResponse(response) && response.Number === 0) {
|
|
86
85
|
return this.protocolClient.socket;
|
|
87
86
|
} else {
|
|
88
|
-
throw new
|
|
87
|
+
throw new _serviceClient.ResponseError(`There was an error connecting to the USB connected device (id: ${device.DeviceID}, port: ${port})`, response);
|
|
89
88
|
}
|
|
90
89
|
}
|
|
91
90
|
async getDevices() {
|
|
92
|
-
debug(
|
|
91
|
+
debug("getDevices");
|
|
93
92
|
const resp = await this.protocolClient.sendMessage({
|
|
94
|
-
messageType:
|
|
93
|
+
messageType: "ListDevices"
|
|
95
94
|
});
|
|
96
95
|
if (isUsbmuxdDeviceResponse(resp)) {
|
|
97
96
|
return resp.DeviceList;
|
|
98
97
|
} else {
|
|
99
|
-
throw new
|
|
98
|
+
throw new _serviceClient.ResponseError("Invalid response from getDevices", resp);
|
|
100
99
|
}
|
|
101
100
|
}
|
|
102
101
|
async getDevice(udid) {
|
|
103
|
-
debug(`getDevice ${udid ?
|
|
102
|
+
debug(`getDevice ${udid ? "udid: " + udid : ""}`);
|
|
104
103
|
const devices = await this.getDevices();
|
|
105
104
|
if (!devices.length) {
|
|
106
|
-
throw new _errors.CommandError(
|
|
105
|
+
throw new _errors.CommandError("APPLE_DEVICE_USBMUXD", "No devices found");
|
|
107
106
|
}
|
|
108
107
|
if (!udid) {
|
|
109
108
|
return devices[0];
|
|
@@ -113,21 +112,21 @@ class UsbmuxdClient extends _ServiceClient.ServiceClient {
|
|
|
113
112
|
return device;
|
|
114
113
|
}
|
|
115
114
|
}
|
|
116
|
-
throw new _errors.CommandError(
|
|
115
|
+
throw new _errors.CommandError("APPLE_DEVICE_USBMUXD", `No device found (udid: ${udid})`);
|
|
117
116
|
}
|
|
118
117
|
async readPairRecord(udid) {
|
|
119
118
|
debug(`readPairRecord: ${udid}`);
|
|
120
119
|
const resp = await this.protocolClient.sendMessage({
|
|
121
|
-
messageType:
|
|
120
|
+
messageType: "ReadPairRecord",
|
|
122
121
|
extraFields: {
|
|
123
122
|
PairRecordID: udid
|
|
124
123
|
}
|
|
125
124
|
});
|
|
126
125
|
if (isUsbmuxdPairRecordResponse(resp)) {
|
|
127
126
|
// the pair record can be created as a binary plist
|
|
128
|
-
const BPLIST_MAGIC = Buffer.from(
|
|
127
|
+
const BPLIST_MAGIC = Buffer.from("bplist00");
|
|
129
128
|
if (BPLIST_MAGIC.compare(resp.PairRecordData, 0, 8) === 0) {
|
|
130
|
-
debug(
|
|
129
|
+
debug("Binary plist pair record detected.");
|
|
131
130
|
const pairRecords = (0, _plist1.parsePlistBuffer)(resp.PairRecordData);
|
|
132
131
|
return Array.isArray(pairRecords) ? pairRecords[0] : pairRecords;
|
|
133
132
|
} else {
|
|
@@ -135,7 +134,7 @@ class UsbmuxdClient extends _ServiceClient.ServiceClient {
|
|
|
135
134
|
return _plist().default.parse(resp.PairRecordData.toString()); // TODO: type guard
|
|
136
135
|
}
|
|
137
136
|
} else {
|
|
138
|
-
throw new
|
|
137
|
+
throw new _serviceClient.ResponseError(`There was an error reading pair record for device (udid: ${udid})`, resp);
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/UsbmuxdClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport plist from '@expo/plist';\nimport Debug from 'debug';\nimport { Socket, connect } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { CommandError } from '../../../../utils/errors';\nimport { parsePlistBuffer } from '../../../../utils/plist';\nimport { UsbmuxProtocolClient } from '../protocol/UsbmuxProtocol';\n\nconst debug = Debug('expo:apple-device:client:usbmuxd');\n\nexport interface UsbmuxdDeviceProperties {\n /** @example 'USB' */\n ConnectionType: 'USB' | 'Network';\n /** @example 7 */\n DeviceID: number;\n /** @example 339738624 */\n LocationID?: number;\n /** @example '00008101-001964A22629003A' */\n SerialNumber: string;\n /**\n * Only available for USB connection.\n * @example 480000000\n */\n ConnectionSpeed?: number;\n /**\n * Only available for USB connection.\n * @example 4776\n */\n ProductID?: number;\n /**\n * Only available for USB connection.\n * @example '00008101-001964A22629003A'\n */\n UDID?: string;\n /**\n * Only available for USB connection.\n * @example '00008101001964A22629003A'\n */\n USBSerialNumber?: string;\n /**\n * Only available for Network connection.\n * @example '08:c7:29:05:f2:30@fe80::ac7:29ff:fe05:f230-supportsRP._apple-mobdev2._tcp.local.'\n */\n EscapedFullServiceName?: string;\n /**\n * Only available for Network connection.\n * @example 5\n */\n InterfaceIndex?: number;\n /**\n * Only available for Network connection.\n */\n NetworkAddress?: Buffer;\n}\n\nexport interface UsbmuxdDevice {\n /** @example 7 */\n DeviceID: number;\n MessageType: 'Attached'; // TODO: what else?\n Properties: UsbmuxdDeviceProperties;\n}\n\nexport interface UsbmuxdConnectResponse {\n MessageType: 'Result';\n Number: number;\n}\n\nexport interface UsbmuxdDeviceResponse {\n DeviceList: UsbmuxdDevice[];\n}\n\nexport interface UsbmuxdPairRecordResponse {\n PairRecordData: Buffer;\n}\n\nexport interface UsbmuxdPairRecord {\n DeviceCertificate: Buffer;\n EscrowBag: Buffer;\n HostCertificate: Buffer;\n HostID: string;\n HostPrivateKey: Buffer;\n RootCertificate: Buffer;\n RootPrivateKey: Buffer;\n SystemBUID: string;\n WiFiMACAddress: string;\n}\n\nfunction isUsbmuxdConnectResponse(resp: any): resp is UsbmuxdConnectResponse {\n return resp.MessageType === 'Result' && resp.Number !== undefined;\n}\n\nfunction isUsbmuxdDeviceResponse(resp: any): resp is UsbmuxdDeviceResponse {\n return resp.DeviceList !== undefined;\n}\n\nfunction isUsbmuxdPairRecordResponse(resp: any): resp is UsbmuxdPairRecordResponse {\n return resp.PairRecordData !== undefined;\n}\n\nexport class UsbmuxdClient extends ServiceClient<UsbmuxProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new UsbmuxProtocolClient(socket));\n }\n\n static connectUsbmuxdSocket(): Socket {\n debug('connectUsbmuxdSocket');\n if (process.platform === 'win32') {\n return connect({ port: 27015, host: 'localhost' });\n } else {\n return connect({ path: '/var/run/usbmuxd' });\n }\n }\n\n async connect(device: Pick<UsbmuxdDevice, 'DeviceID'>, port: number): Promise<Socket> {\n debug(`connect: ${device.DeviceID} on port ${port}`);\n debug(`connect:device: %O`, device);\n\n const response = await this.protocolClient.sendMessage({\n messageType: 'Connect',\n extraFields: {\n DeviceID: device.DeviceID,\n PortNumber: htons(port),\n },\n });\n debug(`connect:device:response: %O`, response);\n\n if (isUsbmuxdConnectResponse(response) && response.Number === 0) {\n return this.protocolClient.socket;\n } else {\n throw new ResponseError(\n `There was an error connecting to the USB connected device (id: ${device.DeviceID}, port: ${port})`,\n response\n );\n }\n }\n\n async getDevices(): Promise<UsbmuxdDevice[]> {\n debug('getDevices');\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ListDevices',\n });\n\n if (isUsbmuxdDeviceResponse(resp)) {\n return resp.DeviceList;\n } else {\n throw new ResponseError('Invalid response from getDevices', resp);\n }\n }\n\n async getDevice(udid?: string): Promise<UsbmuxdDevice> {\n debug(`getDevice ${udid ? 'udid: ' + udid : ''}`);\n const devices = await this.getDevices();\n\n if (!devices.length) {\n throw new CommandError('APPLE_DEVICE_USBMUXD', 'No devices found');\n }\n\n if (!udid) {\n return devices[0];\n }\n\n for (const device of devices) {\n if (device.Properties && device.Properties.SerialNumber === udid) {\n return device;\n }\n }\n\n throw new CommandError('APPLE_DEVICE_USBMUXD', `No device found (udid: ${udid})`);\n }\n\n async readPairRecord(udid: string): Promise<UsbmuxdPairRecord> {\n debug(`readPairRecord: ${udid}`);\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ReadPairRecord',\n extraFields: { PairRecordID: udid },\n });\n\n if (isUsbmuxdPairRecordResponse(resp)) {\n // the pair record can be created as a binary plist\n const BPLIST_MAGIC = Buffer.from('bplist00');\n if (BPLIST_MAGIC.compare(resp.PairRecordData, 0, 8) === 0) {\n debug('Binary plist pair record detected.');\n const pairRecords = parsePlistBuffer(resp.PairRecordData);\n return Array.isArray(pairRecords) ? pairRecords[0] : pairRecords;\n } else {\n // TODO: use parsePlistBuffer\n return plist.parse(resp.PairRecordData.toString()) as any; // TODO: type guard\n }\n } else {\n throw new ResponseError(\n `There was an error reading pair record for device (udid: ${udid})`,\n resp\n );\n }\n }\n}\n\nfunction htons(n: number): number {\n return ((n & 0xff) << 8) | ((n >> 8) & 0xff);\n}\n"],"names":["UsbmuxdClient","debug","Debug","isUsbmuxdConnectResponse","resp","MessageType","Number","undefined","isUsbmuxdDeviceResponse","DeviceList","isUsbmuxdPairRecordResponse","PairRecordData","ServiceClient","constructor","socket","UsbmuxProtocolClient","connectUsbmuxdSocket","process","platform","connect","port","host","path","device","DeviceID","response","protocolClient","sendMessage","messageType","extraFields","PortNumber","htons","ResponseError","getDevices","getDevice","udid","devices","length","CommandError","Properties","SerialNumber","readPairRecord","PairRecordID","BPLIST_MAGIC","Buffer","from","compare","pairRecords","parsePlistBuffer","Array","isArray","plist","parse","toString","n"],"mappings":"AAAA;;;;;;CAMC;;;;+BAqGYA;;;eAAAA;;;;gEApGK;;;;;;;gEACA;;;;;;;yBACc;;;;;;+BAEa;wBAChB;wBACI;gCACI;;;;;;AAErC,MAAMC,QAAQC,IAAAA,gBAAK,EAAC;AA+EpB,SAASC,yBAAyBC,IAAS;IACzC,OAAOA,KAAKC,WAAW,KAAK,YAAYD,KAAKE,MAAM,KAAKC;AAC1D;AAEA,SAASC,wBAAwBJ,IAAS;IACxC,OAAOA,KAAKK,UAAU,KAAKF;AAC7B;AAEA,SAASG,4BAA4BN,IAAS;IAC5C,OAAOA,KAAKO,cAAc,KAAKJ;AACjC;AAEO,MAAMP,sBAAsBY,4BAAa;IAC9CC,YAAY,AAAOC,MAAc,CAAE;QACjC,KAAK,CAACA,QAAQ,IAAIC,oCAAoB,CAACD,eADtBA,SAAAA;IAEnB;IAEA,OAAOE,uBAA+B;QACpCf,MAAM;QACN,IAAIgB,QAAQC,QAAQ,KAAK,SAAS;YAChC,OAAOC,IAAAA,cAAO,EAAC;gBAAEC,MAAM;gBAAOC,MAAM;YAAY;QAClD,OAAO;YACL,OAAOF,IAAAA,cAAO,EAAC;gBAAEG,MAAM;YAAmB;QAC5C;IACF;IAEA,MAAMH,QAAQI,MAAuC,EAAEH,IAAY,EAAmB;QACpFnB,MAAM,CAAC,SAAS,EAAEsB,OAAOC,QAAQ,CAAC,SAAS,EAAEJ,MAAM;QACnDnB,MAAM,CAAC,kBAAkB,CAAC,EAAEsB;QAE5B,MAAME,WAAW,MAAM,IAAI,CAACC,cAAc,CAACC,WAAW,CAAC;YACrDC,aAAa;YACbC,aAAa;gBACXL,UAAUD,OAAOC,QAAQ;gBACzBM,YAAYC,MAAMX;YACpB;QACF;QACAnB,MAAM,CAAC,2BAA2B,CAAC,EAAEwB;QAErC,IAAItB,yBAAyBsB,aAAaA,SAASnB,MAAM,KAAK,GAAG;YAC/D,OAAO,IAAI,CAACoB,cAAc,CAACZ,MAAM;QACnC,OAAO;YACL,MAAM,IAAIkB,4BAAa,CACrB,CAAC,+DAA+D,EAAET,OAAOC,QAAQ,CAAC,QAAQ,EAAEJ,KAAK,CAAC,CAAC,EACnGK;QAEJ;IACF;IAEA,MAAMQ,aAAuC;QAC3ChC,MAAM;QAEN,MAAMG,OAAO,MAAM,IAAI,CAACsB,cAAc,CAACC,WAAW,CAAC;YACjDC,aAAa;QACf;QAEA,IAAIpB,wBAAwBJ,OAAO;YACjC,OAAOA,KAAKK,UAAU;QACxB,OAAO;YACL,MAAM,IAAIuB,4BAAa,CAAC,oCAAoC5B;QAC9D;IACF;IAEA,MAAM8B,UAAUC,IAAa,EAA0B;QACrDlC,MAAM,CAAC,UAAU,EAAEkC,OAAO,WAAWA,OAAO,IAAI;QAChD,MAAMC,UAAU,MAAM,IAAI,CAACH,UAAU;QAErC,IAAI,CAACG,QAAQC,MAAM,EAAE;YACnB,MAAM,IAAIC,oBAAY,CAAC,wBAAwB;QACjD;QAEA,IAAI,CAACH,MAAM;YACT,OAAOC,OAAO,CAAC,EAAE;QACnB;QAEA,KAAK,MAAMb,UAAUa,QAAS;YAC5B,IAAIb,OAAOgB,UAAU,IAAIhB,OAAOgB,UAAU,CAACC,YAAY,KAAKL,MAAM;gBAChE,OAAOZ;YACT;QACF;QAEA,MAAM,IAAIe,oBAAY,CAAC,wBAAwB,CAAC,uBAAuB,EAAEH,KAAK,CAAC,CAAC;IAClF;IAEA,MAAMM,eAAeN,IAAY,EAA8B;QAC7DlC,MAAM,CAAC,gBAAgB,EAAEkC,MAAM;QAE/B,MAAM/B,OAAO,MAAM,IAAI,CAACsB,cAAc,CAACC,WAAW,CAAC;YACjDC,aAAa;YACbC,aAAa;gBAAEa,cAAcP;YAAK;QACpC;QAEA,IAAIzB,4BAA4BN,OAAO;YACrC,mDAAmD;YACnD,MAAMuC,eAAeC,OAAOC,IAAI,CAAC;YACjC,IAAIF,aAAaG,OAAO,CAAC1C,KAAKO,cAAc,EAAE,GAAG,OAAO,GAAG;gBACzDV,MAAM;gBACN,MAAM8C,cAAcC,IAAAA,wBAAgB,EAAC5C,KAAKO,cAAc;gBACxD,OAAOsC,MAAMC,OAAO,CAACH,eAAeA,WAAW,CAAC,EAAE,GAAGA;YACvD,OAAO;gBACL,6BAA6B;gBAC7B,OAAOI,gBAAK,CAACC,KAAK,CAAChD,KAAKO,cAAc,CAAC0C,QAAQ,KAAY,mBAAmB;YAChF;QACF,OAAO;YACL,MAAM,IAAIrB,4BAAa,CACrB,CAAC,yDAAyD,EAAEG,KAAK,CAAC,CAAC,EACnE/B;QAEJ;IACF;AACF;AAEA,SAAS2B,MAAMuB,CAAS;IACtB,OAAO,AAAEA,CAAAA,IAAI,IAAG,KAAM,IAAM,AAACA,KAAK,IAAK;AACzC"}
|
|
1
|
+
{"version":3,"sources":["../../../../../../src/run/ios/appleDevice/client/UsbmuxdClient.ts"],"sourcesContent":["/**\n * Copyright (c) 2021 Expo, Inc.\n * Copyright (c) 2018 Drifty Co.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nimport plist from '@expo/plist';\nimport Debug from 'debug';\nimport { Socket, connect } from 'net';\n\nimport { ResponseError, ServiceClient } from './ServiceClient';\nimport { CommandError } from '../../../../utils/errors';\nimport { parsePlistBuffer } from '../../../../utils/plist';\nimport { UsbmuxProtocolClient } from '../protocol/UsbmuxProtocol';\n\nconst debug = Debug('expo:apple-device:client:usbmuxd');\n\nexport interface UsbmuxdDeviceProperties {\n /** @example 'USB' */\n ConnectionType: 'USB' | 'Network';\n /** @example 7 */\n DeviceID: number;\n /** @example 339738624 */\n LocationID?: number;\n /** @example '00008101-001964A22629003A' */\n SerialNumber: string;\n /**\n * Only available for USB connection.\n * @example 480000000\n */\n ConnectionSpeed?: number;\n /**\n * Only available for USB connection.\n * @example 4776\n */\n ProductID?: number;\n /**\n * Only available for USB connection.\n * @example '00008101-001964A22629003A'\n */\n UDID?: string;\n /**\n * Only available for USB connection.\n * @example '00008101001964A22629003A'\n */\n USBSerialNumber?: string;\n /**\n * Only available for Network connection.\n * @example '08:c7:29:05:f2:30@fe80::ac7:29ff:fe05:f230-supportsRP._apple-mobdev2._tcp.local.'\n */\n EscapedFullServiceName?: string;\n /**\n * Only available for Network connection.\n * @example 5\n */\n InterfaceIndex?: number;\n /**\n * Only available for Network connection.\n */\n NetworkAddress?: Buffer;\n}\n\nexport interface UsbmuxdDevice {\n /** @example 7 */\n DeviceID: number;\n MessageType: 'Attached'; // TODO: what else?\n Properties: UsbmuxdDeviceProperties;\n}\n\nexport interface UsbmuxdConnectResponse {\n MessageType: 'Result';\n Number: number;\n}\n\nexport interface UsbmuxdDeviceResponse {\n DeviceList: UsbmuxdDevice[];\n}\n\nexport interface UsbmuxdPairRecordResponse {\n PairRecordData: Buffer;\n}\n\nexport interface UsbmuxdPairRecord {\n DeviceCertificate: Buffer;\n EscrowBag: Buffer;\n HostCertificate: Buffer;\n HostID: string;\n HostPrivateKey: Buffer;\n RootCertificate: Buffer;\n RootPrivateKey: Buffer;\n SystemBUID: string;\n WiFiMACAddress: string;\n}\n\nfunction isUsbmuxdConnectResponse(resp: any): resp is UsbmuxdConnectResponse {\n return resp.MessageType === 'Result' && resp.Number !== undefined;\n}\n\nfunction isUsbmuxdDeviceResponse(resp: any): resp is UsbmuxdDeviceResponse {\n return resp.DeviceList !== undefined;\n}\n\nfunction isUsbmuxdPairRecordResponse(resp: any): resp is UsbmuxdPairRecordResponse {\n return resp.PairRecordData !== undefined;\n}\n\nexport class UsbmuxdClient extends ServiceClient<UsbmuxProtocolClient> {\n constructor(public socket: Socket) {\n super(socket, new UsbmuxProtocolClient(socket));\n }\n\n static connectUsbmuxdSocket(): Socket {\n debug('connectUsbmuxdSocket');\n if (process.platform === 'win32') {\n return connect({ port: 27015, host: 'localhost' });\n } else {\n return connect({ path: '/var/run/usbmuxd' });\n }\n }\n\n async connect(device: Pick<UsbmuxdDevice, 'DeviceID'>, port: number): Promise<Socket> {\n debug(`connect: ${device.DeviceID} on port ${port}`);\n debug(`connect:device: %O`, device);\n\n const response = await this.protocolClient.sendMessage({\n messageType: 'Connect',\n extraFields: {\n DeviceID: device.DeviceID,\n PortNumber: htons(port),\n },\n });\n debug(`connect:device:response: %O`, response);\n\n if (isUsbmuxdConnectResponse(response) && response.Number === 0) {\n return this.protocolClient.socket;\n } else {\n throw new ResponseError(\n `There was an error connecting to the USB connected device (id: ${device.DeviceID}, port: ${port})`,\n response\n );\n }\n }\n\n async getDevices(): Promise<UsbmuxdDevice[]> {\n debug('getDevices');\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ListDevices',\n });\n\n if (isUsbmuxdDeviceResponse(resp)) {\n return resp.DeviceList;\n } else {\n throw new ResponseError('Invalid response from getDevices', resp);\n }\n }\n\n async getDevice(udid?: string): Promise<UsbmuxdDevice> {\n debug(`getDevice ${udid ? 'udid: ' + udid : ''}`);\n const devices = await this.getDevices();\n\n if (!devices.length) {\n throw new CommandError('APPLE_DEVICE_USBMUXD', 'No devices found');\n }\n\n if (!udid) {\n return devices[0];\n }\n\n for (const device of devices) {\n if (device.Properties && device.Properties.SerialNumber === udid) {\n return device;\n }\n }\n\n throw new CommandError('APPLE_DEVICE_USBMUXD', `No device found (udid: ${udid})`);\n }\n\n async readPairRecord(udid: string): Promise<UsbmuxdPairRecord> {\n debug(`readPairRecord: ${udid}`);\n\n const resp = await this.protocolClient.sendMessage({\n messageType: 'ReadPairRecord',\n extraFields: { PairRecordID: udid },\n });\n\n if (isUsbmuxdPairRecordResponse(resp)) {\n // the pair record can be created as a binary plist\n const BPLIST_MAGIC = Buffer.from('bplist00');\n if (BPLIST_MAGIC.compare(resp.PairRecordData, 0, 8) === 0) {\n debug('Binary plist pair record detected.');\n const pairRecords = parsePlistBuffer(resp.PairRecordData);\n return Array.isArray(pairRecords) ? pairRecords[0] : pairRecords;\n } else {\n // TODO: use parsePlistBuffer\n return plist.parse(resp.PairRecordData.toString()) as any; // TODO: type guard\n }\n } else {\n throw new ResponseError(\n `There was an error reading pair record for device (udid: ${udid})`,\n resp\n );\n }\n }\n}\n\nfunction htons(n: number): number {\n return ((n & 0xff) << 8) | ((n >> 8) & 0xff);\n}\n"],"names":["UsbmuxdClient","debug","Debug","isUsbmuxdConnectResponse","resp","MessageType","Number","undefined","isUsbmuxdDeviceResponse","DeviceList","isUsbmuxdPairRecordResponse","PairRecordData","ServiceClient","constructor","socket","UsbmuxProtocolClient","connectUsbmuxdSocket","process","platform","connect","port","host","path","device","DeviceID","response","protocolClient","sendMessage","messageType","extraFields","PortNumber","htons","ResponseError","getDevices","getDevice","udid","devices","length","CommandError","Properties","SerialNumber","readPairRecord","PairRecordID","BPLIST_MAGIC","Buffer","from","compare","pairRecords","parsePlistBuffer","Array","isArray","plist","parse","toString","n"],"mappings":"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"}
|