@mecanizou/telemetry-hub 1.3.3 → 1.3.5
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/CHANGELOG.md +14 -0
- package/dist/core/logger.js +9 -1
- package/dist/sst/middy/middleware.d.ts +2 -2
- package/dist/sst/middy/middleware.js +128 -59
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## [1.3.5](https://github.com/mecanizou-eco/telemetry-hub/compare/v1.3.4...v1.3.5) (2026-01-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* ajust scope attr ([312b46f](https://github.com/mecanizou-eco/telemetry-hub/commit/312b46f79cfdd443238709310f42967efc68a8b4))
|
|
7
|
+
|
|
8
|
+
## [1.3.4](https://github.com/mecanizou-eco/telemetry-hub/compare/v1.3.3...v1.3.4) (2026-01-21)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* ajust pass params to logger ([89fb843](https://github.com/mecanizou-eco/telemetry-hub/commit/89fb843cae8371686e3b64741afe71a74e789754))
|
|
14
|
+
|
|
1
15
|
## [1.3.3](https://github.com/mecanizou-eco/telemetry-hub/compare/v1.3.2...v1.3.3) (2026-01-21)
|
|
2
16
|
|
|
3
17
|
|
package/dist/core/logger.js
CHANGED
|
@@ -26,6 +26,8 @@ class StandardLogger {
|
|
|
26
26
|
'span.id': this.spanContext.spanContext().spanId,
|
|
27
27
|
'function.name': (scopeAttributes === null || scopeAttributes === void 0 ? void 0 : scopeAttributes['function.name']) || 'unknown-function',
|
|
28
28
|
'function.invocation_id': (scopeAttributes === null || scopeAttributes === void 0 ? void 0 : scopeAttributes['function.invocation_id']) || 'unknown-invocation-id',
|
|
29
|
+
'request.id': (scopeAttributes === null || scopeAttributes === void 0 ? void 0 : scopeAttributes['request.id']) || 'unknown-request-id',
|
|
30
|
+
'route.key': (scopeAttributes === null || scopeAttributes === void 0 ? void 0 : scopeAttributes['route.key']) || 'unknown-route-key',
|
|
29
31
|
};
|
|
30
32
|
this.environment = (0, environment_1.getEnvironmentStage)();
|
|
31
33
|
}
|
|
@@ -124,6 +126,12 @@ class StandardLogger {
|
|
|
124
126
|
attributes['origin'] = data.execution.origin;
|
|
125
127
|
if (data.execution.routeKey)
|
|
126
128
|
attributes['route.key'] = data.execution.routeKey;
|
|
129
|
+
if (data.execution.loggedUser) {
|
|
130
|
+
if (data.execution.loggedUser.uid)
|
|
131
|
+
attributes['logged_user.uid'] = data.execution.loggedUser.uid;
|
|
132
|
+
if (data.execution.loggedUser.email)
|
|
133
|
+
attributes['logged_user.email'] = data.execution.loggedUser.email;
|
|
134
|
+
}
|
|
127
135
|
}
|
|
128
136
|
if (data.performance) {
|
|
129
137
|
if (data.performance.durationMs)
|
|
@@ -138,4 +146,4 @@ class StandardLogger {
|
|
|
138
146
|
}
|
|
139
147
|
}
|
|
140
148
|
exports.StandardLogger = StandardLogger;
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFpRTtBQUlqRSwrQ0FBb0Q7QUFZcEQsTUFBYSxjQUFjO0lBUXpCLFlBQ0UsTUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLGVBQTRCO1FBUmIsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQVUzRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDaEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWTtZQUMxQixDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFFdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU87WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTTtZQUNoRCxlQUFlLEVBQUUsQ0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUcsZUFBZSxDQUFDLEtBQUksa0JBQWtCO1lBQ3pFLHdCQUF3QixFQUN0QixDQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRyx3QkFBd0IsQ0FBQyxLQUFJLHVCQUF1QjtTQUN6RSxDQUFDO1FBRUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFBLGlDQUFtQixHQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVLLFFBQVEsQ0FBQyxJQUFlOztZQUM1QixNQUFNLElBQUksQ0FBQyxHQUFHLCtCQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUMxQixJQUFJLEtBQ1AsUUFBUSxFQUFFLE9BQU8sSUFDakIsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxJQUFlOztZQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLCtCQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUMxQixJQUFJLEtBQ1AsUUFBUSxFQUFFLE1BQU0sSUFDaEIsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVLLE9BQU8sQ0FBQyxJQUFlOztZQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLCtCQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUMxQixJQUFJLEtBQ1AsUUFBUSxFQUFFLE1BQU0sSUFDaEIsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVLLFFBQVEsQ0FBQyxJQUFlOztZQUM1QixNQUFNLElBQUksQ0FBQyxHQUFHLCtCQUNaLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQ3BDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUMxQixJQUFJLEtBQ1AsUUFBUSxFQUFFLE9BQU8sSUFDakIsQ0FBQztRQUNMLENBQUM7S0FBQTtJQUVhLEdBQUcsQ0FDZixJQUVDOztZQUVELE1BQU0sUUFBUSxtQ0FDVCxJQUFJLEtBQ1AsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUN4RCxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FDcEMsQ0FBQztZQUVGLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixLQUFLLEVBQUUseUJBQWMsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUseUJBQWMsQ0FBQyxJQUFJO2dCQUN6QixJQUFJLEVBQUUseUJBQWMsQ0FBQyxJQUFJO2dCQUN6QixLQUFLLEVBQUUseUJBQWMsQ0FBQyxLQUFLO2FBQzVCLENBQUM7WUFFRixNQUFNLFNBQVMsR0FBRztnQkFDaEIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUM5QyxZQUFZLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQy9CLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO2FBQzNDLENBQUM7WUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDO0tBQUE7SUFFTyxlQUFlLENBQUMsSUFBcUI7UUFDM0MsTUFBTSxVQUFVLEdBQXdCO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDaEMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDaEQsQ0FBQztRQUdGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzNDLFVBQVUsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNqRCxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3JELENBQUM7UUFHRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO2dCQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNuRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3pFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO2dCQUN0QixVQUFVLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUN4RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztnQkFDbkIsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDaEIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFDbEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFDakIsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFBRSxVQUFVLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2RSxDQUFDO1FBR0QsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRztnQkFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDMUQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xFLENBQUM7UUFHRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUztnQkFDMUIsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO2dCQUM3QixVQUFVLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtnQkFDN0IsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1lBQzVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUN0RSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWTtnQkFDN0IsVUFBVSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7WUFDckUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDO2dCQUM5QyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQztZQUM5QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtnQkFDM0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDNUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQjtnQkFDakMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwRSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtnQkFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDeEUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7Z0JBQ3pCLFVBQVUsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUN0RCxDQUFDO1FBR0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7Z0JBQzdCLFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLFNBQVM7Z0JBQ3hDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQy9ELENBQUM7UUFHRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUdELE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FDdkIsTUFBTSxDQUFDLE9BQU8saUNBQU0sSUFBSSxDQUFDLGlCQUFpQixHQUFLLFVBQVUsRUFBRyxDQUFDLE1BQU0sQ0FDakUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksQ0FDckQsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBL0tELHdDQStLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNldmVyaXR5TnVtYmVyLCBMb2dnZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGktbG9ncyc7XG5pbXBvcnQgeyBJU3RhbmRhcmRMb2dnZXIsIFN0YW5kYXJkTG9nRGF0YSB9IGZyb20gJy4vbG9nZ2VyLXR5cGVzJztcbmltcG9ydCB7IElTdGFuZGFyZFRyYWNlciB9IGZyb20gJy4vdHJhY2VyLXR5cGVzJztcbmltcG9ydCB7IEF0dHJpYnV0ZXMsIFNwYW4gfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGknO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTdGFnZSB9IGZyb20gJy4vZW52aXJvbm1lbnQnO1xuXG5pbnRlcmZhY2UgTG9nUGFyYW1zIGV4dGVuZHMgT21pdDxcbiAgU3RhbmRhcmRMb2dEYXRhLFxuICAnc2V2ZXJpdHknIHwgJ3RpbWVzdGFtcCcgfCAnc2VydmljZU5hbWUnIHwgJ2Vudmlyb25tZW50J1xuPiB7XG4gIGVudmlyb25tZW50PzogU3RhbmRhcmRMb2dEYXRhWydlbnZpcm9ubWVudCddO1xufVxuLyoqXG4gKiBMb2dnZXIgY29yZSBxdWUgaW1wbGVtZW50YSBvIHBhZHLDo28gZGUgbG9ncyBlc3RydXR1cmFkb3MuXG4gKiBSZWNlYmUgdW0gTG9nZ2VyUHJvdmlkZXIgZG8gT3BlblRlbGVtZXRyeSBwYXJhIGVtaXRpciBvcyBsb2dzLlxuICovXG5leHBvcnQgY2xhc3MgU3RhbmRhcmRMb2dnZXIgaW1wbGVtZW50cyBJU3RhbmRhcmRMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlcjogTG9nZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYWNlcjogSVN0YW5kYXJkVHJhY2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgc3BhbkNvbnRleHQ6IFNwYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgcHJpdmF0ZSBkZWZhdWx0U2VydmljZU5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsb2dnZXI6IExvZ2dlcixcbiAgICB0cmFjZXI6IElTdGFuZGFyZFRyYWNlcixcbiAgICBzY29wZUF0dHJpYnV0ZXM/OiBBdHRyaWJ1dGVzXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMudHJhY2VyID0gdHJhY2VyO1xuICAgIHRoaXMuc3BhbkNvbnRleHQgPSB0aGlzLnRyYWNlci5nZXRUcmFjZXIoKS5zdGFydFNwYW4oJ2luaXQtbG9nZ2VyJyk7XG4gICAgdGhpcy5kZWZhdWx0U2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUVcbiAgICAgID8gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FXG4gICAgICA6ICd1bmtub3duLXNlcnZpY2UnO1xuXG4gICAgdGhpcy5kZWZhdWx0QXR0cmlidXRlcyA9IHtcbiAgICAgICd0cmFjZS5pZCc6IHRoaXMuc3BhbkNvbnRleHQuc3BhbkNvbnRleHQoKS50cmFjZUlkLFxuICAgICAgJ3NwYW4uaWQnOiB0aGlzLnNwYW5Db250ZXh0LnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBzY29wZUF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIHx8ICd1bmtub3duLWZ1bmN0aW9uJyxcbiAgICAgICdmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJzpcbiAgICAgICAgc2NvcGVBdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLmludm9jYXRpb25faWQnXSB8fCAndW5rbm93bi1pbnZvY2F0aW9uLWlkJyxcbiAgICB9O1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGdldEVudmlyb25tZW50U3RhZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ0Vycm9yKGRhdGE6IExvZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9nKHtcbiAgICAgIHNlcnZpY2VOYW1lOiB0aGlzLmRlZmF1bHRTZXJ2aWNlTmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudmlyb25tZW50LFxuICAgICAgLi4uZGF0YSxcbiAgICAgIHNldmVyaXR5OiAnRVJST1InLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9nSW5mbyhkYXRhOiBMb2dQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvZyh7XG4gICAgICBzZXJ2aWNlTmFtZTogdGhpcy5kZWZhdWx0U2VydmljZU5hbWUsXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgIC4uLmRhdGEsXG4gICAgICBzZXZlcml0eTogJ0lORk8nLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9nV2FybihkYXRhOiBMb2dQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvZyh7XG4gICAgICBzZXJ2aWNlTmFtZTogdGhpcy5kZWZhdWx0U2VydmljZU5hbWUsXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgIC4uLmRhdGEsXG4gICAgICBzZXZlcml0eTogJ1dBUk4nLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbG9nRGVidWcoZGF0YTogTG9nUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2coe1xuICAgICAgc2VydmljZU5hbWU6IHRoaXMuZGVmYXVsdFNlcnZpY2VOYW1lLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52aXJvbm1lbnQsXG4gICAgICAuLi5kYXRhLFxuICAgICAgc2V2ZXJpdHk6ICdERUJVRycsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvZyhcbiAgICBkYXRhOiBPbWl0PFN0YW5kYXJkTG9nRGF0YSwgJ3RpbWVzdGFtcCc+ICYge1xuICAgICAgc2V2ZXJpdHk6IFN0YW5kYXJkTG9nRGF0YVsnc2V2ZXJpdHknXTtcbiAgICB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZ1bGxEYXRhOiBTdGFuZGFyZExvZ0RhdGEgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgc2VydmljZU5hbWU6IGRhdGEuc2VydmljZU5hbWUgfHwgdGhpcy5kZWZhdWx0U2VydmljZU5hbWUsXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuXG4gICAgY29uc3Qgc2V2ZXJpdHlNYXAgPSB7XG4gICAgICBFUlJPUjogU2V2ZXJpdHlOdW1iZXIuRVJST1IsXG4gICAgICBXQVJOOiBTZXZlcml0eU51bWJlci5XQVJOLFxuICAgICAgSU5GTzogU2V2ZXJpdHlOdW1iZXIuSU5GTyxcbiAgICAgIERFQlVHOiBTZXZlcml0eU51bWJlci5ERUJVRyxcbiAgICB9O1xuXG4gICAgY29uc3QgbG9nUmVjb3JkID0ge1xuICAgICAgc2V2ZXJpdHlOdW1iZXI6IHNldmVyaXR5TWFwW2Z1bGxEYXRhLnNldmVyaXR5XSxcbiAgICAgIHNldmVyaXR5VGV4dDogZnVsbERhdGEuc2V2ZXJpdHksXG4gICAgICBib2R5OiBmdWxsRGF0YS5tZXNzYWdlLFxuICAgICAgYXR0cmlidXRlczogdGhpcy5idWlsZEF0dHJpYnV0ZXMoZnVsbERhdGEpLFxuICAgIH07XG5cbiAgICB0aGlzLmxvZ2dlci5lbWl0KGxvZ1JlY29yZCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXR0cmlidXRlcyhkYXRhOiBTdGFuZGFyZExvZ0RhdGEpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgdGltZXN0YW1wOiBkYXRhLnRpbWVzdGFtcCxcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBkYXRhLnNlcnZpY2VOYW1lLFxuICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGRhdGEuZW52aXJvbm1lbnQsXG4gICAgfTtcblxuICAgIC8vIEluZm9ybWHDp8O1ZXMgZG8gZXJyb1xuICAgIGlmIChkYXRhLmVycm9yKSB7XG4gICAgICBhdHRyaWJ1dGVzWydlcnJvci50eXBlJ10gPSBkYXRhLmVycm9yLm5hbWU7XG4gICAgICBhdHRyaWJ1dGVzWydlcnJvci5tZXNzYWdlJ10gPSBkYXRhLmVycm9yLm1lc3NhZ2U7XG4gICAgICBhdHRyaWJ1dGVzWydlcnJvci5zdGFjayddID0gZGF0YS5lcnJvci5zdGFjayB8fCAnJztcbiAgICB9XG5cbiAgICAvLyBIVFRQXG4gICAgaWYgKGRhdGEuaHR0cCkge1xuICAgICAgaWYgKGRhdGEuaHR0cC5tZXRob2QpIGF0dHJpYnV0ZXNbJ2h0dHAubWV0aG9kJ10gPSBkYXRhLmh0dHAubWV0aG9kO1xuICAgICAgaWYgKGRhdGEuaHR0cC51cmwpIGF0dHJpYnV0ZXNbJ2h0dHAudXJsJ10gPSBkYXRhLmh0dHAudXJsO1xuICAgICAgaWYgKGRhdGEuaHR0cC5lbmRwb2ludCkgYXR0cmlidXRlc1snaHR0cC5lbmRwb2ludCddID0gZGF0YS5odHRwLmVuZHBvaW50O1xuICAgICAgaWYgKGRhdGEuaHR0cC5zdGF0dXNDb2RlKVxuICAgICAgICBhdHRyaWJ1dGVzWydodHRwLnN0YXR1c19jb2RlJ10gPSBkYXRhLmh0dHAuc3RhdHVzQ29kZTtcbiAgICAgIGlmIChkYXRhLmh0dHAuaGVhZGVycylcbiAgICAgICAgYXR0cmlidXRlc1snaHR0cC5oZWFkZXJzJ10gPSBKU09OLnN0cmluZ2lmeShkYXRhLmh0dHAuaGVhZGVycyk7XG4gICAgICBpZiAoZGF0YS5odHRwLmJvZHkpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2h0dHAuYm9keSddID0gSlNPTi5zdHJpbmdpZnkoZGF0YS5odHRwLmJvZHkpO1xuICAgICAgaWYgKGRhdGEuaHR0cC5wYXJhbXMpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2h0dHAucGFyYW1zJ10gPSBKU09OLnN0cmluZ2lmeShkYXRhLmh0dHAucGFyYW1zKTtcbiAgICAgIGlmIChkYXRhLmh0dHAucXVlcnkpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2h0dHAucXVlcnknXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEuaHR0cC5xdWVyeSk7XG4gICAgICBpZiAoZGF0YS5odHRwLmFnZW50KSBhdHRyaWJ1dGVzWydodHRwLnVzZXJfYWdlbnQnXSA9IGRhdGEuaHR0cC5hZ2VudDtcbiAgICB9XG5cbiAgICAvLyBVc3XDoXJpb1xuICAgIGlmIChkYXRhLnVzZXIpIHtcbiAgICAgIGlmIChkYXRhLnVzZXIudWlkKSBhdHRyaWJ1dGVzWyd1c2VyLnVpZCddID0gZGF0YS51c2VyLnVpZDtcbiAgICAgIGlmIChkYXRhLnVzZXIuZW1haWwpIGF0dHJpYnV0ZXNbJ3VzZXIuZW1haWwnXSA9IGRhdGEudXNlci5lbWFpbDtcbiAgICB9XG5cbiAgICAvLyBFeGVjdcOnw6NvXG4gICAgaWYgKGRhdGEuZXhlY3V0aW9uKSB7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24ucmVxdWVzdElkKVxuICAgICAgICBhdHRyaWJ1dGVzWydyZXF1ZXN0LmlkJ10gPSBkYXRhLmV4ZWN1dGlvbi5yZXF1ZXN0SWQ7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24uYXdzUmVxdWVzdElkKVxuICAgICAgICBhdHRyaWJ1dGVzWydhd3MucmVxdWVzdC5pZCddID0gZGF0YS5leGVjdXRpb24uYXdzUmVxdWVzdElkO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLmZ1bmN0aW9uTmFtZSlcbiAgICAgICAgYXR0cmlidXRlc1snZnVuY3Rpb24ubmFtZSddID0gZGF0YS5leGVjdXRpb24uZnVuY3Rpb25OYW1lO1xuICAgICAgdGhpcy5kZWZhdWx0QXR0cmlidXRlc1snZnVuY3Rpb24ubmFtZSddID0gZGF0YS5leGVjdXRpb24uZnVuY3Rpb25OYW1lO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLmludm9jYXRpb25JZClcbiAgICAgICAgYXR0cmlidXRlc1snZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddID0gZGF0YS5leGVjdXRpb24uaW52b2NhdGlvbklkO1xuICAgICAgdGhpcy5kZWZhdWx0QXR0cmlidXRlc1snZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddID1cbiAgICAgICAgZGF0YS5leGVjdXRpb24uaW52b2NhdGlvbklkO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLmNvbnRyb2xsZXIpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2NvbnRyb2xsZXIubmFtZSddID0gZGF0YS5leGVjdXRpb24uY29udHJvbGxlcjtcbiAgICAgIGlmIChkYXRhLmV4ZWN1dGlvbi5jb250cm9sbGVyTWV0aG9kKVxuICAgICAgICBhdHRyaWJ1dGVzWydjb250cm9sbGVyLm1ldGhvZCddID0gZGF0YS5leGVjdXRpb24uY29udHJvbGxlck1ldGhvZDtcbiAgICAgIGlmIChkYXRhLmV4ZWN1dGlvbi5vcmlnaW4pIGF0dHJpYnV0ZXNbJ29yaWdpbiddID0gZGF0YS5leGVjdXRpb24ub3JpZ2luO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLnJvdXRlS2V5KVxuICAgICAgICBhdHRyaWJ1dGVzWydyb3V0ZS5rZXknXSA9IGRhdGEuZXhlY3V0aW9uLnJvdXRlS2V5O1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm1hbmNlXG4gICAgaWYgKGRhdGEucGVyZm9ybWFuY2UpIHtcbiAgICAgIGlmIChkYXRhLnBlcmZvcm1hbmNlLmR1cmF0aW9uTXMpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2R1cmF0aW9uLm1zJ10gPSBkYXRhLnBlcmZvcm1hbmNlLmR1cmF0aW9uTXM7XG4gICAgICBpZiAoZGF0YS5wZXJmb3JtYW5jZS5zdWNjZXNzICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2V4ZWN1dGlvbi5zdWNjZXNzJ10gPSBkYXRhLnBlcmZvcm1hbmNlLnN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgLy8gQ29udGV4dG8gYWRpY2lvbmFsXG4gICAgaWYgKGRhdGEuY29udGV4dCkge1xuICAgICAgYXR0cmlidXRlc1snY29udGV4dCddID0gSlNPTi5zdHJpbmdpZnkoZGF0YS5jb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBGaWx0cmFyIHZhbG9yZXMgdW5kZWZpbmVkL251bGxcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMoeyAuLi50aGlzLmRlZmF1bHRBdHRyaWJ1dGVzLCAuLi5hdHRyaWJ1dGVzIH0pLmZpbHRlcihcbiAgICAgICAgKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbFxuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvcmUvbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFpRTtBQUlqRSwrQ0FBb0Q7QUFZcEQsTUFBYSxjQUFjO0lBUXpCLFlBQ0UsTUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLGVBQTRCO1FBUmIsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQVUzRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVk7WUFDaEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWTtZQUMxQixDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFFdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHO1lBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU87WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTTtZQUNoRCxlQUFlLEVBQUUsQ0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUcsZUFBZSxDQUFDLEtBQUksa0JBQWtCO1lBQ3pFLHdCQUF3QixFQUN0QixDQUFBLGVBQWUsYUFBZixlQUFlLHVCQUFmLGVBQWUsQ0FBRyx3QkFBd0IsQ0FBQyxLQUFJLHVCQUF1QjtZQUN4RSxZQUFZLEVBQUUsQ0FBQSxlQUFlLGFBQWYsZUFBZSx1QkFBZixlQUFlLENBQUcsWUFBWSxDQUFDLEtBQUksb0JBQW9CO1lBQ3JFLFdBQVcsRUFBRSxDQUFBLGVB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QUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDL0QsQ0FBQztRQUdELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBR0QsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxpQ0FBTSxJQUFJLENBQUMsaUJBQWlCLEdBQUssVUFBVSxFQUFHLENBQUMsTUFBTSxDQUNqRSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUNyRCxDQUNGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF2TEQsd0NBdUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2V2ZXJpdHlOdW1iZXIsIExvZ2dlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaS1sb2dzJztcbmltcG9ydCB7IElTdGFuZGFyZExvZ2dlciwgU3RhbmRhcmRMb2dEYXRhIH0gZnJvbSAnLi9sb2dnZXItdHlwZXMnO1xuaW1wb3J0IHsgSVN0YW5kYXJkVHJhY2VyIH0gZnJvbSAnLi90cmFjZXItdHlwZXMnO1xuaW1wb3J0IHsgQXR0cmlidXRlcywgU3BhbiB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5pbXBvcnQgeyBnZXRFbnZpcm9ubWVudFN0YWdlIH0gZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5cbmludGVyZmFjZSBMb2dQYXJhbXMgZXh0ZW5kcyBPbWl0PFxuICBTdGFuZGFyZExvZ0RhdGEsXG4gICdzZXZlcml0eScgfCAndGltZXN0YW1wJyB8ICdzZXJ2aWNlTmFtZScgfCAnZW52aXJvbm1lbnQnXG4+IHtcbiAgZW52aXJvbm1lbnQ/OiBTdGFuZGFyZExvZ0RhdGFbJ2Vudmlyb25tZW50J107XG59XG4vKipcbiAqIExvZ2dlciBjb3JlIHF1ZSBpbXBsZW1lbnRhIG8gcGFkcsOjbyBkZSBsb2dzIGVzdHJ1dHVyYWRvcy5cbiAqIFJlY2ViZSB1bSBMb2dnZXJQcm92aWRlciBkbyBPcGVuVGVsZW1ldHJ5IHBhcmEgZW1pdGlyIG9zIGxvZ3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZExvZ2dlciBpbXBsZW1lbnRzIElTdGFuZGFyZExvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhY2VyOiBJU3RhbmRhcmRUcmFjZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBzcGFuQ29udGV4dDogU3BhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBwcml2YXRlIGRlZmF1bHRTZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHRyYWNlcjogSVN0YW5kYXJkVHJhY2VyLFxuICAgIHNjb3BlQXR0cmlidXRlcz86IEF0dHJpYnV0ZXNcbiAgKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy50cmFjZXIgPSB0cmFjZXI7XG4gICAgdGhpcy5zcGFuQ29udGV4dCA9IHRoaXMudHJhY2VyLmdldFRyYWNlcigpLnN0YXJ0U3BhbignaW5pdC1sb2dnZXInKTtcbiAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRVxuICAgICAgPyBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUVcbiAgICAgIDogJ3Vua25vd24tc2VydmljZSc7XG5cbiAgICB0aGlzLmRlZmF1bHRBdHRyaWJ1dGVzID0ge1xuICAgICAgJ3RyYWNlLmlkJzogdGhpcy5zcGFuQ29udGV4dC5zcGFuQ29udGV4dCgpLnRyYWNlSWQsXG4gICAgICAnc3Bhbi5pZCc6IHRoaXMuc3BhbkNvbnRleHQuc3BhbkNvbnRleHQoKS5zcGFuSWQsXG4gICAgICAnZnVuY3Rpb24ubmFtZSc6IHNjb3BlQXR0cmlidXRlcz8uWydmdW5jdGlvbi5uYW1lJ10gfHwgJ3Vua25vd24tZnVuY3Rpb24nLFxuICAgICAgJ2Z1bmN0aW9uLmludm9jYXRpb25faWQnOlxuICAgICAgICBzY29wZUF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddIHx8ICd1bmtub3duLWludm9jYXRpb24taWQnLFxuICAgICAgJ3JlcXVlc3QuaWQnOiBzY29wZUF0dHJpYnV0ZXM/LlsncmVxdWVzdC5pZCddIHx8ICd1bmtub3duLXJlcXVlc3QtaWQnLFxuICAgICAgJ3JvdXRlLmtleSc6IHNjb3BlQXR0cmlidXRlcz8uWydyb3V0ZS5rZXknXSB8fCAndW5rbm93bi1yb3V0ZS1rZXknLFxuICAgIH07XG5cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZ2V0RW52aXJvbm1lbnRTdGFnZSgpO1xuICB9XG5cbiAgYXN5bmMgbG9nRXJyb3IoZGF0YTogTG9nUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2coe1xuICAgICAgc2VydmljZU5hbWU6IHRoaXMuZGVmYXVsdFNlcnZpY2VOYW1lLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuZW52aXJvbm1lbnQsXG4gICAgICAuLi5kYXRhLFxuICAgICAgc2V2ZXJpdHk6ICdFUlJPUicsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2dJbmZvKGRhdGE6IExvZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9nKHtcbiAgICAgIHNlcnZpY2VOYW1lOiB0aGlzLmRlZmF1bHRTZXJ2aWNlTmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudmlyb25tZW50LFxuICAgICAgLi4uZGF0YSxcbiAgICAgIHNldmVyaXR5OiAnSU5GTycsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2dXYXJuKGRhdGE6IExvZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9nKHtcbiAgICAgIHNlcnZpY2VOYW1lOiB0aGlzLmRlZmF1bHRTZXJ2aWNlTmFtZSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudmlyb25tZW50LFxuICAgICAgLi4uZGF0YSxcbiAgICAgIHNldmVyaXR5OiAnV0FSTicsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsb2dEZWJ1ZyhkYXRhOiBMb2dQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvZyh7XG4gICAgICBzZXJ2aWNlTmFtZTogdGhpcy5kZWZhdWx0U2VydmljZU5hbWUsXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5lbnZpcm9ubWVudCxcbiAgICAgIC4uLmRhdGEsXG4gICAgICBzZXZlcml0eTogJ0RFQlVHJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9nKFxuICAgIGRhdGE6IE9taXQ8U3RhbmRhcmRMb2dEYXRhLCAndGltZXN0YW1wJz4gJiB7XG4gICAgICBzZXZlcml0eTogU3RhbmRhcmRMb2dEYXRhWydzZXZlcml0eSddO1xuICAgIH1cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZnVsbERhdGE6IFN0YW5kYXJkTG9nRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBzZXJ2aWNlTmFtZTogZGF0YS5zZXJ2aWNlTmFtZSB8fCB0aGlzLmRlZmF1bHRTZXJ2aWNlTmFtZSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG5cbiAgICBjb25zdCBzZXZlcml0eU1hcCA9IHtcbiAgICAgIEVSUk9SOiBTZXZlcml0eU51bWJlci5FUlJPUixcbiAgICAgIFdBUk46IFNldmVyaXR5TnVtYmVyLldBUk4sXG4gICAgICBJTkZPOiBTZXZlcml0eU51bWJlci5JTkZPLFxuICAgICAgREVCVUc6IFNldmVyaXR5TnVtYmVyLkRFQlVHLFxuICAgIH07XG5cbiAgICBjb25zdCBsb2dSZWNvcmQgPSB7XG4gICAgICBzZXZlcml0eU51bWJlcjogc2V2ZXJpdHlNYXBbZnVsbERhdGEuc2V2ZXJpdHldLFxuICAgICAgc2V2ZXJpdHlUZXh0OiBmdWxsRGF0YS5zZXZlcml0eSxcbiAgICAgIGJvZHk6IGZ1bGxEYXRhLm1lc3NhZ2UsXG4gICAgICBhdHRyaWJ1dGVzOiB0aGlzLmJ1aWxkQXR0cmlidXRlcyhmdWxsRGF0YSksXG4gICAgfTtcblxuICAgIHRoaXMubG9nZ2VyLmVtaXQobG9nUmVjb3JkKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBdHRyaWJ1dGVzKGRhdGE6IFN0YW5kYXJkTG9nRGF0YSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICB0aW1lc3RhbXA6IGRhdGEudGltZXN0YW1wLFxuICAgICAgJ3NlcnZpY2UubmFtZSc6IGRhdGEuc2VydmljZU5hbWUsXG4gICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogZGF0YS5lbnZpcm9ubWVudCxcbiAgICB9O1xuXG4gICAgLy8gSW5mb3JtYcOnw7VlcyBkbyBlcnJvXG4gICAgaWYgKGRhdGEuZXJyb3IpIHtcbiAgICAgIGF0dHJpYnV0ZXNbJ2Vycm9yLnR5cGUnXSA9IGRhdGEuZXJyb3IubmFtZTtcbiAgICAgIGF0dHJpYnV0ZXNbJ2Vycm9yLm1lc3NhZ2UnXSA9IGRhdGEuZXJyb3IubWVzc2FnZTtcbiAgICAgIGF0dHJpYnV0ZXNbJ2Vycm9yLnN0YWNrJ10gPSBkYXRhLmVycm9yLnN0YWNrIHx8ICcnO1xuICAgIH1cblxuICAgIC8vIEhUVFBcbiAgICBpZiAoZGF0YS5odHRwKSB7XG4gICAgICBpZiAoZGF0YS5odHRwLm1ldGhvZCkgYXR0cmlidXRlc1snaHR0cC5tZXRob2QnXSA9IGRhdGEuaHR0cC5tZXRob2Q7XG4gICAgICBpZiAoZGF0YS5odHRwLnVybCkgYXR0cmlidXRlc1snaHR0cC51cmwnXSA9IGRhdGEuaHR0cC51cmw7XG4gICAgICBpZiAoZGF0YS5odHRwLmVuZHBvaW50KSBhdHRyaWJ1dGVzWydodHRwLmVuZHBvaW50J10gPSBkYXRhLmh0dHAuZW5kcG9pbnQ7XG4gICAgICBpZiAoZGF0YS5odHRwLnN0YXR1c0NvZGUpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2h0dHAuc3RhdHVzX2NvZGUnXSA9IGRhdGEuaHR0cC5zdGF0dXNDb2RlO1xuICAgICAgaWYgKGRhdGEuaHR0cC5oZWFkZXJzKVxuICAgICAgICBhdHRyaWJ1dGVzWydodHRwLmhlYWRlcnMnXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEuaHR0cC5oZWFkZXJzKTtcbiAgICAgIGlmIChkYXRhLmh0dHAuYm9keSlcbiAgICAgICAgYXR0cmlidXRlc1snaHR0cC5ib2R5J10gPSBKU09OLnN0cmluZ2lmeShkYXRhLmh0dHAuYm9keSk7XG4gICAgICBpZiAoZGF0YS5odHRwLnBhcmFtcylcbiAgICAgICAgYXR0cmlidXRlc1snaHR0cC5wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGRhdGEuaHR0cC5wYXJhbXMpO1xuICAgICAgaWYgKGRhdGEuaHR0cC5xdWVyeSlcbiAgICAgICAgYXR0cmlidXRlc1snaHR0cC5xdWVyeSddID0gSlNPTi5zdHJpbmdpZnkoZGF0YS5odHRwLnF1ZXJ5KTtcbiAgICAgIGlmIChkYXRhLmh0dHAuYWdlbnQpIGF0dHJpYnV0ZXNbJ2h0dHAudXNlcl9hZ2VudCddID0gZGF0YS5odHRwLmFnZW50O1xuICAgIH1cblxuICAgIC8vIFVzdcOhcmlvXG4gICAgaWYgKGRhdGEudXNlcikge1xuICAgICAgaWYgKGRhdGEudXNlci51aWQpIGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10gPSBkYXRhLnVzZXIudWlkO1xuICAgICAgaWYgKGRhdGEudXNlci5lbWFpbCkgYXR0cmlidXRlc1sndXNlci5lbWFpbCddID0gZGF0YS51c2VyLmVtYWlsO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1w6fDo29cbiAgICBpZiAoZGF0YS5leGVjdXRpb24pIHtcbiAgICAgIGlmIChkYXRhLmV4ZWN1dGlvbi5yZXF1ZXN0SWQpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ3JlcXVlc3QuaWQnXSA9IGRhdGEuZXhlY3V0aW9uLnJlcXVlc3RJZDtcbiAgICAgIGlmIChkYXRhLmV4ZWN1dGlvbi5hd3NSZXF1ZXN0SWQpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2F3cy5yZXF1ZXN0LmlkJ10gPSBkYXRhLmV4ZWN1dGlvbi5hd3NSZXF1ZXN0SWQ7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24uZnVuY3Rpb25OYW1lKVxuICAgICAgICBhdHRyaWJ1dGVzWydmdW5jdGlvbi5uYW1lJ10gPSBkYXRhLmV4ZWN1dGlvbi5mdW5jdGlvbk5hbWU7XG4gICAgICB0aGlzLmRlZmF1bHRBdHRyaWJ1dGVzWydmdW5jdGlvbi5uYW1lJ10gPSBkYXRhLmV4ZWN1dGlvbi5mdW5jdGlvbk5hbWU7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24uaW52b2NhdGlvbklkKVxuICAgICAgICBhdHRyaWJ1dGVzWydmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJ10gPSBkYXRhLmV4ZWN1dGlvbi5pbnZvY2F0aW9uSWQ7XG4gICAgICB0aGlzLmRlZmF1bHRBdHRyaWJ1dGVzWydmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJ10gPVxuICAgICAgICBkYXRhLmV4ZWN1dGlvbi5pbnZvY2F0aW9uSWQ7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24uY29udHJvbGxlcilcbiAgICAgICAgYXR0cmlidXRlc1snY29udHJvbGxlci5uYW1lJ10gPSBkYXRhLmV4ZWN1dGlvbi5jb250cm9sbGVyO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLmNvbnRyb2xsZXJNZXRob2QpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ2NvbnRyb2xsZXIubWV0aG9kJ10gPSBkYXRhLmV4ZWN1dGlvbi5jb250cm9sbGVyTWV0aG9kO1xuICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLm9yaWdpbikgYXR0cmlidXRlc1snb3JpZ2luJ10gPSBkYXRhLmV4ZWN1dGlvbi5vcmlnaW47XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24ucm91dGVLZXkpXG4gICAgICAgIGF0dHJpYnV0ZXNbJ3JvdXRlLmtleSddID0gZGF0YS5leGVjdXRpb24ucm91dGVLZXk7XG4gICAgICBpZiAoZGF0YS5leGVjdXRpb24ubG9nZ2VkVXNlcikge1xuICAgICAgICBpZiAoZGF0YS5leGVjdXRpb24ubG9nZ2VkVXNlci51aWQpXG4gICAgICAgICAgYXR0cmlidXRlc1snbG9nZ2VkX3VzZXIudWlkJ10gPSBkYXRhLmV4ZWN1dGlvbi5sb2dnZWRVc2VyLnVpZDtcbiAgICAgICAgaWYgKGRhdGEuZXhlY3V0aW9uLmxvZ2dlZFVzZXIuZW1haWwpXG4gICAgICAgICAgYXR0cmlidXRlc1snbG9nZ2VkX3VzZXIuZW1haWwnXSA9IGRhdGEuZXhlY3V0aW9uLmxvZ2dlZFVzZXIuZW1haWw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUGVyZm9ybWFuY2VcbiAgICBpZiAoZGF0YS5wZXJmb3JtYW5jZSkge1xuICAgICAgaWYgKGRhdGEucGVyZm9ybWFuY2UuZHVyYXRpb25NcylcbiAgICAgICAgYXR0cmlidXRlc1snZHVyYXRpb24ubXMnXSA9IGRhdGEucGVyZm9ybWFuY2UuZHVyYXRpb25NcztcbiAgICAgIGlmIChkYXRhLnBlcmZvcm1hbmNlLnN1Y2Nlc3MgIT09IHVuZGVmaW5lZClcbiAgICAgICAgYXR0cmlidXRlc1snZXhlY3V0aW9uLnN1Y2Nlc3MnXSA9IGRhdGEucGVyZm9ybWFuY2Uuc3VjY2VzcztcbiAgICB9XG5cbiAgICAvLyBDb250ZXh0byBhZGljaW9uYWxcbiAgICBpZiAoZGF0YS5jb250ZXh0KSB7XG4gICAgICBhdHRyaWJ1dGVzWydjb250ZXh0J10gPSBKU09OLnN0cmluZ2lmeShkYXRhLmNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIEZpbHRyYXIgdmFsb3JlcyB1bmRlZmluZWQvbnVsbFxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyh7IC4uLnRoaXMuZGVmYXVsdEF0dHJpYnV0ZXMsIC4uLmF0dHJpYnV0ZXMgfSkuZmlsdGVyKFxuICAgICAgICAoWywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsXG4gICAgICApXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -2,8 +2,8 @@ import middy from '@middy/core';
|
|
|
2
2
|
interface MiddyMiddlewareOptions {
|
|
3
3
|
}
|
|
4
4
|
export declare function extractLoggedUser(event: any): {
|
|
5
|
-
email?: string;
|
|
6
|
-
uid?: string;
|
|
5
|
+
'user.email'?: string;
|
|
6
|
+
'user.uid'?: string;
|
|
7
7
|
} | undefined;
|
|
8
8
|
export declare const middyTelemetryMiddleware: (options?: MiddyMiddlewareOptions) => middy.MiddlewareObj;
|
|
9
9
|
export {};
|
|
@@ -19,21 +19,21 @@ function extractHttpAttributes(event) {
|
|
|
19
19
|
var _a, _b, _c, _d;
|
|
20
20
|
if (event.requestContext) {
|
|
21
21
|
return {
|
|
22
|
-
method: ((_a = event.requestContext.http) === null || _a === void 0 ? void 0 : _a.method) || 'unknown',
|
|
23
|
-
url: event.requestContext.domainName && ((_b = event.requestContext.http) === null || _b === void 0 ? void 0 : _b.path),
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
body: event.body || {},
|
|
22
|
+
'http.method': ((_a = event.requestContext.http) === null || _a === void 0 ? void 0 : _a.method) || 'unknown',
|
|
23
|
+
'http.url': event.requestContext.domainName && ((_b = event.requestContext.http) === null || _b === void 0 ? void 0 : _b.path),
|
|
24
|
+
'http.user_agent': ((_c = event.headers) === null || _c === void 0 ? void 0 : _c['user-agent']) || 'unknown',
|
|
25
|
+
'http.path_parameters': event.pathParameters || {},
|
|
26
|
+
'http.query_string_parameters': event.queryStringParameters || {},
|
|
27
|
+
'http.body': event.body || {},
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
30
|
return {
|
|
31
|
-
method: event.httpMethod || 'unknown',
|
|
32
|
-
url: event.path || 'unknown',
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
body: event.body || {},
|
|
31
|
+
'http.method': event.httpMethod || 'unknown',
|
|
32
|
+
'http.url': event.path || 'unknown',
|
|
33
|
+
'http.user_agent': ((_d = event.headers) === null || _d === void 0 ? void 0 : _d['User-Agent']) || 'unknown',
|
|
34
|
+
'http.path_parameters': event.pathParameters || {},
|
|
35
|
+
'http.query_string_parameters': event.queryStringParameters || {},
|
|
36
|
+
'http.body': event.body || {},
|
|
37
37
|
};
|
|
38
38
|
}
|
|
39
39
|
function extractLoggedUser(event) {
|
|
@@ -46,8 +46,8 @@ function extractLoggedUser(event) {
|
|
|
46
46
|
((_d = loggedUser === null || loggedUser === void 0 ? void 0 : loggedUser.user) === null || _d === void 0 ? void 0 : _d.account_user) &&
|
|
47
47
|
((_f = (_e = loggedUser === null || loggedUser === void 0 ? void 0 : loggedUser.user) === null || _e === void 0 ? void 0 : _e.account_user) === null || _f === void 0 ? void 0 : _f.account)) {
|
|
48
48
|
return {
|
|
49
|
-
email: loggedUser.user.email,
|
|
50
|
-
uid: loggedUser.user.account_user.account.uid,
|
|
49
|
+
'user.email': loggedUser.user.email,
|
|
50
|
+
'user.uid': loggedUser.user.account_user.account.uid,
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -67,37 +67,42 @@ function extractDefaultAttributes(request) {
|
|
|
67
67
|
const requestId = (event === null || event === void 0 ? void 0 : event.requestId) || ((_b = event === null || event === void 0 ? void 0 : event.requestContext) === null || _b === void 0 ? void 0 : _b.requestId) || 'unknown';
|
|
68
68
|
const loggedUser = extractLoggedUser(event);
|
|
69
69
|
const stage = (0, core_1.getEnvironmentStage)();
|
|
70
|
-
return {
|
|
71
|
-
functionName,
|
|
70
|
+
return Object.assign(Object.assign({ functionName,
|
|
72
71
|
invocationId,
|
|
73
72
|
serviceName,
|
|
74
|
-
http,
|
|
75
73
|
origin,
|
|
76
74
|
routeKey,
|
|
77
75
|
requestId,
|
|
78
|
-
loggedUser
|
|
79
|
-
stage,
|
|
80
|
-
};
|
|
76
|
+
stage }, http), loggedUser);
|
|
81
77
|
}
|
|
82
78
|
const middyTelemetryMiddleware = (options) => ({
|
|
83
79
|
before: (request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
84
80
|
try {
|
|
85
81
|
const startTime = perf_hooks_1.performance.now();
|
|
86
|
-
const
|
|
82
|
+
const attributes = extractDefaultAttributes(request);
|
|
87
83
|
const standardTracer = (0, telemetry_1.getStandardTracer)();
|
|
88
84
|
const spanResult = standardTracer.startSpan({
|
|
89
|
-
spanName: functionName,
|
|
90
|
-
serviceName,
|
|
91
|
-
environment: stage,
|
|
92
|
-
http
|
|
85
|
+
spanName: attributes.functionName,
|
|
86
|
+
serviceName: attributes.serviceName,
|
|
87
|
+
environment: attributes.stage,
|
|
88
|
+
http: {
|
|
89
|
+
method: attributes['http.method'],
|
|
90
|
+
url: attributes['http.url'],
|
|
91
|
+
agent: attributes['http.user_agent'],
|
|
92
|
+
params: attributes['http.path_parameters'],
|
|
93
|
+
query: attributes['http.query_string_parameters'],
|
|
94
|
+
},
|
|
93
95
|
execution: {
|
|
94
|
-
functionName,
|
|
95
|
-
invocationId,
|
|
96
|
-
awsRequestId: invocationId,
|
|
97
|
-
origin,
|
|
98
|
-
routeKey,
|
|
99
|
-
requestId,
|
|
100
|
-
loggedUser
|
|
96
|
+
functionName: attributes.functionName,
|
|
97
|
+
invocationId: attributes.invocationId,
|
|
98
|
+
awsRequestId: attributes.invocationId,
|
|
99
|
+
origin: attributes.origin,
|
|
100
|
+
routeKey: attributes.routeKey,
|
|
101
|
+
requestId: attributes.requestId,
|
|
102
|
+
loggedUser: {
|
|
103
|
+
email: attributes['user.email'],
|
|
104
|
+
uid: attributes['user.uid'],
|
|
105
|
+
},
|
|
101
106
|
},
|
|
102
107
|
});
|
|
103
108
|
const meter = api_1.metrics.getMeter(origin);
|
|
@@ -119,12 +124,15 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
119
124
|
successCounter,
|
|
120
125
|
failureCounter,
|
|
121
126
|
startTime,
|
|
122
|
-
serviceName,
|
|
123
|
-
environment: stage,
|
|
124
|
-
origin,
|
|
125
|
-
routeKey,
|
|
126
|
-
requestId,
|
|
127
|
-
loggedUser
|
|
127
|
+
serviceName: attributes.serviceName,
|
|
128
|
+
environment: attributes.stage,
|
|
129
|
+
origin: attributes.origin,
|
|
130
|
+
routeKey: attributes.routeKey,
|
|
131
|
+
requestId: attributes.requestId,
|
|
132
|
+
loggedUser: {
|
|
133
|
+
email: attributes['user.email'],
|
|
134
|
+
uid: attributes['user.uid'],
|
|
135
|
+
},
|
|
128
136
|
};
|
|
129
137
|
}
|
|
130
138
|
catch (error) {
|
|
@@ -138,14 +146,20 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
138
146
|
if (!otelData)
|
|
139
147
|
return;
|
|
140
148
|
const event = request.event;
|
|
141
|
-
const
|
|
142
|
-
const origin = queryStringParameters.origin || 'unknown';
|
|
143
|
-
const loggedUser = extractLoggedUser(event);
|
|
149
|
+
const attributes = extractDefaultAttributes(event);
|
|
144
150
|
const { spanResult, successCounter, executionTimeHistogram, startTime, serviceName, environment, } = otelData;
|
|
145
151
|
spanResult.setSuccess(true);
|
|
152
|
+
const functionName = ((_a = spanResult.span.attributes) === null || _a === void 0 ? void 0 : _a['function.name']) ||
|
|
153
|
+
attributes.functionName;
|
|
154
|
+
const routeKey = ((_b = spanResult.span.attributes) === null || _b === void 0 ? void 0 : _b['route.key']) ||
|
|
155
|
+
attributes.routeKey;
|
|
156
|
+
const requestId = ((_c = spanResult.span.attributes) === null || _c === void 0 ? void 0 : _c['request.id']) ||
|
|
157
|
+
attributes.requestId;
|
|
146
158
|
successCounter.add(1, {
|
|
147
159
|
origin,
|
|
148
|
-
'function.name':
|
|
160
|
+
'function.name': functionName,
|
|
161
|
+
'request.id': requestId,
|
|
162
|
+
'route.key': routeKey,
|
|
149
163
|
'service.name': serviceName,
|
|
150
164
|
'deployment.environment.name': environment,
|
|
151
165
|
});
|
|
@@ -153,21 +167,41 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
153
167
|
executionTimeHistogram.record(durationMs, {
|
|
154
168
|
origin,
|
|
155
169
|
status: 'success',
|
|
156
|
-
'function.name':
|
|
170
|
+
'function.name': functionName,
|
|
171
|
+
'request.id': requestId,
|
|
172
|
+
'route.key': routeKey,
|
|
157
173
|
'service.name': serviceName,
|
|
158
174
|
'deployment.environment.name': environment,
|
|
159
175
|
});
|
|
160
|
-
const standardLogger = (0, telemetry_1.getStandardLogger)(
|
|
176
|
+
const standardLogger = (0, telemetry_1.getStandardLogger)(attributes);
|
|
161
177
|
yield standardLogger.logInfo({
|
|
162
178
|
message: 'Request completed successfully',
|
|
163
179
|
environment,
|
|
180
|
+
http: {
|
|
181
|
+
agent: attributes['http.user_agent'],
|
|
182
|
+
method: attributes['http.method'],
|
|
183
|
+
url: attributes['http.url'],
|
|
184
|
+
params: attributes['http.path_parameters'],
|
|
185
|
+
query: attributes['http.query_string_parameters'],
|
|
186
|
+
body: attributes['http.body'],
|
|
187
|
+
},
|
|
188
|
+
user: {
|
|
189
|
+
uid: attributes['user.uid'],
|
|
190
|
+
email: attributes['user.email'],
|
|
191
|
+
},
|
|
164
192
|
execution: {
|
|
165
|
-
functionName:
|
|
166
|
-
invocationId: (_d = spanResult.span.attributes) === null || _d === void 0 ? void 0 : _d['function.invocation_id']
|
|
193
|
+
functionName: functionName,
|
|
194
|
+
invocationId: ((_d = spanResult.span.attributes) === null || _d === void 0 ? void 0 : _d['function.invocation_id']) ||
|
|
195
|
+
attributes.invocationId,
|
|
167
196
|
origin,
|
|
168
|
-
routeKey:
|
|
169
|
-
requestId:
|
|
170
|
-
loggedUser
|
|
197
|
+
routeKey: routeKey,
|
|
198
|
+
requestId: requestId,
|
|
199
|
+
loggedUser: {
|
|
200
|
+
uid: (((_e = spanResult.span.attributes) === null || _e === void 0 ? void 0 : _e['logged_user.uid']) ||
|
|
201
|
+
attributes['user.uid']),
|
|
202
|
+
email: (((_f = spanResult.span.attributes) === null || _f === void 0 ? void 0 : _f['logged_user.email']) ||
|
|
203
|
+
attributes['user.email']),
|
|
204
|
+
},
|
|
171
205
|
},
|
|
172
206
|
performance: {
|
|
173
207
|
durationMs,
|
|
@@ -182,20 +216,32 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
182
216
|
}
|
|
183
217
|
}),
|
|
184
218
|
onError: (request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
185
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
219
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
186
220
|
try {
|
|
187
221
|
const otelData = request.context.otel;
|
|
188
222
|
if (!otelData)
|
|
189
223
|
return;
|
|
224
|
+
const attributes = extractDefaultAttributes(request.event);
|
|
190
225
|
const { spanResult, failureCounter, executionTimeHistogram, startTime, serviceName, environment, origin, } = otelData;
|
|
191
226
|
const error = request.error;
|
|
192
227
|
if (error) {
|
|
193
228
|
spanResult.setError(error);
|
|
194
229
|
}
|
|
230
|
+
const functionName = ((_a = spanResult.span.attributes) === null || _a === void 0 ? void 0 : _a['function.name']) ||
|
|
231
|
+
attributes.functionName ||
|
|
232
|
+
'unknown';
|
|
233
|
+
const requestId = ((_b = spanResult.span.attributes) === null || _b === void 0 ? void 0 : _b['request.id']) ||
|
|
234
|
+
attributes.requestId ||
|
|
235
|
+
'unknown';
|
|
236
|
+
const routeKey = ((_c = spanResult.span.attributes) === null || _c === void 0 ? void 0 : _c['route.key']) ||
|
|
237
|
+
attributes.routeKey ||
|
|
238
|
+
'unknown';
|
|
195
239
|
failureCounter.add(1, {
|
|
196
240
|
origin,
|
|
197
|
-
error_type: ((
|
|
198
|
-
'function.name':
|
|
241
|
+
error_type: ((_d = error === null || error === void 0 ? void 0 : error.constructor) === null || _d === void 0 ? void 0 : _d.name) || 'UnknownError',
|
|
242
|
+
'function.name': functionName,
|
|
243
|
+
'request.id': requestId,
|
|
244
|
+
'route.key': routeKey,
|
|
199
245
|
'service.name': serviceName,
|
|
200
246
|
'deployment.environment.name': environment,
|
|
201
247
|
});
|
|
@@ -203,27 +249,50 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
203
249
|
executionTimeHistogram.record(durationMs, {
|
|
204
250
|
origin,
|
|
205
251
|
status: 'error',
|
|
206
|
-
'function.name':
|
|
252
|
+
'function.name': functionName,
|
|
253
|
+
'request.id': requestId,
|
|
254
|
+
'route.key': routeKey,
|
|
207
255
|
'service.name': serviceName,
|
|
208
256
|
'deployment.environment.name': environment,
|
|
209
257
|
});
|
|
210
|
-
const standardLogger = (0, telemetry_1.getStandardLogger)(
|
|
258
|
+
const standardLogger = (0, telemetry_1.getStandardLogger)(attributes);
|
|
211
259
|
yield standardLogger.logError({
|
|
212
260
|
message: (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error occurred',
|
|
213
261
|
error: error || undefined,
|
|
214
262
|
environment,
|
|
263
|
+
http: {
|
|
264
|
+
agent: attributes['http.user_agent'],
|
|
265
|
+
method: attributes['http.method'],
|
|
266
|
+
url: attributes['http.url'],
|
|
267
|
+
params: attributes['http.path_parameters'],
|
|
268
|
+
query: attributes['http.query_string_parameters'],
|
|
269
|
+
body: attributes['http.body'],
|
|
270
|
+
},
|
|
271
|
+
user: {
|
|
272
|
+
uid: attributes['user.uid'],
|
|
273
|
+
email: attributes['user.email'],
|
|
274
|
+
},
|
|
215
275
|
execution: {
|
|
216
|
-
functionName:
|
|
217
|
-
invocationId: (_e = spanResult.span.attributes) === null || _e === void 0 ? void 0 : _e['function.invocation_id']
|
|
218
|
-
|
|
276
|
+
functionName: functionName,
|
|
277
|
+
invocationId: ((_e = spanResult.span.attributes) === null || _e === void 0 ? void 0 : _e['function.invocation_id']) ||
|
|
278
|
+
attributes.invocationId,
|
|
279
|
+
awsRequestId: (_f = spanResult.span.attributes) === null || _f === void 0 ? void 0 : _f['function.aws_request_id'],
|
|
219
280
|
origin,
|
|
281
|
+
routeKey: routeKey,
|
|
282
|
+
requestId: requestId,
|
|
283
|
+
loggedUser: {
|
|
284
|
+
uid: (((_g = spanResult.span.attributes) === null || _g === void 0 ? void 0 : _g['logged_user.uid']) ||
|
|
285
|
+
attributes['user.uid']),
|
|
286
|
+
email: (((_h = spanResult.span.attributes) === null || _h === void 0 ? void 0 : _h['logged_user.email']) ||
|
|
287
|
+
attributes['user.email']),
|
|
288
|
+
},
|
|
220
289
|
},
|
|
221
290
|
performance: {
|
|
222
291
|
durationMs,
|
|
223
292
|
success: false,
|
|
224
293
|
},
|
|
225
294
|
context: {
|
|
226
|
-
errorType: (
|
|
295
|
+
errorType: (_j = error === null || error === void 0 ? void 0 : error.constructor) === null || _j === void 0 ? void 0 : _j.name,
|
|
227
296
|
},
|
|
228
297
|
});
|
|
229
298
|
spanResult.end();
|
|
@@ -235,4 +304,4 @@ const middyTelemetryMiddleware = (options) => ({
|
|
|
235
304
|
}),
|
|
236
305
|
});
|
|
237
306
|
exports.middyTelemetryMiddleware = middyTelemetryMiddleware;
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zc3QvbWlkZHkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUE4QkEsOENBcUJDO0FBbERELDRDQUF3RDtBQUN4RCw0Q0FBZ0Y7QUFDaEYsMkNBQXlDO0FBQ3pDLHFDQUFpRDtBQUlqRCxTQUFTLHFCQUFxQixDQUFDLEtBQVU7O0lBQ3ZDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxNQUFNLEVBQUUsQ0FBQSxNQUFBLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksU0FBUztZQUN0RCxHQUFHLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEtBQUksTUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksMENBQUUsSUFBSSxDQUFBO1lBQ3ZFLEtBQUssRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztZQUNqRCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFO1lBQzFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO1lBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksU0FBUztRQUNyQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTO1FBQzVCLEtBQUssRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztRQUNqRCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFO1FBQzFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxFQUFF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aW1wb3J0IHsgbWV0cmljcywgVmFsdWVUeXBlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IGZvcmNlRmx1c2gsIGdldFN0YW5kYXJkTG9nZ2VyLCBnZXRTdGFuZGFyZFRyYWNlciB9IGZyb20gJy4uL3RlbGVtZXRyeSc7XG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTdGFnZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5pbnRlcmZhY2UgTWlkZHlNaWRkbGV3YXJlT3B0aW9ucyB7fVxuXG5mdW5jdGlvbiBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQ6IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoZXZlbnQucmVxdWVzdENvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiBldmVudC5yZXF1ZXN0Q29udGV4dC5odHRwPy5tZXRob2QgfHwgJ3Vua25vd24nLFxuICAgICAgdXJsOiBldmVudC5yZXF1ZXN0Q29udGV4dC5kb21haW5OYW1lICYmIGV2ZW50LnJlcXVlc3RDb250ZXh0Lmh0dHA/LnBhdGgsXG4gICAgICBhZ2VudDogZXZlbnQuaGVhZGVycz8uWyd1c2VyLWFnZW50J10gfHwgJ3Vua25vd24nLFxuICAgICAgcGF0aFBhcmFtZXRlcnM6IGV2ZW50LnBhdGhQYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgfHwge30sXG4gICAgICBib2R5OiBldmVudC5ib2R5IHx8IHt9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCB8fCAndW5rbm93bicsXG4gICAgdXJsOiBldmVudC5wYXRoIHx8ICd1bmtub3duJyxcbiAgICBhZ2VudDogZXZlbnQuaGVhZGVycz8uWydVc2VyLUFnZW50J10gfHwgJ3Vua25vd24nLFxuICAgIHBhdGhQYXJhbWV0ZXJzOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fSxcbiAgICBib2R5OiBldmVudC5ib2R5IHx8IHt9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExvZ2dlZFVzZXIoXG4gIGV2ZW50OiBhbnlcbik6IHsgZW1haWw/OiBzdHJpbmc7IHVpZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxvZ2dlZFVzZXIgPSBldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI/LmxhbWJkYT8ubG9nZ2VyVXNlcjtcblxuICBpZiAobG9nZ2VkVXNlcikge1xuICAgIGxvZ2dlZFVzZXIgPVxuICAgICAgdHlwZW9mIGxvZ2dlZFVzZXIgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShsb2dnZWRVc2VyKSA6IGxvZ2dlZFVzZXI7XG4gICAgaWYgKFxuICAgICAgbG9nZ2VkVXNlcj8udXNlciAmJlxuICAgICAgbG9nZ2VkVXNlcj8udXNlcj8uYWNjb3VudF91c2VyICYmXG4gICAgICBsb2dnZWRVc2VyPy51c2VyPy5hY2NvdW50X3VzZXI/LmFjY291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVtYWlsOiBsb2dnZWRVc2VyLnVzZXIuZW1haWwsXG4gICAgICAgIHVpZDogbG9nZ2VkVXNlci51c2VyLmFjY291bnRfdXNlci5hY2NvdW50LnVpZCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3Q6IGFueSkge1xuICBjb25zdCB7IGNvbnRleHQ6IGxhbWJkYUNvbnRleHQgfSA9IHJlcXVlc3Q7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGxhbWJkYUNvbnRleHQuZnVuY3Rpb25OYW1lO1xuICBjb25zdCBpbnZvY2F0aW9uSWQgPSBsYW1iZGFDb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3NzdC1zZXJ2aWNlJztcbiAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LmV2ZW50IGFzIGFueTtcbiAgY29uc3QgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gZXZlbnQ/LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fTtcbiAgY29uc3QgaHR0cCA9IGV4dHJhY3RIdHRwQXR0cmlidXRlcyhldmVudCk7XG4gIGNvbnN0IG9yaWdpbiA9IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5vcmlnaW4gfHwgJ3Vua25vd24nO1xuICBjb25zdCByb3V0ZUtleSA9XG4gICAgZXZlbnQ/LnJvdXRlS2V5IHx8IGV2ZW50Py5yZXF1ZXN0Q29udGV4dD8ucm91dGVLZXkgfHwgJ3Vua25vd24nO1xuICBjb25zdCByZXF1ZXN0SWQgPVxuICAgIGV2ZW50Py5yZXF1ZXN0SWQgfHwgZXZlbnQ/LnJlcXVlc3RDb250ZXh0Py5yZXF1ZXN0SWQgfHwgJ3Vua25vd24nO1xuICBjb25zdCBsb2dnZWRVc2VyID0gZXh0cmFjdExvZ2dlZFVzZXIoZXZlbnQpO1xuICBjb25zdCBzdGFnZSA9IGdldEVudmlyb25tZW50U3RhZ2UoKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBpbnZvY2F0aW9uSWQsXG4gICAgc2VydmljZU5hbWUsXG4gICAgaHR0cCxcbiAgICBvcmlnaW4sXG4gICAgcm91dGVLZXksXG4gICAgcmVxdWVzdElkLFxuICAgIGxvZ2dlZFVzZXIsXG4gICAgc3RhZ2UsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBtaWRkeVRlbGVtZXRyeU1pZGRsZXdhcmUgPSAoXG4gIG9wdGlvbnM/OiBNaWRkeU1pZGRsZXdhcmVPcHRpb25zXG4pOiBtaWRkeS5NaWRkbGV3YXJlT2JqID0+ICh7XG4gIGJlZm9yZTogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICBpbnZvY2F0aW9uSWQsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBodHRwLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHJvdXRlS2V5LFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxvZ2dlZFVzZXIsXG4gICAgICAgIHN0YWdlLFxuICAgICAgfSA9IGV4dHJhY3REZWZhdWx0QXR0cmlidXRlcyhyZXF1ZXN0KTtcblxuICAgICAgLy8gVXNhciBTdGFuZGFyZFRyYWNlciBwYXJhIGNyaWFyIHNwYW4gY29tIGF0cmlidXRvcyBwYWRyb25pemFkb3NcbiAgICAgIGNvbnN0IHN0YW5kYXJkVHJhY2VyID0gZ2V0U3RhbmRhcmRUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHNwYW5SZXN1bHQgPSBzdGFuZGFyZFRyYWNlci5zdGFydFNwYW4oe1xuICAgICAgICBzcGFuTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHN0YWdlLFxuICAgICAgICBodHRwLFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkLFxuICAgICAgICAgIGF3c1JlcXVlc3RJZDogaW52b2NhdGlvbklkLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByb3V0ZUtleSxcbiAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgbG9nZ2VkVXNlcixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIob3JpZ2luKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSA9IG1ldGVyLmNyZWF0ZUhpc3RvZ3JhbShcbiAgICAgICAgJ2xhbWJkYV9leGVjdXRpb25fZHVyYXRpb24nLFxuICAgICAgICB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUZW1wbyB0b3RhbCBkZSBleGVjdcOnw6NvIGRvIExhbWJkYSBlbSBtcycsXG4gICAgICAgICAgdW5pdDogJ21zJyxcbiAgICAgICAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZS5ET1VCTEUsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBzdWNjZXNzQ291bnRlciA9IG1ldGVyLmNyZWF0ZUNvdW50ZXIoJ3RvdGFsX3N1Y2Nlc3NmdWxfcHVyY2hhc2VzJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGRlIGNvbXByYXMgYmVtLXN1Y2VkaWRhcycsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZhaWx1cmVDb3VudGVyID0gbWV0ZXIuY3JlYXRlQ291bnRlcigndG90YWxfZmFpbGVkX3B1cmNoYXNlcycsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBkZSBjb21wcmFzIGNvbSBmYWxoYScsXG4gICAgICB9KTtcblxuICAgICAgKHJlcXVlc3QuY29udGV4dCBhcyBhbnkpLm90ZWwgPSB7XG4gICAgICAgIHNwYW5SZXN1bHQsXG4gICAgICAgIG1ldGVyLFxuICAgICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLFxuICAgICAgICBzdWNjZXNzQ291bnRlcixcbiAgICAgICAgZmFpbHVyZUNvdW50ZXIsXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50OiBzdGFnZSxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICByb3V0ZUtleSxcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsb2dnZWRVc2VyLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIGJlZm9yZSBob29rOicsIGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgYWZ0ZXI6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG90ZWxEYXRhID0gKHJlcXVlc3QuY29udGV4dCBhcyBhbnkpLm90ZWw7XG4gICAgICBpZiAoIW90ZWxEYXRhKSByZXR1cm47XG4gICAgICBjb25zdCBldmVudCA9IHJlcXVlc3QuZXZlbnQgYXMgYW55O1xuXG4gICAgICBjb25zdCBxdWVyeVN0cmluZ1BhcmFtZXRlcnMgPSBldmVudD8ucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHx8IHt9O1xuICAgICAgY29uc3Qgb3JpZ2luID0gcXVlcnlTdHJpbmdQYXJhbWV0ZXJzLm9yaWdpbiB8fCAndW5rbm93bic7XG4gICAgICBjb25zdCBsb2dnZWRVc2VyID0gZXh0cmFjdExvZ2dlZFVzZXIoZXZlbnQpO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHNwYW5SZXN1bHQsXG4gICAgICAgIHN1Y2Nlc3NDb3VudGVyLFxuICAgICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgIH0gPSBvdGVsRGF0YTtcblxuICAgICAgLy8gTWFyY2FyIHNwYW4gY29tbyBzdWNlc3NvIHVzYW5kbyBTdGFuZGFyZFRyYWNlclxuICAgICAgc3BhblJlc3VsdC5zZXRTdWNjZXNzKHRydWUpO1xuXG4gICAgICAvLyBNw6l0cmljYXNcbiAgICAgIHN1Y2Nlc3NDb3VudGVyLmFkZCgxLCB7XG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOlxuICAgICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSB8fCAndW5rbm93bicsXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAnZnVuY3Rpb24ubmFtZSc6XG4gICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIHx8ICd1bmtub3duJyxcbiAgICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogZW52aXJvbm1lbnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gTG9nIGVzdHJ1dHVyYWRvIGRlIHN1Y2Vzc29cbiAgICAgIGNvbnN0IHN0YW5kYXJkTG9nZ2VyID0gZ2V0U3RhbmRhcmRMb2dnZXIoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dJbmZvKHtcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSBhcyBzdHJpbmcsXG4gICAgICAgICAgaW52b2NhdGlvbklkOiBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uW1xuICAgICAgICAgICAgJ2Z1bmN0aW9uLmludm9jYXRpb25faWQnXG4gICAgICAgICAgXSBhcyBzdHJpbmcsXG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgIHJvdXRlS2V5OiBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyb3V0ZUtleSddIGFzIHN0cmluZyxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ3JlcXVlc3QuaWQnXSBhcyBzdHJpbmcsXG4gICAgICAgICAgbG9nZ2VkVXNlcixcbiAgICAgICAgfSxcbiAgICAgICAgcGVyZm9ybWFuY2U6IHtcbiAgICAgICAgICBkdXJhdGlvbk1zLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gRmluYWxpemFyIHNwYW5cbiAgICAgIHNwYW5SZXN1bHQuZW5kKCk7XG4gICAgICBhd2FpdCBmb3JjZUZsdXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG1pZGR5VGVsZW1ldHJ5TWlkZGxld2FyZSBhZnRlciBob29rOicsIGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgb25FcnJvcjogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3RlbERhdGEgPSAocmVxdWVzdC5jb250ZXh0IGFzIGFueSkub3RlbDtcbiAgICAgIGlmICghb3RlbERhdGEpIHJldHVybjtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBzcGFuUmVzdWx0LFxuICAgICAgICBmYWlsdXJlQ291bnRlcixcbiAgICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcbiAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9yaWdpbixcbiAgICAgIH0gPSBvdGVsRGF0YTtcbiAgICAgIGNvbnN0IGVycm9yID0gcmVxdWVzdC5lcnJvcjtcblxuICAgICAgLy8gTWFyY2FyIHNwYW4gY29tbyBlcnJvIHVzYW5kbyBTdGFuZGFyZFRyYWNlclxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHNwYW5SZXN1bHQuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICAvLyBNw6l0cmljYXNcbiAgICAgIGZhaWx1cmVDb3VudGVyLmFkZCgxLCB7XG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgZXJyb3JfdHlwZTogZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lIHx8ICdVbmtub3duRXJyb3InLFxuICAgICAgICAnZnVuY3Rpb24ubmFtZSc6XG4gICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIHx8ICd1bmtub3duJyxcbiAgICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogZW52aXJvbm1lbnQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lO1xuXG4gICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLnJlY29yZChkdXJhdGlvbk1zLCB7XG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICAnZnVuY3Rpb24ubmFtZSc6XG4gICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIHx8ICd1bmtub3duJyxcbiAgICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogZW52aXJvbm1lbnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gTG9nIGVzdHJ1dHVyYWRvIGRlIGVycm9cbiAgICAgIGNvbnN0IHN0YW5kYXJkTG9nZ2VyID0gZ2V0U3RhbmRhcmRMb2dnZXIoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dFcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJyxcbiAgICAgICAgZXJyb3I6IGVycm9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGV4ZWN1dGlvbjoge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIGFzIHN0cmluZyxcbiAgICAgICAgICBpbnZvY2F0aW9uSWQ6IHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bXG4gICAgICAgICAgICAnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCdcbiAgICAgICAgICBdIGFzIHN0cmluZyxcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6IHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bXG4gICAgICAgICAgICAnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCdcbiAgICAgICAgICBdIGFzIHN0cmluZyxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgIH0sXG4gICAgICAgIHBlcmZvcm1hbmNlOiB7XG4gICAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIGVycm9yVHlwZTogZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZpbmFsaXphciBzcGFuXG4gICAgICBzcGFuUmVzdWx0LmVuZCgpO1xuICAgICAgYXdhaXQgZm9yY2VGbHVzaCgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBtaWRkeVRlbGVtZXRyeU1pZGRsZXdhcmUgb25FcnJvciBob29rOicsIGVycm9yKTtcbiAgICB9XG4gIH0sXG59KTtcbiJdfQ==
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zc3QvbWlkZHkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFzQ0EsOENBcUJDO0FBMURELDRDQUFvRTtBQUNwRSw0Q0FBZ0Y7QUFDaEYsMkNBQXlDO0FBQ3pDLHFDQUFpRDtBQUlqRCxTQUFTLHFCQUFxQixDQUFDLEtBQVU7O0lBUXZDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxhQUFhLEVBQUUsQ0FBQSxNQUFBLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksU0FBUztZQUM3RCxVQUFVLEVBQ1IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEtBQUksTUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksMENBQUUsSUFBSSxDQUFBO1lBQ3BFLGlCQUFpQixFQUFFLENBQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRyxZQUFZLENBQUMsS0FBSSxTQUFTO1lBQzdELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRTtZQUNsRCw4QkFBOEIsRUFBRSxLQUFLLENBQUMscUJBQXFCLElBQUksRUFBRTtZQUNqRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLGFBQWEsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLFNBQVM7UUFDNUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUztRQUNuQyxpQkFBaUIsRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztRQUM3RCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUU7UUFDbEQsOEJBQThCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixJ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QUNwQzthQUNGLENBQUMsQ0FBQztZQUdILFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUEsc0JBQVUsR0FBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDO0FBOVJVLFFBQUEsd0JBQXdCLDRCQThSbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWlkZHkgZnJvbSAnQG1pZGR5L2NvcmUnO1xuaW1wb3J0IHsgQXR0cmlidXRlcywgbWV0cmljcywgVmFsdWVUeXBlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IGZvcmNlRmx1c2gsIGdldFN0YW5kYXJkTG9nZ2VyLCBnZXRTdGFuZGFyZFRyYWNlciB9IGZyb20gJy4uL3RlbGVtZXRyeSc7XG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTdGFnZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5pbnRlcmZhY2UgTWlkZHlNaWRkbGV3YXJlT3B0aW9ucyB7fVxuXG5mdW5jdGlvbiBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQ6IGFueSk6IHtcbiAgJ2h0dHAubWV0aG9kJzogc3RyaW5nO1xuICAnaHR0cC51cmwnOiBzdHJpbmc7XG4gICdodHRwLnVzZXJfYWdlbnQnOiBzdHJpbmc7XG4gICdodHRwLnBhdGhfcGFyYW1ldGVycyc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICdodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgJ2h0dHAuYm9keSc6IGFueTtcbn0ge1xuICBpZiAoZXZlbnQucmVxdWVzdENvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2h0dHAubWV0aG9kJzogZXZlbnQucmVxdWVzdENvbnRleHQuaHR0cD8ubWV0aG9kIHx8ICd1bmtub3duJyxcbiAgICAgICdodHRwLnVybCc6XG4gICAgICAgIGV2ZW50LnJlcXVlc3RDb250ZXh0LmRvbWFpbk5hbWUgJiYgZXZlbnQucmVxdWVzdENvbnRleHQuaHR0cD8ucGF0aCxcbiAgICAgICdodHRwLnVzZXJfYWdlbnQnOiBldmVudC5oZWFkZXJzPy5bJ3VzZXItYWdlbnQnXSB8fCAndW5rbm93bicsXG4gICAgICAnaHR0cC5wYXRoX3BhcmFtZXRlcnMnOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICAgICdodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJzogZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgJ2h0dHAuYm9keSc6IGV2ZW50LmJvZHkgfHwge30sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJ2h0dHAubWV0aG9kJzogZXZlbnQuaHR0cE1ldGhvZCB8fCAndW5rbm93bicsXG4gICAgJ2h0dHAudXJsJzogZXZlbnQucGF0aCB8fCAndW5rbm93bicsXG4gICAgJ2h0dHAudXNlcl9hZ2VudCc6IGV2ZW50LmhlYWRlcnM/LlsnVXNlci1BZ2VudCddIHx8ICd1bmtub3duJyxcbiAgICAnaHR0cC5wYXRoX3BhcmFtZXRlcnMnOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICAnaHR0cC5xdWVyeV9zdHJpbmdfcGFyYW1ldGVycyc6IGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fSxcbiAgICAnaHR0cC5ib2R5JzogZXZlbnQuYm9keSB8fCB7fSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMb2dnZWRVc2VyKFxuICBldmVudDogYW55XG4pOiB7ICd1c2VyLmVtYWlsJz86IHN0cmluZzsgJ3VzZXIudWlkJz86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxvZ2dlZFVzZXIgPSBldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI/LmxhbWJkYT8ubG9nZ2VyVXNlcjtcblxuICBpZiAobG9nZ2VkVXNlcikge1xuICAgIGxvZ2dlZFVzZXIgPVxuICAgICAgdHlwZW9mIGxvZ2dlZFVzZXIgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShsb2dnZWRVc2VyKSA6IGxvZ2dlZFVzZXI7XG4gICAgaWYgKFxuICAgICAgbG9nZ2VkVXNlcj8udXNlciAmJlxuICAgICAgbG9nZ2VkVXNlcj8udXNlcj8uYWNjb3VudF91c2VyICYmXG4gICAgICBsb2dnZWRVc2VyPy51c2VyPy5hY2NvdW50X3VzZXI/LmFjY291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLmVtYWlsJzogbG9nZ2VkVXNlci51c2VyLmVtYWlsLFxuICAgICAgICAndXNlci51aWQnOiBsb2dnZWRVc2VyLnVzZXIuYWNjb3VudF91c2VyLmFjY291bnQudWlkLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVmYXVsdEF0dHJpYnV0ZXMocmVxdWVzdDogYW55KSB7XG4gIGNvbnN0IHsgY29udGV4dDogbGFtYmRhQ29udGV4dCB9ID0gcmVxdWVzdDtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gbGFtYmRhQ29udGV4dC5mdW5jdGlvbk5hbWU7XG4gIGNvbnN0IGludm9jYXRpb25JZCA9IGxhbWJkYUNvbnRleHQuYXdzUmVxdWVzdElkO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnc3N0LXNlcnZpY2UnO1xuICBjb25zdCBldmVudCA9IHJlcXVlc3QuZXZlbnQ7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycyA9IGV2ZW50Py5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgfHwge307XG4gIGNvbnN0IGh0dHAgPSBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQpO1xuICBjb25zdCBvcmlnaW4gPSBxdWVyeVN0cmluZ1BhcmFtZXRlcnMub3JpZ2luIHx8ICd1bmtub3duJztcbiAgY29uc3Qgcm91dGVLZXkgPVxuICAgIGV2ZW50Py5yb3V0ZUtleSB8fCBldmVudD8ucmVxdWVzdENvbnRleHQ/LnJvdXRlS2V5IHx8ICd1bmtub3duJztcbiAgY29uc3QgcmVxdWVzdElkID1cbiAgICBldmVudD8ucmVxdWVzdElkIHx8IGV2ZW50Py5yZXF1ZXN0Q29udGV4dD8ucmVxdWVzdElkIHx8ICd1bmtub3duJztcbiAgY29uc3QgbG9nZ2VkVXNlciA9IGV4dHJhY3RMb2dnZWRVc2VyKGV2ZW50KTtcbiAgY29uc3Qgc3RhZ2UgPSBnZXRFbnZpcm9ubWVudFN0YWdlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBmdW5jdGlvbk5hbWUsXG4gICAgaW52b2NhdGlvbklkLFxuICAgIHNlcnZpY2VOYW1lLFxuICAgIG9yaWdpbixcbiAgICByb3V0ZUtleSxcbiAgICByZXF1ZXN0SWQsXG4gICAgc3RhZ2UsXG4gICAgLi4uaHR0cCxcbiAgICAuLi5sb2dnZWRVc2VyLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlID0gKFxuICBvcHRpb25zPzogTWlkZHlNaWRkbGV3YXJlT3B0aW9uc1xuKTogbWlkZHkuTWlkZGxld2FyZU9iaiA9PiAoe1xuICBiZWZvcmU6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3QpO1xuXG4gICAgICAvLyBVc2FyIFN0YW5kYXJkVHJhY2VyIHBhcmEgY3JpYXIgc3BhbiBjb20gYXRyaWJ1dG9zIHBhZHJvbml6YWRvc1xuICAgICAgY29uc3Qgc3RhbmRhcmRUcmFjZXIgPSBnZXRTdGFuZGFyZFRyYWNlcigpO1xuICAgICAgY29uc3Qgc3BhblJlc3VsdCA9IHN0YW5kYXJkVHJhY2VyLnN0YXJ0U3Bhbih7XG4gICAgICAgIHNwYW5OYW1lOiBhdHRyaWJ1dGVzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgc2VydmljZU5hbWU6IGF0dHJpYnV0ZXMuc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50OiBhdHRyaWJ1dGVzLnN0YWdlLFxuICAgICAgICBodHRwOiB7XG4gICAgICAgICAgbWV0aG9kOiBhdHRyaWJ1dGVzWydodHRwLm1ldGhvZCddLFxuICAgICAgICAgIHVybDogYXR0cmlidXRlc1snaHR0cC51cmwnXSxcbiAgICAgICAgICBhZ2VudDogYXR0cmlidXRlc1snaHR0cC51c2VyX2FnZW50J10sXG4gICAgICAgICAgcGFyYW1zOiBhdHRyaWJ1dGVzWydodHRwLnBhdGhfcGFyYW1ldGVycyddLFxuICAgICAgICAgIHF1ZXJ5OiBhdHRyaWJ1dGVzWydodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGV4ZWN1dGlvbjoge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogYXR0cmlidXRlcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkOiBhdHRyaWJ1dGVzLmludm9jYXRpb25JZCxcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6IGF0dHJpYnV0ZXMuaW52b2NhdGlvbklkLFxuICAgICAgICAgIG9yaWdpbjogYXR0cmlidXRlcy5vcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IGF0dHJpYnV0ZXMucm91dGVLZXksXG4gICAgICAgICAgcmVxdWVzdElkOiBhdHRyaWJ1dGVzLnJlcXVlc3RJZCxcbiAgICAgICAgICBsb2dnZWRVc2VyOiB7XG4gICAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICAgICAgdWlkOiBhdHRyaWJ1dGVzWyd1c2VyLnVpZCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKG9yaWdpbik7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0gPSBtZXRlci5jcmVhdGVIaXN0b2dyYW0oXG4gICAgICAgICdsYW1iZGFfZXhlY3V0aW9uX2R1cmF0aW9uJyxcbiAgICAgICAge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGVtcG8gdG90YWwgZGUgZXhlY3XDp8OjbyBkbyBMYW1iZGEgZW0gbXMnLFxuICAgICAgICAgIHVuaXQ6ICdtcycsXG4gICAgICAgICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGUuRE9VQkxFLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3Qgc3VjY2Vzc0NvdW50ZXIgPSBtZXRlci5jcmVhdGVDb3VudGVyKCd0b3RhbF9zdWNjZXNzZnVsX3B1cmNoYXNlcycsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBkZSBjb21wcmFzIGJlbS1zdWNlZGlkYXMnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWlsdXJlQ291bnRlciA9IG1ldGVyLmNyZWF0ZUNvdW50ZXIoJ3RvdGFsX2ZhaWxlZF9wdXJjaGFzZXMnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgZGUgY29tcHJhcyBjb20gZmFsaGEnLFxuICAgICAgfSk7XG5cbiAgICAgIChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsID0ge1xuICAgICAgICBzcGFuUmVzdWx0LFxuICAgICAgICBtZXRlcixcbiAgICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcbiAgICAgICAgc3VjY2Vzc0NvdW50ZXIsXG4gICAgICAgIGZhaWx1cmVDb3VudGVyLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBhdHRyaWJ1dGVzLnNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudDogYXR0cmlidXRlcy5zdGFnZSxcbiAgICAgICAgb3JpZ2luOiBhdHRyaWJ1dGVzLm9yaWdpbixcbiAgICAgICAgcm91dGVLZXk6IGF0dHJpYnV0ZXMucm91dGVLZXksXG4gICAgICAgIHJlcXVlc3RJZDogYXR0cmlidXRlcy5yZXF1ZXN0SWQsXG4gICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICAgIHVpZDogYXR0cmlidXRlc1sndXNlci51aWQnXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG1pZGR5VGVsZW1ldHJ5TWlkZGxld2FyZSBiZWZvcmUgaG9vazonLCBlcnJvcik7XG4gICAgfVxuICB9LFxuXG4gIGFmdGVyOiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdGVsRGF0YSA9IChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsO1xuICAgICAgaWYgKCFvdGVsRGF0YSkgcmV0dXJuO1xuICAgICAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LmV2ZW50IGFzIGFueTtcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGV4dHJhY3REZWZhdWx0QXR0cmlidXRlcyhldmVudCk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BhblJlc3VsdCxcbiAgICAgICAgc3VjY2Vzc0NvdW50ZXIsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0sXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgfSA9IG90ZWxEYXRhO1xuXG4gICAgICAvLyBNYXJjYXIgc3BhbiBjb21vIHN1Y2Vzc28gdXNhbmRvIFN0YW5kYXJkVHJhY2VyXG4gICAgICBzcGFuUmVzdWx0LnNldFN1Y2Nlc3ModHJ1ZSk7XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSB8fFxuICAgICAgICAoYXR0cmlidXRlcy5mdW5jdGlvbk5hbWUgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IHJvdXRlS2V5ID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/Llsncm91dGUua2V5J10gfHxcbiAgICAgICAgKGF0dHJpYnV0ZXMucm91dGVLZXkgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ3JlcXVlc3QuaWQnXSB8fFxuICAgICAgICAoYXR0cmlidXRlcy5yZXF1ZXN0SWQgYXMgc3RyaW5nKTtcblxuICAgICAgLy8gTcOpdHJpY2FzXG4gICAgICBzdWNjZXNzQ291bnRlci5hZGQoMSwge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgICdmdW5jdGlvbi5uYW1lJzogZnVuY3Rpb25OYW1lLFxuICAgICAgICAncmVxdWVzdC5pZCc6IHJlcXVlc3RJZCxcbiAgICAgICAgJ3JvdXRlLmtleSc6IHJvdXRlS2V5LFxuICAgICAgICAnc2VydmljZS5uYW1lJzogc2VydmljZU5hbWUsXG4gICAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnOiBlbnZpcm9ubWVudCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0ucmVjb3JkKGR1cmF0aW9uTXMsIHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExvZyBlc3RydXR1cmFkbyBkZSBzdWNlc3NvXG4gICAgICBjb25zdCBzdGFuZGFyZExvZ2dlciA9IGdldFN0YW5kYXJkTG9nZ2VyKGF0dHJpYnV0ZXMgYXMgYW55IGFzIEF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dJbmZvKHtcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBodHRwOiB7XG4gICAgICAgICAgYWdlbnQ6IGF0dHJpYnV0ZXNbJ2h0dHAudXNlcl9hZ2VudCddLFxuICAgICAgICAgIG1ldGhvZDogYXR0cmlidXRlc1snaHR0cC5tZXRob2QnXSxcbiAgICAgICAgICB1cmw6IGF0dHJpYnV0ZXNbJ2h0dHAudXJsJ10sXG4gICAgICAgICAgcGFyYW1zOiBhdHRyaWJ1dGVzWydodHRwLnBhdGhfcGFyYW1ldGVycyddLFxuICAgICAgICAgIHF1ZXJ5OiBhdHRyaWJ1dGVzWydodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgYm9keTogYXR0cmlidXRlc1snaHR0cC5ib2R5J10sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IHtcbiAgICAgICAgICB1aWQ6IGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10sXG4gICAgICAgICAgZW1haWw6IGF0dHJpYnV0ZXNbJ3VzZXIuZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhlY3V0aW9uOiB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkOlxuICAgICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddIHx8XG4gICAgICAgICAgICAoYXR0cmlidXRlcy5pbnZvY2F0aW9uSWQgYXMgc3RyaW5nKSxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IHJvdXRlS2V5LFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICAgIHVpZDogKHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2xvZ2dlZF91c2VyLnVpZCddIHx8XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGVtYWlsOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIuZW1haWwnXSB8fFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzWyd1c2VyLmVtYWlsJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5hbGl6YXIgc3BhblxuICAgICAgc3BhblJlc3VsdC5lbmQoKTtcbiAgICAgIGF3YWl0IGZvcmNlRmx1c2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIGFmdGVyIGhvb2s6JywgZXJyb3IpO1xuICAgIH1cbiAgfSxcblxuICBvbkVycm9yOiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdGVsRGF0YSA9IChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsO1xuICAgICAgaWYgKCFvdGVsRGF0YSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3QuZXZlbnQpO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHNwYW5SZXN1bHQsXG4gICAgICAgIGZhaWx1cmVDb3VudGVyLFxuICAgICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgfSA9IG90ZWxEYXRhO1xuICAgICAgY29uc3QgZXJyb3IgPSByZXF1ZXN0LmVycm9yO1xuXG4gICAgICAvLyBNYXJjYXIgc3BhbiBjb21vIGVycm8gdXNhbmRvIFN0YW5kYXJkVHJhY2VyXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgc3BhblJlc3VsdC5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLmZ1bmN0aW9uTmFtZSB8fFxuICAgICAgICAndW5rbm93bic7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyZXF1ZXN0LmlkJ10gfHxcbiAgICAgICAgYXR0cmlidXRlcy5yZXF1ZXN0SWQgfHxcbiAgICAgICAgJ3Vua25vd24nO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyb3V0ZS5rZXknXSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLnJvdXRlS2V5IHx8XG4gICAgICAgICd1bmtub3duJztcblxuICAgICAgLy8gTcOpdHJpY2FzXG4gICAgICBmYWlsdXJlQ291bnRlci5hZGQoMSwge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGVycm9yX3R5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSB8fCAnVW5rbm93bkVycm9yJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExvZyBlc3RydXR1cmFkbyBkZSBlcnJvXG4gICAgICBjb25zdCBzdGFuZGFyZExvZ2dlciA9IGdldFN0YW5kYXJkTG9nZ2VyKGF0dHJpYnV0ZXMgYXMgYW55IGFzIEF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dFcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJyxcbiAgICAgICAgZXJyb3I6IGVycm9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGh0dHA6IHtcbiAgICAgICAgICBhZ2VudDogYXR0cmlidXRlc1snaHR0cC51c2VyX2FnZW50J10sXG4gICAgICAgICAgbWV0aG9kOiBhdHRyaWJ1dGVzWydodHRwLm1ldGhvZCddLFxuICAgICAgICAgIHVybDogYXR0cmlidXRlc1snaHR0cC51cmwnXSxcbiAgICAgICAgICBwYXJhbXM6IGF0dHJpYnV0ZXNbJ2h0dHAucGF0aF9wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgcXVlcnk6IGF0dHJpYnV0ZXNbJ2h0dHAucXVlcnlfc3RyaW5nX3BhcmFtZXRlcnMnXSxcbiAgICAgICAgICBib2R5OiBhdHRyaWJ1dGVzWydodHRwLmJvZHknXSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcjoge1xuICAgICAgICAgIHVpZDogYXR0cmlidXRlc1sndXNlci51aWQnXSxcbiAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICB9LFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBpbnZvY2F0aW9uSWQ6XG4gICAgICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJ10gfHxcbiAgICAgICAgICAgIChhdHRyaWJ1dGVzLmludm9jYXRpb25JZCBhcyBzdHJpbmcpLFxuICAgICAgICAgIGF3c1JlcXVlc3RJZDogc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LltcbiAgICAgICAgICAgICdmdW5jdGlvbi5hd3NfcmVxdWVzdF9pZCdcbiAgICAgICAgICBdIGFzIHN0cmluZyxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IHJvdXRlS2V5LFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICAgIHVpZDogKHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2xvZ2dlZF91c2VyLnVpZCddIHx8XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGVtYWlsOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIuZW1haWwnXSB8fFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzWyd1c2VyLmVtYWlsJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlcnJvclR5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5hbGl6YXIgc3BhblxuICAgICAgc3BhblJlc3VsdC5lbmQoKTtcbiAgICAgIGF3YWl0IGZvcmNlRmx1c2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIG9uRXJyb3IgaG9vazonLCBlcnJvcik7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
|