@oneteme/inspect-ng-collector 1.3.4-beta.1 → 1.3.4-beta.2
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.
|
@@ -375,12 +375,14 @@ class SessionManager {
|
|
|
375
375
|
user: getOrCall(this._techConfig.user),
|
|
376
376
|
start: now,
|
|
377
377
|
location: url,
|
|
378
|
-
|
|
378
|
+
eventMask: 0,
|
|
379
|
+
status: 200,
|
|
379
380
|
};
|
|
380
381
|
this.currentSessionCallBack = {
|
|
381
382
|
'@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,
|
|
382
383
|
id: id,
|
|
383
|
-
|
|
384
|
+
eventMask: 0,
|
|
385
|
+
status: 200
|
|
384
386
|
};
|
|
385
387
|
}
|
|
386
388
|
return this.currentSession;
|
|
@@ -442,13 +444,13 @@ class SessionManager {
|
|
|
442
444
|
}
|
|
443
445
|
traceSessionMaskUpdate(mask) {
|
|
444
446
|
const req = this.getCurrentSessionCallBack(s => {
|
|
445
|
-
if ((s.
|
|
446
|
-
s.
|
|
447
|
+
if ((s.eventMask & mask) !== mask) {
|
|
448
|
+
s.eventMask |= mask;
|
|
447
449
|
dispatchTraces({
|
|
448
450
|
"@type": TRACE_TYPE_SESSION_MASK_UPDATE,
|
|
449
451
|
id: s.id,
|
|
450
452
|
main: true,
|
|
451
|
-
mask: s.
|
|
453
|
+
mask: s.eventMask
|
|
452
454
|
});
|
|
453
455
|
}
|
|
454
456
|
return { sessionId: s.id };
|
|
@@ -478,7 +480,7 @@ function sessionManager(tech) {
|
|
|
478
480
|
WIN["inspect-session-manager"] = SessionManager._instance;
|
|
479
481
|
}
|
|
480
482
|
|
|
481
|
-
const TRACE_HEADER = '
|
|
483
|
+
const TRACE_HEADER = 'Inspect-Trace-Id';
|
|
482
484
|
class RestRequestMonitor {
|
|
483
485
|
constructor() {
|
|
484
486
|
this.start = dateNow();
|
|
@@ -789,7 +791,7 @@ class EventTraceScheduledDispatcherService {
|
|
|
789
791
|
return EMPTY_ARRAY;
|
|
790
792
|
}
|
|
791
793
|
console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);
|
|
792
|
-
if (res.status === 429 || res.status >= 500) {
|
|
794
|
+
if (res.status === 429 || (res.status >= 500 && res.headers?.get('Inspect-Trace-Retry') === '1')) {
|
|
793
795
|
console.warn('Dispatch failed with status', res.status, 'retrying...');
|
|
794
796
|
this.lastPacket = packet;
|
|
795
797
|
}
|
|
@@ -905,7 +907,7 @@ function initUserActionMonitor() {
|
|
|
905
907
|
globalThis.addEventListener('scroll', scrollHandler, true); // do costum handler with timeout
|
|
906
908
|
globalThis.addEventListener('resize', resizeHandler, true);
|
|
907
909
|
document.addEventListener('visibilitychange', visibilityHandler);
|
|
908
|
-
document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', () => { addActionUser('DOMContentLoaded', null
|
|
910
|
+
document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', () => { addActionUser('DOMContentLoaded', null); }, { once: true }) : addActionUser('DOMContentLoaded', null);
|
|
909
911
|
traceBrowserConfig();
|
|
910
912
|
}
|
|
911
913
|
catch (e) {
|
|
@@ -920,11 +922,11 @@ function globalHandler(event) {
|
|
|
920
922
|
return;
|
|
921
923
|
} */
|
|
922
924
|
const value = target.attributes.getNamedItem("data-inspect-track")?.value;
|
|
923
|
-
|
|
924
|
-
const location = target.attributes.getNamedItem("data-inspect-location")?.value;
|
|
925
|
-
if (!value || !scope) {
|
|
925
|
+
if (!value) {
|
|
926
926
|
return;
|
|
927
927
|
}
|
|
928
|
+
const scope = target.attributes.getNamedItem("data-inspect-scope")?.value;
|
|
929
|
+
const location = target.attributes.getNamedItem("data-inspect-location")?.value;
|
|
928
930
|
if (eventType === 'click') {
|
|
929
931
|
const pendingClick = clickTimers.get(target);
|
|
930
932
|
if (pendingClick) {
|
|
@@ -987,10 +989,10 @@ function resizeHandler() {
|
|
|
987
989
|
// Signed delta: '+' when zooming in, '-' when zooming out.
|
|
988
990
|
const delta = Math.round((currentRatio - previousRatio) * 100);
|
|
989
991
|
const sign = delta > 0 ? '+' : '';
|
|
990
|
-
addActionUser('zoom', `${sign}${delta}
|
|
992
|
+
addActionUser('zoom', `${sign}${delta}%`);
|
|
991
993
|
}
|
|
992
994
|
else {
|
|
993
|
-
addActionUser('resize', `${innerWidth}x${innerHeight}
|
|
995
|
+
addActionUser('resize', `${innerWidth}x${innerHeight}`);
|
|
994
996
|
}
|
|
995
997
|
globalBrowserValues.c = currentRatio;
|
|
996
998
|
}, RESIZE_IDLE_DELAY);
|
|
@@ -1001,11 +1003,11 @@ function scrollHandler() {
|
|
|
1001
1003
|
}
|
|
1002
1004
|
Timer = setTimeout(() => {
|
|
1003
1005
|
Timer = undefined;
|
|
1004
|
-
addActionUser('scroll', null
|
|
1006
|
+
addActionUser('scroll', null); // todo to enhance ( vertical / horizontal )
|
|
1005
1007
|
}, SCROLL_IDLE_DELAY);
|
|
1006
1008
|
}
|
|
1007
1009
|
function visibilityHandler() {
|
|
1008
|
-
addActionUser(document.hidden ? 'DOC_HIDDEN' : 'DOC_VISIBLE', null
|
|
1010
|
+
addActionUser(document.hidden ? 'DOC_HIDDEN' : 'DOC_VISIBLE', null);
|
|
1009
1011
|
}
|
|
1010
1012
|
// Debounced; only the selection length is reported, never its content (privacy).
|
|
1011
1013
|
function selectionHandler() {
|
|
@@ -1016,7 +1018,7 @@ function selectionHandler() {
|
|
|
1016
1018
|
selectionTimer = undefined;
|
|
1017
1019
|
const length = document.getSelection ? String(document.getSelection()).length : 0;
|
|
1018
1020
|
if (length > 0) {
|
|
1019
|
-
addActionUser('select', `length=${length}
|
|
1021
|
+
addActionUser('select', `length=${length}`);
|
|
1020
1022
|
}
|
|
1021
1023
|
}, SELECTION_IDLE_DELAY);
|
|
1022
1024
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/session-manager.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/rest-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-trace-scheduled-dispatcher.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/user-action.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/navigation.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/resource-usage.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/log.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/local-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/traceable-stage.decorator.ts","../../../../projects/oneteme/inspect-ng-collector/src/public-api.ts","../../../../projects/oneteme/inspect-ng-collector/src/oneteme-inspect-ng-collector.ts"],"sourcesContent":["type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"REPORT\";\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\nexport enum TraceType { MAIN_SES = 1, HTTP_REQ = 10, LCL_RQT = 99}\nexport enum Mask { LOCAL = 1, REST = 4, EVENT = 1024 }\nexport const TRACE_TYPE_LOG = '00';\nexport const TRACE_TYPE_RESOURCE_USAGE = '01';\nexport const TRACE_TYPE_COLLECTOR_CONFIGURATION = '02';\nexport const TRACE_TYPE_SESSION_MASK_UPDATE = '03';\nexport const TRACE_TYPE_EXCEPTION = '05';\nexport const TRACE_TYPE_MAIN_SESSION = '10';\nexport const TRACE_TYPE_MAIN_SESSION_CALLBACK = '11';\nexport const TRACE_TYPE_LOCAL_REQUEST = '110';\nexport const TRACE_TYPE_LOCAL_REQUEST_CALLBACK = '111';\nexport const TRACE_TYPE_REST_REQUEST = '120';\nexport const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';\nexport const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';\nexport const TRACE_TYPE_SESSION_EVENT = '06';\nexport const TRACE_TYPE_ADDITIONAL_VALUES = '400';\n\n\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport interface InstanceEnvironment {\n id: string;\n name?: string;\n address?: string;\n version?: string;\n env?: string;\n os?: string;\n re?: string;\n user?: string;\n type?: InstantType;\n instant?: number;\n collector?: string;\n resource: MachineResource;\n additionalProperties?: { [key: string]: any };\n configuration?: { [key: string]: any };\n namespace: string;\n}\n\nexport interface EventTrace { }\n\nexport interface BrowserConfig extends EventTrace {\n '@type': typeof TRACE_TYPE_ADDITIONAL_VALUES\n deviceDisplayResolution?:string\n deviceOrientation?:string;\n deviceConnectivity?:string;\n windowViewportBounds?:string;\n windowZoomLevel?:string;\n userLanguage?:string;\n userTheme?:string;\n navigationReferrer?:string;\n saveData?:boolean\n}\n\nexport interface MainSession extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION;\n id: UUID;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n requestMask: number;\n}\n\nexport interface MainSessionCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;\n id: UUID;\n end?: number;\n requestMask: number;\n status?: number;\n}\n\nexport interface SessionMaskUpdate {\n '@type': typeof TRACE_TYPE_SESSION_MASK_UPDATE;\n id: UUID;\n main: boolean;\n mask: number;\n}\n\nexport interface RestRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST;\n id: UUID;\n method: string;\n protocol: string;\n host: string;\n port: number;\n path: string;\n query: string;\n contentType?: string;\n authScheme?: string;\n dataSize: number;\n user?: string;\n start: number;\n sessionId?: UUID;\n}\n\nexport interface RestRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST_CALLBACK;\n id: UUID;\n status?: number;\n end?: number;\n dataSize?: number;\n linked?: boolean;\n contentType?: string;\n bodyContent?: string;\n}\n\nexport interface HttpRequestStage extends EventTrace {\n '@type': typeof TRACE_TYPE_HTTP_REQUEST_STAGE;\n name: string;\n start: number;\n end?: number;\n requestId: string;\n}\n\nexport interface LocalRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST;\n id: UUID;\n name: string;\n location: string;\n user?: string;\n start: number;\n sessionId: UUID;\n}\n\nexport interface LocalRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST_CALLBACK;\n id: UUID;\n end: number;\n status: number;\n}\n\nexport interface ExceptionTrace extends EventTrace {\n '@type': typeof TRACE_TYPE_EXCEPTION;\n type?:string;\n message?: string;\n stackTraceRows?: StackTraceRow[];\n traceType: number;\n //cause?: ExceptionTrace;\n traceId?: UUID;\n offset: number;\n}\n\nexport interface StackTraceRow extends EventTrace{\n className?: string;\n methodName?: string;\n lineNumber?: number;\n}\n\nexport interface SessionEvent extends EventTrace {\n '@type': typeof TRACE_TYPE_SESSION_EVENT;\n type: string;\n instant: number;\n value?: string;\n location?: string;\n scope?: string;\n sessionId?: UUID;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n message: string;\n stackTraceRows?: StackTraceRow[];\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: number;\n availableProcessors?: number;\n}\n\nexport interface MachineRessourceUsage extends EventTrace {\n '@type': typeof TRACE_TYPE_RESOURCE_USAGE;\n instant: number;\n commitedHeap: number;\n usedHeap: number;\n}\n","import {\n dateNow,\n ExceptionTrace,\n InstanceEnvironment,\n StackTraceRow,\n TRACE_TYPE_COLLECTOR_CONFIGURATION, TRACE_TYPE_EXCEPTION, TraceType,\n UUID\n} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\nimport {VERSION} from \"@angular/core\";\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\nconst DEFAULT_QUEUE_CAPACITY = 1000;\nconst DEFAULT_INTERVAL = 60_000;\n\n\nexport interface CollectorConfig {\n collector: {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n additionalProperties?: () => { [key: string]: any };\n application: {\n name: Provider<string>;\n namespace: Provider<string>;\n version?: Provider<string>;\n env: Provider<string>;\n user?: Provider<string>;\n branche?: Provider<string>;\n hash?: Provider<string>;\n };\n scheduling?: {\n queueCapacity?: number; // default: 1000\n interval?: number; // default: 60s, in milliseconds\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>;\n };\n };\n httpRequest?: {\n excludes?: {\n host?: string[];\n };\n };\n resources?: {\n enabled?: boolean; // default: false\n };\n analytics?: {\n enabled?: boolean; // default: false\n };\n logger?: {\n enabled?: boolean; // default: false\n };\n reporter?: {\n enabled?: boolean; // default: false\n }\n storage?: {\n enabled: boolean; // default: false\n };\n };\n tracing: {\n remote: {\n '@type'?: string;\n host: string; // default: 'localhost'\n token?: Provider<string>;\n retentionMaxAge?: {\n audit?: number;\n diagnostics?: number;\n };\n };\n };\n };\n}\n\nexport interface TechnicalConf {\n user?: Provider<string>;\n queueCapacity: number;\n interval: number;\n instanceApi: string;\n sessionApi: string;\n exclude?: RegExp[];\n hostExcludes?: string[];\n debugMode: boolean;\n analytics: boolean;\n resources: boolean;\n storage: boolean;\n logger: boolean;\n reporter: boolean;\n namespaceHeader: string;\n enabled: boolean;\n}\n\nexport function getOrCall<T>(o?: Provider<T>): T | undefined {\n return typeof o === \"function\" ? (o as () => T)() : o;\n}\n\nexport function matchRegex(v: string | undefined, name: string, pattern: RegExp, defaultValue?: string) {\n if(v && pattern.exec(v)){\n return v;\n }\n if(!defaultValue){\n if(v != undefined){\n throw new Error(`bad value ${name}=${v}, pattern=${pattern}`);\n }else {\n throw new Error(`${name} property is required`);\n }\n }\n return defaultValue;\n}\n\nexport function requirePostitiveValue(v: number | undefined, name: string, defaultValue:number){\n if(v && v > 0) {\n return v;\n }\n if(v == undefined){\n return defaultValue;\n }\n throw new Error(`bad value ${name}=${v} <= 0`);\n}\n\nexport function require(v: string | undefined, name: string){\n if(v != undefined){\n return v;\n }\n throw new Error(`${name} property is required`);\n}\n\nexport function adaptedConfig(conf: CollectorConfig) {\n const collector = conf.collector ?? {};\n const application = collector.application;\n const remote = collector.tracing?.remote;\n const pathExcludes = getOrCall<RegExp[]>(collector.monitoring?.httpRoute?.excludes?.path);\n const { token: _token, ...publicRemote } = remote ?? {};\n\n return {\n collector: {\n ...collector,\n additionalProperties: collector.additionalProperties?.(),\n application: application ? {\n ...application,\n name: getOrCall<string>(application.name),\n namespace: getOrCall<string>(application.namespace),\n version: getOrCall<string>(application.version),\n env: getOrCall<string>(application.env),\n user: getOrCall<string>(application.user),\n branche: getOrCall<string>(application.branche),\n hash: getOrCall<string>(application.hash)\n } : undefined,\n scheduling: {\n ...collector.scheduling,\n interval: (collector.scheduling?.interval ?? DEFAULT_INTERVAL) / 1000,\n queueCapacity: collector.scheduling?.queueCapacity ?? DEFAULT_QUEUE_CAPACITY\n },\n monitoring: {\n ...collector.monitoring,\n ...(collector.monitoring?.httpRoute ? {\n httpRoute: {\n ...collector.monitoring.httpRoute,\n excludes: {\n ...collector.monitoring.httpRoute.excludes,\n ...(pathExcludes ? { path: pathExcludes.map(regex => regex.source) } : {})\n }\n }\n } : {})\n },\n tracing: {\n ...collector.tracing,\n remote: {\n ...publicRemote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge: {\n audit: (remote?.retentionMaxAge?.audit ?? 7) * 60 * 60 * 24,\n diagnostics: (remote?.retentionMaxAge?.diagnostics ?? 10) * 60 * 60 * 24\n }\n }\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const collector = conf.collector;\n const application = collector?.application;\n const remote = collector?.tracing?.remote;\n const host = matchRegex(getOrCall<string>(remote?.host), \"host\", HOST_PATERN, \"http://localhost\");\n return {\n user: getOrCall<string>(application?.user),\n queueCapacity: requirePostitiveValue(getOrCall<number>(collector?.scheduling?.queueCapacity), \"queueCapacity\", DEFAULT_QUEUE_CAPACITY),\n interval: requirePostitiveValue(getOrCall<number>(collector?.scheduling?.interval), \"interval\", DEFAULT_INTERVAL),\n instanceApi: new URL('v5/trace/instance', host).href,\n sessionApi : new URL(`v5/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(collector?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: collector?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!collector?.debugMode,\n analytics: !!collector?.monitoring?.analytics?.enabled,\n resources: !!collector?.monitoring?.resources?.enabled,\n storage: !!collector?.monitoring?.storage?.enabled,\n logger: !!collector?.monitoring?.logger?.enabled,\n reporter: !!collector?.monitoring?.reporter?.enabled,\n namespaceHeader: \"basic \" + btoa(`${require(getOrCall<string>(application?.namespace), 'configuration.collector.application.namespace')}:${getOrCall<string>(remote?.token) ?? \"\"}`),\n enabled: !!collector?.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n\n const collector = conf.collector;\n const application = collector?.application;\n const branche = getOrCall<string>(application?.branche);\n const hash = getOrCall<string>(application?.hash);\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(application?.name), 'configuration.collector.application.name'),\n version: getOrCall<string>(application?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(application?.env), 'configuration.collector.application.env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.4\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined,\n availableProcessors: navigator.hardwareConcurrency},\n additionalProperties: {\n ...collector?.additionalProperties?.(),\n ...(branche !== undefined ? { branche } : {}),\n ...(hash !== undefined ? { hash } : {}),\n 'user.locale': navigator.language + '~' + Intl.DateTimeFormat().resolvedOptions().timeZone,\n 'angular.version': VERSION.full\n },\n configuration: adaptedConfig(conf),\n namespace: require(getOrCall<string>(application?.namespace), 'configuration.collector.application.namespace'),\n }\n}\n\nfunction getClientID() {\n let cid = localStorage.getItem(\"jarvis.inspect.cid\");\n if (!cid) {\n localStorage.setItem(\"jarvis.inspect.cid\", cid = crypto.randomUUID());\n }\n return cid;\n}\n\nfunction detectOs() {\n try {\n let versionMatch, version;\n const agent = globalThis.navigator.userAgent.toLowerCase() //TODO see also https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `Windows ${version}`;\n case (/linux/.test(agent)):\n return 'Linux';\n\n case (/macintosh/.test(agent)):\n versionMatch = /mac os x (\\d+[._]\\d+[._]\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n dispatchReport(\"detectOs\", e) ;\n }\n return undefined;\n}\n\nfunction detectBrowser() {\n try {\n const agent = globalThis.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.includes('edg'):\n return 'Edge';\n case agent.includes('opr'):\n return 'Opera';\n case agent.includes('chrome'):\n return 'Chrome';\n case agent.includes('firefox'):\n return 'Firefox';\n case agent.includes('safari'):\n return 'Safari';\n case agent.includes('msie'):\n return 'IE';\n }\n }\n catch (e) {\n dispatchReport(\"detectBrowser\", e)\n }\n return undefined;\n}\n\nexport function refreshConfig(id: string, tech: TechnicalConf) {\n const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;\n tech.sessionApi = tech.sessionApi.replace(uuidRegex, id);\n return id;\n}\n\nexport function createException( error: Error | string | object, traceId: UUID | undefined, traceType: TraceType, parseStack:boolean=false,): ExceptionTrace | undefined {\n try{\n const isError = error instanceof Error;\n let message: string | undefined;\n if (typeof error === \"string\") {\n message = error;\n } else if (isError) {\n message = error.message;\n } else {\n message = JSON.stringify(error);\n }\n\n if (isError) {\n return {\n '@type': TRACE_TYPE_EXCEPTION,\n type: isError ? error.name : undefined,\n message,\n stackTraceRows: parseStack ? parseStackTrace(error.stack) : undefined,\n traceId,\n traceType,\n offset: dateNow()\n }\n } else {\n return {\n '@type': TRACE_TYPE_EXCEPTION,\n type: isError ? error.name : undefined,\n message,\n stackTraceRows: parseStack ? parseStackTrace(undefined) : undefined,\n traceId,\n traceType,\n offset: dateNow()\n }\n }\n }catch(e){\n dispatchReport(\"createException\", e)\n }\n return undefined;\n}\n\nexport function parseStackTrace(stack?: string): StackTraceRow[] | undefined {\n try {\n if (!stack) {\n return undefined;\n }\n const rows = stack.split('\\n').slice(1).flatMap(line => {\n const match = /^at\\s+(?:(.*?)\\s+\\()?(.+):(\\d+):(\\d+)\\)?$/.exec(line.trim());\n if (!match) {\n return [];\n }\n\n return [{\n className: match[2],\n methodName: match[1] || undefined,\n lineNumber: Number(match[3])\n }];\n });\n return rows.length > 0 ? rows : undefined;\n }catch (e) {\n dispatchReport(\"parseStackTrace\", e)\n }\n return undefined;\n}\n","import {\n dateNow,\n EventTrace,\n LogEntry,\n TRACE_TYPE_LOG,\n SessionEvent,\n TRACE_TYPE_SESSION_EVENT\n} from \"./trace.model\";\nimport {parseStackTrace} from \"./configuration\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\nlet reporterEnabled = false;\n\nexport const WIN: any = globalThis;\nWIN[\"event-bus\"] = eventTarget;\n\nexport function configureReporter(enabled: boolean): void {\n reporterEnabled = enabled;\n}\n\nexport function dispatchReport(message: string, error?: any) : void {\n if (!reporterEnabled) {\n return;\n }\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n instant: dateNow(),\n message : `${message} ${error && JSON.stringify(error)}`,\n stackTraceRows: parseStackTrace(error.stack? error.stack : undefined),\n } as LogEntry);\n}\n\n\nexport function dispatchLog(type: string, value: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_EVENT,\n type: type,\n value: value,\n instant: dateNow(),\n //location: null,\n sessionId: sessionId\n } as SessionEvent);\n}\n\nexport function dispatchTraces(...traces: EventTrace[]): void {\n eventTarget.dispatchEvent(new CustomEvent(TRACE, { detail: { traces } }));\n}\n\nexport function dispatchExport(): void {\n eventTarget.dispatchEvent(new CustomEvent(EXPORT));\n}\n\nexport function dispatchReload(): void {\n eventTarget.dispatchEvent(new CustomEvent(RELOAD));\n}\n\nexport function dispatchShutown(): void {\n eventTarget.dispatchEvent(new CustomEvent(SHUTDOWN));\n}\n\nexport function addTraceListener(fn : EventListener): () => void {\n eventTarget.addEventListener(TRACE, fn);\n return () => eventTarget.removeEventListener(TRACE, fn);\n}\n\nexport function addExportListener(fn : EventListener): void {\n eventTarget.addEventListener(EXPORT, fn);\n}\n\nexport function addReloadListener(fn : EventListener): () => void {\n eventTarget.addEventListener(RELOAD, fn);\n return () => eventTarget.removeEventListener(RELOAD, fn);\n}\n\nexport function addShutdownListener(fn : EventListener): () => void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n return () => eventTarget.removeEventListener(SHUTDOWN, fn);\n}\n","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n MainSession,\n MainSessionCallBack,\n Mask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE, UUID\n} from \"./trace.model\";\nimport {getOrCall, TechnicalConf} from \"./configuration\";\n\nexport class SessionManager {\n\n static _instance: SessionManager;\n constructor(private readonly _techConfig: TechnicalConf) {\n }\n\n currentSession?: MainSession;\n currentSessionCallBack?: MainSessionCallBack;\n private readonly validatedSessions = new WeakSet<MainSession>();\n\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string): MainSession | undefined {\n const now = dateNow();\n if(this.currentSessionCallBack){\n this.endSession(now);\n }\n if (url) {\n const id = crypto.randomUUID();\n this.currentSession = {\n '@type': TRACE_TYPE_MAIN_SESSION,\n id: id,\n type: \"VIEW\",\n user: getOrCall<string>(this._techConfig.user),\n start: now,\n location: url,\n requestMask: 0,\n };\n this.currentSessionCallBack = {\n '@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,\n id: id,\n requestMask: 0\n }\n }\n return this.currentSession\n }\n\n private endSession(end : number){\n this.getCurrentSessionCallBack(call =>{\n call.end = end;\n dispatchTraces(call);\n });\n this.currentSessionCallBack = undefined;\n }\n\n validateSession(update: boolean = true, timeout: number = Number.NaN) {\n const s = this.currentSession;\n if (Number.isNaN(timeout)) {\n this.updateSession(s, false);\n } else {\n setTimeout(() => this.updateSession(s, true), 0);\n }\n }\n\n private updateSession(session: MainSession | undefined, update: boolean = true) {\n if (session) {\n if (this.validatedSessions.has(session)) return;\n this.validatedSessions.add(session);\n if(update){\n session.name = document.title;\n session.location = document.URL;\n }else {\n session.name = '<startup>';\n }\n if (!this._techConfig.exclude?.some((e: any) => e.test(session?.location))) {\n dispatchTraces(session)\n }\n if(session === this.currentSession){\n this.currentSession = undefined;\n }\n }\n else{\n dispatchReport('updateSession', 'no active session');\n }\n }\n\n getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any) {\n if (this.currentSessionCallBack) {\n return fn(this.currentSessionCallBack);\n }\n dispatchReport('getCurrentSessionCallBack', 'no active session');\n return undefined;\n }\n\n currentSessionID(): UUID | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n markSessionFailed(){\n return this.getCurrentSessionCallBack(s => {\n s.status = 400;\n return s.id\n })\n }\n traceSessionMaskUpdate(mask: Mask){\n const req = this.getCurrentSessionCallBack(s=>{\n if ((s.requestMask & mask) !== mask) {\n s.requestMask |= mask;\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_MASK_UPDATE,\n id: s.id,\n main: true,\n mask: s.requestMask\n } as SessionMaskUpdate);\n }\n return {sessionId:s.id};\n });\n return req || {};\n }\n\n\n\n info(message: string) {\n this.log(\"INFO\", message);\n }\n\n warn(message: string) {\n this.log(\"WARN\", message);\n }\n\n error(message: string) {\n this.log(\"ERROR\", message);\n }\n\n private log(type: string, message: string){\n if (message) {\n\n this.getCurrentSessionCallBack(s=> dispatchLog(type, message, this.traceSessionMaskUpdate(Mask.EVENT).sessionId)); // update mask\n }\n }\n}\n\nexport function sessionlogger(): SessionManager {\n return SessionManager.instance;\n}\n\nexport function sessionManager(tech: TechnicalConf){\n SessionManager._instance = new SessionManager(tech);\n WIN[\"inspect-session-manager\"] = SessionManager._instance;\n}\n","import {\n dateNow,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n Mask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID, ExceptionTrace, TraceType,\n} from \"./trace.model\";\nimport { dispatchTraces, dispatchReport } from \"./event-bus\";\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse, HttpResponseBase } from \"@angular/common/http\";\nimport { SessionManager } from \"./session-manager.service\";\nimport {createException} from \"./configuration\";\n\nexport const TRACE_HEADER = 'x-tracert';\n\nexport class RestRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(restRequest: HttpRequest<any>) {\n const url = new URL(restRequest.urlWithParams, globalThis.location.origin);\n const auth_user = extractAuthSchemeAnduser(restRequest.headers);\n dispatchTraces({...SessionManager.instance.traceSessionMaskUpdate(Mask.REST),\n \"@type\": TRACE_TYPE_REST_REQUEST,\n id: this.id,\n method: restRequest.method,\n protocol: url.protocol.slice(0, -1),\n host: url.hostname,\n port: url.port? Number(url.port) : 0,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: restRequest.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n dataSize: sizeOf(restRequest.body),\n start: this.start,\n } as RestRequest);\n }\n\n postProcess(response: HttpResponseBase | null, error: HttpErrorResponse | null) {\n const end = dateNow();\n const callback: RestRequestCallBack = {\n \"@type\": TRACE_TYPE_REST_REQUEST_CALLBACK,\n id: this.id,\n dataSize: -1,\n linked: false,\n end: end\n }\n let status: number = 0, exception!: ExceptionTrace | undefined;\n\n // HttpResponseBase couvre à la fois HttpResponse (succès) et HttpErrorResponse (erreur HTTP)\n if (response) {\n status = response.status;\n callback.dataSize = response instanceof HttpResponse ? sizeOf(response.body) : -1;\n callback.contentType = extractContentType(response.headers);\n callback.linked = assertSessionID(this.id, response.headers);\n }\n\n // Erreur réseau/annulation\n if (error) {\n status = retrieveStatus(error);\n exception = createException(error, this.id, TraceType.HTTP_REQ, false);\n callback.bodyContent = JSON.stringify(error.error);\n callback.dataSize = sizeOf(error.error);\n callback.contentType = extractContentType(error.headers);\n callback.linked = assertSessionID(this.id, error.headers);\n if(exception){\n dispatchTraces(exception)\n }\n }\n\n callback.status = status;\n dispatchTraces(callback, {\n \"@type\": TRACE_TYPE_HTTP_REQUEST_STAGE,\n name: \"PROCESS\",\n start: this.start, // use request\n end: end,\n order: 0,\n exception: exception,\n requestId: this.id\n } as HttpRequestStage);\n }\n}\n\nfunction retrieveStatus(error: any): number {\n if(!error.status){\n if(error.name === 'TimeoutError')\n return 3;\n }\n return error.status || 0 ;\n}\n\nfunction assertSessionID(id: string, headers: HttpHeaders) { //browser cache !?\n return headers?.get(TRACE_HEADER) == id;\n}\n\nfunction extractAuthSchemeAnduser(headers: any): { user: string | null, authScheme: string | null } {\n const authHeader = headers?.get('authorization');\n if (!authHeader) {\n return { authScheme: null, user: null };\n }\n\n const [scheme, credentials] = authHeader.split(' ');\n\n if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {\n return { authScheme: null, user: null };\n }\n\n return {\n authScheme: scheme,\n user: extractUser(scheme as 'Basic' | 'Bearer', credentials) ?? null\n };\n}\n\nfunction extractUser(scheme: 'Basic' | 'Bearer', authorization: string) {\n try {\n switch (scheme) {\n case \"Basic\":\n return atob(authorization).split(':')[0] || undefined;\n case \"Bearer\": {\n const payloadMatch = new RegExp(/^[^.]+\\.([^.]+)\\.[^.]+$/).exec(authorization);\n if (payloadMatch?.[1]) {\n return JSON.parse(atob(payloadMatch[1])).sub;\n }\n dispatchReport('extractUser', 'Invalid Bearer token format');\n return undefined;\n }\n default:\n dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);\n }\n } catch (e) {\n dispatchReport('extractUser', e);\n }\n return undefined;\n}\n\nfunction extractContentType(headers: any): string | undefined {\n try {\n if (headers?.has('Content-Type')) {\n return headers.get('Content-Type');\n }\n } catch (err) {\n dispatchReport('extractContentType', err);\n }\n return undefined;\n}\n\nfunction sizeOf(body: any): number {\n if (body) {\n try {\n return new Blob([JSON.stringify(body)]).size;\n }\n catch (e) {\n dispatchReport('sizeOf', e);\n }\n }\n return -1;\n}\n","import { Injectable, Inject, InjectionToken } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse, HttpResponseBase } from '@angular/common/http';\nimport { finalize, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators'\nimport { RestRequestMonitor, TRACE_HEADER } from \"./rest-request.monitor\";\nimport { TechnicalConf} from \"./configuration\";\nimport { InstanceEnvironment } from \"./trace.model\";\n\nexport const COLLECTOR_CONFIG = new InjectionToken<TechnicalConf>('COLLECTOR_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(@Inject(COLLECTOR_CONFIG) private readonly techConfig: {tech: TechnicalConf, instance: InstanceEnvironment}) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const monitor = new RestRequestMonitor();\n monitor.preProcess(req);\n\n const host = new URL(req.url, window.location.origin).host;\n if (!this.techConfig.tech.hostExcludes?.some((e: any) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers\n req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });\n }\n\n let response: HttpResponseBase | null = null;\n let error: HttpErrorResponse | null = null;\n\n return next.handle(req).pipe(tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n response = event;\n }\n //todo autres types d'événements (UploadProgress, DownloadProgress, etc.) ignorés pour les traces\n },\n error: (err: HttpErrorResponse) => {\n error = err;\n }\n }),\n finalize(() => {\n // Si pas de réponse et pas d'erreur capturé, la requête a été annulée\n if (!response && !error) {\n error = new HttpErrorResponse({\n error: 'The request was cancelled before completion',\n status: 0,\n statusText: 'Cancelled',\n url: req.url\n });\n }\n monitor.postProcess(response, error);\n }));\n }\n}\n","import { ErrorHandler, Injectable } from \"@angular/core\";\nimport { SessionManager } from \"./session-manager.service\";\nimport {dispatchReport, dispatchTraces} from \"./event-bus\";\nimport {createException} from \"./configuration\";\nimport {TraceType} from \"./trace.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n let ex = createException(error, SessionManager.instance.markSessionFailed(), TraceType.MAIN_SES, true)\n if(ex){\n dispatchTraces(ex);\n }\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n }\n}\n","import { interval, startWith, tap, Subscription } from \"rxjs\";\nimport { EventTrace, InstanceEnvironment } from \"./trace.model\";\nimport { dispatchExport, addTraceListener, addShutdownListener, dispatchReport } from \"./event-bus\";\nimport {TechnicalConf} from \"./configuration\";\n\nconst EMPTY_ARRAY : EventTrace[] = <[]>Object.freeze([]);\n\nclass EventTraceScheduledDispatcherService {\n\n static _instance: EventTraceScheduledDispatcherService;\n\n readonly subscription: Subscription\n private readonly removeTraceListener: () => void;\n private readonly removeShutdownListener: () => void;\n readonly traceQueue: EventTrace[] = [];\n lastPacket: { readonly body: string; readonly sequence: number; readonly size: number } | null = null;\n dispatchAttempts: number = 0\n dispatchSequence: number = 0\n dispatching: boolean = false;\n private inFlightDispatch?: Promise<EventTrace[]>;\n instanceDispatched: boolean = false;\n instanceDispatching: boolean = false; // guard contre les appels concurrents\n wasDestroyed : boolean = false;\n instance?: InstanceEnvironment ;\n constructor(private readonly _techConfig: TechnicalConf) {\n this.subscription = interval(_techConfig.interval)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (!this.dispatching && !this.wasDestroyed && this.instance) {\n this.dispatching = true;\n dispatchExport();\n this.dispatch()\n .then(arr => this.revertQueueSize(arr))\n .catch(() => {})\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n this.removeTraceListener = addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n this.removeShutdownListener = addShutdownListener(() => this.destroy());\n }\n\n appendTrace(events: EventTrace[]) {\n if(!this.wasDestroyed){\n events?.forEach(event => this.traceQueue.push(event));\n }\n }\n\n trace(instance: InstanceEnvironment) {\n this.instance = { ...instance };\n this.updateInstance(); // Dispatch immédiatement au lieu d'attendre l'intervalle\n }\n\n private updateInstance(): Promise<void> {\n if (this.instanceDispatched || this.instanceDispatching || this.wasDestroyed || !this.instance) {\n return Promise.resolve(); // Déjà dispatché, en cours, ou pas prêt\n }\n this.instanceDispatching = true;\n return this.dispatchInstance()\n .then(success => {\n if (success) {\n this.instanceDispatched = true;\n }else {\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n }\n })\n .finally(() => { this.instanceDispatching = false; });\n }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n if (this.instanceDispatching) return Promise.resolve(EMPTY_ARRAY); // attendre\n return this.updateInstance().then(() => {\n if (this.instanceDispatched) return this.dispatchTraces(); // seulement si confirmé\n return Promise.reject(new Error('Instance not dispatched yet'));// instance pas encore dispatchée, traces non envoyées\n });\n }\n\n dispatchTraces(destroy = false): Promise<EventTrace[]> {\n if (this.wasDestroyed && !destroy) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n if (!this.inFlightDispatch) {\n const request = this.lastPacket !== null\n ? this.dispatchPrevious(destroy && this.traceQueue.length === 0).then(() => EMPTY_ARRAY)\n : this.dispatchQueuedTraces(destroy);\n this.inFlightDispatch = request.finally(() => { this.inFlightDispatch = undefined; });\n }\n if (destroy && this.traceQueue.length > 0) {\n // L'envoi keepalive en cours garde son paquet ; seules les nouvelles traces partent ici.\n return Promise.all([this.inFlightDispatch, this.dispatchQueuedTraces(true)]).then(() => EMPTY_ARRAY);\n }\n return this.inFlightDispatch;\n }\n\n private async dispatchQueuedTraces(destroy: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return EMPTY_ARRAY;\n }\n const packet = {\n body: JSON.stringify(this.traceQueue),\n sequence: ++this.dispatchSequence,\n size: this.traceQueue.length\n };\n let uri = this._techConfig.sessionApi + \"?atm=\" + ++this.dispatchAttempts+\"&seq=\"+ packet.sequence;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: packet.body\n })\n .then(res=> {\n if (res.ok || res.status === 409) {\n this.dispatchAttempts = 0;\n return EMPTY_ARRAY;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if(res.status === 429 || res.status >= 500){\n console.warn('Dispatch failed with status', res.status, 'retrying...');\n this.lastPacket = packet;\n }\n return EMPTY_ARRAY // retry on 3XX\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n this.lastPacket = packet;\n return EMPTY_ARRAY;\n });\n }\n\n private async dispatchPrevious(destroy = false): Promise<void> {\n const packet = this.lastPacket;\n if (!packet) return;\n let uri = this._techConfig.sessionApi + \"?atm=\" + ++this.dispatchAttempts+\"&seq=\"+ packet.sequence;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: packet.body\n }).then(res => {\n if(res.ok || res.status === 409) {\n if (this.lastPacket === packet) this.lastPacket = null;\n this.dispatchAttempts = 0;\n return;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (res.status >= 500) {\n dispatchReport('EventTraceScheduledDispatcher.dispatchPrevious', res);\n }\n\n }).catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (this.lastPacket === packet) this.discardLastPacketIfQueueCapacityExceeded();\n })\n }\n\n private discardLastPacketIfQueueCapacityExceeded() {\n if ((this.lastPacket?.size ?? 0) + this.traceQueue.length > this._techConfig.queueCapacity) {\n console.warn(`Error while attempting to send ${this.lastPacket?.size} traces, giving up`);\n this.lastPacket = null;\n this.dispatchAttempts = 0;\n }\n }\n\n\n dispatchInstance(): Promise<boolean> {\n const uri = this._techConfig.instanceApi + \"?atm=\" + ++this.dispatchAttempts;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => {\n if (res.ok || res.status === 409) {\n this.dispatchAttempts = 0;\n return true;\n }\n if (res.status >= 500) {\n dispatchReport('EventTraceScheduledDispatcher.dispatchInstance', res);\n }\n return false;\n })\n .catch(() => false);\n }\n\n revertQueueSize(traces: EventTrace[]) {\n if(!this.wasDestroyed){\n this.traceQueue.unshift(...traces);\n if (this.traceQueue.length > this._techConfig.queueCapacity) {\n this.traceQueue.splice(this._techConfig.queueCapacity);\n }\n }\n }\n\n destroy() {\n if (this.wasDestroyed) {\n return;\n }\n this.subscription?.unsubscribe();\n dispatchExport(); // Collecter les dernières métriques avant de refuser les nouvelles traces.\n this.wasDestroyed = true;\n this.removeTraceListener();\n this.removeShutdownListener();\n void this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n EventTraceScheduledDispatcherService._instance?.destroy();\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService({ ...tech });\n}\n","import {\n BrowserConfig,\n dateNow,\n Mask,\n SessionEvent,\n TRACE_TYPE_ADDITIONAL_VALUES,\n TRACE_TYPE_SESSION_EVENT\n} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dispatchReport, dispatchTraces} from \"./event-bus\";\n\nconst eventHandlers: { [key: string]: (target: HTMLElement) => boolean } = {\n 'click': (target: HTMLElement) => lookUpChild(target, 1),\n}\n\nconst RESIZE_IDLE_DELAY = 250;\nconst SCROLL_IDLE_DELAY = 250;\nconst SELECTION_IDLE_DELAY = 400;\nconst CLICK_DELAY = 300;\nconst ELEMENT_EVENTS = [\n 'click', 'dblclick', 'change',\n];\nlet globalBrowserValues: any = {c: globalThis.devicePixelRatio, o: `${innerWidth}x${innerHeight}`}\nlet Timer: ReturnType<typeof setTimeout> | undefined;\nlet selectionTimer: ReturnType<typeof setTimeout> | undefined;\nconst clickTimers = new WeakMap<HTMLElement, ReturnType<typeof setTimeout>>();\n\nexport function initUserActionMonitor() {\n try {\n ELEMENT_EVENTS.forEach(type => document.addEventListener(type, globalHandler, true));\n globalThis.addEventListener('scroll', scrollHandler, true); // do costum handler with timeout\n globalThis.addEventListener('resize', resizeHandler, true);\n document.addEventListener('visibilitychange', visibilityHandler);\n document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', ()=>{addActionUser('DOMContentLoaded', null, null)}, {once: true}) : addActionUser('DOMContentLoaded', null, null);\n traceBrowserConfig();\n } catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event) {\n const target = event.target as HTMLElement;\n const eventType = event.type;\n try {\n /*if (eventHandlers.hasOwnProperty(eventType) && !eventHandlers[eventType](target)) {\n return;\n } */\n const value = target.attributes.getNamedItem(\"data-inspect-track\")?.value;\n const scope = target.attributes.getNamedItem(\"data-inspect-scope\")?.value;\n const location = target.attributes.getNamedItem(\"data-inspect-location\")?.value;\n if (!value || !scope) {\n return;\n }\n\n if (eventType === 'click') {\n const pendingClick = clickTimers.get(target);\n if (pendingClick) {\n clearTimeout(pendingClick);\n }\n const timer = setTimeout(() => {\n clickTimers.delete(target);\n addActionUser('click', value, scope, location);\n }, CLICK_DELAY);\n clickTimers.set(target, timer);\n return;\n }\n\n const pendingClick = clickTimers.get(target);\n if (eventType === 'dblclick' && pendingClick) {\n clearTimeout(pendingClick);\n clickTimers.delete(target);\n }\n\n addActionUser(eventType, value, scope, location);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\n }\n}\n\nfunction addActionUser(eventType: string, value: string | null, scope: string | null, location?: string) {\n const at = dateNow();\n dispatchTraces({\n ...SessionManager.instance.traceSessionMaskUpdate(Mask.EVENT),\n '@type': TRACE_TYPE_SESSION_EVENT,\n type: eventType,\n instant: at,\n value: value,\n scope: scope,\n location: location\n } as SessionEvent);\n}\n\n\nfunction traceBrowserConfig() {\n const connection = (navigator as any).connection || (navigator as any).mozConnection || (navigator as any).webkitConnection;\n dispatchTraces({\n '@type': TRACE_TYPE_ADDITIONAL_VALUES,\n deviceDisplayResolution: `${screen?.width}x${screen?.height}`,\n deviceOrientation: screen.orientation?.type ?? (innerWidth >= innerHeight ? 'landscape' : 'portrait'),\n deviceConnectivity: connection?.effectiveType ?? 'unknown',\n windowViewportBounds: `${innerWidth}x${innerHeight}`,\n windowZoomLevel: String(visualViewport?.scale ?? devicePixelRatio),\n userLanguage: navigator.language,\n userTheme: matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',\n saveData: connection?.saveData ?? undefined\n } as BrowserConfig)\n}\n\n\nfunction resizeHandler() {\n if (Timer) {\n clearTimeout(Timer);\n }\n\n Timer = setTimeout(() => {\n Timer = undefined;\n const previousRatio = globalBrowserValues.c;\n const currentRatio = globalThis.devicePixelRatio;\n globalBrowserValues.o = `${innerWidth}x${innerHeight}`\n if (previousRatio !== currentRatio) {\n // Signed delta: '+' when zooming in, '-' when zooming out.\n const delta = Math.round((currentRatio - previousRatio) * 100);\n const sign = delta > 0 ? '+' : '';\n addActionUser('zoom', `${sign}${delta}%`, null);\n } else {\n addActionUser('resize', `${innerWidth}x${innerHeight}`, null);\n }\n globalBrowserValues.c = currentRatio\n }, RESIZE_IDLE_DELAY);\n}\n\nfunction scrollHandler() {\n if (Timer) {\n clearTimeout(Timer);\n }\n\n Timer = setTimeout(() => {\n Timer = undefined;\n addActionUser('scroll', null, null); // todo to enhance ( vertical / horizontal )\n }, SCROLL_IDLE_DELAY);\n}\n\n\nfunction visibilityHandler() {\n addActionUser(document.hidden ? 'DOC_HIDDEN' : 'DOC_VISIBLE', null, null)\n}\n\n// Debounced; only the selection length is reported, never its content (privacy).\nfunction selectionHandler() {\n if (selectionTimer) {\n clearTimeout(selectionTimer);\n }\n selectionTimer = setTimeout(() => {\n selectionTimer = undefined;\n const length = document.getSelection ? String(document.getSelection()).length : 0;\n if (length > 0) {\n addActionUser('select', `length=${length}`, null);\n }\n }, SELECTION_IDLE_DELAY);\n}\n\n\n\nfunction lookUpChild(t: HTMLElement, depth: number): boolean {\n if (t.hasChildNodes() && t.children.length <= 5) {\n if (++depth > 5) {\n return false;\n }\n return Array.from(t.childNodes).reduce((acc, c) =>\n acc && lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n}\n\n\n\n\nfunction getFirst(c: ((t: HTMLElement) => string | null)[], t: HTMLElement) {\n for (const o of c) {\n let r = o(t)?.trim();\n if (r) {\n return r;\n }\n }\n return null;\n}\n\nfunction extractName(t: HTMLElement) {\n try {\n let tagName = t.tagName\n if (tagName) {\n let name;\n let c = MAP[tagName.toLowerCase()];\n if (c) {\n name = getFirst(c, t);\n }\n return name ?? getFirst(genericMap, t)!;\n }\n\n } catch (err) {\n console.warn(err)\n }\n return null\n}\n\nconst genericMap: ((t: HTMLElement) => string | null)[] = [\n t => t.getAttribute('placeholder'),\n t => t.getAttribute('title'),\n t => t.innerText,\n t => t.getAttribute('name'),\n t => t.getAttribute('id'),\n]\n\nconst MAP: { [key: string]: ((t: HTMLElement) => string | null)[] } = {\n 'img': [\n t => t.getAttribute('alt'),\n t => t.getAttribute('src'),\n ],\n 'input': [\n t => t.getAttribute('name'),\n ],\n 'a': [\n t => t.getAttribute('href'),\n ],\n 'label': [\n t => t.getAttribute('for'),\n ],\n}\n\n","import { NavigationCancel, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nlet monitoredRouter: Router | undefined;\nlet routerSubscription: Subscription | undefined;\n\nexport function initNavigationMonitor(router: Router){\n if (monitoredRouter === router && !routerSubscription?.closed) return;\n try{\n routerSubscription?.unsubscribe();\n initStartupSession();\n routerSubscription = router.events.subscribe(routeHandler);\n monitoredRouter = router;\n window.addEventListener('pageshow', bfCacheHandler);\n window.addEventListener(\"beforeunload\", windowUnloadHandler);\n }\n catch(e){\n dispatchReport('initNavigationMonitor', e)\n }\n}\n\nfunction routeHandler(event: any) {\n if (event instanceof NavigationStart) {\n SessionManager.instance.navigate(event.url);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\n SessionManager.instance.validateSession( true, 0);\n }\n}\n\nfunction windowUnloadHandler() {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction initStartupSession() {\n SessionManager.instance.navigate(new URL(document.URL).origin);\n SessionManager.instance.validateSession(false);\n}\n\nfunction bfCacheHandler(event: any) {\n if (event.persisted) { // if the page was restored from bfcache\n dispatchReload();\n SessionManager.instance.navigate(document.URL);\n SessionManager.instance.validateSession( true, 0);\n }\n}\n","import { dateNow, MachineRessourceUsage, TRACE_TYPE_RESOURCE_USAGE } from \"./trace.model\";\nimport { dispatchTraces, dispatchReport, addExportListener } from \"./event-bus\";\n\nexport function initResourceUsageMonitor(){\n try{\n if ('memory' in performance) {\n addExportListener(ressourceUsageHandler);\n }\n }\n catch(e){\n dispatchReport('initResourceUsageMonitor', e)\n }\n}\n\nfunction ressourceUsageHandler() {\n try {\n const memory = (performance as any).memory;\n dispatchTraces({\n '@type': TRACE_TYPE_RESOURCE_USAGE,\n instant: dateNow(),\n usedHeap: memory.usedJSHeapSize / (1024 * 1024),\n commitedHeap: memory.totalJSHeapSize / (1024 * 1024),\n availableProcessors: navigator.hardwareConcurrency\n } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\n }\n}\n","import {dateNow, Mask, SessionEvent, TRACE_TYPE_SESSION_EVENT} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dispatchTraces} from \"./event-bus\";\n\ntype Level = \"WARN\" | \"ERROR\";\nlet captureInstalled = false;\n\nexport function installConsoleCapture(): void {\n if (captureInstalled) return;\n captureInstalled = true;\n const originalWarn = console.warn;\n const originalError = console.error;\n\n function capture(level: Level, args: unknown[]) {\n try {\n dispatchTraces({\n ...SessionManager.instance.traceSessionMaskUpdate(Mask.EVENT),\n \"@type\": TRACE_TYPE_SESSION_EVENT,\n type: level,\n instant: dateNow(),\n value: `${args.map(formatArg).join(\" \")}`,\n } as SessionEvent);\n } catch (error) {\n // Report capture failures using the saved method, avoiding another capture.\n originalError.call(console, \"Failed to capture console message\", error);\n }\n }\n\n console.warn = (...args: Parameters<typeof console.warn>) => {\n originalWarn.apply(console, args);\n capture(\"WARN\", args);\n };\n\n console.error = (...args: Parameters<typeof console.error>) => {\n originalError.apply(console, args);\n capture(\"ERROR\", args);\n };\n}\n\nfunction formatArg(value: unknown): string {\n if (value instanceof Error) {\n return `${value.name}: ${value.message}${value.stack ? `\\n${value.stack}` : \"\"}`;\n }\n if (typeof value === \"string\") return value;\n\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n ErrorHandler,\n APP_INITIALIZER,\n InjectionToken\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { GlobalErrorHandler } from \"./global-error-handler.service\";\nimport {\n CollectorConfig,\n createInstance, refreshConfig,\n TechnicalConf,\n validateAndGetConfig\n} from \"./configuration\";\nimport {\n eventTraceScheduledDispatcher,\n} from \"./event-trace-scheduled-dispatcher.service\";\n\nimport { Router } from \"@angular/router\";\nimport { initUserActionMonitor } from \"./user-action.monitor\";\nimport { initNavigationMonitor } from './navigation.monitor';\nimport { initResourceUsageMonitor } from './resource-usage.monitor';\nimport { addReloadListener, configureReporter } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {InstanceEnvironment} from \"./trace.model\";\nimport {installConsoleCapture} from \"./log.monitor\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\nconst initializedConfigs = new WeakSet<TechnicalConf>();\nlet removeReloadListener: (() => void) | undefined;\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.collector?.enabled) {\n try {\n let config = initializeCollector(configuration);\n providers.push(\n { provide: COLLECTOR_CONFIG, useValue: config },\n { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps:[COLLECTOR_CONFIG], multi: true },\n { provide: ErrorHandler, useClass: GlobalErrorHandler }\n );\n } catch (e: any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {ngModule: NgCollectorModule, providers : providers}\n }\n}\n\nexport function initializeEventsFactory(config: {tech: TechnicalConf, instance: InstanceEnvironment }, router: Router) {\n return () => {\n configureReporter(config.tech.reporter);\n removeReloadListener?.();\n removeReloadListener = addReloadListener(() => reloadCollector(config));\n if (initializedConfigs.has(config.tech)) return;\n initializedConfigs.add(config.tech);\n initNavigationMonitor(router);\n if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n if(config.tech.logger){\n installConsoleCapture();\n }\n //storageEventListener();\n //eventTraceDebugger(config.tech)\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\n configureReporter(tech.reporter);\n const dispatch = eventTraceScheduledDispatcher(tech);\n const instance = createInstance(config, id)\n dispatch.trace(instance);\n sessionManager(tech);\n return {tech: tech, instance: instance};\n}\n\nexport function reloadCollector(config: {tech: TechnicalConf, instance: InstanceEnvironment }) {\n const id = crypto.randomUUID();\n refreshConfig(id, config.tech);\n const dispatch = eventTraceScheduledDispatcher(config.tech);\n config.instance.id= id;\n dispatch.trace(config.instance);\n sessionManager(config.tech);\n}\n","import {\n dateNow, ExceptionTrace,\n LocalRequest, LocalRequestCallBack,\n Mask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {WIN} from \"./event-bus\";\n\nexport class LocalRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(propertyKey: string, target: any) {\n const sessionManager = WIN[\"inspect-session-manager\"];\n\n const trace: LocalRequest = {\n ...sessionManager?.traceSessionMaskUpdate(Mask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: sessionManager?.currentSession?.user,\n start: this.start\n };\n\n WIN[\"event-bus\"].dispatchEvent(\n new CustomEvent('trace', { detail: { traces: [trace] } })\n );\n }\n\n postProcess(exception?: ExceptionTrace) {\n const traces: (LocalRequestCallBack | ExceptionTrace)[] = [{\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n end: dateNow(),\n status: exception ? 400 : 200\n }];\n\n if (exception) {\n exception.traceId = this.id;\n traces.push(exception);\n }\n\n WIN[\"event-bus\"].dispatchEvent(\n new CustomEvent('trace', { detail: { traces } })\n );\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\nimport {createException} from \"./configuration\";\nimport {TraceType} from \"./trace.model\";\n\nexport function TraceableStage() {\n\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n const monitor = new LocalRequestMonitor();\n let exception;\n try {\n monitor.preProcess(propertyKey,target);\n return originalMethod.apply(this, args);\n } catch (e: any) {\n exception = createException(e, undefined, TraceType.LCL_RQT,false);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\n\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\nexport { sessionlogger } from './lib/session-manager.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["require","COLLECTOR_CONFIG","tap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/session-manager.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/rest-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/event-trace-scheduled-dispatcher.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/user-action.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/navigation.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/resource-usage.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/log.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/local-request.monitor.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/traceable-stage.decorator.ts","../../../../projects/oneteme/inspect-ng-collector/src/public-api.ts","../../../../projects/oneteme/inspect-ng-collector/src/oneteme-inspect-ng-collector.ts"],"sourcesContent":["type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"REPORT\";\nexport type UUID = `${string}-${string}-${string}-${string}-${string}`;\nexport enum TraceType { MAIN_SES = 1, HTTP_REQ = 10, LCL_RQT = 99}\nexport enum Mask { LOCAL = 1, REST = 4, EVENT = 1024 }\nexport const TRACE_TYPE_LOG = '00';\nexport const TRACE_TYPE_RESOURCE_USAGE = '01';\nexport const TRACE_TYPE_COLLECTOR_CONFIGURATION = '02';\nexport const TRACE_TYPE_SESSION_MASK_UPDATE = '03';\nexport const TRACE_TYPE_EXCEPTION = '05';\nexport const TRACE_TYPE_MAIN_SESSION = '10';\nexport const TRACE_TYPE_MAIN_SESSION_CALLBACK = '11';\nexport const TRACE_TYPE_LOCAL_REQUEST = '110';\nexport const TRACE_TYPE_LOCAL_REQUEST_CALLBACK = '111';\nexport const TRACE_TYPE_REST_REQUEST = '120';\nexport const TRACE_TYPE_REST_REQUEST_CALLBACK = '121';\nexport const TRACE_TYPE_HTTP_REQUEST_STAGE = '220';\nexport const TRACE_TYPE_SESSION_EVENT = '06';\nexport const TRACE_TYPE_ADDITIONAL_VALUES = '400';\n\n\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport interface InstanceEnvironment {\n id: string;\n name?: string;\n address?: string;\n version?: string;\n env?: string;\n os?: string;\n re?: string;\n user?: string;\n type?: InstantType;\n instant?: number;\n collector?: string;\n resource: MachineResource;\n additionalProperties?: { [key: string]: any };\n configuration?: { [key: string]: any };\n namespace: string;\n}\n\nexport interface EventTrace { }\n\nexport interface BrowserConfig extends EventTrace {\n '@type': typeof TRACE_TYPE_ADDITIONAL_VALUES\n deviceDisplayResolution?:string\n deviceOrientation?:string;\n deviceConnectivity?:string;\n windowViewportBounds?:string;\n windowZoomLevel?:string;\n userLanguage?:string;\n userTheme?:string;\n navigationReferrer?:string;\n saveData?:boolean\n}\n\nexport interface MainSession extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION;\n id: UUID;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n eventMask: number;\n status: number;\n}\n\nexport interface MainSessionCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;\n id: UUID;\n end?: number;\n eventMask: number;\n status?: number;\n}\n\nexport interface SessionMaskUpdate {\n '@type': typeof TRACE_TYPE_SESSION_MASK_UPDATE;\n id: UUID;\n main: boolean;\n mask: number;\n}\n\nexport interface RestRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST;\n id: UUID;\n method: string;\n protocol: string;\n host: string;\n port: number;\n path: string;\n query: string;\n contentType?: string;\n authScheme?: string;\n dataSize: number;\n user?: string;\n start: number;\n sessionId?: UUID;\n}\n\nexport interface RestRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_REST_REQUEST_CALLBACK;\n id: UUID;\n status?: number;\n end?: number;\n dataSize?: number;\n linked?: boolean;\n contentType?: string;\n bodyContent?: string;\n}\n\nexport interface HttpRequestStage extends EventTrace {\n '@type': typeof TRACE_TYPE_HTTP_REQUEST_STAGE;\n name: string;\n start: number;\n end?: number;\n requestId: string;\n}\n\nexport interface LocalRequest extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST;\n id: UUID;\n name: string;\n location: string;\n user?: string;\n start: number;\n sessionId: UUID;\n}\n\nexport interface LocalRequestCallBack extends EventTrace {\n '@type': typeof TRACE_TYPE_LOCAL_REQUEST_CALLBACK;\n id: UUID;\n end: number;\n status: number;\n}\n\nexport interface ExceptionTrace extends EventTrace {\n '@type': typeof TRACE_TYPE_EXCEPTION;\n type?:string;\n message?: string;\n stackTraceRows?: StackTraceRow[];\n traceType: number;\n //cause?: ExceptionTrace;\n traceId?: UUID;\n offset: number;\n}\n\nexport interface StackTraceRow extends EventTrace{\n className?: string;\n methodName?: string;\n lineNumber?: number;\n}\n\nexport interface SessionEvent extends EventTrace {\n '@type': typeof TRACE_TYPE_SESSION_EVENT;\n type: string;\n instant: number;\n value?: string;\n location?: string;\n scope?: string;\n sessionId?: UUID;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n message: string;\n stackTraceRows?: StackTraceRow[];\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: number;\n availableProcessors?: number;\n}\n\nexport interface MachineRessourceUsage extends EventTrace {\n '@type': typeof TRACE_TYPE_RESOURCE_USAGE;\n instant: number;\n commitedHeap: number;\n usedHeap: number;\n}\n","import {\n dateNow,\n ExceptionTrace,\n InstanceEnvironment,\n StackTraceRow,\n TRACE_TYPE_COLLECTOR_CONFIGURATION, TRACE_TYPE_EXCEPTION, TraceType,\n UUID\n} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\nimport {VERSION} from \"@angular/core\";\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\nconst DEFAULT_QUEUE_CAPACITY = 1000;\nconst DEFAULT_INTERVAL = 60_000;\n\n\nexport interface CollectorConfig {\n collector: {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n additionalProperties?: () => { [key: string]: any };\n application: {\n name: Provider<string>;\n namespace: Provider<string>;\n version?: Provider<string>;\n env: Provider<string>;\n user?: Provider<string>;\n branche?: Provider<string>;\n hash?: Provider<string>;\n };\n scheduling?: {\n queueCapacity?: number; // default: 1000\n interval?: number; // default: 60s, in milliseconds\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>;\n };\n };\n httpRequest?: {\n excludes?: {\n host?: string[];\n };\n };\n resources?: {\n enabled?: boolean; // default: false\n };\n analytics?: {\n enabled?: boolean; // default: false\n };\n logger?: {\n enabled?: boolean; // default: false\n };\n reporter?: {\n enabled?: boolean; // default: false\n }\n storage?: {\n enabled: boolean; // default: false\n };\n };\n tracing: {\n remote: {\n '@type'?: string;\n host: string; // default: 'localhost'\n token?: Provider<string>;\n retentionMaxAge?: {\n audit?: number;\n diagnostics?: number;\n };\n };\n };\n };\n}\n\nexport interface TechnicalConf {\n user?: Provider<string>;\n queueCapacity: number;\n interval: number;\n instanceApi: string;\n sessionApi: string;\n exclude?: RegExp[];\n hostExcludes?: string[];\n debugMode: boolean;\n analytics: boolean;\n resources: boolean;\n storage: boolean;\n logger: boolean;\n reporter: boolean;\n namespaceHeader: string;\n enabled: boolean;\n}\n\nexport function getOrCall<T>(o?: Provider<T>): T | undefined {\n return typeof o === \"function\" ? (o as () => T)() : o;\n}\n\nexport function matchRegex(v: string | undefined, name: string, pattern: RegExp, defaultValue?: string) {\n if(v && pattern.exec(v)){\n return v;\n }\n if(!defaultValue){\n if(v != undefined){\n throw new Error(`bad value ${name}=${v}, pattern=${pattern}`);\n }else {\n throw new Error(`${name} property is required`);\n }\n }\n return defaultValue;\n}\n\nexport function requirePostitiveValue(v: number | undefined, name: string, defaultValue:number){\n if(v && v > 0) {\n return v;\n }\n if(v == undefined){\n return defaultValue;\n }\n throw new Error(`bad value ${name}=${v} <= 0`);\n}\n\nexport function require(v: string | undefined, name: string){\n if(v != undefined){\n return v;\n }\n throw new Error(`${name} property is required`);\n}\n\nexport function adaptedConfig(conf: CollectorConfig) {\n const collector = conf.collector ?? {};\n const application = collector.application;\n const remote = collector.tracing?.remote;\n const pathExcludes = getOrCall<RegExp[]>(collector.monitoring?.httpRoute?.excludes?.path);\n const { token: _token, ...publicRemote } = remote ?? {};\n\n return {\n collector: {\n ...collector,\n additionalProperties: collector.additionalProperties?.(),\n application: application ? {\n ...application,\n name: getOrCall<string>(application.name),\n namespace: getOrCall<string>(application.namespace),\n version: getOrCall<string>(application.version),\n env: getOrCall<string>(application.env),\n user: getOrCall<string>(application.user),\n branche: getOrCall<string>(application.branche),\n hash: getOrCall<string>(application.hash)\n } : undefined,\n scheduling: {\n ...collector.scheduling,\n interval: (collector.scheduling?.interval ?? DEFAULT_INTERVAL) / 1000,\n queueCapacity: collector.scheduling?.queueCapacity ?? DEFAULT_QUEUE_CAPACITY\n },\n monitoring: {\n ...collector.monitoring,\n ...(collector.monitoring?.httpRoute ? {\n httpRoute: {\n ...collector.monitoring.httpRoute,\n excludes: {\n ...collector.monitoring.httpRoute.excludes,\n ...(pathExcludes ? { path: pathExcludes.map(regex => regex.source) } : {})\n }\n }\n } : {})\n },\n tracing: {\n ...collector.tracing,\n remote: {\n ...publicRemote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge: {\n audit: (remote?.retentionMaxAge?.audit ?? 7) * 60 * 60 * 24,\n diagnostics: (remote?.retentionMaxAge?.diagnostics ?? 10) * 60 * 60 * 24\n }\n }\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const collector = conf.collector;\n const application = collector?.application;\n const remote = collector?.tracing?.remote;\n const host = matchRegex(getOrCall<string>(remote?.host), \"host\", HOST_PATERN, \"http://localhost\");\n return {\n user: getOrCall<string>(application?.user),\n queueCapacity: requirePostitiveValue(getOrCall<number>(collector?.scheduling?.queueCapacity), \"queueCapacity\", DEFAULT_QUEUE_CAPACITY),\n interval: requirePostitiveValue(getOrCall<number>(collector?.scheduling?.interval), \"interval\", DEFAULT_INTERVAL),\n instanceApi: new URL('v5/trace/instance', host).href,\n sessionApi : new URL(`v5/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(collector?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: collector?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!collector?.debugMode,\n analytics: !!collector?.monitoring?.analytics?.enabled,\n resources: !!collector?.monitoring?.resources?.enabled,\n storage: !!collector?.monitoring?.storage?.enabled,\n logger: !!collector?.monitoring?.logger?.enabled,\n reporter: !!collector?.monitoring?.reporter?.enabled,\n namespaceHeader: \"basic \" + btoa(`${require(getOrCall<string>(application?.namespace), 'configuration.collector.application.namespace')}:${getOrCall<string>(remote?.token) ?? \"\"}`),\n enabled: !!collector?.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n\n const collector = conf.collector;\n const application = collector?.application;\n const branche = getOrCall<string>(application?.branche);\n const hash = getOrCall<string>(application?.hash);\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(application?.name), 'configuration.collector.application.name'),\n version: getOrCall<string>(application?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(application?.env), 'configuration.collector.application.env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.4\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined,\n availableProcessors: navigator.hardwareConcurrency},\n additionalProperties: {\n ...collector?.additionalProperties?.(),\n ...(branche !== undefined ? { branche } : {}),\n ...(hash !== undefined ? { hash } : {}),\n 'user.locale': navigator.language + '~' + Intl.DateTimeFormat().resolvedOptions().timeZone,\n 'angular.version': VERSION.full\n },\n configuration: adaptedConfig(conf),\n namespace: require(getOrCall<string>(application?.namespace), 'configuration.collector.application.namespace'),\n }\n}\n\nfunction getClientID() {\n let cid = localStorage.getItem(\"jarvis.inspect.cid\");\n if (!cid) {\n localStorage.setItem(\"jarvis.inspect.cid\", cid = crypto.randomUUID());\n }\n return cid;\n}\n\nfunction detectOs() {\n try {\n let versionMatch, version;\n const agent = globalThis.navigator.userAgent.toLowerCase() //TODO see also https://developer.mozilla.org/en-US/docs/Web/API/Navigator/userAgentData\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `Windows ${version}`;\n case (/linux/.test(agent)):\n return 'Linux';\n\n case (/macintosh/.test(agent)):\n versionMatch = /mac os x (\\d+[._]\\d+[._]\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : '?';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n dispatchReport(\"detectOs\", e) ;\n }\n return undefined;\n}\n\nfunction detectBrowser() {\n try {\n const agent = globalThis.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.includes('edg'):\n return 'Edge';\n case agent.includes('opr'):\n return 'Opera';\n case agent.includes('chrome'):\n return 'Chrome';\n case agent.includes('firefox'):\n return 'Firefox';\n case agent.includes('safari'):\n return 'Safari';\n case agent.includes('msie'):\n return 'IE';\n }\n }\n catch (e) {\n dispatchReport(\"detectBrowser\", e)\n }\n return undefined;\n}\n\nexport function refreshConfig(id: string, tech: TechnicalConf) {\n const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;\n tech.sessionApi = tech.sessionApi.replace(uuidRegex, id);\n return id;\n}\n\nexport function createException( error: Error | string | object, traceId: UUID | undefined, traceType: TraceType, parseStack:boolean=false,): ExceptionTrace | undefined {\n try{\n const isError = error instanceof Error;\n let message: string | undefined;\n if (typeof error === \"string\") {\n message = error;\n } else if (isError) {\n message = error.message;\n } else {\n message = JSON.stringify(error);\n }\n\n if (isError) {\n return {\n '@type': TRACE_TYPE_EXCEPTION,\n type: isError ? error.name : undefined,\n message,\n stackTraceRows: parseStack ? parseStackTrace(error.stack) : undefined,\n traceId,\n traceType,\n offset: dateNow()\n }\n } else {\n return {\n '@type': TRACE_TYPE_EXCEPTION,\n type: isError ? error.name : undefined,\n message,\n stackTraceRows: parseStack ? parseStackTrace(undefined) : undefined,\n traceId,\n traceType,\n offset: dateNow()\n }\n }\n }catch(e){\n dispatchReport(\"createException\", e)\n }\n return undefined;\n}\n\nexport function parseStackTrace(stack?: string): StackTraceRow[] | undefined {\n try {\n if (!stack) {\n return undefined;\n }\n const rows = stack.split('\\n').slice(1).flatMap(line => {\n const match = /^at\\s+(?:(.*?)\\s+\\()?(.+):(\\d+):(\\d+)\\)?$/.exec(line.trim());\n if (!match) {\n return [];\n }\n\n return [{\n className: match[2],\n methodName: match[1] || undefined,\n lineNumber: Number(match[3])\n }];\n });\n return rows.length > 0 ? rows : undefined;\n }catch (e) {\n dispatchReport(\"parseStackTrace\", e)\n }\n return undefined;\n}\n","import {\n dateNow,\n EventTrace,\n LogEntry,\n TRACE_TYPE_LOG,\n SessionEvent,\n TRACE_TYPE_SESSION_EVENT\n} from \"./trace.model\";\nimport {parseStackTrace} from \"./configuration\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\nlet reporterEnabled = false;\n\nexport const WIN: any = globalThis;\nWIN[\"event-bus\"] = eventTarget;\n\nexport function configureReporter(enabled: boolean): void {\n reporterEnabled = enabled;\n}\n\nexport function dispatchReport(message: string, error?: any) : void {\n if (!reporterEnabled) {\n return;\n }\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n instant: dateNow(),\n message : `${message} ${error && JSON.stringify(error)}`,\n stackTraceRows: parseStackTrace(error.stack? error.stack : undefined),\n } as LogEntry);\n}\n\n\nexport function dispatchLog(type: string, value: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_EVENT,\n type: type,\n value: value,\n instant: dateNow(),\n //location: null,\n sessionId: sessionId\n } as SessionEvent);\n}\n\nexport function dispatchTraces(...traces: EventTrace[]): void {\n eventTarget.dispatchEvent(new CustomEvent(TRACE, { detail: { traces } }));\n}\n\nexport function dispatchExport(): void {\n eventTarget.dispatchEvent(new CustomEvent(EXPORT));\n}\n\nexport function dispatchReload(): void {\n eventTarget.dispatchEvent(new CustomEvent(RELOAD));\n}\n\nexport function dispatchShutown(): void {\n eventTarget.dispatchEvent(new CustomEvent(SHUTDOWN));\n}\n\nexport function addTraceListener(fn : EventListener): () => void {\n eventTarget.addEventListener(TRACE, fn);\n return () => eventTarget.removeEventListener(TRACE, fn);\n}\n\nexport function addExportListener(fn : EventListener): void {\n eventTarget.addEventListener(EXPORT, fn);\n}\n\nexport function addReloadListener(fn : EventListener): () => void {\n eventTarget.addEventListener(RELOAD, fn);\n return () => eventTarget.removeEventListener(RELOAD, fn);\n}\n\nexport function addShutdownListener(fn : EventListener): () => void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n return () => eventTarget.removeEventListener(SHUTDOWN, fn);\n}\n","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n MainSession,\n MainSessionCallBack,\n Mask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE, UUID\n} from \"./trace.model\";\nimport {getOrCall, TechnicalConf} from \"./configuration\";\n\nexport class SessionManager {\n\n static _instance: SessionManager;\n constructor(private readonly _techConfig: TechnicalConf) {\n }\n\n currentSession?: MainSession;\n currentSessionCallBack?: MainSessionCallBack;\n private readonly validatedSessions = new WeakSet<MainSession>();\n\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string): MainSession | undefined {\n const now = dateNow();\n if(this.currentSessionCallBack){\n this.endSession(now);\n }\n if (url) {\n const id = crypto.randomUUID();\n this.currentSession = {\n '@type': TRACE_TYPE_MAIN_SESSION,\n id: id,\n type: \"VIEW\",\n user: getOrCall<string>(this._techConfig.user),\n start: now,\n location: url,\n eventMask: 0,\n status: 200,\n };\n this.currentSessionCallBack = {\n '@type': TRACE_TYPE_MAIN_SESSION_CALLBACK,\n id: id,\n eventMask: 0,\n status: 200\n }\n }\n return this.currentSession\n }\n\n private endSession(end : number){\n this.getCurrentSessionCallBack(call =>{\n call.end = end;\n dispatchTraces(call);\n });\n this.currentSessionCallBack = undefined;\n }\n\n validateSession(update: boolean = true, timeout: number = Number.NaN) {\n const s = this.currentSession;\n if (Number.isNaN(timeout)) {\n this.updateSession(s, false);\n } else {\n setTimeout(() => this.updateSession(s, true), 0);\n }\n }\n\n private updateSession(session: MainSession | undefined, update: boolean = true) {\n if (session) {\n if (this.validatedSessions.has(session)) return;\n this.validatedSessions.add(session);\n if(update){\n session.name = document.title;\n session.location = document.URL;\n }else {\n session.name = '<startup>';\n }\n if (!this._techConfig.exclude?.some((e: any) => e.test(session?.location))) {\n dispatchTraces(session)\n }\n if(session === this.currentSession){\n this.currentSession = undefined;\n }\n }\n else{\n dispatchReport('updateSession', 'no active session');\n }\n }\n\n getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any) {\n if (this.currentSessionCallBack) {\n return fn(this.currentSessionCallBack);\n }\n dispatchReport('getCurrentSessionCallBack', 'no active session');\n return undefined;\n }\n\n currentSessionID(): UUID | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n markSessionFailed(){\n return this.getCurrentSessionCallBack(s => {\n s.status = 400;\n return s.id\n })\n }\n traceSessionMaskUpdate(mask: Mask){\n const req = this.getCurrentSessionCallBack(s=>{\n if ((s.eventMask & mask) !== mask) {\n s.eventMask |= mask;\n dispatchTraces({\n \"@type\": TRACE_TYPE_SESSION_MASK_UPDATE,\n id: s.id,\n main: true,\n mask: s.eventMask\n } as SessionMaskUpdate);\n }\n return {sessionId:s.id};\n });\n return req || {};\n }\n\n\n\n info(message: string) {\n this.log(\"INFO\", message);\n }\n\n warn(message: string) {\n this.log(\"WARN\", message);\n }\n\n error(message: string) {\n this.log(\"ERROR\", message);\n }\n\n private log(type: string, message: string){\n if (message) {\n\n this.getCurrentSessionCallBack(s=> dispatchLog(type, message, this.traceSessionMaskUpdate(Mask.EVENT).sessionId)); // update mask\n }\n }\n}\n\nexport function sessionlogger(): SessionManager {\n return SessionManager.instance;\n}\n\nexport function sessionManager(tech: TechnicalConf){\n SessionManager._instance = new SessionManager(tech);\n WIN[\"inspect-session-manager\"] = SessionManager._instance;\n}\n","import {\n dateNow,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n Mask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID, ExceptionTrace, TraceType,\n} from \"./trace.model\";\nimport { dispatchTraces, dispatchReport } from \"./event-bus\";\nimport { HttpErrorResponse, HttpHeaders, HttpRequest, HttpResponse, HttpResponseBase } from \"@angular/common/http\";\nimport { SessionManager } from \"./session-manager.service\";\nimport {createException} from \"./configuration\";\n\nexport const TRACE_HEADER = 'Inspect-Trace-Id';\n\nexport class RestRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(restRequest: HttpRequest<any>) {\n const url = new URL(restRequest.urlWithParams, globalThis.location.origin);\n const auth_user = extractAuthSchemeAnduser(restRequest.headers);\n dispatchTraces({...SessionManager.instance.traceSessionMaskUpdate(Mask.REST),\n \"@type\": TRACE_TYPE_REST_REQUEST,\n id: this.id,\n method: restRequest.method,\n protocol: url.protocol.slice(0, -1),\n host: url.hostname,\n port: url.port? Number(url.port) : 0,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: restRequest.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n dataSize: sizeOf(restRequest.body),\n start: this.start,\n } as RestRequest);\n }\n\n postProcess(response: HttpResponseBase | null, error: HttpErrorResponse | null) {\n const end = dateNow();\n const callback: RestRequestCallBack = {\n \"@type\": TRACE_TYPE_REST_REQUEST_CALLBACK,\n id: this.id,\n dataSize: -1,\n linked: false,\n end: end\n }\n let status: number = 0, exception!: ExceptionTrace | undefined;\n\n // HttpResponseBase couvre à la fois HttpResponse (succès) et HttpErrorResponse (erreur HTTP)\n if (response) {\n status = response.status;\n callback.dataSize = response instanceof HttpResponse ? sizeOf(response.body) : -1;\n callback.contentType = extractContentType(response.headers);\n callback.linked = assertSessionID(this.id, response.headers);\n }\n\n // Erreur réseau/annulation\n if (error) {\n status = retrieveStatus(error);\n exception = createException(error, this.id, TraceType.HTTP_REQ, false);\n callback.bodyContent = JSON.stringify(error.error);\n callback.dataSize = sizeOf(error.error);\n callback.contentType = extractContentType(error.headers);\n callback.linked = assertSessionID(this.id, error.headers);\n if(exception){\n dispatchTraces(exception)\n }\n }\n\n callback.status = status;\n dispatchTraces(callback, {\n \"@type\": TRACE_TYPE_HTTP_REQUEST_STAGE,\n name: \"PROCESS\",\n start: this.start, // use request\n end: end,\n order: 0,\n exception: exception,\n requestId: this.id\n } as HttpRequestStage);\n }\n}\n\nfunction retrieveStatus(error: any): number {\n if(!error.status){\n if(error.name === 'TimeoutError')\n return 3;\n }\n return error.status || 0 ;\n}\n\nfunction assertSessionID(id: string, headers: HttpHeaders) { //browser cache !?\n return headers?.get(TRACE_HEADER) == id;\n}\n\nfunction extractAuthSchemeAnduser(headers: any): { user: string | null, authScheme: string | null } {\n const authHeader = headers?.get('authorization');\n if (!authHeader) {\n return { authScheme: null, user: null };\n }\n\n const [scheme, credentials] = authHeader.split(' ');\n\n if (!scheme || !credentials || !['Basic', 'Bearer'].includes(scheme)) {\n return { authScheme: null, user: null };\n }\n\n return {\n authScheme: scheme,\n user: extractUser(scheme as 'Basic' | 'Bearer', credentials) ?? null\n };\n}\n\nfunction extractUser(scheme: 'Basic' | 'Bearer', authorization: string) {\n try {\n switch (scheme) {\n case \"Basic\":\n return atob(authorization).split(':')[0] || undefined;\n case \"Bearer\": {\n const payloadMatch = new RegExp(/^[^.]+\\.([^.]+)\\.[^.]+$/).exec(authorization);\n if (payloadMatch?.[1]) {\n return JSON.parse(atob(payloadMatch[1])).sub;\n }\n dispatchReport('extractUser', 'Invalid Bearer token format');\n return undefined;\n }\n default:\n dispatchReport('extractUser', `Unknown auth scheme: ${scheme}`);\n }\n } catch (e) {\n dispatchReport('extractUser', e);\n }\n return undefined;\n}\n\nfunction extractContentType(headers: any): string | undefined {\n try {\n if (headers?.has('Content-Type')) {\n return headers.get('Content-Type');\n }\n } catch (err) {\n dispatchReport('extractContentType', err);\n }\n return undefined;\n}\n\nfunction sizeOf(body: any): number {\n if (body) {\n try {\n return new Blob([JSON.stringify(body)]).size;\n }\n catch (e) {\n dispatchReport('sizeOf', e);\n }\n }\n return -1;\n}\n","import { Injectable, Inject, InjectionToken } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse, HttpErrorResponse, HttpResponseBase } from '@angular/common/http';\nimport { finalize, Observable } from 'rxjs';\nimport { tap } from 'rxjs/operators'\nimport { RestRequestMonitor, TRACE_HEADER } from \"./rest-request.monitor\";\nimport { TechnicalConf} from \"./configuration\";\nimport { InstanceEnvironment } from \"./trace.model\";\n\nexport const COLLECTOR_CONFIG = new InjectionToken<TechnicalConf>('COLLECTOR_CONFIG');\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(@Inject(COLLECTOR_CONFIG) private readonly techConfig: {tech: TechnicalConf, instance: InstanceEnvironment}) {}\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const monitor = new RestRequestMonitor();\n monitor.preProcess(req);\n\n const host = new URL(req.url, window.location.origin).host;\n if (!this.techConfig.tech.hostExcludes?.some((e: any) => e == host)) { // exclude les hôtes qui ne permet pas la modification des headers\n req = req.clone({ headers: req.headers.set(TRACE_HEADER, monitor.id) });\n }\n\n let response: HttpResponseBase | null = null;\n let error: HttpErrorResponse | null = null;\n\n return next.handle(req).pipe(tap({\n next: (event: HttpEvent<any>) => {\n if (event instanceof HttpResponse) {\n response = event;\n }\n //todo autres types d'événements (UploadProgress, DownloadProgress, etc.) ignorés pour les traces\n },\n error: (err: HttpErrorResponse) => {\n error = err;\n }\n }),\n finalize(() => {\n // Si pas de réponse et pas d'erreur capturé, la requête a été annulée\n if (!response && !error) {\n error = new HttpErrorResponse({\n error: 'The request was cancelled before completion',\n status: 0,\n statusText: 'Cancelled',\n url: req.url\n });\n }\n monitor.postProcess(response, error);\n }));\n }\n}\n","import { ErrorHandler, Injectable } from \"@angular/core\";\nimport { SessionManager } from \"./session-manager.service\";\nimport {dispatchReport, dispatchTraces} from \"./event-bus\";\nimport {createException} from \"./configuration\";\nimport {TraceType} from \"./trace.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n let ex = createException(error, SessionManager.instance.markSessionFailed(), TraceType.MAIN_SES, true)\n if(ex){\n dispatchTraces(ex);\n }\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n }\n}\n","import { interval, startWith, tap, Subscription } from \"rxjs\";\nimport { EventTrace, InstanceEnvironment } from \"./trace.model\";\nimport { dispatchExport, addTraceListener, addShutdownListener, dispatchReport } from \"./event-bus\";\nimport {TechnicalConf} from \"./configuration\";\n\nconst EMPTY_ARRAY : EventTrace[] = <[]>Object.freeze([]);\n\nclass EventTraceScheduledDispatcherService {\n\n static _instance: EventTraceScheduledDispatcherService;\n\n readonly subscription: Subscription\n private readonly removeTraceListener: () => void;\n private readonly removeShutdownListener: () => void;\n readonly traceQueue: EventTrace[] = [];\n lastPacket: { readonly body: string; readonly sequence: number; readonly size: number } | null = null;\n dispatchAttempts: number = 0\n dispatchSequence: number = 0\n dispatching: boolean = false;\n private inFlightDispatch?: Promise<EventTrace[]>;\n instanceDispatched: boolean = false;\n instanceDispatching: boolean = false; // guard contre les appels concurrents\n wasDestroyed : boolean = false;\n instance?: InstanceEnvironment ;\n constructor(private readonly _techConfig: TechnicalConf) {\n this.subscription = interval(_techConfig.interval)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (!this.dispatching && !this.wasDestroyed && this.instance) {\n this.dispatching = true;\n dispatchExport();\n this.dispatch()\n .then(arr => this.revertQueueSize(arr))\n .catch(() => {})\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n this.removeTraceListener = addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n this.removeShutdownListener = addShutdownListener(() => this.destroy());\n }\n\n appendTrace(events: EventTrace[]) {\n if(!this.wasDestroyed){\n events?.forEach(event => this.traceQueue.push(event));\n }\n }\n\n trace(instance: InstanceEnvironment) {\n this.instance = { ...instance };\n this.updateInstance(); // Dispatch immédiatement au lieu d'attendre l'intervalle\n }\n\n private updateInstance(): Promise<void> {\n if (this.instanceDispatched || this.instanceDispatching || this.wasDestroyed || !this.instance) {\n return Promise.resolve(); // Déjà dispatché, en cours, ou pas prêt\n }\n this.instanceDispatching = true;\n return this.dispatchInstance()\n .then(success => {\n if (success) {\n this.instanceDispatched = true;\n }else {\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n }\n })\n .finally(() => { this.instanceDispatching = false; });\n }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n if (this.instanceDispatching) return Promise.resolve(EMPTY_ARRAY); // attendre\n return this.updateInstance().then(() => {\n if (this.instanceDispatched) return this.dispatchTraces(); // seulement si confirmé\n return Promise.reject(new Error('Instance not dispatched yet'));// instance pas encore dispatchée, traces non envoyées\n });\n }\n\n dispatchTraces(destroy = false): Promise<EventTrace[]> {\n if (this.wasDestroyed && !destroy) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n if (!this.inFlightDispatch) {\n const request = this.lastPacket !== null\n ? this.dispatchPrevious(destroy && this.traceQueue.length === 0).then(() => EMPTY_ARRAY)\n : this.dispatchQueuedTraces(destroy);\n this.inFlightDispatch = request.finally(() => { this.inFlightDispatch = undefined; });\n }\n if (destroy && this.traceQueue.length > 0) {\n // L'envoi keepalive en cours garde son paquet ; seules les nouvelles traces partent ici.\n return Promise.all([this.inFlightDispatch, this.dispatchQueuedTraces(true)]).then(() => EMPTY_ARRAY);\n }\n return this.inFlightDispatch;\n }\n\n private async dispatchQueuedTraces(destroy: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return EMPTY_ARRAY;\n }\n const packet = {\n body: JSON.stringify(this.traceQueue),\n sequence: ++this.dispatchSequence,\n size: this.traceQueue.length\n };\n let uri = this._techConfig.sessionApi + \"?atm=\" + ++this.dispatchAttempts+\"&seq=\"+ packet.sequence;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: packet.body\n })\n .then(res=> {\n if (res.ok || res.status === 409) {\n this.dispatchAttempts = 0;\n return EMPTY_ARRAY;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if(res.status === 429 || (res.status >= 500 && res.headers?.get('Inspect-Trace-Retry') === '1')) {\n console.warn('Dispatch failed with status', res.status, 'retrying...');\n this.lastPacket = packet;\n }\n return EMPTY_ARRAY // retry on 3XX\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n this.lastPacket = packet;\n return EMPTY_ARRAY;\n });\n }\n\n private async dispatchPrevious(destroy = false): Promise<void> {\n const packet = this.lastPacket;\n if (!packet) return;\n let uri = this._techConfig.sessionApi + \"?atm=\" + ++this.dispatchAttempts+\"&seq=\"+ packet.sequence;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: packet.body\n }).then(res => {\n if(res.ok || res.status === 409) {\n if (this.lastPacket === packet) this.lastPacket = null;\n this.dispatchAttempts = 0;\n return;\n }\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (res.status >= 500) {\n dispatchReport('EventTraceScheduledDispatcher.dispatchPrevious', res);\n }\n\n }).catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`);\n if (this.lastPacket === packet) this.discardLastPacketIfQueueCapacityExceeded();\n })\n }\n\n private discardLastPacketIfQueueCapacityExceeded() {\n if ((this.lastPacket?.size ?? 0) + this.traceQueue.length > this._techConfig.queueCapacity) {\n console.warn(`Error while attempting to send ${this.lastPacket?.size} traces, giving up`);\n this.lastPacket = null;\n this.dispatchAttempts = 0;\n }\n }\n\n\n dispatchInstance(): Promise<boolean> {\n const uri = this._techConfig.instanceApi + \"?atm=\" + ++this.dispatchAttempts;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json', 'Authorization': this._techConfig.namespaceHeader },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => {\n if (res.ok || res.status === 409) {\n this.dispatchAttempts = 0;\n return true;\n }\n if (res.status >= 500) {\n dispatchReport('EventTraceScheduledDispatcher.dispatchInstance', res);\n }\n return false;\n })\n .catch(() => false);\n }\n\n revertQueueSize(traces: EventTrace[]) {\n if(!this.wasDestroyed){\n this.traceQueue.unshift(...traces);\n if (this.traceQueue.length > this._techConfig.queueCapacity) {\n this.traceQueue.splice(this._techConfig.queueCapacity);\n }\n }\n }\n\n destroy() {\n if (this.wasDestroyed) {\n return;\n }\n this.subscription?.unsubscribe();\n dispatchExport(); // Collecter les dernières métriques avant de refuser les nouvelles traces.\n this.wasDestroyed = true;\n this.removeTraceListener();\n this.removeShutdownListener();\n void this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n EventTraceScheduledDispatcherService._instance?.destroy();\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService({ ...tech });\n}\n","import {\n BrowserConfig,\n dateNow,\n Mask,\n SessionEvent,\n TRACE_TYPE_ADDITIONAL_VALUES,\n TRACE_TYPE_SESSION_EVENT\n} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dispatchReport, dispatchTraces} from \"./event-bus\";\n\nconst eventHandlers: { [key: string]: (target: HTMLElement) => boolean } = {\n 'click': (target: HTMLElement) => lookUpChild(target, 1),\n}\n\nconst RESIZE_IDLE_DELAY = 250;\nconst SCROLL_IDLE_DELAY = 250;\nconst SELECTION_IDLE_DELAY = 400;\nconst CLICK_DELAY = 300;\nconst ELEMENT_EVENTS = [\n 'click', 'dblclick', 'change',\n];\nlet globalBrowserValues: any = {c: globalThis.devicePixelRatio, o: `${innerWidth}x${innerHeight}`}\nlet Timer: ReturnType<typeof setTimeout> | undefined;\nlet selectionTimer: ReturnType<typeof setTimeout> | undefined;\nconst clickTimers = new WeakMap<HTMLElement, ReturnType<typeof setTimeout>>();\n\nexport function initUserActionMonitor() {\n try {\n ELEMENT_EVENTS.forEach(type => document.addEventListener(type, globalHandler, true));\n globalThis.addEventListener('scroll', scrollHandler, true); // do costum handler with timeout\n globalThis.addEventListener('resize', resizeHandler, true);\n document.addEventListener('visibilitychange', visibilityHandler);\n document.readyState === 'loading' ? document.addEventListener('DOMContentLoaded', ()=>{addActionUser('DOMContentLoaded', null)}, {once: true}) : addActionUser('DOMContentLoaded', null);\n traceBrowserConfig();\n } catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event) {\n const target = event.target as HTMLElement;\n const eventType = event.type;\n try {\n /*if (eventHandlers.hasOwnProperty(eventType) && !eventHandlers[eventType](target)) {\n return;\n } */\n const value = target.attributes.getNamedItem(\"data-inspect-track\")?.value;\n if (!value) {\n return;\n }\n const scope = target.attributes.getNamedItem(\"data-inspect-scope\")?.value;\n const location = target.attributes.getNamedItem(\"data-inspect-location\")?.value;\n\n\n if (eventType === 'click') {\n const pendingClick = clickTimers.get(target);\n if (pendingClick) {\n clearTimeout(pendingClick);\n }\n const timer = setTimeout(() => {\n clickTimers.delete(target);\n addActionUser('click', value, scope, location);\n }, CLICK_DELAY);\n clickTimers.set(target, timer);\n return;\n }\n\n const pendingClick = clickTimers.get(target);\n if (eventType === 'dblclick' && pendingClick) {\n clearTimeout(pendingClick);\n clickTimers.delete(target);\n }\n\n addActionUser(eventType, value, scope, location);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\n }\n}\n\nfunction addActionUser(eventType: string, value: string | null, scope?: string, location?: string) {\n const at = dateNow();\n dispatchTraces({\n ...SessionManager.instance.traceSessionMaskUpdate(Mask.EVENT),\n '@type': TRACE_TYPE_SESSION_EVENT,\n type: eventType,\n instant: at,\n value: value,\n scope: scope,\n location: location\n } as SessionEvent);\n}\n\n\nfunction traceBrowserConfig() {\n const connection = (navigator as any).connection || (navigator as any).mozConnection || (navigator as any).webkitConnection;\n dispatchTraces({\n '@type': TRACE_TYPE_ADDITIONAL_VALUES,\n deviceDisplayResolution: `${screen?.width}x${screen?.height}`,\n deviceOrientation: screen.orientation?.type ?? (innerWidth >= innerHeight ? 'landscape' : 'portrait'),\n deviceConnectivity: connection?.effectiveType ?? 'unknown',\n windowViewportBounds: `${innerWidth}x${innerHeight}`,\n windowZoomLevel: String(visualViewport?.scale ?? devicePixelRatio),\n userLanguage: navigator.language,\n userTheme: matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light',\n saveData: connection?.saveData ?? undefined\n } as BrowserConfig)\n}\n\n\nfunction resizeHandler() {\n if (Timer) {\n clearTimeout(Timer);\n }\n\n Timer = setTimeout(() => {\n Timer = undefined;\n const previousRatio = globalBrowserValues.c;\n const currentRatio = globalThis.devicePixelRatio;\n globalBrowserValues.o = `${innerWidth}x${innerHeight}`\n if (previousRatio !== currentRatio) {\n // Signed delta: '+' when zooming in, '-' when zooming out.\n const delta = Math.round((currentRatio - previousRatio) * 100);\n const sign = delta > 0 ? '+' : '';\n addActionUser('zoom', `${sign}${delta}%`);\n } else {\n addActionUser('resize', `${innerWidth}x${innerHeight}`);\n }\n globalBrowserValues.c = currentRatio\n }, RESIZE_IDLE_DELAY);\n}\n\nfunction scrollHandler() {\n if (Timer) {\n clearTimeout(Timer);\n }\n\n Timer = setTimeout(() => {\n Timer = undefined;\n addActionUser('scroll', null); // todo to enhance ( vertical / horizontal )\n }, SCROLL_IDLE_DELAY);\n}\n\n\nfunction visibilityHandler() {\n addActionUser(document.hidden ? 'DOC_HIDDEN' : 'DOC_VISIBLE', null)\n}\n\n// Debounced; only the selection length is reported, never its content (privacy).\nfunction selectionHandler() {\n if (selectionTimer) {\n clearTimeout(selectionTimer);\n }\n selectionTimer = setTimeout(() => {\n selectionTimer = undefined;\n const length = document.getSelection ? String(document.getSelection()).length : 0;\n if (length > 0) {\n addActionUser('select', `length=${length}`);\n }\n }, SELECTION_IDLE_DELAY);\n}\n\n\n\nfunction lookUpChild(t: HTMLElement, depth: number): boolean {\n if (t.hasChildNodes() && t.children.length <= 5) {\n if (++depth > 5) {\n return false;\n }\n return Array.from(t.childNodes).reduce((acc, c) =>\n acc && lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n}\n\n\n\n\nfunction getFirst(c: ((t: HTMLElement) => string | null)[], t: HTMLElement) {\n for (const o of c) {\n let r = o(t)?.trim();\n if (r) {\n return r;\n }\n }\n return null;\n}\n\nfunction extractName(t: HTMLElement) {\n try {\n let tagName = t.tagName\n if (tagName) {\n let name;\n let c = MAP[tagName.toLowerCase()];\n if (c) {\n name = getFirst(c, t);\n }\n return name ?? getFirst(genericMap, t)!;\n }\n\n } catch (err) {\n console.warn(err)\n }\n return null\n}\n\nconst genericMap: ((t: HTMLElement) => string | null)[] = [\n t => t.getAttribute('placeholder'),\n t => t.getAttribute('title'),\n t => t.innerText,\n t => t.getAttribute('name'),\n t => t.getAttribute('id'),\n]\n\nconst MAP: { [key: string]: ((t: HTMLElement) => string | null)[] } = {\n 'img': [\n t => t.getAttribute('alt'),\n t => t.getAttribute('src'),\n ],\n 'input': [\n t => t.getAttribute('name'),\n ],\n 'a': [\n t => t.getAttribute('href'),\n ],\n 'label': [\n t => t.getAttribute('for'),\n ],\n}\n\n","import { NavigationCancel, NavigationEnd, NavigationStart, Router } from \"@angular/router\";\nimport { Subscription } from \"rxjs\";\nimport { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nlet monitoredRouter: Router | undefined;\nlet routerSubscription: Subscription | undefined;\n\nexport function initNavigationMonitor(router: Router){\n if (monitoredRouter === router && !routerSubscription?.closed) return;\n try{\n routerSubscription?.unsubscribe();\n initStartupSession();\n routerSubscription = router.events.subscribe(routeHandler);\n monitoredRouter = router;\n window.addEventListener('pageshow', bfCacheHandler);\n window.addEventListener(\"beforeunload\", windowUnloadHandler);\n }\n catch(e){\n dispatchReport('initNavigationMonitor', e)\n }\n}\n\nfunction routeHandler(event: any) {\n if (event instanceof NavigationStart) {\n SessionManager.instance.navigate(event.url);\n }\n if (event instanceof NavigationEnd || event instanceof NavigationCancel) {\n SessionManager.instance.validateSession( true, 0);\n }\n}\n\nfunction windowUnloadHandler() {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction initStartupSession() {\n SessionManager.instance.navigate(new URL(document.URL).origin);\n SessionManager.instance.validateSession(false);\n}\n\nfunction bfCacheHandler(event: any) {\n if (event.persisted) { // if the page was restored from bfcache\n dispatchReload();\n SessionManager.instance.navigate(document.URL);\n SessionManager.instance.validateSession( true, 0);\n }\n}\n","import { dateNow, MachineRessourceUsage, TRACE_TYPE_RESOURCE_USAGE } from \"./trace.model\";\nimport { dispatchTraces, dispatchReport, addExportListener } from \"./event-bus\";\n\nexport function initResourceUsageMonitor(){\n try{\n if ('memory' in performance) {\n addExportListener(ressourceUsageHandler);\n }\n }\n catch(e){\n dispatchReport('initResourceUsageMonitor', e)\n }\n}\n\nfunction ressourceUsageHandler() {\n try {\n const memory = (performance as any).memory;\n dispatchTraces({\n '@type': TRACE_TYPE_RESOURCE_USAGE,\n instant: dateNow(),\n usedHeap: memory.usedJSHeapSize / (1024 * 1024),\n commitedHeap: memory.totalJSHeapSize / (1024 * 1024),\n availableProcessors: navigator.hardwareConcurrency\n } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\n }\n}\n","import {dateNow, Mask, SessionEvent, TRACE_TYPE_SESSION_EVENT} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dispatchTraces} from \"./event-bus\";\n\ntype Level = \"WARN\" | \"ERROR\";\nlet captureInstalled = false;\n\nexport function installConsoleCapture(): void {\n if (captureInstalled) return;\n captureInstalled = true;\n const originalWarn = console.warn;\n const originalError = console.error;\n\n function capture(level: Level, args: unknown[]) {\n try {\n dispatchTraces({\n ...SessionManager.instance.traceSessionMaskUpdate(Mask.EVENT),\n \"@type\": TRACE_TYPE_SESSION_EVENT,\n type: level,\n instant: dateNow(),\n value: `${args.map(formatArg).join(\" \")}`,\n } as SessionEvent);\n } catch (error) {\n // Report capture failures using the saved method, avoiding another capture.\n originalError.call(console, \"Failed to capture console message\", error);\n }\n }\n\n console.warn = (...args: Parameters<typeof console.warn>) => {\n originalWarn.apply(console, args);\n capture(\"WARN\", args);\n };\n\n console.error = (...args: Parameters<typeof console.error>) => {\n originalError.apply(console, args);\n capture(\"ERROR\", args);\n };\n}\n\nfunction formatArg(value: unknown): string {\n if (value instanceof Error) {\n return `${value.name}: ${value.message}${value.stack ? `\\n${value.stack}` : \"\"}`;\n }\n if (typeof value === \"string\") return value;\n\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n","import {\n NgModule,\n ModuleWithProviders,\n ErrorHandler,\n APP_INITIALIZER,\n InjectionToken\n} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { GlobalErrorHandler } from \"./global-error-handler.service\";\nimport {\n CollectorConfig,\n createInstance, refreshConfig,\n TechnicalConf,\n validateAndGetConfig\n} from \"./configuration\";\nimport {\n eventTraceScheduledDispatcher,\n} from \"./event-trace-scheduled-dispatcher.service\";\n\nimport { Router } from \"@angular/router\";\nimport { initUserActionMonitor } from \"./user-action.monitor\";\nimport { initNavigationMonitor } from './navigation.monitor';\nimport { initResourceUsageMonitor } from './resource-usage.monitor';\nimport { addReloadListener, configureReporter } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {InstanceEnvironment} from \"./trace.model\";\nimport {installConsoleCapture} from \"./log.monitor\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\nconst initializedConfigs = new WeakSet<TechnicalConf>();\nlet removeReloadListener: (() => void) | undefined;\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.collector?.enabled) {\n try {\n let config = initializeCollector(configuration);\n providers.push(\n { provide: COLLECTOR_CONFIG, useValue: config },\n { provide: APP_INITIALIZER, useFactory: initializeEventsFactory, deps: [COLLECTOR_CONFIG, Router], multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, deps:[COLLECTOR_CONFIG], multi: true },\n { provide: ErrorHandler, useClass: GlobalErrorHandler }\n );\n } catch (e: any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {ngModule: NgCollectorModule, providers : providers}\n }\n}\n\nexport function initializeEventsFactory(config: {tech: TechnicalConf, instance: InstanceEnvironment }, router: Router) {\n return () => {\n configureReporter(config.tech.reporter);\n removeReloadListener?.();\n removeReloadListener = addReloadListener(() => reloadCollector(config));\n if (initializedConfigs.has(config.tech)) return;\n initializedConfigs.add(config.tech);\n initNavigationMonitor(router);\n if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n if(config.tech.logger){\n installConsoleCapture();\n }\n //storageEventListener();\n //eventTraceDebugger(config.tech)\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\n configureReporter(tech.reporter);\n const dispatch = eventTraceScheduledDispatcher(tech);\n const instance = createInstance(config, id)\n dispatch.trace(instance);\n sessionManager(tech);\n return {tech: tech, instance: instance};\n}\n\nexport function reloadCollector(config: {tech: TechnicalConf, instance: InstanceEnvironment }) {\n const id = crypto.randomUUID();\n refreshConfig(id, config.tech);\n const dispatch = eventTraceScheduledDispatcher(config.tech);\n config.instance.id= id;\n dispatch.trace(config.instance);\n sessionManager(config.tech);\n}\n","import {\n dateNow, ExceptionTrace,\n LocalRequest, LocalRequestCallBack,\n Mask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {WIN} from \"./event-bus\";\n\nexport class LocalRequestMonitor {\n\n readonly id: UUID;\n readonly start: number;\n\n constructor() {\n this.start = dateNow();\n this.id = crypto.randomUUID();\n }\n\n preProcess(propertyKey: string, target: any) {\n const sessionManager = WIN[\"inspect-session-manager\"];\n\n const trace: LocalRequest = {\n ...sessionManager?.traceSessionMaskUpdate(Mask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: sessionManager?.currentSession?.user,\n start: this.start\n };\n\n WIN[\"event-bus\"].dispatchEvent(\n new CustomEvent('trace', { detail: { traces: [trace] } })\n );\n }\n\n postProcess(exception?: ExceptionTrace) {\n const traces: (LocalRequestCallBack | ExceptionTrace)[] = [{\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n end: dateNow(),\n status: exception ? 400 : 200\n }];\n\n if (exception) {\n exception.traceId = this.id;\n traces.push(exception);\n }\n\n WIN[\"event-bus\"].dispatchEvent(\n new CustomEvent('trace', { detail: { traces } })\n );\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\nimport {createException} from \"./configuration\";\nimport {TraceType} from \"./trace.model\";\n\nexport function TraceableStage() {\n\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n const originalMethod = descriptor.value;\n descriptor.value = function (...args: any[]) {\n const monitor = new LocalRequestMonitor();\n let exception;\n try {\n monitor.preProcess(propertyKey,target);\n return originalMethod.apply(this, args);\n } catch (e: any) {\n exception = createException(e, undefined, TraceType.LCL_RQT,false);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\n\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\nexport { sessionlogger } from './lib/session-manager.service';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["require","COLLECTOR_CONFIG","tap"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { UUID } from "./trace.model";
|
|
2
2
|
import { HttpErrorResponse, HttpRequest, HttpResponseBase } from "@angular/common/http";
|
|
3
|
-
export declare const TRACE_HEADER = "
|
|
3
|
+
export declare const TRACE_HEADER = "Inspect-Trace-Id";
|
|
4
4
|
export declare class RestRequestMonitor {
|
|
5
5
|
readonly id: UUID;
|
|
6
6
|
readonly start: number;
|
package/lib/trace.model.d.ts
CHANGED
|
@@ -70,13 +70,14 @@ export interface MainSession extends EventTrace {
|
|
|
70
70
|
location: string;
|
|
71
71
|
user?: string;
|
|
72
72
|
start: number;
|
|
73
|
-
|
|
73
|
+
eventMask: number;
|
|
74
|
+
status: number;
|
|
74
75
|
}
|
|
75
76
|
export interface MainSessionCallBack extends EventTrace {
|
|
76
77
|
'@type': typeof TRACE_TYPE_MAIN_SESSION_CALLBACK;
|
|
77
78
|
id: UUID;
|
|
78
79
|
end?: number;
|
|
79
|
-
|
|
80
|
+
eventMask: number;
|
|
80
81
|
status?: number;
|
|
81
82
|
}
|
|
82
83
|
export interface SessionMaskUpdate {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneteme/inspect-ng-collector",
|
|
3
|
-
"version": "1.3.4-beta.
|
|
3
|
+
"version": "1.3.4-beta.2",
|
|
4
4
|
"description": "inspect ng collector",
|
|
5
5
|
"homepage": "https://github.com/oneteme/inspect-ng-collector",
|
|
6
6
|
"bugs": "https://github.com/oneteme/inspect-ng-collector/issues",
|