From fa44300281f3c0ae79847e6e8b7435c2c20fb60a Mon Sep 17 00:00:00 2001 From: nick-delirium Date: Mon, 14 Oct 2024 13:31:24 +0200 Subject: [PATCH] refactor options initialization to be more verbose --- tracker/tracker/src/main/app/index.ts | 22 +++++++++++++------ tracker/tracker/src/main/app/nodes.ts | 17 +++++++++----- .../src/main/app/observer/top_observer.ts | 8 ++++--- tracker/tracker/src/main/app/sanitizer.ts | 9 ++++---- tracker/tracker/src/main/app/session.ts | 10 +++++---- .../src/main/modules/attributeSender.ts | 10 +++++---- .../tracker/src/main/modules/tagWatcher.ts | 16 +++++++++----- 7 files changed, 59 insertions(+), 33 deletions(-) diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 4cd5f17b8..ef5cafb65 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -335,17 +335,25 @@ export default class App { this.revID = this.options.revID this.localStorage = this.options.localStorage ?? window.localStorage this.sessionStorage = this.options.sessionStorage ?? window.sessionStorage - this.sanitizer = new Sanitizer(this, options) - this.nodes = new Nodes(this.options.node_id, Boolean(options.angularMode)) - this.observer = new Observer(this, options) + this.sanitizer = new Sanitizer({ app: this, options }) + this.nodes = new Nodes({ + node_id: this.options.node_id, + angularMode: Boolean(options.angularMode), + }) + this.observer = new Observer({ app: this, options }) this.ticker = new Ticker(this) this.ticker.attach(() => this.commit()) this.debug = new Logger(this.options.__debug__) - this.session = new Session(this, this.options) - this.attributeSender = new AttributeSender(this, Boolean(this.options.disableStringDict)) + this.session = new Session({ app: this, options: this.options }) + this.attributeSender = new AttributeSender({ + app: this, + isDictDisabled: Boolean(this.options.disableStringDict || this.options.crossdomain?.enabled), + }) this.featureFlags = new FeatureFlags(this) - this.tagWatcher = new TagWatcher(this.sessionStorage, this.debug.error, (tag) => { - this.send(TagTrigger(tag) as Message) + this.tagWatcher = new TagWatcher({ + sessionStorage: this.sessionStorage, + errLog: this.debug.error, + onTag: (tag) => this.send(TagTrigger(tag) as Message), }) this.session.attachUpdateCallback(({ userID, metadata }) => { if (userID != null) { diff --git a/tracker/tracker/src/main/app/nodes.ts b/tracker/tracker/src/main/app/nodes.ts index 9fee80718..65f04c206 100644 --- a/tracker/tracker/src/main/app/nodes.ts +++ b/tracker/tracker/src/main/app/nodes.ts @@ -9,11 +9,13 @@ export default class Nodes { private readonly nodeCallbacks: Array = [] private readonly elementListeners: Map> = new Map() private nextNodeId = 0 + private readonly node_id: string + private readonly angularMode: boolean - constructor( - private readonly node_id: string, - private readonly angularMode: boolean, - ) {} + constructor(params: { node_id: string; angularMode: boolean }) { + this.node_id = params.node_id + this.angularMode = params.angularMode + } syntheticMode(frameOrder: number) { const maxSafeNumber = Number.MAX_SAFE_INTEGER @@ -36,7 +38,12 @@ export default class Nodes { this.nodes.forEach((node) => cb(node)) } - attachNodeListener = (node: Node, type: string, listener: EventListener, useCapture = true): void => { + attachNodeListener = ( + node: Node, + type: string, + listener: EventListener, + useCapture = true, + ): void => { const id = this.getID(node) if (id === undefined) { return diff --git a/tracker/tracker/src/main/app/observer/top_observer.ts b/tracker/tracker/src/main/app/observer/top_observer.ts index d6e6ad318..c3fce79ec 100644 --- a/tracker/tracker/src/main/app/observer/top_observer.ts +++ b/tracker/tracker/src/main/app/observer/top_observer.ts @@ -21,14 +21,16 @@ const attachShadowNativeFn = IN_BROWSER ? Element.prototype.attachShadow : () => export default class TopObserver extends Observer { private readonly options: Options private readonly iframeOffsets: IFrameOffsets = new IFrameOffsets() + readonly app: App - constructor(app: App, options: Partial) { - super(app, true) + constructor(params: { app: App; options: Partial }) { + super(params.app, true) + this.app = params.app this.options = Object.assign( { captureIFrames: true, }, - options, + params.options, ) // IFrames diff --git a/tracker/tracker/src/main/app/sanitizer.ts b/tracker/tracker/src/main/app/sanitizer.ts index a284c05b5..5a79b3588 100644 --- a/tracker/tracker/src/main/app/sanitizer.ts +++ b/tracker/tracker/src/main/app/sanitizer.ts @@ -23,17 +23,16 @@ export default class Sanitizer { private readonly obscured: Set = new Set() private readonly hidden: Set = new Set() private readonly options: Options + private readonly app: App - constructor( - private readonly app: App, - options: Partial, - ) { + constructor(params: { app: App; options?: Partial }) { + this.app = params.app this.options = Object.assign( { obscureTextEmails: true, obscureTextNumbers: false, }, - options, + params.options, ) } diff --git a/tracker/tracker/src/main/app/session.ts b/tracker/tracker/src/main/app/session.ts index c3ac83a82..a7cbbe2b2 100644 --- a/tracker/tracker/src/main/app/session.ts +++ b/tracker/tracker/src/main/app/session.ts @@ -35,11 +35,13 @@ export default class Session { private tabId: string public userInfo: UserInfo private token: string | undefined + private readonly app: App + private readonly options: Options + + constructor(params: { app: App; options: Options }) { + this.app = params.app + this.options = params.options - constructor( - private readonly app: App, - private readonly options: Options, - ) { this.createTabId() } diff --git a/tracker/tracker/src/main/modules/attributeSender.ts b/tracker/tracker/src/main/modules/attributeSender.ts index 8d240dd1d..1c979d5a3 100644 --- a/tracker/tracker/src/main/modules/attributeSender.ts +++ b/tracker/tracker/src/main/modules/attributeSender.ts @@ -17,11 +17,13 @@ export class StringDictionary { export default class AttributeSender { private dict = new StringDictionary() + private readonly app: App + private readonly isDictDisabled: boolean - constructor( - private readonly app: App, - private readonly isDictDisabled: boolean, - ) {} + constructor(options: { app: App; isDictDisabled: boolean }) { + this.app = options.app + this.isDictDisabled = options.isDictDisabled + } public sendSetAttribute(id: number, name: string, value: string) { if (this.isDictDisabled) { diff --git a/tracker/tracker/src/main/modules/tagWatcher.ts b/tracker/tracker/src/main/modules/tagWatcher.ts index 6a0ba93a0..5918dbc9c 100644 --- a/tracker/tracker/src/main/modules/tagWatcher.ts +++ b/tracker/tracker/src/main/modules/tagWatcher.ts @@ -4,12 +4,18 @@ class TagWatcher { intervals: Record> = {} tags: { id: number; selector: string }[] = [] observer: IntersectionObserver + private readonly sessionStorage: Storage + private readonly errLog: (args: any[]) => void + private readonly onTag: (tag: number) => void - constructor( - private readonly sessionStorage: Storage, - private readonly errLog: (args: any[]) => void, - private readonly onTag: (tag: number) => void, - ) { + constructor(params: { + sessionStorage: Storage + errLog: (args: any[]) => void + onTag: (tag: number) => void + }) { + this.sessionStorage = params.sessionStorage + this.errLog = params.errLog + this.onTag = params.onTag const tags: { id: number; selector: string }[] = JSON.parse( sessionStorage.getItem(WATCHED_TAGS_KEY) ?? '[]', )