diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index e23a032df..f1dad5d24 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -1,6 +1,7 @@ # 14.0.7 - check for stopping status during restarts +- restart if token expired during canvas fetch # 14.0.6 diff --git a/tracker/tracker/bun.lockb b/tracker/tracker/bun.lockb index e33001e08..2b5bba11e 100755 Binary files a/tracker/tracker/bun.lockb and b/tracker/tracker/bun.lockb differ diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index 7210a1ef1..739874541 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "14.0.7-beta.0", + "version": "14.0.7", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/main/app/canvas.ts b/tracker/tracker/src/main/app/canvas.ts index f4802ce9b..e96b80c72 100644 --- a/tracker/tracker/src/main/app/canvas.ts +++ b/tracker/tracker/src/main/app/canvas.ts @@ -128,7 +128,7 @@ class CanvasRecorder { return } if (!canvas || !hasTag(canvas, 'canvas') || canvas !== node) { - this.app.debug.log('Canvas element not in sync') + this.app.debug.log('Canvas element not in sync', canvas, node) clearInterval(int) return } else { @@ -160,6 +160,14 @@ class CanvasRecorder { } }) + const initRestart = () => { + this.app.debug.log('Restarting tracker; token expired') + this.app.stop(false) + setTimeout(() => { + void this.app.start({}, true) + }, 250) + } + fetch(this.app.options.ingestPoint + '/v1/web/images', { method: 'POST', headers: { @@ -167,7 +175,10 @@ class CanvasRecorder { }, body: formData, }) - .then(() => { + .then((r) => { + if (r.status === 401) { + return initRestart() + } return true }) .catch((e) => { diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index 7a5ca81c1..c3ac83a82 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -34,6 +34,7 @@ export default class Session { private projectID: string | undefined private tabId: string public userInfo: UserInfo + private token: string | undefined constructor( private readonly app: App, @@ -109,10 +110,12 @@ export default class Session { } getSessionToken(): string | undefined { - return this.app.sessionStorage.getItem(this.options.session_token_key) || undefined + const token = this.token || this.app.sessionStorage.getItem(this.options.session_token_key) + return token || undefined } setSessionToken(token: string): void { + this.token = token this.app.sessionStorage.setItem(this.options.session_token_key, token) }