From 09acd0206c030c9eb91a63caa54797d0a3ad99de Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 8 Nov 2021 15:49:35 -0500 Subject: [PATCH] Fix race condition on tab start Signed-off-by: Sebastian Malton --- src/renderer/api/terminal-api.ts | 29 +++++++++---------- .../components/dock/terminal.store.ts | 4 +-- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/renderer/api/terminal-api.ts b/src/renderer/api/terminal-api.ts index f2c79cbb88..a1533430db 100644 --- a/src/renderer/api/terminal-api.ts +++ b/src/renderer/api/terminal-api.ts @@ -58,15 +58,8 @@ export class TerminalApi extends WebSocketApi { public onReady = new EventEmitter<[]>(); @observable public isReady = false; - public readonly url: string; - public static async new(options: TerminalApiQuery): Promise { - const shellToken = await ipcRenderer.invoke("cluster:shell-api", getHostedClusterId(), options.id); - - return new TerminalApi({ ...options, shellToken }); - } - - private constructor(query: TerminalApiQuery) { + constructor(protected query: TerminalApiQuery) { super({ logging: isDevelopment, flushOnOpen: false, @@ -74,26 +67,30 @@ export class TerminalApi extends WebSocketApi { }); makeObservable(this); - const { hostname, protocol, port } = location; - if (query.node) { query.type ||= "node"; } + } - this.url = url.format({ + async connect() { + this.emitStatus("Connecting ..."); + + const shellToken = await ipcRenderer.invoke("cluster:shell-api", getHostedClusterId(), this.query.id); + const { hostname, protocol, port } = location; + const socketUrl = url.format({ protocol: protocol.includes("https") ? "wss" : "ws", hostname, port, pathname: "/api", - query, + query: { + ...this.query, + shellToken, + }, slashes: true, }); - } - connect() { - this.emitStatus("Connecting ..."); this.onData.addListener(this._onReady, { prepend: true }); - super.connect(this.url); + super.connect(socketUrl); } destroy() { diff --git a/src/renderer/components/dock/terminal.store.ts b/src/renderer/components/dock/terminal.store.ts index c5d3182a8e..0f4ec7e8ba 100644 --- a/src/renderer/components/dock/terminal.store.ts +++ b/src/renderer/components/dock/terminal.store.ts @@ -65,12 +65,12 @@ export class TerminalStore extends Singleton { }); } - async connect(tabId: TabId) { + connect(tabId: TabId) { if (this.isConnected(tabId)) { return; } const tab: ITerminalTab = dockStore.getTabById(tabId); - const api = await TerminalApi.new({ + const api = new TerminalApi({ id: tabId, node: tab.node, });