@oneteme/inspect-ng-collector 1.2.1 → 1.2.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -292,14 +292,15 @@ class SessionManager {
292
292
  }
293
293
  sendSessions(instanceComplete) {
294
294
  if (this.sessionQueue.length > 0) {
295
+ let uri = this.config.sessionApi;
295
296
  if (instanceComplete) {
296
- this.config.sessionApi += "?end=" + new Date().toISOString();
297
+ uri += "?end=" + new Date().toISOString();
297
298
  }
298
299
  this.sessionSendAttempts++;
299
300
  let sessions = [...this.sessionQueue];
300
301
  this.sessionQueue.splice(0, sessions.length); // add rest of sessions
301
302
  logInspect('app', `sending sessions, attempts:${this.sessionSendAttempts}, queue size : ${sessions.length}`);
302
- return this.putSessions(sessions)
303
+ return this.putSessions(sessions, uri)
303
304
  .then(ok => {
304
305
  if (ok) {
305
306
  logInspect('app', `sessions sent successfully, queue size reset, new size is: ${this.sessionQueue.length}`);
@@ -315,8 +316,8 @@ class SessionManager {
315
316
  }
316
317
  return Promise.resolve(0);
317
318
  }
318
- putSessions(sessionList) {
319
- return fetch(this.config.sessionApi, {
319
+ putSessions(sessionList, uri) {
320
+ return fetch(uri, {
320
321
  method: 'PUT',
321
322
  headers: { 'Content-Type': 'application/json' },
322
323
  mode: 'cors',
@@ -357,10 +358,13 @@ class SessionManager {
357
358
  getCurrentSession() {
358
359
  return this.currentSession;
359
360
  }
360
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SessionManager, deps: [{ token: 'config' }, { token: 'instance' }], target: i0.ɵɵFactoryTarget.Injectable }); }
361
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SessionManager, providedIn: 'root' }); }
361
+ resetCurrentSession() {
362
+ this.currentSession = null;
363
+ }
364
+ 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 }); }
365
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionManager, providedIn: 'root' }); }
362
366
  }
363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: SessionManager, decorators: [{
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionManager, decorators: [{
364
368
  type: Injectable,
365
369
  args: [{ providedIn: 'root' }]
366
370
  }], ctorParameters: () => [{ type: undefined, decorators: [{
@@ -383,21 +387,30 @@ class HttpInterceptorService {
383
387
  if (event instanceof HttpResponse) {
384
388
  status = +event.status;
385
389
  responseBody = event.body;
386
- id = getReqid(event.headers);
390
+ id = getReqid(event?.headers);
387
391
  }
388
392
  }, error => {
389
- id = getReqid(error.headers);
390
- status = +error.status;
391
- exception = {
392
- type: error.name,
393
- message: error.error && error.status ? JSON.stringify(error.error) : error.message
394
- };
393
+ id = getReqid(error?.headers);
394
+ if (error) {
395
+ status = +error?.status || 0;
396
+ exception = {
397
+ type: error?.name,
398
+ message: error.error && error.status ? JSON.stringify(error.error) : error?.message
399
+ };
400
+ }
401
+ else {
402
+ status = 0;
403
+ exception = {
404
+ type: "IOException",
405
+ message: "The remote server is unavailable.",
406
+ };
407
+ }
395
408
  }), finalize(() => {
396
409
  try {
397
410
  if (this.SessionManager.getCurrentSession()) {
398
411
  const url = toHref(req.urlWithParams);
399
412
  const auth_user = extractAuthSchemeAnduser(req.headers);
400
- this.SessionManager.getCurrentSession().restRequests.push({
413
+ this.SessionManager.getCurrentSession()?.restRequests.push({
401
414
  id: id,
402
415
  method: req.method,
403
416
  protocol: url.protocol.slice(0, -1),
@@ -422,10 +435,10 @@ class HttpInterceptorService {
422
435
  }
423
436
  }));
424
437
  }
425
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: HttpInterceptorService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
426
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
438
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
439
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
427
440
  }
428
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: HttpInterceptorService, decorators: [{
441
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: HttpInterceptorService, decorators: [{
429
442
  type: Injectable,
430
443
  args: [{ providedIn: 'root' }]
431
444
  }], ctorParameters: () => [{ type: SessionManager }] });
@@ -461,7 +474,7 @@ function extractAuthSchemeAnduser(headers) {
461
474
  return auth_user;
462
475
  }
463
476
  function getReqid(headers) {
464
- return headers.has('x-tracert')
477
+ return headers?.has('x-tracert')
465
478
  ? headers.get('x-tracert')
466
479
  : undefined;
467
480
  }
@@ -587,10 +600,10 @@ class AnalyticsCollector {
587
600
  logInspect('user', () => prettyActionUserFormat(this.sessionManager.getCurrentSession(), ua));
588
601
  this.sessionManager.getCurrentSession().userActions.push(ua);
589
602
  }
590
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AnalyticsCollector, deps: [{ token: DOCUMENT }, { token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
591
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AnalyticsCollector, providedIn: 'root' }); }
603
+ 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 }); }
604
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AnalyticsCollector, providedIn: 'root' }); }
592
605
  }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: AnalyticsCollector, decorators: [{
606
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: AnalyticsCollector, decorators: [{
594
607
  type: Injectable,
595
608
  args: [{
596
609
  providedIn: 'root'
@@ -605,16 +618,16 @@ class GlobalErrorHandlerService {
605
618
  this.sessionManager = sessionManager;
606
619
  }
607
620
  handleError(error) {
608
- this.sessionManager.getCurrentSession().exceptions.push({
621
+ this.sessionManager.getCurrentSession()?.exceptions.push({
609
622
  type: error?.name,
610
623
  message: error?.message
611
624
  });
612
625
  throw error;
613
626
  }
614
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GlobalErrorHandlerService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
615
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
627
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, deps: [{ token: SessionManager }], target: i0.ɵɵFactoryTarget.Injectable }); }
628
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, providedIn: 'root' }); }
616
629
  }
617
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: GlobalErrorHandlerService, decorators: [{
618
631
  type: Injectable,
619
632
  args: [{ providedIn: 'root' }]
620
633
  }], ctorParameters: () => [{ type: SessionManager }] });
@@ -649,30 +662,32 @@ class NgCollectorModule {
649
662
  ngModule: NgCollectorModule
650
663
  };
651
664
  }
652
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
653
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.4", ngImport: i0, type: NgCollectorModule }); }
654
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: NgCollectorModule }); }
665
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
666
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule }); }
667
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule }); }
655
668
  }
656
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.4", ngImport: i0, type: NgCollectorModule, decorators: [{
669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: NgCollectorModule, decorators: [{
657
670
  type: NgModule
658
671
  }] });
659
672
  function initializeEvents(router, sessionManager, analyticsCollector) {
660
673
  return () => {
661
674
  logInspect('app', 'initialize routing events listeners');
662
675
  window.addEventListener('beforeunload', event => {
663
- if (!sessionManager.getCurrentSession().loading) {
676
+ if (!sessionManager.getCurrentSession()?.loading) {
664
677
  sessionManager.newSession();
665
678
  }
666
679
  if (sessionManager.sendSessionfinished) {
667
680
  sessionManager.sendSessions(true);
681
+ sessionManager.resetCurrentSession();
668
682
  }
669
683
  });
670
684
  router.events.subscribe(event => {
671
685
  if (event instanceof NavigationStart) {
686
+ logInspect('app', sessionManager.currentSession);
672
687
  sessionManager.newSession(event.url);
673
688
  }
674
689
  if (event instanceof NavigationEnd) {
675
- delete sessionManager.getCurrentSession().loading;
690
+ delete sessionManager.getCurrentSession()?.loading;
676
691
  }
677
692
  });
678
693
  if (analyticsCollector) {
@@ -715,10 +730,10 @@ function TraceableStage() {
715
730
  }
716
731
  finally {
717
732
  end = Date.now();
718
- SessionManager.instance.getCurrentSession().localRequests.push({
733
+ SessionManager.instance.getCurrentSession()?.localRequests.push({
719
734
  name: propertyKey,
720
735
  location: target.constructor.name,
721
- user: session.user,
736
+ user: session?.user,
722
737
  start: start,
723
738
  end: end,
724
739
  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 if(instanceComplete){\n this.config.sessionApi +=\"?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)\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[]): Promise<boolean> {\n return fetch(this.config.sessionApi, {\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,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| 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,18 +109,19 @@ 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;
116
116
  newSession(url?: string): void;
117
117
  manageCache(): Promise<any>;
118
118
  sendSessions(instanceComplete?: boolean): Promise<number>;
119
- putSessions(sessionList: MainSession[]): Promise<boolean>;
119
+ putSessions(sessionList: MainSession[], uri: string): Promise<boolean>;
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.1",
3
+ "version": "1.2.3-beta.0",
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",