feat(tracker): check for active tabs with broadcast channel
This commit is contained in:
parent
ead43b4298
commit
3dc00c6bd1
2 changed files with 27 additions and 4 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue