@tracelog/lib 0.0.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -24
- package/dist/browser/tracelog.js +1934 -3226
- package/dist/cjs/api.d.ts +33 -19
- package/dist/cjs/api.js +111 -156
- package/dist/cjs/app.constants.d.ts +80 -1
- package/dist/cjs/app.constants.js +90 -3
- package/dist/cjs/app.d.ts +29 -44
- package/dist/cjs/app.js +114 -212
- package/dist/cjs/app.types.d.ts +2 -7
- package/dist/cjs/app.types.js +10 -21
- package/dist/cjs/constants/api.constants.js +11 -5
- package/dist/cjs/constants/config.constants.d.ts +75 -0
- package/dist/cjs/constants/config.constants.js +178 -0
- package/dist/cjs/constants/error.constants.d.ts +29 -0
- package/dist/cjs/constants/error.constants.js +50 -0
- package/dist/cjs/constants/index.d.ts +3 -6
- package/dist/cjs/constants/index.js +3 -6
- package/dist/cjs/constants/performance.constants.d.ts +28 -0
- package/dist/cjs/constants/performance.constants.js +43 -0
- package/dist/cjs/handlers/click.handler.d.ts +1 -0
- package/dist/cjs/handlers/click.handler.js +30 -49
- package/dist/cjs/handlers/error.handler.d.ts +11 -6
- package/dist/cjs/handlers/error.handler.js +91 -51
- package/dist/cjs/handlers/page-view.handler.js +38 -29
- package/dist/cjs/handlers/performance.handler.d.ts +3 -0
- package/dist/cjs/handlers/performance.handler.js +76 -37
- package/dist/cjs/handlers/scroll.handler.d.ts +15 -0
- package/dist/cjs/handlers/scroll.handler.js +105 -31
- package/dist/cjs/handlers/session.handler.d.ts +6 -20
- package/dist/cjs/handlers/session.handler.js +38 -326
- package/dist/cjs/integrations/google-analytics.integration.d.ts +0 -1
- package/dist/cjs/integrations/google-analytics.integration.js +27 -98
- package/dist/cjs/listeners/input-listener-managers.d.ts +18 -9
- package/dist/cjs/listeners/input-listener-managers.js +24 -33
- package/dist/cjs/listeners/touch-listener-manager.d.ts +1 -3
- package/dist/cjs/listeners/touch-listener-manager.js +1 -23
- package/dist/cjs/listeners/visibility-listener-manager.d.ts +1 -4
- package/dist/cjs/listeners/visibility-listener-manager.js +6 -42
- package/dist/cjs/managers/api.manager.d.ts +13 -3
- package/dist/cjs/managers/api.manager.js +35 -5
- package/dist/cjs/managers/config.manager.d.ts +53 -3
- package/dist/cjs/managers/config.manager.js +131 -62
- package/dist/cjs/managers/event.manager.d.ts +57 -36
- package/dist/cjs/managers/event.manager.js +266 -417
- package/dist/cjs/managers/sender.manager.d.ts +40 -22
- package/dist/cjs/managers/sender.manager.js +200 -198
- package/dist/cjs/managers/session.manager.d.ts +80 -66
- package/dist/cjs/managers/session.manager.js +267 -522
- package/dist/cjs/managers/state.manager.d.ts +33 -0
- package/dist/cjs/managers/state.manager.js +79 -6
- package/dist/cjs/managers/storage.manager.d.ts +26 -2
- package/dist/cjs/managers/storage.manager.js +67 -34
- package/dist/cjs/managers/tags.manager.d.ts +31 -7
- package/dist/cjs/managers/tags.manager.js +123 -241
- package/dist/cjs/managers/user.manager.d.ts +14 -5
- package/dist/cjs/managers/user.manager.js +17 -9
- package/dist/cjs/public-api.d.ts +10 -1
- package/dist/cjs/public-api.js +18 -24
- package/dist/cjs/test-bridge.d.ts +48 -0
- package/dist/cjs/test-bridge.js +110 -0
- package/dist/cjs/types/api.types.d.ts +21 -6
- package/dist/cjs/types/api.types.js +21 -6
- package/dist/cjs/types/config.types.d.ts +22 -84
- package/dist/cjs/types/emitter.types.d.ts +11 -0
- package/dist/cjs/types/emitter.types.js +8 -0
- package/dist/cjs/types/event.types.d.ts +8 -11
- package/dist/cjs/types/index.d.ts +3 -1
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/queue.types.d.ts +1 -0
- package/dist/cjs/types/session.types.d.ts +0 -64
- package/dist/cjs/types/state.types.d.ts +1 -0
- package/dist/cjs/types/test-bridge.types.d.ts +38 -0
- package/dist/cjs/types/validation-error.types.d.ts +7 -0
- package/dist/cjs/types/validation-error.types.js +11 -1
- package/dist/cjs/types/window.types.d.ts +1 -8
- package/dist/cjs/utils/data/uuid.utils.d.ts +1 -1
- package/dist/cjs/utils/data/uuid.utils.js +7 -5
- package/dist/cjs/utils/emitter.utils.d.ts +8 -0
- package/dist/cjs/utils/emitter.utils.js +33 -0
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +1 -0
- package/dist/cjs/utils/logging/debug-logger.utils.d.ts +10 -51
- package/dist/cjs/utils/logging/debug-logger.utils.js +36 -127
- package/dist/cjs/utils/network/fetch-with-timeout.utils.d.ts +4 -0
- package/dist/cjs/utils/network/fetch-with-timeout.utils.js +25 -0
- package/dist/cjs/utils/network/index.d.ts +1 -0
- package/dist/cjs/utils/network/index.js +1 -0
- package/dist/cjs/utils/network/url.utils.js +2 -42
- package/dist/cjs/utils/security/sanitize.utils.d.ts +1 -8
- package/dist/cjs/utils/security/sanitize.utils.js +7 -41
- package/dist/cjs/utils/validations/config-validations.utils.d.ts +7 -0
- package/dist/cjs/utils/validations/config-validations.utils.js +77 -22
- package/dist/esm/api.d.ts +33 -19
- package/dist/esm/api.js +105 -118
- package/dist/esm/app.constants.d.ts +80 -1
- package/dist/esm/app.constants.js +89 -1
- package/dist/esm/app.d.ts +29 -44
- package/dist/esm/app.js +115 -213
- package/dist/esm/app.types.d.ts +2 -7
- package/dist/esm/app.types.js +1 -7
- package/dist/esm/constants/api.constants.js +10 -4
- package/dist/esm/constants/config.constants.d.ts +75 -0
- package/dist/esm/constants/config.constants.js +174 -0
- package/dist/esm/constants/error.constants.d.ts +29 -0
- package/dist/esm/constants/error.constants.js +47 -0
- package/dist/esm/constants/index.d.ts +3 -6
- package/dist/esm/constants/index.js +3 -6
- package/dist/esm/constants/performance.constants.d.ts +28 -0
- package/dist/esm/constants/performance.constants.js +40 -0
- package/dist/esm/handlers/click.handler.d.ts +1 -0
- package/dist/esm/handlers/click.handler.js +30 -49
- package/dist/esm/handlers/error.handler.d.ts +11 -6
- package/dist/esm/handlers/error.handler.js +91 -51
- package/dist/esm/handlers/page-view.handler.js +38 -29
- package/dist/esm/handlers/performance.handler.d.ts +3 -0
- package/dist/esm/handlers/performance.handler.js +71 -32
- package/dist/esm/handlers/scroll.handler.d.ts +15 -0
- package/dist/esm/handlers/scroll.handler.js +106 -32
- package/dist/esm/handlers/session.handler.d.ts +6 -20
- package/dist/esm/handlers/session.handler.js +38 -326
- package/dist/esm/integrations/google-analytics.integration.d.ts +0 -1
- package/dist/esm/integrations/google-analytics.integration.js +27 -98
- package/dist/esm/listeners/input-listener-managers.d.ts +18 -9
- package/dist/esm/listeners/input-listener-managers.js +23 -32
- package/dist/esm/listeners/touch-listener-manager.d.ts +1 -3
- package/dist/esm/listeners/touch-listener-manager.js +1 -23
- package/dist/esm/listeners/visibility-listener-manager.d.ts +1 -4
- package/dist/esm/listeners/visibility-listener-manager.js +6 -42
- package/dist/esm/managers/api.manager.d.ts +13 -3
- package/dist/esm/managers/api.manager.js +34 -3
- package/dist/esm/managers/config.manager.d.ts +53 -3
- package/dist/esm/managers/config.manager.js +133 -64
- package/dist/esm/managers/event.manager.d.ts +57 -36
- package/dist/esm/managers/event.manager.js +268 -419
- package/dist/esm/managers/sender.manager.d.ts +40 -22
- package/dist/esm/managers/sender.manager.js +201 -199
- package/dist/esm/managers/session.manager.d.ts +80 -66
- package/dist/esm/managers/session.manager.js +269 -524
- package/dist/esm/managers/state.manager.d.ts +33 -0
- package/dist/esm/managers/state.manager.js +78 -6
- package/dist/esm/managers/storage.manager.d.ts +26 -2
- package/dist/esm/managers/storage.manager.js +66 -33
- package/dist/esm/managers/tags.manager.d.ts +31 -7
- package/dist/esm/managers/tags.manager.js +124 -242
- package/dist/esm/managers/user.manager.d.ts +14 -5
- package/dist/esm/managers/user.manager.js +17 -9
- package/dist/esm/public-api.d.ts +10 -1
- package/dist/esm/public-api.js +14 -1
- package/dist/esm/test-bridge.d.ts +48 -0
- package/dist/esm/test-bridge.js +106 -0
- package/dist/esm/types/api.types.d.ts +21 -6
- package/dist/esm/types/api.types.js +21 -6
- package/dist/esm/types/config.types.d.ts +22 -84
- package/dist/esm/types/emitter.types.d.ts +11 -0
- package/dist/esm/types/emitter.types.js +5 -0
- package/dist/esm/types/event.types.d.ts +8 -11
- package/dist/esm/types/index.d.ts +3 -1
- package/dist/esm/types/index.js +3 -1
- package/dist/esm/types/queue.types.d.ts +1 -0
- package/dist/esm/types/session.types.d.ts +0 -64
- package/dist/esm/types/state.types.d.ts +1 -0
- package/dist/esm/types/test-bridge.types.d.ts +38 -0
- package/dist/esm/types/validation-error.types.d.ts +7 -0
- package/dist/esm/types/validation-error.types.js +9 -0
- package/dist/esm/types/window.types.d.ts +1 -8
- package/dist/esm/utils/data/uuid.utils.d.ts +1 -1
- package/dist/esm/utils/data/uuid.utils.js +7 -5
- package/dist/esm/utils/emitter.utils.d.ts +8 -0
- package/dist/esm/utils/emitter.utils.js +29 -0
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/logging/debug-logger.utils.d.ts +10 -51
- package/dist/esm/utils/logging/debug-logger.utils.js +36 -127
- package/dist/esm/utils/network/fetch-with-timeout.utils.d.ts +4 -0
- package/dist/esm/utils/network/fetch-with-timeout.utils.js +22 -0
- package/dist/esm/utils/network/index.d.ts +1 -0
- package/dist/esm/utils/network/index.js +1 -0
- package/dist/esm/utils/network/url.utils.js +2 -42
- package/dist/esm/utils/security/sanitize.utils.d.ts +1 -8
- package/dist/esm/utils/security/sanitize.utils.js +6 -39
- package/dist/esm/utils/validations/config-validations.utils.d.ts +7 -0
- package/dist/esm/utils/validations/config-validations.utils.js +76 -22
- package/package.json +23 -16
- package/dist/browser/web-vitals-CCnqwnC8.mjs +0 -198
- package/dist/cjs/constants/browser.constants.d.ts +0 -3
- package/dist/cjs/constants/browser.constants.js +0 -41
- package/dist/cjs/constants/initialization.constants.d.ts +0 -40
- package/dist/cjs/constants/initialization.constants.js +0 -48
- package/dist/cjs/constants/limits.constants.d.ts +0 -25
- package/dist/cjs/constants/limits.constants.js +0 -40
- package/dist/cjs/constants/security.constants.d.ts +0 -1
- package/dist/cjs/constants/security.constants.js +0 -12
- package/dist/cjs/constants/timing.constants.d.ts +0 -22
- package/dist/cjs/constants/timing.constants.js +0 -34
- package/dist/cjs/constants/validation.constants.d.ts +0 -13
- package/dist/cjs/constants/validation.constants.js +0 -31
- package/dist/cjs/handlers/network.handler.d.ts +0 -16
- package/dist/cjs/handlers/network.handler.js +0 -136
- package/dist/cjs/managers/cross-tab-session.manager.d.ts +0 -170
- package/dist/cjs/managers/cross-tab-session.manager.js +0 -730
- package/dist/cjs/managers/sampling.manager.d.ts +0 -8
- package/dist/cjs/managers/sampling.manager.js +0 -53
- package/dist/cjs/managers/session-recovery.manager.d.ts +0 -65
- package/dist/cjs/managers/session-recovery.manager.js +0 -237
- package/dist/cjs/types/web-vitals.types.d.ts +0 -6
- package/dist/esm/constants/browser.constants.d.ts +0 -3
- package/dist/esm/constants/browser.constants.js +0 -38
- package/dist/esm/constants/initialization.constants.d.ts +0 -40
- package/dist/esm/constants/initialization.constants.js +0 -45
- package/dist/esm/constants/limits.constants.d.ts +0 -25
- package/dist/esm/constants/limits.constants.js +0 -37
- package/dist/esm/constants/security.constants.d.ts +0 -1
- package/dist/esm/constants/security.constants.js +0 -9
- package/dist/esm/constants/timing.constants.d.ts +0 -22
- package/dist/esm/constants/timing.constants.js +0 -31
- package/dist/esm/constants/validation.constants.d.ts +0 -13
- package/dist/esm/constants/validation.constants.js +0 -28
- package/dist/esm/handlers/network.handler.d.ts +0 -16
- package/dist/esm/handlers/network.handler.js +0 -132
- package/dist/esm/managers/cross-tab-session.manager.d.ts +0 -170
- package/dist/esm/managers/cross-tab-session.manager.js +0 -726
- package/dist/esm/managers/sampling.manager.d.ts +0 -8
- package/dist/esm/managers/sampling.manager.js +0 -49
- package/dist/esm/managers/session-recovery.manager.d.ts +0 -65
- package/dist/esm/managers/session-recovery.manager.js +0 -233
- package/dist/esm/types/web-vitals.types.d.ts +0 -6
- /package/dist/cjs/types/{web-vitals.types.js → test-bridge.types.js} +0 -0
- /package/dist/esm/types/{web-vitals.types.js → test-bridge.types.js} +0 -0
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NetworkHandler = void 0;
|
|
4
|
-
const state_manager_1 = require("../managers/state.manager");
|
|
5
|
-
const types_1 = require("../types");
|
|
6
|
-
const utils_1 = require("../utils");
|
|
7
|
-
const logging_1 = require("../utils/logging");
|
|
8
|
-
class NetworkHandler extends state_manager_1.StateManager {
|
|
9
|
-
constructor(eventManager) {
|
|
10
|
-
super();
|
|
11
|
-
this.eventManager = eventManager;
|
|
12
|
-
this.originalFetch = window.fetch;
|
|
13
|
-
this.originalXHROpen = XMLHttpRequest.prototype.open;
|
|
14
|
-
this.originalXHRSend = XMLHttpRequest.prototype.send;
|
|
15
|
-
}
|
|
16
|
-
startTracking() {
|
|
17
|
-
logging_1.debugLog.debug('NetworkHandler', 'Starting network error tracking');
|
|
18
|
-
this.interceptFetch();
|
|
19
|
-
this.interceptXHR();
|
|
20
|
-
}
|
|
21
|
-
stopTracking() {
|
|
22
|
-
logging_1.debugLog.debug('NetworkHandler', 'Stopping network error tracking');
|
|
23
|
-
window.fetch = this.originalFetch;
|
|
24
|
-
XMLHttpRequest.prototype.open = this.originalXHROpen;
|
|
25
|
-
XMLHttpRequest.prototype.send = this.originalXHRSend;
|
|
26
|
-
}
|
|
27
|
-
interceptFetch() {
|
|
28
|
-
window.fetch = async (input, init) => {
|
|
29
|
-
const startTime = Date.now();
|
|
30
|
-
const url = typeof input === 'string' ? input : input.toString();
|
|
31
|
-
const method = init?.method ?? 'GET';
|
|
32
|
-
try {
|
|
33
|
-
const response = await this.originalFetch(input, init);
|
|
34
|
-
const duration = Date.now() - startTime;
|
|
35
|
-
if (!response.ok) {
|
|
36
|
-
logging_1.debugLog.debug('NetworkHandler', 'Fetch error detected', {
|
|
37
|
-
method,
|
|
38
|
-
url: this.normalizeUrlForTracking(url),
|
|
39
|
-
status: response.status,
|
|
40
|
-
statusText: response.statusText,
|
|
41
|
-
});
|
|
42
|
-
this.trackNetworkError(method.toUpperCase(), this.normalizeUrlForTracking(url), response.status, response.statusText, duration);
|
|
43
|
-
}
|
|
44
|
-
return response;
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
const duration = Date.now() - startTime;
|
|
48
|
-
const errorMessage = error instanceof Error ? error.message : 'Network Error';
|
|
49
|
-
logging_1.debugLog.debug('NetworkHandler', 'Fetch exception caught', {
|
|
50
|
-
method,
|
|
51
|
-
url: this.normalizeUrlForTracking(url),
|
|
52
|
-
error: errorMessage,
|
|
53
|
-
});
|
|
54
|
-
this.trackNetworkError(method.toUpperCase(), this.normalizeUrlForTracking(url), undefined, errorMessage, duration);
|
|
55
|
-
throw error;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
interceptXHR() {
|
|
60
|
-
const trackNetworkError = this.trackNetworkError.bind(this);
|
|
61
|
-
const normalizeUrlForTracking = this.normalizeUrlForTracking.bind(this);
|
|
62
|
-
const originalXHROpen = this.originalXHROpen;
|
|
63
|
-
const originalXHRSend = this.originalXHRSend;
|
|
64
|
-
XMLHttpRequest.prototype.open = function (method, url, async, user, password) {
|
|
65
|
-
const asyncMode = async ?? true;
|
|
66
|
-
const extendedThis = this;
|
|
67
|
-
extendedThis._tracelogStartTime = Date.now();
|
|
68
|
-
extendedThis._tracelogMethod = method.toUpperCase();
|
|
69
|
-
extendedThis._tracelogUrl = url.toString();
|
|
70
|
-
return originalXHROpen.call(this, method, url, asyncMode, user, password);
|
|
71
|
-
};
|
|
72
|
-
XMLHttpRequest.prototype.send = function (body) {
|
|
73
|
-
const xhr = this;
|
|
74
|
-
const startTime = xhr._tracelogStartTime ?? Date.now();
|
|
75
|
-
const method = xhr._tracelogMethod ?? 'GET';
|
|
76
|
-
const url = xhr._tracelogUrl ?? '';
|
|
77
|
-
const originalOnReadyStateChange = xhr.onreadystatechange;
|
|
78
|
-
xhr.onreadystatechange = (ev) => {
|
|
79
|
-
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
80
|
-
const duration = Date.now() - startTime;
|
|
81
|
-
if (xhr.status === 0 || xhr.status >= 400) {
|
|
82
|
-
const statusText = xhr.statusText || 'Request Failed';
|
|
83
|
-
logging_1.debugLog.debug('NetworkHandler', 'XHR error detected', {
|
|
84
|
-
method,
|
|
85
|
-
url: normalizeUrlForTracking(url),
|
|
86
|
-
status: xhr.status,
|
|
87
|
-
statusText,
|
|
88
|
-
});
|
|
89
|
-
trackNetworkError(method, normalizeUrlForTracking(url), xhr.status, statusText, duration);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
if (originalOnReadyStateChange) {
|
|
93
|
-
return originalOnReadyStateChange.call(xhr, ev);
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
return originalXHRSend.call(this, body);
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
trackNetworkError(method, url, status, statusText, duration) {
|
|
100
|
-
const config = this.get('config');
|
|
101
|
-
if (!this.shouldSample(config?.errorSampling ?? 0.1)) {
|
|
102
|
-
logging_1.debugLog.debug('NetworkHandler', `Network error not sampled, skipping (errorSampling: ${config?.errorSampling}, method: ${method}, url: ${url})`, {
|
|
103
|
-
errorSampling: config?.errorSampling,
|
|
104
|
-
method,
|
|
105
|
-
url,
|
|
106
|
-
});
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
logging_1.debugLog.warn('NetworkHandler', `Network error tracked: ${method} ${url} (status: ${status}, statusText: ${statusText}, duration: ${duration}ms)`, { method, url, status, statusText, duration });
|
|
110
|
-
this.eventManager.track({
|
|
111
|
-
type: types_1.EventType.ERROR,
|
|
112
|
-
error_data: {
|
|
113
|
-
type: types_1.ErrorType.NETWORK_ERROR,
|
|
114
|
-
message: statusText,
|
|
115
|
-
method,
|
|
116
|
-
url,
|
|
117
|
-
status,
|
|
118
|
-
statusText,
|
|
119
|
-
duration,
|
|
120
|
-
},
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
normalizeUrlForTracking(url) {
|
|
124
|
-
try {
|
|
125
|
-
const config = this.get('config');
|
|
126
|
-
return (0, utils_1.normalizeUrl)(url, config?.sensitiveQueryParams);
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
return url;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
shouldSample(rate) {
|
|
133
|
-
return Math.random() < rate;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
exports.NetworkHandler = NetworkHandler;
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { CrossTabSessionConfig, SessionEndReason } from '../types/session.types';
|
|
2
|
-
import { StateManager } from './state.manager';
|
|
3
|
-
import { StorageManager } from './storage.manager';
|
|
4
|
-
export declare class CrossTabSessionManager extends StateManager {
|
|
5
|
-
private readonly callbacks?;
|
|
6
|
-
private readonly config;
|
|
7
|
-
private readonly storageManager;
|
|
8
|
-
private readonly broadcastChannel;
|
|
9
|
-
private readonly tabId;
|
|
10
|
-
private readonly tabInfo;
|
|
11
|
-
private readonly projectId;
|
|
12
|
-
private leaderTabId;
|
|
13
|
-
private isTabLeader;
|
|
14
|
-
private heartbeatInterval;
|
|
15
|
-
private electionTimeout;
|
|
16
|
-
private cleanupTimeout;
|
|
17
|
-
private sessionEnded;
|
|
18
|
-
private fallbackLeadershipTimeout;
|
|
19
|
-
private electionDelayTimeout;
|
|
20
|
-
private tabInfoCleanupTimeout;
|
|
21
|
-
private closingAnnouncementTimeout;
|
|
22
|
-
private leaderHealthCheckInterval;
|
|
23
|
-
private lastHeartbeatSent;
|
|
24
|
-
constructor(storageManager: StorageManager, projectId: string, config?: Partial<CrossTabSessionConfig>, callbacks?: {
|
|
25
|
-
onSessionStart?: (sessionId: string) => void;
|
|
26
|
-
onSessionEnd?: (reason: SessionEndReason) => void;
|
|
27
|
-
onTabActivity?: () => void;
|
|
28
|
-
onCrossTabConflict?: () => void;
|
|
29
|
-
} | undefined);
|
|
30
|
-
/**
|
|
31
|
-
* Initialize BroadcastChannel if supported
|
|
32
|
-
*/
|
|
33
|
-
private initializeBroadcastChannel;
|
|
34
|
-
/**
|
|
35
|
-
* Initialize the cross-tab session manager
|
|
36
|
-
*/
|
|
37
|
-
private initialize;
|
|
38
|
-
/**
|
|
39
|
-
* Check if this tab should be the session leader
|
|
40
|
-
*/
|
|
41
|
-
private tryJoinExistingSession;
|
|
42
|
-
/**
|
|
43
|
-
* Request leadership status from other tabs
|
|
44
|
-
*/
|
|
45
|
-
private requestLeadershipStatus;
|
|
46
|
-
/**
|
|
47
|
-
* Start leader election process with debouncing to prevent excessive elections
|
|
48
|
-
*/
|
|
49
|
-
private startLeaderElection;
|
|
50
|
-
/**
|
|
51
|
-
* Become the session leader
|
|
52
|
-
*/
|
|
53
|
-
private becomeLeader;
|
|
54
|
-
/**
|
|
55
|
-
* Announce session start to other tabs
|
|
56
|
-
*/
|
|
57
|
-
private announceSessionStart;
|
|
58
|
-
/**
|
|
59
|
-
* Announce leadership to other tabs
|
|
60
|
-
*/
|
|
61
|
-
private announceLeadership;
|
|
62
|
-
/**
|
|
63
|
-
* Setup fallback mechanism to ensure a leader is always elected
|
|
64
|
-
*/
|
|
65
|
-
private setupLeadershipFallback;
|
|
66
|
-
/**
|
|
67
|
-
* Setup BroadcastChannel event listeners
|
|
68
|
-
*/
|
|
69
|
-
private setupBroadcastListeners;
|
|
70
|
-
/**
|
|
71
|
-
* Handle cross-tab messages
|
|
72
|
-
*/
|
|
73
|
-
private handleCrossTabMessage;
|
|
74
|
-
/**
|
|
75
|
-
* Handle heartbeat message from another tab
|
|
76
|
-
*/
|
|
77
|
-
private handleHeartbeatMessage;
|
|
78
|
-
/**
|
|
79
|
-
* Handle session start message from another tab
|
|
80
|
-
*/
|
|
81
|
-
private handleSessionStartMessage;
|
|
82
|
-
/**
|
|
83
|
-
* Handle session end message from another tab
|
|
84
|
-
*/
|
|
85
|
-
private handleSessionEndMessage;
|
|
86
|
-
/**
|
|
87
|
-
* Handle tab closing message from another tab
|
|
88
|
-
*/
|
|
89
|
-
private handleTabClosingMessage;
|
|
90
|
-
/**
|
|
91
|
-
* Handle election request from another tab
|
|
92
|
-
*/
|
|
93
|
-
private handleElectionRequest;
|
|
94
|
-
/**
|
|
95
|
-
* Handle election response from another tab
|
|
96
|
-
*/
|
|
97
|
-
private handleElectionResponse;
|
|
98
|
-
/**
|
|
99
|
-
* Start heartbeat to keep session active
|
|
100
|
-
*/
|
|
101
|
-
private startHeartbeat;
|
|
102
|
-
/**
|
|
103
|
-
* Send heartbeat to other tabs with rate limiting to prevent flooding
|
|
104
|
-
*/
|
|
105
|
-
private sendHeartbeat;
|
|
106
|
-
/**
|
|
107
|
-
* Update tab info with current timestamp
|
|
108
|
-
*/
|
|
109
|
-
private updateTabInfo;
|
|
110
|
-
/**
|
|
111
|
-
* End session and notify other tabs
|
|
112
|
-
*/
|
|
113
|
-
endSession(reason: SessionEndReason): void;
|
|
114
|
-
/**
|
|
115
|
-
* Announce tab is closing to other tabs
|
|
116
|
-
*/
|
|
117
|
-
private announceTabClosing;
|
|
118
|
-
/**
|
|
119
|
-
* Announce session end to other tabs
|
|
120
|
-
*/
|
|
121
|
-
private announceSessionEnd;
|
|
122
|
-
/**
|
|
123
|
-
* Get current session ID
|
|
124
|
-
*/
|
|
125
|
-
getSessionId(): string;
|
|
126
|
-
/**
|
|
127
|
-
* Get current tab ID
|
|
128
|
-
*/
|
|
129
|
-
getTabId(): string;
|
|
130
|
-
/**
|
|
131
|
-
* Check if this tab is the session leader
|
|
132
|
-
*/
|
|
133
|
-
isLeader(): boolean;
|
|
134
|
-
/**
|
|
135
|
-
* Get current session context from storage
|
|
136
|
-
*/
|
|
137
|
-
private getStoredSessionContext;
|
|
138
|
-
/**
|
|
139
|
-
* Store session context to localStorage
|
|
140
|
-
*/
|
|
141
|
-
private storeSessionContext;
|
|
142
|
-
/**
|
|
143
|
-
* Clear stored session context
|
|
144
|
-
*/
|
|
145
|
-
private clearStoredSessionContext;
|
|
146
|
-
/**
|
|
147
|
-
* Store tab info to localStorage
|
|
148
|
-
*/
|
|
149
|
-
private storeTabInfo;
|
|
150
|
-
/**
|
|
151
|
-
* Clear tab info from localStorage
|
|
152
|
-
*/
|
|
153
|
-
private clearTabInfo;
|
|
154
|
-
/**
|
|
155
|
-
* Check if BroadcastChannel is supported
|
|
156
|
-
*/
|
|
157
|
-
private isBroadcastChannelSupported;
|
|
158
|
-
/**
|
|
159
|
-
* Get session timeout considering cross-tab activity
|
|
160
|
-
*/
|
|
161
|
-
getEffectiveSessionTimeout(): number;
|
|
162
|
-
/**
|
|
163
|
-
* Update session activity from any tab
|
|
164
|
-
*/
|
|
165
|
-
updateSessionActivity(): void;
|
|
166
|
-
/**
|
|
167
|
-
* Cleanup resources
|
|
168
|
-
*/
|
|
169
|
-
destroy(): void;
|
|
170
|
-
}
|