@expo/cli 0.0.0 → 0.1.2

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 (388) hide show
  1. package/README.md +106 -0
  2. package/build/bin/cli +152 -0
  3. package/build/bin/cli.map +1 -0
  4. package/build/src/api/endpoint.js +17 -0
  5. package/build/src/api/endpoint.js.map +1 -0
  6. package/build/src/api/getExpoGoIntermediateCertificate.js +21 -0
  7. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
  8. package/build/src/api/getExpoSchema.js +69 -0
  9. package/build/src/api/getExpoSchema.js.map +1 -0
  10. package/build/src/api/getNativeModuleVersions.js +31 -0
  11. package/build/src/api/getNativeModuleVersions.js.map +1 -0
  12. package/build/src/api/getProject.js +19 -0
  13. package/build/src/api/getProject.js.map +1 -0
  14. package/build/src/api/getProjectDevelopmentCertificate.js +24 -0
  15. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
  16. package/build/src/api/getVersions.js +37 -0
  17. package/build/src/api/getVersions.js.map +1 -0
  18. package/build/src/api/graphql/client.js +104 -0
  19. package/build/src/api/graphql/client.js.map +1 -0
  20. package/build/src/api/graphql/generated.js +113 -0
  21. package/build/src/api/graphql/generated.js.map +1 -0
  22. package/build/src/api/graphql/queries/UserQuery.js +43 -0
  23. package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
  24. package/build/src/api/rest/cache/FileSystemCache.js +79 -0
  25. package/build/src/api/rest/cache/FileSystemCache.js.map +1 -0
  26. package/build/src/api/rest/cache/response.js +31 -0
  27. package/build/src/api/rest/cache/response.js.map +1 -0
  28. package/build/src/api/rest/cache/wrapFetchWithCache.js +156 -0
  29. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
  30. package/build/src/api/rest/client.js +94 -0
  31. package/build/src/api/rest/client.js.map +1 -0
  32. package/build/src/api/rest/client.types.js +6 -0
  33. package/build/src/api/rest/client.types.js.map +1 -0
  34. package/build/src/api/rest/wrapFetchWithBaseUrl.js +20 -0
  35. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
  36. package/build/src/api/rest/wrapFetchWithOffline.js +39 -0
  37. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
  38. package/build/src/api/rest/wrapFetchWithProgress.js +59 -0
  39. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
  40. package/build/src/api/settings.js +11 -0
  41. package/build/src/api/settings.js.map +1 -0
  42. package/build/src/api/signManifest.js +38 -0
  43. package/build/src/api/signManifest.js.map +1 -0
  44. package/build/src/api/updateDevelopmentSession.js +74 -0
  45. package/build/src/api/updateDevelopmentSession.js.map +1 -0
  46. package/build/src/api/user/UserSettings.js +71 -0
  47. package/build/src/api/user/UserSettings.js.map +1 -0
  48. package/build/src/api/user/actions.js +97 -0
  49. package/build/src/api/user/actions.js.map +1 -0
  50. package/build/src/api/user/otp.js +139 -0
  51. package/build/src/api/user/otp.js.map +1 -0
  52. package/build/src/api/user/user.js +114 -0
  53. package/build/src/api/user/user.js.map +1 -0
  54. package/build/src/config/configAsync.js +118 -0
  55. package/build/src/config/configAsync.js.map +1 -0
  56. package/build/src/config/index.js +75 -0
  57. package/build/src/config/index.js.map +1 -0
  58. package/build/src/export/createBundles.js +62 -0
  59. package/build/src/export/createBundles.js.map +1 -0
  60. package/build/src/export/createMetadataJson.js +36 -0
  61. package/build/src/export/createMetadataJson.js.map +1 -0
  62. package/build/src/export/exportApp.js +102 -0
  63. package/build/src/export/exportApp.js.map +1 -0
  64. package/build/src/export/exportAssets.js +106 -0
  65. package/build/src/export/exportAssets.js.map +1 -0
  66. package/build/src/export/exportAsync.js +49 -0
  67. package/build/src/export/exportAsync.js.map +1 -0
  68. package/build/src/export/fork-bundleAsync.js +138 -0
  69. package/build/src/export/fork-bundleAsync.js.map +1 -0
  70. package/build/src/export/getPublicExpoManifest.js +28 -0
  71. package/build/src/export/getPublicExpoManifest.js.map +1 -0
  72. package/build/src/export/getResolvedLocales.js +35 -0
  73. package/build/src/export/getResolvedLocales.js.map +1 -0
  74. package/build/src/export/index.js +77 -0
  75. package/build/src/export/index.js.map +1 -0
  76. package/build/src/export/printBundleSizes.js +122 -0
  77. package/build/src/export/printBundleSizes.js.map +1 -0
  78. package/build/src/export/resolveOptions.js +24 -0
  79. package/build/src/export/resolveOptions.js.map +1 -0
  80. package/build/src/export/saveAssets.js +65 -0
  81. package/build/src/export/saveAssets.js.map +1 -0
  82. package/build/src/export/writeContents.js +108 -0
  83. package/build/src/export/writeContents.js.map +1 -0
  84. package/build/src/install/checkPackages.js +74 -0
  85. package/build/src/install/checkPackages.js.map +1 -0
  86. package/build/src/install/index.js +49 -0
  87. package/build/src/install/index.js.map +1 -0
  88. package/build/src/install/installAsync.js +103 -0
  89. package/build/src/install/installAsync.js.map +1 -0
  90. package/build/src/install/resolveOptions.js +99 -0
  91. package/build/src/install/resolveOptions.js.map +1 -0
  92. package/build/src/install/utils/autoAddConfigPlugins.js +87 -0
  93. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
  94. package/build/src/log.js +74 -0
  95. package/build/src/log.js.map +1 -0
  96. package/build/src/login/index.js +62 -0
  97. package/build/src/login/index.js.map +1 -0
  98. package/build/src/logout/index.js +48 -0
  99. package/build/src/logout/index.js.map +1 -0
  100. package/build/src/prebuild/clearNativeFolder.js +137 -0
  101. package/build/src/prebuild/clearNativeFolder.js.map +1 -0
  102. package/build/src/prebuild/configureProjectAsync.js +68 -0
  103. package/build/src/prebuild/configureProjectAsync.js.map +1 -0
  104. package/build/src/prebuild/copyTemplateFiles.js +124 -0
  105. package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
  106. package/build/src/prebuild/ensureConfigAsync.js +86 -0
  107. package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
  108. package/build/src/prebuild/index.js +90 -0
  109. package/build/src/prebuild/index.js.map +1 -0
  110. package/build/src/prebuild/prebuildAsync.js +112 -0
  111. package/build/src/prebuild/prebuildAsync.js.map +1 -0
  112. package/build/src/prebuild/resolveOptions.js +97 -0
  113. package/build/src/prebuild/resolveOptions.js.map +1 -0
  114. package/build/src/prebuild/resolveTemplate.js +157 -0
  115. package/build/src/prebuild/resolveTemplate.js.map +1 -0
  116. package/build/src/prebuild/updateFromTemplate.js +102 -0
  117. package/build/src/prebuild/updateFromTemplate.js.map +1 -0
  118. package/build/src/prebuild/updatePackageJson.js +236 -0
  119. package/build/src/prebuild/updatePackageJson.js.map +1 -0
  120. package/build/src/prebuild/writeMetroConfig.js +89 -0
  121. package/build/src/prebuild/writeMetroConfig.js.map +1 -0
  122. package/build/src/register/index.js +48 -0
  123. package/build/src/register/index.js.map +1 -0
  124. package/build/src/register/registerAsync.js +37 -0
  125. package/build/src/register/registerAsync.js.map +1 -0
  126. package/build/src/run/android/index.js +97 -0
  127. package/build/src/run/android/index.js.map +1 -0
  128. package/build/src/run/android/resolveDevice.js +23 -0
  129. package/build/src/run/android/resolveDevice.js.map +1 -0
  130. package/build/src/run/android/resolveGradleProps.js +37 -0
  131. package/build/src/run/android/resolveGradleProps.js.map +1 -0
  132. package/build/src/run/android/resolveInstallApkName.js +72 -0
  133. package/build/src/run/android/resolveInstallApkName.js.map +1 -0
  134. package/build/src/run/android/resolveLaunchProps.js +32 -0
  135. package/build/src/run/android/resolveLaunchProps.js.map +1 -0
  136. package/build/src/run/android/resolveOptions.js +25 -0
  137. package/build/src/run/android/resolveOptions.js.map +1 -0
  138. package/build/src/run/android/runAndroidAsync.js +74 -0
  139. package/build/src/run/android/runAndroidAsync.js.map +1 -0
  140. package/build/src/run/ensureNativeProject.js +33 -0
  141. package/build/src/run/ensureNativeProject.js.map +1 -0
  142. package/build/src/run/hints.js +22 -0
  143. package/build/src/run/hints.js.map +1 -0
  144. package/build/src/run/resolveBundlerProps.js +31 -0
  145. package/build/src/run/resolveBundlerProps.js.map +1 -0
  146. package/build/src/run/startBundler.js +76 -0
  147. package/build/src/run/startBundler.js.map +1 -0
  148. package/build/src/start/doctor/Prerequisite.js +47 -0
  149. package/build/src/start/doctor/Prerequisite.js.map +1 -0
  150. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +68 -0
  151. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
  152. package/build/src/start/doctor/apple/XcodePrerequisite.js +115 -0
  153. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
  154. package/build/src/start/doctor/apple/XcrunPrerequisite.js +65 -0
  155. package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
  156. package/build/src/start/doctor/dependencies/bundledNativeModules.js +64 -0
  157. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
  158. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +131 -0
  159. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
  160. package/build/src/start/doctor/dependencies/getMissingPackages.js +95 -0
  161. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
  162. package/build/src/start/doctor/dependencies/getVersionedPackages.js +119 -0
  163. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
  164. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +147 -0
  165. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
  166. package/build/src/start/doctor/ngrok/ExternalModule.js +164 -0
  167. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
  168. package/build/src/start/doctor/ngrok/NgrokResolver.js +17 -0
  169. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
  170. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +142 -0
  171. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
  172. package/build/src/start/doctor/typescript/updateTSConfig.js +92 -0
  173. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
  174. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +112 -0
  175. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
  176. package/build/src/start/index.js +116 -0
  177. package/build/src/start/index.js.map +1 -0
  178. package/build/src/start/interface/KeyPressHandler.js +99 -0
  179. package/build/src/start/interface/KeyPressHandler.js.map +1 -0
  180. package/build/src/start/interface/commandsTable.js +175 -0
  181. package/build/src/start/interface/commandsTable.js.map +1 -0
  182. package/build/src/start/interface/interactiveActions.js +134 -0
  183. package/build/src/start/interface/interactiveActions.js.map +1 -0
  184. package/build/src/start/interface/startInterface.js +217 -0
  185. package/build/src/start/interface/startInterface.js.map +1 -0
  186. package/build/src/start/platforms/AppIdResolver.js +44 -0
  187. package/build/src/start/platforms/AppIdResolver.js.map +1 -0
  188. package/build/src/start/platforms/DeviceManager.js +43 -0
  189. package/build/src/start/platforms/DeviceManager.js.map +1 -0
  190. package/build/src/start/platforms/ExpoGoInstaller.js +111 -0
  191. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
  192. package/build/src/start/platforms/PlatformManager.js +121 -0
  193. package/build/src/start/platforms/PlatformManager.js.map +1 -0
  194. package/build/src/start/platforms/android/ADBServer.js +129 -0
  195. package/build/src/start/platforms/android/ADBServer.js.map +1 -0
  196. package/build/src/start/platforms/android/AndroidAppIdResolver.js +40 -0
  197. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
  198. package/build/src/start/platforms/android/AndroidDeviceManager.js +183 -0
  199. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
  200. package/build/src/start/platforms/android/AndroidPlatformManager.js +35 -0
  201. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
  202. package/build/src/start/platforms/android/activateWindow.js +80 -0
  203. package/build/src/start/platforms/android/activateWindow.js.map +1 -0
  204. package/build/src/start/platforms/android/adb.js +263 -0
  205. package/build/src/start/platforms/android/adb.js.map +1 -0
  206. package/build/src/start/platforms/android/adbReverse.js +84 -0
  207. package/build/src/start/platforms/android/adbReverse.js.map +1 -0
  208. package/build/src/start/platforms/android/emulator.js +118 -0
  209. package/build/src/start/platforms/android/emulator.js.map +1 -0
  210. package/build/src/start/platforms/android/getDevices.js +36 -0
  211. package/build/src/start/platforms/android/getDevices.js.map +1 -0
  212. package/build/src/start/platforms/android/gradle.js +86 -0
  213. package/build/src/start/platforms/android/gradle.js.map +1 -0
  214. package/build/src/start/platforms/android/promptAndroidDevice.js +60 -0
  215. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
  216. package/build/src/start/platforms/ios/AppleAppIdResolver.js +46 -0
  217. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
  218. package/build/src/start/platforms/ios/AppleDeviceManager.js +201 -0
  219. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
  220. package/build/src/start/platforms/ios/ApplePlatformManager.js +31 -0
  221. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
  222. package/build/src/start/platforms/ios/assertSystemRequirements.js +16 -0
  223. package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
  224. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +85 -0
  225. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
  226. package/build/src/start/platforms/ios/getBestSimulator.js +101 -0
  227. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
  228. package/build/src/start/platforms/ios/promptAppleDevice.js +60 -0
  229. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
  230. package/build/src/start/platforms/ios/simctl.js +229 -0
  231. package/build/src/start/platforms/ios/simctl.js.map +1 -0
  232. package/build/src/start/platforms/ios/xcrun.js +67 -0
  233. package/build/src/start/platforms/ios/xcrun.js.map +1 -0
  234. package/build/src/start/project/devices.js +77 -0
  235. package/build/src/start/project/devices.js.map +1 -0
  236. package/build/src/start/project/dotExpo.js +74 -0
  237. package/build/src/start/project/dotExpo.js.map +1 -0
  238. package/build/src/start/project/settings.js +13 -0
  239. package/build/src/start/project/settings.js.map +1 -0
  240. package/build/src/start/resolveOptions.js +156 -0
  241. package/build/src/start/resolveOptions.js.map +1 -0
  242. package/build/src/start/server/AsyncNgrok.js +173 -0
  243. package/build/src/start/server/AsyncNgrok.js.map +1 -0
  244. package/build/src/start/server/BundlerDevServer.js +312 -0
  245. package/build/src/start/server/BundlerDevServer.js.map +1 -0
  246. package/build/src/start/server/DevServerManager.js +142 -0
  247. package/build/src/start/server/DevServerManager.js.map +1 -0
  248. package/build/src/start/server/DevelopmentSession.js +104 -0
  249. package/build/src/start/server/DevelopmentSession.js.map +1 -0
  250. package/build/src/start/server/UrlCreator.js +159 -0
  251. package/build/src/start/server/UrlCreator.js.map +1 -0
  252. package/build/src/start/server/metro/MetroBundlerDevServer.js +97 -0
  253. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
  254. package/build/src/start/server/metro/MetroTerminalReporter.js +178 -0
  255. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
  256. package/build/src/start/server/metro/TerminalReporter.js +87 -0
  257. package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
  258. package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
  259. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
  260. package/build/src/start/server/metro/instantiateMetro.js +66 -0
  261. package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
  262. package/build/src/start/server/metro/resolveFromProject.js +38 -0
  263. package/build/src/start/server/metro/resolveFromProject.js.map +1 -0
  264. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +145 -0
  265. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -0
  266. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +185 -0
  267. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
  268. package/build/src/start/server/middleware/ExpoMiddleware.js +78 -0
  269. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
  270. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +70 -0
  271. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
  272. package/build/src/start/server/middleware/ManifestMiddleware.js +177 -0
  273. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
  274. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +69 -0
  275. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
  276. package/build/src/start/server/middleware/createDevServerMiddleware.js +24 -0
  277. package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -0
  278. package/build/src/start/server/middleware/resolveAssets.js +110 -0
  279. package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
  280. package/build/src/start/server/middleware/resolveEntryPoint.js +37 -0
  281. package/build/src/start/server/middleware/resolveEntryPoint.js.map +1 -0
  282. package/build/src/start/server/middleware/resolvePlatform.js +32 -0
  283. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
  284. package/build/src/start/server/middleware/server.types.js +6 -0
  285. package/build/src/start/server/middleware/server.types.js.map +1 -0
  286. package/build/src/start/server/openPlatforms.js +30 -0
  287. package/build/src/start/server/openPlatforms.js.map +1 -0
  288. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +299 -0
  289. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
  290. package/build/src/start/server/webpack/formatWebpackMessages.js +94 -0
  291. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
  292. package/build/src/start/server/webpack/resolveFromProject.js +43 -0
  293. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
  294. package/build/src/start/server/webpack/tls.js +72 -0
  295. package/build/src/start/server/webpack/tls.js.map +1 -0
  296. package/build/src/start/startAsync.js +150 -0
  297. package/build/src/start/startAsync.js.map +1 -0
  298. package/build/src/utils/FileNotifier.js +71 -0
  299. package/build/src/utils/FileNotifier.js.map +1 -0
  300. package/build/src/utils/analytics/getDevClientProperties.js +41 -0
  301. package/build/src/utils/analytics/getDevClientProperties.js.map +1 -0
  302. package/build/src/utils/analytics/rudderstackClient.js +106 -0
  303. package/build/src/utils/analytics/rudderstackClient.js.map +1 -0
  304. package/build/src/utils/ansi.js +17 -0
  305. package/build/src/utils/ansi.js.map +1 -0
  306. package/build/src/utils/args.js +77 -0
  307. package/build/src/utils/args.js.map +1 -0
  308. package/build/src/utils/array.js +56 -0
  309. package/build/src/utils/array.js.map +1 -0
  310. package/build/src/utils/cocoapods.js +143 -0
  311. package/build/src/utils/cocoapods.js.map +1 -0
  312. package/build/src/utils/codesigning.js +283 -0
  313. package/build/src/utils/codesigning.js.map +1 -0
  314. package/build/src/utils/createFileTransform.js +89 -0
  315. package/build/src/utils/createFileTransform.js.map +1 -0
  316. package/build/src/utils/delay.js +39 -0
  317. package/build/src/utils/delay.js.map +1 -0
  318. package/build/src/utils/dir.js +38 -0
  319. package/build/src/utils/dir.js.map +1 -0
  320. package/build/src/utils/downloadAppAsync.js +74 -0
  321. package/build/src/utils/downloadAppAsync.js.map +1 -0
  322. package/build/src/utils/downloadExpoGoAsync.js +99 -0
  323. package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
  324. package/build/src/utils/editor.js +60 -0
  325. package/build/src/utils/editor.js.map +1 -0
  326. package/build/src/utils/env.js +62 -0
  327. package/build/src/utils/env.js.map +1 -0
  328. package/build/src/utils/errors.js +69 -0
  329. package/build/src/utils/errors.js.map +1 -0
  330. package/build/src/utils/exit.js +90 -0
  331. package/build/src/utils/exit.js.map +1 -0
  332. package/build/src/utils/findUp.js +33 -0
  333. package/build/src/utils/findUp.js.map +1 -0
  334. package/build/src/utils/fn.js +32 -0
  335. package/build/src/utils/fn.js.map +1 -0
  336. package/build/src/utils/getOrPromptApplicationId.js +183 -0
  337. package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
  338. package/build/src/utils/getRunningProcess.js +92 -0
  339. package/build/src/utils/getRunningProcess.js.map +1 -0
  340. package/build/src/utils/git.js +88 -0
  341. package/build/src/utils/git.js.map +1 -0
  342. package/build/src/utils/glob.js +65 -0
  343. package/build/src/utils/glob.js.map +1 -0
  344. package/build/src/utils/ip.js +16 -0
  345. package/build/src/utils/ip.js.map +1 -0
  346. package/build/src/utils/isModuleSymlinked.js +37 -0
  347. package/build/src/utils/isModuleSymlinked.js.map +1 -0
  348. package/build/src/utils/link.js +31 -0
  349. package/build/src/utils/link.js.map +1 -0
  350. package/build/src/utils/mergeGitIgnorePaths.js +112 -0
  351. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
  352. package/build/src/utils/modifyConfigAsync.js +68 -0
  353. package/build/src/utils/modifyConfigAsync.js.map +1 -0
  354. package/build/src/utils/modifyConfigPlugins.js +51 -0
  355. package/build/src/utils/modifyConfigPlugins.js.map +1 -0
  356. package/build/src/utils/nodeModules.js +118 -0
  357. package/build/src/utils/nodeModules.js.map +1 -0
  358. package/build/src/utils/npm.js +144 -0
  359. package/build/src/utils/npm.js.map +1 -0
  360. package/build/src/utils/obj.js +45 -0
  361. package/build/src/utils/obj.js.map +1 -0
  362. package/build/src/utils/ora.js +102 -0
  363. package/build/src/utils/ora.js.map +1 -0
  364. package/build/src/utils/port.js +130 -0
  365. package/build/src/utils/port.js.map +1 -0
  366. package/build/src/utils/profile.js +63 -0
  367. package/build/src/utils/profile.js.map +1 -0
  368. package/build/src/utils/progress.js +15 -0
  369. package/build/src/utils/progress.js.map +1 -0
  370. package/build/src/utils/prompts.js +127 -0
  371. package/build/src/utils/prompts.js.map +1 -0
  372. package/build/src/utils/resolveArgs.js +94 -0
  373. package/build/src/utils/resolveArgs.js.map +1 -0
  374. package/build/src/utils/scheme.js +106 -0
  375. package/build/src/utils/scheme.js.map +1 -0
  376. package/build/src/utils/tar.js +59 -0
  377. package/build/src/utils/tar.js.map +1 -0
  378. package/build/src/utils/url.js +67 -0
  379. package/build/src/utils/url.js.map +1 -0
  380. package/build/src/utils/validateApplicationId.js +90 -0
  381. package/build/src/utils/validateApplicationId.js.map +1 -0
  382. package/build/src/whoami/index.js +47 -0
  383. package/build/src/whoami/index.js.map +1 -0
  384. package/build/src/whoami/whoamiAsync.js +44 -0
  385. package/build/src/whoami/whoamiAsync.js.map +1 -0
  386. package/package.json +132 -4
  387. package/static/loading-page/index.html +270 -0
  388. package/index.js +0 -0
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.instantiateMetroAsync = instantiateMetroAsync;
6
+ var _metroCore = require("metro-core");
7
+ var _createDevServerMiddleware = require("../middleware/createDevServerMiddleware");
8
+ var _metroTerminalReporter = require("./MetroTerminalReporter");
9
+ var _resolveFromProject = require("./resolveFromProject");
10
+ async function instantiateMetroAsync(projectRoot, options) {
11
+ let reportEvent;
12
+ const Metro = (0, _resolveFromProject).importMetroFromProject(projectRoot);
13
+ const ExpoMetroConfig = (0, _resolveFromProject).importExpoMetroConfigFromProject(projectRoot);
14
+ const terminal = new _metroCore.Terminal(process.stdout);
15
+ const terminalReporter = new _metroTerminalReporter.MetroTerminalReporter(projectRoot, terminal);
16
+ const reporter = {
17
+ update (event) {
18
+ terminalReporter.update(event);
19
+ if (reportEvent) {
20
+ reportEvent(event);
21
+ }
22
+ }
23
+ };
24
+ const metroConfig = await ExpoMetroConfig.loadAsync(projectRoot, {
25
+ reporter,
26
+ ...options
27
+ });
28
+ const { middleware , attachToServer , // New
29
+ websocketEndpoints , eventsSocketEndpoint , messageSocketEndpoint , } = (0, _createDevServerMiddleware).createDevServerMiddleware(projectRoot, {
30
+ port: metroConfig.server.port,
31
+ watchFolders: metroConfig.watchFolders
32
+ });
33
+ const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;
34
+ // @ts-ignore can't mutate readonly config
35
+ metroConfig.server.enhanceMiddleware = (metroMiddleware, server)=>{
36
+ if (customEnhanceMiddleware) {
37
+ metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);
38
+ }
39
+ return middleware.use(metroMiddleware);
40
+ };
41
+ const server1 = await Metro.runServer(metroConfig, {
42
+ // @ts-expect-error: TODO: Update the types.
43
+ hmrEnabled: true,
44
+ websocketEndpoints
45
+ });
46
+ if (attachToServer) {
47
+ // Expo SDK 44 and lower
48
+ const { messageSocket , eventsSocket } = attachToServer(server1);
49
+ reportEvent = eventsSocket.reportEvent;
50
+ return {
51
+ server: server1,
52
+ middleware,
53
+ messageSocket
54
+ };
55
+ } else {
56
+ // RN +68 -- Expo SDK +45
57
+ reportEvent = eventsSocketEndpoint.reportEvent;
58
+ return {
59
+ server: server1,
60
+ middleware,
61
+ messageSocket: messageSocketEndpoint
62
+ };
63
+ }
64
+ }
65
+
66
+ //# sourceMappingURL=instantiateMetro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { MetroDevServerOptions } from '@expo/dev-server';\nimport http from 'http';\nimport Metro from 'metro';\nimport { Terminal } from 'metro-core';\n\nimport { createDevServerMiddleware } from '../middleware/createDevServerMiddleware';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importExpoMetroConfigFromProject, importMetroFromProject } from './resolveFromProject';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n projectRoot: string,\n options: Omit<MetroDevServerOptions, 'logger'>\n): Promise<{\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n let reportEvent: ((event: any) => void) | undefined;\n\n const Metro = importMetroFromProject(projectRoot);\n const ExpoMetroConfig = importExpoMetroConfigFromProject(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(projectRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n const metroConfig = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n const {\n middleware,\n attachToServer,\n\n // New\n websocketEndpoints,\n eventsSocketEndpoint,\n messageSocketEndpoint,\n } = createDevServerMiddleware(projectRoot, {\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-ignore can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n const server = await Metro.runServer(metroConfig, {\n // @ts-expect-error: TODO: Update the types.\n hmrEnabled: true,\n websocketEndpoints,\n });\n\n if (attachToServer) {\n // Expo SDK 44 and lower\n const { messageSocket, eventsSocket } = attachToServer(server);\n reportEvent = eventsSocket.reportEvent;\n\n return {\n server,\n middleware,\n messageSocket,\n };\n } else {\n // RN +68 -- Expo SDK +45\n reportEvent = eventsSocketEndpoint.reportEvent;\n\n return {\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n }\n}\n"],"names":["instantiateMetroAsync","projectRoot","options","reportEvent","Metro","importMetroFromProject","ExpoMetroConfig","importExpoMetroConfigFromProject","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","metroConfig","loadAsync","middleware","attachToServer","websocketEndpoints","eventsSocketEndpoint","messageSocketEndpoint","createDevServerMiddleware","port","server","watchFolders","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","use","runServer","hmrEnabled","messageSocket","eventsSocket"],"mappings":"AAAA;;;;QAesBA,qBAAqB,GAArBA,qBAAqB;AAZlB,IAAA,UAAY,WAAZ,YAAY,CAAA;AAEK,IAAA,0BAAyC,WAAzC,yCAAyC,CAAA;AAC7C,IAAA,sBAAyB,WAAzB,yBAAyB,CAAA;AACU,IAAA,mBAAsB,WAAtB,sBAAsB,CAAA;AAQxF,eAAeA,qBAAqB,CACzCC,WAAmB,EACnBC,OAA8C,EAK7C;IACD,IAAIC,WAAW,AAAoC,AAAC;IAEpD,MAAMC,KAAK,GAAGC,CAAAA,GAAAA,mBAAsB,AAAa,CAAA,uBAAb,CAACJ,WAAW,CAAC,AAAC;IAClD,MAAMK,eAAe,GAAGC,CAAAA,GAAAA,mBAAgC,AAAa,CAAA,iCAAb,CAACN,WAAW,CAAC,AAAC;IAEtE,MAAMO,QAAQ,GAAG,IAAIC,UAAQ,SAAA,CAACC,OAAO,CAACC,MAAM,CAAC,AAAC;IAC9C,MAAMC,gBAAgB,GAAG,IAAIC,sBAAqB,sBAAA,CAACZ,WAAW,EAAEO,QAAQ,CAAC,AAAC;IAE1E,MAAMM,QAAQ,GAAG;QACfC,MAAM,EAACC,KAAU,EAAE;YACjBJ,gBAAgB,CAACG,MAAM,CAACC,KAAK,CAAC,CAAC;YAC/B,IAAIb,WAAW,EAAE;gBACfA,WAAW,CAACa,KAAK,CAAC,CAAC;aACpB;SACF;KACF,AAAC;IAEF,MAAMC,WAAW,GAAG,MAAMX,eAAe,CAACY,SAAS,CAACjB,WAAW,EAAE;QAAEa,QAAQ;QAAE,GAAGZ,OAAO;KAAE,CAAC,AAAC;IAE3F,MAAM,EACJiB,UAAU,CAAA,EACVC,cAAc,CAAA,EAEd,MAAM;IACNC,kBAAkB,CAAA,EAClBC,oBAAoB,CAAA,EACpBC,qBAAqB,CAAA,IACtB,GAAGC,CAAAA,GAAAA,0BAAyB,AAG3B,CAAA,0BAH2B,CAACvB,WAAW,EAAE;QACzCwB,IAAI,EAAER,WAAW,CAACS,MAAM,CAACD,IAAI;QAC7BE,YAAY,EAAEV,WAAW,CAACU,YAAY;KACvC,CAAC,AAAC;IAEH,MAAMC,uBAAuB,GAAGX,WAAW,CAACS,MAAM,CAACG,iBAAiB,AAAC;IACrE,0CAA0C;IAC1CZ,WAAW,CAACS,MAAM,CAACG,iBAAiB,GAAG,CAACC,eAAoB,EAAEJ,MAAoB,GAAK;QACrF,IAAIE,uBAAuB,EAAE;YAC3BE,eAAe,GAAGF,uBAAuB,CAACE,eAAe,EAAEJ,MAAM,CAAC,CAAC;SACpE;QACD,OAAOP,UAAU,CAACY,GAAG,CAACD,eAAe,CAAC,CAAC;KACxC,CAAC;IAEF,MAAMJ,OAAM,GAAG,MAAMtB,KAAK,CAAC4B,SAAS,CAACf,WAAW,EAAE;QAChD,4CAA4C;QAC5CgB,UAAU,EAAE,IAAI;QAChBZ,kBAAkB;KACnB,CAAC,AAAC;IAEH,IAAID,cAAc,EAAE;QAClB,wBAAwB;QACxB,MAAM,EAAEc,aAAa,CAAA,EAAEC,YAAY,CAAA,EAAE,GAAGf,cAAc,CAACM,OAAM,CAAC,AAAC;QAC/DvB,WAAW,GAAGgC,YAAY,CAAChC,WAAW,CAAC;QAEvC,OAAO;YACLuB,MAAM,EAANA,OAAM;YACNP,UAAU;YACVe,aAAa;SACd,CAAC;KACH,MAAM;QACL,yBAAyB;QACzB/B,WAAW,GAAGmB,oBAAoB,CAACnB,WAAW,CAAC;QAE/C,OAAO;YACLuB,MAAM,EAANA,OAAM;YACNP,UAAU;YACVe,aAAa,EAAEX,qBAAqB;SACrC,CAAC;KACH;CACF"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.importMetroFromProject = importMetroFromProject;
6
+ exports.importExpoMetroConfigFromProject = importExpoMetroConfigFromProject;
7
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
8
+ function _interopRequireDefault(obj) {
9
+ return obj && obj.__esModule ? obj : {
10
+ default: obj
11
+ };
12
+ }
13
+ // These resolvers enable us to test the CLI in older projects.
14
+ // We may be able to get rid of this in the future.
15
+ // TODO: Maybe combine with AsyncResolver?
16
+ class MetroImportError extends Error {
17
+ constructor(projectRoot, moduleId){
18
+ super(`Missing package "${moduleId}" in the project at: ${projectRoot}\n` + 'This usually means "react-native" is not installed. ' + 'Please verify that dependencies in package.json include "react-native" ' + "and run `yarn` or `npm install`.");
19
+ }
20
+ }
21
+ function resolveFromProject(projectRoot, moduleId) {
22
+ const resolvedPath = _resolveFrom.default.silent(projectRoot, moduleId);
23
+ if (!resolvedPath) {
24
+ throw new MetroImportError(projectRoot, moduleId);
25
+ }
26
+ return resolvedPath;
27
+ }
28
+ function importFromProject(projectRoot, moduleId) {
29
+ return require(resolveFromProject(projectRoot, moduleId));
30
+ }
31
+ function importMetroFromProject(projectRoot) {
32
+ return importFromProject(projectRoot, "metro");
33
+ }
34
+ function importExpoMetroConfigFromProject(projectRoot) {
35
+ return importFromProject(projectRoot, "@expo/metro-config");
36
+ }
37
+
38
+ //# sourceMappingURL=resolveFromProject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/resolveFromProject.ts"],"sourcesContent":["import resolveFrom from 'resolve-from';\n\n// These resolvers enable us to test the CLI in older projects.\n// We may be able to get rid of this in the future.\n// TODO: Maybe combine with AsyncResolver?\nclass MetroImportError extends Error {\n constructor(projectRoot: string, moduleId: string) {\n super(\n `Missing package \"${moduleId}\" in the project at: ${projectRoot}\\n` +\n 'This usually means \"react-native\" is not installed. ' +\n 'Please verify that dependencies in package.json include \"react-native\" ' +\n 'and run `yarn` or `npm install`.'\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new MetroImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject(projectRoot: string, moduleId: string) {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\n/** Import `metro` from the project. */\nexport function importMetroFromProject(projectRoot: string): typeof import('metro') {\n return importFromProject(projectRoot, 'metro');\n}\n\n/** Import `@expo/metro-config` from the project. */\nexport function importExpoMetroConfigFromProject(\n projectRoot: string\n): typeof import('@expo/metro-config') {\n return importFromProject(projectRoot, '@expo/metro-config');\n}\n"],"names":["importMetroFromProject","importExpoMetroConfigFromProject","MetroImportError","Error","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","require"],"mappings":"AAAA;;;;QA6BgBA,sBAAsB,GAAtBA,sBAAsB;QAKtBC,gCAAgC,GAAhCA,gCAAgC;AAlCxB,IAAA,YAAc,kCAAd,cAAc,EAAA;;;;;;AAEtC,+DAA+D;AAC/D,mDAAmD;AACnD,0CAA0C;AAC1C,MAAMC,gBAAgB,SAASC,KAAK;IAClCC,YAAYC,WAAmB,EAAEC,QAAgB,CAAE;QACjD,KAAK,CACH,CAAC,iBAAiB,EAAEA,QAAQ,CAAC,qBAAqB,EAAED,WAAW,CAAC,EAAE,CAAC,GACjE,sDAAsD,GACtD,yEAAyE,GACzE,kCAAkC,CACrC,CAAC;KACH;CACF;AAED,SAASE,kBAAkB,CAACF,WAAmB,EAAEC,QAAgB,EAAE;IACjE,MAAME,YAAY,GAAGC,YAAW,QAAA,CAACC,MAAM,CAACL,WAAW,EAAEC,QAAQ,CAAC,AAAC;IAC/D,IAAI,CAACE,YAAY,EAAE;QACjB,MAAM,IAAIN,gBAAgB,CAACG,WAAW,EAAEC,QAAQ,CAAC,CAAC;KACnD;IACD,OAAOE,YAAY,CAAC;CACrB;AAED,SAASG,iBAAiB,CAACN,WAAmB,EAAEC,QAAgB,EAAE;IAChE,OAAOM,OAAO,CAACL,kBAAkB,CAACF,WAAW,EAAEC,QAAQ,CAAC,CAAC,CAAC;CAC3D;AAGM,SAASN,sBAAsB,CAACK,WAAmB,EAA0B;IAClF,OAAOM,iBAAiB,CAACN,WAAW,EAAE,OAAO,CAAC,CAAC;CAChD;AAGM,SAASJ,gCAAgC,CAC9CI,WAAmB,EACkB;IACrC,OAAOM,iBAAiB,CAACN,WAAW,EAAE,oBAAoB,CAAC,CAAC;CAC7D"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _chalk = _interopRequireDefault(require("chalk"));
6
+ var _os = _interopRequireDefault(require("os"));
7
+ var _settings = require("../../../api/settings");
8
+ var _signManifest = require("../../../api/signManifest");
9
+ var _userSettings = _interopRequireDefault(require("../../../api/user/UserSettings"));
10
+ var _user = require("../../../api/user/user");
11
+ var Log = _interopRequireWildcard(require("../../../log"));
12
+ var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
13
+ var _fn = require("../../../utils/fn");
14
+ var _link = require("../../../utils/link");
15
+ var _url = require("../../../utils/url");
16
+ var _manifestMiddleware = require("./ManifestMiddleware");
17
+ var _resolvePlatform = require("./resolvePlatform");
18
+ function _interopRequireDefault(obj) {
19
+ return obj && obj.__esModule ? obj : {
20
+ default: obj
21
+ };
22
+ }
23
+ function _interopRequireWildcard(obj) {
24
+ if (obj && obj.__esModule) {
25
+ return obj;
26
+ } else {
27
+ var newObj = {};
28
+ if (obj != null) {
29
+ for(var key in obj){
30
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
31
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
32
+ if (desc.get || desc.set) {
33
+ Object.defineProperty(newObj, key, desc);
34
+ } else {
35
+ newObj[key] = obj[key];
36
+ }
37
+ }
38
+ }
39
+ }
40
+ newObj.default = obj;
41
+ return newObj;
42
+ }
43
+ }
44
+ class ClassicManifestMiddleware extends _manifestMiddleware.ManifestMiddleware {
45
+ getParsedHeaders(req) {
46
+ const platform = (0, _resolvePlatform).parsePlatformHeader(req) || "ios";
47
+ (0, _resolvePlatform).assertRuntimePlatform(platform);
48
+ return {
49
+ platform,
50
+ acceptSignature: Boolean(req.headers["exponent-accept-signature"]),
51
+ hostname: (0, _url).stripPort(req.headers["host"])
52
+ };
53
+ }
54
+ async _getManifestResponseAsync({ acceptSignature , ...requestOptions }) {
55
+ const { exp , hostUri , expoGoConfig , bundleUrl } = await this._resolveProjectSettingsAsync(requestOptions);
56
+ const manifest = {
57
+ ...exp,
58
+ ...expoGoConfig,
59
+ hostUri,
60
+ bundleUrl
61
+ };
62
+ // Gather packager and host info
63
+ const hostInfo = await createHostInfoAsync();
64
+ const headers = new Map();
65
+ headers.set("Exponent-Server", hostInfo);
66
+ // Create the final string
67
+ const body = await this._fetchComputedManifestStringAsync({
68
+ manifest,
69
+ hostId: hostInfo.host,
70
+ acceptSignature
71
+ });
72
+ return {
73
+ body,
74
+ version: manifest.sdkVersion,
75
+ headers
76
+ };
77
+ }
78
+ trackManifest(version) {
79
+ // Log analytics
80
+ (0, _rudderstackClient).logEvent("Serve Manifest", {
81
+ sdkVersion: version != null ? version : null
82
+ });
83
+ }
84
+ /** Exposed for testing. */ async _getManifestStringAsync({ manifest , hostId , acceptSignature }) {
85
+ const currentSession = await (0, _user).getUserAsync();
86
+ if (!currentSession || _settings.APISettings.isOffline) {
87
+ manifest.id = `@${_user.ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;
88
+ }
89
+ if (!acceptSignature) {
90
+ return JSON.stringify(manifest);
91
+ } else if (!currentSession || _settings.APISettings.isOffline) {
92
+ return getUnsignedManifestString(manifest);
93
+ } else {
94
+ return this.getSignedManifestStringAsync(manifest);
95
+ }
96
+ }
97
+ getSignedManifestStringAsync = (0, _fn).memoize(_signManifest.signClassicExpoGoManifestAsync);
98
+ /** Exposed for testing. */ async _fetchComputedManifestStringAsync(props) {
99
+ try {
100
+ return await this._getManifestStringAsync(props);
101
+ } catch (error) {
102
+ if (error.code === "UNAUTHORIZED_ERROR" && props.manifest.owner) {
103
+ // Don't have permissions for siging, warn and enable offline mode.
104
+ this.addSigningDisabledWarning(`This project belongs to ${_chalk.default.bold(`@${props.manifest.owner}`)} and you have not been granted the appropriate permissions.\n` + `Please request access from an admin of @${props.manifest.owner} or change the "owner" field to an account you belong to.\n` + (0, _link).learnMore("https://docs.expo.dev/versions/latest/config/app/#owner"));
105
+ _settings.APISettings.isOffline = true;
106
+ return await this._getManifestStringAsync(props);
107
+ } else if (error.code === "ENOTFOUND") {
108
+ // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.
109
+ this.addSigningDisabledWarning(`Could not reach Expo servers, please check if you can access ${error.hostname || "exp.host"}.`);
110
+ _settings.APISettings.isOffline = true;
111
+ return await this._getManifestStringAsync(props);
112
+ } else {
113
+ throw error;
114
+ }
115
+ }
116
+ }
117
+ addSigningDisabledWarning = (0, _fn).memoize((reason)=>{
118
+ Log.warn(`${reason}\nFalling back to offline mode.`);
119
+ // For the memo
120
+ return reason;
121
+ });
122
+ }
123
+ exports.ClassicManifestMiddleware = ClassicManifestMiddleware;
124
+ // Passed to Expo Go and registered as telemetry.
125
+ // TODO: it's unclear why we don't just send it from the CLI.
126
+ async function createHostInfoAsync() {
127
+ return {
128
+ host: await _userSettings.default.getAnonymousIdentifierAsync(),
129
+ server: "expo",
130
+ // Defined in the build step
131
+ serverVersion: "0.1.2",
132
+ serverDriver: _manifestMiddleware.DEVELOPER_TOOL,
133
+ serverOS: _os.default.platform(),
134
+ serverOSVersion: _os.default.release()
135
+ };
136
+ }
137
+ function getUnsignedManifestString(manifest) {
138
+ const unsignedManifest = {
139
+ manifestString: JSON.stringify(manifest),
140
+ signature: "UNSIGNED"
141
+ };
142
+ return JSON.stringify(unsignedManifest);
143
+ }
144
+
145
+ //# sourceMappingURL=ClassicManifestMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/ClassicManifestMiddleware.ts"],"sourcesContent":["import { ExpoAppManifest, ExpoConfig } from '@expo/config';\nimport chalk from 'chalk';\nimport os from 'os';\n\nimport { APISettings } from '../../../api/settings';\nimport { signClassicExpoGoManifestAsync } from '../../../api/signManifest';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME, getUserAsync } from '../../../api/user/user';\nimport * as Log from '../../../log';\nimport { logEvent } from '../../../utils/analytics/rudderstackClient';\nimport { memoize } from '../../../utils/fn';\nimport { learnMore } from '../../../utils/link';\nimport { stripPort } from '../../../utils/url';\nimport {\n DEVELOPER_TOOL,\n HostInfo,\n ManifestMiddleware,\n ManifestRequestInfo,\n} from './ManifestMiddleware';\nimport { assertRuntimePlatform, parsePlatformHeader } from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\n\ntype SignManifestProps = {\n manifest: ExpoAppManifest;\n hostId: string;\n acceptSignature: boolean;\n};\n\ninterface ClassicManifestRequestInfo extends ManifestRequestInfo {}\n\nexport class ClassicManifestMiddleware extends ManifestMiddleware<ClassicManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ClassicManifestRequestInfo {\n const platform = parsePlatformHeader(req) || 'ios';\n assertRuntimePlatform(platform);\n return {\n platform,\n acceptSignature: Boolean(req.headers['exponent-accept-signature']),\n hostname: stripPort(req.headers['host']),\n };\n }\n\n public async _getManifestResponseAsync({\n acceptSignature,\n ...requestOptions\n }: ClassicManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } = await this._resolveProjectSettingsAsync(\n requestOptions\n );\n\n const manifest: ExpoAppManifest = {\n ...(exp as ExpoAppManifest),\n ...expoGoConfig,\n hostUri,\n bundleUrl,\n };\n\n // Gather packager and host info\n const hostInfo = await createHostInfoAsync();\n\n const headers = new Map<string, any>();\n headers.set('Exponent-Server', hostInfo);\n\n // Create the final string\n const body = await this._fetchComputedManifestStringAsync({\n manifest,\n hostId: hostInfo.host,\n acceptSignature,\n });\n\n return {\n body,\n version: manifest.sdkVersion,\n headers,\n };\n }\n\n protected trackManifest(version?: string) {\n // Log analytics\n logEvent('Serve Manifest', {\n sdkVersion: version ?? null,\n });\n }\n\n /** Exposed for testing. */\n async _getManifestStringAsync({\n manifest,\n hostId,\n acceptSignature,\n }: SignManifestProps): Promise<string> {\n const currentSession = await getUserAsync();\n if (!currentSession || APISettings.isOffline) {\n manifest.id = `@${ANONYMOUS_USERNAME}/${manifest.slug}-${hostId}`;\n }\n if (!acceptSignature) {\n return JSON.stringify(manifest);\n } else if (!currentSession || APISettings.isOffline) {\n return getUnsignedManifestString(manifest);\n } else {\n return this.getSignedManifestStringAsync(manifest);\n }\n }\n\n private getSignedManifestStringAsync = memoize(signClassicExpoGoManifestAsync);\n\n /** Exposed for testing. */\n async _fetchComputedManifestStringAsync(props: SignManifestProps): Promise<string> {\n try {\n return await this._getManifestStringAsync(props);\n } catch (error: any) {\n if (error.code === 'UNAUTHORIZED_ERROR' && props.manifest.owner) {\n // Don't have permissions for siging, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `This project belongs to ${chalk.bold(\n `@${props.manifest.owner}`\n )} and you have not been granted the appropriate permissions.\\n` +\n `Please request access from an admin of @${props.manifest.owner} or change the \"owner\" field to an account you belong to.\\n` +\n learnMore('https://docs.expo.dev/versions/latest/config/app/#owner')\n );\n APISettings.isOffline = true;\n return await this._getManifestStringAsync(props);\n } else if (error.code === 'ENOTFOUND') {\n // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.\n this.addSigningDisabledWarning(\n `Could not reach Expo servers, please check if you can access ${\n error.hostname || 'exp.host'\n }.`\n );\n APISettings.isOffline = true;\n return await this._getManifestStringAsync(props);\n } else {\n throw error;\n }\n }\n }\n\n private addSigningDisabledWarning = memoize((reason: string) => {\n Log.warn(`${reason}\\nFalling back to offline mode.`);\n // For the memo\n return reason;\n });\n}\n\n// Passed to Expo Go and registered as telemetry.\n// TODO: it's unclear why we don't just send it from the CLI.\nasync function createHostInfoAsync(): Promise<HostInfo> {\n return {\n host: await UserSettings.getAnonymousIdentifierAsync(),\n server: 'expo',\n // Defined in the build step\n serverVersion: process.env.__EXPO_VERSION!,\n serverDriver: DEVELOPER_TOOL,\n serverOS: os.platform(),\n serverOSVersion: os.release(),\n };\n}\n\nfunction getUnsignedManifestString(manifest: ExpoConfig) {\n const unsignedManifest = {\n manifestString: JSON.stringify(manifest),\n signature: 'UNSIGNED',\n };\n return JSON.stringify(unsignedManifest);\n}\n"],"names":["Log","ClassicManifestMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertRuntimePlatform","acceptSignature","Boolean","headers","hostname","stripPort","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","manifest","hostInfo","createHostInfoAsync","Map","set","body","_fetchComputedManifestStringAsync","hostId","host","version","sdkVersion","trackManifest","logEvent","_getManifestStringAsync","currentSession","getUserAsync","APISettings","isOffline","id","ANONYMOUS_USERNAME","slug","JSON","stringify","getUnsignedManifestString","getSignedManifestStringAsync","memoize","signClassicExpoGoManifestAsync","props","error","code","owner","addSigningDisabledWarning","chalk","bold","learnMore","reason","warn","UserSettings","getAnonymousIdentifierAsync","server","serverVersion","process","env","__EXPO_VERSION","serverDriver","DEVELOPER_TOOL","serverOS","os","serverOSVersion","release","unsignedManifest","manifestString","signature"],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _configPlugins = require("@expo/config-plugins");
6
+ var _accepts = _interopRequireDefault(require("accepts"));
7
+ var _assert = _interopRequireDefault(require("assert"));
8
+ var _formData = _interopRequireDefault(require("form-data"));
9
+ var _structuredHeaders = require("structured-headers");
10
+ var _uuid = require("uuid");
11
+ var _getProject = require("../../../api/getProject");
12
+ var _settings = require("../../../api/settings");
13
+ var _signManifest = require("../../../api/signManifest");
14
+ var _userSettings = _interopRequireDefault(require("../../../api/user/UserSettings"));
15
+ var _user = require("../../../api/user/user");
16
+ var _rudderstackClient = require("../../../utils/analytics/rudderstackClient");
17
+ var _codesigning = require("../../../utils/codesigning");
18
+ var _errors = require("../../../utils/errors");
19
+ var _fn = require("../../../utils/fn");
20
+ var _url = require("../../../utils/url");
21
+ var _manifestMiddleware = require("./ManifestMiddleware");
22
+ var _resolvePlatform = require("./resolvePlatform");
23
+ function _interopRequireDefault(obj) {
24
+ return obj && obj.__esModule ? obj : {
25
+ default: obj
26
+ };
27
+ }
28
+ class ExpoGoManifestHandlerMiddleware extends _manifestMiddleware.ManifestMiddleware {
29
+ getParsedHeaders(req) {
30
+ const platform = (0, _resolvePlatform).parsePlatformHeader(req);
31
+ (0, _resolvePlatform).assertMissingRuntimePlatform(platform);
32
+ (0, _resolvePlatform).assertRuntimePlatform(platform);
33
+ // Expo Updates clients explicitly accept "multipart/mixed" responses while browsers implicitly
34
+ // accept them with "accept: */*". To make it easier to debug manifest responses by visiting their
35
+ // URLs in a browser, we denote the response as "text/plain" if the user agent appears not to be
36
+ // an Expo Updates client.
37
+ const accept = (0, _accepts).default(req);
38
+ const explicitlyPrefersMultipartMixed = accept.types([
39
+ "unknown/unknown",
40
+ "multipart/mixed"
41
+ ]) === "multipart/mixed";
42
+ const expectSignature = req.headers["expo-expect-signature"];
43
+ return {
44
+ explicitlyPrefersMultipartMixed,
45
+ platform,
46
+ acceptSignature: !!req.headers["expo-accept-signature"],
47
+ expectSignature: expectSignature ? String(expectSignature) : null,
48
+ hostname: (0, _url).stripPort(req.headers["host"])
49
+ };
50
+ }
51
+ getDefaultResponseHeaders() {
52
+ const headers = new Map();
53
+ // set required headers for Expo Updates manifest specification
54
+ headers.set("expo-protocol-version", 0);
55
+ headers.set("expo-sfv-version", 0);
56
+ headers.set("cache-control", "private, max-age=0");
57
+ return headers;
58
+ }
59
+ async _getManifestResponseAsync(requestOptions) {
60
+ var ref, ref1;
61
+ const { exp , hostUri , expoGoConfig , bundleUrl } = await this._resolveProjectSettingsAsync(requestOptions);
62
+ var _runtimeVersion;
63
+ const runtimeVersion = _configPlugins.Updates.getRuntimeVersion({
64
+ ...exp,
65
+ runtimeVersion: (_runtimeVersion = exp.runtimeVersion) != null ? _runtimeVersion : {
66
+ policy: "sdkVersion"
67
+ }
68
+ }, requestOptions.platform);
69
+ if (!runtimeVersion) {
70
+ throw new _errors.CommandError("MANIFEST_MIDDLEWARE", `Unable to determine runtime version for platform '${requestOptions.platform}'`);
71
+ }
72
+ const codeSigningInfo = await (0, _codesigning).getCodeSigningInfoAsync(exp, requestOptions.expectSignature, this.options.privateKeyPath);
73
+ const easProjectId = (ref = exp.extra) == null ? void 0 : (ref1 = ref.eas) == null ? void 0 : ref1.projectId;
74
+ const shouldUseAnonymousManifest = await shouldUseAnonymousManifestAsync(easProjectId, codeSigningInfo);
75
+ const userAnonymousIdentifier = await _userSettings.default.getAnonymousIdentifierAsync();
76
+ if (!shouldUseAnonymousManifest) {
77
+ (0, _assert).default(easProjectId);
78
+ }
79
+ const scopeKey = shouldUseAnonymousManifest ? `@${_user.ANONYMOUS_USERNAME}/${exp.slug}-${userAnonymousIdentifier}` : await this.getScopeKeyForProjectIdAsync(easProjectId);
80
+ const expoUpdatesManifest = {
81
+ id: (0, _uuid).v4(),
82
+ createdAt: new Date().toISOString(),
83
+ runtimeVersion,
84
+ launchAsset: {
85
+ key: "bundle",
86
+ contentType: "application/javascript",
87
+ url: bundleUrl
88
+ },
89
+ assets: [],
90
+ metadata: {},
91
+ extra: {
92
+ eas: {
93
+ projectId: easProjectId != null ? easProjectId : undefined
94
+ },
95
+ expoClient: {
96
+ ...exp,
97
+ hostUri
98
+ },
99
+ expoGo: expoGoConfig,
100
+ scopeKey
101
+ }
102
+ };
103
+ const headers = this.getDefaultResponseHeaders();
104
+ if (requestOptions.acceptSignature && !shouldUseAnonymousManifest) {
105
+ const manifestSignature = await this.getSignedManifestStringAsync(expoUpdatesManifest);
106
+ headers.set("expo-manifest-signature", manifestSignature);
107
+ }
108
+ const stringifiedManifest = JSON.stringify(expoUpdatesManifest);
109
+ let manifestPartHeaders = null;
110
+ let certificateChainBody = null;
111
+ if (codeSigningInfo) {
112
+ const signature = (0, _codesigning).signManifestString(stringifiedManifest, codeSigningInfo);
113
+ manifestPartHeaders = {
114
+ "expo-signature": (0, _structuredHeaders).serializeDictionary(convertToDictionaryItemsRepresentation({
115
+ keyid: "expo-go",
116
+ sig: signature,
117
+ alg: "rsa-v1_5-sha256"
118
+ }))
119
+ };
120
+ certificateChainBody = codeSigningInfo.certificateChainForResponse.join("\n");
121
+ }
122
+ const form = this.getFormData({
123
+ stringifiedManifest,
124
+ manifestPartHeaders,
125
+ certificateChainBody
126
+ });
127
+ headers.set("content-type", requestOptions.explicitlyPrefersMultipartMixed ? `multipart/mixed; boundary=${form.getBoundary()}` : "text/plain");
128
+ return {
129
+ body: form.getBuffer().toString(),
130
+ version: runtimeVersion,
131
+ headers
132
+ };
133
+ }
134
+ getFormData({ stringifiedManifest , manifestPartHeaders , certificateChainBody }) {
135
+ const form = new _formData.default();
136
+ form.append("manifest", stringifiedManifest, {
137
+ contentType: "application/json",
138
+ header: {
139
+ ...manifestPartHeaders
140
+ }
141
+ });
142
+ if (certificateChainBody && certificateChainBody.length > 0) {
143
+ form.append("certificate_chain", certificateChainBody, {
144
+ contentType: "application/x-pem-file"
145
+ });
146
+ }
147
+ return form;
148
+ }
149
+ trackManifest(version) {
150
+ (0, _rudderstackClient).logEvent("Serve Expo Updates Manifest", {
151
+ runtimeVersion: version
152
+ });
153
+ }
154
+ getSignedManifestStringAsync = (0, _fn).memoize(_signManifest.signExpoGoManifestAsync);
155
+ getScopeKeyForProjectIdAsync = (0, _fn).memoize(getScopeKeyForProjectIdAsync);
156
+ }
157
+ exports.ExpoGoManifestHandlerMiddleware = ExpoGoManifestHandlerMiddleware;
158
+ /**
159
+ * 1. No EAS project ID in config, then use anonymous scope key
160
+ * 2. When offline or not logged in
161
+ * a. If code signing not accepted by client (only legacy manifest signing is supported), then use anonymous scope key
162
+ * b. If code signing accepted by client and no development code signing certificate is cached, then use anonymous scope key
163
+ */ async function shouldUseAnonymousManifestAsync(easProjectId, codeSigningInfo) {
164
+ if (!easProjectId || _settings.APISettings.isOffline && codeSigningInfo === null) {
165
+ return true;
166
+ }
167
+ return !await (0, _user).getUserAsync();
168
+ }
169
+ async function getScopeKeyForProjectIdAsync(projectId) {
170
+ const project = await (0, _getProject).getProjectAsync(projectId);
171
+ return project.scopeKey;
172
+ }
173
+ function convertToDictionaryItemsRepresentation(obj) {
174
+ return new Map(Object.entries(obj).map(([k, v])=>{
175
+ return [
176
+ k,
177
+ [
178
+ v,
179
+ new Map()
180
+ ]
181
+ ];
182
+ }));
183
+ }
184
+
185
+ //# sourceMappingURL=ExpoGoManifestHandlerMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/ExpoGoManifestHandlerMiddleware.ts"],"sourcesContent":["import { ExpoUpdatesManifest } from '@expo/config';\nimport { Updates } from '@expo/config-plugins';\nimport accepts from 'accepts';\nimport assert from 'assert';\nimport FormData from 'form-data';\nimport { serializeDictionary, Dictionary } from 'structured-headers';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getProjectAsync } from '../../../api/getProject';\nimport { APISettings } from '../../../api/settings';\nimport { signExpoGoManifestAsync } from '../../../api/signManifest';\nimport UserSettings from '../../../api/user/UserSettings';\nimport { ANONYMOUS_USERNAME, getUserAsync } from '../../../api/user/user';\nimport { logEvent } from '../../../utils/analytics/rudderstackClient';\nimport {\n CodeSigningInfo,\n getCodeSigningInfoAsync,\n signManifestString,\n} from '../../../utils/codesigning';\nimport { CommandError } from '../../../utils/errors';\nimport { memoize } from '../../../utils/fn';\nimport { stripPort } from '../../../utils/url';\nimport { ManifestMiddleware, ManifestRequestInfo } from './ManifestMiddleware';\nimport {\n assertMissingRuntimePlatform,\n assertRuntimePlatform,\n parsePlatformHeader,\n} from './resolvePlatform';\nimport { ServerHeaders, ServerRequest } from './server.types';\n\ninterface ExpoGoManifestRequestInfo extends ManifestRequestInfo {\n explicitlyPrefersMultipartMixed: boolean;\n expectSignature: string | null;\n}\n\nexport class ExpoGoManifestHandlerMiddleware extends ManifestMiddleware<ExpoGoManifestRequestInfo> {\n public getParsedHeaders(req: ServerRequest): ExpoGoManifestRequestInfo {\n const platform = parsePlatformHeader(req);\n assertMissingRuntimePlatform(platform);\n assertRuntimePlatform(platform);\n\n // Expo Updates clients explicitly accept \"multipart/mixed\" responses while browsers implicitly\n // accept them with \"accept: */*\". To make it easier to debug manifest responses by visiting their\n // URLs in a browser, we denote the response as \"text/plain\" if the user agent appears not to be\n // an Expo Updates client.\n const accept = accepts(req);\n const explicitlyPrefersMultipartMixed =\n accept.types(['unknown/unknown', 'multipart/mixed']) === 'multipart/mixed';\n\n const expectSignature = req.headers['expo-expect-signature'];\n\n return {\n explicitlyPrefersMultipartMixed,\n platform,\n acceptSignature: !!req.headers['expo-accept-signature'],\n expectSignature: expectSignature ? String(expectSignature) : null,\n hostname: stripPort(req.headers['host']),\n };\n }\n\n private getDefaultResponseHeaders(): ServerHeaders {\n const headers = new Map<string, number | string | readonly string[]>();\n // set required headers for Expo Updates manifest specification\n headers.set('expo-protocol-version', 0);\n headers.set('expo-sfv-version', 0);\n headers.set('cache-control', 'private, max-age=0');\n return headers;\n }\n\n public async _getManifestResponseAsync(requestOptions: ExpoGoManifestRequestInfo): Promise<{\n body: string;\n version: string;\n headers: ServerHeaders;\n }> {\n const { exp, hostUri, expoGoConfig, bundleUrl } = await this._resolveProjectSettingsAsync(\n requestOptions\n );\n\n const runtimeVersion = Updates.getRuntimeVersion(\n { ...exp, runtimeVersion: exp.runtimeVersion ?? { policy: 'sdkVersion' } },\n requestOptions.platform\n );\n if (!runtimeVersion) {\n throw new CommandError(\n 'MANIFEST_MIDDLEWARE',\n `Unable to determine runtime version for platform '${requestOptions.platform}'`\n );\n }\n\n const codeSigningInfo = await getCodeSigningInfoAsync(\n exp,\n requestOptions.expectSignature,\n this.options.privateKeyPath\n );\n\n const easProjectId = exp.extra?.eas?.projectId;\n const shouldUseAnonymousManifest = await shouldUseAnonymousManifestAsync(\n easProjectId,\n codeSigningInfo\n );\n const userAnonymousIdentifier = await UserSettings.getAnonymousIdentifierAsync();\n if (!shouldUseAnonymousManifest) {\n assert(easProjectId);\n }\n const scopeKey = shouldUseAnonymousManifest\n ? `@${ANONYMOUS_USERNAME}/${exp.slug}-${userAnonymousIdentifier}`\n : await this.getScopeKeyForProjectIdAsync(easProjectId);\n\n const expoUpdatesManifest: ExpoUpdatesManifest = {\n id: uuidv4(),\n createdAt: new Date().toISOString(),\n runtimeVersion,\n launchAsset: {\n key: 'bundle',\n contentType: 'application/javascript',\n url: bundleUrl,\n },\n assets: [], // assets are not used in development\n metadata: {}, // required for the client to detect that this is an expo-updates manifest\n extra: {\n eas: {\n projectId: easProjectId ?? undefined,\n },\n expoClient: {\n ...exp,\n hostUri,\n },\n expoGo: expoGoConfig,\n scopeKey,\n },\n };\n\n const headers = this.getDefaultResponseHeaders();\n if (requestOptions.acceptSignature && !shouldUseAnonymousManifest) {\n const manifestSignature = await this.getSignedManifestStringAsync(expoUpdatesManifest);\n headers.set('expo-manifest-signature', manifestSignature);\n }\n\n const stringifiedManifest = JSON.stringify(expoUpdatesManifest);\n\n let manifestPartHeaders: { 'expo-signature': string } | null = null;\n let certificateChainBody: string | null = null;\n if (codeSigningInfo) {\n const signature = signManifestString(stringifiedManifest, codeSigningInfo);\n manifestPartHeaders = {\n 'expo-signature': serializeDictionary(\n convertToDictionaryItemsRepresentation({\n keyid: 'expo-go',\n sig: signature,\n alg: 'rsa-v1_5-sha256',\n })\n ),\n };\n certificateChainBody = codeSigningInfo.certificateChainForResponse.join('\\n');\n }\n\n const form = this.getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n });\n\n headers.set(\n 'content-type',\n requestOptions.explicitlyPrefersMultipartMixed\n ? `multipart/mixed; boundary=${form.getBoundary()}`\n : 'text/plain'\n );\n\n return {\n body: form.getBuffer().toString(),\n version: runtimeVersion,\n headers,\n };\n }\n\n private getFormData({\n stringifiedManifest,\n manifestPartHeaders,\n certificateChainBody,\n }: {\n stringifiedManifest: string;\n manifestPartHeaders: { 'expo-signature': string } | null;\n certificateChainBody: string | null;\n }): FormData {\n const form = new FormData();\n form.append('manifest', stringifiedManifest, {\n contentType: 'application/json',\n header: {\n ...manifestPartHeaders,\n },\n });\n if (certificateChainBody && certificateChainBody.length > 0) {\n form.append('certificate_chain', certificateChainBody, {\n contentType: 'application/x-pem-file',\n });\n }\n return form;\n }\n\n protected trackManifest(version?: string) {\n logEvent('Serve Expo Updates Manifest', {\n runtimeVersion: version,\n });\n }\n\n private getSignedManifestStringAsync = memoize(signExpoGoManifestAsync);\n\n private getScopeKeyForProjectIdAsync = memoize(getScopeKeyForProjectIdAsync);\n}\n\n/**\n * 1. No EAS project ID in config, then use anonymous scope key\n * 2. When offline or not logged in\n * a. If code signing not accepted by client (only legacy manifest signing is supported), then use anonymous scope key\n * b. If code signing accepted by client and no development code signing certificate is cached, then use anonymous scope key\n */\nasync function shouldUseAnonymousManifestAsync(\n easProjectId: string | undefined | null,\n codeSigningInfo: CodeSigningInfo | null\n): Promise<boolean> {\n if (!easProjectId || (APISettings.isOffline && codeSigningInfo === null)) {\n return true;\n }\n\n return !(await getUserAsync());\n}\n\nasync function getScopeKeyForProjectIdAsync(projectId: string): Promise<string> {\n const project = await getProjectAsync(projectId);\n return project.scopeKey;\n}\n\nfunction convertToDictionaryItemsRepresentation(obj: { [key: string]: string }): Dictionary {\n return new Map(\n Object.entries(obj).map(([k, v]) => {\n return [k, [v, new Map()]];\n })\n );\n}\n"],"names":["ExpoGoManifestHandlerMiddleware","ManifestMiddleware","getParsedHeaders","req","platform","parsePlatformHeader","assertMissingRuntimePlatform","assertRuntimePlatform","accept","accepts","explicitlyPrefersMultipartMixed","types","expectSignature","headers","acceptSignature","String","hostname","stripPort","getDefaultResponseHeaders","Map","set","_getManifestResponseAsync","requestOptions","exp","hostUri","expoGoConfig","bundleUrl","_resolveProjectSettingsAsync","runtimeVersion","Updates","getRuntimeVersion","policy","CommandError","codeSigningInfo","getCodeSigningInfoAsync","options","privateKeyPath","easProjectId","extra","eas","projectId","shouldUseAnonymousManifest","shouldUseAnonymousManifestAsync","userAnonymousIdentifier","UserSettings","getAnonymousIdentifierAsync","assert","scopeKey","ANONYMOUS_USERNAME","slug","getScopeKeyForProjectIdAsync","expoUpdatesManifest","id","uuidv4","createdAt","Date","toISOString","launchAsset","key","contentType","url","assets","metadata","undefined","expoClient","expoGo","manifestSignature","getSignedManifestStringAsync","stringifiedManifest","JSON","stringify","manifestPartHeaders","certificateChainBody","signature","signManifestString","serializeDictionary","convertToDictionaryItemsRepresentation","keyid","sig","alg","certificateChainForResponse","join","form","getFormData","getBoundary","body","getBuffer","toString","version","FormData","append","header","length","trackManifest","logEvent","memoize","signExpoGoManifestAsync","APISettings","isOffline","getUserAsync","project","getProjectAsync","obj","Object","entries","map","k","v"],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.disableResponseCache = disableResponseCache;
6
+ var _url = require("url");
7
+ var Log = _interopRequireWildcard(require("../../../log"));
8
+ function _interopRequireWildcard(obj) {
9
+ if (obj && obj.__esModule) {
10
+ return obj;
11
+ } else {
12
+ var newObj = {};
13
+ if (obj != null) {
14
+ for(var key in obj){
15
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
16
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
17
+ if (desc.get || desc.set) {
18
+ Object.defineProperty(newObj, key, desc);
19
+ } else {
20
+ newObj[key] = obj[key];
21
+ }
22
+ }
23
+ }
24
+ }
25
+ newObj.default = obj;
26
+ return newObj;
27
+ }
28
+ }
29
+ class ExpoMiddleware {
30
+ constructor(projectRoot, supportedPaths){
31
+ this.projectRoot = projectRoot;
32
+ this.supportedPaths = supportedPaths;
33
+ }
34
+ /**
35
+ * Returns true when the middleware should handle the incoming server request.
36
+ * Exposed for testing.
37
+ */ _shouldHandleRequest(req) {
38
+ if (!req.url) {
39
+ return false;
40
+ }
41
+ const parsed = (0, _url).parse(req.url);
42
+ // Strip the query params
43
+ if (!parsed.pathname) {
44
+ return false;
45
+ }
46
+ return this.supportedPaths.includes(parsed.pathname);
47
+ }
48
+ /** Create a server middleware handler. */ getHandler() {
49
+ return async (req, res, next)=>{
50
+ if (!this._shouldHandleRequest(req)) {
51
+ return next();
52
+ }
53
+ try {
54
+ return await this.handleRequestAsync(req, res, next);
55
+ } catch (error) {
56
+ Log.exception(error);
57
+ // 5xx = Server Error HTTP code
58
+ res.statusCode = 500;
59
+ if (typeof error === "object" && error !== null) {
60
+ res.end(JSON.stringify({
61
+ error: error.toString()
62
+ }));
63
+ } else {
64
+ res.end(`Unexpected error: ${error}`);
65
+ }
66
+ }
67
+ };
68
+ }
69
+ }
70
+ exports.ExpoMiddleware = ExpoMiddleware;
71
+ function disableResponseCache(res) {
72
+ res.setHeader("Cache-Control", "private, no-cache, no-store, must-revalidate");
73
+ res.setHeader("Expires", "-1");
74
+ res.setHeader("Pragma", "no-cache");
75
+ return res;
76
+ }
77
+
78
+ //# sourceMappingURL=ExpoMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/ExpoMiddleware.ts"],"sourcesContent":["import { parse } from 'url';\n\nimport * as Log from '../../../log';\nimport { ServerNext, ServerRequest, ServerResponse } from './server.types';\n\n/** Base middleware creator for Expo dev servers. */\nexport abstract class ExpoMiddleware {\n constructor(protected projectRoot: string, protected supportedPaths: string[]) {}\n\n /**\n * Returns true when the middleware should handle the incoming server request.\n * Exposed for testing.\n */\n _shouldHandleRequest(req: ServerRequest): boolean {\n if (!req.url) {\n return false;\n }\n const parsed = parse(req.url);\n // Strip the query params\n if (!parsed.pathname) {\n return false;\n }\n\n return this.supportedPaths.includes(parsed.pathname);\n }\n\n abstract handleRequestAsync(\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ): Promise<void>;\n\n /** Create a server middleware handler. */\n public getHandler(): (\n req: ServerRequest,\n res: ServerResponse,\n next: ServerNext\n ) => Promise<void> {\n return async (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n if (!this._shouldHandleRequest(req)) {\n return next();\n }\n\n try {\n return await this.handleRequestAsync(req, res, next);\n } catch (error: any) {\n Log.exception(error);\n // 5xx = Server Error HTTP code\n res.statusCode = 500;\n if (typeof error === 'object' && error !== null) {\n res.end(\n JSON.stringify({\n error: error.toString(),\n })\n );\n } else {\n res.end(`Unexpected error: ${error}`);\n }\n }\n };\n }\n}\n\nexport function disableResponseCache(res: ServerResponse): ServerResponse {\n res.setHeader('Cache-Control', 'private, no-cache, no-store, must-revalidate');\n res.setHeader('Expires', '-1');\n res.setHeader('Pragma', 'no-cache');\n return res;\n}\n"],"names":["disableResponseCache","Log","ExpoMiddleware","constructor","projectRoot","supportedPaths","_shouldHandleRequest","req","url","parsed","parse","pathname","includes","getHandler","res","next","handleRequestAsync","error","exception","statusCode","end","JSON","stringify","toString","setHeader"],"mappings":"AAAA;;;;QA+DgBA,oBAAoB,GAApBA,oBAAoB;AA/Dd,IAAA,IAAK,WAAL,KAAK,CAAA;AAEfC,IAAAA,GAAG,mCAAM,cAAc,EAApB;;;;;;;;;;;;;;;;;;;;;;AAIR,MAAeC,cAAc;IAClCC,YAAsBC,WAAmB,EAAYC,cAAwB,CAAE;aAAzDD,WAAmB,GAAnBA,WAAmB;aAAYC,cAAwB,GAAxBA,cAAwB;KAAI;IAEjF;;;KAGG,CACHC,oBAAoB,CAACC,GAAkB,EAAW;QAChD,IAAI,CAACA,GAAG,CAACC,GAAG,EAAE;YACZ,OAAO,KAAK,CAAC;SACd;QACD,MAAMC,MAAM,GAAGC,CAAAA,GAAAA,IAAK,AAAS,CAAA,MAAT,CAACH,GAAG,CAACC,GAAG,CAAC,AAAC;QAC9B,yBAAyB;QACzB,IAAI,CAACC,MAAM,CAACE,QAAQ,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAACN,cAAc,CAACO,QAAQ,CAACH,MAAM,CAACE,QAAQ,CAAC,CAAC;KACtD;IAQD,0CAA0C,CAC1C,AAAOE,UAAU,GAIE;QACjB,OAAO,OAAON,GAAkB,EAAEO,GAAmB,EAAEC,IAAgB,GAAK;YAC1E,IAAI,CAAC,IAAI,CAACT,oBAAoB,CAACC,GAAG,CAAC,EAAE;gBACnC,OAAOQ,IAAI,EAAE,CAAC;aACf;YAED,IAAI;gBACF,OAAO,MAAM,IAAI,CAACC,kBAAkB,CAACT,GAAG,EAAEO,GAAG,EAAEC,IAAI,CAAC,CAAC;aACtD,CAAC,OAAOE,KAAK,EAAO;gBACnBhB,GAAG,CAACiB,SAAS,CAACD,KAAK,CAAC,CAAC;gBACrB,+BAA+B;gBAC/BH,GAAG,CAACK,UAAU,GAAG,GAAG,CAAC;gBACrB,IAAI,OAAOF,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;oBAC/CH,GAAG,CAACM,GAAG,CACLC,IAAI,CAACC,SAAS,CAAC;wBACbL,KAAK,EAAEA,KAAK,CAACM,QAAQ,EAAE;qBACxB,CAAC,CACH,CAAC;iBACH,MAAM;oBACLT,GAAG,CAACM,GAAG,CAAC,CAAC,kBAAkB,EAAEH,KAAK,CAAC,CAAC,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;KACH;CACF;QAvDqBf,cAAc,GAAdA,cAAc;AAyD7B,SAASF,oBAAoB,CAACc,GAAmB,EAAkB;IACxEA,GAAG,CAACU,SAAS,CAAC,eAAe,EAAE,8CAA8C,CAAC,CAAC;IAC/EV,GAAG,CAACU,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/BV,GAAG,CAACU,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACpC,OAAOV,GAAG,CAAC;CACZ"}