Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
throw new XDLError(
'NO_EXPO_SERVER_PORT',
`No Expo server found for project at ${projectRoot}.`
);
}
const expoServerPort = packagerInfo.expoServerPort;
await stopTunnelsAsync(projectRoot);
if (await Android.startAdbReverseAsync(projectRoot)) {
ProjectUtils.logInfo(
projectRoot,
'expo',
'Successfully ran `adb reverse`. Localhost URLs should work on the connected Android device.'
);
}
let packageShortName = path.parse(projectRoot).base;
let expRc = await readExpRcAsync(projectRoot);
let startedTunnelsSuccessfully = false;
// Some issues with ngrok cause it to hang indefinitely. After
// TUNNEL_TIMEOUTms we just throw an error.
await Promise.race([
(async () => {
await delayAsync(TUNNEL_TIMEOUT);
if (!startedTunnelsSuccessfully) {
throw new Error('Starting tunnels timed out');
}
})(),
(async () => {
let expoServerNgrokUrl = await _connectToNgrokAsync(
projectRoot,
{
export async function startAdbReverseAsync(projectRoot: string): Promise {
const packagerInfo = await ProjectSettings.readPackagerInfoAsync(projectRoot);
const expRc = await readExpRcAsync(projectRoot);
const userDefinedAdbReversePorts = expRc.extraAdbReversePorts || [];
let adbReversePorts = [
packagerInfo.packagerPort,
packagerInfo.expoServerPort,
...userDefinedAdbReversePorts,
];
for (let port of adbReversePorts) {
if (!(await adbReverse(port))) {
return false;
}
}
return true;
}
try {
let deviceId = req.get('Device-Id');
let deviceName = req.get('Device-Name');
if (deviceId && deviceName && req.body) {
_handleDeviceLogs(projectRoot, deviceId, deviceName, req.body);
}
} catch (e) {
ProjectUtils.logError(projectRoot, 'expo', `Error getting device logs: ${e} ${e.stack}`);
}
res.send('Success');
});
app.post('/shutdown', async (req, res) => {
server.close();
res.send('Success');
});
let expRc = await readExpRcAsync(projectRoot);
let expoServerPort = expRc.manifestPort ? expRc.manifestPort : await _getFreePortAsync(19000);
await ProjectSettings.setPackagerInfoAsync(projectRoot, {
expoServerPort,
});
let server = app.listen(expoServerPort, () => {
const info = server.address() as AddressInfo;
const host = info.address;
const port = info.port;
ProjectUtils.logDebug(projectRoot, 'expo', `Local server listening at http://${host}:${port}`);
});
await Exp.saveRecentExpRootAsync(projectRoot);
}
export async function stopAdbReverseAsync(projectRoot: string): Promise {
const packagerInfo = await ProjectSettings.readPackagerInfoAsync(projectRoot);
const expRc = await readExpRcAsync(projectRoot);
const userDefinedAdbReversePorts = expRc.extraAdbReversePorts || [];
let adbReversePorts = [
packagerInfo.packagerPort,
packagerInfo.expoServerPort,
...userDefinedAdbReversePorts,
];
for (let port of adbReversePorts) {
await adbReverseRemove(port);
}
}