@depup/expo__cli 55.0.22-depup.1 → 57.0.9-depup.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 (600) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -18
  3. package/build/bin/cli +4 -4
  4. package/build/bin/cli.map +1 -1
  5. package/build/src/api/endpoint.js +4 -4
  6. package/build/src/api/endpoint.js.map +1 -1
  7. package/build/src/api/getExpoSchema.js +3 -3
  8. package/build/src/api/getExpoSchema.js.map +1 -1
  9. package/build/src/api/graphql/client.js +26 -14
  10. package/build/src/api/graphql/client.js.map +1 -1
  11. package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
  12. package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
  13. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  14. package/build/src/api/rest/cache/ResponseCache.js +5 -5
  15. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  16. package/build/src/api/rest/client.js +35 -20
  17. package/build/src/api/rest/client.js.map +1 -1
  18. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  19. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  20. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
  22. package/build/src/api/updateDevelopmentSession.js +6 -5
  23. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  24. package/build/src/api/user/UserSettings.js +28 -15
  25. package/build/src/api/user/UserSettings.js.map +1 -1
  26. package/build/src/api/user/actions.js +10 -3
  27. package/build/src/api/user/actions.js.map +1 -1
  28. package/build/src/api/user/expoSsoLauncher.js +76 -24
  29. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  30. package/build/src/api/user/otp.js +4 -4
  31. package/build/src/api/user/otp.js.map +1 -1
  32. package/build/src/api/user/user.js +19 -7
  33. package/build/src/api/user/user.js.map +1 -1
  34. package/build/src/config/configAsync.js +3 -3
  35. package/build/src/config/configAsync.js.map +1 -1
  36. package/build/src/config/index.js.map +1 -1
  37. package/build/src/customize/customizeAsync.js.map +1 -1
  38. package/build/src/customize/generate.js +7 -4
  39. package/build/src/customize/generate.js.map +1 -1
  40. package/build/src/customize/index.js.map +1 -1
  41. package/build/src/customize/templates.js +4 -6
  42. package/build/src/customize/templates.js.map +1 -1
  43. package/build/src/customize/typescript.js.map +1 -1
  44. package/build/src/events/index.js +19 -15
  45. package/build/src/events/index.js.map +1 -1
  46. package/build/src/events/stream.js +94 -24
  47. package/build/src/events/stream.js.map +1 -1
  48. package/build/src/expoUpdatesExports.js +50 -7
  49. package/build/src/expoUpdatesExports.js.map +1 -1
  50. package/build/src/export/createMetadataJson.js +2 -1
  51. package/build/src/export/createMetadataJson.js.map +1 -1
  52. package/build/src/export/embed/exportEmbedAsync.js +58 -24
  53. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  54. package/build/src/export/embed/exportServer.js +1 -1
  55. package/build/src/export/embed/exportServer.js.map +1 -1
  56. package/build/src/export/embed/index.js +1 -1
  57. package/build/src/export/embed/index.js.map +1 -1
  58. package/build/src/export/embed/resolveOptions.js +7 -6
  59. package/build/src/export/embed/resolveOptions.js.map +1 -1
  60. package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
  61. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  62. package/build/src/export/exportApp.js +40 -30
  63. package/build/src/export/exportApp.js.map +1 -1
  64. package/build/src/export/exportAssets.js +5 -5
  65. package/build/src/export/exportAssets.js.map +1 -1
  66. package/build/src/export/exportAsync.js.map +1 -1
  67. package/build/src/export/exportDomComponents.js +16 -9
  68. package/build/src/export/exportDomComponents.js.map +1 -1
  69. package/build/src/export/exportHermes.js +23 -13
  70. package/build/src/export/exportHermes.js.map +1 -1
  71. package/build/src/export/exportStaticAsync.js +30 -21
  72. package/build/src/export/exportStaticAsync.js.map +1 -1
  73. package/build/src/export/favicon.js +26 -34
  74. package/build/src/export/favicon.js.map +1 -1
  75. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  76. package/build/src/export/getResolvedLocales.js.map +1 -1
  77. package/build/src/export/html.js +3 -3
  78. package/build/src/export/html.js.map +1 -1
  79. package/build/src/export/index.js +2 -0
  80. package/build/src/export/index.js.map +1 -1
  81. package/build/src/export/metroAssetLocalPath.js +4 -4
  82. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  83. package/build/src/export/persistMetroAssets.js +6 -6
  84. package/build/src/export/persistMetroAssets.js.map +1 -1
  85. package/build/src/export/publicFolder.js +16 -4
  86. package/build/src/export/publicFolder.js.map +1 -1
  87. package/build/src/export/resolveOptions.js +12 -13
  88. package/build/src/export/resolveOptions.js.map +1 -1
  89. package/build/src/export/saveAssets.js +3 -3
  90. package/build/src/export/saveAssets.js.map +1 -1
  91. package/build/src/export/static.js +6 -0
  92. package/build/src/export/static.js.map +1 -0
  93. package/build/src/export/web/exportWebAsync.js.map +1 -1
  94. package/build/src/export/web/index.js.map +1 -1
  95. package/build/src/export/writeContents.js.map +1 -1
  96. package/build/src/install/checkPackages.js +1 -28
  97. package/build/src/install/checkPackages.js.map +1 -1
  98. package/build/src/install/fixPackages.js.map +1 -1
  99. package/build/src/install/index.js.map +1 -1
  100. package/build/src/install/installAsync.js +3 -3
  101. package/build/src/install/installAsync.js.map +1 -1
  102. package/build/src/install/installExpoPackage.js.map +1 -1
  103. package/build/src/install/resolveOptions.js.map +1 -1
  104. package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
  105. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  106. package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
  107. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
  108. package/build/src/lint/ESlintPrerequisite.js.map +1 -1
  109. package/build/src/log.js +32 -14
  110. package/build/src/log.js.map +1 -1
  111. package/build/src/login/index.js +25 -5
  112. package/build/src/login/index.js.map +1 -1
  113. package/build/src/logout/index.js.map +1 -1
  114. package/build/src/prebuild/clearNativeFolder.js +49 -14
  115. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  116. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  117. package/build/src/prebuild/copyTemplateFiles.js +3 -3
  118. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  119. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  120. package/build/src/prebuild/index.js +3 -2
  121. package/build/src/prebuild/index.js.map +1 -1
  122. package/build/src/prebuild/prebuildAsync.js +31 -6
  123. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  124. package/build/src/prebuild/renameTemplateAppName.js +8 -5
  125. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  126. package/build/src/prebuild/resolveOptions.js +7 -7
  127. package/build/src/prebuild/resolveOptions.js.map +1 -1
  128. package/build/src/prebuild/resolveTemplate.js +10 -5
  129. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  130. package/build/src/prebuild/updateFromTemplate.js +3 -3
  131. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  132. package/build/src/prebuild/updatePackageJson.js +7 -7
  133. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  134. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  135. package/build/src/register/index.js.map +1 -1
  136. package/build/src/run/android/index.js.map +1 -1
  137. package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
  138. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  139. package/build/src/run/android/resolveInstallApkName.js +48 -1
  140. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  141. package/build/src/run/android/resolveLaunchProps.js +4 -1
  142. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  143. package/build/src/run/android/resolveOptions.js.map +1 -1
  144. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  145. package/build/src/run/ensureNativeProject.js.map +1 -1
  146. package/build/src/run/hints.js +4 -4
  147. package/build/src/run/hints.js.map +1 -1
  148. package/build/src/run/index.js.map +1 -1
  149. package/build/src/run/ios/XcodeBuild.js +163 -23
  150. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  151. package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
  152. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  153. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  154. package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
  155. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  156. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  157. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  158. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
  159. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  160. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  161. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  162. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  163. package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
  164. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  166. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
  167. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  168. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
  169. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  170. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
  171. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  172. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
  173. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  174. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
  175. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  176. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
  177. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  178. package/build/src/run/ios/codeSigning/Security.js +8 -8
  179. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  180. package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
  181. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  182. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
  183. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  184. package/build/src/run/ios/codeSigning/settings.js +3 -3
  185. package/build/src/run/ios/codeSigning/settings.js.map +1 -1
  186. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
  187. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  188. package/build/src/run/ios/index.js +8 -1
  189. package/build/src/run/ios/index.js.map +1 -1
  190. package/build/src/run/ios/launchApp.js +3 -3
  191. package/build/src/run/ios/launchApp.js.map +1 -1
  192. package/build/src/run/ios/options/appleDestinations.js.map +1 -1
  193. package/build/src/run/ios/options/promptDevice.js +3 -3
  194. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  195. package/build/src/run/ios/options/resolveDevice.js +8 -3
  196. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  197. package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
  198. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  199. package/build/src/run/ios/options/resolveOptions.js +9 -4
  200. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  201. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  202. package/build/src/run/ios/runIosAsync.js +39 -0
  203. package/build/src/run/ios/runIosAsync.js.map +1 -1
  204. package/build/src/run/ios/validateExternalBinary.js.map +1 -1
  205. package/build/src/run/startBundler.js +4 -0
  206. package/build/src/run/startBundler.js.map +1 -1
  207. package/build/src/serve/index.js +4 -1
  208. package/build/src/serve/index.js.map +1 -1
  209. package/build/src/serve/serveAsync.js +23 -11
  210. package/build/src/serve/serveAsync.js.map +1 -1
  211. package/build/src/serve/static.js +69 -0
  212. package/build/src/serve/static.js.map +1 -0
  213. package/build/src/start/checkDependenciesOnStart.js +131 -0
  214. package/build/src/start/checkDependenciesOnStart.js.map +1 -0
  215. package/build/src/start/detectDevClient.js +3 -3
  216. package/build/src/start/detectDevClient.js.map +1 -1
  217. package/build/src/start/doctor/Prerequisite.js +4 -4
  218. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  219. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
  220. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  221. package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
  222. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  223. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
  224. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  225. package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
  226. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  227. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
  228. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  229. package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
  230. package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
  231. package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
  232. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
  234. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  235. package/build/src/start/doctor/ngrok/ExternalModule.js +14 -9
  236. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  237. package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
  238. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
  239. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  240. package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
  241. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
  243. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  244. package/build/src/start/index.js +2 -0
  245. package/build/src/start/index.js.map +1 -1
  246. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  247. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
  248. package/build/src/start/interface/commandsTable.js +6 -6
  249. package/build/src/start/interface/commandsTable.js.map +1 -1
  250. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
  251. package/build/src/start/interface/interactiveActions.js +49 -6
  252. package/build/src/start/interface/interactiveActions.js.map +1 -1
  253. package/build/src/start/interface/startInterface.js +13 -4
  254. package/build/src/start/interface/startInterface.js.map +1 -1
  255. package/build/src/start/platforms/AppIdResolver.js +4 -0
  256. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  257. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  258. package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
  259. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  260. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  262. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  263. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  264. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  265. package/build/src/start/platforms/android/adb.js +36 -34
  266. package/build/src/start/platforms/android/adb.js.map +1 -1
  267. package/build/src/start/platforms/android/adbReverse.js +4 -4
  268. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  269. package/build/src/start/platforms/android/emulator.js +5 -5
  270. package/build/src/start/platforms/android/emulator.js.map +1 -1
  271. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  272. package/build/src/start/platforms/android/gradle.js +5 -5
  273. package/build/src/start/platforms/android/gradle.js.map +1 -1
  274. package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
  275. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  276. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  277. package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
  278. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  279. package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
  280. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  281. package/build/src/start/platforms/ios/devicectl.js +7 -7
  282. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
  284. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  285. package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
  286. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  287. package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
  288. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  289. package/build/src/start/platforms/ios/simctl.js +25 -19
  290. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  291. package/build/src/start/platforms/ios/simctlLogging.js +3 -3
  292. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  293. package/build/src/start/platforms/ios/xcrun.js +3 -3
  294. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  295. package/build/src/start/project/devices.js +6 -6
  296. package/build/src/start/project/devices.js.map +1 -1
  297. package/build/src/start/project/dotExpo.js +4 -3
  298. package/build/src/start/project/dotExpo.js.map +1 -1
  299. package/build/src/start/resolveOptions.js +7 -7
  300. package/build/src/start/resolveOptions.js.map +1 -1
  301. package/build/src/start/server/AsyncNgrok.js +1 -1
  302. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  303. package/build/src/start/server/AsyncWsTunnel.js +120 -35
  304. package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
  305. package/build/src/start/server/Bonjour.js +8 -3
  306. package/build/src/start/server/Bonjour.js.map +1 -1
  307. package/build/src/start/server/BundlerDevServer.js +23 -9
  308. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  309. package/build/src/start/server/DevServerManager.js.map +1 -1
  310. package/build/src/start/server/DevToolsPlugin.js +63 -3
  311. package/build/src/start/server/DevToolsPlugin.js.map +1 -1
  312. package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
  313. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
  314. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
  315. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
  316. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
  317. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
  318. package/build/src/start/server/DevToolsPluginManager.js +20 -6
  319. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  320. package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
  321. package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
  322. package/build/src/start/server/DevelopmentSession.js +41 -24
  323. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  324. package/build/src/start/server/MCP.js +10 -3
  325. package/build/src/start/server/MCP.js.map +1 -1
  326. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
  327. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
  328. package/build/src/start/server/UrlCreator.js +14 -1
  329. package/build/src/start/server/UrlCreator.js.map +1 -1
  330. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
  331. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
  332. package/build/src/start/server/getStaticRenderFunctions.js +13 -24
  333. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  334. package/build/src/start/server/metro/MetroBundlerDevServer.js +245 -114
  335. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  336. package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
  337. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  338. package/build/src/start/server/metro/TerminalReporter.js +22 -4
  339. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  340. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
  341. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  342. package/build/src/start/server/metro/createExpoFallbackResolver.js +39 -0
  343. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  344. package/build/src/start/server/metro/createFileMap-fork.js +196 -0
  345. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
  346. package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
  347. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  348. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  349. package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
  350. package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
  351. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
  352. package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
  353. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
  354. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
  355. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  356. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
  357. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
  358. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
  359. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
  360. package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
  361. package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
  362. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
  363. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
  364. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  365. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
  366. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
  367. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
  368. package/build/src/start/server/metro/externals.js +4 -4
  369. package/build/src/start/server/metro/externals.js.map +1 -1
  370. package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
  371. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  372. package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
  373. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  374. package/build/src/start/server/metro/instantiateMetro.js +141 -57
  375. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  376. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  377. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
  378. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  379. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
  380. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
  381. package/build/src/start/server/metro/metroErrorInterface.js +16 -13
  382. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  383. package/build/src/start/server/metro/metroErrors.js +3 -3
  384. package/build/src/start/server/metro/metroErrors.js.map +1 -1
  385. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
  386. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  387. package/build/src/start/server/metro/resolveLoader.js +3 -3
  388. package/build/src/start/server/metro/resolveLoader.js.map +1 -1
  389. package/build/src/start/server/metro/router.js +23 -14
  390. package/build/src/start/server/metro/router.js.map +1 -1
  391. package/build/src/start/server/metro/runServer-fork.js +13 -10
  392. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  393. package/build/src/start/server/metro/serializeHtml.js +29 -13
  394. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  395. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
  396. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  397. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
  398. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  399. package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
  400. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  401. package/build/src/start/server/metro/withMetroResolvers.js +4 -4
  402. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  403. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
  404. package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
  405. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  406. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  407. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
  408. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/DomComponentsMiddleware.js +30 -17
  410. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  411. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
  412. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  413. package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
  414. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  415. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  416. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
  417. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
  418. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  419. package/build/src/start/server/middleware/ManifestMiddleware.js +19 -47
  420. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  421. package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
  422. package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
  423. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
  424. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  425. package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
  426. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  427. package/build/src/start/server/middleware/domPolyfills.js +60 -0
  428. package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
  429. package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
  430. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  431. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
  432. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  433. package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
  434. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
  435. package/build/src/start/server/middleware/metroOptions.js +15 -14
  436. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  437. package/build/src/start/server/middleware/mutations.js +3 -3
  438. package/build/src/start/server/middleware/mutations.js.map +1 -1
  439. package/build/src/start/server/middleware/openHandlers.js +157 -0
  440. package/build/src/start/server/middleware/openHandlers.js.map +1 -0
  441. package/build/src/start/server/middleware/resolveAssets.js +4 -4
  442. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  443. package/build/src/start/server/middleware/resolvePlatform.js +9 -7
  444. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  445. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
  446. package/build/src/start/server/openPlatforms.js.map +1 -1
  447. package/build/src/start/server/platformBundlers.js +3 -1
  448. package/build/src/start/server/platformBundlers.js.map +1 -1
  449. package/build/src/start/server/serverLogLikeMetro.js +13 -36
  450. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  451. package/build/src/start/server/type-generation/expo-env.js +3 -3
  452. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  453. package/build/src/start/server/type-generation/routes.js +14 -55
  454. package/build/src/start/server/type-generation/routes.js.map +1 -1
  455. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  456. package/build/src/start/server/type-generation/tsconfig.js +5 -5
  457. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  458. package/build/src/start/server/webTemplate.js +12 -10
  459. package/build/src/start/server/webTemplate.js.map +1 -1
  460. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
  461. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  462. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
  463. package/build/src/start/server/webpack/resolveFromProject.js +4 -4
  464. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  465. package/build/src/start/server/webpack/tls.js +3 -3
  466. package/build/src/start/server/webpack/tls.js.map +1 -1
  467. package/build/src/start/startAsync.js +21 -11
  468. package/build/src/start/startAsync.js.map +1 -1
  469. package/build/src/types.d.ts +2 -0
  470. package/build/src/utils/FileNotifier.js +1 -1
  471. package/build/src/utils/FileNotifier.js.map +1 -1
  472. package/build/src/utils/args.js +5 -5
  473. package/build/src/utils/args.js.map +1 -1
  474. package/build/src/utils/array.js +8 -8
  475. package/build/src/utils/array.js.map +1 -1
  476. package/build/src/utils/build-cache-providers/helpers.js +4 -4
  477. package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
  478. package/build/src/utils/build-cache-providers/index.js +5 -5
  479. package/build/src/utils/build-cache-providers/index.js.map +1 -1
  480. package/build/src/utils/cocoapods.js +5 -5
  481. package/build/src/utils/cocoapods.js.map +1 -1
  482. package/build/src/utils/codesigning.js +12 -6
  483. package/build/src/utils/codesigning.js.map +1 -1
  484. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  485. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  486. package/build/src/utils/createTempPath.js +3 -3
  487. package/build/src/utils/createTempPath.js.map +1 -1
  488. package/build/src/utils/delay.js +4 -4
  489. package/build/src/utils/delay.js.map +1 -1
  490. package/build/src/utils/dir.js +21 -11
  491. package/build/src/utils/dir.js.map +1 -1
  492. package/build/src/utils/downloadAppAsync.js.map +1 -1
  493. package/build/src/utils/downloadExpoGoAsync.js +4 -4
  494. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  495. package/build/src/utils/editor.js +4 -4
  496. package/build/src/utils/editor.js.map +1 -1
  497. package/build/src/utils/env.js +39 -13
  498. package/build/src/utils/env.js.map +1 -1
  499. package/build/src/utils/errors.js +6 -6
  500. package/build/src/utils/errors.js.map +1 -1
  501. package/build/src/utils/exit.js +15 -19
  502. package/build/src/utils/exit.js.map +1 -1
  503. package/build/src/utils/expoUpdatesCli.js +5 -5
  504. package/build/src/utils/expoUpdatesCli.js.map +1 -1
  505. package/build/src/utils/fetch.js +4 -4
  506. package/build/src/utils/fetch.js.map +1 -1
  507. package/build/src/utils/filePath.js +3 -29
  508. package/build/src/utils/filePath.js.map +1 -1
  509. package/build/src/utils/findUp.js +3 -3
  510. package/build/src/utils/findUp.js.map +1 -1
  511. package/build/src/utils/fn.js +3 -3
  512. package/build/src/utils/fn.js.map +1 -1
  513. package/build/src/utils/freeport.js +3 -3
  514. package/build/src/utils/freeport.js.map +1 -1
  515. package/build/src/utils/getOrPromptApplicationId.js +3 -5
  516. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  517. package/build/src/utils/getRunningProcess.js +5 -5
  518. package/build/src/utils/getRunningProcess.js.map +1 -1
  519. package/build/src/utils/git.js +3 -3
  520. package/build/src/utils/git.js.map +1 -1
  521. package/build/src/utils/glob.js +3 -3
  522. package/build/src/utils/glob.js.map +1 -1
  523. package/build/src/utils/ip.js +4 -4
  524. package/build/src/utils/ip.js.map +1 -1
  525. package/build/src/utils/link.js +3 -3
  526. package/build/src/utils/link.js.map +1 -1
  527. package/build/src/utils/mergeGitIgnorePaths.js +10 -10
  528. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  529. package/build/src/utils/modifyConfigAsync.js +3 -3
  530. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  531. package/build/src/utils/net.js +23 -4
  532. package/build/src/utils/net.js.map +1 -1
  533. package/build/src/utils/nodeEnv.js +6 -6
  534. package/build/src/utils/nodeEnv.js.map +1 -1
  535. package/build/src/utils/npm.js +10 -9
  536. package/build/src/utils/npm.js.map +1 -1
  537. package/build/src/utils/obj.js +4 -4
  538. package/build/src/utils/obj.js.map +1 -1
  539. package/build/src/utils/open.js +240 -11
  540. package/build/src/utils/open.js.map +1 -1
  541. package/build/src/utils/ora.js +4 -4
  542. package/build/src/utils/ora.js.map +1 -1
  543. package/build/src/utils/plist.js +5 -4
  544. package/build/src/utils/plist.js.map +1 -1
  545. package/build/src/utils/port.js +12 -5
  546. package/build/src/utils/port.js.map +1 -1
  547. package/build/src/utils/progress.js +4 -4
  548. package/build/src/utils/progress.js.map +1 -1
  549. package/build/src/utils/prompts.js +11 -11
  550. package/build/src/utils/prompts.js.map +1 -1
  551. package/build/src/utils/qr.js +5 -4
  552. package/build/src/utils/qr.js.map +1 -1
  553. package/build/src/utils/resolveArgs.js +10 -9
  554. package/build/src/utils/resolveArgs.js.map +1 -1
  555. package/build/src/utils/scheme.js +4 -4
  556. package/build/src/utils/scheme.js.map +1 -1
  557. package/build/src/utils/strings.js.map +1 -1
  558. package/build/src/utils/tar.js +8 -7
  559. package/build/src/utils/tar.js.map +1 -1
  560. package/build/src/utils/telemetry/Telemetry.js +5 -0
  561. package/build/src/utils/telemetry/Telemetry.js.map +1 -1
  562. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  563. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  564. package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
  565. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
  566. package/build/src/utils/telemetry/index.js +4 -4
  567. package/build/src/utils/telemetry/index.js.map +1 -1
  568. package/build/src/utils/telemetry/utils/agent.js +42 -0
  569. package/build/src/utils/telemetry/utils/agent.js.map +1 -0
  570. package/build/src/utils/telemetry/utils/constants.js +3 -3
  571. package/build/src/utils/telemetry/utils/constants.js.map +1 -1
  572. package/build/src/utils/telemetry/utils/context.js +3 -2
  573. package/build/src/utils/telemetry/utils/context.js.map +1 -1
  574. package/build/src/utils/url.js +5 -17
  575. package/build/src/utils/url.js.map +1 -1
  576. package/build/src/utils/validateApplicationId.js +12 -12
  577. package/build/src/utils/validateApplicationId.js.map +1 -1
  578. package/build/src/utils/variadic.js +4 -4
  579. package/build/src/utils/variadic.js.map +1 -1
  580. package/build/src/whoami/index.js.map +1 -1
  581. package/changes.json +16 -36
  582. package/main.js +3 -0
  583. package/package.json +86 -90
  584. package/static/loading-page/index.html +45 -3
  585. package/static/template/+html.tsx +14 -5
  586. package/add-module.js +0 -8
  587. package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
  588. package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
  589. package/build/src/utils/resolveGlobal.js +0 -195
  590. package/build/src/utils/resolveGlobal.js.map +0 -1
  591. package/build/src/utils/resolveWatchFolders.js +0 -67
  592. package/build/src/utils/resolveWatchFolders.js.map +0 -1
  593. package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
  594. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
  595. package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
  596. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
  597. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
  598. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
  599. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
  600. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
@@ -5,29 +5,29 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- ApiV2Error: function() {
12
+ get ApiV2Error () {
13
13
  return ApiV2Error;
14
14
  },
15
- UnexpectedServerData: function() {
15
+ get UnexpectedServerData () {
16
16
  return UnexpectedServerData;
17
17
  },
18
- UnexpectedServerError: function() {
18
+ get UnexpectedServerError () {
19
19
  return UnexpectedServerError;
20
20
  },
21
- createCachedFetch: function() {
21
+ get createCachedFetch () {
22
22
  return createCachedFetch;
23
23
  },
24
- fetchAsync: function() {
24
+ get fetchAsync () {
25
25
  return fetchAsync;
26
26
  },
27
- getResponseDataOrThrow: function() {
27
+ get getResponseDataOrThrow () {
28
28
  return getResponseDataOrThrow;
29
29
  },
30
- wrapFetchWithCredentials: function() {
30
+ get wrapFetchWithCredentials () {
31
31
  return wrapFetchWithCredentials;
32
32
  }
33
33
  });
@@ -84,20 +84,23 @@ function getResponseDataOrThrow(json) {
84
84
  }
85
85
  throw new UnexpectedServerData(!!json && typeof json === 'object' ? JSON.stringify(json) : 'Unknown data received from server.');
86
86
  }
87
- function wrapFetchWithCredentials(fetchFunction) {
87
+ function wrapFetchWithCredentials(fetchFunction, expoApiBaseUrl) {
88
+ const expoApiOrigin = new URL(expoApiBaseUrl).origin;
88
89
  return async function fetchWithCredentials(url, options = {}) {
89
90
  if (Array.isArray(options.headers)) {
90
91
  throw new Error('request headers must be in object form');
91
92
  }
92
93
  const resolvedHeaders = options.headers ?? {};
93
- const token = (0, _UserSettings.getAccessToken)();
94
- if (token) {
95
- resolvedHeaders.authorization = `Bearer ${token}`;
96
- } else {
97
- var _getSession;
98
- const sessionSecret = (_getSession = (0, _UserSettings.getSession)()) == null ? void 0 : _getSession.sessionSecret;
99
- if (sessionSecret) {
100
- resolvedHeaders['expo-session'] = sessionSecret;
94
+ if (isExpoApiUrl(url, expoApiBaseUrl, expoApiOrigin)) {
95
+ const token = (0, _UserSettings.getAccessToken)();
96
+ if (token) {
97
+ resolvedHeaders.authorization = `Bearer ${token}`;
98
+ } else {
99
+ var _getSession;
100
+ const sessionSecret = (_getSession = (0, _UserSettings.getSession)()) == null ? void 0 : _getSession.sessionSecret;
101
+ if (sessionSecret) {
102
+ resolvedHeaders['expo-session'] = sessionSecret;
103
+ }
101
104
  }
102
105
  }
103
106
  try {
@@ -133,6 +136,17 @@ function wrapFetchWithCredentials(fetchFunction) {
133
136
  }
134
137
  };
135
138
  }
139
+ function isExpoApiUrl(url, expoApiBaseUrl, expoApiOrigin) {
140
+ if (typeof url !== 'string') {
141
+ return false;
142
+ }
143
+ try {
144
+ // Relative URLs resolve against the Expo API base, so they always match the Expo origin.
145
+ return new URL(url, expoApiBaseUrl).origin === expoApiOrigin;
146
+ } catch {
147
+ return false;
148
+ }
149
+ }
136
150
  /**
137
151
  * Determine if the provided error is related to a network issue.
138
152
  * When this returns true, offline mode should be enabled.
@@ -150,8 +164,9 @@ function wrapFetchWithCredentials(fetchFunction) {
150
164
  ].includes(error.code);
151
165
  }
152
166
  const fetchWithOffline = (0, _wrapFetchWithOffline.wrapFetchWithOffline)((0, _wrapFetchWithUserAgent.wrapFetchWithUserAgent)(_fetch.fetch));
153
- const fetchWithBaseUrl = (0, _wrapFetchWithBaseUrl.wrapFetchWithBaseUrl)(fetchWithOffline, (0, _endpoint.getExpoApiBaseUrl)() + '/v2/');
154
- const fetchWithCredentials = (0, _wrapFetchWithProgress.wrapFetchWithProgress)(wrapFetchWithCredentials(fetchWithBaseUrl));
167
+ const expoApiBaseUrl = (0, _endpoint.getExpoApiBaseUrl)() + '/v2/';
168
+ const fetchWithBaseUrl = (0, _wrapFetchWithBaseUrl.wrapFetchWithBaseUrl)(fetchWithOffline, expoApiBaseUrl);
169
+ const fetchWithCredentials = (0, _wrapFetchWithProgress.wrapFetchWithProgress)(wrapFetchWithCredentials(fetchWithBaseUrl, expoApiBaseUrl));
155
170
  function createCachedFetch({ fetch = fetchWithCredentials, cacheDirectory, ttl, skipCache }) {
156
171
  // Disable all caching in EXPO_BETA.
157
172
  if (skipCache || _env.env.EXPO_BETA || _env.env.EXPO_NO_CACHE) {
@@ -163,6 +178,6 @@ function createCachedFetch({ fetch = fetchWithCredentials, cacheDirectory, ttl,
163
178
  ttl
164
179
  }));
165
180
  }
166
- const fetchAsync = (0, _wrapFetchWithProgress.wrapFetchWithProgress)(wrapFetchWithCredentials(fetchWithBaseUrl));
181
+ const fetchAsync = (0, _wrapFetchWithProgress.wrapFetchWithProgress)(wrapFetchWithCredentials(fetchWithBaseUrl, expoApiBaseUrl));
167
182
 
168
183
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/client.ts"],"sourcesContent":["import type { JSONValue } from '@expo/json-file';\nimport path from 'path';\n\nimport { wrapFetchWithCache } from './cache/wrapFetchWithCache';\nimport type { FetchLike } from './client.types';\nimport { wrapFetchWithBaseUrl } from './wrapFetchWithBaseUrl';\nimport { wrapFetchWithOffline } from './wrapFetchWithOffline';\nimport { wrapFetchWithProgress } from './wrapFetchWithProgress';\nimport { wrapFetchWithUserAgent } from './wrapFetchWithUserAgent';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { fetch } from '../../utils/fetch';\nimport { getExpoApiBaseUrl } from '../endpoint';\nimport { disableNetwork } from '../settings';\nimport { getAccessToken, getExpoHomeDirectory, getSession } from '../user/UserSettings';\n\nexport class ApiV2Error extends Error {\n readonly name = 'ApiV2Error';\n readonly code: string;\n readonly expoApiV2ErrorCode: string;\n readonly expoApiV2ErrorDetails?: JSONValue;\n readonly expoApiV2ErrorServerStack?: string;\n readonly expoApiV2ErrorMetadata?: object;\n readonly expoApiV2RequestId?: string;\n\n constructor(response: {\n message: string;\n code: string;\n stack?: string;\n details?: JSONValue;\n metadata?: object;\n requestId: string;\n }) {\n super(response.message);\n this.code = response.code;\n this.expoApiV2ErrorCode = response.code;\n this.expoApiV2ErrorDetails = response.details;\n this.expoApiV2ErrorServerStack = response.stack;\n this.expoApiV2ErrorMetadata = response.metadata;\n this.expoApiV2RequestId = response.requestId;\n }\n\n toString() {\n return `${super.toString()}${env.EXPO_DEBUG && this.expoApiV2RequestId ? ` (Request Id: ${this.expoApiV2RequestId})` : ''}`;\n }\n}\n\n/**\n * An Expo server error that didn't return the expected error JSON information.\n * The only 'expected' place for this is in testing, all other cases are bugs with the server.\n */\nexport class UnexpectedServerError extends Error {\n readonly name = 'UnexpectedServerError';\n}\n\n/**\n * An error defining that the server didn't return the expected error JSON information.\n * The only 'expected' place for this is in testing, all other cases are bugs with the client.\n */\nexport class UnexpectedServerData extends Error {\n readonly name = 'UnexpectedServerData';\n}\n\n/** Validate the response json contains `.data` property, or throw an unexpected server data error */\nexport function getResponseDataOrThrow<T = any>(json: unknown): T {\n if (!!json && typeof json === 'object' && 'data' in json) {\n return json.data as T;\n }\n\n throw new UnexpectedServerData(\n !!json && typeof json === 'object' ? JSON.stringify(json) : 'Unknown data received from server.'\n );\n}\n\n/**\n * @returns a `fetch` function that will inject user authentication information and handle errors from the Expo API.\n */\nexport function wrapFetchWithCredentials(fetchFunction: FetchLike): FetchLike {\n return async function fetchWithCredentials(url, options = {}) {\n if (Array.isArray(options.headers)) {\n throw new Error('request headers must be in object form');\n }\n\n const resolvedHeaders = options.headers ?? ({} as any);\n\n const token = getAccessToken();\n if (token) {\n resolvedHeaders.authorization = `Bearer ${token}`;\n } else {\n const sessionSecret = getSession()?.sessionSecret;\n if (sessionSecret) {\n resolvedHeaders['expo-session'] = sessionSecret;\n }\n }\n\n try {\n const response = await fetchFunction(url, {\n ...options,\n headers: resolvedHeaders,\n });\n\n // Handle expected API errors (4xx)\n if (response.status >= 400 && response.status < 500) {\n const body = await response.text();\n try {\n const data = JSON.parse(body);\n if (data?.errors?.length) {\n throw new ApiV2Error(data.errors[0]);\n }\n } catch (error: any) {\n // Server returned non-json response.\n if (error.message.includes('in JSON at position')) {\n throw new UnexpectedServerError(body);\n }\n throw error;\n }\n }\n\n return response;\n } catch (error: any) {\n // When running `expo start`, but wifi or internet has issues\n if (isNetworkError(error) || ('cause' in error && isNetworkError(error.cause))) {\n disableNetwork();\n\n throw new CommandError(\n 'OFFLINE',\n 'Network connection is unreliable. Try again with the environment variable `EXPO_OFFLINE=1` to skip network requests.'\n );\n }\n\n throw error;\n }\n };\n}\n\n/**\n * Determine if the provided error is related to a network issue.\n * When this returns true, offline mode should be enabled.\n * - `ENOTFOUND` is thrown when the DNS lookup failed\n * - `EAI_AGAIN` is thrown when DNS lookup failed due to a server-side error\n * - `UND_ERR_CONNECT_TIMEOUT` is thrown after DNS is resolved, but server can't be reached\n *\n * @see https://nodejs.org/api/errors.html\n * @see https://github.com/nodejs/undici#network-address-family-autoselection\n */\nfunction isNetworkError(error: Error & { code?: string }) {\n return (\n 'code' in error &&\n error.code &&\n ['ENOTFOUND', 'EAI_AGAIN', 'UND_ERR_CONNECT_TIMEOUT'].includes(error.code)\n );\n}\n\nconst fetchWithOffline = wrapFetchWithOffline(wrapFetchWithUserAgent(fetch));\n\nconst fetchWithBaseUrl = wrapFetchWithBaseUrl(fetchWithOffline, getExpoApiBaseUrl() + '/v2/');\n\nconst fetchWithCredentials = wrapFetchWithProgress(wrapFetchWithCredentials(fetchWithBaseUrl));\n\n/**\n * Create an instance of the fully qualified fetch command (auto authentication and api) but with caching in the '~/.expo' directory.\n * Caching is disabled automatically if the EXPO_NO_CACHE or EXPO_BETA environment variables are enabled.\n */\nexport function createCachedFetch({\n fetch = fetchWithCredentials,\n cacheDirectory,\n ttl,\n skipCache,\n}: {\n fetch?: FetchLike;\n cacheDirectory: string;\n ttl?: number;\n skipCache?: boolean;\n}): FetchLike {\n // Disable all caching in EXPO_BETA.\n if (skipCache || env.EXPO_BETA || env.EXPO_NO_CACHE) {\n return fetch;\n }\n\n const { FileSystemResponseCache } =\n require('./cache/FileSystemResponseCache') as typeof import('./cache/FileSystemResponseCache');\n\n return wrapFetchWithCache(\n fetch,\n new FileSystemResponseCache({\n cacheDirectory: path.join(getExpoHomeDirectory(), cacheDirectory),\n ttl,\n })\n );\n}\n\n/** Instance of fetch with automatic base URL pointing to the Expo API, user credential injection, and API error handling. Caching not included. */\nexport const fetchAsync = wrapFetchWithProgress(wrapFetchWithCredentials(fetchWithBaseUrl));\n"],"names":["ApiV2Error","UnexpectedServerData","UnexpectedServerError","createCachedFetch","fetchAsync","getResponseDataOrThrow","wrapFetchWithCredentials","Error","constructor","response","message","name","code","expoApiV2ErrorCode","expoApiV2ErrorDetails","details","expoApiV2ErrorServerStack","stack","expoApiV2ErrorMetadata","metadata","expoApiV2RequestId","requestId","toString","env","EXPO_DEBUG","json","data","JSON","stringify","fetchFunction","fetchWithCredentials","url","options","Array","isArray","headers","resolvedHeaders","token","getAccessToken","authorization","getSession","sessionSecret","status","body","text","parse","errors","length","error","includes","isNetworkError","cause","disableNetwork","CommandError","fetchWithOffline","wrapFetchWithOffline","wrapFetchWithUserAgent","fetch","fetchWithBaseUrl","wrapFetchWithBaseUrl","getExpoApiBaseUrl","wrapFetchWithProgress","cacheDirectory","ttl","skipCache","EXPO_BETA","EXPO_NO_CACHE","FileSystemResponseCache","require","wrapFetchWithCache","path","join","getExpoHomeDirectory"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/api/rest/client.ts"],"sourcesContent":["import type { JSONValue } from '@expo/json-file';\nimport path from 'path';\n\nimport { wrapFetchWithCache } from './cache/wrapFetchWithCache';\nimport type { FetchLike } from './client.types';\nimport { wrapFetchWithBaseUrl } from './wrapFetchWithBaseUrl';\nimport { wrapFetchWithOffline } from './wrapFetchWithOffline';\nimport { wrapFetchWithProgress } from './wrapFetchWithProgress';\nimport { wrapFetchWithUserAgent } from './wrapFetchWithUserAgent';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { fetch } from '../../utils/fetch';\nimport { getExpoApiBaseUrl } from '../endpoint';\nimport { disableNetwork } from '../settings';\nimport { getAccessToken, getExpoHomeDirectory, getSession } from '../user/UserSettings';\n\nexport class ApiV2Error extends Error {\n readonly name = 'ApiV2Error';\n readonly code: string;\n readonly expoApiV2ErrorCode: string;\n readonly expoApiV2ErrorDetails?: JSONValue;\n readonly expoApiV2ErrorServerStack?: string;\n readonly expoApiV2ErrorMetadata?: object;\n readonly expoApiV2RequestId?: string;\n\n constructor(response: {\n message: string;\n code: string;\n stack?: string;\n details?: JSONValue;\n metadata?: object;\n requestId: string;\n }) {\n super(response.message);\n this.code = response.code;\n this.expoApiV2ErrorCode = response.code;\n this.expoApiV2ErrorDetails = response.details;\n this.expoApiV2ErrorServerStack = response.stack;\n this.expoApiV2ErrorMetadata = response.metadata;\n this.expoApiV2RequestId = response.requestId;\n }\n\n toString() {\n return `${super.toString()}${env.EXPO_DEBUG && this.expoApiV2RequestId ? ` (Request Id: ${this.expoApiV2RequestId})` : ''}`;\n }\n}\n\n/**\n * An Expo server error that didn't return the expected error JSON information.\n * The only 'expected' place for this is in testing, all other cases are bugs with the server.\n */\nexport class UnexpectedServerError extends Error {\n readonly name = 'UnexpectedServerError';\n}\n\n/**\n * An error defining that the server didn't return the expected error JSON information.\n * The only 'expected' place for this is in testing, all other cases are bugs with the client.\n */\nexport class UnexpectedServerData extends Error {\n readonly name = 'UnexpectedServerData';\n}\n\n/** Validate the response json contains `.data` property, or throw an unexpected server data error */\nexport function getResponseDataOrThrow<T = any>(json: unknown): T {\n if (!!json && typeof json === 'object' && 'data' in json) {\n return json.data as T;\n }\n\n throw new UnexpectedServerData(\n !!json && typeof json === 'object' ? JSON.stringify(json) : 'Unknown data received from server.'\n );\n}\n\n/**\n * @returns a `fetch` function that will inject user authentication information and handle errors from the Expo API.\n *\n * Credentials are only attached to requests targeting `expoApiBaseUrl`'s origin (including relative\n * URLs, which the downstream base-URL wrapper resolves against the Expo API). Absolute URLs to any\n * other host pass through without Expo credentials.\n */\nexport function wrapFetchWithCredentials(\n fetchFunction: FetchLike,\n expoApiBaseUrl: string\n): FetchLike {\n const expoApiOrigin = new URL(expoApiBaseUrl).origin;\n\n return async function fetchWithCredentials(url, options = {}) {\n if (Array.isArray(options.headers)) {\n throw new Error('request headers must be in object form');\n }\n\n const resolvedHeaders = options.headers ?? ({} as any);\n\n if (isExpoApiUrl(url, expoApiBaseUrl, expoApiOrigin)) {\n const token = getAccessToken();\n if (token) {\n resolvedHeaders.authorization = `Bearer ${token}`;\n } else {\n const sessionSecret = getSession()?.sessionSecret;\n if (sessionSecret) {\n resolvedHeaders['expo-session'] = sessionSecret;\n }\n }\n }\n\n try {\n const response = await fetchFunction(url, {\n ...options,\n headers: resolvedHeaders,\n });\n\n // Handle expected API errors (4xx)\n if (response.status >= 400 && response.status < 500) {\n const body = await response.text();\n try {\n const data = JSON.parse(body);\n if (data?.errors?.length) {\n throw new ApiV2Error(data.errors[0]);\n }\n } catch (error: any) {\n // Server returned non-json response.\n if (error.message.includes('in JSON at position')) {\n throw new UnexpectedServerError(body);\n }\n throw error;\n }\n }\n\n return response;\n } catch (error: any) {\n // When running `expo start`, but wifi or internet has issues\n if (isNetworkError(error) || ('cause' in error && isNetworkError(error.cause))) {\n disableNetwork();\n\n throw new CommandError(\n 'OFFLINE',\n 'Network connection is unreliable. Try again with the environment variable `EXPO_OFFLINE=1` to skip network requests.'\n );\n }\n\n throw error;\n }\n };\n}\n\nfunction isExpoApiUrl(url: unknown, expoApiBaseUrl: string, expoApiOrigin: string): boolean {\n if (typeof url !== 'string') {\n return false;\n }\n try {\n // Relative URLs resolve against the Expo API base, so they always match the Expo origin.\n return new URL(url, expoApiBaseUrl).origin === expoApiOrigin;\n } catch {\n return false;\n }\n}\n\n/**\n * Determine if the provided error is related to a network issue.\n * When this returns true, offline mode should be enabled.\n * - `ENOTFOUND` is thrown when the DNS lookup failed\n * - `EAI_AGAIN` is thrown when DNS lookup failed due to a server-side error\n * - `UND_ERR_CONNECT_TIMEOUT` is thrown after DNS is resolved, but server can't be reached\n *\n * @see https://nodejs.org/api/errors.html\n * @see https://github.com/nodejs/undici#network-address-family-autoselection\n */\nfunction isNetworkError(error: Error & { code?: string }) {\n return (\n 'code' in error &&\n error.code &&\n ['ENOTFOUND', 'EAI_AGAIN', 'UND_ERR_CONNECT_TIMEOUT'].includes(error.code)\n );\n}\n\nconst fetchWithOffline = wrapFetchWithOffline(wrapFetchWithUserAgent(fetch));\n\nconst expoApiBaseUrl = getExpoApiBaseUrl() + '/v2/';\n\nconst fetchWithBaseUrl = wrapFetchWithBaseUrl(fetchWithOffline, expoApiBaseUrl);\n\nconst fetchWithCredentials = wrapFetchWithProgress(\n wrapFetchWithCredentials(fetchWithBaseUrl, expoApiBaseUrl)\n);\n\n/**\n * Create an instance of the fully qualified fetch command (auto authentication and api) but with caching in the '~/.expo' directory.\n * Caching is disabled automatically if the EXPO_NO_CACHE or EXPO_BETA environment variables are enabled.\n */\nexport function createCachedFetch({\n fetch = fetchWithCredentials,\n cacheDirectory,\n ttl,\n skipCache,\n}: {\n fetch?: FetchLike;\n cacheDirectory: string;\n ttl?: number;\n skipCache?: boolean;\n}): FetchLike {\n // Disable all caching in EXPO_BETA.\n if (skipCache || env.EXPO_BETA || env.EXPO_NO_CACHE) {\n return fetch;\n }\n\n const { FileSystemResponseCache } =\n require('./cache/FileSystemResponseCache') as typeof import('./cache/FileSystemResponseCache');\n\n return wrapFetchWithCache(\n fetch,\n new FileSystemResponseCache({\n cacheDirectory: path.join(getExpoHomeDirectory(), cacheDirectory),\n ttl,\n })\n );\n}\n\n/** Instance of fetch with automatic base URL pointing to the Expo API, user credential injection, and API error handling. Caching not included. */\nexport const fetchAsync = wrapFetchWithProgress(\n wrapFetchWithCredentials(fetchWithBaseUrl, expoApiBaseUrl)\n);\n"],"names":["ApiV2Error","UnexpectedServerData","UnexpectedServerError","createCachedFetch","fetchAsync","getResponseDataOrThrow","wrapFetchWithCredentials","Error","response","message","name","code","expoApiV2ErrorCode","expoApiV2ErrorDetails","details","expoApiV2ErrorServerStack","stack","expoApiV2ErrorMetadata","metadata","expoApiV2RequestId","requestId","toString","env","EXPO_DEBUG","json","data","JSON","stringify","fetchFunction","expoApiBaseUrl","expoApiOrigin","URL","origin","fetchWithCredentials","url","options","Array","isArray","headers","resolvedHeaders","isExpoApiUrl","token","getAccessToken","authorization","getSession","sessionSecret","status","body","text","parse","errors","length","error","includes","isNetworkError","cause","disableNetwork","CommandError","fetchWithOffline","wrapFetchWithOffline","wrapFetchWithUserAgent","fetch","getExpoApiBaseUrl","fetchWithBaseUrl","wrapFetchWithBaseUrl","wrapFetchWithProgress","cacheDirectory","ttl","skipCache","EXPO_BETA","EXPO_NO_CACHE","FileSystemResponseCache","require","wrapFetchWithCache","path","join","getExpoHomeDirectory"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithBaseUrl.ts"],"sourcesContent":["import { URL } from 'url';\n\nimport { FetchLike } from './client.types';\n\n// const debug = require('debug')('expo:api:fetch:base') as typeof console.log;\n\n/**\n * Wrap a fetch function with support for a predefined base URL.\n * This implementation works like the browser fetch, applying the input to a prefix base URL.\n */\nexport function wrapFetchWithBaseUrl(fetch: FetchLike, baseUrl: string): FetchLike {\n // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.\n return (url, init) => {\n if (typeof url !== 'string') {\n throw new TypeError('Custom fetch function only accepts a string URL as the first parameter');\n }\n const parsed = new URL(url, baseUrl);\n if (init?.searchParams) {\n parsed.search = init.searchParams.toString();\n }\n return fetch(parsed.toString(), init);\n };\n}\n"],"names":["wrapFetchWithBaseUrl","fetch","baseUrl","url","init","TypeError","parsed","URL","searchParams","search","toString"],"mappings":";;;;+BAUgBA;;;eAAAA;;;;yBAVI;;;;;;AAUb,SAASA,qBAAqBC,KAAgB,EAAEC,OAAe;IACpE,mFAAmF;IACnF,OAAO,CAACC,KAAKC;QACX,IAAI,OAAOD,QAAQ,UAAU;YAC3B,MAAM,IAAIE,UAAU;QACtB;QACA,MAAMC,SAAS,IAAIC,CAAAA,MAAE,KAAC,CAACJ,KAAKD;QAC5B,IAAIE,wBAAAA,KAAMI,YAAY,EAAE;YACtBF,OAAOG,MAAM,GAAGL,KAAKI,YAAY,CAACE,QAAQ;QAC5C;QACA,OAAOT,MAAMK,OAAOI,QAAQ,IAAIN;IAClC;AACF"}
1
+ {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithBaseUrl.ts"],"sourcesContent":["import { URL } from 'url';\n\nimport type { FetchLike } from './client.types';\n\n// const debug = require('debug')('expo:api:fetch:base') as typeof console.log;\n\n/**\n * Wrap a fetch function with support for a predefined base URL.\n * This implementation works like the browser fetch, applying the input to a prefix base URL.\n */\nexport function wrapFetchWithBaseUrl(fetch: FetchLike, baseUrl: string): FetchLike {\n // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.\n return (url, init) => {\n if (typeof url !== 'string') {\n throw new TypeError('Custom fetch function only accepts a string URL as the first parameter');\n }\n const parsed = new URL(url, baseUrl);\n if (init?.searchParams) {\n parsed.search = init.searchParams.toString();\n }\n return fetch(parsed.toString(), init);\n };\n}\n"],"names":["wrapFetchWithBaseUrl","fetch","baseUrl","url","init","TypeError","parsed","URL","searchParams","search","toString"],"mappings":";;;;+BAUgBA;;;eAAAA;;;;yBAVI;;;;;;AAUb,SAASA,qBAAqBC,KAAgB,EAAEC,OAAe;IACpE,mFAAmF;IACnF,OAAO,CAACC,KAAKC;QACX,IAAI,OAAOD,QAAQ,UAAU;YAC3B,MAAM,IAAIE,UAAU;QACtB;QACA,MAAMC,SAAS,IAAIC,CAAAA,MAAE,KAAC,CAACJ,KAAKD;QAC5B,IAAIE,wBAAAA,KAAMI,YAAY,EAAE;YACtBF,OAAOG,MAAM,GAAGL,KAAKI,YAAY,CAACE,QAAQ;QAC5C;QACA,OAAOT,MAAMK,OAAOI,QAAQ,IAAIN;IAClC;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithOffline.ts"],"sourcesContent":["import { FetchLike } from './client.types';\nimport { env } from '../../utils/env';\n\nconst debug = require('debug')('expo:api:fetch:offline') as typeof console.log;\n\n/** Wrap fetch with support for `EXPO_OFFLINE` to disable network requests. */\nexport function wrapFetchWithOffline(fetchFunction: FetchLike): FetchLike {\n // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.\n return function fetchWithOffline(url, options = {}) {\n if (env.EXPO_OFFLINE) {\n debug('Skipping network request: ' + url);\n const abortController = new AbortController();\n abortController.abort();\n options.signal = abortController.signal;\n }\n return fetchFunction(url, options);\n };\n}\n"],"names":["wrapFetchWithOffline","debug","require","fetchFunction","fetchWithOffline","url","options","env","EXPO_OFFLINE","abortController","AbortController","abort","signal"],"mappings":";;;;+BAMgBA;;;eAAAA;;;qBALI;AAEpB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,SAASF,qBAAqBG,aAAwB;IAC3D,mFAAmF;IACnF,OAAO,SAASC,iBAAiBC,GAAG,EAAEC,UAAU,CAAC,CAAC;QAChD,IAAIC,QAAG,CAACC,YAAY,EAAE;YACpBP,MAAM,+BAA+BI;YACrC,MAAMI,kBAAkB,IAAIC;YAC5BD,gBAAgBE,KAAK;YACrBL,QAAQM,MAAM,GAAGH,gBAAgBG,MAAM;QACzC;QACA,OAAOT,cAAcE,KAAKC;IAC5B;AACF"}
1
+ {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithOffline.ts"],"sourcesContent":["import type { FetchLike } from './client.types';\nimport { env } from '../../utils/env';\n\nconst debug = require('debug')('expo:api:fetch:offline') as typeof console.log;\n\n/** Wrap fetch with support for `EXPO_OFFLINE` to disable network requests. */\nexport function wrapFetchWithOffline(fetchFunction: FetchLike): FetchLike {\n // NOTE(EvanBacon): DO NOT RETURN AN ASYNC WRAPPER. THIS BREAKS LOADING INDICATORS.\n return function fetchWithOffline(url, options = {}) {\n if (env.EXPO_OFFLINE) {\n debug('Skipping network request: ' + url);\n const abortController = new AbortController();\n abortController.abort();\n options.signal = abortController.signal;\n }\n return fetchFunction(url, options);\n };\n}\n"],"names":["wrapFetchWithOffline","debug","require","fetchFunction","fetchWithOffline","url","options","env","EXPO_OFFLINE","abortController","AbortController","abort","signal"],"mappings":";;;;+BAMgBA;;;eAAAA;;;qBALI;AAEpB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,SAASF,qBAAqBG,aAAwB;IAC3D,mFAAmF;IACnF,OAAO,SAASC,iBAAiBC,GAAG,EAAEC,UAAU,CAAC,CAAC;QAChD,IAAIC,QAAG,CAACC,YAAY,EAAE;YACpBP,MAAM,+BAA+BI;YACrC,MAAMI,kBAAkB,IAAIC;YAC5BD,gBAAgBE,KAAK;YACrBL,QAAQM,MAAM,GAAGH,gBAAgBG,MAAM;QACzC;QACA,OAAOT,cAAcE,KAAKC;IAC5B;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithProgress.ts"],"sourcesContent":["import { FetchLike } from './client.types';\nimport * as Log from '../../log';\n\nconst debug = require('debug')('expo:api:fetch:progress') as typeof console.log;\n\nexport function wrapFetchWithProgress(fetch: FetchLike): FetchLike {\n return function fetchWithProgress(url, init) {\n return fetch(url, init).then((response) => {\n const onProgress = init?.onProgress;\n\n // Abort if no `onProgress` is provided, the request failed, or there is no response body\n if (!onProgress || !response.ok || !response.body) {\n return response;\n }\n\n // Calculate total progress size\n const contentLength = response.headers.get('Content-Length');\n const progressTotal = Number(contentLength);\n\n debug(`Download size: %d`, progressTotal);\n\n // Abort if the `Content-Length` header is missing or invalid\n if (!progressTotal || isNaN(progressTotal) || progressTotal < 0) {\n Log.warn(\n 'Progress callback not supported for network request because \"Content-Length\" header missing or invalid in response from URL:',\n url.toString()\n );\n return response;\n }\n\n debug(`Starting progress animation for: %s`, url);\n\n // Initialize the progression variables\n let progressCurrent = 0;\n const progressUpdate = () => {\n const progress = progressCurrent / progressTotal || 0;\n onProgress({\n progress,\n total: progressTotal,\n loaded: progressCurrent,\n });\n };\n\n // Create a new body-wrapping stream that handles the progression methods\n const bodyReader = response.body.getReader();\n const bodyWithProgress = new ReadableStream({\n start(controller) {\n function next() {\n bodyReader.read().then(({ done, value }) => {\n // Close the controller once stream is done\n if (done) return controller.close();\n\n // Update the progression\n progressCurrent += Buffer.byteLength(value);\n progressUpdate();\n\n // Continue the stream, and read the next chunk\n controller.enqueue(value);\n next();\n });\n }\n\n progressUpdate();\n next();\n },\n });\n\n // Return the new response with the wrapped body stream\n return new Response(bodyWithProgress as any, response);\n });\n };\n}\n"],"names":["wrapFetchWithProgress","debug","require","fetch","fetchWithProgress","url","init","then","response","onProgress","ok","body","contentLength","headers","get","progressTotal","Number","isNaN","Log","warn","toString","progressCurrent","progressUpdate","progress","total","loaded","bodyReader","getReader","bodyWithProgress","ReadableStream","start","controller","next","read","done","value","close","Buffer","byteLength","enqueue","Response"],"mappings":";;;;+BAKgBA;;;eAAAA;;;6DAJK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,MAAMC,QAAQC,QAAQ,SAAS;AAExB,SAASF,sBAAsBG,KAAgB;IACpD,OAAO,SAASC,kBAAkBC,GAAG,EAAEC,IAAI;QACzC,OAAOH,MAAME,KAAKC,MAAMC,IAAI,CAAC,CAACC;YAC5B,MAAMC,aAAaH,wBAAAA,KAAMG,UAAU;YAEnC,yFAAyF;YACzF,IAAI,CAACA,cAAc,CAACD,SAASE,EAAE,IAAI,CAACF,SAASG,IAAI,EAAE;gBACjD,OAAOH;YACT;YAEA,gCAAgC;YAChC,MAAMI,gBAAgBJ,SAASK,OAAO,CAACC,GAAG,CAAC;YAC3C,MAAMC,gBAAgBC,OAAOJ;YAE7BX,MAAM,CAAC,iBAAiB,CAAC,EAAEc;YAE3B,6DAA6D;YAC7D,IAAI,CAACA,iBAAiBE,MAAMF,kBAAkBA,gBAAgB,GAAG;gBAC/DG,KAAIC,IAAI,CACN,gIACAd,IAAIe,QAAQ;gBAEd,OAAOZ;YACT;YAEAP,MAAM,CAAC,mCAAmC,CAAC,EAAEI;YAE7C,uCAAuC;YACvC,IAAIgB,kBAAkB;YACtB,MAAMC,iBAAiB;gBACrB,MAAMC,WAAWF,kBAAkBN,iBAAiB;gBACpDN,WAAW;oBACTc;oBACAC,OAAOT;oBACPU,QAAQJ;gBACV;YACF;YAEA,yEAAyE;YACzE,MAAMK,aAAalB,SAASG,IAAI,CAACgB,SAAS;YAC1C,MAAMC,mBAAmB,IAAIC,eAAe;gBAC1CC,OAAMC,UAAU;oBACd,SAASC;wBACPN,WAAWO,IAAI,GAAG1B,IAAI,CAAC,CAAC,EAAE2B,IAAI,EAAEC,KAAK,EAAE;4BACrC,2CAA2C;4BAC3C,IAAID,MAAM,OAAOH,WAAWK,KAAK;4BAEjC,yBAAyB;4BACzBf,mBAAmBgB,OAAOC,UAAU,CAACH;4BACrCb;4BAEA,+CAA+C;4BAC/CS,WAAWQ,OAAO,CAACJ;4BACnBH;wBACF;oBACF;oBAEAV;oBACAU;gBACF;YACF;YAEA,uDAAuD;YACvD,OAAO,IAAIQ,SAASZ,kBAAyBpB;QAC/C;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithProgress.ts"],"sourcesContent":["import type { FetchLike } from './client.types';\nimport * as Log from '../../log';\n\nconst debug = require('debug')('expo:api:fetch:progress') as typeof console.log;\n\nexport function wrapFetchWithProgress(fetch: FetchLike): FetchLike {\n return function fetchWithProgress(url, init) {\n return fetch(url, init).then((response) => {\n const onProgress = init?.onProgress;\n\n // Abort if no `onProgress` is provided, the request failed, or there is no response body\n if (!onProgress || !response.ok || !response.body) {\n return response;\n }\n\n // Calculate total progress size\n const contentLength = response.headers.get('Content-Length');\n const progressTotal = Number(contentLength);\n\n debug(`Download size: %d`, progressTotal);\n\n // Abort if the `Content-Length` header is missing or invalid\n if (!progressTotal || isNaN(progressTotal) || progressTotal < 0) {\n Log.warn(\n 'Progress callback not supported for network request because \"Content-Length\" header missing or invalid in response from URL:',\n url.toString()\n );\n return response;\n }\n\n debug(`Starting progress animation for: %s`, url);\n\n // Initialize the progression variables\n let progressCurrent = 0;\n const progressUpdate = () => {\n const progress = progressCurrent / progressTotal || 0;\n onProgress({\n progress,\n total: progressTotal,\n loaded: progressCurrent,\n });\n };\n\n // Create a new body-wrapping stream that handles the progression methods\n const bodyReader = response.body.getReader();\n const bodyWithProgress = new ReadableStream({\n start(controller) {\n function next() {\n bodyReader.read().then(({ done, value }) => {\n // Close the controller once stream is done\n if (done) return controller.close();\n\n // Update the progression\n progressCurrent += Buffer.byteLength(value);\n progressUpdate();\n\n // Continue the stream, and read the next chunk\n controller.enqueue(value);\n next();\n });\n }\n\n progressUpdate();\n next();\n },\n });\n\n // Return the new response with the wrapped body stream\n return new Response(bodyWithProgress as any, response);\n });\n };\n}\n"],"names":["wrapFetchWithProgress","debug","require","fetch","fetchWithProgress","url","init","then","response","onProgress","ok","body","contentLength","headers","get","progressTotal","Number","isNaN","Log","warn","toString","progressCurrent","progressUpdate","progress","total","loaded","bodyReader","getReader","bodyWithProgress","ReadableStream","start","controller","next","read","done","value","close","Buffer","byteLength","enqueue","Response"],"mappings":";;;;+BAKgBA;;;eAAAA;;;6DAJK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,MAAMC,QAAQC,QAAQ,SAAS;AAExB,SAASF,sBAAsBG,KAAgB;IACpD,OAAO,SAASC,kBAAkBC,GAAG,EAAEC,IAAI;QACzC,OAAOH,MAAME,KAAKC,MAAMC,IAAI,CAAC,CAACC;YAC5B,MAAMC,aAAaH,wBAAAA,KAAMG,UAAU;YAEnC,yFAAyF;YACzF,IAAI,CAACA,cAAc,CAACD,SAASE,EAAE,IAAI,CAACF,SAASG,IAAI,EAAE;gBACjD,OAAOH;YACT;YAEA,gCAAgC;YAChC,MAAMI,gBAAgBJ,SAASK,OAAO,CAACC,GAAG,CAAC;YAC3C,MAAMC,gBAAgBC,OAAOJ;YAE7BX,MAAM,CAAC,iBAAiB,CAAC,EAAEc;YAE3B,6DAA6D;YAC7D,IAAI,CAACA,iBAAiBE,MAAMF,kBAAkBA,gBAAgB,GAAG;gBAC/DG,KAAIC,IAAI,CACN,gIACAd,IAAIe,QAAQ;gBAEd,OAAOZ;YACT;YAEAP,MAAM,CAAC,mCAAmC,CAAC,EAAEI;YAE7C,uCAAuC;YACvC,IAAIgB,kBAAkB;YACtB,MAAMC,iBAAiB;gBACrB,MAAMC,WAAWF,kBAAkBN,iBAAiB;gBACpDN,WAAW;oBACTc;oBACAC,OAAOT;oBACPU,QAAQJ;gBACV;YACF;YAEA,yEAAyE;YACzE,MAAMK,aAAalB,SAASG,IAAI,CAACgB,SAAS;YAC1C,MAAMC,mBAAmB,IAAIC,eAAe;gBAC1CC,OAAMC,UAAU;oBACd,SAASC;wBACPN,WAAWO,IAAI,GAAG1B,IAAI,CAAC,CAAC,EAAE2B,IAAI,EAAEC,KAAK,EAAE;4BACrC,2CAA2C;4BAC3C,IAAID,MAAM,OAAOH,WAAWK,KAAK;4BAEjC,yBAAyB;4BACzBf,mBAAmBgB,OAAOC,UAAU,CAACH;4BACrCb;4BAEA,+CAA+C;4BAC/CS,WAAWQ,OAAO,CAACJ;4BACnBH;wBACF;oBACF;oBAEAV;oBACAU;gBACF;YACF;YAEA,uDAAuD;YACvD,OAAO,IAAIQ,SAASZ,kBAAyBpB;QAC/C;IACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithUserAgent.ts"],"sourcesContent":["import process from 'node:process';\n\nimport { FetchLike } from './client.types';\nimport { Headers } from '../../utils/fetch';\n\nexport function wrapFetchWithUserAgent(fetch: FetchLike): FetchLike {\n return (url, init = {}) => {\n const headers = new Headers(init.headers);\n // Version is added in the build script\n headers.append('User-Agent', `expo-cli/${process.env.__EXPO_VERSION}`);\n init.headers = headers;\n return fetch(url, init);\n };\n}\n"],"names":["wrapFetchWithUserAgent","fetch","url","init","headers","Headers","append","process","env","__EXPO_VERSION"],"mappings":";;;;+BAKgBA;;;eAAAA;;;;gEALI;;;;;;uBAGI;;;;;;AAEjB,SAASA,uBAAuBC,KAAgB;IACrD,OAAO,CAACC,KAAKC,OAAO,CAAC,CAAC;QACpB,MAAMC,UAAU,IAAIC,cAAO,CAACF,KAAKC,OAAO;QACxC,uCAAuC;QACvCA,QAAQE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAEC,sBAAO,CAACC,GAAG,CAACC,cAAc,EAAE;QACrEN,KAAKC,OAAO,GAAGA;QACf,OAAOH,MAAMC,KAAKC;IACpB;AACF"}
1
+ {"version":3,"sources":["../../../../src/api/rest/wrapFetchWithUserAgent.ts"],"sourcesContent":["import process from 'node:process';\n\nimport type { FetchLike } from './client.types';\nimport { Headers } from '../../utils/fetch';\n\nexport function wrapFetchWithUserAgent(fetch: FetchLike): FetchLike {\n return (url, init = {}) => {\n const headers = new Headers(init.headers);\n // Version is added in the build script\n headers.append('User-Agent', `expo-cli/${process.env.__EXPO_VERSION}`);\n init.headers = headers;\n return fetch(url, init);\n };\n}\n"],"names":["wrapFetchWithUserAgent","fetch","url","init","headers","Headers","append","process","env","__EXPO_VERSION"],"mappings":";;;;+BAKgBA;;;eAAAA;;;;gEALI;;;;;;uBAGI;;;;;;AAEjB,SAASA,uBAAuBC,KAAgB;IACrD,OAAO,CAACC,KAAKC,OAAO,CAAC,CAAC;QACpB,MAAMC,UAAU,IAAIC,cAAO,CAACF,KAAKC,OAAO;QACxC,uCAAuC;QACvCA,QAAQE,MAAM,CAAC,cAAc,CAAC,SAAS,EAAEC,sBAAO,CAACC,GAAG,CAACC,cAAc,EAAE;QACrEN,KAAKC,OAAO,GAAGA;QACf,OAAOH,MAAMC,KAAKC;IACpB;AACF"}
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- closeDevelopmentSessionAsync: function() {
12
+ get closeDevelopmentSessionAsync () {
13
13
  return closeDevelopmentSessionAsync;
14
14
  },
15
- createSessionInfo: function() {
15
+ get createSessionInfo () {
16
16
  return createSessionInfo;
17
17
  },
18
- updateDevelopmentSessionAsync: function() {
18
+ get updateDevelopmentSessionAsync () {
19
19
  return updateDevelopmentSessionAsync;
20
20
  }
21
21
  });
@@ -58,12 +58,13 @@ function createSessionInfo({ exp, runtime, url }) {
58
58
  }
59
59
  };
60
60
  }
61
- async function updateDevelopmentSessionAsync({ deviceIds, exp, runtime, url }) {
61
+ async function updateDevelopmentSessionAsync({ deviceIds, exp, runtime, url, signal }) {
62
62
  const searchParams = new (_url()).URLSearchParams();
63
63
  deviceIds.forEach((id)=>{
64
64
  searchParams.append('deviceId', id);
65
65
  });
66
66
  const results = await (0, _client.fetchAsync)('development-sessions/notify-alive', {
67
+ signal,
67
68
  searchParams,
68
69
  method: 'POST',
69
70
  body: JSON.stringify({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/updateDevelopmentSession.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport os from 'os';\nimport { URLSearchParams } from 'url';\n\nimport { fetchAsync } from './rest/client';\nimport { CommandError } from '../utils/errors';\n\n/** Create the expected session info. */\nexport function createSessionInfo({\n exp,\n runtime,\n url,\n}: {\n exp: Pick<ExpoConfig, 'name' | 'description' | 'slug' | 'primaryColor'>;\n runtime: 'native' | 'web';\n url: string;\n}) {\n return {\n session: {\n description: `${exp.name} on ${os.hostname()}`,\n hostname: os.hostname(),\n platform: runtime,\n config: {\n // TODO: if icons are specified, upload a url for them too so people can distinguish\n description: exp.description,\n name: exp.name,\n slug: exp.slug,\n primaryColor: exp.primaryColor,\n },\n url,\n source: 'desktop',\n },\n };\n}\n\n/** Send a request to Expo API to keep the 'development session' alive for the provided devices. */\nexport async function updateDevelopmentSessionAsync({\n deviceIds,\n exp,\n runtime,\n url,\n}: {\n deviceIds: string[];\n exp: Pick<ExpoConfig, 'name' | 'description' | 'slug' | 'primaryColor'>;\n runtime: 'native' | 'web';\n url: string;\n}) {\n const searchParams = new URLSearchParams();\n deviceIds.forEach((id) => {\n searchParams.append('deviceId', id);\n });\n\n const results = await fetchAsync('development-sessions/notify-alive', {\n searchParams,\n method: 'POST',\n body: JSON.stringify({\n data: createSessionInfo({ exp, runtime, url }),\n }),\n });\n\n if (!results.ok) {\n throw new CommandError(\n 'API',\n `Unexpected response when updating the development session on Expo servers: ${results.statusText}.`\n );\n }\n}\n\n/** Send a request to Expo API to close the 'development session' for the provided devices. */\nexport async function closeDevelopmentSessionAsync({\n deviceIds,\n url,\n}: {\n deviceIds: string[];\n url: string;\n}) {\n const searchParams = new URLSearchParams();\n deviceIds.forEach((id) => {\n searchParams.append('deviceId', id);\n });\n\n const results = await fetchAsync('development-sessions/notify-close', {\n searchParams,\n method: 'POST',\n body: JSON.stringify({\n session: { url },\n }),\n });\n\n if (!results.ok) {\n throw new CommandError(\n 'API',\n `Unexpected response when closing the development session on Expo servers: ${results.statusText}.`\n );\n }\n}\n"],"names":["closeDevelopmentSessionAsync","createSessionInfo","updateDevelopmentSessionAsync","exp","runtime","url","session","description","name","os","hostname","platform","config","slug","primaryColor","source","deviceIds","searchParams","URLSearchParams","forEach","id","append","results","fetchAsync","method","body","JSON","stringify","data","ok","CommandError","statusText"],"mappings":";;;;;;;;;;;IAqEsBA,4BAA4B;eAA5BA;;IA7DNC,iBAAiB;eAAjBA;;IA4BMC,6BAA6B;eAA7BA;;;;gEAnCP;;;;;;;yBACiB;;;;;;wBAEL;wBACE;;;;;;AAGtB,SAASD,kBAAkB,EAChCE,GAAG,EACHC,OAAO,EACPC,GAAG,EAKJ;IACC,OAAO;QACLC,SAAS;YACPC,aAAa,GAAGJ,IAAIK,IAAI,CAAC,IAAI,EAAEC,aAAE,CAACC,QAAQ,IAAI;YAC9CA,UAAUD,aAAE,CAACC,QAAQ;YACrBC,UAAUP;YACVQ,QAAQ;gBACN,oFAAoF;gBACpFL,aAAaJ,IAAII,WAAW;gBAC5BC,MAAML,IAAIK,IAAI;gBACdK,MAAMV,IAAIU,IAAI;gBACdC,cAAcX,IAAIW,YAAY;YAChC;YACAT;YACAU,QAAQ;QACV;IACF;AACF;AAGO,eAAeb,8BAA8B,EAClDc,SAAS,EACTb,GAAG,EACHC,OAAO,EACPC,GAAG,EAMJ;IACC,MAAMY,eAAe,IAAIC,CAAAA,MAAc,iBAAC;IACxCF,UAAUG,OAAO,CAAC,CAACC;QACjBH,aAAaI,MAAM,CAAC,YAAYD;IAClC;IAEA,MAAME,UAAU,MAAMC,IAAAA,kBAAU,EAAC,qCAAqC;QACpEN;QACAO,QAAQ;QACRC,MAAMC,KAAKC,SAAS,CAAC;YACnBC,MAAM3B,kBAAkB;gBAAEE;gBAAKC;gBAASC;YAAI;QAC9C;IACF;IAEA,IAAI,CAACiB,QAAQO,EAAE,EAAE;QACf,MAAM,IAAIC,oBAAY,CACpB,OACA,CAAC,2EAA2E,EAAER,QAAQS,UAAU,CAAC,CAAC,CAAC;IAEvG;AACF;AAGO,eAAe/B,6BAA6B,EACjDgB,SAAS,EACTX,GAAG,EAIJ;IACC,MAAMY,eAAe,IAAIC,CAAAA,MAAc,iBAAC;IACxCF,UAAUG,OAAO,CAAC,CAACC;QACjBH,aAAaI,MAAM,CAAC,YAAYD;IAClC;IAEA,MAAME,UAAU,MAAMC,IAAAA,kBAAU,EAAC,qCAAqC;QACpEN;QACAO,QAAQ;QACRC,MAAMC,KAAKC,SAAS,CAAC;YACnBrB,SAAS;gBAAED;YAAI;QACjB;IACF;IAEA,IAAI,CAACiB,QAAQO,EAAE,EAAE;QACf,MAAM,IAAIC,oBAAY,CACpB,OACA,CAAC,0EAA0E,EAAER,QAAQS,UAAU,CAAC,CAAC,CAAC;IAEtG;AACF"}
1
+ {"version":3,"sources":["../../../src/api/updateDevelopmentSession.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport os from 'os';\nimport { URLSearchParams } from 'url';\n\nimport { fetchAsync } from './rest/client';\nimport { CommandError } from '../utils/errors';\n\n/** Create the expected session info. */\nexport function createSessionInfo({\n exp,\n runtime,\n url,\n}: {\n exp: Pick<ExpoConfig, 'name' | 'description' | 'slug' | 'primaryColor'>;\n runtime: 'native' | 'web';\n url: string;\n}) {\n return {\n session: {\n description: `${exp.name} on ${os.hostname()}`,\n hostname: os.hostname(),\n platform: runtime,\n config: {\n // TODO: if icons are specified, upload a url for them too so people can distinguish\n description: exp.description,\n name: exp.name,\n slug: exp.slug,\n primaryColor: exp.primaryColor,\n },\n url,\n source: 'desktop',\n },\n };\n}\n\n/** Send a request to Expo API to keep the 'development session' alive for the provided devices. */\nexport async function updateDevelopmentSessionAsync({\n deviceIds,\n exp,\n runtime,\n url,\n signal,\n}: {\n deviceIds: string[];\n exp: Pick<ExpoConfig, 'name' | 'description' | 'slug' | 'primaryColor'>;\n runtime: 'native' | 'web';\n url: string;\n signal?: AbortSignal;\n}) {\n const searchParams = new URLSearchParams();\n deviceIds.forEach((id) => {\n searchParams.append('deviceId', id);\n });\n\n const results = await fetchAsync('development-sessions/notify-alive', {\n signal,\n searchParams,\n method: 'POST',\n body: JSON.stringify({\n data: createSessionInfo({ exp, runtime, url }),\n }),\n });\n\n if (!results.ok) {\n throw new CommandError(\n 'API',\n `Unexpected response when updating the development session on Expo servers: ${results.statusText}.`\n );\n }\n}\n\n/** Send a request to Expo API to close the 'development session' for the provided devices. */\nexport async function closeDevelopmentSessionAsync({\n deviceIds,\n url,\n}: {\n deviceIds: string[];\n url: string;\n}) {\n const searchParams = new URLSearchParams();\n deviceIds.forEach((id) => {\n searchParams.append('deviceId', id);\n });\n\n const results = await fetchAsync('development-sessions/notify-close', {\n searchParams,\n method: 'POST',\n body: JSON.stringify({\n session: { url },\n }),\n });\n\n if (!results.ok) {\n throw new CommandError(\n 'API',\n `Unexpected response when closing the development session on Expo servers: ${results.statusText}.`\n );\n }\n}\n"],"names":["closeDevelopmentSessionAsync","createSessionInfo","updateDevelopmentSessionAsync","exp","runtime","url","session","description","name","os","hostname","platform","config","slug","primaryColor","source","deviceIds","signal","searchParams","URLSearchParams","forEach","id","append","results","fetchAsync","method","body","JSON","stringify","data","ok","CommandError","statusText"],"mappings":";;;;;;;;;;;QAwEsBA;eAAAA;;QAhENC;eAAAA;;QA4BMC;eAAAA;;;;gEAnCP;;;;;;;yBACiB;;;;;;wBAEL;wBACE;;;;;;AAGtB,SAASD,kBAAkB,EAChCE,GAAG,EACHC,OAAO,EACPC,GAAG,EAKJ;IACC,OAAO;QACLC,SAAS;YACPC,aAAa,GAAGJ,IAAIK,IAAI,CAAC,IAAI,EAAEC,aAAE,CAACC,QAAQ,IAAI;YAC9CA,UAAUD,aAAE,CAACC,QAAQ;YACrBC,UAAUP;YACVQ,QAAQ;gBACN,oFAAoF;gBACpFL,aAAaJ,IAAII,WAAW;gBAC5BC,MAAML,IAAIK,IAAI;gBACdK,MAAMV,IAAIU,IAAI;gBACdC,cAAcX,IAAIW,YAAY;YAChC;YACAT;YACAU,QAAQ;QACV;IACF;AACF;AAGO,eAAeb,8BAA8B,EAClDc,SAAS,EACTb,GAAG,EACHC,OAAO,EACPC,GAAG,EACHY,MAAM,EAOP;IACC,MAAMC,eAAe,IAAIC,CAAAA,MAAc,iBAAC;IACxCH,UAAUI,OAAO,CAAC,CAACC;QACjBH,aAAaI,MAAM,CAAC,YAAYD;IAClC;IAEA,MAAME,UAAU,MAAMC,IAAAA,kBAAU,EAAC,qCAAqC;QACpEP;QACAC;QACAO,QAAQ;QACRC,MAAMC,KAAKC,SAAS,CAAC;YACnBC,MAAM5B,kBAAkB;gBAAEE;gBAAKC;gBAASC;YAAI;QAC9C;IACF;IAEA,IAAI,CAACkB,QAAQO,EAAE,EAAE;QACf,MAAM,IAAIC,oBAAY,CACpB,OACA,CAAC,2EAA2E,EAAER,QAAQS,UAAU,CAAC,CAAC,CAAC;IAEvG;AACF;AAGO,eAAehC,6BAA6B,EACjDgB,SAAS,EACTX,GAAG,EAIJ;IACC,MAAMa,eAAe,IAAIC,CAAAA,MAAc,iBAAC;IACxCH,UAAUI,OAAO,CAAC,CAACC;QACjBH,aAAaI,MAAM,CAAC,YAAYD;IAClC;IAEA,MAAME,UAAU,MAAMC,IAAAA,kBAAU,EAAC,qCAAqC;QACpEN;QACAO,QAAQ;QACRC,MAAMC,KAAKC,SAAS,CAAC;YACnBtB,SAAS;gBAAED;YAAI;QACjB;IACF;IAEA,IAAI,CAACkB,QAAQO,EAAE,EAAE;QACf,MAAM,IAAIC,oBAAY,CACpB,OACA,CAAC,0EAA0E,EAAER,QAAQS,UAAU,CAAC,CAAC,CAAC;IAEtG;AACF"}
@@ -5,41 +5,48 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- getAccessToken: function() {
12
+ get getAccessToken () {
13
13
  return getAccessToken;
14
14
  },
15
- getAnonymousId: function() {
15
+ get getAnonymousId () {
16
16
  return getAnonymousId;
17
17
  },
18
- getAnonymousIdAsync: function() {
18
+ get getAnonymousIdAsync () {
19
19
  return getAnonymousIdAsync;
20
20
  },
21
- getExpoHomeDirectory: function() {
21
+ get getExpoHomeDirectory () {
22
22
  return getExpoHomeDirectory;
23
23
  },
24
- getSession: function() {
24
+ get getSession () {
25
25
  return getSession;
26
26
  },
27
- getSettings: function() {
27
+ get getSettings () {
28
28
  return getSettings;
29
29
  },
30
- getSettingsDirectory: function() {
30
+ get getSettingsDirectory () {
31
31
  return getSettingsDirectory;
32
32
  },
33
- getSettingsFilePath: function() {
33
+ get getSettingsFilePath () {
34
34
  return getSettingsFilePath;
35
35
  },
36
- hasCredentials: function() {
36
+ get hasCredentials () {
37
37
  return hasCredentials;
38
38
  },
39
- setSessionAsync: function() {
39
+ get setSessionAsync () {
40
40
  return setSessionAsync;
41
41
  }
42
42
  });
43
+ function _env() {
44
+ const data = require("@expo/env");
45
+ _env = function() {
46
+ return data;
47
+ };
48
+ return data;
49
+ }
43
50
  function _jsonfile() {
44
51
  const data = /*#__PURE__*/ _interop_require_default(require("@expo/json-file"));
45
52
  _jsonfile = function() {
@@ -123,8 +130,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
123
130
  }
124
131
  function getExpoHomeDirectory() {
125
132
  const home = (0, _os().homedir)();
126
- if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) {
127
- return process.env.__UNSAFE_EXPO_HOME_DIRECTORY;
133
+ // Read from the pre-dotenv env — this redirects the directory used for the
134
+ // auth-token cache and other settings. The `__UNSAFE_` prefix marks it as a
135
+ // shell-only escape hatch; a project `.env` setting it would hijack credentials.
136
+ const unsafeHome = (0, _env().getOriginalEnvValue)('__UNSAFE_EXPO_HOME_DIRECTORY');
137
+ if (unsafeHome) {
138
+ return unsafeHome;
128
139
  } else if ((0, _getenv().boolish)('EXPO_STAGING', false)) {
129
140
  return _path().join(home, '.expo-staging');
130
141
  } else if ((0, _getenv().boolish)('EXPO_LOCAL', false)) {
@@ -138,9 +149,12 @@ function getSettingsDirectory() {
138
149
  function getSettingsFilePath() {
139
150
  return _path().join(getExpoHomeDirectory(), 'state.json');
140
151
  }
152
+ // state.json holds the auth session secret, so restrict it to the owner only.
153
+ const SETTINGS_FILE_MODE = 384;
141
154
  function getSettings() {
142
155
  return new (_jsonfile()).default(getSettingsFilePath(), {
143
156
  ensureDir: true,
157
+ mode: SETTINGS_FILE_MODE,
144
158
  jsonParseErrorDefault: {},
145
159
  // This will ensure that an error isn't thrown if the file doesn't exist.
146
160
  cantReadFileDefault: {}
@@ -154,8 +168,7 @@ function getSession() {
154
168
  }
155
169
  async function setSessionAsync(sessionData) {
156
170
  await getSettings().setAsync('auth', sessionData, {
157
- default: {},
158
- ensureDir: true
171
+ default: {}
159
172
  });
160
173
  }
161
174
  function hasCredentials() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/user/UserSettings.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport crypto from 'crypto';\nimport { boolish } from 'getenv';\nimport { homedir } from 'os';\nimport * as path from 'path';\n\ntype SessionData = {\n sessionSecret?: string;\n userId?: string;\n username?: string;\n currentConnection?: 'Username-Password-Authentication' | 'Browser-Flow-Authentication';\n};\n\nexport type UserSettingsData = {\n auth?: SessionData | null;\n ignoreBundledBinaries?: string[];\n PATH?: string;\n /** Last development code signing ID used for `npx expo run:ios`. */\n developmentCodeSigningId?: string;\n /** Unique user ID which is generated anonymously and can be cleared locally. */\n uuid?: string;\n};\n\n// The ~/.expo directory is used to store authentication sessions,\n// which are shared between EAS CLI and Expo CLI.\nexport function getExpoHomeDirectory() {\n const home = homedir();\n\n if (process.env.__UNSAFE_EXPO_HOME_DIRECTORY) {\n return process.env.__UNSAFE_EXPO_HOME_DIRECTORY;\n } else if (boolish('EXPO_STAGING', false)) {\n return path.join(home, '.expo-staging');\n } else if (boolish('EXPO_LOCAL', false)) {\n return path.join(home, '.expo-local');\n }\n return path.join(home, '.expo');\n}\n\n/** Return the user cache directory. */\nexport function getSettingsDirectory() {\n return getExpoHomeDirectory();\n}\n\n/** Return the file path of the settings file */\nexport function getSettingsFilePath(): string {\n return path.join(getExpoHomeDirectory(), 'state.json');\n}\n\n/** Get a new JsonFile instance pointed towards the settings file */\nexport function getSettings(): JsonFile<UserSettingsData> {\n return new JsonFile<UserSettingsData>(getSettingsFilePath(), {\n ensureDir: true,\n jsonParseErrorDefault: {},\n // This will ensure that an error isn't thrown if the file doesn't exist.\n cantReadFileDefault: {},\n });\n}\n\nexport function getAccessToken(): string | null {\n return process.env.EXPO_TOKEN ?? null;\n}\n\nexport function getSession() {\n return getSettings().get('auth', null);\n}\n\nexport async function setSessionAsync(sessionData?: SessionData) {\n await getSettings().setAsync('auth', sessionData, {\n default: {},\n ensureDir: true,\n });\n}\n\n/**\n * Check if there are credentials available, without fetching the user information.\n * This can be used as a faster check to see if users are authenticated.\n * Note, this isn't checking the validity of the credentials.\n */\nexport function hasCredentials() {\n return !!getAccessToken() || !!getSession();\n}\n\n/**\n * Get an anonymous and randomly generated identifier.\n * This is used to group telemetry event by unknown actor,\n * and cannot be used to identify a single user.\n */\nexport async function getAnonymousIdAsync(): Promise<string> {\n const settings = getSettings();\n let id = await settings.getAsync('uuid', null);\n\n if (!id) {\n id = crypto.randomUUID();\n await settings.setAsync('uuid', id);\n }\n\n return id;\n}\n\n/**\n * Get an anonymous and randomly generated identifier.\n * This is used to group telemetry event by unknown actor,\n * and cannot be used to identify a single user.\n */\nexport function getAnonymousId(): string {\n const settings = getSettings();\n let id = settings.get('uuid', null);\n\n if (!id) {\n id = crypto.randomUUID();\n settings.set('uuid', id);\n }\n\n return id;\n}\n"],"names":["getAccessToken","getAnonymousId","getAnonymousIdAsync","getExpoHomeDirectory","getSession","getSettings","getSettingsDirectory","getSettingsFilePath","hasCredentials","setSessionAsync","home","homedir","process","env","__UNSAFE_EXPO_HOME_DIRECTORY","boolish","path","join","JsonFile","ensureDir","jsonParseErrorDefault","cantReadFileDefault","EXPO_TOKEN","get","sessionData","setAsync","default","settings","id","getAsync","crypto","randomUUID","set"],"mappings":";;;;;;;;;;;IA0DgBA,cAAc;eAAdA;;IA8CAC,cAAc;eAAdA;;IAjBMC,mBAAmB;eAAnBA;;IA9DNC,oBAAoB;eAApBA;;IAqCAC,UAAU;eAAVA;;IAbAC,WAAW;eAAXA;;IAVAC,oBAAoB;eAApBA;;IAKAC,mBAAmB;eAAnBA;;IAkCAC,cAAc;eAAdA;;IAZMC,eAAe;eAAfA;;;;gEAlED;;;;;;;gEACF;;;;;;;yBACK;;;;;;;yBACA;;;;;;;iEACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBf,SAASN;IACd,MAAMO,OAAOC,IAAAA,aAAO;IAEpB,IAAIC,QAAQC,GAAG,CAACC,4BAA4B,EAAE;QAC5C,OAAOF,QAAQC,GAAG,CAACC,4BAA4B;IACjD,OAAO,IAAIC,IAAAA,iBAAO,EAAC,gBAAgB,QAAQ;QACzC,OAAOC,QAAKC,IAAI,CAACP,MAAM;IACzB,OAAO,IAAIK,IAAAA,iBAAO,EAAC,cAAc,QAAQ;QACvC,OAAOC,QAAKC,IAAI,CAACP,MAAM;IACzB;IACA,OAAOM,QAAKC,IAAI,CAACP,MAAM;AACzB;AAGO,SAASJ;IACd,OAAOH;AACT;AAGO,SAASI;IACd,OAAOS,QAAKC,IAAI,CAACd,wBAAwB;AAC3C;AAGO,SAASE;IACd,OAAO,IAAIa,CAAAA,WAAO,SAAC,CAAmBX,uBAAuB;QAC3DY,WAAW;QACXC,uBAAuB,CAAC;QACxB,yEAAyE;QACzEC,qBAAqB,CAAC;IACxB;AACF;AAEO,SAASrB;IACd,OAAOY,QAAQC,GAAG,CAACS,UAAU,IAAI;AACnC;AAEO,SAASlB;IACd,OAAOC,cAAckB,GAAG,CAAC,QAAQ;AACnC;AAEO,eAAed,gBAAgBe,WAAyB;IAC7D,MAAMnB,cAAcoB,QAAQ,CAAC,QAAQD,aAAa;QAChDE,SAAS,CAAC;QACVP,WAAW;IACb;AACF;AAOO,SAASX;IACd,OAAO,CAAC,CAACR,oBAAoB,CAAC,CAACI;AACjC;AAOO,eAAeF;IACpB,MAAMyB,WAAWtB;IACjB,IAAIuB,KAAK,MAAMD,SAASE,QAAQ,CAAC,QAAQ;IAEzC,IAAI,CAACD,IAAI;QACPA,KAAKE,iBAAM,CAACC,UAAU;QACtB,MAAMJ,SAASF,QAAQ,CAAC,QAAQG;IAClC;IAEA,OAAOA;AACT;AAOO,SAAS3B;IACd,MAAM0B,WAAWtB;IACjB,IAAIuB,KAAKD,SAASJ,GAAG,CAAC,QAAQ;IAE9B,IAAI,CAACK,IAAI;QACPA,KAAKE,iBAAM,CAACC,UAAU;QACtBJ,SAASK,GAAG,CAAC,QAAQJ;IACvB;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["../../../../src/api/user/UserSettings.ts"],"sourcesContent":["import { getOriginalEnvValue } from '@expo/env';\nimport JsonFile from '@expo/json-file';\nimport crypto from 'crypto';\nimport { boolish } from 'getenv';\nimport { homedir } from 'os';\nimport * as path from 'path';\n\ntype SessionData = {\n sessionSecret?: string;\n userId?: string;\n username?: string;\n currentConnection?: 'Username-Password-Authentication' | 'Browser-Flow-Authentication';\n};\n\nexport type UserSettingsData = {\n auth?: SessionData | null;\n ignoreBundledBinaries?: string[];\n PATH?: string;\n /** Last development code signing ID used for `npx expo run:ios`. */\n developmentCodeSigningId?: string;\n /** Unique user ID which is generated anonymously and can be cleared locally. */\n uuid?: string;\n};\n\n// The ~/.expo directory is used to store authentication sessions,\n// which are shared between EAS CLI and Expo CLI.\nexport function getExpoHomeDirectory() {\n const home = homedir();\n\n // Read from the pre-dotenv env — this redirects the directory used for the\n // auth-token cache and other settings. The `__UNSAFE_` prefix marks it as a\n // shell-only escape hatch; a project `.env` setting it would hijack credentials.\n const unsafeHome = getOriginalEnvValue('__UNSAFE_EXPO_HOME_DIRECTORY');\n if (unsafeHome) {\n return unsafeHome;\n } else if (boolish('EXPO_STAGING', false)) {\n return path.join(home, '.expo-staging');\n } else if (boolish('EXPO_LOCAL', false)) {\n return path.join(home, '.expo-local');\n }\n return path.join(home, '.expo');\n}\n\n/** Return the user cache directory. */\nexport function getSettingsDirectory() {\n return getExpoHomeDirectory();\n}\n\n/** Return the file path of the settings file */\nexport function getSettingsFilePath(): string {\n return path.join(getExpoHomeDirectory(), 'state.json');\n}\n\n// state.json holds the auth session secret, so restrict it to the owner only.\nconst SETTINGS_FILE_MODE = 0o600;\n\n/** Get a new JsonFile instance pointed towards the settings file */\nexport function getSettings(): JsonFile<UserSettingsData> {\n return new JsonFile<UserSettingsData>(getSettingsFilePath(), {\n ensureDir: true,\n mode: SETTINGS_FILE_MODE,\n jsonParseErrorDefault: {},\n // This will ensure that an error isn't thrown if the file doesn't exist.\n cantReadFileDefault: {},\n });\n}\n\nexport function getAccessToken(): string | null {\n return process.env.EXPO_TOKEN ?? null;\n}\n\nexport function getSession() {\n return getSettings().get('auth', null);\n}\n\nexport async function setSessionAsync(sessionData?: SessionData) {\n await getSettings().setAsync('auth', sessionData, { default: {} });\n}\n\n/**\n * Check if there are credentials available, without fetching the user information.\n * This can be used as a faster check to see if users are authenticated.\n * Note, this isn't checking the validity of the credentials.\n */\nexport function hasCredentials() {\n return !!getAccessToken() || !!getSession();\n}\n\n/**\n * Get an anonymous and randomly generated identifier.\n * This is used to group telemetry event by unknown actor,\n * and cannot be used to identify a single user.\n */\nexport async function getAnonymousIdAsync(): Promise<string> {\n const settings = getSettings();\n let id = await settings.getAsync('uuid', null);\n\n if (!id) {\n id = crypto.randomUUID();\n await settings.setAsync('uuid', id);\n }\n\n return id;\n}\n\n/**\n * Get an anonymous and randomly generated identifier.\n * This is used to group telemetry event by unknown actor,\n * and cannot be used to identify a single user.\n */\nexport function getAnonymousId(): string {\n const settings = getSettings();\n let id = settings.get('uuid', null);\n\n if (!id) {\n id = crypto.randomUUID();\n settings.set('uuid', id);\n }\n\n return id;\n}\n"],"names":["getAccessToken","getAnonymousId","getAnonymousIdAsync","getExpoHomeDirectory","getSession","getSettings","getSettingsDirectory","getSettingsFilePath","hasCredentials","setSessionAsync","home","homedir","unsafeHome","getOriginalEnvValue","boolish","path","join","SETTINGS_FILE_MODE","JsonFile","ensureDir","mode","jsonParseErrorDefault","cantReadFileDefault","process","env","EXPO_TOKEN","get","sessionData","setAsync","default","settings","id","getAsync","crypto","randomUUID","set"],"mappings":";;;;;;;;;;;QAmEgBA;eAAAA;;QA2CAC;eAAAA;;QAjBMC;eAAAA;;QAnENC;eAAAA;;QA6CAC;eAAAA;;QAdAC;eAAAA;;QAbAC;eAAAA;;QAKAC;eAAAA;;QAmCAC;eAAAA;;QATMC;eAAAA;;;;yBA3Ec;;;;;;;gEACf;;;;;;;gEACF;;;;;;;yBACK;;;;;;;yBACA;;;;;;;iEACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBf,SAASN;IACd,MAAMO,OAAOC,IAAAA,aAAO;IAEpB,2EAA2E;IAC3E,4EAA4E;IAC5E,iFAAiF;IACjF,MAAMC,aAAaC,IAAAA,0BAAmB,EAAC;IACvC,IAAID,YAAY;QACd,OAAOA;IACT,OAAO,IAAIE,IAAAA,iBAAO,EAAC,gBAAgB,QAAQ;QACzC,OAAOC,QAAKC,IAAI,CAACN,MAAM;IACzB,OAAO,IAAII,IAAAA,iBAAO,EAAC,cAAc,QAAQ;QACvC,OAAOC,QAAKC,IAAI,CAACN,MAAM;IACzB;IACA,OAAOK,QAAKC,IAAI,CAACN,MAAM;AACzB;AAGO,SAASJ;IACd,OAAOH;AACT;AAGO,SAASI;IACd,OAAOQ,QAAKC,IAAI,CAACb,wBAAwB;AAC3C;AAEA,8EAA8E;AAC9E,MAAMc,qBAAqB;AAGpB,SAASZ;IACd,OAAO,IAAIa,CAAAA,WAAO,SAAC,CAAmBX,uBAAuB;QAC3DY,WAAW;QACXC,MAAMH;QACNI,uBAAuB,CAAC;QACxB,yEAAyE;QACzEC,qBAAqB,CAAC;IACxB;AACF;AAEO,SAAStB;IACd,OAAOuB,QAAQC,GAAG,CAACC,UAAU,IAAI;AACnC;AAEO,SAASrB;IACd,OAAOC,cAAcqB,GAAG,CAAC,QAAQ;AACnC;AAEO,eAAejB,gBAAgBkB,WAAyB;IAC7D,MAAMtB,cAAcuB,QAAQ,CAAC,QAAQD,aAAa;QAAEE,SAAS,CAAC;IAAE;AAClE;AAOO,SAASrB;IACd,OAAO,CAAC,CAACR,oBAAoB,CAAC,CAACI;AACjC;AAOO,eAAeF;IACpB,MAAM4B,WAAWzB;IACjB,IAAI0B,KAAK,MAAMD,SAASE,QAAQ,CAAC,QAAQ;IAEzC,IAAI,CAACD,IAAI;QACPA,KAAKE,iBAAM,CAACC,UAAU;QACtB,MAAMJ,SAASF,QAAQ,CAAC,QAAQG;IAClC;IAEA,OAAOA;AACT;AAOO,SAAS9B;IACd,MAAM6B,WAAWzB;IACjB,IAAI0B,KAAKD,SAASJ,GAAG,CAAC,QAAQ;IAE9B,IAAI,CAACK,IAAI;QACPA,KAAKE,iBAAM,CAACC,UAAU;QACtBJ,SAASK,GAAG,CAAC,QAAQJ;IACvB;IAEA,OAAOA;AACT"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- showLoginPromptAsync: function() {
12
+ get showLoginPromptAsync () {
13
13
  return showLoginPromptAsync;
14
14
  },
15
- tryGetUserAsync: function() {
15
+ get tryGetUserAsync () {
16
16
  return tryGetUserAsync;
17
17
  }
18
18
  });
@@ -35,6 +35,7 @@ const _user = require("./user");
35
35
  const _log = /*#__PURE__*/ _interop_require_wildcard(require("../../log"));
36
36
  const _env = require("../../utils/env");
37
37
  const _errors = require("../../utils/errors");
38
+ const _interactive = require("../../utils/interactive");
38
39
  const _link = require("../../utils/link");
39
40
  const _prompts = /*#__PURE__*/ _interop_require_wildcard(require("../../utils/prompts"));
40
41
  const _client = require("../rest/client");
@@ -142,6 +143,12 @@ async function tryGetUserAsync() {
142
143
  if (user) {
143
144
  return user;
144
145
  }
146
+ // In non-interactive environments (CI, non-TTY) we can't prompt for login. Proceed
147
+ // anonymously so callers like the Expo Go manifest code-signing flow degrade
148
+ // gracefully instead of bubbling a NON_INTERACTIVE error to the client.
149
+ if (!(0, _interactive.isInteractive)()) {
150
+ return null;
151
+ }
145
152
  const choices = [
146
153
  {
147
154
  title: 'Log in',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/api/user/actions.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { retryUsernamePasswordAuthWithOTPAsync } from './otp';\nimport { Actor, getUserAsync, loginAsync, browserLoginAsync } from './user';\nimport * as Log from '../../log';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { learnMore } from '../../utils/link';\nimport promptAsync, { confirmAsync, Question, selectAsync } from '../../utils/prompts';\nimport { ApiV2Error } from '../rest/client';\n\n/** Show login prompt while prompting for missing credentials. */\nexport async function showLoginPromptAsync({\n printNewLine = false,\n otp,\n ...options\n}: {\n printNewLine?: boolean;\n username?: string;\n password?: string;\n otp?: string;\n sso?: boolean | undefined;\n browser?: boolean | undefined;\n} = {}): Promise<void> {\n if (env.EXPO_OFFLINE) {\n throw new CommandError('OFFLINE', 'Cannot authenticate in offline-mode');\n }\n const hasCredentials = options.username && options.password;\n const sso = options.sso;\n const browser = options.browser;\n\n if (printNewLine) {\n Log.log();\n }\n\n if (sso || browser) {\n await browserLoginAsync({ sso: !!sso });\n return;\n }\n\n Log.log(\n hasCredentials\n ? `Logging in to EAS with email or username (exit and run 'npx expo login --help' for other login options)`\n : `Log in to EAS with email or username (exit and run 'npx expo login --help' for other login options)`\n );\n\n let username = options.username;\n let password = options.password;\n\n if (!hasCredentials) {\n const resolved = await promptAsync(\n [\n !options.username && {\n type: 'text',\n name: 'username',\n message: 'Email or username',\n },\n !options.password && {\n type: 'password',\n name: 'password',\n message: 'Password',\n },\n ].filter(Boolean) as Question<string>[],\n {\n nonInteractiveHelp: `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n )})`,\n }\n );\n username ??= resolved.username;\n password ??= resolved.password;\n }\n // This is just for the types.\n assert(username && password);\n\n try {\n await loginAsync({\n username,\n password,\n otp,\n });\n } catch (e) {\n if (e instanceof ApiV2Error && e.expoApiV2ErrorCode === 'ONE_TIME_PASSWORD_REQUIRED') {\n await retryUsernamePasswordAuthWithOTPAsync(\n username,\n password,\n e.expoApiV2ErrorMetadata as any\n );\n } else {\n throw e;\n }\n }\n}\n\nexport async function tryGetUserAsync(): Promise<Actor | null> {\n const user = await getUserAsync().catch(() => null);\n\n if (user) {\n return user;\n }\n\n const choices = [\n {\n title: 'Log in',\n value: true,\n },\n {\n title: 'Proceed anonymously',\n value: false,\n },\n ];\n\n const value = await selectAsync(\n chalk`\\n\\nIt is recommended to log in with your Expo account before proceeding. \\n{dim ${learnMore(\n 'https://expo.fyi/unverified-app-expo-go'\n )}}\\n`,\n choices,\n {\n nonInteractiveHelp: `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n )})`,\n }\n );\n\n if (value) {\n await showLoginPromptAsync({ printNewLine: true });\n return (await getUserAsync()) ?? null;\n }\n\n return null;\n}\n"],"names":["showLoginPromptAsync","tryGetUserAsync","printNewLine","otp","options","env","EXPO_OFFLINE","CommandError","hasCredentials","username","password","sso","browser","Log","log","browserLoginAsync","resolved","promptAsync","type","name","message","filter","Boolean","nonInteractiveHelp","learnMore","assert","loginAsync","e","ApiV2Error","expoApiV2ErrorCode","retryUsernamePasswordAuthWithOTPAsync","expoApiV2ErrorMetadata","user","getUserAsync","catch","choices","title","value","selectAsync","chalk"],"mappings":";;;;;;;;;;;IAasBA,oBAAoB;eAApBA;;IAkFAC,eAAe;eAAfA;;;;gEA/FH;;;;;;;gEACD;;;;;;qBAEoC;sBACa;6DAC9C;qBACD;wBACS;sBACH;iEACuC;wBACtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGpB,eAAeD,qBAAqB,EACzCE,eAAe,KAAK,EACpBC,GAAG,EACH,GAAGC,SAQJ,GAAG,CAAC,CAAC;IACJ,IAAIC,QAAG,CAACC,YAAY,EAAE;QACpB,MAAM,IAAIC,oBAAY,CAAC,WAAW;IACpC;IACA,MAAMC,iBAAiBJ,QAAQK,QAAQ,IAAIL,QAAQM,QAAQ;IAC3D,MAAMC,MAAMP,QAAQO,GAAG;IACvB,MAAMC,UAAUR,QAAQQ,OAAO;IAE/B,IAAIV,cAAc;QAChBW,KAAIC,GAAG;IACT;IAEA,IAAIH,OAAOC,SAAS;QAClB,MAAMG,IAAAA,uBAAiB,EAAC;YAAEJ,KAAK,CAAC,CAACA;QAAI;QACrC;IACF;IAEAE,KAAIC,GAAG,CACLN,iBACI,CAAC,uGAAuG,CAAC,GACzG,CAAC,mGAAmG,CAAC;IAG3G,IAAIC,WAAWL,QAAQK,QAAQ;IAC/B,IAAIC,WAAWN,QAAQM,QAAQ;IAE/B,IAAI,CAACF,gBAAgB;QACnB,MAAMQ,WAAW,MAAMC,IAAAA,gBAAW,EAChC;YACE,CAACb,QAAQK,QAAQ,IAAI;gBACnBS,MAAM;gBACNC,MAAM;gBACNC,SAAS;YACX;YACA,CAAChB,QAAQM,QAAQ,IAAI;gBACnBQ,MAAM;gBACNC,MAAM;gBACNC,SAAS;YACX;SACD,CAACC,MAAM,CAACC,UACT;YACEC,oBAAoB,CAAC,+DAA+D,EAAEC,IAAAA,eAAS,EAC7F,uDACA,CAAC,CAAC;QACN;QAEFf,aAAaO,SAASP,QAAQ;QAC9BC,aAAaM,SAASN,QAAQ;IAChC;IACA,8BAA8B;IAC9Be,IAAAA,iBAAM,EAAChB,YAAYC;IAEnB,IAAI;QACF,MAAMgB,IAAAA,gBAAU,EAAC;YACfjB;YACAC;YACAP;QACF;IACF,EAAE,OAAOwB,GAAG;QACV,IAAIA,aAAaC,kBAAU,IAAID,EAAEE,kBAAkB,KAAK,8BAA8B;YACpF,MAAMC,IAAAA,0CAAqC,EACzCrB,UACAC,UACAiB,EAAEI,sBAAsB;QAE5B,OAAO;YACL,MAAMJ;QACR;IACF;AACF;AAEO,eAAe1B;IACpB,MAAM+B,OAAO,MAAMC,IAAAA,kBAAY,IAAGC,KAAK,CAAC,IAAM;IAE9C,IAAIF,MAAM;QACR,OAAOA;IACT;IAEA,MAAMG,UAAU;QACd;YACEC,OAAO;YACPC,OAAO;QACT;QACA;YACED,OAAO;YACPC,OAAO;QACT;KACD;IAED,MAAMA,QAAQ,MAAMC,IAAAA,oBAAW,EAC7BC,IAAAA,gBAAK,CAAA,CAAC,iFAAiF,EAAEf,IAAAA,eAAS,EAChG,2CACA,GAAG,CAAC,EACNW,SACA;QACEZ,oBAAoB,CAAC,+DAA+D,EAAEC,IAAAA,eAAS,EAC7F,uDACA,CAAC,CAAC;IACN;IAGF,IAAIa,OAAO;QACT,MAAMrC,qBAAqB;YAAEE,cAAc;QAAK;QAChD,OAAO,AAAC,MAAM+B,IAAAA,kBAAY,OAAO;IACnC;IAEA,OAAO;AACT"}
1
+ {"version":3,"sources":["../../../../src/api/user/actions.ts"],"sourcesContent":["import assert from 'assert';\nimport chalk from 'chalk';\n\nimport { retryUsernamePasswordAuthWithOTPAsync } from './otp';\nimport type { Actor } from './user';\nimport { getUserAsync, loginAsync, browserLoginAsync } from './user';\nimport * as Log from '../../log';\nimport { env } from '../../utils/env';\nimport { CommandError } from '../../utils/errors';\nimport { isInteractive } from '../../utils/interactive';\nimport { learnMore } from '../../utils/link';\nimport type { Question } from '../../utils/prompts';\nimport promptAsync, { selectAsync } from '../../utils/prompts';\nimport { ApiV2Error } from '../rest/client';\n\n/** Show login prompt while prompting for missing credentials. */\nexport async function showLoginPromptAsync({\n printNewLine = false,\n otp,\n ...options\n}: {\n printNewLine?: boolean;\n username?: string;\n password?: string;\n otp?: string;\n sso?: boolean | undefined;\n browser?: boolean | undefined;\n} = {}): Promise<void> {\n if (env.EXPO_OFFLINE) {\n throw new CommandError('OFFLINE', 'Cannot authenticate in offline-mode');\n }\n const hasCredentials = options.username && options.password;\n const sso = options.sso;\n const browser = options.browser;\n\n if (printNewLine) {\n Log.log();\n }\n\n if (sso || browser) {\n await browserLoginAsync({ sso: !!sso });\n return;\n }\n\n Log.log(\n hasCredentials\n ? `Logging in to EAS with email or username (exit and run 'npx expo login --help' for other login options)`\n : `Log in to EAS with email or username (exit and run 'npx expo login --help' for other login options)`\n );\n\n let username = options.username;\n let password = options.password;\n\n if (!hasCredentials) {\n const resolved = await promptAsync(\n [\n !options.username && {\n type: 'text',\n name: 'username',\n message: 'Email or username',\n },\n !options.password && {\n type: 'password',\n name: 'password',\n message: 'Password',\n },\n ].filter(Boolean) as Question<string>[],\n {\n nonInteractiveHelp: `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n )})`,\n }\n );\n username ??= resolved.username;\n password ??= resolved.password;\n }\n // This is just for the types.\n assert(username && password);\n\n try {\n await loginAsync({\n username,\n password,\n otp,\n });\n } catch (e) {\n if (e instanceof ApiV2Error && e.expoApiV2ErrorCode === 'ONE_TIME_PASSWORD_REQUIRED') {\n await retryUsernamePasswordAuthWithOTPAsync(\n username,\n password,\n e.expoApiV2ErrorMetadata as any\n );\n } else {\n throw e;\n }\n }\n}\n\nexport async function tryGetUserAsync(): Promise<Actor | null> {\n const user = await getUserAsync().catch(() => null);\n\n if (user) {\n return user;\n }\n\n // In non-interactive environments (CI, non-TTY) we can't prompt for login. Proceed\n // anonymously so callers like the Expo Go manifest code-signing flow degrade\n // gracefully instead of bubbling a NON_INTERACTIVE error to the client.\n if (!isInteractive()) {\n return null;\n }\n\n const choices = [\n {\n title: 'Log in',\n value: true,\n },\n {\n title: 'Proceed anonymously',\n value: false,\n },\n ];\n\n const value = await selectAsync(\n chalk`\\n\\nIt is recommended to log in with your Expo account before proceeding. \\n{dim ${learnMore(\n 'https://expo.fyi/unverified-app-expo-go'\n )}}\\n`,\n choices,\n {\n nonInteractiveHelp: `Use the EXPO_TOKEN environment variable to authenticate in CI (${learnMore(\n 'https://docs.expo.dev/accounts/programmatic-access/'\n )})`,\n }\n );\n\n if (value) {\n await showLoginPromptAsync({ printNewLine: true });\n return (await getUserAsync()) ?? null;\n }\n\n return null;\n}\n"],"names":["showLoginPromptAsync","tryGetUserAsync","printNewLine","otp","options","env","EXPO_OFFLINE","CommandError","hasCredentials","username","password","sso","browser","Log","log","browserLoginAsync","resolved","promptAsync","type","name","message","filter","Boolean","nonInteractiveHelp","learnMore","assert","loginAsync","e","ApiV2Error","expoApiV2ErrorCode","retryUsernamePasswordAuthWithOTPAsync","expoApiV2ErrorMetadata","user","getUserAsync","catch","isInteractive","choices","title","value","selectAsync","chalk"],"mappings":";;;;;;;;;;;QAgBsBA;eAAAA;;QAkFAC;eAAAA;;;;gEAlGH;;;;;;;gEACD;;;;;;qBAEoC;sBAEM;6DACvC;qBACD;wBACS;6BACC;sBACJ;iEAEe;wBACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGpB,eAAeD,qBAAqB,EACzCE,eAAe,KAAK,EACpBC,GAAG,EACH,GAAGC,SAQJ,GAAG,CAAC,CAAC;IACJ,IAAIC,QAAG,CAACC,YAAY,EAAE;QACpB,MAAM,IAAIC,oBAAY,CAAC,WAAW;IACpC;IACA,MAAMC,iBAAiBJ,QAAQK,QAAQ,IAAIL,QAAQM,QAAQ;IAC3D,MAAMC,MAAMP,QAAQO,GAAG;IACvB,MAAMC,UAAUR,QAAQQ,OAAO;IAE/B,IAAIV,cAAc;QAChBW,KAAIC,GAAG;IACT;IAEA,IAAIH,OAAOC,SAAS;QAClB,MAAMG,IAAAA,uBAAiB,EAAC;YAAEJ,KAAK,CAAC,CAACA;QAAI;QACrC;IACF;IAEAE,KAAIC,GAAG,CACLN,iBACI,CAAC,uGAAuG,CAAC,GACzG,CAAC,mGAAmG,CAAC;IAG3G,IAAIC,WAAWL,QAAQK,QAAQ;IAC/B,IAAIC,WAAWN,QAAQM,QAAQ;IAE/B,IAAI,CAACF,gBAAgB;QACnB,MAAMQ,WAAW,MAAMC,IAAAA,gBAAW,EAChC;YACE,CAACb,QAAQK,QAAQ,IAAI;gBACnBS,MAAM;gBACNC,MAAM;gBACNC,SAAS;YACX;YACA,CAAChB,QAAQM,QAAQ,IAAI;gBACnBQ,MAAM;gBACNC,MAAM;gBACNC,SAAS;YACX;SACD,CAACC,MAAM,CAACC,UACT;YACEC,oBAAoB,CAAC,+DAA+D,EAAEC,IAAAA,eAAS,EAC7F,uDACA,CAAC,CAAC;QACN;QAEFf,aAAaO,SAASP,QAAQ;QAC9BC,aAAaM,SAASN,QAAQ;IAChC;IACA,8BAA8B;IAC9Be,IAAAA,iBAAM,EAAChB,YAAYC;IAEnB,IAAI;QACF,MAAMgB,IAAAA,gBAAU,EAAC;YACfjB;YACAC;YACAP;QACF;IACF,EAAE,OAAOwB,GAAG;QACV,IAAIA,aAAaC,kBAAU,IAAID,EAAEE,kBAAkB,KAAK,8BAA8B;YACpF,MAAMC,IAAAA,0CAAqC,EACzCrB,UACAC,UACAiB,EAAEI,sBAAsB;QAE5B,OAAO;YACL,MAAMJ;QACR;IACF;AACF;AAEO,eAAe1B;IACpB,MAAM+B,OAAO,MAAMC,IAAAA,kBAAY,IAAGC,KAAK,CAAC,IAAM;IAE9C,IAAIF,MAAM;QACR,OAAOA;IACT;IAEA,mFAAmF;IACnF,6EAA6E;IAC7E,wEAAwE;IACxE,IAAI,CAACG,IAAAA,0BAAa,KAAI;QACpB,OAAO;IACT;IAEA,MAAMC,UAAU;QACd;YACEC,OAAO;YACPC,OAAO;QACT;QACA;YACED,OAAO;YACPC,OAAO;QACT;KACD;IAED,MAAMA,QAAQ,MAAMC,IAAAA,oBAAW,EAC7BC,IAAAA,gBAAK,CAAA,CAAC,iFAAiF,EAAEhB,IAAAA,eAAS,EAChG,2CACA,GAAG,CAAC,EACNY,SACA;QACEb,oBAAoB,CAAC,+DAA+D,EAAEC,IAAAA,eAAS,EAC7F,uDACA,CAAC,CAAC;IACN;IAGF,IAAIc,OAAO;QACT,MAAMtC,qBAAqB;YAAEE,cAAc;QAAK;QAChD,OAAO,AAAC,MAAM+B,IAAAA,kBAAY,OAAO;IACnC;IAEA,OAAO;AACT"}