diff --git a/cli/src/commands/tunnels.rs b/cli/src/commands/tunnels.rs index 8c4270ad4538..7bc1618499b6 100644 --- a/cli/src/commands/tunnels.rs +++ b/cli/src/commands/tunnels.rs @@ -360,7 +360,7 @@ pub async fn status(ctx: CommandContext) -> Result { service_installed, tunnel: match tunnel { Ok(s) => Some(s), - Err(CodeError::NoRunningTunnel) => None, + Err(CodeError::NoRunningTunnel | CodeError::AsyncPipeFailed(_)) => None, Err(e) => return Err(e.into()), }, }) diff --git a/package.json b/package.json index aa8ee13bb6da..a84e56d121f4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "code-oss-dev", "version": "1.85.0", - "distro": "ff0198cd90b25ba7ca853279cea9b8bb3cf5164d", + "distro": "a0ee56917203bf689ffe2821a7876cdcd5707200", "author": { "name": "Microsoft Corporation" }, diff --git a/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts b/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts index 925cf35d2a39..0a5f94694e80 100644 --- a/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts +++ b/src/vs/platform/remoteTunnel/node/remoteTunnelService.ts @@ -268,10 +268,18 @@ export class RemoteTunnelService extends Disposable implements IRemoteTunnelServ // split and find the line, since in dev builds additional noise is // added by cargo to the output. - const status: { + let status: { service_installed: boolean; tunnel: object | null; - } = JSON.parse(output.trim().split('\n').find(l => l.startsWith('{'))!); + }; + + try { + status = JSON.parse(output.trim().split('\n').find(l => l.startsWith('{'))!); + } catch (e) { + this._logger.error(`Could not parse status output: ${JSON.stringify(output.trim())}`); + this.setTunnelStatus(TunnelStates.disconnected()); + return; + } isServiceInstalled = status.service_installed; this._logger.info(status.tunnel ? 'Other tunnel running, attaching...' : 'No other tunnel running'); diff --git a/src/vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution.ts b/src/vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution.ts index eee900e11c53..f0d76a136cc5 100644 --- a/src/vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution.ts +++ b/src/vs/workbench/contrib/remoteTunnel/electron-sandbox/remoteTunnel.contribution.ts @@ -270,6 +270,9 @@ export class RemoteTunnelWorkbenchContribution extends Disposable implements IWo ); } + private getPreferredTokenFromSession(session: ExistingSessionItem) { + return session.session.accessToken || session.session.idToken; + } private async startTunnel(asService: boolean): Promise { if (this.connectionInfo) { @@ -327,7 +330,7 @@ export class RemoteTunnelWorkbenchContribution extends Disposable implements IWo break; } }); - const token = authenticationSession.session.idToken ?? authenticationSession.session.accessToken; + const token = this.getPreferredTokenFromSession(authenticationSession); const account: IRemoteTunnelSession = { sessionId: authenticationSession.session.id, token, providerId: authenticationSession.providerId, accountLabel: authenticationSession.session.account.label }; this.remoteTunnelService.startTunnel({ active: true, asService, session: account }).then(status => { if (!completed && (status.type === 'connected' || status.type === 'disconnected')) { @@ -352,10 +355,6 @@ export class RemoteTunnelWorkbenchContribution extends Disposable implements IWo private async getAuthenticationSession(): Promise { const sessions = await this.getAllSessions(); - if (sessions.length === 1) { - return sessions[0]; - } - const quickpick = this.quickInputService.createQuickPick(); quickpick.ok = false; quickpick.placeholder = localize('accountPreference.placeholder', "Sign in to an account to enable remote access"); @@ -448,7 +447,7 @@ export class RemoteTunnelWorkbenchContribution extends Disposable implements IWo if (session) { const sessionItem = (await this.getAllSessions()).find(s => s.session.id === session.sessionId); if (sessionItem) { - return sessionItem.session.idToken ?? sessionItem.session.accessToken; + return this.getPreferredTokenFromSession(sessionItem); } } return undefined;