@wertzui/ngx-restworld-client 14.0.0 → 14.1.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.
@@ -8,10 +8,73 @@ import * as i0 from "@angular/core";
8
8
  import * as i1 from "./settings.service";
9
9
  export class OpenTelemetryService {
10
10
  _settingsService;
11
+ _defaultInputConfigs = {
12
+ "@opentelemetry/instrumentation-xml-http-request": {
13
+ propagateTraceHeaderCorsUrls: /.*/,
14
+ applyCustomAttributesOnSpan: (span, xhr) => {
15
+ span.setAttribute("client.address", window.location.href);
16
+ span.setAttribute("client.port", window.location.port);
17
+ span.setAttribute("browser.language", navigator.language);
18
+ if (URL.canParse(xhr.responseURL)) {
19
+ const url = new URL(xhr.responseURL);
20
+ span.setAttribute("url.domain", url.hostname);
21
+ span.setAttribute("url.full", url.href);
22
+ span.setAttribute("url.path", url.pathname);
23
+ span.setAttribute("url.port", url.port);
24
+ span.setAttribute("url.scheme", url.protocol.replace(":", ""));
25
+ if (url.search)
26
+ span.setAttribute("url.query", url.search.replace("?", ""));
27
+ if ("name" in span && typeof span.name === "string") {
28
+ span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
29
+ }
30
+ }
31
+ }
32
+ },
33
+ "@opentelemetry/instrumentation-fetch": {
34
+ propagateTraceHeaderCorsUrls: /.*/,
35
+ applyCustomAttributesOnSpan: (span, request) => {
36
+ span.setAttribute("client.address", window.location.href);
37
+ span.setAttribute("client.port", window.location.port);
38
+ span.setAttribute("browser.language", navigator.language);
39
+ if ("url" in request && typeof request.url === "string" && URL.canParse(request.url)) {
40
+ const url = new URL(request.url);
41
+ span.setAttribute("url.domain", url.hostname);
42
+ span.setAttribute("url.full", url.href);
43
+ span.setAttribute("url.path", url.pathname);
44
+ span.setAttribute("url.port", url.port);
45
+ span.setAttribute("url.scheme", url.protocol.replace(":", ""));
46
+ if (url.search)
47
+ span.setAttribute("url.query", url.search.replace("?", ""));
48
+ if ("name" in span && typeof span.name === "string") {
49
+ span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
50
+ }
51
+ }
52
+ }
53
+ },
54
+ "@opentelemetry/instrumentation-user-interaction": {
55
+ enabled: false,
56
+ shouldPreventSpanCreation: (eventType, element, span) => {
57
+ const shouldCreate = this._lastLocation !== window.location.href ||
58
+ Date.now() - this._lastTime > 1000 ||
59
+ this._lastElement !== element ||
60
+ //(eventType === "click" && (element.tagName === "A" || element.tagName === "Button")) ||
61
+ (eventType === "submit");
62
+ if (shouldCreate) {
63
+ this._lastLocation = window.location.href;
64
+ this._lastTime = Date.now();
65
+ this._lastElement = element;
66
+ }
67
+ return !shouldCreate;
68
+ }
69
+ }
70
+ };
71
+ _lastElement = null;
72
+ _lastTime = 0;
73
+ _lastLocation = null;
11
74
  constructor(_settingsService) {
12
75
  this._settingsService = _settingsService;
13
76
  }
14
- async initialize() {
77
+ async initialize(configureOptions) {
15
78
  await this._settingsService.ensureInitialized();
16
79
  const clientSettings = this._settingsService.settings;
17
80
  if (!clientSettings)
@@ -35,8 +98,9 @@ export class OpenTelemetryService {
35
98
  return [key, value];
36
99
  }));
37
100
  }
101
+ const traceExporterEndpoint = exporterEndpoint.endsWith("/") ? exporterEndpoint + "v1/traces" : exporterEndpoint + "/v1/traces";
38
102
  const otlpExporterConfiguration = {
39
- url: exporterEndpoint,
103
+ url: traceExporterEndpoint,
40
104
  headers: headersObj,
41
105
  compression: "gzip",
42
106
  };
@@ -56,11 +120,22 @@ export class OpenTelemetryService {
56
120
  }
57
121
  if (serviceName)
58
122
  provider.resource.attributes['service.name'] = serviceName;
123
+ // apply given options
124
+ let config;
125
+ if (typeof configureOptions === 'function') {
126
+ config = configureOptions(this._defaultInputConfigs);
127
+ }
128
+ else if (typeof configureOptions === 'object') {
129
+ config = configureOptions;
130
+ }
131
+ else {
132
+ config = this._defaultInputConfigs;
133
+ }
59
134
  // Registering instrumentations
60
135
  registerInstrumentations({
61
136
  instrumentations: [
62
- getWebAutoInstrumentations()
63
- ],
137
+ getWebAutoInstrumentations(config),
138
+ ]
64
139
  });
65
140
  }
66
141
  static GetSampler(tracesSampler, tracesSamplerArg) {
@@ -92,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
92
167
  providedIn: "root"
93
168
  }]
94
169
  }], ctorParameters: () => [{ type: i1.SettingsService }] });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRlbGVtZXRyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9zZXJ2aWNlcy9vcGVudGVsZW1ldHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaE4sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7OztBQU01RSxNQUFNLE9BQU8sb0JBQW9CO0lBQ0Y7SUFBN0IsWUFBNkIsZ0JBQWlDO1FBQWpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUVoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUVsRCxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNsRixNQUFNLGVBQWUsR0FBRyxjQUFjLENB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WUFDN0MsS0FBSyx1QkFBdUI7Z0JBQzFCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNqRSxLQUFLLHdCQUF3QjtnQkFDM0IsT0FBTyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsS0FBSywwQkFBMEI7Z0JBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRjtnQkFDRSxPQUFPLElBQUksZUFBZSxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO3VHQXZGVSxvQkFBb0I7MkdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XHJcbmltcG9ydCB7IEFsd2F5c09mZlNhbXBsZXIsIEFsd2F5c09uU2FtcGxlciwgQmF0Y2hTcGFuUHJvY2Vzc29yLCBDb25zb2xlU3BhbkV4cG9ydGVyLCBQYXJlbnRCYXNlZFNhbXBsZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciwgV2ViVHJhY2VyUHJvdmlkZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2Utd2ViJztcclxuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSBcIi4vc2V0dGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQgeyBab25lQ29udGV4dE1hbmFnZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvY29udGV4dC16b25lXCI7XHJcbmltcG9ydCB7IGdldFdlYkF1dG9JbnN0cnVtZW50YXRpb25zIH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2F1dG8taW5zdHJ1bWVudGF0aW9ucy13ZWJcIjtcclxuaW1wb3J0IHsgT1RMUFRyYWNlRXhwb3J0ZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItdHJhY2Utb3RscC1odHRwXCI7XHJcbmltcG9ydCB7IENvbXByZXNzaW9uQWxnb3JpdGhtIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvb3RscC1leHBvcnRlci1iYXNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgT3BlblRlbGVtZXRyeVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLmVuc3VyZUluaXRpYWxpemVkKCk7XHJcblxyXG4gICAgY29uc3QgY2xpZW50U2V0dGluZ3MgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3M7XHJcbiAgICBpZiAoIWNsaWVudFNldHRpbmdzKVxyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NldHRpbmdzIGFyZSBub3QgbG9hZGVkIHlldC4nKTtcclxuXHJcbiAgICBjb25zdCBleHBvcnRlckVuZHBvaW50ID0gY2xpZW50U2V0dGluZ3MuZXh0ZW5zaW9uc1tcIk9URUxfRVhQT1JURVJfT1RMUF9FTkRQT0lOVFwiXTtcclxuICAgIGNvbnN0IGV4cG9ydGVySGVhZGVycyA9IGNsaWVudFNldHRpbmdzLmV4dGVuc2lvbnNbXCJPVEVMX0VYUE9SVEVSX09UTFBfSEVBREVSU1wiXTtcclxuICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gY2xpZW50U2V0dGluZ3MuZXh0ZW5zaW9uc1tcIk9URUxfU0VSVklDRV9OQU1FXCJdO1xyXG4gICAgY29uc3QgcmVzb3VyY2VBdHRyaWJ1dGVzID0gY2xpZW50U2V0dGluZ3MuZXh0ZW5zaW9uc1tcIk9URUxfUkVTT1VSQ0VfQVRUUklCVVRFU1wiXTtcclxuICAgIGNvbnN0IHRyYWNlc1NhbXBsZXIgPSBjbGllbnRTZXR0aW5ncy5leHRlbnNpb25zW1wiT1RFTF9UUkFDRVNfU0FNUExFUlwiXTtcclxuICAgIGNvbnN0IHRyYWNlc1NhbXBsZXJBcmcgPSBjbGllbnRTZXR0aW5ncy5leHRlbnNpb25zW1wiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkdcIl07XHJcblxyXG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgV2ViVHJhY2VyUHJvdmlkZXIoeyBzYW1wbGVyOiBPcGVuVGVsZW1ldHJ5U2VydmljZS5HZXRTYW1wbGVyKHRyYWNlc1NhbXBsZXIsIHRyYWNlc1NhbXBsZXJBcmcpIH0pO1xyXG5cclxuICAgIGlmICghZXhwb3J0ZXJFbmRwb2ludClcclxuICAgICAgcHJvdmlkZXIuYWRkU3BhblByb2Nlc3NvcihuZXcgU2ltcGxlU3BhblByb2Nlc3NvcihuZXcgQ29uc29sZVNwYW5FeHBvcnRlcigpKSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGhlYWRlcnNPYmogPSB7fTtcclxuICAgICAgaWYgKGV4cG9ydGVySGVhZGVycykge1xyXG4gICAgICAgIGhlYWRlcnNPYmogPSBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICAgICAgICBleHBvcnRlckhlYWRlcnNcclxuICAgICAgICAgICAgLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgICAgICAubWFwKChoZWFkZXI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGhlYWRlci5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFtrZXksIHZhbHVlXTtcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBvdGxwRXhwb3J0ZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgIHVybDogZXhwb3J0ZXJFbmRwb2ludCxcclxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzT2JqLFxyXG4gICAgICAgIGNvbXByZXNzaW9uOiBcImd6aXBcIiBhcyBDb21wcmVzc2lvbkFsZ29yaXRobSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHByb3ZpZGVyLmFkZFNwYW5Qcm9jZXNzb3IobmV3IEJhdGNoU3BhblByb2Nlc3NvcihuZXcgT1RMUFRyYWNlRXhwb3J0ZXIob3RscEV4cG9ydGVyQ29uZmlndXJhdGlvbikpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm92aWRlci5yZWdpc3Rlcih7XHJcbiAgICAgIC8vIENoYW5naW5nIGRlZmF1bHQgY29udGV4dE1hbmFnZXIgdG8gdXNlIFpvbmVDb250ZXh0TWFuYWdlciAtIHN1cHBvcnRzIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIC0gb3B0aW9uYWxcclxuICAgICAgY29udGV4dE1hbmFnZXI6IG5ldyBab25lQ29udGV4dE1hbmFnZXIoKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChyZXNvdXJjZUF0dHJpYnV0ZXMpIHtcclxuICAgICAgcmVzb3VyY2VBdHRyaWJ1dGVzXHJcbiAgICAgICAgLnNwbGl0KFwiLFwiKVxyXG4gICAgICAgIC5tYXAoKGF0dHJpYnV0ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhdHRyaWJ1dGUuc3BsaXQoXCI9XCIpO1xyXG4gICAgICAgICAgcHJvdmlkZXIucmVzb3VyY2UuYXR0cmlidXRlc1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNlcnZpY2VOYW1lKVxyXG4gICAgICBwcm92aWRlci5yZXNvdXJjZS5hdHRyaWJ1dGVzWydzZXJ2aWNlLm5hbWUnXSA9IHNlcnZpY2VOYW1lO1xyXG5cclxuICAgIC8vIFJlZ2lzdGVyaW5nIGluc3RydW1lbnRhdGlvbnNcclxuICAgIHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyh7XHJcbiAgICAgIGluc3RydW1lbnRhdGlvbnM6IFtcclxuICAgICAgICBnZXRXZWJBdXRvSW5zdHJ1bWVudGF0aW9ucygpXHJcbiAgICAgIF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIEdldFNhbXBsZXIodHJhY2VzU2FtcGxlcj86IHN0cmluZywgdHJhY2VzU2FtcGxlckFyZz86IHN0cmluZykge1xyXG4gICAgc3dpdGNoICh0cmFjZXNTYW1wbGVyKSB7XHJcbiAgICAgIGNhc2UgXCJhbHdheXNfb25cIjpcclxuICAgICAgICByZXR1cm4gbmV3IEFsd2F5c09uU2FtcGxlcigpO1xyXG4gICAgICBjYXNlIFwiYWx3YXlzX29mZlwiOlxyXG4gICAgICAgIHJldHVybiBuZXcgQWx3YXlzT2ZmU2FtcGxlcigpO1xyXG4gICAgICBjYXNlIFwidHJhY2VpZHJhdGlvXCI6XHJcbiAgICAgICAgY29uc3QgcmF0aW8gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFjZXNTYW1wbGVyQXJnID8/IFwiMVwiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlcihyYXRpbyk7XHJcbiAgICAgIGNhc2UgXCJwYXJlbnRiYXNlZF9hbHdheXNfb25cIjpcclxuICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcih7IHJvb3Q6IG5ldyBBbHdheXNPblNhbXBsZXIoKSB9KTtcclxuICAgICAgY2FzZSBcInBhcmVudGJhc2VkX2Fsd2F5c19vZmZcIjpcclxuICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcih7IHJvb3Q6IG5ldyBBbHdheXNPZmZTYW1wbGVyKCkgfSk7XHJcbiAgICAgIGNhc2UgXCJwYXJlbnRiYXNlZF90cmFjZWlkcmF0aW9cIjpcclxuICAgICAgICBjb25zdCByYXRpbzIgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFjZXNTYW1wbGVyQXJnID8/IFwiMVwiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFBhcmVudEJhc2VkU2FtcGxlcih7IHJvb3Q6IG5ldyBUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIocmF0aW8yKSB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbmV3IEFsd2F5c09uU2FtcGxlcigpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbnRlbGVtZXRyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlc3R3b3JsZC1jbGllbnQvc3JjL2xpYi9zZXJ2aWNlcy9vcGVudGVsZW1ldHJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLHdCQUF3QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFaE4sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUE0QiwwQkFBMEIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFPNUUsTUFBTSxPQUFPLG9CQUFvQjtJQXdFRjtJQXRFWixvQkFBb0IsR0FBNkI7UUFDaEUsaURBQWlELEVBQUU7WUFDakQsNEJBQTRCLEVBQUUsSUFBSTtZQUNsQywyQkFBMkIsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUQsSUFBSSxHQUFH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LElBQUksZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsS0FBSywwQkFBMEI7Z0JBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQzFELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRjtnQkFDRSxPQUFPLElBQUksZUFBZSxFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO3VHQTVLVSxvQkFBb0I7MkdBQXBCLG9CQUFvQixjQUZuQixNQUFNOzsyRkFFUCxvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IHJlZ2lzdGVySW5zdHJ1bWVudGF0aW9ucyB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbic7XHJcbmltcG9ydCB7IEFsd2F5c09mZlNhbXBsZXIsIEFsd2F5c09uU2FtcGxlciwgQmF0Y2hTcGFuUHJvY2Vzc29yLCBDb25zb2xlU3BhbkV4cG9ydGVyLCBQYXJlbnRCYXNlZFNhbXBsZXIsIFNpbXBsZVNwYW5Qcm9jZXNzb3IsIFRyYWNlSWRSYXRpb0Jhc2VkU2FtcGxlciwgV2ViVHJhY2VyUHJvdmlkZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZGstdHJhY2Utd2ViJztcclxuaW1wb3J0IHsgU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSBcIi4vc2V0dGluZ3Muc2VydmljZVwiO1xyXG5pbXBvcnQgeyBab25lQ29udGV4dE1hbmFnZXIgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvY29udGV4dC16b25lXCI7XHJcbmltcG9ydCB7IEluc3RydW1lbnRhdGlvbkNvbmZpZ01hcCwgZ2V0V2ViQXV0b0luc3RydW1lbnRhdGlvbnMgfSBmcm9tIFwiQG9wZW50ZWxlbWV0cnkvYXV0by1pbnN0cnVtZW50YXRpb25zLXdlYlwiO1xyXG5pbXBvcnQgeyBPVExQVHJhY2VFeHBvcnRlciB9IGZyb20gXCJAb3BlbnRlbGVtZXRyeS9leHBvcnRlci10cmFjZS1vdGxwLWh0dHBcIjtcclxuaW1wb3J0IHsgQ29tcHJlc3Npb25BbGdvcml0aG0gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9vdGxwLWV4cG9ydGVyLWJhc2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0LCBDb250ZXh0TWFuYWdlciwgUk9PVF9DT05URVhULCBjcmVhdGVDb250ZXh0S2V5IH0gZnJvbSBcIkBvcGVudGVsZW1ldHJ5L2FwaVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPcGVuVGVsZW1ldHJ5U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRJbnB1dENvbmZpZ3M6IEluc3RydW1lbnRhdGlvbkNvbmZpZ01hcCA9IHtcclxuICAgIFwiQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLXhtbC1odHRwLXJlcXVlc3RcIjoge1xyXG4gICAgICBwcm9wYWdhdGVUcmFjZUhlYWRlckNvcnNVcmxzOiAvLiovLFxyXG4gICAgICBhcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW46IChzcGFuLCB4aHIpID0+IHtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImNsaWVudC5hZGRyZXNzXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImNsaWVudC5wb3J0XCIsIHdpbmRvdy5sb2NhdGlvbi5wb3J0KTtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImJyb3dzZXIubGFuZ3VhZ2VcIiwgbmF2aWdhdG9yLmxhbmd1YWdlKTtcclxuICAgICAgICBpZiAoVVJMLmNhblBhcnNlKHhoci5yZXNwb25zZVVSTCkpIHtcclxuICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoeGhyLnJlc3BvbnNlVVJMKTtcclxuICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLmRvbWFpblwiLCB1cmwuaG9zdG5hbWUpO1xyXG4gICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJ1cmwuZnVsbFwiLCB1cmwuaHJlZik7XHJcbiAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInVybC5wYXRoXCIsIHVybC5wYXRobmFtZSk7XHJcbiAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInVybC5wb3J0XCIsIHVybC5wb3J0KTtcclxuICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLnNjaGVtZVwiLCB1cmwucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIikpO1xyXG4gICAgICAgICAgaWYgKHVybC5zZWFyY2gpXHJcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLnF1ZXJ5XCIsIHVybC5zZWFyY2gucmVwbGFjZShcIj9cIiwgXCJcIikpO1xyXG5cclxuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBzcGFuICYmIHR5cGVvZiBzcGFuLm5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgc3Bhbi51cGRhdGVOYW1lKHNwYW4ubmFtZSArIFwiIFwiICsgKHVybC5wYXRobmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IHVybC5wYXRobmFtZS5zdWJzdHJpbmcoMSkgOiB1cmwucGF0aG5hbWUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi1mZXRjaFwiOiB7XHJcbiAgICAgIHByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHM6IC8uKi8sXHJcbiAgICAgIGFwcGx5Q3VzdG9tQXR0cmlidXRlc09uU3BhbjogKHNwYW4sIHJlcXVlc3QpID0+IHtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImNsaWVudC5hZGRyZXNzXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImNsaWVudC5wb3J0XCIsIHdpbmRvdy5sb2NhdGlvbi5wb3J0KTtcclxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcImJyb3dzZXIubGFuZ3VhZ2VcIiwgbmF2aWdhdG9yLmxhbmd1YWdlKTtcclxuICAgICAgICBpZiAoXCJ1cmxcIiBpbiByZXF1ZXN0ICYmIHR5cGVvZiByZXF1ZXN0LnVybCA9PT0gXCJzdHJpbmdcIiAmJiBVUkwuY2FuUGFyc2UocmVxdWVzdC51cmwpKSB7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcclxuICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLmRvbWFpblwiLCB1cmwuaG9zdG5hbWUpO1xyXG4gICAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoXCJ1cmwuZnVsbFwiLCB1cmwuaHJlZik7XHJcbiAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInVybC5wYXRoXCIsIHVybC5wYXRobmFtZSk7XHJcbiAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShcInVybC5wb3J0XCIsIHVybC5wb3J0KTtcclxuICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLnNjaGVtZVwiLCB1cmwucHJvdG9jb2wucmVwbGFjZShcIjpcIiwgXCJcIikpO1xyXG4gICAgICAgICAgaWYgKHVybC5zZWFyY2gpXHJcbiAgICAgICAgICAgIHNwYW4uc2V0QXR0cmlidXRlKFwidXJsLnF1ZXJ5XCIsIHVybC5zZWFyY2gucmVwbGFjZShcIj9cIiwgXCJcIikpO1xyXG5cclxuICAgICAgICAgIGlmIChcIm5hbWVcIiBpbiBzcGFuICYmIHR5cGVvZiBzcGFuLm5hbWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgc3Bhbi51cGRhdGVOYW1lKHNwYW4ubmFtZSArIFwiIFwiICsgKHVybC5wYXRobmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IHVybC5wYXRobmFtZS5zdWJzdHJpbmcoMSkgOiB1cmwucGF0aG5hbWUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcIkBvcGVudGVsZW1ldHJ5L2luc3RydW1lbnRhdGlvbi11c2VyLWludGVyYWN0aW9uXCI6IHtcclxuICAgICAgZW5hYmxlZDogZmFsc2UsXHJcbiAgICAgIHNob3VsZFByZXZlbnRTcGFuQ3JlYXRpb246IChldmVudFR5cGUsIGVsZW1lbnQsIHNwYW4pID0+IHtcclxuICAgICAgICBjb25zdCBzaG91bGRDcmVhdGUgPVxyXG4gICAgICAgICAgdGhpcy5fbGFzdExvY2F0aW9uICE9PSB3aW5kb3cubG9jYXRpb24uaHJlZiB8fFxyXG4gICAgICAgICAgRGF0ZS5ub3coKSAtIHRoaXMuX2xhc3RUaW1lID4gMTAwMCB8fFxyXG4gICAgICAgICAgdGhpcy5fbGFzdEVsZW1lbnQgIT09IGVsZW1lbnQgfHxcclxuICAgICAgICAgIC8vKGV2ZW50VHlwZSA9PT0gXCJjbGlja1wiICYmIChlbGVtZW50LnRhZ05hbWUgPT09IFwiQVwiIHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gXCJCdXR0b25cIikpIHx8XHJcbiAgICAgICAgICAoZXZlbnRUeXBlID09PSBcInN1Ym1pdFwiKTtcclxuXHJcbiAgICAgICAgaWYgKHNob3VsZENyZWF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5fbGFzdExvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0VGltZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICB0aGlzLl9sYXN0RWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gIXNob3VsZENyZWF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX2xhc3RFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhc3RUaW1lOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgX2xhc3RMb2NhdGlvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX3NldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0aWFsaXplKGNvbmZpZ3VyZU9wdGlvbnM/OiBJbnN0cnVtZW50YXRpb25Db25maWdNYXAgfCAoKGlucHV0Q29uZmlnczogSW5zdHJ1bWVudGF0aW9uQ29uZmlnTWFwKSA9PiBJbnN0cnVtZW50YXRpb25Db25maWdNYXApKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLl9zZXR0aW5nc1NlcnZpY2UuZW5zdXJlSW5pdGlhbGl6ZWQoKTtcclxuXHJcbiAgICBjb25zdCBjbGllbnRTZXR0aW5ncyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncztcclxuICAgIGlmICghY2xpZW50U2V0dGluZ3MpXHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2V0dGluZ3MgYXJlIG5vdCBsb2FkZWQgeWV0LicpO1xyXG5cclxuICAgIGNvbnN0IGV4cG9ydGVyRW5kcG9pbnQgPSBjbGllbnRTZXR0aW5ncy5leHRlbnNpb25zW1wiT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UXCJdO1xyXG4gICAgY29uc3QgZXhwb3J0ZXJIZWFkZXJzID0gY2xpZW50U2V0dGluZ3MuZXh0ZW5zaW9uc1tcIk9URUxfRVhQT1JURVJfT1RMUF9IRUFERVJTXCJdO1xyXG4gICAgY29uc3Qgc2VydmljZU5hbWUgPSBjbGllbnRTZXR0aW5ncy5leHRlbnNpb25zW1wiT1RFTF9TRVJWSUNFX05BTUVcIl07XHJcbiAgICBjb25zdCByZXNvdXJjZUF0dHJpYnV0ZXMgPSBjbGllbnRTZXR0aW5ncy5leHRlbnNpb25zW1wiT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTXCJdO1xyXG4gICAgY29uc3QgdHJhY2VzU2FtcGxlciA9IGNsaWVudFNldHRpbmdzLmV4dGVuc2lvbnNbXCJPVEVMX1RSQUNFU19TQU1QTEVSXCJdO1xyXG4gICAgY29uc3QgdHJhY2VzU2FtcGxlckFyZyA9IGNsaWVudFNldHRpbmdzLmV4dGVuc2lvbnNbXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSR1wiXTtcclxuXHJcbiAgICBjb25zdCBwcm92aWRlciA9IG5ldyBXZWJUcmFjZXJQcm92aWRlcih7IHNhbXBsZXI6IE9wZW5UZWxlbWV0cnlTZXJ2aWNlLkdldFNhbXBsZXIodHJhY2VzU2FtcGxlciwgdHJhY2VzU2FtcGxlckFyZykgfSk7XHJcblxyXG4gICAgaWYgKCFleHBvcnRlckVuZHBvaW50KVxyXG4gICAgICBwcm92aWRlci5hZGRTcGFuUHJvY2Vzc29yKG5ldyBTaW1wbGVTcGFuUHJvY2Vzc29yKG5ldyBDb25zb2xlU3BhbkV4cG9ydGVyKCkpKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgaGVhZGVyc09iaiA9IHt9O1xyXG4gICAgICBpZiAoZXhwb3J0ZXJIZWFkZXJzKSB7XHJcbiAgICAgICAgaGVhZGVyc09iaiA9IE9iamVjdC5mcm9tRW50cmllcyhcclxuICAgICAgICAgIGV4cG9ydGVySGVhZGVyc1xyXG4gICAgICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgICAgIC5tYXAoKGhlYWRlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KFwiPVwiKTtcclxuICAgICAgICAgICAgICByZXR1cm4gW2tleSwgdmFsdWVdO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRyYWNlRXhwb3J0ZXJFbmRwb2ludCA9IGV4cG9ydGVyRW5kcG9pbnQuZW5kc1dpdGgoXCIvXCIpID8gZXhwb3J0ZXJFbmRwb2ludCArIFwidjEvdHJhY2VzXCIgOiBleHBvcnRlckVuZHBvaW50ICsgXCIvdjEvdHJhY2VzXCI7XHJcblxyXG4gICAgICBjb25zdCBvdGxwRXhwb3J0ZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgIHVybDogdHJhY2VFeHBvcnRlckVuZHBvaW50LFxyXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnNPYmosXHJcbiAgICAgICAgY29tcHJlc3Npb246IFwiZ3ppcFwiIGFzIENvbXByZXNzaW9uQWxnb3JpdGhtLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgcHJvdmlkZXIuYWRkU3BhblByb2Nlc3NvcihuZXcgQmF0Y2hTcGFuUHJvY2Vzc29yKG5ldyBPVExQVHJhY2VFeHBvcnRlcihvdGxwRXhwb3J0ZXJDb25maWd1cmF0aW9uKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3ZpZGVyLnJlZ2lzdGVyKHtcclxuICAgICAgLy8gQ2hhbmdpbmcgZGVmYXVsdCBjb250ZXh0TWFuYWdlciB0byB1c2UgWm9uZUNvbnRleHRNYW5hZ2VyIC0gc3VwcG9ydHMgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgLSBvcHRpb25hbFxyXG4gICAgICBjb250ZXh0TWFuYWdlcjogbmV3IFpvbmVDb250ZXh0TWFuYWdlcigpLFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHJlc291cmNlQXR0cmlidXRlcykge1xyXG4gICAgICByZXNvdXJjZUF0dHJpYnV0ZXNcclxuICAgICAgICAuc3BsaXQoXCIsXCIpXHJcbiAgICAgICAgLm1hcCgoYXR0cmlidXRlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGF0dHJpYnV0ZS5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICBwcm92aWRlci5yZXNvdXJjZS5hdHRyaWJ1dGVzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2VydmljZU5hbWUpXHJcbiAgICAgIHByb3ZpZGVyLnJlc291cmNlLmF0dHJpYnV0ZXNbJ3NlcnZpY2UubmFtZSddID0gc2VydmljZU5hbWU7XHJcblxyXG4gICAgLy8gYXBwbHkgZ2l2ZW4gb3B0aW9uc1xyXG4gICAgbGV0IGNvbmZpZztcclxuICAgIGlmICh0eXBlb2YgY29uZmlndXJlT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25maWcgPSBjb25maWd1cmVPcHRpb25zKHRoaXMuX2RlZmF1bHRJbnB1dENvbmZpZ3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbmZpZ3VyZU9wdGlvbnMgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ3VyZU9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uZmlnID0gdGhpcy5fZGVmYXVsdElucHV0Q29uZmlncztcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZWdpc3RlcmluZyBpbnN0cnVtZW50YXRpb25zXHJcbiAgICByZWdpc3Rlckluc3RydW1lbnRhdGlvbnMoe1xyXG4gICAgICBpbnN0cnVtZW50YXRpb25zOiBbXHJcbiAgICAgICAgZ2V0V2ViQXV0b0luc3RydW1lbnRhdGlvbnMoY29uZmlnKSxcclxuICAgICAgXVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBHZXRTYW1wbGVyKHRyYWNlc1NhbXBsZXI/OiBzdHJpbmcsIHRyYWNlc1NhbXBsZXJBcmc/OiBzdHJpbmcpIHtcclxuICAgIHN3aXRjaCAodHJhY2VzU2FtcGxlcikge1xyXG4gICAgICBjYXNlIFwiYWx3YXlzX29uXCI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBbHdheXNPblNhbXBsZXIoKTtcclxuICAgICAgY2FzZSBcImFsd2F5c19vZmZcIjpcclxuICAgICAgICByZXR1cm4gbmV3IEFsd2F5c09mZlNhbXBsZXIoKTtcclxuICAgICAgY2FzZSBcInRyYWNlaWRyYXRpb1wiOlxyXG4gICAgICAgIGNvbnN0IHJhdGlvID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhY2VzU2FtcGxlckFyZyA/PyBcIjFcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBUcmFjZUlkUmF0aW9CYXNlZFNhbXBsZXIocmF0aW8pO1xyXG4gICAgICBjYXNlIFwicGFyZW50YmFzZWRfYWx3YXlzX29uXCI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXIoeyByb290OiBuZXcgQWx3YXlzT25TYW1wbGVyKCkgfSk7XHJcbiAgICAgIGNhc2UgXCJwYXJlbnRiYXNlZF9hbHdheXNfb2ZmXCI6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXIoeyByb290OiBuZXcgQWx3YXlzT2ZmU2FtcGxlcigpIH0pO1xyXG4gICAgICBjYXNlIFwicGFyZW50YmFzZWRfdHJhY2VpZHJhdGlvXCI6XHJcbiAgICAgICAgY29uc3QgcmF0aW8yID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhY2VzU2FtcGxlckFyZyA/PyBcIjFcIik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQYXJlbnRCYXNlZFNhbXBsZXIoeyByb290OiBuZXcgVHJhY2VJZFJhdGlvQmFzZWRTYW1wbGVyKHJhdGlvMikgfSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBbHdheXNPblNhbXBsZXIoKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -3339,10 +3339,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
3339
3339
 
3340
3340
  class OpenTelemetryService {
3341
3341
  _settingsService;
3342
+ _defaultInputConfigs = {
3343
+ "@opentelemetry/instrumentation-xml-http-request": {
3344
+ propagateTraceHeaderCorsUrls: /.*/,
3345
+ applyCustomAttributesOnSpan: (span, xhr) => {
3346
+ span.setAttribute("client.address", window.location.href);
3347
+ span.setAttribute("client.port", window.location.port);
3348
+ span.setAttribute("browser.language", navigator.language);
3349
+ if (URL.canParse(xhr.responseURL)) {
3350
+ const url = new URL(xhr.responseURL);
3351
+ span.setAttribute("url.domain", url.hostname);
3352
+ span.setAttribute("url.full", url.href);
3353
+ span.setAttribute("url.path", url.pathname);
3354
+ span.setAttribute("url.port", url.port);
3355
+ span.setAttribute("url.scheme", url.protocol.replace(":", ""));
3356
+ if (url.search)
3357
+ span.setAttribute("url.query", url.search.replace("?", ""));
3358
+ if ("name" in span && typeof span.name === "string") {
3359
+ span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
3360
+ }
3361
+ }
3362
+ }
3363
+ },
3364
+ "@opentelemetry/instrumentation-fetch": {
3365
+ propagateTraceHeaderCorsUrls: /.*/,
3366
+ applyCustomAttributesOnSpan: (span, request) => {
3367
+ span.setAttribute("client.address", window.location.href);
3368
+ span.setAttribute("client.port", window.location.port);
3369
+ span.setAttribute("browser.language", navigator.language);
3370
+ if ("url" in request && typeof request.url === "string" && URL.canParse(request.url)) {
3371
+ const url = new URL(request.url);
3372
+ span.setAttribute("url.domain", url.hostname);
3373
+ span.setAttribute("url.full", url.href);
3374
+ span.setAttribute("url.path", url.pathname);
3375
+ span.setAttribute("url.port", url.port);
3376
+ span.setAttribute("url.scheme", url.protocol.replace(":", ""));
3377
+ if (url.search)
3378
+ span.setAttribute("url.query", url.search.replace("?", ""));
3379
+ if ("name" in span && typeof span.name === "string") {
3380
+ span.updateName(span.name + " " + (url.pathname.startsWith("/") ? url.pathname.substring(1) : url.pathname));
3381
+ }
3382
+ }
3383
+ }
3384
+ },
3385
+ "@opentelemetry/instrumentation-user-interaction": {
3386
+ enabled: false,
3387
+ shouldPreventSpanCreation: (eventType, element, span) => {
3388
+ const shouldCreate = this._lastLocation !== window.location.href ||
3389
+ Date.now() - this._lastTime > 1000 ||
3390
+ this._lastElement !== element ||
3391
+ //(eventType === "click" && (element.tagName === "A" || element.tagName === "Button")) ||
3392
+ (eventType === "submit");
3393
+ if (shouldCreate) {
3394
+ this._lastLocation = window.location.href;
3395
+ this._lastTime = Date.now();
3396
+ this._lastElement = element;
3397
+ }
3398
+ return !shouldCreate;
3399
+ }
3400
+ }
3401
+ };
3402
+ _lastElement = null;
3403
+ _lastTime = 0;
3404
+ _lastLocation = null;
3342
3405
  constructor(_settingsService) {
3343
3406
  this._settingsService = _settingsService;
3344
3407
  }
3345
- async initialize() {
3408
+ async initialize(configureOptions) {
3346
3409
  await this._settingsService.ensureInitialized();
3347
3410
  const clientSettings = this._settingsService.settings;
3348
3411
  if (!clientSettings)
@@ -3366,8 +3429,9 @@ class OpenTelemetryService {
3366
3429
  return [key, value];
3367
3430
  }));
3368
3431
  }
3432
+ const traceExporterEndpoint = exporterEndpoint.endsWith("/") ? exporterEndpoint + "v1/traces" : exporterEndpoint + "/v1/traces";
3369
3433
  const otlpExporterConfiguration = {
3370
- url: exporterEndpoint,
3434
+ url: traceExporterEndpoint,
3371
3435
  headers: headersObj,
3372
3436
  compression: "gzip",
3373
3437
  };
@@ -3387,11 +3451,22 @@ class OpenTelemetryService {
3387
3451
  }
3388
3452
  if (serviceName)
3389
3453
  provider.resource.attributes['service.name'] = serviceName;
3454
+ // apply given options
3455
+ let config;
3456
+ if (typeof configureOptions === 'function') {
3457
+ config = configureOptions(this._defaultInputConfigs);
3458
+ }
3459
+ else if (typeof configureOptions === 'object') {
3460
+ config = configureOptions;
3461
+ }
3462
+ else {
3463
+ config = this._defaultInputConfigs;
3464
+ }
3390
3465
  // Registering instrumentations
3391
3466
  registerInstrumentations({
3392
3467
  instrumentations: [
3393
- getWebAutoInstrumentations()
3394
- ],
3468
+ getWebAutoInstrumentations(config),
3469
+ ]
3395
3470
  });
3396
3471
  }
3397
3472
  static GetSampler(tracesSampler, tracesSamplerArg) {