@oneteme/inspect-ng-collector 1.2.2 → 1.2.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.
@@ -25,7 +25,10 @@ function logInspect(level, ...args) {
25
25
  }
26
26
  }
27
27
  function prettyActionUserFormat(session, userAction) {
28
- let s = `(${session.location}) `;
28
+ let s = "";
29
+ if (session) {
30
+ s += `(${session.location}) `;
31
+ }
29
32
  if (userAction.type) {
30
33
  s += `[${userAction.type}]`;
31
34
  }
@@ -358,10 +361,13 @@ class SessionManager {
358
361
  getCurrentSession() {
359
362
  return this.currentSession;
360
363
  }
361
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: SessionManager, deps: [{ token: 'config' }, { token: 'instance' }], target: i0.ɵɵFactoryTarget.Injectable }); }
362
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: SessionManager, providedIn: 'root' }); }
364
+ resetCurrentSession() {
365
+ this.currentSession = null;
366
+ }
367
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionManager, deps: [{ token: 'config' }, { token: 'instance' }], target: i0.ɵɵFactoryTarget.Injectable }); }
368
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionManager, providedIn: 'root' }); }
363
369
  }
364
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: SessionManager, decorators: [{
370
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionManager, decorators: [{
365
371
  type: Injectable,
366
372
  args: [{ providedIn: 'root' }]
367
373
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -384,21 +390,30 @@ class HttpInterceptorService {
384
390
  if (event instanceof HttpResponse) {
385
391
  status = +event.status;
386
392
  responseBody = event.body;
387
- id = getReqid(event.headers);
393
+ id = getReqid(event?.headers);
388
394
  }
389
395
  }, error => {
390
- id = getReqid(error.headers);
391
- status = +error.status;
392
- exception = {
393
- type: error.name,
394
- message: error.error && error.status ? JSON.stringify(error.error) : error.message
395
- };
396
+ id = getReqid(error?.headers);
397
+ if (error) {
398
+ status = +error?.status || 0;
399
+ exception = {
400
+ type: error?.name,
401
+ message: error.error && error.status ? JSON.stringify(error.error) : error?.message
402
+ };
403
+ }
404
+ else {
405
+ status = 0;
406
+ exception = {
407
+ type: "IOException",
408
+ message: "The remote server is unavailable.",
409
+ };
410
+ }
396
411
  }), finalize(() => {
397
412
  try {
398
413
  if (this.SessionManager.getCurrentSession()) {
399
414
  const url = toHref(req.urlWithParams);
400
415
  const auth_user = extractAuthSchemeAnduser(req.headers);
401
- this.SessionManager.getCurrentSession().restRequests.push({
416
+ this.SessionManager.getCurrentSession()?.restRequests.push({
402
417
  id: id,
403
418
  method: req.method,
404
419
  protocol: url.protocol.slice(0, -1),
@@ -423,10 +438,10 @@ class HttpInterceptorService {
423
438
  }
424
439
  }));
425
440
  }
426
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: HttpInterceptorService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
427
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
441
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
442
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
428
443
  }
429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: HttpInterceptorService, decorators: [{
444
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, decorators: [{
430
445
  type: Injectable,
431
446
  args: [{ providedIn: 'root' }]
432
447
  }], ctorParameters: () => [{ type: SessionManager }] });
@@ -462,7 +477,7 @@ function extractAuthSchemeAnduser(headers) {
462
477
  return auth_user;
463
478
  }
464
479
  function getReqid(headers) {
465
- return headers.has('x-tracert')
480
+ return headers?.has('x-tracert')
466
481
  ? headers.get('x-tracert')
467
482
  : undefined;
468
483
  }
@@ -586,12 +601,12 @@ class AnalyticsCollector {
586
601
  nodeName: target.tagName?.toLowerCase(),
587
602
  };
588
603
  logInspect('user', () => prettyActionUserFormat(this.sessionManager.getCurrentSession(), ua));
589
- this.sessionManager.getCurrentSession().userActions.push(ua);
604
+ this.sessionManager.getCurrentSession()?.userActions.push(ua);
590
605
  }
591
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: AnalyticsCollector, deps: [{ token: DOCUMENT }, { token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
592
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: AnalyticsCollector, providedIn: 'root' }); }
606
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AnalyticsCollector, deps: [{ token: DOCUMENT }, { token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
607
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AnalyticsCollector, providedIn: 'root' }); }
593
608
  }
594
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: AnalyticsCollector, decorators: [{
609
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AnalyticsCollector, decorators: [{
595
610
  type: Injectable,
596
611
  args: [{
597
612
  providedIn: 'root'
@@ -606,16 +621,16 @@ class GlobalErrorHandlerService {
606
621
  this.sessionManager = sessionManager;
607
622
  }
608
623
  handleError(error) {
609
- this.sessionManager.getCurrentSession().exceptions.push({
624
+ this.sessionManager.getCurrentSession()?.exceptions.push({
610
625
  type: error?.name,
611
626
  message: error?.message
612
627
  });
613
628
  throw error;
614
629
  }
615
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: GlobalErrorHandlerService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
616
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
630
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
631
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
617
632
  }
618
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
633
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
619
634
  type: Injectable,
620
635
  args: [{ providedIn: 'root' }]
621
636
  }], ctorParameters: () => [{ type: SessionManager }] });
@@ -650,30 +665,32 @@ class NgCollectorModule {
650
665
  ngModule: NgCollectorModule
651
666
  };
652
667
  }
653
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
654
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.5", ngImport: i0, type: NgCollectorModule }); }
655
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: NgCollectorModule }); }
668
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
669
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule }); }
670
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule }); }
656
671
  }
657
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.5", ngImport: i0, type: NgCollectorModule, decorators: [{
672
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule, decorators: [{
658
673
  type: NgModule
659
674
  }] });
660
675
  function initializeEvents(router, sessionManager, analyticsCollector) {
661
676
  return () => {
662
677
  logInspect('app', 'initialize routing events listeners');
663
678
  window.addEventListener('beforeunload', event => {
664
- if (!sessionManager.getCurrentSession().loading) {
679
+ if (!sessionManager.getCurrentSession()?.loading) {
665
680
  sessionManager.newSession();
666
681
  }
667
682
  if (sessionManager.sendSessionfinished) {
668
683
  sessionManager.sendSessions(true);
684
+ sessionManager.resetCurrentSession();
669
685
  }
670
686
  });
671
687
  router.events.subscribe(event => {
672
688
  if (event instanceof NavigationStart) {
689
+ logInspect('app', sessionManager.currentSession);
673
690
  sessionManager.newSession(event.url);
674
691
  }
675
692
  if (event instanceof NavigationEnd) {
676
- delete sessionManager.getCurrentSession().loading;
693
+ delete sessionManager.getCurrentSession()?.loading;
677
694
  }
678
695
  });
679
696
  if (analyticsCollector) {
@@ -716,10 +733,10 @@ function TraceableStage() {
716
733
  }
717
734
  finally {
718
735
  end = Date.now();
719
- SessionManager.instance.getCurrentSession().localRequests.push({
736
+ SessionManager.instance.getCurrentSession()?.localRequests.push({
720
737
  name: propertyKey,
721
738
  location: target.constructor.name,
722
- user: session.user,
739
+ user: session?.user,
723
740
  start: start,
724
741
  end: end,
725
742
  exception: exception
@@ -1 +1 @@
1
- {"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/util.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/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/analytics-collect.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.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":["import {LocalRequest, MainSession, RestRequest, UserAction} from \"./trace.model\";\n\nconst WIN:any = window;\ntype level = 'app' | 'user';\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport function initDebug(value: {app: boolean, user: boolean}){\n WIN[\"inspect\"] = { app : value.app, user: value.user };\n}\n\nexport function logInspect(level: level, ...args: any[]){\n if(WIN[\"inspect\"][level]){\n if(args.length == 1 && typeof args[0] == 'function'){\n args = args[0]();\n if(!Array.isArray(args)){\n args = [args];\n }\n }\n console.log(`[INSPECT]-(${level})`, ...args);\n }\n}\n\nexport function prettyActionUserFormat(session: MainSession,userAction:UserAction){\n let s = `(${session.location}) `\n if(userAction.type){\n s+= `[${userAction.type}]`;\n }\n\n if(userAction.nodeName){\n s+= `<${userAction.nodeName}>`\n }\n\n if(userAction.name){\n s+= `(${userAction.name}) `\n }\n\n s+= ` >> ${new Date(userAction.start*1000).toISOString()}`\n return s;\n}\n\nexport function prettySessionFormat(session: MainSession){\n let s= `[${session.name}]`;\n if(session.user){\n s+= `<${session.user}>`\n }\n if(session.location){\n s+= `(${session.location}) `\n }\n s+=prettyDurationFormat(session.start, session.end)+'\\n';\n session.restRequests.forEach(r => {\n s+= prettyRestRequestFormat(r)+'\\n';\n })\n session.localRequests.forEach(r => {\n s+= prettyLocalRequestFormat(r)+'\\n';\n })\n return s;\n}\n\nfunction prettyRestRequestFormat(rest: RestRequest){\n let s = ` - [${rest.method}]`\n if(rest.protocol){\n s+= `${rest.protocol}://`\n }\n if(rest.host){\n s+= rest.host\n }\n if(rest.port > 0){\n s+= `:${rest.port}`\n }\n if(rest.path){\n if(!rest.path.startsWith(\"/\") && !s.endsWith(\"/\")){\n s+= '/'\n }\n s+= rest.path;\n }\n if(rest.query){\n s+= rest.query\n }\n if(rest.exception?.type){\n s+= ` ${rest.exception?.type}:`;\n }\n if(rest.exception?.message){\n s+= ` ${rest.exception.message}`;\n }\n s+= ` >> ${rest.status}`\n s+= prettyDurationFormat(rest.start,rest.end);\n return s;\n}\n\nfunction prettyLocalRequestFormat(local: LocalRequest){\n let s = ` - [${local.name}]`;\n if(local.location){\n s+= `(${local.location})`\n }\n if(local.exception?.type){\n s+= ` ${local.exception?.type}:`;\n }\n if(local.exception?.message){\n s+= ` ${local.exception.message}`\n }\n s+= ` >> ${prettyDurationFormat(local.start, local.end)}`;\n return s;\n}\n\nfunction prettyDurationFormat(start:number,end:number|undefined){\n return start && end ? `(in ${ (end - start).toFixed(2) } s)` : '';\n}\n\n\n\n\n","import { dateNow, initDebug } from \"./util\";\nconst SLASH = '/';\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\nconst PATH_PATERN = /[\\w-]+(\\/[\\w-]+)*/;\nexport interface ApplicationConf {\n host?: string;\n name?: string | (() => string);\n version?: string | (() => string);\n env?: string | (() => string);\n user?: string | (() => string);\n bufferMaxSize?: number | (() => number);\n delay?: number| (() => number);\n instanceApi?: string | (() => string);\n sessionApi?: string | (() => string);\n exclude?: RegExp[] | (() => RegExp[]);\n debug?: {app: boolean, user: boolean};\n analytics?:boolean;\n enabled?: boolean;\n}\n\nexport interface TechnicalConf {\n user: () => string ;\n bufferMaxSize: number;\n delay: number;\n instanceApi: string;\n sessionApi: string;\n exclude: RegExp[];\n debug: {app: boolean, user: boolean};\n analytics?: boolean;\n enabled: boolean;\n}\n\nexport function validateAndGetConfig(conf:any):TechnicalConf{\n let host = matchRegex(getStringOrCall(conf.host), \"host\" , HOST_PATERN)\n let sessionApi = matchRegex(getStringOrCall(conf.sessionApi),\"sessionApi\", PATH_PATERN, \"v3/trace/instance/:id/session\")\n let instanceApi = matchRegex(getStringOrCall(conf.instanceApi),\"intanceApi\", PATH_PATERN, \"v3/trace/instance\")\n initDebug(conf.debug ?? {app: false, user: false});\n return {\n user : typeof conf.user == 'function' ? conf.user : ()=> conf.user,\n bufferMaxSize: requirePostitiveValue(getNumberOrCall(conf.bufferMaxSize),\"bufferMaxSize\", 1000) ,\n delay: requirePostitiveValue(getNumberOrCall(conf.delay),\"delay\", 60000),\n instanceApi: sessionApiURL(host, instanceApi),\n sessionApi: instanceApiURL(host, sessionApi),\n exclude: getRegArrOrCall(conf.exclude) || [],\n debug: conf.debug ?? {app: false, user: false},\n analytics: conf.analytics ?? false,\n enabled: conf.enabled ?? false\n }\n}\n\nexport function GetInstanceEnvironement(conf:ApplicationConf){\n return {\n name: require(getStringOrCall(conf.name), 'name'),\n version: getStringOrCall(conf.version),\n address: undefined, //server side\n env: require(getStringOrCall(conf.env),'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n instant: dateNow(),\n collector: \"inspect-ng-collector-0.0.1\"\n }\n}\n\nexport function getNumberOrCall(o?: number | (() => number)): number | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function getStringOrCall(o?: string | (() => string)): string | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function getRegArrOrCall(o?: RegExp[] | (() => RegExp[])): RegExp[] | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function detectBrowser() {\n try {\n const agent = window.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.indexOf('edg') > -1:\n return 'Edge';\n case agent.indexOf('opr') > -1:\n return 'Opera';\n case agent.indexOf('chrome') > -1:\n return 'Chrome';\n case agent.indexOf('firefox') > -1:\n return 'Firefox';\n case agent.indexOf('safari') > -1:\n return 'Safari';\n case agent.indexOf('msie') > -1:\n return 'Microsoft Internet Explorer';\n }\n }\n catch (e) {\n console.error(e);\n }\n return undefined;\n}\n\nexport function detectOs() {\n try {\n let versionMatch, version;\n const agent = window.navigator.userAgent.toLowerCase()\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : 'Unknown';\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] : 'Unknown';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n console.error(e);\n }\n return undefined;\n}\n\nfunction instanceApiURL(host:string, path:string){\n return toURL(host,path);\n}\n\nfunction sessionApiURL(host:string, path:string){\n return toURL(host,path);\n}\n\nfunction toURL(host:string, path:string ){\n return host.endsWith(SLASH) || path.startsWith(SLASH) ? host + path : [host,path].join(SLASH);\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\n\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { InstanceEnvironment, MainSession } from './trace.model';\nimport { interval, startWith, Subscription, tap } from 'rxjs';\nimport { dateNow, logInspect, prettySessionFormat } from './util';\nimport { TechnicalConf } from './configuration';\n\n\n@Injectable({ providedIn: 'root' })\nexport class SessionManager implements OnDestroy {\n\n config: TechnicalConf;\n instanceEnvironment: InstanceEnvironment;\n scheduledSessionSender: Subscription;\n sessionQueue: MainSession[] = [];\n sessionSendAttempts: number = 0\n sendSessionfinished: boolean = true;\n currentSession!: MainSession;\n private static _instance: SessionManager;\n\n constructor(@Inject('config') config: TechnicalConf,\n @Inject('instance') instance: InstanceEnvironment) {\n this.config = config;\n this.instanceEnvironment = instance;\n SessionManager._instance = this;\n this.scheduledSessionSender = interval(config.delay)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (this.sendSessionfinished) {\n this.sendSessionfinished = false;\n this.manageCache().finally(() => { this.sendSessionfinished = true });\n }\n }))\n .subscribe();\n logInspect('app','SessionManager initialized');\n }\n\n static get instance(): SessionManager{\n return SessionManager._instance;\n }\n\n newSession(url?: string) {\n if (this.currentSession) {\n this.currentSession.end = dateNow();\n this.currentSession.name = document.title;\n this.currentSession.location = document.URL;\n if (this.config.exclude.every((e) => !e.test(this.currentSession.location))) {\n this.sessionQueue.push(this.currentSession);\n logInspect('app',`added element to session queue, new size is:${this.sessionQueue.length}`);\n }\n\n logInspect('app',() => prettySessionFormat(this.currentSession));\n }\n if (url) {\n this.currentSession = {\n '@type': \"main\",\n user: this.config.user(),\n start: dateNow(),\n type: \"VIEW\",\n location: url,\n loading: true,\n restRequests: [],\n localRequests: [],\n userActions: [],\n exceptions: []\n }\n }\n }\n\n manageCache(): Promise<any> {\n if(this.instanceEnvironment.id){\n return this.sendSessions();\n }\n return this.postInstanceEnv().then((id: string | null) => {\n if (id) {\n return this.sendSessions();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.sessionSendAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n sendSessions(instanceComplete?:boolean) : Promise<number>{\n if (this.sessionQueue.length > 0) {\n let uri = this.config.sessionApi;\n if(instanceComplete){\n uri += \"?end=\"+ new Date().toISOString();\n }\n this.sessionSendAttempts++;\n let sessions: MainSession[] = [...this.sessionQueue];\n this.sessionQueue.splice(0, sessions.length); // add rest of sessions\n logInspect('app',`sending sessions, attempts:${this.sessionSendAttempts}, queue size : ${sessions.length}`)\n return this.putSessions(sessions,uri)\n .then(ok => {\n if (ok) {\n logInspect('app',`sessions sent successfully, queue size reset, new size is: ${this.sessionQueue.length}`)\n this.sessionSendAttempts = 0;\n return sessions.length;\n } else {\n console.warn(`Error while attempting to send sessions, attempts: ${this.sessionSendAttempts}`)//\n this.revertQueueSize(sessions);\n return -1;\n }\n })\n }\n return Promise.resolve(0);\n }\n\n putSessions(sessionList: MainSession[], uri: string): Promise<boolean> {\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n body: JSON.stringify(sessionList)\n })\n .then(res => res.ok)\n .catch(err => false);\n }\n\n postInstanceEnv(): Promise<string | null> {\n this.sessionSendAttempts++;\n return fetch(this.config.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n body: JSON.stringify(this.instanceEnvironment)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.config.sessionApi = this.config.sessionApi.replace(':id', id);\n logInspect('app','Environement instance sent successfully', id);\n this.sessionSendAttempts = 0;\n return this.instanceEnvironment.id = id;\n }) : null)\n .catch(err => null);\n }\n\n revertQueueSize(sessions: MainSession[]) {\n this.sessionQueue.unshift(...sessions);\n if (this.sessionQueue.length > this.config.bufferMaxSize) {\n let diff = this.sessionQueue.length - this.config.bufferMaxSize;\n this.sessionQueue = this.sessionQueue.slice(0, this.config.bufferMaxSize);\n logInspect('app',`Buffer size exeeded the max size,last sessions have been removed from buffer, (number of sessions removed):${diff}`)\n }\n }\n\n ngOnDestroy(): void {\n if (this.scheduledSessionSender) {\n this.scheduledSessionSender.unsubscribe();\n }\n }\n\n getCurrentSession() {\n return this.currentSession;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { tap, finalize } from 'rxjs/operators'\nimport { ExceptionInfo } from './trace.model';\nimport { dateNow } from './util';\nimport { SessionManager } from './session-manager.service';\n\n\n\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(private readonly SessionManager: SessionManager) { } // change this to session manager\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const start = dateNow();\n let status: number, responseBody: any = '', exception: ExceptionInfo;\n let id: string| undefined;\n return next.handle(req).pipe(tap(\n (event: any) => {\n if (event instanceof HttpResponse) {\n status = +event.status;\n responseBody = event.body\n id = getReqid(event.headers);\n }\n },\n error => {\n id = getReqid(error.headers);\n status = +error.status;\n exception = {\n type : error.name,\n message: error.error && error.status ? JSON.stringify(error.error) : error.message\n }\n },\n ), finalize(() => {\n try {\n if (this.SessionManager.getCurrentSession()){\n const url = toHref(req.urlWithParams);\n const auth_user = extractAuthSchemeAnduser(req.headers);\n this.SessionManager.getCurrentSession().restRequests.push({\n id: id,\n method: req.method,\n protocol: url.protocol.slice(0, -1),\n host: exctractHost(url.host),\n port: +url.port || -1,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: req.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n status: +status,\n inDataSize: sizeOf(responseBody),\n ouDataSize: sizeOf(req.body),\n start: start,\n end: dateNow(),\n exception: exception\n });\n }\n }catch(err){\n console.warn(err);\n }\n }));\n }\n}\n\nfunction toHref(url: string): HTMLAnchorElement {\n const href = document.createElement('a');\n href.setAttribute('href', url);\n return href;\n}\n\nfunction exctractHost(path: string) {\n const portregex = /:\\d+/;\n return path.replace(portregex, '')\n}\n\nfunction extractAuthSchemeAnduser(headers: any): {user: string | undefined, authScheme: string | undefined} {\n let auth_user: {user: string | undefined, authScheme: string | undefined} = {\n user: undefined,\n authScheme: undefined\n };\n try {\n auth_user.authScheme = headers.get('authorization').match(/^(\\w+) /)?.at(1)\n switch (auth_user.authScheme){\n case \"Basic\":\n auth_user.user = atob(headers.get('authorization').split(\" \")[1]).toString().split(':')[0];\n break;\n case \"Bearer\": {\n const parts = headers.get('authorization').split(\" \")[1].split('.');\n if (parts.length == 3) {\n auth_user.user = JSON.parse(atob(parts[1]).toString()).sub;\n }\n }\n }\n }catch(err){}\n return auth_user;\n}\n\nfunction getReqid(headers:any):string | undefined {\n return headers.has('x-tracert')\n ? headers.get('x-tracert')\n : undefined;\n}\n\nfunction sizeOf(body: any): number {\n return body ? JSON.stringify(body).length : 0;\n}\n","type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport interface MainSession {\n '@type'?: string;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n end?: number;\n exceptions: ExceptionInfo[], // to be changed ?\n restRequests: RestRequest[],\n localRequests: LocalRequest[],\n userActions: UserAction[],\n loading?: boolean\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}\n\nexport interface RestRequest {\n id?: string;\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 status: number;\n inDataSize: number;\n ouDataSize: number;\n user?:string;\n start: number;\n end: number;\n exception?: ExceptionInfo\n}\n\nexport interface LocalRequest {\n name: string;\n location: string;\n user?: string;\n start: number;\n end: number;\n exception?: ExceptionInfo\n}\n\nexport interface ExceptionInfo { // to bechanged\n type: string | null;\n message: string | null;\n}\n\nexport interface UserAction{\n type: string;\n start: number;\n name: string| null;\n nodeName: string;\n}\n\nexport const 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\nexport const 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\nexport function 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\nexport function extractName(t: HTMLElement){\n try\n {\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","import {Inject, Injectable} from \"@angular/core\";\nimport {DOCUMENT} from \"@angular/common\";\nimport {extractName} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dateNow, logInspect, prettyActionUserFormat} from \"./util\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnalyticsCollector {\n\n eventHandlers : {[key:string]: (target: HTMLElement)=>boolean} = {\n 'click' : (target:HTMLElement)=> this.lookUpChild(target,1),\n }\n patchedEvent : {[key:string]:boolean} = {};\n elementsWithClickListeners = new WeakSet();\n constructor(@Inject(DOCUMENT) private readonly document: Document,\n private readonly sessionManager: SessionManager) {\n\n }\n subscribeToEvents(){\n const body = this.document.body;\n body.addEventListener('click', (event) => this.globalHandler(event), true);\n body.addEventListener('change', (event) => this.globalHandler(event), true);\n body.addEventListener('scrollend', (event) => this.globalHandler(event), true);\n body.addEventListener('dragend', (event) => this.globalHandler(event), true);\n this.document.addEventListener('DOMContentLoaded', (event) => this.globalHandler(event), true);\n\n /* let that =this;\n\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n EventTarget.prototype.addEventListener = function(type: string, listener: any, options?: boolean | AddEventListenerOptions) {\n if(type === \"click\"){\n that.elementsWithClickListeners.add(this);\n const wrapperListener = (event: any) => {\n if(that.elementsWithClickListeners.has(event.currentTarget)){\n console.log('click event',event);\n that.GlobalHandler(event);\n }\n return listener.apply(this, arguments);\n };\n return originalAddEventListener.apply(this,[type,wrapperListener,options])\n }\n return originalAddEventListener.call(this, type, listener, options);\n }*/\n }\n\n\n\n globalHandler(event: Event | MouseEvent){\n // event.stopPropagation()\n // event.preventDefault()\n let target = event.target as HTMLElement;\n let eventType = event.type;\n try {\n if(this.eventHandlers.hasOwnProperty(eventType) && !this.eventHandlers[eventType](target)){\n return;\n }\n this.addActionUser(eventType,target);\n }catch(err){\n console.warn(err);\n }\n }\n\n 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 && this.lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n }\n\n addActionUser(eventType: string, target: HTMLElement){\n const ua = {\n type: eventType,\n start: dateNow(),\n name : extractName(target),\n nodeName : target.tagName?.toLowerCase(),\n }\n logInspect('user',() => prettyActionUserFormat(this.sessionManager.getCurrentSession(),ua));\n this.sessionManager.getCurrentSession().userActions.push(ua);\n }\n\n\n}\n","import {ErrorHandler, Injectable} from \"@angular/core\";\nimport {SessionManager} from \"./session-manager.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandlerService implements ErrorHandler {\n\n constructor(private readonly sessionManager: SessionManager) {\n }\n handleError(error:any ) {\n this.sessionManager.getCurrentSession().exceptions.push({\n type: error?.name,\n message: error?.message\n })\n throw error;\n }\n}\n","import {NgModule, APP_INITIALIZER, ModuleWithProviders, ErrorHandler} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { logInspect } from './util';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { ApplicationConf, GetInstanceEnvironement, validateAndGetConfig } from './configuration';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { SessionManager } from './session-manager.service';\nimport {AnalyticsCollector} from \"./analytics-collect.service\";\nimport {GlobalErrorHandlerService} from \"./global-error-handler.service\";\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: ApplicationConf): ModuleWithProviders<NgCollectorModule> {\n if (configuration?.enabled) {\n try {\n let config = validateAndGetConfig(configuration);\n let instance = GetInstanceEnvironement(configuration);\n let deps:any[] = [Router, SessionManager]\n logInspect('app',JSON.stringify(config));\n logInspect('app',JSON.stringify(instance));\n config.analytics && deps.push(AnalyticsCollector);\n\n return {\n ngModule: NgCollectorModule,\n providers: [\n SessionManager,\n { provide: APP_INITIALIZER, useFactory: initializeEvents, deps: deps, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true },\n { provide: 'instance', useValue: instance },\n { provide: 'config', useValue: config },\n { provide: ErrorHandler, useClass: GlobalErrorHandlerService }\n ]\n };\n } catch (e:any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {\n ngModule: NgCollectorModule\n }\n }\n}\n\nexport function initializeEvents(router: Router, sessionManager: SessionManager, analyticsCollector: AnalyticsCollector) {\n return () => {\n logInspect('app','initialize routing events listeners');\n window.addEventListener('beforeunload', event => {\n if(!sessionManager.getCurrentSession().loading){\n sessionManager.newSession();\n }\n if(sessionManager.sendSessionfinished){\n sessionManager.sendSessions(true);\n }\n });\n router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n sessionManager.newSession(event.url);\n }\n if (event instanceof NavigationEnd) {\n delete sessionManager.getCurrentSession().loading;\n }\n })\n if(analyticsCollector){\n analyticsCollector.subscribeToEvents();\n }\n\n }\n}\n\n\n","import { SessionManager } from \"./session-manager.service\";\n\n\nexport function TraceableStage(){\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 if(SessionManager.instance){\n let session = SessionManager.instance.getCurrentSession();\n let exception;\n let start,end;\n \n start = Date.now();\n try{\n return originalMethod.apply(this,args);\n }catch(e:any){\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 exception = {\n type : type,\n message : message\n }\n throw e;\n }finally{\n end = Date.now();\n SessionManager.instance.getCurrentSession().localRequests.push({\n name: propertyKey,\n location: target.constructor.name,\n user: session.user,\n start: start, \n end: end,\n exception: exception\n })\n }\n }\n }\n return descriptor;\n }\n }","/*\n * Public API Surface of inspect-ng-collector\n */\n\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\n\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1.SessionManager"],"mappings":"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"}
1
+ {"version":3,"file":"oneteme-inspect-ng-collector.mjs","sources":["../../../../projects/oneteme/inspect-ng-collector/src/lib/util.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/http-interceptor.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/trace.model.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/analytics-collect.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/global-error-handler.service.ts","../../../../projects/oneteme/inspect-ng-collector/src/lib/ng-collector.module.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":["import {LocalRequest, MainSession, RestRequest, UserAction} from \"./trace.model\";\n\nconst WIN:any = window;\ntype level = 'app' | 'user';\nexport function dateNow() {\n return Date.now() / 1_000;\n}\n\nexport function initDebug(value: {app: boolean, user: boolean}){\n WIN[\"inspect\"] = { app : value.app, user: value.user };\n}\n\nexport function logInspect(level: level, ...args: any[]){\n if(WIN[\"inspect\"][level]){\n if(args.length == 1 && typeof args[0] == 'function'){\n args = args[0]();\n if(!Array.isArray(args)){\n args = [args];\n }\n }\n console.log(`[INSPECT]-(${level})`, ...args);\n }\n}\n\nexport function prettyActionUserFormat(session: MainSession | null, userAction:UserAction){\n let s = \"\"\n if(session){\n s+=`(${session.location}) `\n }\n if(userAction.type){\n s+= `[${userAction.type}]`;\n }\n if(userAction.nodeName){\n s+= `<${userAction.nodeName}>`\n }\n if(userAction.name){\n s+= `(${userAction.name}) `\n }\n s+= ` >> ${new Date(userAction.start*1000).toISOString()}`\n return s;\n}\n\nexport function prettySessionFormat(session: MainSession){\n let s= `[${session.name}]`;\n if(session.user){\n s+= `<${session.user}>`\n }\n if(session.location){\n s+= `(${session.location}) `\n }\n s+=prettyDurationFormat(session.start, session.end)+'\\n';\n session.restRequests.forEach(r => {\n s+= prettyRestRequestFormat(r)+'\\n';\n })\n session.localRequests.forEach(r => {\n s+= prettyLocalRequestFormat(r)+'\\n';\n })\n return s;\n}\n\nfunction prettyRestRequestFormat(rest: RestRequest){\n let s = ` - [${rest.method}]`\n if(rest.protocol){\n s+= `${rest.protocol}://`\n }\n if(rest.host){\n s+= rest.host\n }\n if(rest.port > 0){\n s+= `:${rest.port}`\n }\n if(rest.path){\n if(!rest.path.startsWith(\"/\") && !s.endsWith(\"/\")){\n s+= '/'\n }\n s+= rest.path;\n }\n if(rest.query){\n s+= rest.query\n }\n if(rest.exception?.type){\n s+= ` ${rest.exception?.type}:`;\n }\n if(rest.exception?.message){\n s+= ` ${rest.exception.message}`;\n }\n s+= ` >> ${rest.status}`\n s+= prettyDurationFormat(rest.start,rest.end);\n return s;\n}\n\nfunction prettyLocalRequestFormat(local: LocalRequest){\n let s = ` - [${local.name}]`;\n if(local.location){\n s+= `(${local.location})`\n }\n if(local.exception?.type){\n s+= ` ${local.exception?.type}:`;\n }\n if(local.exception?.message){\n s+= ` ${local.exception.message}`\n }\n s+= ` >> ${prettyDurationFormat(local.start, local.end)}`;\n return s;\n}\n\nfunction prettyDurationFormat(start:number,end:number|undefined){\n return start && end ? `(in ${ (end - start).toFixed(2) } s)` : '';\n}\n\n\n\n\n","import { dateNow, initDebug } from \"./util\";\nconst SLASH = '/';\nconst HOST_PATERN = /https?:\\/\\/[\\w\\-.]+(:\\d{2,5})?\\/?/;\nconst PATH_PATERN = /[\\w-]+(\\/[\\w-]+)*/;\nexport interface ApplicationConf {\n host?: string;\n name?: string | (() => string);\n version?: string | (() => string);\n env?: string | (() => string);\n user?: string | (() => string);\n bufferMaxSize?: number | (() => number);\n delay?: number| (() => number);\n instanceApi?: string | (() => string);\n sessionApi?: string | (() => string);\n exclude?: RegExp[] | (() => RegExp[]);\n debug?: {app: boolean, user: boolean};\n analytics?:boolean;\n enabled?: boolean;\n}\n\nexport interface TechnicalConf {\n user: () => string ;\n bufferMaxSize: number;\n delay: number;\n instanceApi: string;\n sessionApi: string;\n exclude: RegExp[];\n debug: {app: boolean, user: boolean};\n analytics?: boolean;\n enabled: boolean;\n}\n\nexport function validateAndGetConfig(conf:any):TechnicalConf{\n let host = matchRegex(getStringOrCall(conf.host), \"host\" , HOST_PATERN)\n let sessionApi = matchRegex(getStringOrCall(conf.sessionApi),\"sessionApi\", PATH_PATERN, \"v3/trace/instance/:id/session\")\n let instanceApi = matchRegex(getStringOrCall(conf.instanceApi),\"intanceApi\", PATH_PATERN, \"v3/trace/instance\")\n initDebug(conf.debug ?? {app: false, user: false});\n return {\n user : typeof conf.user == 'function' ? conf.user : ()=> conf.user,\n bufferMaxSize: requirePostitiveValue(getNumberOrCall(conf.bufferMaxSize),\"bufferMaxSize\", 1000) ,\n delay: requirePostitiveValue(getNumberOrCall(conf.delay),\"delay\", 60000),\n instanceApi: sessionApiURL(host, instanceApi),\n sessionApi: instanceApiURL(host, sessionApi),\n exclude: getRegArrOrCall(conf.exclude) || [],\n debug: conf.debug ?? {app: false, user: false},\n analytics: conf.analytics ?? false,\n enabled: conf.enabled ?? false\n }\n}\n\nexport function GetInstanceEnvironement(conf:ApplicationConf){\n return {\n name: require(getStringOrCall(conf.name), 'name'),\n version: getStringOrCall(conf.version),\n address: undefined, //server side\n env: require(getStringOrCall(conf.env),'env'),\n os: detectOs(),\n re: detectBrowser(),\n user: undefined, // cannot get user\n type: \"CLIENT\",\n instant: dateNow(),\n collector: \"inspect-ng-collector-0.0.1\"\n }\n}\n\nexport function getNumberOrCall(o?: number | (() => number)): number | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function getStringOrCall(o?: string | (() => string)): string | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function getRegArrOrCall(o?: RegExp[] | (() => RegExp[])): RegExp[] | undefined {\n return typeof o === \"function\" ? o() : o;\n}\n\nexport function detectBrowser() {\n try {\n const agent = window.navigator.userAgent.toLowerCase()\n switch (true) {\n case agent.indexOf('edg') > -1:\n return 'Edge';\n case agent.indexOf('opr') > -1:\n return 'Opera';\n case agent.indexOf('chrome') > -1:\n return 'Chrome';\n case agent.indexOf('firefox') > -1:\n return 'Firefox';\n case agent.indexOf('safari') > -1:\n return 'Safari';\n case agent.indexOf('msie') > -1:\n return 'Microsoft Internet Explorer';\n }\n }\n catch (e) {\n console.error(e);\n }\n return undefined;\n}\n\nexport function detectOs() {\n try {\n let versionMatch, version;\n const agent = window.navigator.userAgent.toLowerCase()\n switch (true) {\n case (/windows/.test(agent)):\n versionMatch = /windows nt (\\d+\\.\\d+)/.exec(agent);\n version = versionMatch ? versionMatch[1] : 'Unknown';\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] : 'Unknown';\n return `MacOs ${version}`\n }\n }\n catch (e) {\n console.error(e);\n }\n return undefined;\n}\n\nfunction instanceApiURL(host:string, path:string){\n return toURL(host,path);\n}\n\nfunction sessionApiURL(host:string, path:string){\n return toURL(host,path);\n}\n\nfunction toURL(host:string, path:string ){\n return host.endsWith(SLASH) || path.startsWith(SLASH) ? host + path : [host,path].join(SLASH);\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\n\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport { InstanceEnvironment, MainSession } from './trace.model';\nimport { interval, startWith, Subscription, tap } from 'rxjs';\nimport { dateNow, logInspect, prettySessionFormat } from './util';\nimport { TechnicalConf } from './configuration';\n\n\n@Injectable({ providedIn: 'root' })\nexport class SessionManager implements OnDestroy {\n\n config: TechnicalConf;\n instanceEnvironment: InstanceEnvironment;\n scheduledSessionSender: Subscription;\n sessionQueue: MainSession[] = [];\n sessionSendAttempts: number = 0\n sendSessionfinished: boolean = true;\n currentSession!: MainSession| null;\n private static _instance: SessionManager;\n\n constructor(@Inject('config') config: TechnicalConf,\n @Inject('instance') instance: InstanceEnvironment) {\n this.config = config;\n this.instanceEnvironment = instance;\n SessionManager._instance = this;\n this.scheduledSessionSender = interval(config.delay)\n .pipe(startWith(0))\n .pipe(tap(() => {\n if (this.sendSessionfinished) {\n this.sendSessionfinished = false;\n this.manageCache().finally(() => { this.sendSessionfinished = true });\n }\n }))\n .subscribe();\n logInspect('app','SessionManager initialized');\n }\n\n static get instance(): SessionManager{\n return SessionManager._instance;\n }\n\n newSession(url?: string) {\n if (this.currentSession) {\n this.currentSession.end = dateNow();\n this.currentSession.name = document.title;\n this.currentSession.location = document.URL;\n if (this.config.exclude.every((e) => !e.test(this.currentSession!.location))) {\n this.sessionQueue.push(this.currentSession);\n logInspect('app',`added element to session queue, new size is:${this.sessionQueue.length}`);\n }\n\n logInspect('app',() => prettySessionFormat(this.currentSession!));\n }\n if (url) {\n this.currentSession = {\n '@type': \"main\",\n user: this.config.user(),\n start: dateNow(),\n type: \"VIEW\",\n location: url,\n loading: true,\n restRequests: [],\n localRequests: [],\n userActions: [],\n exceptions: []\n }\n }\n }\n\n manageCache(): Promise<any> {\n if(this.instanceEnvironment.id){\n return this.sendSessions();\n }\n return this.postInstanceEnv().then((id: string | null) => {\n if (id) {\n return this.sendSessions();\n }\n console.warn(`Error while attempting to send Environement instance, attempts ${this.sessionSendAttempts}`);\n return Promise.reject(new Error('No instance id'));\n });\n }\n\n sendSessions(instanceComplete?:boolean) : Promise<number>{\n if (this.sessionQueue.length > 0) {\n let uri = this.config.sessionApi;\n if(instanceComplete){\n uri += \"?end=\"+ new Date().toISOString();\n }\n this.sessionSendAttempts++;\n let sessions: MainSession[] = [...this.sessionQueue];\n this.sessionQueue.splice(0, sessions.length); // add rest of sessions\n logInspect('app',`sending sessions, attempts:${this.sessionSendAttempts}, queue size : ${sessions.length}`)\n return this.putSessions(sessions,uri)\n .then(ok => {\n if (ok) {\n logInspect('app',`sessions sent successfully, queue size reset, new size is: ${this.sessionQueue.length}`)\n this.sessionSendAttempts = 0;\n return sessions.length;\n } else {\n console.warn(`Error while attempting to send sessions, attempts: ${this.sessionSendAttempts}`)//\n this.revertQueueSize(sessions);\n return -1;\n }\n })\n }\n return Promise.resolve(0);\n }\n\n putSessions(sessionList: MainSession[], uri: string): Promise<boolean> {\n return fetch(uri, {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n body: JSON.stringify(sessionList)\n })\n .then(res => res.ok)\n .catch(err => false);\n }\n\n postInstanceEnv(): Promise<string | null> {\n this.sessionSendAttempts++;\n return fetch(this.config.instanceApi, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n mode: 'cors',\n body: JSON.stringify(this.instanceEnvironment)\n })\n .then(res => res.ok ? res.text().then(id => {\n this.config.sessionApi = this.config.sessionApi.replace(':id', id);\n logInspect('app','Environement instance sent successfully', id);\n this.sessionSendAttempts = 0;\n return this.instanceEnvironment.id = id;\n }) : null)\n .catch(err => null);\n }\n\n revertQueueSize(sessions: MainSession[]) {\n this.sessionQueue.unshift(...sessions);\n if (this.sessionQueue.length > this.config.bufferMaxSize) {\n let diff = this.sessionQueue.length - this.config.bufferMaxSize;\n this.sessionQueue = this.sessionQueue.slice(0, this.config.bufferMaxSize);\n logInspect('app',`Buffer size exeeded the max size,last sessions have been removed from buffer, (number of sessions removed):${diff}`)\n }\n }\n\n ngOnDestroy(): void {\n if (this.scheduledSessionSender) {\n this.scheduledSessionSender.unsubscribe();\n }\n }\n\n getCurrentSession() {\n return this.currentSession;\n }\n\n resetCurrentSession(){\n this.currentSession = null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpInterceptor, HttpEvent, HttpHandler, HttpRequest, HttpResponse } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { tap, finalize } from 'rxjs/operators'\nimport { ExceptionInfo } from './trace.model';\nimport { dateNow } from './util';\nimport { SessionManager } from './session-manager.service';\n\n\n\n\n@Injectable({ providedIn: 'root' })\nexport class HttpInterceptorService implements HttpInterceptor {\n\n constructor(private readonly SessionManager: SessionManager) { } // change this to session manager\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n const start = dateNow();\n let status: number, responseBody: any = '', exception: ExceptionInfo;\n let id: string| undefined;\n return next.handle(req).pipe(tap(\n (event: any) => {\n if (event instanceof HttpResponse) {\n status = +event.status;\n responseBody = event.body\n id = getReqid(event?.headers);\n }\n },\n error => {\n id = getReqid(error?.headers);\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 }else {\n status= 0\n exception = {\n type : \"IOException\",\n message: \"The remote server is unavailable.\",\n }\n }\n },\n ), finalize(() => {\n try {\n if (this.SessionManager.getCurrentSession()){\n const url = toHref(req.urlWithParams);\n const auth_user = extractAuthSchemeAnduser(req.headers);\n this.SessionManager.getCurrentSession()?.restRequests.push({\n id: id,\n method: req.method,\n protocol: url.protocol.slice(0, -1),\n host: exctractHost(url.host),\n port: +url.port || -1,\n path: url.pathname,\n query: url.search.slice(1, url.search.length),\n contentType: req.responseType,\n authScheme: auth_user.authScheme,\n user: auth_user.user,\n status: +status,\n inDataSize: sizeOf(responseBody),\n ouDataSize: sizeOf(req.body),\n start: start,\n end: dateNow(),\n exception: exception\n });\n }\n }catch(err){\n console.warn(err);\n }\n }));\n }\n}\n\nfunction toHref(url: string): HTMLAnchorElement {\n const href = document.createElement('a');\n href.setAttribute('href', url);\n return href;\n}\n\nfunction exctractHost(path: string) {\n const portregex = /:\\d+/;\n return path.replace(portregex, '')\n}\n\nfunction extractAuthSchemeAnduser(headers: any): {user: string | undefined, authScheme: string | undefined} {\n let auth_user: {user: string | undefined, authScheme: string | undefined} = {\n user: undefined,\n authScheme: undefined\n };\n try {\n auth_user.authScheme = headers.get('authorization').match(/^(\\w+) /)?.at(1)\n switch (auth_user.authScheme){\n case \"Basic\":\n auth_user.user = atob(headers.get('authorization').split(\" \")[1]).toString().split(':')[0];\n break;\n case \"Bearer\": {\n const parts = headers.get('authorization').split(\" \")[1].split('.');\n if (parts.length == 3) {\n auth_user.user = JSON.parse(atob(parts[1]).toString()).sub;\n }\n }\n }\n }catch(err){}\n return auth_user;\n}\n\nfunction getReqid(headers:any):string | undefined {\n return headers?.has('x-tracert')\n ? headers.get('x-tracert')\n : undefined;\n}\n\nfunction sizeOf(body: any): number {\n return body ? JSON.stringify(body).length : 0;\n}\n","type InstantType = \"SERVER\" | \"CLIENT\";\ntype MainSessionType = \"VIEW\" | \"BATCH\" | \"STARTUP\";\n\nexport interface MainSession {\n '@type'?: string;\n type: MainSessionType;\n name?: string;\n location: string;\n user?: string;\n start: number;\n end?: number;\n exceptions: ExceptionInfo[], // to be changed ?\n restRequests: RestRequest[],\n localRequests: LocalRequest[],\n userActions: UserAction[],\n loading?: boolean\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}\n\nexport interface RestRequest {\n id?: string;\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 status: number;\n inDataSize: number;\n ouDataSize: number;\n user?:string;\n start: number;\n end: number;\n exception?: ExceptionInfo\n}\n\nexport interface LocalRequest {\n name: string;\n location: string;\n user?: string;\n start: number;\n end: number;\n exception?: ExceptionInfo\n}\n\nexport interface ExceptionInfo { // to bechanged\n type: string | null;\n message: string | null;\n}\n\nexport interface UserAction{\n type: string;\n start: number;\n name: string| null;\n nodeName: string;\n}\n\nexport const 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\nexport const 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\nexport function 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\nexport function extractName(t: HTMLElement){\n try\n {\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","import {Inject, Injectable} from \"@angular/core\";\nimport {DOCUMENT} from \"@angular/common\";\nimport {extractName} from \"./trace.model\";\nimport {SessionManager} from \"./session-manager.service\";\nimport {dateNow, logInspect, prettyActionUserFormat} from \"./util\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AnalyticsCollector {\n\n eventHandlers : {[key:string]: (target: HTMLElement)=>boolean} = {\n 'click' : (target:HTMLElement)=> this.lookUpChild(target,1),\n }\n patchedEvent : {[key:string]:boolean} = {};\n elementsWithClickListeners = new WeakSet();\n constructor(@Inject(DOCUMENT) private readonly document: Document,\n private readonly sessionManager: SessionManager) {\n\n }\n subscribeToEvents(){\n const body = this.document.body;\n body.addEventListener('click', (event) => this.globalHandler(event), true);\n body.addEventListener('change', (event) => this.globalHandler(event), true);\n body.addEventListener('scrollend', (event) => this.globalHandler(event), true);\n body.addEventListener('dragend', (event) => this.globalHandler(event), true);\n this.document.addEventListener('DOMContentLoaded', (event) => this.globalHandler(event), true);\n\n /* let that =this;\n\n const originalAddEventListener = EventTarget.prototype.addEventListener;\n EventTarget.prototype.addEventListener = function(type: string, listener: any, options?: boolean | AddEventListenerOptions) {\n if(type === \"click\"){\n that.elementsWithClickListeners.add(this);\n const wrapperListener = (event: any) => {\n if(that.elementsWithClickListeners.has(event.currentTarget)){\n console.log('click event',event);\n that.GlobalHandler(event);\n }\n return listener.apply(this, arguments);\n };\n return originalAddEventListener.apply(this,[type,wrapperListener,options])\n }\n return originalAddEventListener.call(this, type, listener, options);\n }*/\n }\n\n\n\n globalHandler(event: Event | MouseEvent){\n // event.stopPropagation()\n // event.preventDefault()\n let target = event.target as HTMLElement;\n let eventType = event.type;\n try {\n if(this.eventHandlers.hasOwnProperty(eventType) && !this.eventHandlers[eventType](target)){\n return;\n }\n this.addActionUser(eventType,target);\n }catch(err){\n console.warn(err);\n }\n }\n\n 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 && this.lookUpChild(c as HTMLElement, depth), true);\n }\n return true;\n }\n\n addActionUser(eventType: string, target: HTMLElement){\n const ua = {\n type: eventType,\n start: dateNow(),\n name : extractName(target),\n nodeName : target.tagName?.toLowerCase(),\n }\n logInspect('user',() => prettyActionUserFormat(this.sessionManager.getCurrentSession(), ua));\n this.sessionManager.getCurrentSession()?.userActions.push(ua);\n }\n\n\n}\n","import {ErrorHandler, Injectable} from \"@angular/core\";\nimport {SessionManager} from \"./session-manager.service\";\n\n@Injectable({ providedIn: 'root' })\nexport class GlobalErrorHandlerService implements ErrorHandler {\n\n constructor(private readonly sessionManager: SessionManager) {\n }\n handleError(error:any ) {\n this.sessionManager.getCurrentSession()?.exceptions.push({\n type: error?.name,\n message: error?.message\n })\n throw error;\n }\n}\n","import {NgModule, APP_INITIALIZER, ModuleWithProviders, ErrorHandler} from '@angular/core';\nimport { HTTP_INTERCEPTORS, } from '@angular/common/http';\nimport { logInspect } from './util';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { ApplicationConf, GetInstanceEnvironement, validateAndGetConfig } from './configuration';\nimport { HttpInterceptorService } from './http-interceptor.service';\nimport { SessionManager } from './session-manager.service';\nimport {AnalyticsCollector} from \"./analytics-collect.service\";\nimport {GlobalErrorHandlerService} from \"./global-error-handler.service\";\n\n@NgModule()\nexport class NgCollectorModule {\n\n static forRoot(configuration: ApplicationConf): ModuleWithProviders<NgCollectorModule> {\n if (configuration?.enabled) {\n try {\n let config = validateAndGetConfig(configuration);\n let instance = GetInstanceEnvironement(configuration);\n let deps:any[] = [Router, SessionManager]\n logInspect('app',JSON.stringify(config));\n logInspect('app',JSON.stringify(instance));\n config.analytics && deps.push(AnalyticsCollector);\n\n return {\n ngModule: NgCollectorModule,\n providers: [\n SessionManager,\n { provide: APP_INITIALIZER, useFactory: initializeEvents, deps: deps, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true },\n { provide: 'instance', useValue: instance },\n { provide: 'config', useValue: config },\n { provide: ErrorHandler, useClass: GlobalErrorHandlerService }\n ]\n };\n } catch (e:any) {\n console.warn(`invalid Configuration, Ng-collector is disabled because of this ${e.message}`);\n }\n }\n return {\n ngModule: NgCollectorModule\n }\n }\n}\n\nexport function initializeEvents(router: Router, sessionManager: SessionManager, analyticsCollector: AnalyticsCollector) {\n return () => {\n logInspect('app','initialize routing events listeners');\n window.addEventListener('beforeunload', event => {\n if(!sessionManager.getCurrentSession()?.loading){\n sessionManager.newSession();\n }\n if(sessionManager.sendSessionfinished){\n sessionManager.sendSessions(true);\n sessionManager.resetCurrentSession();\n }\n });\n router.events.subscribe(event => {\n if (event instanceof NavigationStart) {\n logInspect('app',sessionManager.currentSession);\n sessionManager.newSession(event.url);\n }\n if (event instanceof NavigationEnd) {\n delete sessionManager.getCurrentSession()?.loading;\n }\n })\n if(analyticsCollector){\n analyticsCollector.subscribeToEvents();\n }\n\n }\n}\n\n\n","import { SessionManager } from \"./session-manager.service\";\n\n\nexport function TraceableStage(){\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 if(SessionManager.instance){\n let session = SessionManager.instance.getCurrentSession();\n let exception;\n let start,end;\n\n start = Date.now();\n try{\n return originalMethod.apply(this,args);\n }catch(e:any){\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 exception = {\n type : type,\n message : message\n }\n throw e;\n }finally{\n end = Date.now();\n SessionManager.instance.getCurrentSession()?.localRequests.push({\n name: propertyKey,\n location: target.constructor.name,\n user: session?.user,\n start: start,\n end: end,\n exception: exception\n })\n }\n }\n }\n return descriptor;\n }\n }\n","/*\n * Public API Surface of inspect-ng-collector\n */\n\n\nexport * from './lib/ng-collector.module';\nexport * from './lib/traceable-stage.decorator';\n\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["tap","i1.SessionManager"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -109,7 +109,7 @@ declare class SessionManager implements OnDestroy {
109
109
  sessionQueue: MainSession[];
110
110
  sessionSendAttempts: number;
111
111
  sendSessionfinished: boolean;
112
- currentSession: MainSession;
112
+ currentSession: MainSession | null;
113
113
  private static _instance;
114
114
  constructor(config: TechnicalConf, instance: InstanceEnvironment);
115
115
  static get instance(): SessionManager;
@@ -120,7 +120,8 @@ declare class SessionManager implements OnDestroy {
120
120
  postInstanceEnv(): Promise<string | null>;
121
121
  revertQueueSize(sessions: MainSession[]): void;
122
122
  ngOnDestroy(): void;
123
- getCurrentSession(): MainSession;
123
+ getCurrentSession(): MainSession | null;
124
+ resetCurrentSession(): void;
124
125
  static ɵfac: i0.ɵɵFactoryDeclaration<SessionManager, never>;
125
126
  static ɵprov: i0.ɵɵInjectableDeclaration<SessionManager>;
126
127
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneteme/inspect-ng-collector",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
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",