1 | {"version":3,"file":"ManifestHandler.js","names":["_config","data","require","_chalk","_interopRequireDefault","_os","_url","_internal","obj","__esModule","default","_cachedSignedManifest","manifestString","signedManifest","blacklistedEnvironmentVariables","Set","shouldExposeEnvironmentVariableInManifest","key","has","toUpperCase","startsWith","stripPort","host","URL","hostname","getPackagerOptionsAsync","projectRoot","projectSettings","ProjectSettings","readAsync","bundleUrlPackagerOpts","JSON","parse","stringify","urlType","hostType","getBundleUrlAsync","platform","mainModuleName","queryParams","UrlUtils","constructBundleQueryParams","path","encodeURI","encodeURIComponent","constructBundleUrlAsync","getPlatformFromRequest","headers","toString","getManifestHandler","req","res","next","url","includes","pathname","_exp$sdkVersion","Doctor","validateWithNetworkAsync","catch","error","ProjectUtils","logError","exp","hostInfo","getManifestResponseFromHeadersAsync","sdkVersion","setHeader","end","Analytics","logEvent","developerTool","Config","e","stack","statusCode","deviceIds","saveDevicesAsync","acceptSignature","getManifestResponseAsync","getExpoGoConfig","debuggerHost","logUrl","Promise","all","constructDebuggerHostAsync","constructLogUrlAsync","developer","tool","packagerOpts","__flipperHack","projectConfig","getConfig","skipSDKVersionRequirement","entryPoint","resolveEntryPoint","stripJSExtension","createHostInfoAsync","expoGoConfig","hostUri","constructHostUriAsync","manifest","Versions","lteSdkVersion","env","getManifestEnvironment","bundleUrl","ProjectAssets","resolveManifestAssets","resolver","match","resolveGoogleServicesFile","getManifestStringAsync","code","owner","addSigningDisabledWarning","chalk","bold","learnMore","ConnectionStatus","setIsOffline","seen","reason","logWarning","Object","keys","process","reduce","prev","hostUUID","currentSession","UserManager","getSessionAsync","isOffline","id","ANONYMOUS_USERNAME","slug","getUnsignedManifestString","getSignedManifestStringAsync","UserSettings","getAnonymousIdentifierAsync","server","serverVersion","version","serverDriver","serverOS","os","serverOSVersion","release","_manifest$owner","user","ensureLoggedInAsync","response","ApiV2","clientForUser","postAsync","args","remoteUsername","getCurrentUsernameAsync","remotePackageName","unsignedManifest","signature"],"sources":["../../src/start/ManifestHandler.ts"],"sourcesContent":["import { ExpoAppManifest, ExpoConfig, ExpoGoConfig, getConfig } from '@expo/config';\nimport { JSONObject } from '@expo/json-file';\nimport chalk from 'chalk';\nimport express from 'express';\nimport http from 'http';\nimport os from 'os';\nimport { parse, URL } from 'url';\n\nimport {\n Analytics,\n ANONYMOUS_USERNAME,\n ApiV2,\n Config,\n ConnectionStatus,\n Doctor,\n learnMore,\n ProjectAssets,\n ProjectSettings,\n ProjectUtils,\n resolveEntryPoint,\n UrlUtils,\n UserManager,\n UserSettings,\n Versions,\n} from '../internal';\n\ninterface HostInfo {\n host: string;\n server: 'xdl';\n serverVersion: string;\n serverDriver: string | null;\n serverOS: NodeJS.Platform;\n serverOSVersion: string;\n}\n\ntype PackagerOptions = ProjectSettings.ProjectSettings;\n\ntype CachedSignedManifest =\n | {\n manifestString: null;\n signedManifest: null;\n }\n | {\n manifestString: string;\n signedManifest: string;\n };\n\nconst _cachedSignedManifest: CachedSignedManifest = {\n manifestString: null,\n signedManifest: null,\n};\n\nconst blacklistedEnvironmentVariables = new Set([\n 'EXPO_APPLE_PASSWORD',\n 'EXPO_ANDROID_KEY_PASSWORD',\n 'EXPO_ANDROID_KEYSTORE_PASSWORD',\n 'EXPO_IOS_DIST_P12_PASSWORD',\n 'EXPO_IOS_PUSH_P12_PASSWORD',\n 'EXPO_CLI_PASSWORD',\n]);\n\nfunction shouldExposeEnvironmentVariableInManifest(key: string) {\n if (blacklistedEnvironmentVariables.has(key.toUpperCase())) {\n return false;\n }\n return key.startsWith('REACT_NATIVE_') || key.startsWith('EXPO_');\n}\n\nexport function stripPort(host: string | undefined): string | undefined {\n if (!host) {\n return host;\n }\n return new URL('/', `http://${host}`).hostname;\n}\n\nexport async function getPackagerOptionsAsync(\n projectRoot: string\n): Promise<[ProjectSettings.ProjectSettings, PackagerOptions]> {\n // Get packager opts and then copy into bundleUrlPackagerOpts\n const projectSettings = await ProjectSettings.readAsync(projectRoot);\n const bundleUrlPackagerOpts = JSON.parse(JSON.stringify(projectSettings));\n bundleUrlPackagerOpts.urlType = 'http';\n if (bundleUrlPackagerOpts.hostType === 'redirect') {\n bundleUrlPackagerOpts.hostType = 'tunnel';\n }\n return [projectSettings, bundleUrlPackagerOpts];\n}\n\nexport async function getBundleUrlAsync({\n projectRoot,\n platform,\n projectSettings,\n bundleUrlPackagerOpts,\n mainModuleName,\n hostname,\n}: {\n platform: string;\n hostname?: string;\n mainModuleName: string;\n projectRoot: string;\n projectSettings: PackagerOptions;\n bundleUrlPackagerOpts: PackagerOptions;\n}): Promise<string> {\n const queryParams = UrlUtils.constructBundleQueryParams(projectRoot, projectSettings);\n\n const path = `/${encodeURI(mainModuleName)}.bundle?platform=${encodeURIComponent(\n platform\n )}&${queryParams}`;\n\n return (\n (await UrlUtils.constructBundleUrlAsync(projectRoot, bundleUrlPackagerOpts, hostname)) + path\n );\n}\n\nfunction getPlatformFromRequest(headers: http.IncomingHttpHeaders): string {\n return (headers['exponent-platform'] || 'ios').toString();\n}\n\nexport function getManifestHandler(projectRoot: string) {\n return async (\n req: express.Request | http.IncomingMessage,\n res: express.Response | http.ServerResponse,\n next: (err?: Error) => void\n ) => {\n // Only support `/`, `/manifest`, `/index.exp` for the manifest middleware.\n if (!req.url) {\n return next();\n }\n if (\n !['/', '/manifest', '/index.exp'].includes(\n // Strip the query params\n parse(req.url).pathname || req.url\n )\n ) {\n return next();\n }\n\n try {\n // We intentionally don't `await`. We want to continue trying even\n // if there is a potential error in the package.json and don't want to slow\n // down the request\n Doctor.validateWithNetworkAsync(projectRoot).catch(error => {\n ProjectUtils.logError(\n projectRoot,\n 'expo',\n `Error: could not load config json at ${projectRoot}: ${error.toString()}`,\n 'doctor-config-json-not-read'\n );\n });\n\n const { manifestString, exp, hostInfo } = await getManifestResponseFromHeadersAsync({\n projectRoot,\n headers: req.headers,\n });\n const sdkVersion = exp.sdkVersion ?? null;\n\n // Send the response\n res.setHeader('Exponent-Server', JSON.stringify(hostInfo));\n // End the request\n res.end(manifestString);\n\n // Log analytics\n Analytics.logEvent('Serve Manifest', {\n developerTool: Config.developerTool,\n sdkVersion,\n });\n } catch (e: any) {\n ProjectUtils.logError(projectRoot, 'expo', e.stack);\n // 5xx = Server Error HTTP code\n res.statusCode = 520;\n res.end(\n JSON.stringify({\n error: e.toString(),\n })\n );\n }\n\n try {\n const deviceIds = req.headers['expo-dev-client-id'];\n if (deviceIds) {\n await ProjectSettings.saveDevicesAsync(projectRoot, deviceIds);\n }\n } catch (e: any) {\n ProjectUtils.logError(projectRoot, 'expo', e.stack);\n }\n };\n}\n\nasync function getManifestResponseFromHeadersAsync({\n projectRoot,\n headers,\n}: {\n projectRoot: string;\n headers: http.IncomingHttpHeaders;\n}): Promise<{ exp: ExpoConfig; manifestString: string; hostInfo: HostInfo }> {\n // Read from headers\n const platform = getPlatformFromRequest(headers);\n const acceptSignature = headers['exponent-accept-signature'];\n return getManifestResponseAsync({ projectRoot, host: headers.host, platform, acceptSignature });\n}\n\nexport async function getExpoGoConfig({\n projectRoot,\n projectSettings,\n mainModuleName,\n hostname,\n}: {\n projectRoot: string;\n projectSettings: ProjectSettings.ProjectSettings;\n mainModuleName: string;\n hostname: string | undefined;\n}): Promise<ExpoGoConfig> {\n const [debuggerHost, logUrl] = await Promise.all([\n UrlUtils.constructDebuggerHostAsync(projectRoot, hostname),\n UrlUtils.constructLogUrlAsync(projectRoot, hostname),\n ]);\n return {\n developer: {\n tool: Config.developerTool,\n projectRoot,\n },\n packagerOpts: projectSettings,\n mainModuleName,\n // Add this string to make Flipper register React Native / Metro as \"running\".\n // Can be tested by running:\n // `METRO_SERVER_PORT=19000 open -a flipper.app`\n // Where 19000 is the port where the Expo project is being hosted.\n __flipperHack: 'React Native packager is running',\n debuggerHost,\n logUrl,\n };\n}\n\nexport async function getManifestResponseAsync({\n projectRoot,\n host,\n platform,\n acceptSignature,\n}: {\n projectRoot: string;\n platform: string;\n host?: string;\n acceptSignature?: string | string[];\n}): Promise<{ exp: ExpoAppManifest; manifestString: string; hostInfo: HostInfo }> {\n // Read the config\n const projectConfig = getConfig(projectRoot, { skipSDKVersionRequirement: true });\n // Opt towards newest functionality when expo isn't installed.\n if (!projectConfig.exp.sdkVersion) {\n projectConfig.exp.sdkVersion = 'UNVERSIONED';\n }\n // Read from headers\n const hostname = stripPort(host);\n\n // Get project entry point and initial module\n const entryPoint = resolveEntryPoint(projectRoot, platform, projectConfig);\n\n const mainModuleName = UrlUtils.stripJSExtension(entryPoint);\n // Gather packager and host info\n const hostInfo = await createHostInfoAsync();\n const [projectSettings, bundleUrlPackagerOpts] = await getPackagerOptionsAsync(projectRoot);\n // Create the manifest and set fields within it\n const expoGoConfig = await getExpoGoConfig({\n projectRoot,\n projectSettings,\n mainModuleName,\n hostname,\n });\n const hostUri = await UrlUtils.constructHostUriAsync(projectRoot, hostname);\n const manifest: ExpoAppManifest = {\n ...(projectConfig.exp as ExpoAppManifest),\n ...expoGoConfig,\n hostUri,\n };\n // Adding the env variables to the Expo manifest is unsafe.\n // This feature is deprecated in SDK 41 forward.\n if (manifest.sdkVersion && Versions.lteSdkVersion(manifest, '40.0.0')) {\n manifest.env = getManifestEnvironment();\n }\n\n // Add URLs to the manifest\n manifest.bundleUrl = await getBundleUrlAsync({\n projectRoot,\n platform,\n projectSettings,\n bundleUrlPackagerOpts,\n mainModuleName,\n hostname,\n });\n\n // Resolve all assets and set them on the manifest as URLs\n await ProjectAssets.resolveManifestAssets({\n projectRoot,\n manifest,\n async resolver(path) {\n return manifest.bundleUrl!.match(/^https?:\\/\\/.*?\\//)![0] + 'assets/' + path;\n },\n });\n // The server normally inserts this but if we're offline we'll do it here\n await ProjectAssets.resolveGoogleServicesFile(projectRoot, manifest);\n\n // Create the final string\n let manifestString;\n try {\n manifestString = await getManifestStringAsync(manifest, hostInfo.host, acceptSignature);\n } catch (error: any) {\n if (error.code === 'UNAUTHORIZED_ERROR' && manifest.owner) {\n // Don't have permissions for siging, warn and enable offline mode.\n addSigningDisabledWarning(\n projectRoot,\n `This project belongs to ${chalk.bold(\n `@${manifest.owner}`\n )} and you have not been granted the appropriate permissions.\\n` +\n `Please request access from an admin of @${manifest.owner} or change the \"owner\" field to an account you belong to.\\n` +\n learnMore('https://docs.expo.dev/versions/latest/config/app/#owner')\n );\n ConnectionStatus.setIsOffline(true);\n manifestString = await getManifestStringAsync(manifest, hostInfo.host, acceptSignature);\n } else if (error.code === 'ENOTFOUND') {\n // Got a DNS error, i.e. can't access exp.host, warn and enable offline mode.\n addSigningDisabledWarning(\n projectRoot,\n `Could not reach Expo servers, please check if you can access ${\n error.hostname || 'exp.host'\n }.`\n );\n ConnectionStatus.setIsOffline(true);\n manifestString = await getManifestStringAsync(manifest, hostInfo.host, acceptSignature);\n } else {\n throw error;\n }\n }\n\n return {\n manifestString,\n exp: manifest,\n hostInfo,\n };\n}\n\nconst addSigningDisabledWarning = (() => {\n let seen = false;\n return (projectRoot: string, reason: string) => {\n if (!seen) {\n seen = true;\n ProjectUtils.logWarning(\n projectRoot,\n 'expo',\n `${reason}\\nFalling back to offline mode.`,\n 'signing-disabled'\n );\n }\n };\n})();\n\nfunction getManifestEnvironment(): Record<string, any> {\n return Object.keys(process.env).reduce<Record<string, any>>((prev, key) => {\n if (shouldExposeEnvironmentVariableInManifest(key)) {\n prev[key] = process.env[key];\n }\n return prev;\n }, {});\n}\n\nasync function getManifestStringAsync(\n manifest: ExpoAppManifest,\n hostUUID: string,\n acceptSignature?: string | string[]\n): Promise<string> {\n const currentSession = await UserManager.getSessionAsync();\n if (!currentSession || ConnectionStatus.isOffline()) {\n manifest.id = `@${ANONYMOUS_USERNAME}/${manifest.slug}-${hostUUID}`;\n }\n if (!acceptSignature) {\n return JSON.stringify(manifest);\n } else if (!currentSession || ConnectionStatus.isOffline()) {\n return getUnsignedManifestString(manifest);\n } else {\n return await getSignedManifestStringAsync(manifest, currentSession);\n }\n}\n\nasync function createHostInfoAsync(): Promise<HostInfo> {\n const host = await UserSettings.getAnonymousIdentifierAsync();\n\n return {\n host,\n server: 'xdl',\n serverVersion: require('xdl/package.json').version,\n serverDriver: Config.developerTool,\n serverOS: os.platform(),\n serverOSVersion: os.release(),\n };\n}\n\nexport async function getSignedManifestStringAsync(\n manifest: Partial<ExpoAppManifest>,\n // NOTE: we currently ignore the currentSession that is passed in, see the note below about analytics.\n currentSession: { sessionSecret?: string; accessToken?: string }\n) {\n const manifestString = JSON.stringify(manifest);\n if (_cachedSignedManifest.manifestString === manifestString) {\n return _cachedSignedManifest.signedManifest;\n }\n // WARNING: Removing the following line will regress analytics, see: https://github.com/expo/expo-cli/pull/2357\n // TODO: make this more obvious from code\n const user = await UserManager.ensureLoggedInAsync();\n const { response } = await ApiV2.clientForUser(user).postAsync('manifest/sign', {\n args: {\n remoteUsername: manifest.owner ?? (await UserManager.getCurrentUsernameAsync()),\n remotePackageName: manifest.slug,\n },\n manifest: manifest as JSONObject,\n });\n _cachedSignedManifest.manifestString = manifestString;\n _cachedSignedManifest.signedManifest = response;\n return response;\n}\n\nexport function getUnsignedManifestString(manifest: ExpoConfig) {\n const unsignedManifest = {\n manifestString: JSON.stringify(manifest),\n signature: 'UNSIGNED',\n };\n return JSON.stringify(unsignedManifest);\n}\n"],"mappings":"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"} |