From 7f3f01395719baf5572e284e871bb6ebe41dc93d Mon Sep 17 00:00:00 2001 From: sylenien Date: Tue, 30 Aug 2022 12:27:33 +0200 Subject: [PATCH 1/3] feat(tracker): method to get session url --- tracker/tracker/.eslintrc.cjs | 4 ++-- tracker/tracker/src/main/app/index.ts | 14 +++++++++++++- tracker/tracker/src/main/app/session.ts | 17 ++++++++++++++++- tracker/tracker/src/main/index.ts | 7 +++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/tracker/tracker/.eslintrc.cjs b/tracker/tracker/.eslintrc.cjs index 1e2170eee..a5a2267bd 100644 --- a/tracker/tracker/.eslintrc.cjs +++ b/tracker/tracker/.eslintrc.cjs @@ -27,7 +27,7 @@ module.exports = { '@typescript-eslint/camelcase': 'off', '@typescript-eslint/no-explicit-any': 'off', '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/explicit-function-return-type': 'warn', + '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/prefer-readonly': 'warn', '@typescript-eslint/ban-ts-comment': 'off', '@typescript-eslint/no-unsafe-assignment': 'off', @@ -46,4 +46,4 @@ module.exports = { '@typescript-eslint/no-unused-expressions': 'warn', '@typescript-eslint/no-useless-constructor': 'warn', }, -}; +}; diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index f593fa6a7..c95c4ce45 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -290,6 +290,11 @@ export default class App { getSessionID(): string | undefined { return this.session.getInfo().sessionID || undefined } + + getSessionURL(): string { + return this.session.getSessionURL() + } + getHost(): string { return new URL(this.options.ingestPoint).hostname } @@ -409,6 +414,7 @@ export default class App { token, userUUID, sessionID, + projectID, beaconSizeLimit, startTimestamp, // real startTS, derived from sessionID } = r @@ -423,7 +429,13 @@ export default class App { } this.session.setSessionToken(token) this.localStorage.setItem(this.options.local_uuid_key, userUUID) - this.session.update({ sessionID, timestamp: startTimestamp || timestamp }) // TODO: no no-explicit 'any' + this.session.update({ sessionID, timestamp: startTimestamp || timestamp, projectID }) // TODO: no no-explicit 'any' + this.session.buildURL( + `${this.options.ingestPoint.replace(/\/ingest$/, '')}/${projectID as string}/session/${ + sessionID as string + }`, + ) + const startWorkerMsg: WorkerMessageData = { type: 'auth', token, diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index 4ac5c6655..f418ed320 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -5,6 +5,7 @@ interface SessionInfo { metadata: Record userID: string | null timestamp: number + projectID?: string } type OnUpdateCallback = (i: Partial) => void @@ -19,6 +20,8 @@ export default class Session { private sessionID: string | undefined private readonly callbacks: OnUpdateCallback[] = [] private timestamp = 0 + private projectID: string | undefined + private sessionUrl: string constructor(private readonly app: App, private options: Options) {} @@ -35,7 +38,7 @@ export default class Session { this.callbacks.forEach((cb) => cb(newInfo)) } - update(newInfo: Partial) { + update(newInfo: Partial): void { if (newInfo.userID !== undefined) { // TODO clear nullable/undefinable types this.userID = newInfo.userID @@ -49,6 +52,9 @@ export default class Session { if (newInfo.timestamp !== undefined) { this.timestamp = newInfo.timestamp } + if (newInfo.projectID !== undefined) { + this.projectID = newInfo.projectID + } this.handleUpdate(newInfo) } @@ -116,9 +122,18 @@ export default class Session { metadata: this.metadata, userID: this.userID, timestamp: this.timestamp, + projectID: this.projectID, } } + buildURL(url: string): void { + this.sessionUrl = url + } + + getSessionURL(): string { + return this.sessionUrl + } + reset(): void { this.app.sessionStorage.removeItem(this.options.session_token_key) this.metadata = {} diff --git a/tracker/tracker/src/main/index.ts b/tracker/tracker/src/main/index.ts index 02fbead4d..9255822fd 100644 --- a/tracker/tracker/src/main/index.ts +++ b/tracker/tracker/src/main/index.ts @@ -209,6 +209,13 @@ export default class API { return this.getSessionID() } + getSessionURL(): string | null { + if (this.app === null) { + return null + } + return this.app.getSessionURL() + } + setUserID(id: string): void { if (typeof id === 'string' && this.app !== null) { this.app.session.setUserID(id) From 7aa658b59a456b95f8070cd7931bc75e15af69d9 Mon Sep 17 00:00:00 2001 From: sylenien Date: Tue, 30 Aug 2022 12:52:01 +0200 Subject: [PATCH 2/3] change(tracker): change session url building --- tracker/tracker/src/main/app/index.ts | 13 +++++++------ tracker/tracker/src/main/app/session.ts | 8 -------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index c95c4ce45..091d2e104 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -292,7 +292,13 @@ export default class App { } getSessionURL(): string { - return this.session.getSessionURL() + const { projectID, sessionID } = this.session.getInfo() + if (!projectID || !sessionID) { + this.debug.error('OpenReplay error: Unable to build session URL') + return '' + } + + return this.options.ingestPoint.replace(/\/ingest$/, `${projectID}/session/${sessionID}`) } getHost(): string { @@ -430,11 +436,6 @@ export default class App { this.session.setSessionToken(token) this.localStorage.setItem(this.options.local_uuid_key, userUUID) this.session.update({ sessionID, timestamp: startTimestamp || timestamp, projectID }) // TODO: no no-explicit 'any' - this.session.buildURL( - `${this.options.ingestPoint.replace(/\/ingest$/, '')}/${projectID as string}/session/${ - sessionID as string - }`, - ) const startWorkerMsg: WorkerMessageData = { type: 'auth', diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index f418ed320..e109242e8 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -126,14 +126,6 @@ export default class Session { } } - buildURL(url: string): void { - this.sessionUrl = url - } - - getSessionURL(): string { - return this.sessionUrl - } - reset(): void { this.app.sessionStorage.removeItem(this.options.session_token_key) this.metadata = {} From 0b96da6029956a8c156591a591cdadad8c55f162 Mon Sep 17 00:00:00 2001 From: sylenien Date: Tue, 30 Aug 2022 14:35:08 +0200 Subject: [PATCH 3/3] change(tracker): remove unused --- tracker/tracker/src/main/app/index.ts | 4 ++-- tracker/tracker/src/main/app/session.ts | 3 +-- tracker/tracker/src/main/index.ts | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 091d2e104..0904389f9 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -291,11 +291,11 @@ export default class App { return this.session.getInfo().sessionID || undefined } - getSessionURL(): string { + getSessionURL(): string | undefined { const { projectID, sessionID } = this.session.getInfo() if (!projectID || !sessionID) { this.debug.error('OpenReplay error: Unable to build session URL') - return '' + return undefined } return this.options.ingestPoint.replace(/\/ingest$/, `${projectID}/session/${sessionID}`) diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index e109242e8..e98d55da7 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -21,9 +21,8 @@ export default class Session { private readonly callbacks: OnUpdateCallback[] = [] private timestamp = 0 private projectID: string | undefined - private sessionUrl: string - constructor(private readonly app: App, private options: Options) {} + constructor(private readonly app: App, private readonly options: Options) {} attachUpdateCallback(cb: OnUpdateCallback) { this.callbacks.push(cb) diff --git a/tracker/tracker/src/main/index.ts b/tracker/tracker/src/main/index.ts index 9255822fd..ff8d27b4c 100644 --- a/tracker/tracker/src/main/index.ts +++ b/tracker/tracker/src/main/index.ts @@ -209,9 +209,9 @@ export default class API { return this.getSessionID() } - getSessionURL(): string | null { + getSessionURL(): string | undefined { if (this.app === null) { - return null + return undefined } return this.app.getSessionURL() }