@oneteme/inspect-ng-collector 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # InspectNgCollector
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project inspect-ng-collector` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project inspect-ng-collector`.
8
+ > Note: Don't forget to add `--project inspect-ng-collector` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build inspect-ng-collector` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build inspect-ng-collector`, go to the dist folder `cd dist/inspect-ng-collector` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test inspect-ng-collector` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
@@ -0,0 +1,79 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpResponse } from '@angular/common/http';
3
+ import { tap, finalize } from 'rxjs/operators';
4
+ import { dateNow } from './util';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./route-tracer.service";
7
+ export class HttpInterceptorService {
8
+ constructor(routerTracerService) {
9
+ this.routerTracerService = routerTracerService;
10
+ }
11
+ intercept(req, next) {
12
+ const start = dateNow();
13
+ let status, responseBody = '', exception;
14
+ let id;
15
+ return next.handle(req).pipe(tap((event) => {
16
+ if (event instanceof HttpResponse) {
17
+ status = +event.status;
18
+ responseBody = event.body;
19
+ id = getReqid(event.headers);
20
+ }
21
+ }, error => {
22
+ console.log(error);
23
+ id = getReqid(error.headers);
24
+ status = +error.status;
25
+ exception = {
26
+ type: error.error.error,
27
+ message: error.error.message
28
+ };
29
+ }), finalize(() => {
30
+ const url = toHref(req.urlWithParams);
31
+ this.routerTracerService.getCurrentSession().restRequests.push({
32
+ id: id,
33
+ method: req.method,
34
+ protocol: url.protocol.slice(0, -1),
35
+ host: exctractHost(url.host),
36
+ port: +url.port,
37
+ path: url.pathname,
38
+ query: url.search.slice(1, url.search.length),
39
+ contentType: req.responseType,
40
+ authScheme: extractAuthScheme(req.headers),
41
+ status: +status,
42
+ inDataSize: sizeOf(responseBody),
43
+ ouDataSize: sizeOf(req.body),
44
+ start: start,
45
+ end: dateNow(),
46
+ exception: exception
47
+ });
48
+ }));
49
+ }
50
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HttpInterceptorService, deps: [{ token: i1.RouteTracerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
51
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HttpInterceptorService, providedIn: 'root' }); }
52
+ }
53
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: HttpInterceptorService, decorators: [{
54
+ type: Injectable,
55
+ args: [{ providedIn: 'root' }]
56
+ }], ctorParameters: () => [{ type: i1.RouteTracerService }] });
57
+ function toHref(url) {
58
+ const href = document.createElement('a');
59
+ href.setAttribute('href', url);
60
+ return href;
61
+ }
62
+ function exctractHost(path) {
63
+ const portregex = /:\d+/;
64
+ return path.replace(portregex, '');
65
+ }
66
+ function extractAuthScheme(headers) {
67
+ return headers.has('authorization')
68
+ ? headers.get('authorization').match(/^(\w+) /)?.at(1)
69
+ : undefined;
70
+ }
71
+ function getReqid(headers) {
72
+ return headers.has('x-tracert')
73
+ ? headers.get('x-tracert')
74
+ : undefined;
75
+ }
76
+ function sizeOf(body) {
77
+ return body ? JSON.stringify(body).length : 0;
78
+ }
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9pbnNwZWN0LW5nLWNvbGxlY3Rvci9zcmMvbGliL2h0dHAtaW50ZXJjZXB0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBd0QsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUc5QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7QUFHakMsTUFBTSxPQUFPLHNCQUFzQjtJQUUvQixZQUFvQixtQkFBdUM7UUFBdkMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtJQUFJLENBQUM7SUFFaEUsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDOUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxNQUFjLEVBQUUsWUFBWSxHQUFRLEVBQUUsRUFBRSxTQUF3QixDQUFDO1FBQ3JFLElBQUksRUFBcUIsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDNUIsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNYLElBQUksS0FBSyxZQUFZLFlBQVksRUFBRSxDQUFDO2dCQUNoQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN2QixZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtnQkFDekIsRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNMLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtZQUNKLE9B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T0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBJbnRlcmNlcHRvciwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IHRhcCwgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFJvdXRlVHJhY2VyU2VydmljZSB9IGZyb20gJy4vcm91dGUtdHJhY2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhjZXB0aW9uSW5mbyB9IGZyb20gJy4vdHJhY2UubW9kZWwnO1xuaW1wb3J0IHsgZGF0ZU5vdyB9IGZyb20gJy4vdXRpbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSHR0cEludGVyY2VwdG9yU2VydmljZSBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlclRyYWNlclNlcnZpY2U6IFJvdXRlVHJhY2VyU2VydmljZSkgeyB9XG5cbiAgICBpbnRlcmNlcHQocmVxOiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBkYXRlTm93KCk7XG4gICAgICAgIGxldCBzdGF0dXM6IG51bWJlciwgcmVzcG9uc2VCb2R5OiBhbnkgPSAnJywgZXhjZXB0aW9uOiBFeGNlcHRpb25JbmZvO1xuICAgICAgICBsZXQgaWQ6IHN0cmluZ3wgdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKS5waXBlKHRhcChcbiAgICAgICAgICAgIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9ICtldmVudC5zdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlQm9keSA9IGV2ZW50LmJvZHlcbiAgICAgICAgICAgICAgICAgICAgaWQgPSBnZXRSZXFpZChldmVudC5oZWFkZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICAgICAgICAgIGlkID0gZ2V0UmVxaWQoZXJyb3IuaGVhZGVycyk7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gK2Vycm9yLnN0YXR1cztcbiAgICAgICAgICAgICAgICBleGNlcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGVycm9yLmVycm9yLmVycm9yLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5lcnJvci5tZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgKSwgZmluYWxpemUoKCkgPT4ge1xuXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0b0hyZWYocmVxLnVybFdpdGhQYXJhbXMpO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXJUcmFjZXJTZXJ2aWNlLmdldEN1cnJlbnRTZXNzaW9uKCkucmVzdFJlcXVlc3RzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgICAgICAgICAgcHJvdG9jb2w6IHVybC5wcm90b2NvbC5zbGljZSgwLCAtMSksXG4gICAgICAgICAgICAgICAgaG9zdDogZXhjdHJhY3RIb3N0KHVybC5ob3N0KSxcbiAgICAgICAgICAgICAgICBwb3J0OiArdXJsLnBvcnQsXG4gICAgICAgICAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lLFxuICAgICAgICAgICAgICAgIHF1ZXJ5OiB1cmwuc2VhcmNoLnNsaWNlKDEsIHVybC5zZWFyY2gubGVuZ3RoKSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogcmVxLnJlc3BvbnNlVHlwZSxcbiAgICAgICAgICAgICAgICBhdXRoU2NoZW1lOiBleHRyYWN0QXV0aFNjaGVtZShyZXEuaGVhZGVycyksXG4gICAgICAgICAgICAgICAgc3RhdHVzOiArc3RhdHVzLFxuICAgICAgICAgICAgICAgIGluRGF0YVNpemU6IHNpemVPZihyZXNwb25zZUJvZHkpLFxuICAgICAgICAgICAgICAgIG91RGF0YVNpemU6IHNpemVPZihyZXEuYm9keSksXG4gICAgICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZDogZGF0ZU5vdygpLFxuICAgICAgICAgICAgICAgIGV4Y2VwdGlvbjogZXhjZXB0aW9uXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9IcmVmKHVybDogc3RyaW5nKTogSFRNTEFuY2hvckVsZW1lbnQge1xuICAgIGNvbnN0IGhyZWYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgaHJlZi5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmwpO1xuICAgIHJldHVybiBocmVmO1xufVxuXG5mdW5jdGlvbiBleGN0cmFjdEhvc3QocGF0aDogc3RyaW5nKSB7XG4gICAgY29uc3QgcG9ydHJlZ2V4ID0gLzpcXGQrLztcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKHBvcnRyZWdleCwgJycpXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBdXRoU2NoZW1lKGhlYWRlcnM6IGFueSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGhlYWRlcnMuaGFzKCdhdXRob3JpemF0aW9uJylcbiAgICAgICAgPyBoZWFkZXJzLmdldCgnYXV0aG9yaXphdGlvbicpLm1hdGNoKC9eKFxcdyspIC8pPy5hdCgxKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVxaWQoaGVhZGVyczphbnkpOnN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGhlYWRlcnMuaGFzKCd4LXRyYWNlcnQnKVxuICAgICAgICA/IGhlYWRlcnMuZ2V0KCd4LXRyYWNlcnQnKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2l6ZU9mKGJvZHk6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGJvZHkgPyBKU09OLnN0cmluZ2lmeShib2R5KS5sZW5ndGggOiAwO1xufVxuIl19
@@ -0,0 +1,46 @@
1
+ import { NgModule, APP_INITIALIZER } from '@angular/core';
2
+ import { HTTP_INTERCEPTORS, } from '@angular/common/http';
3
+ import { HttpInterceptorService } from './http-interceptor.service';
4
+ import { RouteTracerService } from './route-tracer.service';
5
+ import { getNumberOrCall, logTraceapi, requirePostitiveValue, validate, HOST_PATERN, PATH_PATERN, getStringOrCall } from './util';
6
+ import { SessionManager } from './session-manager.service';
7
+ import * as i0 from "@angular/core";
8
+ export class NgCollectorModule {
9
+ static forRoot(host, configuration) {
10
+ if (configuration?.enabled
11
+ && validate(host, HOST_PATERN)
12
+ && validate(getStringOrCall(configuration?.sessionApi), PATH_PATERN)
13
+ && validate(getStringOrCall(configuration?.instanceApi), PATH_PATERN)) {
14
+ if (!requirePostitiveValue(getNumberOrCall(configuration?.delay), "delay") ||
15
+ !requirePostitiveValue(getNumberOrCall(configuration?.bufferMaxSize), "bufferMaxSize")) {
16
+ logTraceapi('warn', 'invalid Configuration, Ng-collector is disabled');
17
+ return { ngModule: NgCollectorModule };
18
+ }
19
+ return {
20
+ ngModule: NgCollectorModule,
21
+ providers: [
22
+ RouteTracerService,
23
+ SessionManager,
24
+ { provide: APP_INITIALIZER, useFactory: initializeRoutingEvents, deps: [RouteTracerService], multi: true },
25
+ { provide: HTTP_INTERCEPTORS, useClass: HttpInterceptorService, multi: true },
26
+ { provide: 'config', useValue: configuration },
27
+ { provide: 'host', useValue: host }
28
+ ]
29
+ };
30
+ }
31
+ return {
32
+ ngModule: NgCollectorModule
33
+ };
34
+ }
35
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgCollectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
36
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: NgCollectorModule }); }
37
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgCollectorModule }); }
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgCollectorModule, decorators: [{
40
+ type: NgModule,
41
+ args: [{}]
42
+ }] });
43
+ export function initializeRoutingEvents(routeTracerService) {
44
+ return () => routeTracerService.initialize();
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctY29sbGVjdG9yLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvaW5zcGVjdC1uZy1jb2xsZWN0b3Ivc3JjL2xpYi9uZy1jb2xsZWN0b3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUF1QixNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEksT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUszRCxNQUFNLE9BQU8saUJBQWlCO0lBRTVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBWSxFQUFFLGFBQThCO1FBQ3pELElBQUksYUFBYSxFQUFFLE9BQU87ZUFDbkIsUUFBUSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7ZUFDM0IsUUFBUSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLEVBQUUsV0FBVyxDQUFDO2VBQ2pFLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFHekUsSUFBRyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEVBQUMsT0FBTyxDQUFDO2dCQUNyRSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLEVBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDdEYsV0FBVyxDQUFDLE1BQU0sRUFBQyxpREFBaUQsQ0FBQyxDQUFDO2dCQUN4RSxPQUFPLEVBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFDLENBQUE7WUFDdkMsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsU0FBUyxFQUFFO29CQUNULGtCQUFrQjtvQkFDbEIsY0FBYztvQkFDZCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDMUcsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7b0JBQzdFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFO29CQUM5QyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtpQkFDcEM7YUFDRixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU87WUFDTCxRQUFRLEVBQUUsaUJBQWlCO1NBQzVCLENBQUE7SUFFSCxDQUFDOytHQS9CVSxpQkFBaUI7Z0hBQWpCLGlCQUFpQjtnSEFBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUQ3QixRQUFRO21CQUFDLEVBQUU7O0FBbUNaLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxrQkFBc0M7SUFDNUUsT0FBTyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSFRUUF9JTlRFUkNFUFRPUlMsIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSHR0cEludGVyY2VwdG9yU2VydmljZSB9IGZyb20gJy4vaHR0cC1pbnRlcmNlcHRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlVHJhY2VyU2VydmljZSB9IGZyb20gJy4vcm91dGUtdHJhY2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0TnVtYmVyT3JDYWxsLCBsb2dUcmFjZWFwaSwgcmVxdWlyZVBvc3RpdGl2ZVZhbHVlLCB2YWxpZGF0ZSwgSE9TVF9QQVRFUk4sIFBBVEhfUEFURVJOLCBnZXRTdHJpbmdPckNhbGwgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgU2Vzc2lvbk1hbmFnZXIgfSBmcm9tICcuL3Nlc3Npb24tbWFuYWdlci5zZXJ2aWNlJztcblxuXG5cbkBOZ01vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBOZ0NvbGxlY3Rvck1vZHVsZSB7XG5cbiAgc3RhdGljIGZvclJvb3QoaG9zdDogc3RyaW5nLCBjb25maWd1cmF0aW9uOiBBcHBsaWNhdGlvbkNvbmYpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPE5nQ29sbGVjdG9yTW9kdWxlPiB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24/LmVuYWJsZWRcbiAgICAgICAgJiYgdmFsaWRhdGUoaG9zdCwgSE9TVF9QQVRFUk4pXG4gICAgICAgICYmIHZhbGlkYXRlKGdldFN0cmluZ09yQ2FsbChjb25maWd1cmF0aW9uPy5zZXNzaW9uQXBpKSwgUEFUSF9QQVRFUk4pXG4gICAgICAgICYmIHZhbGlkYXRlKGdldFN0cmluZ09yQ2FsbChjb25maWd1cmF0aW9uPy5pbnN0YW5jZUFwaSksIFBBVEhfUEFURVJOKSkge1xuXG5cbiAgICAgICBpZighcmVxdWlyZVBvc3RpdGl2ZVZhbHVlKGdldE51bWJlck9yQ2FsbChjb25maWd1cmF0aW9uPy5kZWxheSksXCJkZWxheVwiKSB8fFxuICAgICAgICAgICFyZXF1aXJlUG9zdGl0aXZlVmFsdWUoZ2V0TnVtYmVyT3JDYWxsKGNvbmZpZ3VyYXRpb24/LmJ1ZmZlck1heFNpemUpLFwiYnVmZmVyTWF4U2l6ZVwiKSApe1xuICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ3dhcm4nLCdpbnZhbGlkIENvbmZpZ3VyYXRpb24sIE5nLWNvbGxlY3RvciBpcyBkaXNhYmxlZCcpO1xuICAgICAgICAgIHJldHVybiB7bmdNb2R1bGU6IE5nQ29sbGVjdG9yTW9kdWxlfVxuICAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmdNb2R1bGU6IE5nQ29sbGVjdG9yTW9kdWxlLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICBSb3V0ZVRyYWNlclNlcnZpY2UsXG4gICAgICAgICAgU2Vzc2lvbk1hbmFnZXIsXG4gICAgICAgICAgeyBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsIHVzZUZhY3Rvcnk6IGluaXRpYWxpemVSb3V0aW5nRXZlbnRzLCBkZXBzOiBbUm91dGVUcmFjZXJTZXJ2aWNlXSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogSHR0cEludGVyY2VwdG9yU2VydmljZSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICB7IHByb3ZpZGU6ICdjb25maWcnLCB1c2VWYWx1ZTogY29uZmlndXJhdGlvbiB9LFxuICAgICAgICAgIHsgcHJvdmlkZTogJ2hvc3QnLCB1c2VWYWx1ZTogaG9zdCB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmdDb2xsZWN0b3JNb2R1bGVcbiAgICB9XG5cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVJvdXRpbmdFdmVudHMocm91dGVUcmFjZXJTZXJ2aWNlOiBSb3V0ZVRyYWNlclNlcnZpY2UpIHtcbiAgcmV0dXJuICgpID0+IHJvdXRlVHJhY2VyU2VydmljZS5pbml0aWFsaXplKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Db25mIHtcbiAgbmFtZT86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICB2ZXJzaW9uPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIGVudj86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICB1c2VyPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIGJ1ZmZlck1heFNpemU/OiBudW1iZXIgfCAoKCkgPT4gbnVtYmVyKTtcbiAgZGVsYXk/OiBudW1iZXJ8ICgoKSA9PiBudW1iZXIpO1xuICBpbnN0YW5jZUFwaT86IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xuICBzZXNzaW9uQXBpPzogc3RyaW5nIHwgKCgpID0+IHN0cmluZyk7XG4gIGV4Y2x1ZGU/OiBSZWdFeHBbXSB8ICgoKSA9PiBSZWdFeHBbXSk7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xufVxuIl19
@@ -0,0 +1,70 @@
1
+ import { Inject, Injectable } from "@angular/core";
2
+ import { NavigationEnd, NavigationStart } from "@angular/router";
3
+ import { dateNow, getRegArrOrCall, getStringOrCall, logTraceapi, prettySessionFormat } from "./util";
4
+ import { SessionManager } from "./session-manager.service";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ const SLASH = '/';
8
+ export class RouteTracerService {
9
+ constructor(router, config, host) {
10
+ this.router = router;
11
+ this.beforeUnloadHandler = (event) => {
12
+ this.currentSession.end = dateNow();
13
+ if (this.excludeList.every((e) => !e.test(this.currentSession.location))) {
14
+ this.sessionManager.addSessions(this.currentSession); //force
15
+ this.sessionManager.sendSessions();
16
+ }
17
+ };
18
+ this.sessionManager = new SessionManager();
19
+ this.excludeList = getRegArrOrCall(config.exclude);
20
+ this.sessionManager.initialize(config, host);
21
+ this.user = getStringOrCall(config.user);
22
+ }
23
+ ngOnDestroy() {
24
+ window.removeEventListener('beforeunload', this.beforeUnloadHandler);
25
+ }
26
+ initialize() {
27
+ logTraceapi('log', 'initialize');
28
+ window.addEventListener('beforeunload', this.beforeUnloadHandler);
29
+ this.router.events.subscribe(event => {
30
+ if (event instanceof NavigationStart) {
31
+ const now = dateNow();
32
+ if (this.currentSession) {
33
+ this.currentSession.end = dateNow();
34
+ if (this.excludeList.every((e) => !e.test(this.currentSession.location))) {
35
+ this.sessionManager.addSessions(this.currentSession);
36
+ }
37
+ logTraceapi('log', prettySessionFormat(this.currentSession));
38
+ }
39
+ this.currentSession = {
40
+ '@type': "main",
41
+ user: this.user,
42
+ start: now,
43
+ type: "VIEW",
44
+ location: event.url,
45
+ restRequests: []
46
+ };
47
+ }
48
+ if (event instanceof NavigationEnd) {
49
+ this.currentSession.name = document.title;
50
+ this.currentSession.location = document.URL;
51
+ }
52
+ });
53
+ }
54
+ getCurrentSession() {
55
+ return this.currentSession;
56
+ }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RouteTracerService, deps: [{ token: i1.Router }, { token: 'config' }, { token: 'host' }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RouteTracerService, providedIn: 'root' }); }
59
+ }
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: RouteTracerService, decorators: [{
61
+ type: Injectable,
62
+ args: [{ providedIn: 'root' }]
63
+ }], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
64
+ type: Inject,
65
+ args: ['config']
66
+ }] }, { type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: ['host']
69
+ }] }] });
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUtdHJhY2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2luc3BlY3QtbmctY29sbGVjdG9yL3NyYy9saWIvcm91dGUtdHJhY2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFHLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUd6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBRzNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUVsQixNQUFNLE9BQU8sa0JBQWtCO0lBUTNCLFlBQW9CLE1BQWMsRUFDWixNQUF1QixFQUN6QixJQUFZO1FBRlosV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQVMxQix3QkFBbUIsR0FBRyxDQUFDLEtBQXdCLEVBQVEsRUFBRTtZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFHLElBQUksQ0FBQyxXQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFBLFFBQVE7Z0JBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQVpHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBVUQsV0FBVztRQUNQLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELFVBQVU7UUFDTixXQUFXLENBQUMsS0FBSyxFQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pDLElBQUksS0FBSyxZQUFZLGVBQWUsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEdBQUcsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLE9BQU8sRUFBRSxDQUFDO29CQUNwQyxJQUFHLElBQUksQ0FBQyxXQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFDLENBQUM7d0JBQ3RFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDekQsQ0FBQztvQkFDRCxXQUFXLENBQUMsS0FBSyxFQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxDQUFDO2dCQUNELElBQUksQ0FBQyxjQUFjLEdBQUc7b0JBQ2xCLE9BQU8sRUFBRSxNQUFNO29CQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsR0FBRztvQkFDVixJQUFJLEVBQUUsTUFBTTtvQkFDWixRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUc7b0JBQ25CLFlBQVksRUFBRSxFQUFFO2lCQUNuQixDQUFBO1lBQ0wsQ0FBQztZQUNELElBQUksS0FBSyxZQUFZLGFBQWEsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDO1lBRWhELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQTtJQUVOLENBQUM7SUFFRCxpQkFBaUI7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQzsrR0E5RFEsa0JBQWtCLHdDQVNmLFFBQVEsYUFDUixNQUFNO21IQVZULGtCQUFrQixjQURMLE1BQU07OzRGQUNuQixrQkFBa0I7a0JBRDlCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFVekIsTUFBTTsyQkFBQyxRQUFROzswQkFDZixNQUFNOzJCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IE1haW5TZXNzaW9uIH0gZnJvbSBcIi4vdHJhY2UubW9kZWxcIjtcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29uZn0gZnJvbSBcIi4vbmctY29sbGVjdG9yLm1vZHVsZVwiO1xuaW1wb3J0IHsgZGF0ZU5vdywgZ2V0UmVnQXJyT3JDYWxsLCBnZXRTdHJpbmdPckNhbGwsIGxvZ1RyYWNlYXBpLCBwcmV0dHlTZXNzaW9uRm9ybWF0IH0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgU2Vzc2lvbk1hbmFnZXIgfSBmcm9tIFwiLi9zZXNzaW9uLW1hbmFnZXIuc2VydmljZVwiO1xuXG5cbmNvbnN0IFNMQVNIID0gJy8nO1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSkgXG5leHBvcnQgY2xhc3MgUm91dGVUcmFjZXJTZXJ2aWNlICBpbXBsZW1lbnRzIE9uRGVzdHJveXtcblxuXG4gICAgY3VycmVudFNlc3Npb24hOiBNYWluU2Vzc2lvbjsgXG4gICAgdXNlcj86IHN0cmluZztcbiAgICB0cnlTZW5kSW5zdGFuY2VFbnY6YW55O1xuICAgIGV4Y2x1ZGVMaXN0OiBSZWdFeHBbXSB8IHVuZGVmaW5lZDtcbiAgICBzZXNzaW9uTWFuYWdlciA6IFNlc3Npb25NYW5hZ2VyO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIEBJbmplY3QoJ2NvbmZpZycpIGNvbmZpZzogQXBwbGljYXRpb25Db25mLFxuICAgICAgICBASW5qZWN0KCdob3N0JykgaG9zdDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIgPSBuZXcgU2Vzc2lvbk1hbmFnZXIoKTtcbiAgICAgICAgdGhpcy5leGNsdWRlTGlzdCA9IGdldFJlZ0Fyck9yQ2FsbChjb25maWcuZXhjbHVkZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIuaW5pdGlhbGl6ZShjb25maWcsaG9zdCk7XG4gICAgICAgIHRoaXMudXNlciA9IGdldFN0cmluZ09yQ2FsbChjb25maWcudXNlcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiZWZvcmVVbmxvYWRIYW5kbGVyID0gKGV2ZW50OiBCZWZvcmVVbmxvYWRFdmVudCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLmVuZCA9IGRhdGVOb3coKTtcbiAgICAgICAgaWYodGhpcy5leGNsdWRlTGlzdCEuZXZlcnkoKGUpID0+ICFlLnRlc3QodGhpcy5jdXJyZW50U2Vzc2lvbi5sb2NhdGlvbikpKXtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIuYWRkU2Vzc2lvbnModGhpcy5jdXJyZW50U2Vzc2lvbik7Ly9mb3JjZSBcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIuc2VuZFNlc3Npb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlcik7IFxuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGxvZ1RyYWNlYXBpKCdsb2cnLCdpbml0aWFsaXplJyk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIpO1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IGRhdGVOb3coKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLmVuZCA9IGRhdGVOb3coKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5leGNsdWRlTGlzdCEuZXZlcnkoKGUpID0+ICFlLnRlc3QodGhpcy5jdXJyZW50U2Vzc2lvbi5sb2NhdGlvbikpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbk1hbmFnZXIuYWRkU2Vzc2lvbnModGhpcy5jdXJyZW50U2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ2xvZycscHJldHR5U2Vzc2lvbkZvcm1hdCh0aGlzLmN1cnJlbnRTZXNzaW9uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICdAdHlwZSc6IFwibWFpblwiLFxuICAgICAgICAgICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXIsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBub3csXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiVklFV1wiLFxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbjogZXZlbnQudXJsLFxuICAgICAgICAgICAgICAgICAgICByZXN0UmVxdWVzdHM6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ubmFtZSA9IGRvY3VtZW50LnRpdGxlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ubG9jYXRpb24gPSBkb2N1bWVudC5VUkw7IFxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICB9XG5cbiAgICBnZXRDdXJyZW50U2Vzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgfVxufVxuXG4iXX0=
@@ -0,0 +1,145 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, from, interval, of, tap } from 'rxjs';
3
+ import { dateNow, detectBrowser, detectOs, getNumberOrCall, getStringOrCall, logTraceapi } from './util';
4
+ import * as i0 from "@angular/core";
5
+ const SLASH = '/';
6
+ export class SessionManager {
7
+ constructor() {
8
+ this.sessionQueue = [];
9
+ this.sessionSendAttempts = 0;
10
+ this.InstanceEnvSendAttempts = 0;
11
+ this.sendSessionfinished = true;
12
+ this.sendInstanceEnvFinished = true;
13
+ }
14
+ initialize(config, host) {
15
+ this.logServerMain = this.sessionApiURL(host, getStringOrCall(config.sessionApi));
16
+ this.logInstanceEnv = this.instanceApiURL(host, getStringOrCall(config.instanceApi));
17
+ this.maxBufferSize = getNumberOrCall(config.bufferMaxSize) ?? 1000;
18
+ this.delay = getNumberOrCall(config.delay) ?? 60000;
19
+ this.instanceEnvironment = {
20
+ name: getStringOrCall(config.name),
21
+ version: getStringOrCall(config.version),
22
+ address: undefined, //server side
23
+ env: getStringOrCall(config.env),
24
+ os: detectOs(),
25
+ re: detectBrowser(),
26
+ user: undefined, // cannot get user
27
+ type: "CLIENT",
28
+ instant: dateNow(),
29
+ collector: "inspect-ng-collector-0.0.1"
30
+ };
31
+ this.scheduledSessionSender = interval(this.delay)
32
+ .pipe(tap(() => {
33
+ if (this.sendSessionfinished) {
34
+ this.sendSessions();
35
+ }
36
+ }))
37
+ .subscribe();
38
+ }
39
+ addSessions(sessions) {
40
+ this.sessionQueue.push(sessions);
41
+ logTraceapi('log', "added element to session queue, new size is: " + this.sessionQueue.length);
42
+ }
43
+ sendSessions() {
44
+ if (this.sessionQueue.length > 0) {
45
+ this.getInsertedInstanceId().subscribe((id) => {
46
+ if (id) {
47
+ this.sendSessionfinished = false;
48
+ let sessions = [...this.sessionQueue];
49
+ this.sessionQueue.splice(0, sessions.length); // add rest of sessions
50
+ logTraceapi('log', `sending sessions, attempts:${++this.sessionSendAttempts}, queue size : ${sessions.length}`);
51
+ const requestOptions = {
52
+ method: 'PUT',
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ 'Access-Control-Allow-Origin': '*'
56
+ },
57
+ body: JSON.stringify(sessions)
58
+ };
59
+ fetch(this.logServerMain, requestOptions)
60
+ .then(data => {
61
+ if (data.ok) {
62
+ logTraceapi('log', 'sessions sent successfully, queue size reset, new size is: ' + this.sessionQueue.length);
63
+ this.sessionSendAttempts = 0;
64
+ }
65
+ else {
66
+ logTraceapi('warn', `Error while attempting to send sessions, attempts: ${this.sessionSendAttempts}`); //
67
+ this.revertQueueSize(sessions);
68
+ }
69
+ })
70
+ .catch(error => {
71
+ logTraceapi('warn', `Error while attempting to send sessions, attempts: ${this.sessionSendAttempts}`); //
72
+ logTraceapi('warn', error);
73
+ this.revertQueueSize(sessions);
74
+ }).finally(() => {
75
+ this.sendSessionfinished = true;
76
+ });
77
+ }
78
+ else {
79
+ logTraceapi('warn', `Error while attempting to send Environement instance, attempts ${this.sessionSendAttempts}`);
80
+ }
81
+ });
82
+ }
83
+ }
84
+ revertQueueSize(sessions) {
85
+ this.sessionQueue.unshift(...sessions);
86
+ if (this.sessionQueue.length > this.maxBufferSize) {
87
+ let diff = this.sessionQueue.length - this.maxBufferSize;
88
+ this.sessionQueue = this.sessionQueue.slice(0, this.maxBufferSize);
89
+ logTraceapi('log', 'Buffer size exeeded the max size,last sessions have been removed from buffer, (number of sessions removed):' + diff);
90
+ }
91
+ }
92
+ getInsertedInstanceId() {
93
+ if (this.instance) {
94
+ return this.instance;
95
+ }
96
+ if (this.sendInstanceEnvFinished) {
97
+ this.sendInstanceEnvFinished = false;
98
+ const requestOptions = {
99
+ method: 'POST',
100
+ headers: {
101
+ 'Content-Type': 'application/json',
102
+ 'Access-Control-Allow-Origin': '*' // retest
103
+ },
104
+ body: JSON.stringify(this.instanceEnvironment)
105
+ };
106
+ this.sessionSendAttempts++;
107
+ return from(fetch(this.logInstanceEnv, requestOptions)
108
+ .then(res => res.ok ? res.text().then(id => {
109
+ this.instance = new BehaviorSubject(id);
110
+ this.logServerMain = this.logServerMain.replace(':id', id);
111
+ this.sessionSendAttempts = 0;
112
+ logTraceapi('log', 'Environement instance sent successfully');
113
+ return id; // return logserverMain
114
+ }) : null)
115
+ .catch(err => {
116
+ logTraceapi('warn', err);
117
+ return null;
118
+ }).finally(() => {
119
+ this.sendInstanceEnvFinished = true;
120
+ }));
121
+ }
122
+ return of(null);
123
+ }
124
+ instanceApiURL(host, path) {
125
+ return this.toURL(host, path);
126
+ }
127
+ sessionApiURL(host, path) {
128
+ return this.toURL(host, path);
129
+ }
130
+ toURL(host, path) {
131
+ return host.endsWith(SLASH) || path.startsWith(SLASH) ? host + path : [host, path].join(SLASH);
132
+ }
133
+ ngOnDestroy() {
134
+ if (this.scheduledSessionSender) {
135
+ this.scheduledSessionSender.unsubscribe();
136
+ }
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SessionManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SessionManager, providedIn: 'root' }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SessionManager, decorators: [{
142
+ type: Injectable,
143
+ args: [{ providedIn: 'root' }]
144
+ }], ctorParameters: () => [] });
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2luc3BlY3QtbmctY29sbGVjdG9yL3NyYy9saWIvc2Vzc2lvbi1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDOztBQUV6RyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7QUFHbEIsTUFBTSxPQUFPLGNBQWM7SUFjdkI7UUFOQSxpQkFBWSxHQUFpQixFQUFFLENBQUM7UUFDaEMsd0JBQW1CLEdBQVcsQ0FBQyxDQUFBO1FBQy9CLDRCQUF1QixHQUFXLENBQUMsQ0FBQztRQUVwQyx3QkFBbUIsR0FBVSxJQUFJLENBQUM7UUFDbEMsNEJBQXVCLEdBQVksSUFBSSxDQUFDO0lBR3hDLENBQUM7SUFHRCxVQUFVLENBQUMsTUFBVSxFQUFFLElBQVc7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBRSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBRSxDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGFBQWEsR0FBSSxlQUFlLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUks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QUFPLENBQUMsR0FBRSxFQUFFO2dCQUNYLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNQLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVcsRUFBRSxJQUFXO1FBQ25DLE9BQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFXLEVBQUUsSUFBVztRQUNuQyxPQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUUsSUFBVyxFQUFHLElBQVc7UUFDNUIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsV0FBVztRQUNSLElBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDOytHQXhKUSxjQUFjO21IQUFkLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbnN0YW5jZUVudmlyb25tZW50LCBNYWluU2Vzc2lvbiB9IGZyb20gJy4vdHJhY2UubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkYXRlTm93LCBkZXRlY3RCcm93c2VyLCBkZXRlY3RPcywgZ2V0TnVtYmVyT3JDYWxsLCBnZXRTdHJpbmdPckNhbGwsIGxvZ1RyYWNlYXBpIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgU0xBU0ggPSAnLyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgbG9nU2VydmVyTWFpbiE6IHN0cmluZztcbiAgICBsb2dJbnN0YW5jZUVudiE6IHN0cmluZztcbiAgICBtYXhCdWZmZXJTaXplITogbnVtYmVyO1xuICAgIGRlbGF5ITpudW1iZXJcbiAgICBpbnN0YW5jZUVudmlyb25tZW50ICE6IEluc3RhbmNlRW52aXJvbm1lbnQ7XG4gICAgc2NoZWR1bGVkU2Vzc2lvblNlbmRlciE6IFN1YnNjcmlwdGlvbjtcbiAgICBzZXNzaW9uUXVldWU6IE1haW5TZXNzaW9uW109IFtdO1xuICAgIHNlc3Npb25TZW5kQXR0ZW1wdHM6IG51bWJlciA9IDBcbiAgICBJbnN0YW5jZUVudlNlbmRBdHRlbXB0czogbnVtYmVyID0gMDtcbiAgICBpbnN0YW5jZSE6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xuICAgIHNlbmRTZXNzaW9uZmluaXNoZWQ6Ym9vbGVhbj0gdHJ1ZTtcbiAgICBzZW5kSW5zdGFuY2VFbnZGaW5pc2hlZDogYm9vbGVhbiA9IHRydWU7XG4gICAgY29uc3RydWN0b3IoKXtcblxuICAgIH1cblxuXG4gICAgaW5pdGlhbGl6ZShjb25maWc6YW55LCBob3N0OnN0cmluZykge1xuICAgICAgICB0aGlzLmxvZ1NlcnZlck1haW4gPSB0aGlzLnNlc3Npb25BcGlVUkwoaG9zdCxnZXRTdHJpbmdPckNhbGwoY29uZmlnLnNlc3Npb25BcGkpISk7XG4gICAgICAgIHRoaXMubG9nSW5zdGFuY2VFbnYgPSB0aGlzLmluc3RhbmNlQXBpVVJMKGhvc3QsZ2V0U3RyaW5nT3JDYWxsKGNvbmZpZy5pbnN0YW5jZUFwaSkhKTtcbiAgICAgICAgdGhpcy5tYXhCdWZmZXJTaXplID0gIGdldE51bWJlck9yQ2FsbChjb25maWcuYnVmZmVyTWF4U2l6ZSkgPz8gMTAwMDtcbiAgICAgICAgdGhpcy5kZWxheSA9IGdldE51bWJlck9yQ2FsbChjb25maWcuZGVsYXkpID8/IDYwMDAwO1xuICAgICAgICB0aGlzLmluc3RhbmNlRW52aXJvbm1lbnQgPSB7XG4gICAgICAgICAgICBuYW1lOiBnZXRTdHJpbmdPckNhbGwoY29uZmlnLm5hbWUpLFxuICAgICAgICAgICAgdmVyc2lvbjogZ2V0U3RyaW5nT3JDYWxsKGNvbmZpZy52ZXJzaW9uKSxcbiAgICAgICAgICAgIGFkZHJlc3M6IHVuZGVmaW5lZCwgLy9zZXJ2ZXIgc2lkZVxuICAgICAgICAgICAgZW52OiBnZXRTdHJpbmdPckNhbGwoY29uZmlnLmVudiksXG4gICAgICAgICAgICBvczogZGV0ZWN0T3MoKSxcbiAgICAgICAgICAgIHJlOiBkZXRlY3RCcm93c2VyKCksXG4gICAgICAgICAgICB1c2VyOiB1bmRlZmluZWQsIC8vIGNhbm5vdCBnZXQgdXNlclxuICAgICAgICAgICAgdHlwZTogXCJDTElFTlRcIixcbiAgICAgICAgICAgIGluc3RhbnQ6IGRhdGVOb3coKSxcbiAgICAgICAgICAgIGNvbGxlY3RvcjogXCJpbnNwZWN0LW5nLWNvbGxlY3Rvci0wLjAuMVwiXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjaGVkdWxlZFNlc3Npb25TZW5kZXIgPSBpbnRlcnZhbCh0aGlzLmRlbGF5KVxuICAgICAgICAucGlwZSh0YXAoKCk9PiB7XG4gICAgICAgICAgICBpZih0aGlzLnNlbmRTZXNzaW9uZmluaXNoZWQpe1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFNlc3Npb25zKCk7XG4gICAgICAgICAgICB9fSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBhZGRTZXNzaW9ucyhzZXNzaW9uczpNYWluU2Vzc2lvbil7XG4gICAgICAgIHRoaXMuc2Vzc2lvblF1ZXVlLnB1c2goc2Vzc2lvbnMpO1xuICAgICAgICBsb2dUcmFjZWFwaSgnbG9nJyxcImFkZGVkIGVsZW1lbnQgdG8gc2Vzc2lvbiBxdWV1ZSwgbmV3IHNpemUgaXM6IFwiKyB0aGlzLnNlc3Npb25RdWV1ZS5sZW5ndGgpO1xuICAgIH1cblxuXG4gICAgc2VuZFNlc3Npb25zKCkge1xuICAgICAgICBpZih0aGlzLnNlc3Npb25RdWV1ZS5sZW5ndGg+IDApe1xuICAgICAgICAgICAgdGhpcy5nZXRJbnNlcnRlZEluc3RhbmNlSWQoKS5zdWJzY3JpYmUoKGlkOnN0cmluZ3xudWxsKT0+e1xuICAgICAgICAgICAgICAgIGlmKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZFNlc3Npb25maW5pc2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbnM6IE1haW5TZXNzaW9uW10gPSBbLi4udGhpcy5zZXNzaW9uUXVldWVdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25RdWV1ZS5zcGxpY2UoMCxzZXNzaW9ucy5sZW5ndGgpOyAvLyBhZGQgcmVzdCBvZiBzZXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICBsb2dUcmFjZWFwaSgnbG9nJyxgc2VuZGluZyBzZXNzaW9ucywgYXR0ZW1wdHM6JHsrK3RoaXMuc2Vzc2lvblNlbmRBdHRlbXB0c30sIHF1ZXVlIHNpemUgOiAke3Nlc3Npb25zLmxlbmd0aH1gKVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKidcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShzZXNzaW9ucylcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmZXRjaCh0aGlzLmxvZ1NlcnZlck1haW4sIHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihkYXRhPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5vayl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ2xvZycsJ3Nlc3Npb25zIHNlbnQgc3VjY2Vzc2Z1bGx5LCBxdWV1ZSBzaXplIHJlc2V0LCBuZXcgc2l6ZSBpczogJyt0aGlzLnNlc3Npb25RdWV1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uU2VuZEF0dGVtcHRzPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ3dhcm4nLGBFcnJvciB3aGlsZSBhdHRlbXB0aW5nIHRvIHNlbmQgc2Vzc2lvbnMsIGF0dGVtcHRzOiAke3RoaXMuc2Vzc2lvblNlbmRBdHRlbXB0c31gKS8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXZlcnRRdWV1ZVNpemUoc2Vzc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ3dhcm4nLGBFcnJvciB3aGlsZSBhdHRlbXB0aW5nIHRvIHNlbmQgc2Vzc2lvbnMsIGF0dGVtcHRzOiAke3RoaXMuc2Vzc2lvblNlbmRBdHRlbXB0c31gKS8vXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dUcmFjZWFwaSgnd2FybicsZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJldmVydFF1ZXVlU2l6ZShzZXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmZpbmFsbHkoICgpPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kU2Vzc2lvbmZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ3dhcm4nLGBFcnJvciB3aGlsZSBhdHRlbXB0aW5nIHRvIHNlbmQgRW52aXJvbmVtZW50IGluc3RhbmNlLCBhdHRlbXB0cyAke3RoaXMuc2Vzc2lvblNlbmRBdHRlbXB0c31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV2ZXJ0UXVldWVTaXplKHNlc3Npb25zOiBNYWluU2Vzc2lvbltdKXtcbiAgICAgICAgdGhpcy5zZXNzaW9uUXVldWUudW5zaGlmdCguLi5zZXNzaW9ucyk7XG4gICAgICAgIGlmKHRoaXMuc2Vzc2lvblF1ZXVlLmxlbmd0aCA+IHRoaXMubWF4QnVmZmVyU2l6ZSApe1xuICAgICAgICAgICAgbGV0IGRpZmYgPSB0aGlzLnNlc3Npb25RdWV1ZS5sZW5ndGggLSB0aGlzLm1heEJ1ZmZlclNpemU7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25RdWV1ZSA9IHRoaXMuc2Vzc2lvblF1ZXVlLnNsaWNlKDAsdGhpcy5tYXhCdWZmZXJTaXplKTtcbiAgICAgICAgICAgIGxvZ1RyYWNlYXBpKCdsb2cnLCdCdWZmZXIgc2l6ZSBleGVlZGVkIHRoZSBtYXggc2l6ZSxsYXN0IHNlc3Npb25zIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gYnVmZmVyLCAobnVtYmVyIG9mIHNlc3Npb25zIHJlbW92ZWQpOicrZGlmZilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEluc2VydGVkSW5zdGFuY2VJZCgpIDogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgaWYodGhpcy5pbnN0YW5jZSl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLnNlbmRJbnN0YW5jZUVudkZpbmlzaGVkKXtcbiAgICAgICAgICAgIHRoaXMuc2VuZEluc3RhbmNlRW52RmluaXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyAvLyByZXRlc3RcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHRoaXMuaW5zdGFuY2VFbnZpcm9ubWVudClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25TZW5kQXR0ZW1wdHMrKztcbiAgICAgICAgICAgIHJldHVybiBmcm9tKCBmZXRjaCh0aGlzLmxvZ0luc3RhbmNlRW52LHJlcXVlc3RPcHRpb25zKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHJlcy5vayA/IHJlcy50ZXh0KCkudGhlbihpZD0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ1NlcnZlck1haW4gPXRoaXMubG9nU2VydmVyTWFpbi5yZXBsYWNlKCc6aWQnLGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZW5kQXR0ZW1wdHM9MDtcbiAgICAgICAgICAgICAgICBsb2dUcmFjZWFwaSgnbG9nJywnRW52aXJvbmVtZW50IGluc3RhbmNlIHNlbnQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkOyAvLyByZXR1cm4gbG9nc2VydmVyTWFpblxuICAgICAgICAgICAgfSkgOiBudWxsKVxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgbG9nVHJhY2VhcGkoJ3dhcm4nLGVycilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCk9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kSW5zdGFuY2VFbnZGaW5pc2hlZCA9IHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VBcGlVUkwoaG9zdDpzdHJpbmcsIHBhdGg6c3RyaW5nKXtcbiAgICAgICAgcmV0dXJuICB0aGlzLnRvVVJMKGhvc3QscGF0aCk7XG4gICAgIH1cblxuICAgICBzZXNzaW9uQXBpVVJMKGhvc3Q6c3RyaW5nLCBwYXRoOnN0cmluZyl7XG4gICAgICAgIHJldHVybiAgdGhpcy50b1VSTChob3N0LHBhdGgpO1xuICAgICB9XG5cbiAgICAgdG9VUkwoIGhvc3Q6c3RyaW5nLCAgcGF0aDpzdHJpbmcgKXtcbiAgICAgICAgIHJldHVybiBob3N0LmVuZHNXaXRoKFNMQVNIKSB8fCBwYXRoLnN0YXJ0c1dpdGgoU0xBU0gpID8gaG9zdCArIHBhdGggOiBbaG9zdCxwYXRoXS5qb2luKFNMQVNIKTtcbiAgICAgfVxuXG4gICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZih0aGlzLnNjaGVkdWxlZFNlc3Npb25TZW5kZXIpe1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZWRTZXNzaW9uU2VuZGVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2luc3BlY3QtbmctY29sbGVjdG9yL3NyYy9saWIvdHJhY2UubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgSW5zdGFudFR5cGUgPSBcIlNFUlZFUlwiICB8IFwiQ0xJRU5UXCI7XG50eXBlIE1haW5TZXNzaW9uVHlwZSA9ICBcIlZJRVdcIiB8IFwiQkFUQ0hcIiB8IFwiU1RBUlRVUFwiO1xuZXhwb3J0IGludGVyZmFjZSBNYWluU2Vzc2lvbiB7XG4gICAgJ0B0eXBlJz86IHN0cmluZztcbiAgICB0eXBlOiBNYWluU2Vzc2lvblR5cGU7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBsb2NhdGlvbjogc3RyaW5nO1xuICAgIHVzZXI/OiBzdHJpbmc7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ/OiBudW1iZXI7XG4gICAgdGhyZWFkTmFtZT86c3RyaW5nOyAgLy8gYWx3YXlzIG51bGwgXG4gICAgZXhjZXB0aW9uPzogRXhjZXB0aW9uSW5mbyAvLyB0byBiZSBjaGFuZ2VkID8gXG4gICAgcmVzdFJlcXVlc3RzOiBSZXN0UmVxdWVzdFtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VFbnZpcm9ubWVudCB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICBhZGRyZXNzPzogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgZW52Pzogc3RyaW5nO1xuICAgIG9zPzogc3RyaW5nO1xuICAgIHJlPzogc3RyaW5nO1xuICAgIHVzZXI/OiBzdHJpbmc7XG4gICAgdHlwZT86IEluc3RhbnRUeXBlO1xuICAgIGluc3RhbnQ/Om51bWJlcjsgICBcbiAgICBjb2xsZWN0b3I/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0UmVxdWVzdCB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgcHJvdG9jb2w6IHN0cmluZztcbiAgICBob3N0OiBzdHJpbmc7XG4gICAgcG9ydDogbnVtYmVyO1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBxdWVyeTogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgYXV0aFNjaGVtZT86IHN0cmluZztcbiAgICBzdGF0dXM6IG51bWJlcjtcbiAgICBpbkRhdGFTaXplOiBudW1iZXI7XG4gICAgb3VEYXRhU2l6ZTogbnVtYmVyO1xuICAgIHVzZXI/OnN0cmluZztcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xuICAgIHRocmVhZE5hbWU/OnN0cmluZztcbiAgICBleGNlcHRpb24/OiBFeGNlcHRpb25JbmZvXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjZXB0aW9uSW5mbyB7IC8vIHRvIGJlY2hhbmdlZCBcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4iXX0=
@@ -0,0 +1,131 @@
1
+ let WIN = window;
2
+ let c = console;
3
+ export const HOST_PATERN = /https?:\/\/[\w\-\.]+(:\d{2,5})?\/?/;
4
+ export const PATH_PATERN = /[\w\-\{\}]+(\/[\w\-\{\}]+)*/;
5
+ export function dateNow() {
6
+ return Date.now() / 1000;
7
+ }
8
+ export function logTraceapi(fn, ...args) {
9
+ if (WIN["traceapi"]) {
10
+ if (typeof c[fn] === 'function') {
11
+ c[fn]('[TRACEAPI]', ...args);
12
+ }
13
+ }
14
+ }
15
+ export function prettySessionFormat(session) {
16
+ let s = "";
17
+ if (WIN['debug']) {
18
+ s = `[${session.name}]`;
19
+ if (session.user != null) {
20
+ s += `<${session.user}>`;
21
+ }
22
+ if (session.location) {
23
+ s += `(${session.location}) `;
24
+ }
25
+ s += prettyDurationFormat(session.start, session.end);
26
+ session.restRequests.forEach(r => {
27
+ s += prettyRestRequestFormat(r);
28
+ });
29
+ }
30
+ return s;
31
+ }
32
+ function prettyRestRequestFormat(rest) {
33
+ let s = ` - [${rest.method}]`;
34
+ if (rest.protocol) {
35
+ s += `${rest.protocol}://`;
36
+ }
37
+ if (rest.host) {
38
+ s += rest.host;
39
+ }
40
+ if (rest.port > 0) {
41
+ s += `:${rest.port}`;
42
+ }
43
+ if (rest.path) {
44
+ if (!rest.path.startsWith("/") && !s.endsWith("/")) {
45
+ s += '/';
46
+ }
47
+ s += rest.path;
48
+ }
49
+ if (rest.query) {
50
+ s += rest.query;
51
+ }
52
+ if (rest.exception?.type) {
53
+ s += ` ${rest.exception?.type}:`;
54
+ }
55
+ if (rest.exception?.message) {
56
+ s += ` ${rest.exception.message}`;
57
+ }
58
+ s += ` >> ${rest.status}`;
59
+ s += prettyDurationFormat(rest.start, rest.end);
60
+ return s;
61
+ }
62
+ function prettyDurationFormat(start, end) {
63
+ return start && end ? `(in ${new Date(end * 1000).getTime() - new Date(start * 1000).getTime()} ms) \n` : '';
64
+ }
65
+ export function validate(v, pattern) {
66
+ if (v && pattern.exec(v)) {
67
+ return true;
68
+ }
69
+ logTraceapi('warn', "bad value=" + v + ", pattern=" + pattern);
70
+ return false;
71
+ }
72
+ export function requirePostitiveValue(v, name) {
73
+ if (v == undefined || (v && v > 0)) {
74
+ return true;
75
+ }
76
+ logTraceapi('warn', name + '=' + v + " <= 0");
77
+ return false;
78
+ }
79
+ export function getNumberOrCall(o) {
80
+ return typeof o === "function" ? o() : o;
81
+ }
82
+ export function getStringOrCall(o) {
83
+ return typeof o === "function" ? o() : o;
84
+ }
85
+ export function getRegArrOrCall(o) {
86
+ return typeof o === "function" ? o() : o;
87
+ }
88
+ export function detectBrowser() {
89
+ try {
90
+ const agent = window.navigator.userAgent.toLowerCase();
91
+ switch (true) {
92
+ case agent.indexOf('edge') > -1:
93
+ return 'edge';
94
+ case agent.indexOf('opr') > -1:
95
+ return 'opera';
96
+ case agent.indexOf('chrome') > -1:
97
+ return 'chrome';
98
+ case agent.indexOf('firefox') > -1:
99
+ return 'firefox';
100
+ case agent.indexOf('safari') > -1:
101
+ return 'safari';
102
+ }
103
+ }
104
+ catch (e) {
105
+ console.error(e);
106
+ }
107
+ return undefined;
108
+ }
109
+ export function detectOs() {
110
+ try {
111
+ let versionMatch, version;
112
+ const agent = window.navigator.userAgent.toLowerCase();
113
+ switch (true) {
114
+ case (/windows/.test(agent)):
115
+ versionMatch = /windows nt (\d+\.\d+)/.exec(agent);
116
+ version = versionMatch ? versionMatch[1] : 'Unknown';
117
+ return `Windows ${version}`;
118
+ case (/linux/.test(agent)):
119
+ return 'Linux';
120
+ case (/macintosh/.test(agent)):
121
+ versionMatch = /mac os x (\d+[._]\d+[._]\d+)/.exec(agent);
122
+ version = versionMatch ? versionMatch[1] : 'Unknown';
123
+ return `MacOs ${version}`;
124
+ }
125
+ }
126
+ catch (e) {
127
+ console.error(e);
128
+ }
129
+ return undefined;
130
+ }
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvaW5zcGVjdC1uZy1jb2xsZWN0b3Ivc3JjL2xpYi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLElBQUksR0FBRyxHQUFPLE1BQU0sQ0FBQztBQUNyQixJQUFJLENBQUMsR0FBTyxPQUFPLENBQUM7QUFFcEIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDO0FBQ2hFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyw2QkFBNkIsQ0FBQztBQUV6RCxNQUFNLFVBQVUsT0FBTztJQUNuQixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFLLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBUyxFQUFFLEdBQUcsSUFBVztJQUVuRCxJQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBQyxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssVUFBVSxFQUFDLENBQUM7WUFDL0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO1FBQzlCLENBQUM7SUFDSCxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxPQUFvQjtJQUN0RCxJQUFJLENBQUMsR0FBQyxFQUFFLENBQUM7SUFDVCxJQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBQyxDQUFDO1FBQ2QsQ0FBQyxHQUFJLElBQUksT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQzFCLElBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUMsQ0FBQztZQUN2QixDQUFDLElBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUE7UUFDekIsQ0FBQztRQUNELElBQUcsT0FBTyxDQUFDLFFBQVEsRUFBQyxDQUFDO1lB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LE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNyRCxPQUFPLFNBQVMsT0FBTyxFQUFFLENBQUE7UUFDakMsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1AsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1haW5TZXNzaW9uLCBSZXN0UmVxdWVzdCB9IGZyb20gXCIuL3RyYWNlLm1vZGVsXCI7XG5cbmxldCBXSU46YW55ID0gd2luZG93O1xubGV0IGM6YW55ID0gY29uc29sZTtcblxuZXhwb3J0IGNvbnN0IEhPU1RfUEFURVJOID0gL2h0dHBzPzpcXC9cXC9bXFx3XFwtXFwuXSsoOlxcZHsyLDV9KT9cXC8/LztcbmV4cG9ydCBjb25zdCBQQVRIX1BBVEVSTiA9IC9bXFx3XFwtXFx7XFx9XSsoXFwvW1xcd1xcLVxce1xcfV0rKSovO1xuXG5leHBvcnQgZnVuY3Rpb24gZGF0ZU5vdygpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKSAvIDFfMDAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9nVHJhY2VhcGkoZm46c3RyaW5nICwuLi5hcmdzOiBhbnlbXSl7XG5cbiAgaWYoV0lOW1widHJhY2VhcGlcIl0pe1xuICAgICAgaWYoIHR5cGVvZiBjW2ZuXSA9PT0gJ2Z1bmN0aW9uJyl7XG4gICAgICAgIGNbZm5dKCdbVFJBQ0VBUEldJywgLi4uYXJncylcbiAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlTZXNzaW9uRm9ybWF0KHNlc3Npb246IE1haW5TZXNzaW9uKXtcbiAgbGV0IHM9XCJcIjtcbiAgaWYoV0lOWydkZWJ1ZyddKXtcbiAgICAgcyAgPSBgWyR7c2Vzc2lvbi5uYW1lfV1gO1xuICAgIGlmKHNlc3Npb24udXNlciAhPSBudWxsKXtcbiAgICAgIHMrPSBgPCR7c2Vzc2lvbi51c2VyfT5gXG4gICAgfVxuICAgIGlmKHNlc3Npb24ubG9jYXRpb24pe1xuICAgICAgcys9IGAoJHtzZXNzaW9uLmxvY2F0aW9ufSkgYFxuICAgIH1cbiAgICBzKz1wcmV0dHlEdXJhdGlvbkZvcm1hdChzZXNzaW9uLnN0YXJ0LHNlc3Npb24uZW5kISk7XG4gICAgc2Vzc2lvbi5yZXN0UmVxdWVzdHMuZm9yRWFjaChyID0+IHtcbiAgICAgIHMrPSBwcmV0dHlSZXN0UmVxdWVzdEZvcm1hdChyKTtcbiAgICB9KVxuICB9XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwcmV0dHlSZXN0UmVxdWVzdEZvcm1hdChyZXN0OiBSZXN0UmVxdWVzdCl7XG4gIGxldCBzID0gYCAgLSAgWyR7cmVzdC5tZXRob2R9XWBcbiAgaWYocmVzdC5wcm90b2NvbCl7XG4gICAgcys9IGAke3Jlc3QucHJvdG9jb2x9Oi8vYFxuICB9XG5cbiAgaWYocmVzdC5ob3N0KXtcbiAgICBzKz0gcmVzdC5ob3N0XG4gIH1cblxuICBpZihyZXN0LnBvcnQgPiAwKXtcbiAgICBzKz0gYDoke3Jlc3QucG9ydH1gXG4gIH1cblxuICBpZihyZXN0LnBhdGgpe1xuICAgIGlmKCFyZXN0LnBhdGguc3RhcnRzV2l0aChcIi9cIikgJiYgIXMuZW5kc1dpdGgoXCIvXCIpKXtcbiAgICAgIHMrPSAnLydcbiAgICB9XG4gICAgcys9IHJlc3QucGF0aDtcbiAgfVxuXG4gIGlmKHJlc3QucXVlcnkpe1xuICAgIHMrPSByZXN0LnF1ZXJ5XG4gIH1cblxuICBpZihyZXN0LmV4Y2VwdGlvbj8udHlwZSl7XG4gICAgcys9IGAgJHtyZXN0LmV4Y2VwdGlvbj8udHlwZX06YDtcbiAgfVxuXG4gIGlmKHJlc3QuZXhjZXB0aW9uPy5tZXNzYWdlKXtcbiAgICBzKz0gYCAke3Jlc3QuZXhjZXB0aW9uLm1lc3NhZ2V9YDtcbiAgfVxuICBzKz0gYCA+PiAke3Jlc3Quc3RhdHVzfWBcbiAgcys9IHByZXR0eUR1cmF0aW9uRm9ybWF0KHJlc3Quc3RhcnQscmVzdC5lbmQpO1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcHJldHR5RHVyYXRpb25Gb3JtYXQoc3RhcnQ6bnVtYmVyLGVuZDpudW1iZXIpe1xuICAgIHJldHVybiAgc3RhcnQgJiYgZW5kID8gYChpbiAkeyBuZXcgRGF0ZShlbmQqMTAwMCkuZ2V0VGltZSgpLSBuZXcgRGF0ZShzdGFydCoxMDAwKS5nZXRUaW1lKCkgfSBtcykgXFxuYCA6ICcnO1xufVxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlKHY6IHN0cmluZyB8IHVuZGVmaW5lZCwgcGF0dGVybjogUmVnRXhwKSB7XG4gICBpZih2ICYmIHBhdHRlcm4uZXhlYyh2KSl7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgIH1cblxuXG4gICBsb2dUcmFjZWFwaSgnd2FybicsXCJiYWQgdmFsdWU9XCIgKyB2ICsgXCIsIHBhdHRlcm49XCIgKyBwYXR0ZXJuKTtcbiAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVQb3N0aXRpdmVWYWx1ZSh2OiBudW1iZXIgfCB1bmRlZmluZWQsIG5hbWU6IHN0cmluZyl7XG4gIGlmKHYgPT0gdW5kZWZpbmVkIHx8ICAodiAmJiB2ID4gMCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxvZ1RyYWNlYXBpKCd3YXJuJyxuYW1lICsnPScrIHYgKyBcIiA8PSAwXCIpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROdW1iZXJPckNhbGwobz86IG51bWJlciB8ICgoKSA9PiBudW1iZXIpKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcImZ1bmN0aW9uXCIgPyBvKCkgOiBvO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nT3JDYWxsKG8/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nKSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJmdW5jdGlvblwiID8gbygpIDogbztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlZ0Fyck9yQ2FsbChvPzogUmVnRXhwW10gfCAoKCkgPT4gUmVnRXhwW10pKTogUmVnRXhwW10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwiZnVuY3Rpb25cIiA/IG8oKSA6IG87XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RCcm93c2VyKCkge1xuICB0cnkge1xuICAgICAgY29uc3QgYWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG4gICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2VkZ2UnKSA+IC0xOlxuICAgICAgICAgICAgICByZXR1cm4gJ2VkZ2UnO1xuICAgICAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignb3ByJykgPiAtMTpcbiAgICAgICAgICAgICAgcmV0dXJuICdvcGVyYSc7XG4gICAgICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdjaHJvbWUnKSA+IC0xOlxuICAgICAgICAgICAgICByZXR1cm4gJ2Nocm9tZSc7XG4gICAgICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdmaXJlZm94JykgPiAtMTpcbiAgICAgICAgICAgICAgcmV0dXJuICdmaXJlZm94JztcbiAgICAgICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ3NhZmFyaScpID4gLTE6XG4gICAgICAgICAgICAgIHJldHVybiAnc2FmYXJpJztcbiAgICAgIH1cbiAgfVxuICBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RPcygpIHtcbiAgdHJ5IHtcbiAgICAgIGxldCB2ZXJzaW9uTWF0Y2gsIHZlcnNpb247XG4gICAgICBjb25zdCBhZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKClcbiAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgIGNhc2UgKC93aW5kb3dzLy50ZXN0KGFnZW50KSk6XG5cbiAgICAgICAgICAgICAgdmVyc2lvbk1hdGNoID0gL3dpbmRvd3MgbnQgKFxcZCtcXC5cXGQrKS8uZXhlYyhhZ2VudCk7XG4gICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uTWF0Y2ggPyB2ZXJzaW9uTWF0Y2hbMV0gOiAnVW5rbm93bic7XG4gICAgICAgICAgICAgIHJldHVybiBgV2luZG93cyAke3ZlcnNpb259YDtcbiAgICAgICAgICBjYXNlICgvbGludXgvLnRlc3QoYWdlbnQpKTpcbiAgICAgICAgICAgICAgcmV0dXJuICdMaW51eCc7XG5cbiAgICAgICAgICBjYXNlICgvbWFjaW50b3NoLy50ZXN0KGFnZW50KSk6XG4gICAgICAgICAgICAgIHZlcnNpb25NYXRjaCA9IC9tYWMgb3MgeCAoXFxkK1suX11cXGQrWy5fXVxcZCspLy5leGVjKGFnZW50KTtcbiAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlcnNpb25NYXRjaCA/IHZlcnNpb25NYXRjaFsxXSA6ICdVbmtub3duJztcbiAgICAgICAgICAgICAgcmV0dXJuIGBNYWNPcyAke3ZlcnNpb259YFxuICAgICAgfVxuICB9XG4gIGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ldGVtZS1pbnNwZWN0LW5nLWNvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvaW5zcGVjdC1uZy1jb2xsZWN0b3Ivc3JjL29uZXRlbWUtaW5zcGVjdC1uZy1jb2xsZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of inspect-ng-collector
3
+ */
4
+ export * from './lib/ng-collector.module';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvaW5zcGVjdC1uZy1jb2xsZWN0b3Ivc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFHSCxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBpbnNwZWN0LW5nLWNvbGxlY3RvclxuICovXG5cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmctY29sbGVjdG9yLm1vZHVsZSc7XG5cbiAiXX0=