From 3dc00c6bd1b53c2fb10dd832a2528395ac1de558 Mon Sep 17 00:00:00 2001 From: nick-delirium Date: Tue, 23 May 2023 10:59:35 +0200 Subject: [PATCH] feat(tracker): check for active tabs with broadcast channel --- tracker/tracker/src/main/app/index.ts | 23 +++++++++++++++++++++++ tracker/tracker/src/main/app/session.ts | 8 ++++---- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 2dc6772ff..ebbaaa940 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -46,6 +46,11 @@ type UnsuccessfulStart = { reason: typeof CANCELED | string success: false } + +type RickRoll = + | { line: 'never-gonna-give-you-up' } + | { line: 'never-gonna-let-you-down'; token: string } + const UnsuccessfulStart = (reason: string): UnsuccessfulStart => ({ reason, success: false }) const SuccessfulStart = (body: OnStartInfo): SuccessfulStart => ({ ...body, success: true }) export type StartPromiseReturn = SuccessfulStart | UnsuccessfulStart @@ -110,6 +115,7 @@ export default class App { private readonly worker?: TypedWorker private compressionThreshold = 24 * 1000 private restartAttempts = 0 + private readonly bc: BroadcastChannel = new BroadcastChannel('rick') constructor(projectKey: string, sessionToken: string | undefined, options: Partial) { // if (options.onStart !== undefined) { @@ -214,6 +220,23 @@ export default class App { } catch (e) { this._debug('worker_start', e) } + + this.bc.postMessage({ line: 'never-gonna-give-you-up' }) + this.bc.onmessage = (ev: MessageEvent) => { + if (ev.data.line === 'never-gonna-let-you-down') { + const sessionToken = ev.data.token + this.session.setSessionToken(sessionToken) + } + if (ev.data.line === 'never-gonna-give-you-up') { + const token = this.session.getSessionToken() + if (token) { + this.bc.postMessage({ + line: 'never-gonna-let-you-down', + token, + }) + } + } + } } private _debug(context: string, e: any) { diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index 54291cab3..ecf1a984c 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -92,11 +92,11 @@ export default class Session { } getSessionToken(): string | undefined { - return this.app.localStorage.getItem(this.options.session_token_key) || undefined + return this.app.sessionStorage.getItem(this.options.session_token_key) || undefined } setSessionToken(token: string): void { - this.app.localStorage.setItem(this.options.session_token_key, token) + this.app.sessionStorage.setItem(this.options.session_token_key, token) } applySessionHash(hash: string) { @@ -109,7 +109,7 @@ export default class Session { if (!pageNoStr || !token) { return } - this.app.localStorage.setItem(this.options.session_token_key, token) + this.app.sessionStorage.setItem(this.options.session_token_key, token) this.app.sessionStorage.setItem(this.options.session_pageno_key, pageNoStr) } @@ -149,7 +149,7 @@ export default class Session { } reset(): void { - this.app.localStorage.removeItem(this.options.session_token_key) + this.app.sessionStorage.removeItem(this.options.session_token_key) this.metadata = {} this.userID = null this.sessionID = undefined