feat(tracker): check for active tabs with broadcast channel

This commit is contained in:
nick-delirium 2023-05-23 10:59:35 +02:00
parent ead43b4298
commit 3dc00c6bd1
2 changed files with 27 additions and 4 deletions

View file

@ -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<Options>) {
// 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<RickRoll>) => {
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) {

View file

@ -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