@oneteme/inspect-ng-collector 1.3.2 → 1.3.3
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.
|
@@ -159,7 +159,7 @@ function createInstance(conf, instanceId) {
|
|
|
159
159
|
re: detectBrowser(),
|
|
160
160
|
user: undefined, // cannot get user
|
|
161
161
|
type: "CLIENT",
|
|
162
|
-
collector: "inspect-ng-collector-1.3.
|
|
162
|
+
collector: "inspect-ng-collector-1.3.3",
|
|
163
163
|
resource: { maxHeap: (('memory' in performance) && performance.memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },
|
|
164
164
|
additionalProperties: conf?.additionalProperties?.(),
|
|
165
165
|
configuration: adaptedConfig(conf)
|
|
@@ -232,7 +232,9 @@ class SessionManager {
|
|
|
232
232
|
}
|
|
233
233
|
navigate(url) {
|
|
234
234
|
const now = dateNow();
|
|
235
|
-
this.
|
|
235
|
+
if (this.currentSessionCallBack) {
|
|
236
|
+
this.endSession(now);
|
|
237
|
+
}
|
|
236
238
|
if (url) {
|
|
237
239
|
const id = crypto.randomUUID();
|
|
238
240
|
this.currentSession = {
|
|
@@ -258,10 +260,12 @@ class SessionManager {
|
|
|
258
260
|
});
|
|
259
261
|
this.currentSessionCallBack = undefined;
|
|
260
262
|
}
|
|
261
|
-
updateSession() {
|
|
263
|
+
updateSession(update = true) {
|
|
262
264
|
if (this.currentSession) {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
+
if (update) {
|
|
266
|
+
this.currentSession.name = document.title; // add settimeout
|
|
267
|
+
this.currentSession.location = document.URL;
|
|
268
|
+
}
|
|
265
269
|
if (!this._techConfig.exclude?.some((e) => e.test(this.currentSession?.location))) {
|
|
266
270
|
dispatchTraces(this.currentSession);
|
|
267
271
|
}
|
|
@@ -737,6 +741,7 @@ const MAP = {
|
|
|
737
741
|
|
|
738
742
|
function initNavigationMonitor(router) {
|
|
739
743
|
try {
|
|
744
|
+
initStartupSession();
|
|
740
745
|
router.events.subscribe(routeHandler);
|
|
741
746
|
window.addEventListener('pageshow', bfCacheHandler);
|
|
742
747
|
window.addEventListener("beforeunload", windowUnloadHandler);
|
|
@@ -757,6 +762,10 @@ function windowUnloadHandler(event) {
|
|
|
757
762
|
SessionManager.instance.navigate();
|
|
758
763
|
dispatchShutown();
|
|
759
764
|
}
|
|
765
|
+
function initStartupSession() {
|
|
766
|
+
SessionManager.instance.navigate(new URL(document.URL).host);
|
|
767
|
+
SessionManager.instance.updateSession(false);
|
|
768
|
+
}
|
|
760
769
|
function bfCacheHandler(event) {
|
|
761
770
|
if (event.persisted) { // if the page was restored from bfcache
|
|
762
771
|
dispatchReload();
|
|
@@ -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/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.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/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}`;\n\nexport enum RequestMask { LOCAL = 1, REST = 4 }\n\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_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_USER_ACTION = '300';\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}\n\nexport interface EventTrace { }\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 exception?: ExceptionInfo; // make a list ?\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 exception?: ExceptionInfo;\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 exception?: ExceptionInfo;\n}\n\nexport interface ExceptionInfo {\n type?: string;\n message?: string;\n}\n\nexport interface UserAction extends EventTrace {\n '@type': typeof TRACE_TYPE_USER_ACTION;\n type: string;\n instant: number;\n name: string | null;\n nodeName: string;\n sessionId: string;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n level: LogLevel;\n message: string;\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: 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 { dateNow, EventTrace, LogLevel, LogEntry, TRACE_TYPE_LOG } from \"./trace.model\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\n\nexport const WIN: any = window;\n\nexport function dispatchReport(message: string, error?: any) : void {\n dispatchLog(\"REPORT\", `${message} ${error && JSON.stringify(error)}`)\n}\n\nexport function dispatchLog(level: LogLevel, message: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n level: level,\n message: message,\n instant: dateNow(),\n sessionId: sessionId\n } as LogEntry);\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}\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}\n\nexport function addShutdownListener(fn : EventListener): void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n}\n","import {dateNow, InstanceEnvironment, TRACE_TYPE_COLLECTOR_CONFIGURATION} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\n\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\n\nexport interface CollectorConfig {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n name: Provider<string>;\n version?: Provider<string>;\n env?: Provider<string>;\n user?: Provider<string>;\n additionalProperties?: ()=> {[key:string]: any};\n scheduling?: {\n interval?: number; // default: '60s'\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>; // replace this with string[]\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 storage?: {\n enabled: boolean // default: false\n }\n };\n tracing?: {\n queueCapacity?: number; // default: 1000\n remote?: {\n '@type'?: string;\n mode?: string; // default: null\n host?: string; // default: 'localhost'\n retentionMaxAge?: number; // default: '30'\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 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 return {\n ...conf,\n scheduling: {\n ...conf.scheduling,\n interval: conf.scheduling?.interval && conf.scheduling.interval / 1000\n },\n monitoring: {\n ...conf.monitoring,\n additionalProperties: String(conf.additionalProperties),\n name: String(conf.name),\n version: String(conf.version),\n env: String(conf.env),\n user: String(conf.user),\n httpRoute: {\n ...conf.monitoring?.httpRoute,\n excludes: {\n path: (conf?.monitoring?.httpRoute?.excludes?.path as RegExp[]).map(r => r.source)\n }\n }\n },\n tracing: {\n ...conf.tracing,\n remote: {\n ...conf.tracing?.remote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge : (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const host = matchRegex(getOrCall<string>(conf?.tracing?.remote?.host), \"host\", HOST_PATERN);\n return {\n user: conf?.user,\n queueCapacity: requirePostitiveValue(getOrCall<number>(conf?.tracing?.queueCapacity), \"queueCapacity\", 1000),\n interval: requirePostitiveValue(getOrCall<number>(conf?.scheduling?.interval), \"interval\", 60000),\n instanceApi: new URL('v4/trace/instance', host).href,\n sessionApi : new URL(`v4/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(conf?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!conf.debugMode,\n analytics: !!conf?.monitoring?.analytics?.enabled,\n resources: !!conf?.monitoring?.resources?.enabled,\n storage: !!conf?.monitoring?.storage?.enabled,\n enabled: !!conf.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(conf?.name), 'configuration.name'),\n version: getOrCall<string>(conf?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(conf?.env), 'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.2-beta.1\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },\n additionalProperties: conf?.additionalProperties?.(),\n configuration: adaptedConfig(conf)\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","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n LogLevel,\n MainSession,\n MainSessionCallBack,\n RequestMask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE\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\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string) {\n const now = dateNow();\n this.endSession(now);\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 }\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 updateSession() {\n if (this.currentSession) {\n this.currentSession.name = document.title; // add settimeout\n this.currentSession.location = document.URL;\n if (!this._techConfig.exclude?.some((e: any) => e.test(this.currentSession?.location))) {\n dispatchTraces(this.currentSession)\n }\n this.currentSession = undefined;\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(): string | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n\n initRestRequest(mask: RequestMask){\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 initUserAction(){\n const req = this.getCurrentSessionCallBack(s=> ({sessionId:s.id}));\n return req || {};\n }\n\n addException(exception: any) {\n this.getCurrentSessionCallBack(s => s.exception = exception)\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(level: LogLevel, message: string){\n if (message) {\n this.getCurrentSessionCallBack(s=> dispatchLog(level, message, s.id));\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 ExceptionInfo,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n RequestMask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID\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\";\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.initRestRequest(RequestMask.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!: ExceptionInfo;\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 = error.status || 0;\n exception = {\n type: error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\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 }\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 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 = authorization.match(/^[^.]+\\.([^.]+)\\.[^.]+$/);\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, Optional } 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 } from \"./event-bus\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n SessionManager.instance.addException({\n type: error?.name,\n message: error?.message\n })\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n throw error;\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 readonly traceQueue: EventTrace[] = [];\n\n dispatchAttempts: number = 0\n dispatching: boolean = false;\n instanceDispatched: boolean = false;\n wasDestroyed : boolean = false;\n\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(err => dispatchReport('EventTraceScheduledDispatcher.dispatch', err))\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n addShutdownListener(e => 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 }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n return this.dispatchInstance().then(ok => {\n if (ok) {\n this.instanceDispatched = true;\n return this.dispatchTraces();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n dispatchTraces(destroy?: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n let uri = this._techConfig.sessionApi + \"?attempts=\" + ++this.dispatchAttempts;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n const traces = [...this.traceQueue];\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(traces)\n })\n .then(res=> {\n if (res.ok) {\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 >= 400 && res.status < 500) {\n return traces; //retry on bad request !?\n }\n return res.json()\n .then(body => body?.retry ? traces : EMPTY_ARRAY)\n .catch(() => EMPTY_ARRAY);\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n return traces;\n });\n }\n\n dispatchInstance(): Promise<boolean> {\n this.dispatchAttempts++;\n return fetch(this._techConfig.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.dispatchAttempts = 0;\n return true;\n }) : false)\n .catch(err => 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 this.subscription?.unsubscribe();\n this.wasDestroyed = true;\n dispatchExport(); //last metric ??\n this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService(tech);\n}\n","import { dateNow, UserAction, TRACE_TYPE_USER_ACTION } 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}\nexport function initUserActionMonitor() {\n try {\n const body = window.document.body;\n body.addEventListener('click', globalHandler, true);\n body.addEventListener('change', globalHandler, true);\n body.addEventListener('scrollend', globalHandler, true);\n body.addEventListener('dragend', globalHandler, true);\n window.document.addEventListener('DOMContentLoaded', globalHandler, true);\n }\n catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event | MouseEvent) {\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 addActionUser(eventType, target);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\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\nfunction addActionUser(eventType: string, target: HTMLElement) {\n dispatchTraces({\n ...SessionManager.instance.initUserAction(),\n '@type': TRACE_TYPE_USER_ACTION,\n type: eventType,\n instant: dateNow(),\n name: extractName(target),\n nodeName: target.tagName?.toLowerCase()\n } as UserAction);\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 { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nexport function initNavigationMonitor(router: Router){\n try{\n router.events.subscribe(routeHandler);\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 setTimeout(()=>SessionManager.instance.updateSession(),0)\n }\n}\n\nfunction windowUnloadHandler(event: any) {\n SessionManager.instance.navigate();\n dispatchShutown();\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 setTimeout(() => SessionManager.instance.updateSession(), 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 } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\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 } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {eventTraceDebugger} from \"./event-trace-debugger\";\nimport {InstanceEnvironment} from \"./trace.model\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.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 if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n initNavigationMonitor(router);\n //storageEventListener();\n //eventTraceDebugger\n addReloadListener(e=>{\n reloadCollector(config)\n });\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\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\n\n","import {\n dateNow,\n LocalRequest, LocalRequestCallBack,\n RequestMask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {dispatchTraces, 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 dispatchTraces({\n ...WIN[\"inspect-session-manager\"]?.initRestRequest(RequestMask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: WIN[\"inspect-session-manager\"]?.currentSession?.user, //bad access\n start: this.start\n } as LocalRequest);\n }\n\n postProcess(exception?: any){\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n exception: exception,\n end: dateNow()\n } as LocalRequestCallBack);\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\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 = resolveException(e);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\nexport function resolveException(e: any): { type: string | null; message: string | null } {\n let type = null, message = null;\n if (e) {\n if (typeof e === \"string\") {\n message = e;\n } else if (e instanceof Error) {\n type = e.name;\n message = e.message;\n } else {\n message = JSON.stringify(e)\n }\n }\n return { type, message };\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/event-bus.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/configuration.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/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}`;\n\nexport enum RequestMask { LOCAL = 1, REST = 4 }\n\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_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_USER_ACTION = '300';\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}\n\nexport interface EventTrace { }\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 exception?: ExceptionInfo; // make a list ?\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 exception?: ExceptionInfo;\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 exception?: ExceptionInfo;\n}\n\nexport interface ExceptionInfo {\n type?: string;\n message?: string;\n}\n\nexport interface UserAction extends EventTrace {\n '@type': typeof TRACE_TYPE_USER_ACTION;\n type: string;\n instant: number;\n name: string | null;\n nodeName: string;\n sessionId: string;\n}\n\nexport interface LogEntry extends EventTrace {\n '@type': typeof TRACE_TYPE_LOG;\n instant: number;\n level: LogLevel;\n message: string;\n sessionId?: UUID;\n}\n\nexport interface MachineResource extends EventTrace {\n maxHeap?: 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 { dateNow, EventTrace, LogLevel, LogEntry, TRACE_TYPE_LOG } from \"./trace.model\";\n\nconst eventTarget = new EventTarget();\nconst TRACE = 'trace', EXPORT = 'export', SHUTDOWN = 'shutdown', RELOAD = 'reload';\n\nexport const WIN: any = window;\n\nexport function dispatchReport(message: string, error?: any) : void {\n dispatchLog(\"REPORT\", `${message} ${error && JSON.stringify(error)}`)\n}\n\nexport function dispatchLog(level: LogLevel, message: string, sessionId?: string) {\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOG,\n level: level,\n message: message,\n instant: dateNow(),\n sessionId: sessionId\n } as LogEntry);\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}\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}\n\nexport function addShutdownListener(fn : EventListener): void {\n eventTarget.addEventListener(SHUTDOWN, fn);\n}\n","import {dateNow, InstanceEnvironment, TRACE_TYPE_COLLECTOR_CONFIGURATION} from \"./trace.model\";\nimport {dispatchReport} from \"./event-bus\";\n\ntype Provider<T> = T | (() => T);\n\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\n\nexport interface CollectorConfig {\n enabled?: boolean; // default: false\n debugMode?: boolean;\n name: Provider<string>;\n version?: Provider<string>;\n env?: Provider<string>;\n user?: Provider<string>;\n additionalProperties?: ()=> {[key:string]: any};\n scheduling?: {\n interval?: number; // default: '60s'\n };\n monitoring?: {\n httpRoute?: {\n excludes?: {\n path?: Provider<RegExp[]>; // replace this with string[]\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 storage?: {\n enabled: boolean // default: false\n }\n };\n tracing?: {\n queueCapacity?: number; // default: 1000\n remote?: {\n '@type'?: string;\n mode?: string; // default: null\n host?: string; // default: 'localhost'\n retentionMaxAge?: number; // default: '30'\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 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 return {\n ...conf,\n scheduling: {\n ...conf.scheduling,\n interval: conf.scheduling?.interval && conf.scheduling.interval / 1000\n },\n monitoring: {\n ...conf.monitoring,\n additionalProperties: String(conf.additionalProperties),\n name: String(conf.name),\n version: String(conf.version),\n env: String(conf.env),\n user: String(conf.user),\n httpRoute: {\n ...conf.monitoring?.httpRoute,\n excludes: {\n path: (conf?.monitoring?.httpRoute?.excludes?.path as RegExp[]).map(r => r.source)\n }\n }\n },\n tracing: {\n ...conf.tracing,\n remote: {\n ...conf.tracing?.remote,\n '@type': TRACE_TYPE_COLLECTOR_CONFIGURATION,\n retentionMaxAge : (conf.tracing?.remote?.retentionMaxAge ?? 10) * 60 * 60 * 24\n }\n }\n }\n}\n\nexport function validateAndGetConfig(conf: CollectorConfig, instanceId: string) : TechnicalConf {\n const host = matchRegex(getOrCall<string>(conf?.tracing?.remote?.host), \"host\", HOST_PATERN);\n return {\n user: conf?.user,\n queueCapacity: requirePostitiveValue(getOrCall<number>(conf?.tracing?.queueCapacity), \"queueCapacity\", 1000),\n interval: requirePostitiveValue(getOrCall<number>(conf?.scheduling?.interval), \"interval\", 60000),\n instanceApi: new URL('v4/trace/instance', host).href,\n sessionApi : new URL(`v4/trace/instance/${instanceId}/session`, host).href,\n exclude: getOrCall<RegExp[]>(conf?.monitoring?.httpRoute?.excludes?.path) || [],\n hostExcludes: conf?.monitoring?.httpRequest?.excludes?.host || [],\n debugMode: !!conf.debugMode,\n analytics: !!conf?.monitoring?.analytics?.enabled,\n resources: !!conf?.monitoring?.resources?.enabled,\n storage: !!conf?.monitoring?.storage?.enabled,\n enabled: !!conf.enabled\n }\n}\n\nexport function createInstance(conf: CollectorConfig, instanceId: string): InstanceEnvironment {\n return {\n id: instanceId,\n instant: dateNow(),\n name: require(getOrCall<string>(conf?.name), 'configuration.name'),\n version: getOrCall<string>(conf?.version),\n address: getClientID(), //server side\n env: require(getOrCall<string>(conf?.env), 'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n collector: \"inspect-ng-collector-1.3.3\",\n resource: { maxHeap: (('memory' in performance) && (performance as any).memory.jsHeapSizeLimit / (1024 * 1024)) || undefined },\n additionalProperties: conf?.additionalProperties?.(),\n configuration: adaptedConfig(conf)\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","import { dispatchTraces, dispatchReport, WIN, dispatchLog } from './event-bus';\nimport {\n dateNow,\n LogLevel,\n MainSession,\n MainSessionCallBack,\n RequestMask,\n SessionMaskUpdate,\n TRACE_TYPE_MAIN_SESSION,\n TRACE_TYPE_MAIN_SESSION_CALLBACK,\n TRACE_TYPE_SESSION_MASK_UPDATE\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\n static get instance(): SessionManager {\n return SessionManager._instance;\n }\n\n navigate(url?: string) {\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 }\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 updateSession(update: boolean = true) {\n if (this.currentSession) {\n if(update){\n this.currentSession.name = document.title; // add settimeout\n this.currentSession.location = document.URL;\n }\n if (!this._techConfig.exclude?.some((e: any) => e.test(this.currentSession?.location))) {\n dispatchTraces(this.currentSession)\n }\n this.currentSession = undefined;\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(): string | undefined {\n return this.getCurrentSessionCallBack(s=> s.id);\n }\n\n initRestRequest(mask: RequestMask){\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 initUserAction(){\n const req = this.getCurrentSessionCallBack(s=> ({sessionId:s.id}));\n return req || {};\n }\n\n addException(exception: any) {\n this.getCurrentSessionCallBack(s => s.exception = exception)\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(level: LogLevel, message: string){\n if (message) {\n this.getCurrentSessionCallBack(s=> dispatchLog(level, message, s.id));\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 ExceptionInfo,\n HttpRequestStage,\n RestRequest,\n RestRequestCallBack,\n RequestMask,\n TRACE_TYPE_HTTP_REQUEST_STAGE,\n TRACE_TYPE_REST_REQUEST,\n TRACE_TYPE_REST_REQUEST_CALLBACK,\n UUID\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\";\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.initRestRequest(RequestMask.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!: ExceptionInfo;\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 = error.status || 0;\n exception = {\n type: error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\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 }\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 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 = authorization.match(/^[^.]+\\.([^.]+)\\.[^.]+$/);\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, Optional } 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 } from \"./event-bus\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandler implements ErrorHandler {\n\n handleError(error: any) {\n try {\n SessionManager.instance.addException({\n type: error?.name,\n message: error?.message\n })\n } catch (e) {\n dispatchReport(\"GlobalErrorHandlerService.handleError\", e);\n }\n throw error;\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 readonly traceQueue: EventTrace[] = [];\n\n dispatchAttempts: number = 0\n dispatching: boolean = false;\n instanceDispatched: boolean = false;\n wasDestroyed : boolean = false;\n\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(err => dispatchReport('EventTraceScheduledDispatcher.dispatch', err))\n .finally(() => { this.dispatching = false })\n }\n }))\n .subscribe();\n addTraceListener(e => this.appendTrace((e as CustomEvent).detail.traces));\n addShutdownListener(e => 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 }\n\n dispatch(): Promise<any> {\n if (this.instanceDispatched) {\n return this.dispatchTraces();\n }\n return this.dispatchInstance().then(ok => {\n if (ok) {\n this.instanceDispatched = true;\n return this.dispatchTraces();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.dispatchAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n dispatchTraces(destroy?: boolean): Promise<EventTrace[]> {\n if (this.traceQueue.length === 0) {\n return Promise.resolve(EMPTY_ARRAY);\n }\n let uri = this._techConfig.sessionApi + \"?attempts=\" + ++this.dispatchAttempts;\n if (destroy) {\n uri += \"&end=\" + new Date().toISOString();\n }\n const traces = [...this.traceQueue];\n this.traceQueue.length = 0;\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(traces)\n })\n .then(res=> {\n if (res.ok) {\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 >= 400 && res.status < 500) {\n return traces; //retry on bad request !?\n }\n return res.json()\n .then(body => body?.retry ? traces : EMPTY_ARRAY)\n .catch(() => EMPTY_ARRAY);\n })\n .catch(() => {\n console.warn(`Error while attempting to send sessions, attempts: ${this.dispatchAttempts}`); //no cnx !\n return traces;\n });\n }\n\n dispatchInstance(): Promise<boolean> {\n this.dispatchAttempts++;\n return fetch(this._techConfig.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n keepalive: true,\n body: JSON.stringify(this.instance)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.dispatchAttempts = 0;\n return true;\n }) : false)\n .catch(err => 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 this.subscription?.unsubscribe();\n this.wasDestroyed = true;\n dispatchExport(); //last metric ??\n this.dispatchTraces(true);\n }\n}\n\nexport function eventTraceScheduledDispatcher(tech: TechnicalConf): EventTraceScheduledDispatcherService {\n return EventTraceScheduledDispatcherService._instance = new EventTraceScheduledDispatcherService(tech);\n}\n","import { dateNow, UserAction, TRACE_TYPE_USER_ACTION } 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}\nexport function initUserActionMonitor() {\n try {\n const body = window.document.body;\n body.addEventListener('click', globalHandler, true);\n body.addEventListener('change', globalHandler, true);\n body.addEventListener('scrollend', globalHandler, true);\n body.addEventListener('dragend', globalHandler, true);\n window.document.addEventListener('DOMContentLoaded', globalHandler, true);\n }\n catch (e) {\n dispatchReport(\"initUserActionMonitor\", e);\n }\n}\n\nfunction globalHandler(event: Event | MouseEvent) {\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 addActionUser(eventType, target);\n } catch (err) {\n dispatchReport(\"UserACTION.globalHandler\", err)\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\nfunction addActionUser(eventType: string, target: HTMLElement) {\n dispatchTraces({\n ...SessionManager.instance.initUserAction(),\n '@type': TRACE_TYPE_USER_ACTION,\n type: eventType,\n instant: dateNow(),\n name: extractName(target),\n nodeName: target.tagName?.toLowerCase()\n } as UserAction);\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 { SessionManager } from \"./session-manager.service\";\nimport { dispatchReload, dispatchReport, dispatchShutown } from \"./event-bus\";\n\nexport function initNavigationMonitor(router: Router){\n try{\n initStartupSession();\n router.events.subscribe(routeHandler);\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 setTimeout(()=>SessionManager.instance.updateSession(),0)\n }\n}\n\nfunction windowUnloadHandler(event: any) {\n SessionManager.instance.navigate();\n dispatchShutown();\n}\n\nfunction initStartupSession() {\n SessionManager.instance.navigate(new URL(document.URL).host);\n SessionManager.instance.updateSession(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 setTimeout(() => SessionManager.instance.updateSession(), 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 } as MachineRessourceUsage);\n } catch (e) {\n dispatchReport('ressourceUsageHandler', e);\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 } from './event-bus';\nimport {sessionManager} from \"./session-manager.service\";\nimport {eventTraceDebugger} from \"./event-trace-debugger\";\nimport {InstanceEnvironment} from \"./trace.model\";\n\nconst COLLECTOR_CONFIG = new InjectionToken<CollectorConfig>('COLLECTOR_CONFIG');\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: CollectorConfig): ModuleWithProviders<NgCollectorModule> {\n const providers = [];\n if (configuration?.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 if (config.tech.analytics) {\n initUserActionMonitor();\n }\n if (config.tech.resources) {\n initResourceUsageMonitor();\n }\n initNavigationMonitor(router);\n //storageEventListener();\n //eventTraceDebugger\n addReloadListener(e=>{\n reloadCollector(config)\n });\n }\n}\n\nexport function initializeCollector(config: CollectorConfig) {\n const id = crypto.randomUUID();\n const tech = validateAndGetConfig(config, id);\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\n\n","import {\n dateNow,\n LocalRequest, LocalRequestCallBack,\n RequestMask,\n TRACE_TYPE_LOCAL_REQUEST,\n TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n UUID\n} from \"./trace.model\";\nimport {dispatchTraces, 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 dispatchTraces({\n ...WIN[\"inspect-session-manager\"]?.initRestRequest(RequestMask.LOCAL),\n \"@type\": TRACE_TYPE_LOCAL_REQUEST,\n id: this.id,\n name: propertyKey,\n location: target.constructor.name,\n user: WIN[\"inspect-session-manager\"]?.currentSession?.user, //bad access\n start: this.start\n } as LocalRequest);\n }\n\n postProcess(exception?: any){\n dispatchTraces({\n \"@type\": TRACE_TYPE_LOCAL_REQUEST_CALLBACK,\n id: this.id,\n exception: exception,\n end: dateNow()\n } as LocalRequestCallBack);\n }\n}\n","import {LocalRequestMonitor} from \"./local-request.monitor\";\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 = resolveException(e);\n throw e;\n } finally {\n monitor.postProcess(exception)\n }\n }\n return descriptor;\n }\n}\nexport function resolveException(e: any): { type: string | null; message: string | null } {\n let type = null, message = null;\n if (e) {\n if (typeof e === \"string\") {\n message = e;\n } else if (e instanceof Error) {\n type = e.name;\n message = e.message;\n } else {\n message = JSON.stringify(e)\n }\n }\n return { type, message };\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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"}
|
|
@@ -9,7 +9,7 @@ export declare class SessionManager {
|
|
|
9
9
|
static get instance(): SessionManager;
|
|
10
10
|
navigate(url?: string): void;
|
|
11
11
|
private endSession;
|
|
12
|
-
updateSession(): void;
|
|
12
|
+
updateSession(update?: boolean): void;
|
|
13
13
|
getCurrentSessionCallBack(fn: (s: MainSessionCallBack) => any): any;
|
|
14
14
|
currentSessionID(): string | undefined;
|
|
15
15
|
initRestRequest(mask: RequestMask): any;
|
package/package.json
CHANGED