@expo/cli 0.1.3 → 0.2.0

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.
Files changed (289) hide show
  1. package/build/bin/cli +89 -4
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/rest/wrapFetchWithOffline.js +2 -23
  4. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  5. package/build/src/customize/customizeAsync.js +40 -0
  6. package/build/src/customize/customizeAsync.js.map +1 -0
  7. package/build/src/customize/generate.js +77 -0
  8. package/build/src/customize/generate.js.map +1 -0
  9. package/build/src/customize/index.js +41 -0
  10. package/build/src/customize/index.js.map +1 -0
  11. package/build/src/customize/resolveOptions.js +18 -0
  12. package/build/src/customize/resolveOptions.js.map +1 -0
  13. package/build/src/customize/templates.js +118 -0
  14. package/build/src/customize/templates.js.map +1 -0
  15. package/build/src/export/createMetadataJson.js +10 -7
  16. package/build/src/export/createMetadataJson.js.map +1 -1
  17. package/build/src/export/exportApp.js +32 -0
  18. package/build/src/export/exportApp.js.map +1 -1
  19. package/build/src/export/exportAssets.js +2 -3
  20. package/build/src/export/exportAssets.js.map +1 -1
  21. package/build/src/export/fork-bundleAsync.js +51 -34
  22. package/build/src/export/fork-bundleAsync.js.map +1 -1
  23. package/build/src/export/index.js +15 -10
  24. package/build/src/export/index.js.map +1 -1
  25. package/build/src/export/printBundleSizes.js +27 -48
  26. package/build/src/export/printBundleSizes.js.map +1 -1
  27. package/build/src/export/resolveOptions.js +44 -5
  28. package/build/src/export/resolveOptions.js.map +1 -1
  29. package/build/src/export/saveAssets.js +2 -1
  30. package/build/src/export/saveAssets.js.map +1 -1
  31. package/build/src/export/web/exportWebAsync.js +37 -0
  32. package/build/src/export/web/exportWebAsync.js.map +1 -0
  33. package/build/src/export/web/index.js +66 -0
  34. package/build/src/export/web/index.js.map +1 -0
  35. package/build/src/export/web/resolveOptions.js +13 -0
  36. package/build/src/export/web/resolveOptions.js.map +1 -0
  37. package/build/src/export/writeContents.js.map +1 -1
  38. package/build/src/install/checkPackages.js +2 -1
  39. package/build/src/install/checkPackages.js.map +1 -1
  40. package/build/src/install/index.js +1 -0
  41. package/build/src/install/index.js.map +1 -1
  42. package/build/src/install/installAsync.js +13 -5
  43. package/build/src/install/installAsync.js.map +1 -1
  44. package/build/src/install/resolveOptions.js +12 -65
  45. package/build/src/install/resolveOptions.js.map +1 -1
  46. package/build/src/install/utils/autoAddConfigPlugins.js +5 -26
  47. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  48. package/build/src/log.js.map +1 -1
  49. package/build/src/prebuild/copyTemplateFiles.js +5 -23
  50. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  51. package/build/src/prebuild/index.js +18 -12
  52. package/build/src/prebuild/index.js.map +1 -1
  53. package/build/src/prebuild/prebuildAsync.js +11 -12
  54. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  55. package/build/src/prebuild/resolveOptions.js +17 -0
  56. package/build/src/prebuild/resolveOptions.js.map +1 -1
  57. package/build/src/prebuild/resolveTemplate.js +2 -1
  58. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  59. package/build/src/prebuild/updatePackageJson.js +5 -5
  60. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  61. package/build/src/run/android/resolveInstallApkName.js +5 -26
  62. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  63. package/build/src/run/android/runAndroidAsync.js +3 -3
  64. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  65. package/build/src/run/ensureNativeProject.js +3 -0
  66. package/build/src/run/ensureNativeProject.js.map +1 -1
  67. package/build/src/run/hints.js +1 -1
  68. package/build/src/run/hints.js.map +1 -1
  69. package/build/src/run/ios/XcodeBuild.js +275 -0
  70. package/build/src/run/ios/XcodeBuild.js.map +1 -0
  71. package/build/src/run/ios/XcodeBuild.types.js +6 -0
  72. package/build/src/run/ios/XcodeBuild.types.js.map +1 -0
  73. package/build/src/run/ios/appleDevice/AppleDevice.js +161 -0
  74. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -0
  75. package/build/src/run/ios/appleDevice/ClientManager.js +161 -0
  76. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -0
  77. package/build/src/run/ios/appleDevice/client/AFCClient.js +195 -0
  78. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -0
  79. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +107 -0
  80. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -0
  81. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +97 -0
  82. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -0
  83. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +140 -0
  84. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -0
  85. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +91 -0
  86. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -0
  87. package/build/src/run/ios/appleDevice/client/ServiceClient.js +21 -0
  88. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -0
  89. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +117 -0
  90. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -0
  91. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +90 -0
  92. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -0
  93. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +332 -0
  94. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -0
  95. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +115 -0
  96. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -0
  97. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +126 -0
  98. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -0
  99. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +74 -0
  100. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -0
  101. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +65 -0
  102. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -0
  103. package/build/src/run/ios/codeSigning/Security.js +85 -0
  104. package/build/src/run/ios/codeSigning/Security.js.map +1 -0
  105. package/build/src/run/ios/codeSigning/configureCodeSigning.js +77 -0
  106. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -0
  107. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +102 -0
  108. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -0
  109. package/build/src/run/ios/codeSigning/settings.js +21 -0
  110. package/build/src/run/ios/codeSigning/settings.js.map +1 -0
  111. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +76 -0
  112. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -0
  113. package/build/src/run/ios/index.js +98 -0
  114. package/build/src/run/ios/index.js.map +1 -0
  115. package/build/src/run/ios/launchApp.js +75 -0
  116. package/build/src/run/ios/launchApp.js.map +1 -0
  117. package/build/src/run/ios/options/promptDevice.js +50 -0
  118. package/build/src/run/ios/options/promptDevice.js.map +1 -0
  119. package/build/src/run/ios/options/resolveDevice.js +92 -0
  120. package/build/src/run/ios/options/resolveDevice.js.map +1 -0
  121. package/build/src/run/ios/options/resolveNativeScheme.js +92 -0
  122. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -0
  123. package/build/src/run/ios/options/resolveOptions.js +44 -0
  124. package/build/src/run/ios/options/resolveOptions.js.map +1 -0
  125. package/build/src/run/ios/options/resolveXcodeProject.js +39 -0
  126. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -0
  127. package/build/src/run/ios/runIosAsync.js +85 -0
  128. package/build/src/run/ios/runIosAsync.js.map +1 -0
  129. package/build/src/run/resolveBundlerProps.js +9 -6
  130. package/build/src/run/resolveBundlerProps.js.map +1 -1
  131. package/build/src/run/startBundler.js +4 -2
  132. package/build/src/run/startBundler.js.map +1 -1
  133. package/build/src/start/doctor/Prerequisite.js +4 -4
  134. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  135. package/build/src/start/doctor/SecurityBinPrerequisite.js +27 -0
  136. package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -0
  137. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +2 -0
  138. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  139. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +69 -0
  140. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -0
  141. package/build/src/start/doctor/apple/XcodePrerequisite.js +2 -0
  142. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  143. package/build/src/start/doctor/dependencies/bundledNativeModules.js +3 -2
  144. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  145. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +7 -13
  146. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  147. package/build/src/start/doctor/dependencies/getMissingPackages.js +3 -24
  148. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  149. package/build/src/start/doctor/dependencies/getVersionedPackages.js +2 -23
  150. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  151. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +17 -9
  152. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  153. package/build/src/start/doctor/ngrok/ExternalModule.js +2 -1
  154. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  155. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +4 -3
  156. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  157. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +32 -31
  158. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  159. package/build/src/start/interface/KeyPressHandler.js +2 -0
  160. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  161. package/build/src/start/interface/interactiveActions.js +5 -5
  162. package/build/src/start/interface/interactiveActions.js.map +1 -1
  163. package/build/src/start/interface/startInterface.js +3 -2
  164. package/build/src/start/interface/startInterface.js.map +1 -1
  165. package/build/src/start/platforms/ExpoGoInstaller.js +2 -1
  166. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  167. package/build/src/start/platforms/PlatformManager.js +4 -24
  168. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  169. package/build/src/start/platforms/android/ADBServer.js +17 -32
  170. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  171. package/build/src/start/platforms/android/AndroidSdk.js +41 -0
  172. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
  173. package/build/src/start/platforms/android/activateWindow.js +4 -4
  174. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  175. package/build/src/start/platforms/android/adb.js +8 -3
  176. package/build/src/start/platforms/android/adb.js.map +1 -1
  177. package/build/src/start/platforms/android/adbReverse.js +3 -2
  178. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  179. package/build/src/start/platforms/android/emulator.js +8 -0
  180. package/build/src/start/platforms/android/emulator.js.map +1 -1
  181. package/build/src/start/platforms/android/gradle.js +2 -2
  182. package/build/src/start/platforms/android/gradle.js.map +1 -1
  183. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -5
  184. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  185. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -1
  186. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  187. package/build/src/start/platforms/ios/getBestSimulator.js +4 -4
  188. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  189. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -5
  190. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  191. package/build/src/start/platforms/ios/simctl.js +14 -0
  192. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  193. package/build/src/start/platforms/ios/simctlLogging.js +220 -0
  194. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -0
  195. package/build/src/start/platforms/ios/xcrun.js +2 -23
  196. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  197. package/build/src/start/project/devices.js +2 -0
  198. package/build/src/start/project/devices.js.map +1 -1
  199. package/build/src/start/server/AsyncNgrok.js +6 -5
  200. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  201. package/build/src/start/server/BundlerDevServer.js +15 -8
  202. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  203. package/build/src/start/server/DevServerManager.js +15 -5
  204. package/build/src/start/server/DevServerManager.js.map +1 -1
  205. package/build/src/start/server/DevelopmentSession.js +4 -0
  206. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  207. package/build/src/start/server/UrlCreator.js +10 -3
  208. package/build/src/start/server/UrlCreator.js.map +1 -1
  209. package/build/src/start/server/metro/MetroBundlerDevServer.js +9 -0
  210. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  211. package/build/src/start/server/metro/TerminalReporter.js +5 -0
  212. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  213. package/build/src/start/server/metro/instantiateMetro.js +11 -1
  214. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  215. package/build/src/start/server/metro/resolveFromProject.js +8 -0
  216. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  217. package/build/src/start/server/metro/withMetroMultiPlatform.js +115 -0
  218. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
  219. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +1 -1
  220. package/build/src/start/server/middleware/ExpoMiddleware.js +9 -4
  221. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  222. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +24 -0
  223. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
  224. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +2 -0
  225. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  226. package/build/src/start/server/middleware/ManifestMiddleware.js +57 -6
  227. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  228. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +6 -1
  229. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  230. package/build/src/start/server/middleware/ServeStaticMiddleware.js +62 -0
  231. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
  232. package/build/src/start/server/platformBundlers.js +18 -0
  233. package/build/src/start/server/platformBundlers.js.map +1 -0
  234. package/build/src/start/server/webTemplate.js +68 -0
  235. package/build/src/start/server/webTemplate.js.map +1 -0
  236. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +59 -19
  237. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  238. package/build/src/start/server/webpack/compile.js +64 -0
  239. package/build/src/start/server/webpack/compile.js.map +1 -0
  240. package/build/src/start/startAsync.js +21 -17
  241. package/build/src/start/startAsync.js.map +1 -1
  242. package/build/src/utils/FileNotifier.js +5 -2
  243. package/build/src/utils/FileNotifier.js.map +1 -1
  244. package/build/src/utils/analytics/rudderstackClient.js +30 -3
  245. package/build/src/utils/analytics/rudderstackClient.js.map +1 -1
  246. package/build/src/utils/cocoapods.js +47 -0
  247. package/build/src/utils/cocoapods.js.map +1 -1
  248. package/build/src/utils/dir.js +6 -1
  249. package/build/src/utils/dir.js.map +1 -1
  250. package/build/src/utils/downloadAppAsync.js +3 -2
  251. package/build/src/utils/downloadAppAsync.js.map +1 -1
  252. package/build/src/utils/downloadExpoGoAsync.js +7 -32
  253. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  254. package/build/src/utils/editor.js +3 -2
  255. package/build/src/utils/editor.js.map +1 -1
  256. package/build/src/utils/env.js +3 -0
  257. package/build/src/utils/env.js.map +1 -1
  258. package/build/src/utils/exit.js +4 -25
  259. package/build/src/utils/exit.js.map +1 -1
  260. package/build/src/utils/getRunningProcess.js +6 -2
  261. package/build/src/utils/getRunningProcess.js.map +1 -1
  262. package/build/src/utils/nodeModules.js +13 -102
  263. package/build/src/utils/nodeModules.js.map +1 -1
  264. package/build/src/utils/npm.js +3 -24
  265. package/build/src/utils/npm.js.map +1 -1
  266. package/build/src/utils/ora.js +1 -13
  267. package/build/src/utils/ora.js.map +1 -1
  268. package/build/src/utils/plist.js +59 -0
  269. package/build/src/utils/plist.js.map +1 -0
  270. package/build/src/utils/progress.js +46 -0
  271. package/build/src/utils/progress.js.map +1 -1
  272. package/build/src/utils/prompts.js +19 -3
  273. package/build/src/utils/prompts.js.map +1 -1
  274. package/build/src/utils/resolveArgs.js +4 -1
  275. package/build/src/utils/resolveArgs.js.map +1 -1
  276. package/build/src/utils/tar.js +3 -0
  277. package/build/src/utils/tar.js.map +1 -1
  278. package/build/src/utils/terminal.js +10 -0
  279. package/build/src/utils/terminal.js.map +1 -0
  280. package/build/src/utils/validateApplicationId.js +9 -2
  281. package/build/src/utils/validateApplicationId.js.map +1 -1
  282. package/build/src/utils/variadic.js +47 -0
  283. package/build/src/utils/variadic.js.map +1 -0
  284. package/package.json +14 -10
  285. package/static/template/babel.config.js +6 -0
  286. package/static/template/index.html +117 -0
  287. package/static/template/metro.config.js +4 -0
  288. package/static/template/serve.json +13 -0
  289. package/static/template/webpack.config.js +7 -0
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.AFC_FILE_OPEN_FLAGS = exports.AFC_STATUS = exports.AFC_OPS = exports.AFC_HEADER_SIZE = exports.AFC_MAGIC = void 0;
6
+ var _debug = _interopRequireDefault(require("debug"));
7
+ var _errors = require("../../../../utils/errors");
8
+ var _abstractProtocol = require("./AbstractProtocol");
9
+ function _interopRequireDefault(obj) {
10
+ return obj && obj.__esModule ? obj : {
11
+ default: obj
12
+ };
13
+ }
14
+ const debug = (0, _debug).default("expo:apple-device:protocol:afc");
15
+ const AFC_MAGIC = "CFA6LPAA";
16
+ exports.AFC_MAGIC = AFC_MAGIC;
17
+ const AFC_HEADER_SIZE = 40;
18
+ exports.AFC_HEADER_SIZE = AFC_HEADER_SIZE;
19
+ var AFC_OPS;
20
+ exports.AFC_OPS = AFC_OPS;
21
+ (function(AFC_OPS) {
22
+ AFC_OPS[AFC_OPS[/**
23
+ * Invalid
24
+ */ "INVALID"] = 0] = "INVALID";
25
+ AFC_OPS[AFC_OPS[/**
26
+ * Status
27
+ */ "STATUS"] = 1] = "STATUS";
28
+ AFC_OPS[AFC_OPS[/**
29
+ * Data
30
+ */ "DATA"] = 2] = "DATA";
31
+ AFC_OPS[AFC_OPS[/**
32
+ * ReadDir
33
+ */ "READ_DIR"] = 3] = "READ_DIR";
34
+ AFC_OPS[AFC_OPS[/**
35
+ * ReadFile
36
+ */ "READ_FILE"] = 4] = "READ_FILE";
37
+ AFC_OPS[AFC_OPS[/**
38
+ * WriteFile
39
+ */ "WRITE_FILE"] = 5] = "WRITE_FILE";
40
+ AFC_OPS[AFC_OPS[/**
41
+ * WritePart
42
+ */ "WRITE_PART"] = 6] = "WRITE_PART";
43
+ AFC_OPS[AFC_OPS[/**
44
+ * TruncateFile
45
+ */ "TRUNCATE"] = 7] = "TRUNCATE";
46
+ AFC_OPS[AFC_OPS[/**
47
+ * RemovePath
48
+ */ "REMOVE_PATH"] = 8] = "REMOVE_PATH";
49
+ AFC_OPS[AFC_OPS[/**
50
+ * MakeDir
51
+ */ "MAKE_DIR"] = 9] = "MAKE_DIR";
52
+ AFC_OPS[AFC_OPS[/**
53
+ * GetFileInfo
54
+ */ "GET_FILE_INFO"] = 10] = "GET_FILE_INFO";
55
+ AFC_OPS[AFC_OPS[/**
56
+ * GetDeviceInfo
57
+ */ "GET_DEVINFO"] = 11] = "GET_DEVINFO";
58
+ AFC_OPS[AFC_OPS[/**
59
+ * WriteFileAtomic (tmp file+rename)
60
+ */ "WRITE_FILE_ATOM"] = 12] = "WRITE_FILE_ATOM";
61
+ AFC_OPS[AFC_OPS[/**
62
+ * FileRefOpen
63
+ */ "FILE_OPEN"] = 13] = "FILE_OPEN";
64
+ AFC_OPS[AFC_OPS[/**
65
+ * FileRefOpenResult
66
+ */ "FILE_OPEN_RES"] = 14] = "FILE_OPEN_RES";
67
+ AFC_OPS[AFC_OPS[/**
68
+ * FileRefRead
69
+ */ "FILE_READ"] = 15] = "FILE_READ";
70
+ AFC_OPS[AFC_OPS[/**
71
+ * FileRefWrite
72
+ */ "FILE_WRITE"] = 16] = "FILE_WRITE";
73
+ AFC_OPS[AFC_OPS[/**
74
+ * FileRefSeek
75
+ */ "FILE_SEEK"] = 17] = "FILE_SEEK";
76
+ AFC_OPS[AFC_OPS[/**
77
+ * FileRefTell
78
+ */ "FILE_TELL"] = 18] = "FILE_TELL";
79
+ AFC_OPS[AFC_OPS[/**
80
+ * FileRefTellResult
81
+ */ "FILE_TELL_RES"] = 19] = "FILE_TELL_RES";
82
+ AFC_OPS[AFC_OPS[/**
83
+ * FileRefClose
84
+ */ "FILE_CLOSE"] = 20] = "FILE_CLOSE";
85
+ AFC_OPS[AFC_OPS[/**
86
+ * FileRefSetFileSize (ftruncate)
87
+ */ "FILE_SET_SIZE"] = 21] = "FILE_SET_SIZE";
88
+ AFC_OPS[AFC_OPS[/**
89
+ * GetConnectionInfo
90
+ */ "GET_CON_INFO"] = 22] = "GET_CON_INFO";
91
+ AFC_OPS[AFC_OPS[/**
92
+ * SetConnectionOptions
93
+ */ "SET_CON_OPTIONS"] = 23] = "SET_CON_OPTIONS";
94
+ AFC_OPS[AFC_OPS[/**
95
+ * RenamePath
96
+ */ "RENAME_PATH"] = 24] = "RENAME_PATH";
97
+ AFC_OPS[AFC_OPS[/**
98
+ * SetFSBlockSize (0x800000)
99
+ */ "SET_FS_BS"] = 25] = "SET_FS_BS";
100
+ AFC_OPS[AFC_OPS[/**
101
+ * SetSocketBlockSize (0x800000)
102
+ */ "SET_SOCKET_BS"] = 26] = "SET_SOCKET_BS";
103
+ AFC_OPS[AFC_OPS[/**
104
+ * FileRefLock
105
+ */ "FILE_LOCK"] = 27] = "FILE_LOCK";
106
+ AFC_OPS[AFC_OPS[/**
107
+ * MakeLink
108
+ */ "MAKE_LINK"] = 28] = "MAKE_LINK";
109
+ AFC_OPS[AFC_OPS[/**
110
+ * GetFileHash
111
+ */ "GET_FILE_HASH"] = 29] = "GET_FILE_HASH";
112
+ AFC_OPS[AFC_OPS[/**
113
+ * SetModTime
114
+ */ "SET_FILE_MOD_TIME"] = 30] = "SET_FILE_MOD_TIME";
115
+ AFC_OPS[AFC_OPS[/**
116
+ * GetFileHashWithRange
117
+ */ "GET_FILE_HASH_RANGE"] = 31] = "GET_FILE_HASH_RANGE";
118
+ AFC_OPS[AFC_OPS[// iOS 6+
119
+ /**
120
+ * FileRefSetImmutableHint
121
+ */ "FILE_SET_IMMUTABLE_HINT"] = 32] = "FILE_SET_IMMUTABLE_HINT";
122
+ AFC_OPS[AFC_OPS[/**
123
+ * GetSizeOfPathContents
124
+ */ "GET_SIZE_OF_PATH_CONTENTS"] = 33] = "GET_SIZE_OF_PATH_CONTENTS";
125
+ AFC_OPS[AFC_OPS[/**
126
+ * RemovePathAndContents
127
+ */ "REMOVE_PATH_AND_CONTENTS"] = 34] = "REMOVE_PATH_AND_CONTENTS";
128
+ AFC_OPS[AFC_OPS[/**
129
+ * DirectoryEnumeratorRefOpen
130
+ */ "DIR_OPEN"] = 35] = "DIR_OPEN";
131
+ AFC_OPS[AFC_OPS[/**
132
+ * DirectoryEnumeratorRefOpenResult
133
+ */ "DIR_OPEN_RESULT"] = 36] = "DIR_OPEN_RESULT";
134
+ AFC_OPS[AFC_OPS[/**
135
+ * DirectoryEnumeratorRefRead
136
+ */ "DIR_READ"] = 37] = "DIR_READ";
137
+ AFC_OPS[AFC_OPS[/**
138
+ * DirectoryEnumeratorRefClose
139
+ */ "DIR_CLOSE"] = 38] = "DIR_CLOSE";
140
+ AFC_OPS[AFC_OPS[// iOS 7+
141
+ /**
142
+ * FileRefReadWithOffset
143
+ */ "FILE_READ_OFFSET"] = 39] = "FILE_READ_OFFSET";
144
+ AFC_OPS[AFC_OPS[/**
145
+ * FileRefWriteWithOffset
146
+ */ "FILE_WRITE_OFFSET"] = 40] = "FILE_WRITE_OFFSET";
147
+ })(AFC_OPS || (exports.AFC_OPS = AFC_OPS = {}));
148
+ var AFC_STATUS;
149
+ exports.AFC_STATUS = AFC_STATUS;
150
+ (function(AFC_STATUS) {
151
+ AFC_STATUS[AFC_STATUS["SUCCESS"] = 0] = "SUCCESS";
152
+ AFC_STATUS[AFC_STATUS["UNKNOWN_ERROR"] = 1] = "UNKNOWN_ERROR";
153
+ AFC_STATUS[AFC_STATUS["OP_HEADER_INVALID"] = 2] = "OP_HEADER_INVALID";
154
+ AFC_STATUS[AFC_STATUS["NO_RESOURCES"] = 3] = "NO_RESOURCES";
155
+ AFC_STATUS[AFC_STATUS["READ_ERROR"] = 4] = "READ_ERROR";
156
+ AFC_STATUS[AFC_STATUS["WRITE_ERROR"] = 5] = "WRITE_ERROR";
157
+ AFC_STATUS[AFC_STATUS["UNKNOWN_PACKET_TYPE"] = 6] = "UNKNOWN_PACKET_TYPE";
158
+ AFC_STATUS[AFC_STATUS["INVALID_ARG"] = 7] = "INVALID_ARG";
159
+ AFC_STATUS[AFC_STATUS["OBJECT_NOT_FOUND"] = 8] = "OBJECT_NOT_FOUND";
160
+ AFC_STATUS[AFC_STATUS["OBJECT_IS_DIR"] = 9] = "OBJECT_IS_DIR";
161
+ AFC_STATUS[AFC_STATUS["PERM_DENIED"] = 10] = "PERM_DENIED";
162
+ AFC_STATUS[AFC_STATUS["SERVICE_NOT_CONNECTED"] = 11] = "SERVICE_NOT_CONNECTED";
163
+ AFC_STATUS[AFC_STATUS["OP_TIMEOUT"] = 12] = "OP_TIMEOUT";
164
+ AFC_STATUS[AFC_STATUS["TOO_MUCH_DATA"] = 13] = "TOO_MUCH_DATA";
165
+ AFC_STATUS[AFC_STATUS["END_OF_DATA"] = 14] = "END_OF_DATA";
166
+ AFC_STATUS[AFC_STATUS["OP_NOT_SUPPORTED"] = 15] = "OP_NOT_SUPPORTED";
167
+ AFC_STATUS[AFC_STATUS["OBJECT_EXISTS"] = 16] = "OBJECT_EXISTS";
168
+ AFC_STATUS[AFC_STATUS["OBJECT_BUSY"] = 17] = "OBJECT_BUSY";
169
+ AFC_STATUS[AFC_STATUS["NO_SPACE_LEFT"] = 18] = "NO_SPACE_LEFT";
170
+ AFC_STATUS[AFC_STATUS["OP_WOULD_BLOCK"] = 19] = "OP_WOULD_BLOCK";
171
+ AFC_STATUS[AFC_STATUS["IO_ERROR"] = 20] = "IO_ERROR";
172
+ AFC_STATUS[AFC_STATUS["OP_INTERRUPTED"] = 21] = "OP_INTERRUPTED";
173
+ AFC_STATUS[AFC_STATUS["OP_IN_PROGRESS"] = 22] = "OP_IN_PROGRESS";
174
+ AFC_STATUS[AFC_STATUS["INTERNAL_ERROR"] = 23] = "INTERNAL_ERROR";
175
+ AFC_STATUS[AFC_STATUS["MUX_ERROR"] = 30] = "MUX_ERROR";
176
+ AFC_STATUS[AFC_STATUS["NO_MEM"] = 31] = "NO_MEM";
177
+ AFC_STATUS[AFC_STATUS["NOT_ENOUGH_DATA"] = 32] = "NOT_ENOUGH_DATA";
178
+ AFC_STATUS[AFC_STATUS["DIR_NOT_EMPTY"] = 33] = "DIR_NOT_EMPTY";
179
+ AFC_STATUS[AFC_STATUS["FORCE_SIGNED_TYPE"] = -1] = "FORCE_SIGNED_TYPE";
180
+ })(AFC_STATUS || (exports.AFC_STATUS = AFC_STATUS = {}));
181
+ var AFC_FILE_OPEN_FLAGS;
182
+ exports.AFC_FILE_OPEN_FLAGS = AFC_FILE_OPEN_FLAGS;
183
+ (function(AFC_FILE_OPEN_FLAGS) {
184
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
185
+ * r (O_RDONLY)
186
+ */ "RDONLY"] = 1] = "RDONLY";
187
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
188
+ * r+ (O_RDWR | O_CREAT)
189
+ */ "RW"] = 2] = "RW";
190
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
191
+ * w (O_WRONLY | O_CREAT | O_TRUNC)
192
+ */ "WRONLY"] = 3] = "WRONLY";
193
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
194
+ * w+ (O_RDWR | O_CREAT | O_TRUNC)
195
+ */ "WR"] = 4] = "WR";
196
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
197
+ * a (O_WRONLY | O_APPEND | O_CREAT)
198
+ */ "APPEND"] = 5] = "APPEND";
199
+ AFC_FILE_OPEN_FLAGS[AFC_FILE_OPEN_FLAGS[/**
200
+ * a+ (O_RDWR | O_APPEND | O_CREAT)
201
+ */ "RDAPPEND"] = 6] = "RDAPPEND";
202
+ })(AFC_FILE_OPEN_FLAGS || (exports.AFC_FILE_OPEN_FLAGS = AFC_FILE_OPEN_FLAGS = {}));
203
+ function isAFCResponse(resp) {
204
+ return AFC_OPS[resp.operation] !== undefined && resp.id !== undefined && resp.data !== undefined;
205
+ }
206
+ function isStatusResponse(resp) {
207
+ return isAFCResponse(resp) && resp.operation === 1;
208
+ }
209
+ function isErrorStatusResponse(resp) {
210
+ return isStatusResponse(resp) && resp.data !== 0;
211
+ }
212
+ class AFCInternalError extends Error {
213
+ constructor(msg, requestId){
214
+ super(msg);
215
+ this.requestId = requestId;
216
+ }
217
+ }
218
+ class AFCError extends Error {
219
+ constructor(msg, status){
220
+ super(msg);
221
+ this.status = status;
222
+ }
223
+ }
224
+ exports.AFCError = AFCError;
225
+ class AFCProtocolClient extends _abstractProtocol.ProtocolClient {
226
+ requestId = 0;
227
+ requestCallbacks = {};
228
+ constructor(socket){
229
+ super(socket, new _abstractProtocol.ProtocolReaderFactory(AFCProtocolReader), new AFCProtocolWriter());
230
+ const reader = this.readerFactory.create((resp, err)=>{
231
+ if (err && err instanceof AFCInternalError) {
232
+ this.requestCallbacks[err.requestId](resp, err);
233
+ } else if (isErrorStatusResponse(resp)) {
234
+ this.requestCallbacks[resp.id](resp, new AFCError(AFC_STATUS[resp.data], resp.data));
235
+ } else {
236
+ this.requestCallbacks[resp.id](resp);
237
+ }
238
+ });
239
+ socket.on("data", reader.onData);
240
+ }
241
+ sendMessage(msg) {
242
+ return new Promise((resolve, reject)=>{
243
+ const requestId = this.requestId++;
244
+ this.requestCallbacks[requestId] = async (resp, err)=>{
245
+ if (err) {
246
+ reject(err);
247
+ return;
248
+ }
249
+ if (isAFCResponse(resp)) {
250
+ resolve(resp);
251
+ } else {
252
+ reject(new _errors.CommandError("APPLE_DEVICE_AFC", "Malformed AFC response"));
253
+ }
254
+ };
255
+ this.writer.write(this.socket, {
256
+ ...msg,
257
+ requestId
258
+ });
259
+ });
260
+ }
261
+ }
262
+ exports.AFCProtocolClient = AFCProtocolClient;
263
+ class AFCProtocolReader extends _abstractProtocol.ProtocolReader {
264
+ constructor(callback){
265
+ super(AFC_HEADER_SIZE, callback);
266
+ }
267
+ parseHeader(data) {
268
+ const magic = data.slice(0, 8).toString("ascii");
269
+ if (magic !== AFC_MAGIC) {
270
+ throw new AFCInternalError(`Invalid AFC packet received (magic != ${AFC_MAGIC})`, data.readUInt32LE(24));
271
+ }
272
+ // technically these are uint64
273
+ this.header = {
274
+ magic,
275
+ totalLength: data.readUInt32LE(8),
276
+ headerLength: data.readUInt32LE(16),
277
+ requestId: data.readUInt32LE(24),
278
+ operation: data.readUInt32LE(32)
279
+ };
280
+ debug(`parse header: ${JSON.stringify(this.header)}`);
281
+ if (this.header.headerLength < AFC_HEADER_SIZE) {
282
+ throw new AFCInternalError("Invalid AFC header", this.header.requestId);
283
+ }
284
+ return this.header.totalLength - AFC_HEADER_SIZE;
285
+ }
286
+ parseBody(data) {
287
+ const body = {
288
+ operation: this.header.operation,
289
+ id: this.header.requestId,
290
+ data
291
+ };
292
+ if (isStatusResponse(body)) {
293
+ const status = data.readUInt32LE(0);
294
+ debug(`${AFC_OPS[this.header.operation]} response: ${AFC_STATUS[status]}`);
295
+ body.data = status;
296
+ } else if (data.length <= 8) {
297
+ debug(`${AFC_OPS[this.header.operation]} response: ${Array.prototype.toString.call(body)}`);
298
+ } else {
299
+ debug(`${AFC_OPS[this.header.operation]} response length: ${data.length} bytes`);
300
+ }
301
+ return body;
302
+ }
303
+ }
304
+ exports.AFCProtocolReader = AFCProtocolReader;
305
+ class AFCProtocolWriter {
306
+ write(socket, msg) {
307
+ const { data , payload , operation , requestId } = msg;
308
+ const dataLength = data ? data.length : 0;
309
+ const payloadLength = payload ? payload.length : 0;
310
+ const header = Buffer.alloc(AFC_HEADER_SIZE);
311
+ const magic = Buffer.from(AFC_MAGIC);
312
+ magic.copy(header);
313
+ header.writeUInt32LE(AFC_HEADER_SIZE + dataLength + payloadLength, 8);
314
+ header.writeUInt32LE(AFC_HEADER_SIZE + dataLength, 16);
315
+ header.writeUInt32LE(requestId, 24);
316
+ header.writeUInt32LE(operation, 32);
317
+ socket.write(header);
318
+ socket.write(data);
319
+ if (data.length <= 8) {
320
+ debug(`socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${Array.prototype.toString.call(data)}`);
321
+ } else {
322
+ debug(`socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${data.length} bytes`);
323
+ }
324
+ debug(`socket write, bytes written ${header.length} (header), ${data.length} (body)`);
325
+ if (payload) {
326
+ socket.write(payload);
327
+ }
328
+ }
329
+ }
330
+ exports.AFCProtocolWriter = AFCProtocolWriter;
331
+
332
+ //# sourceMappingURL=AFCProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/run/ios/appleDevice/protocol/AFCProtocol.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';\n\nimport { CommandError } from '../../../../utils/errors';\nimport type { ProtocolReaderCallback, ProtocolWriter } from './AbstractProtocol';\nimport { ProtocolClient, ProtocolReader, ProtocolReaderFactory } from './AbstractProtocol';\n\nconst debug = Debug('expo:apple-device:protocol:afc');\n\nexport const AFC_MAGIC = 'CFA6LPAA';\nexport const AFC_HEADER_SIZE = 40;\n\nexport interface AFCHeader {\n magic: typeof AFC_MAGIC;\n totalLength: number;\n headerLength: number;\n requestId: number;\n operation: AFC_OPS;\n}\n\nexport interface AFCMessage {\n operation: AFC_OPS;\n data?: any;\n payload?: any;\n}\n\nexport interface AFCResponse {\n operation: AFC_OPS;\n id: number;\n data: Buffer;\n}\n\nexport interface AFCStatusResponse {\n operation: AFC_OPS.STATUS;\n id: number;\n data: number;\n}\n\n/**\n * AFC Operations\n */\nexport enum AFC_OPS {\n /**\n * Invalid\n */\n INVALID = 0x00000000,\n\n /**\n * Status\n */\n STATUS = 0x00000001,\n\n /**\n * Data\n */\n DATA = 0x00000002,\n\n /**\n * ReadDir\n */\n READ_DIR = 0x00000003,\n\n /**\n * ReadFile\n */\n READ_FILE = 0x00000004,\n\n /**\n * WriteFile\n */\n WRITE_FILE = 0x00000005,\n\n /**\n * WritePart\n */\n WRITE_PART = 0x00000006,\n\n /**\n * TruncateFile\n */\n TRUNCATE = 0x00000007,\n\n /**\n * RemovePath\n */\n REMOVE_PATH = 0x00000008,\n\n /**\n * MakeDir\n */\n MAKE_DIR = 0x00000009,\n\n /**\n * GetFileInfo\n */\n GET_FILE_INFO = 0x0000000a,\n\n /**\n * GetDeviceInfo\n */\n GET_DEVINFO = 0x0000000b,\n\n /**\n * WriteFileAtomic (tmp file+rename)\n */\n WRITE_FILE_ATOM = 0x0000000c,\n\n /**\n * FileRefOpen\n */\n FILE_OPEN = 0x0000000d,\n\n /**\n * FileRefOpenResult\n */\n FILE_OPEN_RES = 0x0000000e,\n\n /**\n * FileRefRead\n */\n FILE_READ = 0x0000000f,\n\n /**\n * FileRefWrite\n */\n FILE_WRITE = 0x00000010,\n\n /**\n * FileRefSeek\n */\n FILE_SEEK = 0x00000011,\n\n /**\n * FileRefTell\n */\n FILE_TELL = 0x00000012,\n\n /**\n * FileRefTellResult\n */\n FILE_TELL_RES = 0x00000013,\n\n /**\n * FileRefClose\n */\n FILE_CLOSE = 0x00000014,\n\n /**\n * FileRefSetFileSize (ftruncate)\n */\n FILE_SET_SIZE = 0x00000015,\n\n /**\n * GetConnectionInfo\n */\n GET_CON_INFO = 0x00000016,\n\n /**\n * SetConnectionOptions\n */\n SET_CON_OPTIONS = 0x00000017,\n\n /**\n * RenamePath\n */\n RENAME_PATH = 0x00000018,\n\n /**\n * SetFSBlockSize (0x800000)\n */\n SET_FS_BS = 0x00000019,\n\n /**\n * SetSocketBlockSize (0x800000)\n */\n SET_SOCKET_BS = 0x0000001a,\n\n /**\n * FileRefLock\n */\n FILE_LOCK = 0x0000001b,\n\n /**\n * MakeLink\n */\n MAKE_LINK = 0x0000001c,\n\n /**\n * GetFileHash\n */\n GET_FILE_HASH = 0x0000001d,\n\n /**\n * SetModTime\n */\n SET_FILE_MOD_TIME = 0x0000001e,\n\n /**\n * GetFileHashWithRange\n */\n GET_FILE_HASH_RANGE = 0x0000001f,\n\n // iOS 6+\n\n /**\n * FileRefSetImmutableHint\n */\n FILE_SET_IMMUTABLE_HINT = 0x00000020,\n\n /**\n * GetSizeOfPathContents\n */\n GET_SIZE_OF_PATH_CONTENTS = 0x00000021,\n\n /**\n * RemovePathAndContents\n */\n REMOVE_PATH_AND_CONTENTS = 0x00000022,\n\n /**\n * DirectoryEnumeratorRefOpen\n */\n DIR_OPEN = 0x00000023,\n\n /**\n * DirectoryEnumeratorRefOpenResult\n */\n DIR_OPEN_RESULT = 0x00000024,\n\n /**\n * DirectoryEnumeratorRefRead\n */\n DIR_READ = 0x00000025,\n\n /**\n * DirectoryEnumeratorRefClose\n */\n DIR_CLOSE = 0x00000026,\n\n // iOS 7+\n\n /**\n * FileRefReadWithOffset\n */\n FILE_READ_OFFSET = 0x00000027,\n\n /**\n * FileRefWriteWithOffset\n */\n FILE_WRITE_OFFSET = 0x00000028,\n}\n\n/**\n * Error Codes\n */\nexport enum AFC_STATUS {\n SUCCESS = 0,\n UNKNOWN_ERROR = 1,\n OP_HEADER_INVALID = 2,\n NO_RESOURCES = 3,\n READ_ERROR = 4,\n WRITE_ERROR = 5,\n UNKNOWN_PACKET_TYPE = 6,\n INVALID_ARG = 7,\n OBJECT_NOT_FOUND = 8,\n OBJECT_IS_DIR = 9,\n PERM_DENIED = 10,\n SERVICE_NOT_CONNECTED = 11,\n OP_TIMEOUT = 12,\n TOO_MUCH_DATA = 13,\n END_OF_DATA = 14,\n OP_NOT_SUPPORTED = 15,\n OBJECT_EXISTS = 16,\n OBJECT_BUSY = 17,\n NO_SPACE_LEFT = 18,\n OP_WOULD_BLOCK = 19,\n IO_ERROR = 20,\n OP_INTERRUPTED = 21,\n OP_IN_PROGRESS = 22,\n INTERNAL_ERROR = 23,\n MUX_ERROR = 30,\n NO_MEM = 31,\n NOT_ENOUGH_DATA = 32,\n DIR_NOT_EMPTY = 33,\n FORCE_SIGNED_TYPE = -1,\n}\n\nexport enum AFC_FILE_OPEN_FLAGS {\n /**\n * r (O_RDONLY)\n */\n RDONLY = 0x00000001,\n\n /**\n * r+ (O_RDWR | O_CREAT)\n */\n RW = 0x00000002,\n\n /**\n * w (O_WRONLY | O_CREAT | O_TRUNC)\n */\n WRONLY = 0x00000003,\n\n /**\n * w+ (O_RDWR | O_CREAT | O_TRUNC)\n */\n WR = 0x00000004,\n\n /**\n * a (O_WRONLY | O_APPEND | O_CREAT)\n */\n APPEND = 0x00000005,\n\n /**\n * a+ (O_RDWR | O_APPEND | O_CREAT)\n */\n RDAPPEND = 0x00000006,\n}\n\nfunction isAFCResponse(resp: any): resp is AFCResponse {\n return AFC_OPS[resp.operation] !== undefined && resp.id !== undefined && resp.data !== undefined;\n}\n\nfunction isStatusResponse(resp: any): resp is AFCStatusResponse {\n return isAFCResponse(resp) && resp.operation === AFC_OPS.STATUS;\n}\n\nfunction isErrorStatusResponse(resp: AFCResponse): boolean {\n return isStatusResponse(resp) && resp.data !== AFC_STATUS.SUCCESS;\n}\n\nclass AFCInternalError extends Error {\n constructor(msg: string, public requestId: number) {\n super(msg);\n }\n}\n\nexport class AFCError extends Error {\n constructor(msg: string, public status: AFC_STATUS) {\n super(msg);\n }\n}\n\nexport class AFCProtocolClient extends ProtocolClient {\n private requestId = 0;\n private requestCallbacks: { [key: number]: ProtocolReaderCallback } = {};\n\n constructor(socket: Socket) {\n super(socket, new ProtocolReaderFactory(AFCProtocolReader), new AFCProtocolWriter());\n\n const reader = this.readerFactory.create((resp, err) => {\n if (err && err instanceof AFCInternalError) {\n this.requestCallbacks[err.requestId](resp, err);\n } else if (isErrorStatusResponse(resp)) {\n this.requestCallbacks[resp.id](resp, new AFCError(AFC_STATUS[resp.data], resp.data));\n } else {\n this.requestCallbacks[resp.id](resp);\n }\n });\n socket.on('data', reader.onData);\n }\n\n sendMessage(msg: AFCMessage): Promise<AFCResponse> {\n return new Promise<AFCResponse>((resolve, reject) => {\n const requestId = this.requestId++;\n this.requestCallbacks[requestId] = async (resp: any, err?: Error) => {\n if (err) {\n reject(err);\n return;\n }\n if (isAFCResponse(resp)) {\n resolve(resp);\n } else {\n reject(new CommandError('APPLE_DEVICE_AFC', 'Malformed AFC response'));\n }\n };\n this.writer.write(this.socket, { ...msg, requestId });\n });\n }\n}\n\nexport class AFCProtocolReader extends ProtocolReader {\n private header!: AFCHeader; // TODO: ! -> ?\n\n constructor(callback: ProtocolReaderCallback) {\n super(AFC_HEADER_SIZE, callback);\n }\n\n parseHeader(data: Buffer) {\n const magic = data.slice(0, 8).toString('ascii');\n if (magic !== AFC_MAGIC) {\n throw new AFCInternalError(\n `Invalid AFC packet received (magic != ${AFC_MAGIC})`,\n data.readUInt32LE(24)\n );\n }\n // technically these are uint64\n this.header = {\n magic,\n totalLength: data.readUInt32LE(8),\n headerLength: data.readUInt32LE(16),\n requestId: data.readUInt32LE(24),\n operation: data.readUInt32LE(32),\n };\n\n debug(`parse header: ${JSON.stringify(this.header)}`);\n if (this.header.headerLength < AFC_HEADER_SIZE) {\n throw new AFCInternalError('Invalid AFC header', this.header.requestId);\n }\n return this.header.totalLength - AFC_HEADER_SIZE;\n }\n\n parseBody(data: Buffer): AFCResponse | AFCStatusResponse {\n const body: any = {\n operation: this.header.operation,\n id: this.header.requestId,\n data,\n };\n if (isStatusResponse(body)) {\n const status = data.readUInt32LE(0);\n debug(`${AFC_OPS[this.header.operation]} response: ${AFC_STATUS[status]}`);\n body.data = status;\n } else if (data.length <= 8) {\n debug(`${AFC_OPS[this.header.operation]} response: ${Array.prototype.toString.call(body)}`);\n } else {\n debug(`${AFC_OPS[this.header.operation]} response length: ${data.length} bytes`);\n }\n return body;\n }\n}\n\nexport class AFCProtocolWriter implements ProtocolWriter {\n write(socket: Socket, msg: AFCMessage & { requestId: number }) {\n const { data, payload, operation, requestId } = msg;\n\n const dataLength = data ? data.length : 0;\n const payloadLength = payload ? payload.length : 0;\n\n const header = Buffer.alloc(AFC_HEADER_SIZE);\n const magic = Buffer.from(AFC_MAGIC);\n magic.copy(header);\n header.writeUInt32LE(AFC_HEADER_SIZE + dataLength + payloadLength, 8);\n header.writeUInt32LE(AFC_HEADER_SIZE + dataLength, 16);\n header.writeUInt32LE(requestId, 24);\n header.writeUInt32LE(operation, 32);\n socket.write(header);\n socket.write(data);\n if (data.length <= 8) {\n debug(\n `socket write, header: { requestId: ${requestId}, operation: ${\n AFC_OPS[operation]\n }}, body: ${Array.prototype.toString.call(data)}`\n );\n } else {\n debug(\n `socket write, header: { requestId: ${requestId}, operation: ${AFC_OPS[operation]}}, body: ${data.length} bytes`\n );\n }\n\n debug(`socket write, bytes written ${header.length} (header), ${data.length} (body)`);\n if (payload) {\n socket.write(payload);\n }\n }\n}\n"],"names":["debug","Debug","AFC_MAGIC","AFC_HEADER_SIZE","AFC_OPS","INVALID","STATUS","DATA","READ_DIR","READ_FILE","WRITE_FILE","WRITE_PART","TRUNCATE","REMOVE_PATH","MAKE_DIR","GET_FILE_INFO","GET_DEVINFO","WRITE_FILE_ATOM","FILE_OPEN","FILE_OPEN_RES","FILE_READ","FILE_WRITE","FILE_SEEK","FILE_TELL","FILE_TELL_RES","FILE_CLOSE","FILE_SET_SIZE","GET_CON_INFO","SET_CON_OPTIONS","RENAME_PATH","SET_FS_BS","SET_SOCKET_BS","FILE_LOCK","MAKE_LINK","GET_FILE_HASH","SET_FILE_MOD_TIME","GET_FILE_HASH_RANGE","FILE_SET_IMMUTABLE_HINT","GET_SIZE_OF_PATH_CONTENTS","REMOVE_PATH_AND_CONTENTS","DIR_OPEN","DIR_OPEN_RESULT","DIR_READ","DIR_CLOSE","FILE_READ_OFFSET","FILE_WRITE_OFFSET","AFC_STATUS","SUCCESS","UNKNOWN_ERROR","OP_HEADER_INVALID","NO_RESOURCES","READ_ERROR","WRITE_ERROR","UNKNOWN_PACKET_TYPE","INVALID_ARG","OBJECT_NOT_FOUND","OBJECT_IS_DIR","PERM_DENIED","SERVICE_NOT_CONNECTED","OP_TIMEOUT","TOO_MUCH_DATA","END_OF_DATA","OP_NOT_SUPPORTED","OBJECT_EXISTS","OBJECT_BUSY","NO_SPACE_LEFT","OP_WOULD_BLOCK","IO_ERROR","OP_INTERRUPTED","OP_IN_PROGRESS","INTERNAL_ERROR","MUX_ERROR","NO_MEM","NOT_ENOUGH_DATA","DIR_NOT_EMPTY","FORCE_SIGNED_TYPE","AFC_FILE_OPEN_FLAGS","RDONLY","RW","WRONLY","WR","APPEND","RDAPPEND","isAFCResponse","resp","operation","undefined","id","data","isStatusResponse","isErrorStatusResponse","AFCInternalError","Error","constructor","msg","requestId","AFCError","status","AFCProtocolClient","ProtocolClient","requestCallbacks","socket","ProtocolReaderFactory","AFCProtocolReader","AFCProtocolWriter","reader","readerFactory","create","err","on","onData","sendMessage","Promise","resolve","reject","CommandError","writer","write","ProtocolReader","callback","parseHeader","magic","slice","toString","readUInt32LE","header","totalLength","headerLength","JSON","stringify","parseBody","body","length","Array","prototype","call","payload","dataLength","payloadLength","Buffer","alloc","from","copy","writeUInt32LE"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _plist = _interopRequireDefault(require("@expo/plist"));
6
+ var _plist1 = require("../../../../utils/plist");
7
+ function _interopRequireDefault(obj) {
8
+ return obj && obj.__esModule ? obj : {
9
+ default: obj
10
+ };
11
+ }
12
+ const BPLIST_MAGIC = Buffer.from("bplist00");
13
+ class ProtocolReaderFactory {
14
+ constructor(ProtocolReader1){
15
+ this.ProtocolReader = ProtocolReader1;
16
+ }
17
+ create(callback) {
18
+ return new this.ProtocolReader(callback);
19
+ }
20
+ }
21
+ exports.ProtocolReaderFactory = ProtocolReaderFactory;
22
+ class ProtocolReader {
23
+ constructor(headerSize, callback){
24
+ this.headerSize = headerSize;
25
+ this.callback = callback;
26
+ this.buffer = Buffer.alloc(0);
27
+ this.onData = this.onData.bind(this);
28
+ }
29
+ onData(data) {
30
+ try {
31
+ // if there's data, add it on to existing buffer
32
+ this.buffer = data ? Buffer.concat([
33
+ this.buffer,
34
+ data
35
+ ]) : this.buffer;
36
+ // we haven't gotten the body length from the header yet
37
+ if (!this.bodyLength) {
38
+ if (this.buffer.length < this.headerSize) {
39
+ // partial header, wait for rest
40
+ return;
41
+ }
42
+ this.bodyLength = this.parseHeader(this.buffer);
43
+ // move on to body
44
+ this.buffer = this.buffer.slice(this.headerSize);
45
+ if (!this.buffer.length) {
46
+ // only got header, wait for body
47
+ return;
48
+ }
49
+ }
50
+ if (this.buffer.length < this.bodyLength) {
51
+ // wait for rest of body
52
+ return;
53
+ }
54
+ if (this.bodyLength === -1) {
55
+ this.callback(this.parseBody(this.buffer));
56
+ this.buffer = Buffer.alloc(0);
57
+ } else {
58
+ this.body = this.buffer.slice(0, this.bodyLength);
59
+ this.bodyLength -= this.body.length;
60
+ if (!this.bodyLength) {
61
+ this.callback(this.parseBody(this.body));
62
+ }
63
+ this.buffer = this.buffer.slice(this.body.length);
64
+ // There are multiple messages here, call parse again
65
+ if (this.buffer.length) {
66
+ this.onData();
67
+ }
68
+ }
69
+ } catch (err) {
70
+ this.callback(null, err);
71
+ }
72
+ }
73
+ }
74
+ exports.ProtocolReader = ProtocolReader;
75
+ class PlistProtocolReader extends ProtocolReader {
76
+ parseBody(body) {
77
+ if (BPLIST_MAGIC.compare(body, 0, 8) === 0) {
78
+ return (0, _plist1).parsePlistBuffer(body);
79
+ } else {
80
+ return _plist.default.parse(body.toString("utf8"));
81
+ }
82
+ }
83
+ }
84
+ exports.PlistProtocolReader = PlistProtocolReader;
85
+ class ProtocolClient {
86
+ constructor(socket, readerFactory, writer){
87
+ this.socket = socket;
88
+ this.readerFactory = readerFactory;
89
+ this.writer = writer;
90
+ }
91
+ sendMessage(msg, callback) {
92
+ return new Promise((resolve, reject)=>{
93
+ const reader = this.readerFactory.create(async (response, error)=>{
94
+ if (error) {
95
+ reject(error);
96
+ return;
97
+ }
98
+ if (callback) {
99
+ callback(response, (value)=>{
100
+ this.socket.removeListener("data", reader.onData);
101
+ resolve(value);
102
+ }, reject);
103
+ } else {
104
+ this.socket.removeListener("data", reader.onData);
105
+ resolve(response);
106
+ }
107
+ });
108
+ this.socket.on("data", reader.onData);
109
+ this.writer.write(this.socket, msg);
110
+ });
111
+ }
112
+ }
113
+ exports.ProtocolClient = ProtocolClient;
114
+
115
+ //# sourceMappingURL=AbstractProtocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/run/ios/appleDevice/protocol/AbstractProtocol.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 { Socket } from 'net';\n\nimport { parsePlistBuffer } from '../../../../utils/plist';\n\nconst BPLIST_MAGIC = Buffer.from('bplist00');\n\nexport type ProtocolReaderCallback = (resp: any, err?: Error) => void;\n\nexport class ProtocolReaderFactory<T> {\n constructor(private ProtocolReader: new (callback: ProtocolReaderCallback) => T) {}\n\n create(callback: (resp: any, err?: Error) => void): T {\n return new this.ProtocolReader(callback);\n }\n}\n\nexport abstract class ProtocolReader {\n protected body!: Buffer; // TODO: ! -> ?\n protected bodyLength!: number; // TODO: ! -> ?\n protected buffer = Buffer.alloc(0);\n constructor(protected headerSize: number, protected callback: ProtocolReaderCallback) {\n this.onData = this.onData.bind(this);\n }\n\n /** Returns length of body, or -1 if header doesn't contain length */\n protected abstract parseHeader(data: Buffer): number;\n protected abstract parseBody(data: Buffer): any;\n\n onData(data?: Buffer) {\n try {\n // if there's data, add it on to existing buffer\n this.buffer = data ? Buffer.concat([this.buffer, data]) : this.buffer;\n // we haven't gotten the body length from the header yet\n if (!this.bodyLength) {\n if (this.buffer.length < this.headerSize) {\n // partial header, wait for rest\n return;\n }\n this.bodyLength = this.parseHeader(this.buffer);\n // move on to body\n this.buffer = this.buffer.slice(this.headerSize);\n if (!this.buffer.length) {\n // only got header, wait for body\n return;\n }\n }\n if (this.buffer.length < this.bodyLength) {\n // wait for rest of body\n return;\n }\n\n if (this.bodyLength === -1) {\n this.callback(this.parseBody(this.buffer));\n this.buffer = Buffer.alloc(0);\n } else {\n this.body = this.buffer.slice(0, this.bodyLength);\n this.bodyLength -= this.body.length;\n if (!this.bodyLength) {\n this.callback(this.parseBody(this.body));\n }\n this.buffer = this.buffer.slice(this.body.length);\n // There are multiple messages here, call parse again\n if (this.buffer.length) {\n this.onData();\n }\n }\n } catch (err: any) {\n this.callback(null, err);\n }\n }\n}\n\nexport abstract class PlistProtocolReader extends ProtocolReader {\n protected parseBody(body: Buffer) {\n if (BPLIST_MAGIC.compare(body, 0, 8) === 0) {\n return parsePlistBuffer(body);\n } else {\n return plist.parse(body.toString('utf8'));\n }\n }\n}\n\nexport interface ProtocolWriter {\n write(sock: Socket, msg: any): void;\n}\n\nexport abstract class ProtocolClient<MessageType = any> {\n constructor(\n public socket: Socket,\n protected readerFactory: ProtocolReaderFactory<ProtocolReader>,\n protected writer: ProtocolWriter\n ) {}\n\n sendMessage<ResponseType = any>(msg: MessageType): Promise<ResponseType>;\n sendMessage<CallbackType = void, ResponseType = any>(\n msg: MessageType,\n callback: (response: ResponseType, resolve: any, reject: any) => void\n ): Promise<CallbackType>;\n sendMessage<CallbackType = void, ResponseType = any>(\n msg: MessageType,\n callback?: (response: ResponseType, resolve: any, reject: any) => void\n ): Promise<CallbackType | ResponseType> {\n return new Promise<ResponseType | CallbackType>((resolve, reject) => {\n const reader = this.readerFactory.create(async (response: ResponseType, error?: Error) => {\n if (error) {\n reject(error);\n return;\n }\n if (callback) {\n callback(\n response,\n (value: any) => {\n this.socket.removeListener('data', reader.onData);\n resolve(value);\n },\n reject\n );\n } else {\n this.socket.removeListener('data', reader.onData);\n resolve(response);\n }\n });\n this.socket.on('data', reader.onData);\n this.writer.write(this.socket, msg);\n });\n }\n}\n"],"names":["BPLIST_MAGIC","Buffer","from","ProtocolReaderFactory","constructor","ProtocolReader","create","callback","headerSize","buffer","alloc","onData","bind","data","concat","bodyLength","length","parseHeader","slice","parseBody","body","err","PlistProtocolReader","compare","parsePlistBuffer","plist","parse","toString","ProtocolClient","socket","readerFactory","writer","sendMessage","msg","Promise","resolve","reject","reader","response","error","value","removeListener","on","write"],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.validateChecksum = validateChecksum;
6
+ var _debug = _interopRequireDefault(require("debug"));
7
+ var _errors = require("../../../../utils/errors");
8
+ var _abstractProtocol = require("./AbstractProtocol");
9
+ function _interopRequireDefault(obj) {
10
+ return obj && obj.__esModule ? obj : {
11
+ default: obj
12
+ };
13
+ }
14
+ const debug = (0, _debug).default("expo:apple-device:protocol:gdb");
15
+ const ACK_SUCCESS = "+".charCodeAt(0);
16
+ class GDBProtocolClient extends _abstractProtocol.ProtocolClient {
17
+ constructor(socket){
18
+ super(socket, new _abstractProtocol.ProtocolReaderFactory(GDBProtocolReader), new GDBProtocolWriter());
19
+ }
20
+ }
21
+ exports.GDBProtocolClient = GDBProtocolClient;
22
+ class GDBProtocolReader extends _abstractProtocol.ProtocolReader {
23
+ constructor(callback){
24
+ super(1 /* "Header" is '+' or '-' */ , callback);
25
+ }
26
+ onData(data) {
27
+ // the GDB protocol does not support body length in its header so we cannot rely on
28
+ // the parent implementation to determine when a payload is complete
29
+ try {
30
+ // if there's data, add it to the existing buffer
31
+ this.buffer = data ? Buffer.concat([
32
+ this.buffer,
33
+ data
34
+ ]) : this.buffer;
35
+ // do we have enough bytes to proceed
36
+ if (this.buffer.length < this.headerSize) {
37
+ return; // incomplete header, wait for more
38
+ }
39
+ // first, check the header
40
+ if (this.parseHeader(this.buffer) === -1) {
41
+ // we have a valid header so check the body. GDB packets will always be a leading '$', data bytes,
42
+ // a trailing '#', and a two digit checksum. minimum valid body is the empty response '$#00'
43
+ // https://developer.apple.com/library/archive/documentation/DeveloperTools/gdb/gdb/gdb_33.html
44
+ const packetData = this.buffer.toString().match("\\$.*#[0-9a-f]{2}");
45
+ if (packetData == null) {
46
+ return; // incomplete body, wait for more
47
+ }
48
+ // extract the body and update the buffer
49
+ const body = Buffer.from(packetData[0]);
50
+ this.buffer = this.buffer.slice(this.headerSize + body.length);
51
+ // parse the payload and recurse if there is more data to process
52
+ this.callback(this.parseBody(body));
53
+ if (this.buffer.length) {
54
+ this.onData();
55
+ }
56
+ }
57
+ } catch (err) {
58
+ this.callback(null, err);
59
+ }
60
+ }
61
+ parseHeader(data) {
62
+ if (data[0] !== ACK_SUCCESS) {
63
+ throw new _errors.CommandError("APPLE_DEVICE_GDB", "Unsuccessful debugserver response");
64
+ } // TODO: retry?
65
+ return -1;
66
+ }
67
+ parseBody(buffer) {
68
+ debug(`Response body: ${buffer.toString()}`);
69
+ // check for checksum
70
+ const checksum = buffer.slice(-3).toString();
71
+ if (checksum.match(/#[0-9a-f]{2}/)) {
72
+ // remove '$' prefix and checksum
73
+ const msg = buffer.slice(1, -3).toString();
74
+ if (validateChecksum(checksum, msg)) {
75
+ return msg;
76
+ } else if (msg.startsWith("E")) {
77
+ if (msg.match(/the device was not, or could not be, unlocked/)) {
78
+ throw new _errors.CommandError("APPLE_DEVICE_LOCKED", "Device is currently locked.");
79
+ }
80
+ // Error message from debugserver -- Drop the `E`
81
+ return msg.slice(1);
82
+ } else {
83
+ throw new _errors.CommandError("APPLE_DEVICE_GDB", `Invalid checksum received from debugserver. (checksum: ${checksum}, msg: ${msg})`);
84
+ }
85
+ } else {
86
+ throw new _errors.CommandError("APPLE_DEVICE_GDB", "Didn't receive checksum");
87
+ }
88
+ }
89
+ }
90
+ exports.GDBProtocolReader = GDBProtocolReader;
91
+ class GDBProtocolWriter {
92
+ write(socket, msg) {
93
+ const { cmd , args } = msg;
94
+ debug(`Socket write: ${cmd}, args: ${args}`);
95
+ // hex encode and concat all args
96
+ const encodedArgs = args.map((arg)=>Buffer.from(arg).toString("hex")
97
+ ).join().toUpperCase();
98
+ const checksumStr = calculateChecksum(cmd + encodedArgs);
99
+ const formattedCmd = `$${cmd}${encodedArgs}#${checksumStr}`;
100
+ socket.write(formattedCmd);
101
+ }
102
+ }
103
+ exports.GDBProtocolWriter = GDBProtocolWriter;
104
+ // hex value of (sum of cmd chars mod 256)
105
+ function calculateChecksum(cmdStr) {
106
+ let checksum = 0;
107
+ for(let i = 0; i < cmdStr.length; i++){
108
+ checksum += cmdStr.charCodeAt(i);
109
+ }
110
+ let result = (checksum % 256).toString(16);
111
+ // pad if necessary
112
+ if (result.length === 1) {
113
+ result = `0${result}`;
114
+ }
115
+ return result;
116
+ }
117
+ function validateChecksum(checksum, msg) {
118
+ // remove '#' from checksum
119
+ const checksumVal = checksum.startsWith("#") ? checksum.slice(1) : checksum;
120
+ // remove '$' from msg and calculate its checksum
121
+ const computedChecksum = calculateChecksum(msg);
122
+ // debug(`Checksum: ${checksumVal}, computed checksum: ${computedChecksum}`);
123
+ return checksumVal === computedChecksum;
124
+ }
125
+
126
+ //# sourceMappingURL=GDBProtocol.js.map