sonamu 0.9.9 → 0.9.11
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/dist/ai/agents/agent.d.ts.map +1 -1
- package/dist/ai/agents/agent.js +4 -2
- package/dist/ai/providers/rtzr/api.d.ts +1 -1
- package/dist/api/decorators.d.ts +0 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +8 -6
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +123 -12
- package/dist/api/websocket-helpers.d.ts +1 -3
- package/dist/api/websocket-helpers.d.ts.map +1 -1
- package/dist/api/websocket-helpers.js +2 -15
- package/dist/stream/index.d.ts +3 -0
- package/dist/stream/index.d.ts.map +1 -1
- package/dist/stream/index.js +8 -2
- package/dist/stream/ws-core.d.ts +1 -0
- package/dist/stream/ws-core.d.ts.map +1 -1
- package/dist/stream/ws-delivery.d.ts +8 -0
- package/dist/stream/ws-delivery.d.ts.map +1 -1
- package/dist/stream/ws-delivery.js +160 -14
- package/dist/stream/ws-local-connection-store.d.ts +2 -0
- package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
- package/dist/stream/ws-local-connection-store.js +21 -1
- package/dist/stream/ws-registry.d.ts +6 -2
- package/dist/stream/ws-registry.d.ts.map +1 -1
- package/dist/stream/ws-registry.js +170 -6
- package/dist/stream/ws-telemetry-memory.d.ts +28 -0
- package/dist/stream/ws-telemetry-memory.d.ts.map +1 -0
- package/dist/stream/ws-telemetry-memory.js +180 -0
- package/dist/stream/ws-telemetry-trace.d.ts +12 -0
- package/dist/stream/ws-telemetry-trace.d.ts.map +1 -0
- package/dist/stream/ws-telemetry-trace.js +41 -0
- package/dist/stream/ws-telemetry.d.ts +509 -0
- package/dist/stream/ws-telemetry.d.ts.map +1 -0
- package/dist/stream/ws-telemetry.js +931 -0
- package/dist/stream/ws.d.ts +10 -3
- package/dist/stream/ws.d.ts.map +1 -1
- package/dist/stream/ws.js +306 -27
- package/dist/syncer/file-patterns.js +1 -1
- package/dist/syncer/syncer.d.ts +1 -1
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +7 -4
- package/dist/template/template.d.ts +1 -2
- package/dist/template/template.d.ts.map +1 -1
- package/dist/template/template.js +3 -4
- package/dist/template/zod-converter.d.ts +4 -4
- package/dist/testing/dev-vitest-manager.d.ts +1 -1
- package/dist/testing/dev-vitest-manager.js +2 -2
- package/dist/types/types.d.ts +20 -6
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +2 -2
- package/dist/ui-web/assets/{index-BmThfg-s.js → index-Df8q-fhb.js} +45 -45
- package/dist/ui-web/index.html +1 -1
- package/dist/utils/class-name.d.ts +6 -0
- package/dist/utils/class-name.d.ts.map +1 -0
- package/dist/utils/class-name.js +19 -0
- package/package.json +4 -4
- package/src/ai/agents/agent.ts +2 -1
- package/src/api/__tests__/sonamu.websocket.test.ts +84 -10
- package/src/api/decorators.ts +6 -6
- package/src/api/sonamu.ts +142 -7
- package/src/api/websocket-helpers.ts +2 -28
- package/src/shared/app.shared.ts.txt +8 -7
- package/src/shared/web.shared.ts.txt +8 -7
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/stream/__tests__/ws-telemetry.test.ts +821 -0
- package/src/stream/__tests__/ws.test.ts +362 -2
- package/src/stream/index.ts +3 -0
- package/src/stream/ws-core.ts +2 -0
- package/src/stream/ws-delivery.ts +161 -19
- package/src/stream/ws-local-connection-store.ts +33 -0
- package/src/stream/ws-registry.ts +186 -5
- package/src/stream/ws-telemetry-memory.ts +246 -0
- package/src/stream/ws-telemetry-trace.ts +52 -0
- package/src/stream/ws-telemetry.ts +1772 -0
- package/src/stream/ws.ts +332 -34
- package/src/syncer/file-patterns.ts +2 -2
- package/src/syncer/syncer.ts +8 -4
- package/src/template/__tests__/services.template.websocket.test.ts +2 -0
- package/src/template/template.ts +2 -3
- package/src/testing/dev-vitest-manager.ts +1 -1
- package/src/types/types.ts +18 -2
- package/src/utils/class-name.ts +12 -0
|
@@ -2,11 +2,24 @@ import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
|
2
2
|
import { WebSocketAudience, init_ws_audience } from "./ws-audience.js";
|
|
3
3
|
import { WebSocketAudienceResolver, init_ws_audience_resolver } from "./ws-audience-resolver.js";
|
|
4
4
|
import { NoopWebSocketClusterBus, init_ws_cluster_bus } from "./ws-cluster-bus.js";
|
|
5
|
+
import { NoopWebSocketTelemetryController, init_ws_telemetry } from "./ws-telemetry.js";
|
|
5
6
|
import { WebSocketDeliveryEngine, init_ws_delivery } from "./ws-delivery.js";
|
|
6
7
|
import { WebSocketLocalConnectionStore, init_ws_local_connection_store } from "./ws-local-connection-store.js";
|
|
7
8
|
import { InMemoryWebSocketPresenceStore, init_ws_presence_store } from "./ws-presence-store.js";
|
|
8
9
|
|
|
9
10
|
//#region src/stream/ws-registry.ts
|
|
11
|
+
function getConnectionTelemetryContext(connection) {
|
|
12
|
+
if (!connection || !isTelemetryContextProvider(connection)) {
|
|
13
|
+
return {};
|
|
14
|
+
}
|
|
15
|
+
return connection.getTelemetryContext();
|
|
16
|
+
}
|
|
17
|
+
function formatUserId(userId) {
|
|
18
|
+
return userId === undefined ? undefined : String(userId);
|
|
19
|
+
}
|
|
20
|
+
function isTelemetryContextProvider(connection) {
|
|
21
|
+
return "getTelemetryContext" in connection && typeof connection.getTelemetryContext === "function";
|
|
22
|
+
}
|
|
10
23
|
var WebSocketRegistry;
|
|
11
24
|
var init_ws_registry = __esmMin((() => {
|
|
12
25
|
init_ws_audience();
|
|
@@ -15,6 +28,7 @@ var init_ws_registry = __esmMin((() => {
|
|
|
15
28
|
init_ws_delivery();
|
|
16
29
|
init_ws_local_connection_store();
|
|
17
30
|
init_ws_presence_store();
|
|
31
|
+
init_ws_telemetry();
|
|
18
32
|
WebSocketRegistry = class {
|
|
19
33
|
nodeId;
|
|
20
34
|
localConnections = new WebSocketLocalConnectionStore();
|
|
@@ -22,10 +36,12 @@ var init_ws_registry = __esmMin((() => {
|
|
|
22
36
|
clusterBus;
|
|
23
37
|
audienceResolver;
|
|
24
38
|
deliveryEngine;
|
|
25
|
-
|
|
26
|
-
|
|
39
|
+
telemetryController;
|
|
40
|
+
constructor(options) {
|
|
41
|
+
this.nodeId = options.nodeId;
|
|
27
42
|
this.presenceStore = options.presenceStore ?? new InMemoryWebSocketPresenceStore();
|
|
28
43
|
this.clusterBus = options.clusterBus ?? new NoopWebSocketClusterBus();
|
|
44
|
+
this.telemetryController = options.telemetryController ?? new NoopWebSocketTelemetryController();
|
|
29
45
|
this.audienceResolver = new WebSocketAudienceResolver({
|
|
30
46
|
nodeId: this.nodeId,
|
|
31
47
|
presenceStore: this.presenceStore
|
|
@@ -34,39 +50,187 @@ var init_ws_registry = __esmMin((() => {
|
|
|
34
50
|
nodeId: this.nodeId,
|
|
35
51
|
localConnections: this.localConnections,
|
|
36
52
|
audienceResolver: this.audienceResolver,
|
|
37
|
-
clusterBus: this.clusterBus
|
|
53
|
+
clusterBus: this.clusterBus,
|
|
54
|
+
telemetryController: this.telemetryController
|
|
38
55
|
});
|
|
56
|
+
this.telemetryController.registerMetricSource({ collect: (_now) => {
|
|
57
|
+
const stats = this.presenceStore.getStats();
|
|
58
|
+
const localSnapshot = this.localConnections.getTelemetrySnapshot();
|
|
59
|
+
return {
|
|
60
|
+
activeConnections: stats.totalConnections,
|
|
61
|
+
activeConnectionsByNamespace: stats.byNamespace,
|
|
62
|
+
roomCount: stats.totalRooms,
|
|
63
|
+
pendingInboundMessages: localSnapshot.pendingInboundMessages,
|
|
64
|
+
pendingOutboundMessages: localSnapshot.pendingOutboundMessages,
|
|
65
|
+
socketBufferedBytes: localSnapshot.socketBufferedBytes
|
|
66
|
+
};
|
|
67
|
+
} });
|
|
39
68
|
}
|
|
40
69
|
register(connection, active = true) {
|
|
41
70
|
this.localConnections.register(connection);
|
|
42
|
-
|
|
71
|
+
const meta = this.presenceStore.register({
|
|
43
72
|
sessionId: connection.id,
|
|
44
73
|
nodeId: this.nodeId,
|
|
45
74
|
namespace: connection.namespace,
|
|
46
75
|
active
|
|
47
76
|
});
|
|
77
|
+
this.telemetryController.emit({
|
|
78
|
+
name: "ws.connection.registered",
|
|
79
|
+
level: "info",
|
|
80
|
+
connectionId: connection.id,
|
|
81
|
+
namespace: connection.namespace,
|
|
82
|
+
userId: connection.userId,
|
|
83
|
+
...getConnectionTelemetryContext(connection)
|
|
84
|
+
});
|
|
85
|
+
this.telemetryController.recordMetric({
|
|
86
|
+
name: "sonamu.ws.connections",
|
|
87
|
+
kind: "counter",
|
|
88
|
+
value: 1,
|
|
89
|
+
unit: "1",
|
|
90
|
+
tags: {
|
|
91
|
+
outcome: "registered",
|
|
92
|
+
namespace: connection.namespace
|
|
93
|
+
},
|
|
94
|
+
userId: connection.userId
|
|
95
|
+
});
|
|
96
|
+
return meta;
|
|
48
97
|
}
|
|
49
98
|
activate(connectionId) {
|
|
99
|
+
if (!this.presenceStore.getConnection(connectionId)) {
|
|
100
|
+
this.emitMutationSkipped(connectionId, { operation: "activate" });
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
50
103
|
this.presenceStore.activate(connectionId);
|
|
104
|
+
const connection = this.localConnections.getConnection(connectionId);
|
|
105
|
+
this.telemetryController.emit({
|
|
106
|
+
name: "ws.connection.activated",
|
|
107
|
+
level: "info",
|
|
108
|
+
connectionId,
|
|
109
|
+
userId: connection?.userId,
|
|
110
|
+
...getConnectionTelemetryContext(connection)
|
|
111
|
+
});
|
|
51
112
|
}
|
|
52
113
|
unregister(connectionId) {
|
|
53
|
-
this.
|
|
114
|
+
const connection = this.localConnections.getConnection(connectionId);
|
|
115
|
+
const telemetryContext = getConnectionTelemetryContext(connection);
|
|
116
|
+
const userId = connection?.userId ?? formatUserId(this.presenceStore.getConnection(connectionId)?.userId);
|
|
117
|
+
const meta = this.presenceStore.unregister(connectionId);
|
|
54
118
|
this.localConnections.unregister(connectionId);
|
|
119
|
+
this.telemetryController.emit({
|
|
120
|
+
name: "ws.connection.unregistered",
|
|
121
|
+
level: "debug",
|
|
122
|
+
connectionId,
|
|
123
|
+
namespace: meta?.namespace,
|
|
124
|
+
userId,
|
|
125
|
+
...telemetryContext
|
|
126
|
+
});
|
|
127
|
+
if (meta) {
|
|
128
|
+
this.telemetryController.recordMetric({
|
|
129
|
+
name: "sonamu.ws.connections",
|
|
130
|
+
kind: "counter",
|
|
131
|
+
value: 1,
|
|
132
|
+
unit: "1",
|
|
133
|
+
tags: {
|
|
134
|
+
outcome: "unregistered",
|
|
135
|
+
namespace: meta.namespace
|
|
136
|
+
},
|
|
137
|
+
userId
|
|
138
|
+
});
|
|
139
|
+
}
|
|
55
140
|
}
|
|
56
141
|
touch(connectionId) {
|
|
57
142
|
this.presenceStore.touch(connectionId);
|
|
58
143
|
}
|
|
59
144
|
setUserId(connectionId, userId) {
|
|
145
|
+
if (!this.presenceStore.getConnection(connectionId)) {
|
|
146
|
+
this.emitMutationSkipped(connectionId, {
|
|
147
|
+
operation: "setUserId",
|
|
148
|
+
userId
|
|
149
|
+
});
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
60
152
|
this.presenceStore.setUserId(connectionId, userId);
|
|
153
|
+
const meta = this.presenceStore.getConnection(connectionId);
|
|
154
|
+
this.telemetryController.emit({
|
|
155
|
+
name: "ws.user.bound",
|
|
156
|
+
level: "debug",
|
|
157
|
+
connectionId,
|
|
158
|
+
namespace: meta?.namespace,
|
|
159
|
+
userId: String(userId),
|
|
160
|
+
detail: { userId },
|
|
161
|
+
...getConnectionTelemetryContext(this.localConnections.getConnection(connectionId))
|
|
162
|
+
});
|
|
61
163
|
}
|
|
62
164
|
clearUserId(connectionId) {
|
|
165
|
+
const meta = this.presenceStore.getConnection(connectionId);
|
|
166
|
+
if (!meta) {
|
|
167
|
+
this.emitMutationSkipped(connectionId, { operation: "clearUserId" });
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const userId = meta.userId;
|
|
63
171
|
this.presenceStore.clearUserId(connectionId);
|
|
172
|
+
this.telemetryController.emit({
|
|
173
|
+
name: "ws.user.cleared",
|
|
174
|
+
level: "debug",
|
|
175
|
+
connectionId,
|
|
176
|
+
namespace: meta.namespace,
|
|
177
|
+
userId: formatUserId(userId),
|
|
178
|
+
detail: userId !== undefined ? { userId } : undefined,
|
|
179
|
+
...getConnectionTelemetryContext(this.localConnections.getConnection(connectionId))
|
|
180
|
+
});
|
|
64
181
|
}
|
|
65
182
|
join(connectionId, roomId) {
|
|
183
|
+
if (!this.presenceStore.getConnection(connectionId)) {
|
|
184
|
+
this.emitMutationSkipped(connectionId, {
|
|
185
|
+
operation: "join",
|
|
186
|
+
roomId
|
|
187
|
+
});
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
66
190
|
this.presenceStore.join(connectionId, roomId);
|
|
191
|
+
const meta = this.presenceStore.getConnection(connectionId);
|
|
192
|
+
const connection = this.localConnections.getConnection(connectionId);
|
|
193
|
+
this.telemetryController.emit({
|
|
194
|
+
name: "ws.room.joined",
|
|
195
|
+
level: "debug",
|
|
196
|
+
connectionId,
|
|
197
|
+
namespace: meta?.namespace,
|
|
198
|
+
userId: connection?.userId ?? formatUserId(meta?.userId),
|
|
199
|
+
detail: { roomId },
|
|
200
|
+
...getConnectionTelemetryContext(connection)
|
|
201
|
+
});
|
|
67
202
|
}
|
|
68
203
|
leave(connectionId, roomId) {
|
|
204
|
+
const meta = this.presenceStore.getConnection(connectionId);
|
|
205
|
+
if (!meta) {
|
|
206
|
+
this.emitMutationSkipped(connectionId, {
|
|
207
|
+
operation: "leave",
|
|
208
|
+
roomId
|
|
209
|
+
});
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
69
212
|
this.presenceStore.leave(connectionId, roomId);
|
|
213
|
+
const connection = this.localConnections.getConnection(connectionId);
|
|
214
|
+
this.telemetryController.emit({
|
|
215
|
+
name: "ws.room.left",
|
|
216
|
+
level: "debug",
|
|
217
|
+
connectionId,
|
|
218
|
+
namespace: meta.namespace,
|
|
219
|
+
userId: connection?.userId ?? formatUserId(meta.userId),
|
|
220
|
+
detail: { roomId },
|
|
221
|
+
...getConnectionTelemetryContext(connection)
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
emitMutationSkipped(connectionId, detail) {
|
|
225
|
+
this.telemetryController.emit({
|
|
226
|
+
name: "ws.registry.mutation.skipped",
|
|
227
|
+
level: "debug",
|
|
228
|
+
connectionId,
|
|
229
|
+
detail: {
|
|
230
|
+
...detail,
|
|
231
|
+
reason: "connectionMissing"
|
|
232
|
+
}
|
|
233
|
+
});
|
|
70
234
|
}
|
|
71
235
|
broadcast(event, data, namespace) {
|
|
72
236
|
this.publishToAudience(WebSocketAudience.all(namespace), event, data);
|
|
@@ -105,4 +269,4 @@ var init_ws_registry = __esmMin((() => {
|
|
|
105
269
|
//#endregion
|
|
106
270
|
init_ws_registry();
|
|
107
271
|
export { WebSocketRegistry, init_ws_registry };
|
|
108
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcmVnaXN0cnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1yZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXRBdWRpZW5jZSwgdHlwZSBXZWJTb2NrZXRBdWRpZW5jZSBhcyBXZWJTb2NrZXRBdWRpZW5jZVNwZWMgfSBmcm9tIFwiLi93cy1hdWRpZW5jZVwiO1xuaW1wb3J0IHsgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlciB9IGZyb20gXCIuL3dzLWF1ZGllbmNlLXJlc29sdmVyXCI7XG5pbXBvcnQgeyBOb29wV2ViU29ja2V0Q2x1c3RlckJ1cywgdHlwZSBXZWJTb2NrZXRDbHVzdGVyQnVzIH0gZnJvbSBcIi4vd3MtY2x1c3Rlci1idXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIHR5cGUgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgdHlwZSBXZWJTb2NrZXRSb29tSWQsXG4gIHR5cGUgV2ViU29ja2V0VXNlcklkLFxufSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSB9IGZyb20gXCIuL3dzLWRlbGl2ZXJ5XCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB9IGZyb20gXCIuL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmVcIjtcbmltcG9ydCB7XG4gIEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSxcbiAgdHlwZSBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlLFxuICB0eXBlIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSxcbn0gZnJvbSBcIi4vd3MtcHJlc2VuY2Utc3RvcmVcIjtcblxuZXhwb3J0IHR5cGUge1xuICBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgV2ViU29ja2V0Um9vbUlkLFxuICBXZWJTb2NrZXRVc2VySWQsXG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q29ubmVjdGlvbk1ldGEgPSBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U7XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldFJlZ2lzdHJ5T3B0aW9ucyA9IHtcbiAgbm9kZUlkPzogc3RyaW5nO1xuICBwcmVzZW5jZVN0b3JlPzogV2ViU29ja2V0UHJlc2VuY2VTdG9yZTtcbiAgY2x1c3RlckJ1cz86IFdlYlNvY2tldENsdXN0ZXJCdXM7XG59O1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0UmVnaXN0cnkge1xuICByZWFkb25seSBub2RlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxDb25uZWN0aW9ucyA9IG5ldyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSgpO1xuICByZWFkb25seSBwcmVzZW5jZVN0b3JlOiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICByZWFkb25seSBjbHVzdGVyQnVzOiBXZWJTb2NrZXRDbHVzdGVyQnVzO1xuICByZWFkb25seSBhdWRpZW5jZVJlc29sdmVyOiBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyO1xuICByZWFkb25seSBkZWxpdmVyeUVuZ2luZTogV2ViU29ja2V0RGVsaXZlcnlFbmdpbmU7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogV2ViU29ja2V0UmVnaXN0cnlPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5vZGVJZCA9IG9wdGlvbnMubm9kZUlkID8/IFwibG9jYWxcIjtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUgPSBvcHRpb25zLnByZXNlbmNlU3RvcmUgPz8gbmV3IEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSgpO1xuICAgIHRoaXMuY2x1c3RlckJ1cyA9IG9wdGlvbnMuY2x1c3RlckJ1cyA/PyBuZXcgTm9vcFdlYlNvY2tldENsdXN0ZXJCdXMoKTtcbiAgICB0aGlzLmF1ZGllbmNlUmVzb2x2ZXIgPSBuZXcgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlcih7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgcHJlc2VuY2VTdG9yZTogdGhpcy5wcmVzZW5jZVN0b3JlLFxuICAgIH0pO1xuICAgIHRoaXMuZGVsaXZlcnlFbmdpbmUgPSBuZXcgV2ViU29ja2V0RGVsaXZlcnlFbmdpbmUoe1xuICAgICAgbm9kZUlkOiB0aGlzLm5vZGVJZCxcbiAgICAgIGxvY2FsQ29ubmVjdGlvbnM6IHRoaXMubG9jYWxDb25uZWN0aW9ucyxcbiAgICAgIGF1ZGllbmNlUmVzb2x2ZXI6IHRoaXMuYXVkaWVuY2VSZXNvbHZlcixcbiAgICAgIGNsdXN0ZXJCdXM6IHRoaXMuY2x1c3RlckJ1cyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyKFxuICAgIGNvbm5lY3Rpb246IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uLFxuICAgIGFjdGl2ZTogYm9vbGVhbiA9IHRydWUsXG4gICk6IFdlYlNvY2tldENvbm5lY3Rpb25NZXRhIHtcbiAgICB0aGlzLmxvY2FsQ29ubmVjdGlvbnMucmVnaXN0ZXIoY29ubmVjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5yZWdpc3Rlcih7XG4gICAgICBzZXNzaW9uSWQ6IGNvbm5lY3Rpb24uaWQsXG4gICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgbmFtZXNwYWNlOiBjb25uZWN0aW9uLm5hbWVzcGFjZSxcbiAgICAgIGFjdGl2ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFjdGl2YXRlKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmFjdGl2YXRlKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLnVucmVnaXN0ZXIoY29ubmVjdGlvbklkKTtcbiAgICB0aGlzLmxvY2FsQ29ubmVjdGlvbnMudW5yZWdpc3Rlcihjb25uZWN0aW9uSWQpO1xuICB9XG5cbiAgdG91Y2goY29ubmVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUudG91Y2goY29ubmVjdGlvbklkKTtcbiAgfVxuXG4gIHNldFVzZXJJZChjb25uZWN0aW9uSWQ6IHN0cmluZywgdXNlcklkOiBXZWJTb2NrZXRVc2VySWQpOiB2b2lkIHtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUuc2V0VXNlcklkKGNvbm5lY3Rpb25JZCwgdXNlcklkKTtcbiAgfVxuXG4gIGNsZWFyVXNlcklkKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmNsZWFyVXNlcklkKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBqb2luKGNvbm5lY3Rpb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5qb2luKGNvbm5lY3Rpb25JZCwgcm9vbUlkKTtcbiAgfVxuXG4gIGxlYXZlKGNvbm5lY3Rpb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5sZWF2ZShjb25uZWN0aW9uSWQsIHJvb21JZCk7XG4gIH1cblxuICBicm9hZGNhc3QoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5hbGwobmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvUm9vbShyb29tSWQ6IFdlYlNvY2tldFJvb21JZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5yb29tKHJvb21JZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvVXNlcih1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS51c2VyKHVzZXJJZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlU3BlYywgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlFbmdpbmUucHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2UsIGV2ZW50LCBkYXRhKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uQ291bnQobmFtZXNwYWNlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0Um9vbU1lbWJlcnMocm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldENvbm5lY3Rpb25NZXRhW10ge1xuICAgIHJldHVybiB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Um9vbU1lbWJlcnMocm9vbUlkLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogV2ViU29ja2V0UmVnaXN0cnlTdGF0cyB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRTdGF0cygpO1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bihjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gICAgYXdhaXQgdGhpcy5kZWxpdmVyeUVuZ2luZS5zaHV0ZG93bigpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O21CQUFtRzs0QkFDaEM7c0JBQ2tCO21CQU83QjtpQ0FDb0I7eUJBSy9DO0NBZ0JoQixvQkFBYixNQUErQjtFQUM3QixBQUFTO0VBQ1QsQUFBUyxtQkFBbUIsSUFBSSwrQkFBK0I7RUFDL0QsQUFBUztFQUNULEFBQVM7RUFDVCxBQUFTO0VBQ1QsQUFBUztFQUVULFlBQVksVUFBb0MsRUFBRSxFQUFFO0FBQ2xELFFBQUssU0FBUyxRQUFRLFVBQVU7QUFDaEMsUUFBSyxnQkFBZ0IsUUFBUSxpQkFBaUIsSUFBSSxnQ0FBZ0M7QUFDbEYsUUFBSyxhQUFhLFFBQVEsY0FBYyxJQUFJLHlCQUF5QjtBQUNyRSxRQUFLLG1CQUFtQixJQUFJLDBCQUEwQjtJQUNwRCxRQUFRLEtBQUs7SUFDYixlQUFlLEtBQUs7SUFDckIsQ0FBQztBQUNGLFFBQUssaUJBQWlCLElBQUksd0JBQXdCO0lBQ2hELFFBQVEsS0FBSztJQUNiLGtCQUFrQixLQUFLO0lBQ3ZCLGtCQUFrQixLQUFLO0lBQ3ZCLFlBQVksS0FBSztJQUNsQixDQUFDOztFQUdKLFNBQ0UsWUFDQSxTQUFrQixNQUNPO0FBQ3pCLFFBQUssaUJBQWlCLFNBQVMsV0FBVztBQUMxQyxVQUFPLEtBQUssY0FBYyxTQUFTO0lBQ2pDLFdBQVcsV0FBVztJQUN0QixRQUFRLEtBQUs7SUFDYixXQUFXLFdBQVc7SUFDdEI7SUFDRCxDQUFDOztFQUdKLFNBQVMsY0FBNEI7QUFDbkMsUUFBSyxjQUFjLFNBQVMsYUFBYTs7RUFHM0MsV0FBVyxjQUE0QjtBQUNyQyxRQUFLLGNBQWMsV0FBVyxhQUFhO0FBQzNDLFFBQUssaUJBQWlCLFdBQVcsYUFBYTs7RUFHaEQsTUFBTSxjQUE0QjtBQUNoQyxRQUFLLGNBQWMsTUFBTSxhQUFhOztFQUd4QyxVQUFVLGNBQXNCLFFBQStCO0FBQzdELFFBQUssY0FBYyxVQUFVLGNBQWMsT0FBTzs7RUFHcEQsWUFBWSxjQUE0QjtBQUN0QyxRQUFLLGNBQWMsWUFBWSxhQUFhOztFQUc5QyxLQUFLLGNBQXNCLFFBQStCO0FBQ3hELFFBQUssY0FBYyxLQUFLLGNBQWMsT0FBTzs7RUFHL0MsTUFBTSxjQUFzQixRQUErQjtBQUN6RCxRQUFLLGNBQWMsTUFBTSxjQUFjLE9BQU87O0VBR2hELFVBQVUsT0FBZSxNQUFlLFdBQTBCO0FBQ2hFLFFBQUssa0JBQWtCLGtCQUFrQixJQUFJLFVBQVUsRUFBRSxPQUFPLEtBQUs7O0VBR3ZFLGNBQWMsUUFBeUIsT0FBZSxNQUFlLFdBQTBCO0FBQzdGLFFBQUssa0JBQWtCLGtCQUFrQixLQUFLLFFBQVEsVUFBVSxFQUFFLE9BQU8sS0FBSzs7RUFHaEYsY0FBYyxRQUF5QixPQUFlLE1BQWUsV0FBMEI7QUFDN0YsUUFBSyxrQkFBa0Isa0JBQWtCLEtBQUssUUFBUSxVQUFVLEVBQUUsT0FBTyxLQUFLOztFQUdoRixrQkFBa0IsVUFBaUMsT0FBZSxNQUFxQjtBQUNyRixRQUFLLGVBQWUsa0JBQWtCLFVBQVUsT0FBTyxLQUFLOztFQUc5RCxjQUFjLGNBQTJEO0FBQ3ZFLFVBQU8sS0FBSyxjQUFjLGNBQWMsYUFBYTs7RUFHdkQsbUJBQW1CLFdBQTRCO0FBQzdDLFVBQU8sS0FBSyxjQUFjLG1CQUFtQixVQUFVOztFQUd6RCxlQUFlLFFBQXlCLFdBQStDO0FBQ3JGLFVBQU8sS0FBSyxjQUFjLGVBQWUsUUFBUSxVQUFVOztFQUc3RCxXQUFtQztBQUNqQyxVQUFPLEtBQUssY0FBYyxVQUFVOztFQUd0QyxTQUFTLE1BQWUsUUFBdUI7QUFDN0MsUUFBSyxpQkFBaUIsU0FBUyxNQUFNLE9BQU87O0VBRzlDLE1BQU0sU0FBUyxNQUFlLFFBQWdDO0FBQzVELFFBQUssU0FBUyxNQUFNLE9BQU87QUFDM0IsU0FBTSxLQUFLLGVBQWUsVUFBVSJ9
|
|
272
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtcmVnaXN0cnkuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1yZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJTb2NrZXRBdWRpZW5jZSwgdHlwZSBXZWJTb2NrZXRBdWRpZW5jZSBhcyBXZWJTb2NrZXRBdWRpZW5jZVNwZWMgfSBmcm9tIFwiLi93cy1hdWRpZW5jZVwiO1xuaW1wb3J0IHsgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlciB9IGZyb20gXCIuL3dzLWF1ZGllbmNlLXJlc29sdmVyXCI7XG5pbXBvcnQgeyBOb29wV2ViU29ja2V0Q2x1c3RlckJ1cywgdHlwZSBXZWJTb2NrZXRDbHVzdGVyQnVzIH0gZnJvbSBcIi4vd3MtY2x1c3Rlci1idXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIHR5cGUgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgdHlwZSBXZWJTb2NrZXRSb29tSWQsXG4gIHR5cGUgV2ViU29ja2V0VXNlcklkLFxufSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQgeyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSB9IGZyb20gXCIuL3dzLWRlbGl2ZXJ5XCI7XG5pbXBvcnQgeyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB9IGZyb20gXCIuL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmVcIjtcbmltcG9ydCB7XG4gIEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSxcbiAgdHlwZSBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlLFxuICB0eXBlIFdlYlNvY2tldFNlc3Npb25QcmVzZW5jZSxcbn0gZnJvbSBcIi4vd3MtcHJlc2VuY2Utc3RvcmVcIjtcbmltcG9ydCB7XG4gIHR5cGUgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyLFxuICBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcixcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uQ29udGV4dCxcbiAgdHlwZSBXZWJTb2NrZXRUZWxlbWV0cnlDb250cm9sbGVyLFxufSBmcm9tIFwiLi93cy10ZWxlbWV0cnlcIjtcblxuZXhwb3J0IHR5cGUge1xuICBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgV2ViU29ja2V0UmVnaXN0cnlTdGF0cyxcbiAgV2ViU29ja2V0Um9vbUlkLFxuICBXZWJTb2NrZXRVc2VySWQsXG59O1xuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q29ubmVjdGlvbk1ldGEgPSBXZWJTb2NrZXRTZXNzaW9uUHJlc2VuY2U7XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldFJlZ2lzdHJ5T3B0aW9ucyA9IHtcbiAgLy8g67aE7IKwIO2ZmOqyveyXkOyEnCDrhbjrk5wg6rCEIOudvOyasO2MhSDsi53rs4TsnpDroZwg7JOw7J2066+A66GcIOuwmOuTnOyLnCDtmLjstpwg7LihKFdlYlNvY2tldFJ1bnRpbWUp7JeQ7IScIOqysOygle2VtCDrhJjquLTri6RcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIHByZXNlbmNlU3RvcmU/OiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICBjbHVzdGVyQnVzPzogV2ViU29ja2V0Q2x1c3RlckJ1cztcbiAgdGVsZW1ldHJ5Q29udHJvbGxlcj86IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0UmVnaXN0cnkge1xuICByZWFkb25seSBub2RlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxDb25uZWN0aW9ucyA9IG5ldyBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSgpO1xuICByZWFkb25seSBwcmVzZW5jZVN0b3JlOiBXZWJTb2NrZXRQcmVzZW5jZVN0b3JlO1xuICByZWFkb25seSBjbHVzdGVyQnVzOiBXZWJTb2NrZXRDbHVzdGVyQnVzO1xuICByZWFkb25seSBhdWRpZW5jZVJlc29sdmVyOiBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyO1xuICByZWFkb25seSBkZWxpdmVyeUVuZ2luZTogV2ViU29ja2V0RGVsaXZlcnlFbmdpbmU7XG4gIHJlYWRvbmx5IHRlbGVtZXRyeUNvbnRyb2xsZXI6IFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogV2ViU29ja2V0UmVnaXN0cnlPcHRpb25zKSB7XG4gICAgdGhpcy5ub2RlSWQgPSBvcHRpb25zLm5vZGVJZDtcbiAgICB0aGlzLnByZXNlbmNlU3RvcmUgPSBvcHRpb25zLnByZXNlbmNlU3RvcmUgPz8gbmV3IEluTWVtb3J5V2ViU29ja2V0UHJlc2VuY2VTdG9yZSgpO1xuICAgIHRoaXMuY2x1c3RlckJ1cyA9IG9wdGlvbnMuY2x1c3RlckJ1cyA/PyBuZXcgTm9vcFdlYlNvY2tldENsdXN0ZXJCdXMoKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIgPVxuICAgICAgb3B0aW9ucy50ZWxlbWV0cnlDb250cm9sbGVyID8/IG5ldyBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYXVkaWVuY2VSZXNvbHZlciA9IG5ldyBXZWJTb2NrZXRBdWRpZW5jZVJlc29sdmVyKHtcbiAgICAgIG5vZGVJZDogdGhpcy5ub2RlSWQsXG4gICAgICBwcmVzZW5jZVN0b3JlOiB0aGlzLnByZXNlbmNlU3RvcmUsXG4gICAgfSk7XG4gICAgdGhpcy5kZWxpdmVyeUVuZ2luZSA9IG5ldyBXZWJTb2NrZXREZWxpdmVyeUVuZ2luZSh7XG4gICAgICBub2RlSWQ6IHRoaXMubm9kZUlkLFxuICAgICAgbG9jYWxDb25uZWN0aW9uczogdGhpcy5sb2NhbENvbm5lY3Rpb25zLFxuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogdGhpcy5hdWRpZW5jZVJlc29sdmVyLFxuICAgICAgY2x1c3RlckJ1czogdGhpcy5jbHVzdGVyQnVzLFxuICAgICAgdGVsZW1ldHJ5Q29udHJvbGxlcjogdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlZ2lzdGVyTWV0cmljU291cmNlKHtcbiAgICAgIGNvbGxlY3Q6IChfbm93KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRzID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldFN0YXRzKCk7XG4gICAgICAgIGNvbnN0IGxvY2FsU25hcHNob3QgPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0VGVsZW1ldHJ5U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uczogc3RhdHMudG90YWxDb25uZWN0aW9ucyxcbiAgICAgICAgICBhY3RpdmVDb25uZWN0aW9uc0J5TmFtZXNwYWNlOiBzdGF0cy5ieU5hbWVzcGFjZSxcbiAgICAgICAgICByb29tQ291bnQ6IHN0YXRzLnRvdGFsUm9vbXMsXG4gICAgICAgICAgcGVuZGluZ0luYm91bmRNZXNzYWdlczogbG9jYWxTbmFwc2hvdC5wZW5kaW5nSW5ib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzOiBsb2NhbFNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzLFxuICAgICAgICAgIHNvY2tldEJ1ZmZlcmVkQnl0ZXM6IGxvY2FsU25hcHNob3Quc29ja2V0QnVmZmVyZWRCeXRlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZWdpc3RlcihcbiAgICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbixcbiAgICBhY3RpdmU6IGJvb2xlYW4gPSB0cnVlLFxuICApOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnJlZ2lzdGVyKGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUucmVnaXN0ZXIoe1xuICAgICAgc2Vzc2lvbklkOiBjb25uZWN0aW9uLmlkLFxuICAgICAgbm9kZUlkOiB0aGlzLm5vZGVJZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICBhY3RpdmUsXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy5jb25uZWN0aW9uLnJlZ2lzdGVyZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcbiAgICAgIG5hbWVzcGFjZTogY29ubmVjdGlvbi5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQ6IGNvbm5lY3Rpb24udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLnJlY29yZE1ldHJpYyh7XG4gICAgICBuYW1lOiBcInNvbmFtdS53cy5jb25uZWN0aW9uc1wiLFxuICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIHVuaXQ6IFwiMVwiLFxuICAgICAgdGFnczogeyBvdXRjb21lOiBcInJlZ2lzdGVyZWRcIiwgbmFtZXNwYWNlOiBjb25uZWN0aW9uLm5hbWVzcGFjZSB9LFxuICAgICAgdXNlcklkOiBjb25uZWN0aW9uLnVzZXJJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gbWV0YTtcbiAgfVxuXG4gIGFjdGl2YXRlKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5hY3RpdmF0ZShjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MuY29ubmVjdGlvbi5hY3RpdmF0ZWRcIixcbiAgICAgIGxldmVsOiBcImluZm9cIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29udGV4dCA9IGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KGNvbm5lY3Rpb24pO1xuICAgIGNvbnN0IHVzZXJJZCA9XG4gICAgICBjb25uZWN0aW9uPy51c2VySWQgPz8gZm9ybWF0VXNlcklkKHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk/LnVzZXJJZCk7XG4gICAgY29uc3QgbWV0YSA9IHRoaXMucHJlc2VuY2VTdG9yZS51bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLnVucmVnaXN0ZXIoY29ubmVjdGlvbklkKTtcbiAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIuZW1pdCh7XG4gICAgICBuYW1lOiBcIndzLmNvbm5lY3Rpb24udW5yZWdpc3RlcmVkXCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhPy5uYW1lc3BhY2UsXG4gICAgICB1c2VySWQsXG4gICAgICAuLi50ZWxlbWV0cnlDb250ZXh0LFxuICAgIH0pO1xuICAgIGlmIChtZXRhKSB7XG4gICAgICB0aGlzLnRlbGVtZXRyeUNvbnRyb2xsZXIucmVjb3JkTWV0cmljKHtcbiAgICAgICAgbmFtZTogXCJzb25hbXUud3MuY29ubmVjdGlvbnNcIixcbiAgICAgICAga2luZDogXCJjb3VudGVyXCIsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICB1bml0OiBcIjFcIixcbiAgICAgICAgdGFnczogeyBvdXRjb21lOiBcInVucmVnaXN0ZXJlZFwiLCBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlIH0sXG4gICAgICAgIHVzZXJJZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvdWNoKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLnRvdWNoKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBzZXRVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcsIHVzZXJJZDogV2ViU29ja2V0VXNlcklkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpKSB7XG4gICAgICB0aGlzLmVtaXRNdXRhdGlvblNraXBwZWQoY29ubmVjdGlvbklkLCB7IG9wZXJhdGlvbjogXCJzZXRVc2VySWRcIiwgdXNlcklkIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJlc2VuY2VTdG9yZS5zZXRVc2VySWQoY29ubmVjdGlvbklkLCB1c2VySWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MudXNlci5ib3VuZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIG5hbWVzcGFjZTogbWV0YT8ubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBTdHJpbmcodXNlcklkKSxcbiAgICAgIGRldGFpbDogeyB1c2VySWQgfSxcbiAgICAgIC4uLmdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KHRoaXMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCkpLFxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXJVc2VySWQoY29ubmVjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImNsZWFyVXNlcklkXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcklkID0gbWV0YS51c2VySWQ7XG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmNsZWFyVXNlcklkKGNvbm5lY3Rpb25JZCk7XG4gICAgdGhpcy50ZWxlbWV0cnlDb250cm9sbGVyLmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy51c2VyLmNsZWFyZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGEubmFtZXNwYWNlLFxuICAgICAgdXNlcklkOiBmb3JtYXRVc2VySWQodXNlcklkKSxcbiAgICAgIGRldGFpbDogdXNlcklkICE9PSB1bmRlZmluZWQgPyB7IHVzZXJJZCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQodGhpcy5sb2NhbENvbm5lY3Rpb25zLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSksXG4gICAgfSk7XG4gIH1cblxuICBqb2luKGNvbm5lY3Rpb25JZDogc3RyaW5nLCByb29tSWQ6IFdlYlNvY2tldFJvb21JZCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKSkge1xuICAgICAgdGhpcy5lbWl0TXV0YXRpb25Ta2lwcGVkKGNvbm5lY3Rpb25JZCwgeyBvcGVyYXRpb246IFwiam9pblwiLCByb29tSWQgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcmVzZW5jZVN0b3JlLmpvaW4oY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5qb2luZWRcIixcbiAgICAgIGxldmVsOiBcImRlYnVnXCIsXG4gICAgICBjb25uZWN0aW9uSWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldGE/Lm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhPy51c2VySWQpLFxuICAgICAgZGV0YWlsOiB7IHJvb21JZCB9LFxuICAgICAgLi4uZ2V0Q29ubmVjdGlvblRlbGVtZXRyeUNvbnRleHQoY29ubmVjdGlvbiksXG4gICAgfSk7XG4gIH1cblxuICBsZWF2ZShjb25uZWN0aW9uSWQ6IHN0cmluZywgcm9vbUlkOiBXZWJTb2NrZXRSb29tSWQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXRhID0gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkKTtcbiAgICBpZiAoIW1ldGEpIHtcbiAgICAgIHRoaXMuZW1pdE11dGF0aW9uU2tpcHBlZChjb25uZWN0aW9uSWQsIHsgb3BlcmF0aW9uOiBcImxlYXZlXCIsIHJvb21JZCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNlbmNlU3RvcmUubGVhdmUoY29ubmVjdGlvbklkLCByb29tSWQpO1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbihjb25uZWN0aW9uSWQpO1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3Mucm9vbS5sZWZ0XCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgY29ubmVjdGlvbklkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRhLm5hbWVzcGFjZSxcbiAgICAgIHVzZXJJZDogY29ubmVjdGlvbj8udXNlcklkID8/IGZvcm1hdFVzZXJJZChtZXRhLnVzZXJJZCksXG4gICAgICBkZXRhaWw6IHsgcm9vbUlkIH0sXG4gICAgICAuLi5nZXRDb25uZWN0aW9uVGVsZW1ldHJ5Q29udGV4dChjb25uZWN0aW9uKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE11dGF0aW9uU2tpcHBlZChcbiAgICBjb25uZWN0aW9uSWQ6IHN0cmluZyxcbiAgICBkZXRhaWw6IHtcbiAgICAgIG9wZXJhdGlvbjogXCJhY3RpdmF0ZVwiIHwgXCJzZXRVc2VySWRcIiB8IFwiY2xlYXJVc2VySWRcIiB8IFwiam9pblwiIHwgXCJsZWF2ZVwiO1xuICAgICAgcm9vbUlkPzogV2ViU29ja2V0Um9vbUlkO1xuICAgICAgdXNlcklkPzogV2ViU29ja2V0VXNlcklkO1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudGVsZW1ldHJ5Q29udHJvbGxlci5lbWl0KHtcbiAgICAgIG5hbWU6IFwid3MucmVnaXN0cnkubXV0YXRpb24uc2tpcHBlZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGNvbm5lY3Rpb25JZCxcbiAgICAgIGRldGFpbDogeyAuLi5kZXRhaWwsIHJlYXNvbjogXCJjb25uZWN0aW9uTWlzc2luZ1wiIH0sXG4gICAgfSk7XG4gIH1cblxuICBicm9hZGNhc3QoZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5hbGwobmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvUm9vbShyb29tSWQ6IFdlYlNvY2tldFJvb21JZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS5yb29tKHJvb21JZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvVXNlcih1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93biwgbmFtZXNwYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wdWJsaXNoVG9BdWRpZW5jZShXZWJTb2NrZXRBdWRpZW5jZS51c2VyKHVzZXJJZCwgbmFtZXNwYWNlKSwgZXZlbnQsIGRhdGEpO1xuICB9XG5cbiAgcHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlU3BlYywgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGVsaXZlcnlFbmdpbmUucHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2UsIGV2ZW50LCBkYXRhKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBXZWJTb2NrZXRDb25uZWN0aW9uTWV0YSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRDb25uZWN0aW9uKGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uQ291bnQobmFtZXNwYWNlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5wcmVzZW5jZVN0b3JlLmdldENvbm5lY3Rpb25Db3VudChuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0Um9vbU1lbWJlcnMocm9vbUlkOiBXZWJTb2NrZXRSb29tSWQsIG5hbWVzcGFjZT86IHN0cmluZyk6IFdlYlNvY2tldENvbm5lY3Rpb25NZXRhW10ge1xuICAgIHJldHVybiB0aGlzLnByZXNlbmNlU3RvcmUuZ2V0Um9vbU1lbWJlcnMocm9vbUlkLCBuYW1lc3BhY2UpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogV2ViU29ja2V0UmVnaXN0cnlTdGF0cyB7XG4gICAgcmV0dXJuIHRoaXMucHJlc2VuY2VTdG9yZS5nZXRTdGF0cygpO1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhbENvbm5lY3Rpb25zLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gIH1cblxuICBhc3luYyBzaHV0ZG93bihjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsb3NlQWxsKGNvZGUsIHJlYXNvbik7XG4gICAgYXdhaXQgdGhpcy5kZWxpdmVyeUVuZ2luZS5zaHV0ZG93bigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldENvbm5lY3Rpb25UZWxlbWV0cnlDb250ZXh0KFxuICBjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB8IHVuZGVmaW5lZCxcbik6IFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25Db250ZXh0IHtcbiAgaWYgKCFjb25uZWN0aW9uIHx8ICFpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihjb25uZWN0aW9uKSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHJldHVybiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQoKTtcbn1cblxuLy8gdGVsZW1ldHJ5IHJlY29yZOydmCB1c2VySWTripQgc3RyaW5nIOygleq3nO2ZlCDigJQgcHJlc2VuY2Ugc3RvcmXripQgbnVtYmVyIHwgc3RyaW5nIOq3uOuMgOuhnCDrs7TqtIDtlahcbmZ1bmN0aW9uIGZvcm1hdFVzZXJJZCh1c2VySWQ6IFdlYlNvY2tldFVzZXJJZCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB1c2VySWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IFN0cmluZyh1c2VySWQpO1xufVxuXG5mdW5jdGlvbiBpc1RlbGVtZXRyeUNvbnRleHRQcm92aWRlcihcbiAgY29ubmVjdGlvbjogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24sXG4pOiBjb25uZWN0aW9uIGlzIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uICYgVGVsZW1ldHJ5Q29udGV4dFByb3ZpZGVyIHtcbiAgcmV0dXJuIChcbiAgICBcImdldFRlbGVtZXRyeUNvbnRleHRcIiBpbiBjb25uZWN0aW9uICYmIHR5cGVvZiBjb25uZWN0aW9uLmdldFRlbGVtZXRyeUNvbnRleHQgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBeVNBLFNBQVMsOEJBQ1AsWUFDcUM7QUFDckMsS0FBSSxDQUFDLGNBQWMsQ0FBQywyQkFBMkIsV0FBVyxFQUFFO0FBQzFELFNBQU8sRUFBRTs7QUFHWCxRQUFPLFdBQVcscUJBQXFCOztBQUl6QyxTQUFTLGFBQWEsUUFBeUQ7QUFDN0UsUUFBTyxXQUFXLFlBQVksWUFBWSxPQUFPLE9BQU87O0FBRzFELFNBQVMsMkJBQ1AsWUFDcUU7QUFDckUsUUFDRSx5QkFBeUIsY0FBYyxPQUFPLFdBQVcsd0JBQXdCOzs7O21CQTVUYzs0QkFDaEM7c0JBQ2tCO21CQU83QjtpQ0FDb0I7eUJBSy9DO29CQU1MO0NBa0JYLG9CQUFiLE1BQStCO0VBQzdCLEFBQVM7RUFDVCxB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
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type WebSocketTelemetryEventQueryFilter, type WebSocketTelemetryEventRecord, type WebSocketTelemetryEventSink, type WebSocketTelemetryEventStore, type WebSocketTelemetryMetricQueryFilter, type WebSocketTelemetryMetricRecord, type WebSocketTelemetryMetricSink, type WebSocketTelemetryMetricStore, type WebSocketTelemetrySpanQueryFilter, type WebSocketTelemetrySpanRecord, type WebSocketTelemetrySpanSink, type WebSocketTelemetrySpanStore } from "./ws-telemetry";
|
|
2
|
+
type InMemoryStoreOptions = {
|
|
3
|
+
maxRecords?: number;
|
|
4
|
+
maxBytes?: number;
|
|
5
|
+
};
|
|
6
|
+
export declare class InMemoryEventStore implements WebSocketTelemetryEventStore {
|
|
7
|
+
readonly sink: WebSocketTelemetryEventSink;
|
|
8
|
+
private readonly buffer;
|
|
9
|
+
constructor(options?: InMemoryStoreOptions);
|
|
10
|
+
query(filter: WebSocketTelemetryEventQueryFilter): WebSocketTelemetryEventRecord[];
|
|
11
|
+
clear(): void;
|
|
12
|
+
}
|
|
13
|
+
export declare class InMemoryMetricStore implements WebSocketTelemetryMetricStore {
|
|
14
|
+
readonly sink: WebSocketTelemetryMetricSink;
|
|
15
|
+
private readonly buffer;
|
|
16
|
+
constructor(options?: InMemoryStoreOptions);
|
|
17
|
+
query(filter: WebSocketTelemetryMetricQueryFilter): WebSocketTelemetryMetricRecord[];
|
|
18
|
+
clear(): void;
|
|
19
|
+
}
|
|
20
|
+
export declare class InMemorySpanStore implements WebSocketTelemetrySpanStore {
|
|
21
|
+
readonly sink: WebSocketTelemetrySpanSink;
|
|
22
|
+
private readonly buffer;
|
|
23
|
+
constructor(options?: InMemoryStoreOptions);
|
|
24
|
+
query(filter: WebSocketTelemetrySpanQueryFilter): WebSocketTelemetrySpanRecord[];
|
|
25
|
+
clear(): void;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=ws-telemetry-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-telemetry-memory.d.ts","sourceRoot":"","sources":["../../src/stream/ws-telemetry-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kCAAkC,EACvC,KAAK,6BAA6B,EAClC,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,mCAAmC,EACxC,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,iCAAiC,EACtC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAExB,KAAK,oBAAoB,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAuHF,qBAAa,kBAAmB,YAAW,4BAA4B;IACrE,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC;IAE3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;gBAE/D,OAAO,GAAE,oBAAyB;IAa9C,KAAK,CAAC,MAAM,EAAE,kCAAkC,GAAG,6BAA6B,EAAE;IAclF,KAAK,IAAI,IAAI;CAGd;AAED,qBAAa,mBAAoB,YAAW,6BAA6B;IACvE,QAAQ,CAAC,IAAI,EAAE,4BAA4B,CAAC;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqD;gBAEhE,OAAO,GAAE,oBAAyB;IAa9C,KAAK,CAAC,MAAM,EAAE,mCAAmC,GAAG,8BAA8B,EAAE;IAcpF,KAAK,IAAI,IAAI;CAGd;AAED,qBAAa,iBAAkB,YAAW,2BAA2B;IACnE,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAE1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmD;gBAE9D,OAAO,GAAE,oBAAyB;IAU9C,KAAK,CAAC,MAAM,EAAE,iCAAiC,GAAG,4BAA4B,EAAE;IAgBhF,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
|
|
3
|
+
//#region src/stream/ws-telemetry-memory.ts
|
|
4
|
+
function applyTimeWindow(record, since, until) {
|
|
5
|
+
if (since !== undefined && record.timestamp < since) return false;
|
|
6
|
+
if (until !== undefined && record.timestamp > until) return false;
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
function estimateEventBytes(record) {
|
|
10
|
+
let size = 200;
|
|
11
|
+
if (record.payloadPreview !== undefined) {
|
|
12
|
+
try {
|
|
13
|
+
size += Buffer.byteLength(JSON.stringify(record.payloadPreview), "utf-8");
|
|
14
|
+
} catch {
|
|
15
|
+
size += 100;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (record.detail) {
|
|
19
|
+
try {
|
|
20
|
+
size += Buffer.byteLength(JSON.stringify(record.detail), "utf-8");
|
|
21
|
+
} catch {
|
|
22
|
+
size += 100;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return size;
|
|
26
|
+
}
|
|
27
|
+
function estimateMetricBytes(_record) {
|
|
28
|
+
return 200;
|
|
29
|
+
}
|
|
30
|
+
function estimateSpanBytes(_record) {
|
|
31
|
+
return 200;
|
|
32
|
+
}
|
|
33
|
+
var DEFAULT_MAX_RECORDS, DEFAULT_MAX_BYTES, InMemoryRingBuffer, InMemoryEventStore, InMemoryMetricStore, InMemorySpanStore;
|
|
34
|
+
var init_ws_telemetry_memory = __esmMin((() => {
|
|
35
|
+
DEFAULT_MAX_RECORDS = 1e4;
|
|
36
|
+
DEFAULT_MAX_BYTES = 10 * 1024 * 1024;
|
|
37
|
+
InMemoryRingBuffer = class {
|
|
38
|
+
slots;
|
|
39
|
+
slotBytes;
|
|
40
|
+
capacity;
|
|
41
|
+
maxBytes;
|
|
42
|
+
estimateBytes;
|
|
43
|
+
head = 0;
|
|
44
|
+
count = 0;
|
|
45
|
+
currentBytes = 0;
|
|
46
|
+
constructor(options, estimateBytes) {
|
|
47
|
+
this.capacity = options.maxRecords ?? DEFAULT_MAX_RECORDS;
|
|
48
|
+
this.maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
49
|
+
this.estimateBytes = estimateBytes;
|
|
50
|
+
this.slots = new Array(this.capacity);
|
|
51
|
+
this.slotBytes = new Array(this.capacity).fill(0);
|
|
52
|
+
}
|
|
53
|
+
push(record) {
|
|
54
|
+
if (this.capacity <= 0) return;
|
|
55
|
+
const recordSize = this.estimateBytes(record);
|
|
56
|
+
if (recordSize > this.maxBytes) return;
|
|
57
|
+
if (this.count === this.capacity) {
|
|
58
|
+
this.currentBytes -= this.slotBytes[this.head];
|
|
59
|
+
this.slots[this.head] = record;
|
|
60
|
+
this.slotBytes[this.head] = recordSize;
|
|
61
|
+
this.currentBytes += recordSize;
|
|
62
|
+
this.head = (this.head + 1) % this.capacity;
|
|
63
|
+
} else {
|
|
64
|
+
const tail = (this.head + this.count) % this.capacity;
|
|
65
|
+
this.slots[tail] = record;
|
|
66
|
+
this.slotBytes[tail] = recordSize;
|
|
67
|
+
this.currentBytes += recordSize;
|
|
68
|
+
this.count += 1;
|
|
69
|
+
}
|
|
70
|
+
while (this.currentBytes > this.maxBytes && this.count > 1) {
|
|
71
|
+
this.currentBytes -= this.slotBytes[this.head];
|
|
72
|
+
this.slots[this.head] = undefined;
|
|
73
|
+
this.slotBytes[this.head] = 0;
|
|
74
|
+
this.head = (this.head + 1) % this.capacity;
|
|
75
|
+
this.count -= 1;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
filter(predicate, limit) {
|
|
79
|
+
const matched = [];
|
|
80
|
+
for (let i = 0; i < this.count; i++) {
|
|
81
|
+
const record = this.slots[(this.head + i) % this.capacity];
|
|
82
|
+
if (record !== undefined && predicate(record)) matched.push(record);
|
|
83
|
+
}
|
|
84
|
+
if (limit !== undefined && limit > 0 && matched.length > limit) {
|
|
85
|
+
return matched.slice(-limit);
|
|
86
|
+
}
|
|
87
|
+
return matched;
|
|
88
|
+
}
|
|
89
|
+
clear() {
|
|
90
|
+
for (let i = 0; i < this.capacity; i++) {
|
|
91
|
+
this.slots[i] = undefined;
|
|
92
|
+
this.slotBytes[i] = 0;
|
|
93
|
+
}
|
|
94
|
+
this.head = 0;
|
|
95
|
+
this.count = 0;
|
|
96
|
+
this.currentBytes = 0;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
InMemoryEventStore = class {
|
|
100
|
+
sink;
|
|
101
|
+
buffer;
|
|
102
|
+
constructor(options = {}) {
|
|
103
|
+
this.buffer = new InMemoryRingBuffer(options, estimateEventBytes);
|
|
104
|
+
this.sink = { emit: (record) => {
|
|
105
|
+
this.buffer.push(record);
|
|
106
|
+
} };
|
|
107
|
+
}
|
|
108
|
+
query(filter) {
|
|
109
|
+
return this.buffer.filter((record) => {
|
|
110
|
+
if (filter.name !== undefined && record.name !== filter.name) return false;
|
|
111
|
+
if (filter.level !== undefined && record.level !== filter.level) return false;
|
|
112
|
+
if (filter.connectionId !== undefined && record.connectionId !== filter.connectionId) return false;
|
|
113
|
+
if (filter.userId !== undefined && record.userId !== filter.userId) return false;
|
|
114
|
+
if (filter.namespace !== undefined && record.namespace !== filter.namespace) return false;
|
|
115
|
+
if (filter.traceId !== undefined && record.traceId !== filter.traceId) return false;
|
|
116
|
+
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
117
|
+
return true;
|
|
118
|
+
}, filter.limit);
|
|
119
|
+
}
|
|
120
|
+
clear() {
|
|
121
|
+
this.buffer.clear();
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
InMemoryMetricStore = class {
|
|
125
|
+
sink;
|
|
126
|
+
buffer;
|
|
127
|
+
constructor(options = {}) {
|
|
128
|
+
this.buffer = new InMemoryRingBuffer(options, estimateMetricBytes);
|
|
129
|
+
this.sink = { emit: (record) => {
|
|
130
|
+
this.buffer.push(record);
|
|
131
|
+
} };
|
|
132
|
+
}
|
|
133
|
+
query(filter) {
|
|
134
|
+
return this.buffer.filter((record) => {
|
|
135
|
+
if (filter.name !== undefined && record.name !== filter.name) return false;
|
|
136
|
+
if (filter.kind !== undefined && record.kind !== filter.kind) return false;
|
|
137
|
+
if (filter.connectionId !== undefined && record.connectionId !== filter.connectionId) return false;
|
|
138
|
+
if (filter.userId !== undefined && record.userId !== filter.userId) return false;
|
|
139
|
+
if (filter.namespace !== undefined && record.namespace !== filter.namespace) return false;
|
|
140
|
+
if (filter.traceId !== undefined && record.traceId !== filter.traceId) return false;
|
|
141
|
+
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
142
|
+
return true;
|
|
143
|
+
}, filter.limit);
|
|
144
|
+
}
|
|
145
|
+
clear() {
|
|
146
|
+
this.buffer.clear();
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
InMemorySpanStore = class {
|
|
150
|
+
sink;
|
|
151
|
+
buffer;
|
|
152
|
+
constructor(options = {}) {
|
|
153
|
+
this.buffer = new InMemoryRingBuffer(options, estimateSpanBytes);
|
|
154
|
+
this.sink = { emit: (record) => {
|
|
155
|
+
this.buffer.push(record);
|
|
156
|
+
} };
|
|
157
|
+
}
|
|
158
|
+
query(filter) {
|
|
159
|
+
return this.buffer.filter((record) => {
|
|
160
|
+
if (filter.operationName !== undefined && record.operationName !== filter.operationName) return false;
|
|
161
|
+
if (filter.kind !== undefined && record.kind !== filter.kind) return false;
|
|
162
|
+
if (filter.status !== undefined && record.status !== filter.status) return false;
|
|
163
|
+
if (filter.connectionId !== undefined && record.connectionId !== filter.connectionId) return false;
|
|
164
|
+
if (filter.userId !== undefined && record.userId !== filter.userId) return false;
|
|
165
|
+
if (filter.namespace !== undefined && record.namespace !== filter.namespace) return false;
|
|
166
|
+
if (filter.traceId !== undefined && record.traceId !== filter.traceId) return false;
|
|
167
|
+
if (!applyTimeWindow(record, filter.since, filter.until)) return false;
|
|
168
|
+
return true;
|
|
169
|
+
}, filter.limit);
|
|
170
|
+
}
|
|
171
|
+
clear() {
|
|
172
|
+
this.buffer.clear();
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}));
|
|
176
|
+
|
|
177
|
+
//#endregion
|
|
178
|
+
init_ws_telemetry_memory();
|
|
179
|
+
export { InMemoryEventStore, InMemoryMetricStore, InMemorySpanStore, init_ws_telemetry_memory };
|
|
180
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGVsZW1ldHJ5LW1lbW9yeS5qcyIsIm5hbWVzIjpbIm1hdGNoZWQ6IFRSZWNvcmRbXSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vd3MtdGVsZW1ldHJ5LW1lbW9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UXVlcnlGaWx0ZXIsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRSZWNvcmQsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRTaW5rLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U3RvcmUsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUXVlcnlGaWx0ZXIsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1NpbmssXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljU3RvcmUsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblF1ZXJ5RmlsdGVyLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQsXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblNpbmssXG4gIHR5cGUgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblN0b3JlLFxufSBmcm9tIFwiLi93cy10ZWxlbWV0cnlcIjtcblxudHlwZSBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHtcbiAgbWF4UmVjb3Jkcz86IG51bWJlcjtcbiAgbWF4Qnl0ZXM/OiBudW1iZXI7XG59O1xuXG5jb25zdCBERUZBVUxUX01BWF9SRUNPUkRTID0gMTBfMDAwO1xuY29uc3QgREVGQVVMVF9NQVhfQllURVMgPSAxMCAqIDEwMjQgKiAxMDI0OyAvLyAxMCBNaUJcblxudHlwZSBFc3RpbWF0ZUJ5dGVzPFRSZWNvcmQ+ID0gKHJlY29yZDogVFJlY29yZCkgPT4gbnVtYmVyO1xuXG4vLyDri6jsnbwgRklGTyByaW5nIGJ1ZmZlci4gY3JpdGljYWwvbm9uLWNyaXRpY2FsIOyasOyEoOyInOychOuKlCDrkZDsp4Ag7JWK64qU64ukIOKAlFxuLy8g7J2466mU66qo66asIHN0b3Jl64qUIO2cmOuwnOyEsSDrlJTrsoTquYUg7Jqp64+E7J2066+A66GcIGNyaXRpY2FsIOuztOyhtOydtCDtlYTsmpTtlZjrqbRcbi8vIOuzhOuPhOydmCDsmIHsho0gc2lua+ulvCDrk7HroZ3tlbTshJwg7LKY66as7ZWc64ukLlxuY2xhc3MgSW5NZW1vcnlSaW5nQnVmZmVyPFRSZWNvcmQgZXh0ZW5kcyB7IHRpbWVzdGFtcDogbnVtYmVyIH0+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBzbG90czogQXJyYXk8VFJlY29yZCB8IHVuZGVmaW5lZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2xvdEJ5dGVzOiBudW1iZXJbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXBhY2l0eTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG1heEJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXN0aW1hdGVCeXRlczogRXN0aW1hdGVCeXRlczxUUmVjb3JkPjtcbiAgcHJpdmF0ZSBoZWFkID0gMDtcbiAgcHJpdmF0ZSBjb3VudCA9IDA7XG4gIHByaXZhdGUgY3VycmVudEJ5dGVzID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucywgZXN0aW1hdGVCeXRlczogRXN0aW1hdGVCeXRlczxUUmVjb3JkPikge1xuICAgIHRoaXMuY2FwYWNpdHkgPSBvcHRpb25zLm1heFJlY29yZHMgPz8gREVGQVVMVF9NQVhfUkVDT1JEUztcbiAgICB0aGlzLm1heEJ5dGVzID0gb3B0aW9ucy5tYXhCeXRlcyA/PyBERUZBVUxUX01BWF9CWVRFUztcbiAgICB0aGlzLmVzdGltYXRlQnl0ZXMgPSBlc3RpbWF0ZUJ5dGVzO1xuICAgIHRoaXMuc2xvdHMgPSBuZXcgQXJyYXkodGhpcy5jYXBhY2l0eSk7XG4gICAgdGhpcy5zbG90Qnl0ZXMgPSBuZXcgQXJyYXkodGhpcy5jYXBhY2l0eSkuZmlsbCgwKTtcbiAgfVxuXG4gIHB1c2gocmVjb3JkOiBUUmVjb3JkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FwYWNpdHkgPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjb3JkU2l6ZSA9IHRoaXMuZXN0aW1hdGVCeXRlcyhyZWNvcmQpO1xuICAgIC8vIOuLqOydvCByZWNvcmTqsIAgbWF4Qnl0ZXPrpbwg64SY7Jy866m0IOuwm+yVhOuTpOydtOyngCDslYrripTri6QuXG4gICAgaWYgKHJlY29yZFNpemUgPiB0aGlzLm1heEJ5dGVzKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5jb3VudCA9PT0gdGhpcy5jYXBhY2l0eSkge1xuICAgICAgLy8g6rCA7J6lIOyYpOuemOuQnCDsiqzroa/snYQg642u7Ja07JO064ukLlxuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgLT0gdGhpcy5zbG90Qnl0ZXNbdGhpcy5oZWFkXTtcbiAgICAgIHRoaXMuc2xvdHNbdGhpcy5oZWFkXSA9IHJlY29yZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF0gPSByZWNvcmRTaXplO1xuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgKz0gcmVjb3JkU2l6ZTtcbiAgICAgIHRoaXMuaGVhZCA9ICh0aGlzLmhlYWQgKyAxKSAlIHRoaXMuY2FwYWNpdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRhaWwgPSAodGhpcy5oZWFkICsgdGhpcy5jb3VudCkgJSB0aGlzLmNhcGFjaXR5O1xuICAgICAgdGhpcy5zbG90c1t0YWlsXSA9IHJlY29yZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RhaWxdID0gcmVjb3JkU2l6ZTtcbiAgICAgIHRoaXMuY3VycmVudEJ5dGVzICs9IHJlY29yZFNpemU7XG4gICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMuY3VycmVudEJ5dGVzID4gdGhpcy5tYXhCeXRlcyAmJiB0aGlzLmNvdW50ID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50Qnl0ZXMgLT0gdGhpcy5zbG90Qnl0ZXNbdGhpcy5oZWFkXTtcbiAgICAgIHRoaXMuc2xvdHNbdGhpcy5oZWFkXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW3RoaXMuaGVhZF0gPSAwO1xuICAgICAgdGhpcy5oZWFkID0gKHRoaXMuaGVhZCArIDEpICUgdGhpcy5jYXBhY2l0eTtcbiAgICAgIHRoaXMuY291bnQgLT0gMTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIocHJlZGljYXRlOiAocmVjb3JkOiBUUmVjb3JkKSA9PiBib29sZWFuLCBsaW1pdD86IG51bWJlcik6IFRSZWNvcmRbXSB7XG4gICAgY29uc3QgbWF0Y2hlZDogVFJlY29yZFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuc2xvdHNbKHRoaXMuaGVhZCArIGkpICUgdGhpcy5jYXBhY2l0eV07XG4gICAgICBpZiAocmVjb3JkICE9PSB1bmRlZmluZWQgJiYgcHJlZGljYXRlKHJlY29yZCkpIG1hdGNoZWQucHVzaChyZWNvcmQpO1xuICAgIH1cbiAgICBpZiAobGltaXQgIT09IHVuZGVmaW5lZCAmJiBsaW1pdCA+IDAgJiYgbWF0Y2hlZC5sZW5ndGggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIG1hdGNoZWQuc2xpY2UoLWxpbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoZWQ7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2FwYWNpdHk7IGkrKykge1xuICAgICAgdGhpcy5zbG90c1tpXSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2xvdEJ5dGVzW2ldID0gMDtcbiAgICB9XG4gICAgdGhpcy5oZWFkID0gMDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmN1cnJlbnRCeXRlcyA9IDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUaW1lV2luZG93PFRSZWNvcmQgZXh0ZW5kcyB7IHRpbWVzdGFtcDogbnVtYmVyIH0+KFxuICByZWNvcmQ6IFRSZWNvcmQsXG4gIHNpbmNlOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIHVudGlsOiBudW1iZXIgfCB1bmRlZmluZWQsXG4pOiBib29sZWFuIHtcbiAgaWYgKHNpbmNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRpbWVzdGFtcCA8IHNpbmNlKSByZXR1cm4gZmFsc2U7XG4gIGlmICh1bnRpbCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50aW1lc3RhbXAgPiB1bnRpbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZXN0aW1hdGVFdmVudEJ5dGVzKHJlY29yZDogV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRSZWNvcmQpOiBudW1iZXIge1xuICBsZXQgc2l6ZSA9IDIwMDtcbiAgaWYgKHJlY29yZC5wYXlsb2FkUHJldmlldyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNpemUgKz0gQnVmZmVyLmJ5dGVMZW5ndGgoSlNPTi5zdHJpbmdpZnkocmVjb3JkLnBheWxvYWRQcmV2aWV3KSwgXCJ1dGYtOFwiKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHNpemUgKz0gMTAwO1xuICAgIH1cbiAgfVxuICBpZiAocmVjb3JkLmRldGFpbCkge1xuICAgIHRyeSB7XG4gICAgICBzaXplICs9IEJ1ZmZlci5ieXRlTGVuZ3RoKEpTT04uc3RyaW5naWZ5KHJlY29yZC5kZXRhaWwpLCBcInV0Zi04XCIpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgc2l6ZSArPSAxMDA7XG4gICAgfVxuICB9XG4gIHJldHVybiBzaXplO1xufVxuXG5mdW5jdGlvbiBlc3RpbWF0ZU1ldHJpY0J5dGVzKF9yZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZCk6IG51bWJlciB7XG4gIHJldHVybiAyMDA7XG59XG5cbmZ1bmN0aW9uIGVzdGltYXRlU3BhbkJ5dGVzKF9yZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQpOiBudW1iZXIge1xuICByZXR1cm4gMjAwO1xufVxuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlFdmVudFN0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRTdG9yZSB7XG4gIHJlYWRvbmx5IHNpbms6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50U2luaztcblxuICBwcml2YXRlIHJlYWRvbmx5IGJ1ZmZlcjogSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkPihcbiAgICAgIG9wdGlvbnMsXG4gICAgICBlc3RpbWF0ZUV2ZW50Qnl0ZXMsXG4gICAgKTtcblxuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIGVtaXQ6IChyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHF1ZXJ5KGZpbHRlcjogV2ViU29ja2V0VGVsZW1ldHJ5RXZlbnRRdWVyeUZpbHRlcik6IFdlYlNvY2tldFRlbGVtZXRyeUV2ZW50UmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5uYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWUgIT09IGZpbHRlci5uYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmxldmVsICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmxldmVsICE9PSBmaWx0ZXIubGV2ZWwpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuY29ubmVjdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLmNvbm5lY3Rpb25JZCAhPT0gZmlsdGVyLmNvbm5lY3Rpb25JZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci51c2VySWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQudXNlcklkICE9PSBmaWx0ZXIudXNlcklkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5uYW1lc3BhY2UgIT09IGZpbHRlci5uYW1lc3BhY2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIudHJhY2VJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC50cmFjZUlkICE9PSBmaWx0ZXIudHJhY2VJZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKCFhcHBseVRpbWVXaW5kb3cocmVjb3JkLCBmaWx0ZXIuc2luY2UsIGZpbHRlci51bnRpbCkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIGZpbHRlci5saW1pdCk7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmJ1ZmZlci5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbk1lbW9yeU1ldHJpY1N0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljU3RvcmUge1xuICByZWFkb25seSBzaW5rOiBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNTaW5rO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYnVmZmVyOiBJbk1lbW9yeVJpbmdCdWZmZXI8V2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeU1ldHJpY1JlY29yZD4oXG4gICAgICBvcHRpb25zLFxuICAgICAgZXN0aW1hdGVNZXRyaWNCeXRlcyxcbiAgICApO1xuXG4gICAgdGhpcy5zaW5rID0ge1xuICAgICAgZW1pdDogKHJlY29yZDogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUmVjb3JkKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMuYnVmZmVyLnB1c2gocmVjb3JkKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHF1ZXJ5KGZpbHRlcjogV2ViU29ja2V0VGVsZW1ldHJ5TWV0cmljUXVlcnlGaWx0ZXIpOiBXZWJTb2NrZXRUZWxlbWV0cnlNZXRyaWNSZWNvcmRbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyLmZpbHRlcigocmVjb3JkKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLm5hbWUgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQubmFtZSAhPT0gZmlsdGVyLm5hbWUpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIua2luZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC5raW5kICE9PSBmaWx0ZXIua2luZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5jb25uZWN0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQuY29ubmVjdGlvbklkICE9PSBmaWx0ZXIuY29ubmVjdGlvbklkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnVzZXJJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC51c2VySWQgIT09IGZpbHRlci51c2VySWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWVzcGFjZSAhPT0gZmlsdGVyLm5hbWVzcGFjZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci50cmFjZUlkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRyYWNlSWQgIT09IGZpbHRlci50cmFjZUlkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWFwcGx5VGltZVdpbmRvdyhyZWNvcmQsIGZpbHRlci5zaW5jZSwgZmlsdGVyLnVudGlsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgZmlsdGVyLmxpbWl0KTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5U3BhblN0b3JlIGltcGxlbWVudHMgV2ViU29ja2V0VGVsZW1ldHJ5U3BhblN0b3JlIHtcbiAgcmVhZG9ubHkgc2luazogV2ViU29ja2V0VGVsZW1ldHJ5U3BhblNpbms7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBidWZmZXI6IEluTWVtb3J5UmluZ0J1ZmZlcjxXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkPjtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk1lbW9yeVN0b3JlT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgSW5NZW1vcnlSaW5nQnVmZmVyPFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQ+KG9wdGlvbnMsIGVzdGltYXRlU3BhbkJ5dGVzKTtcblxuICAgIHRoaXMuc2luayA9IHtcbiAgICAgIGVtaXQ6IChyZWNvcmQ6IFdlYlNvY2tldFRlbGVtZXRyeVNwYW5SZWNvcmQpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5idWZmZXIucHVzaChyZWNvcmQpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcXVlcnkoZmlsdGVyOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUXVlcnlGaWx0ZXIpOiBXZWJTb2NrZXRUZWxlbWV0cnlTcGFuUmVjb3JkW10ge1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlci5maWx0ZXIoKHJlY29yZCkgPT4ge1xuICAgICAgaWYgKGZpbHRlci5vcGVyYXRpb25OYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm9wZXJhdGlvbk5hbWUgIT09IGZpbHRlci5vcGVyYXRpb25OYW1lKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLmtpbmQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQua2luZCAhPT0gZmlsdGVyLmtpbmQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIuc3RhdHVzICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnN0YXR1cyAhPT0gZmlsdGVyLnN0YXR1cykgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci5jb25uZWN0aW9uSWQgIT09IHVuZGVmaW5lZCAmJiByZWNvcmQuY29ubmVjdGlvbklkICE9PSBmaWx0ZXIuY29ubmVjdGlvbklkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyLnVzZXJJZCAhPT0gdW5kZWZpbmVkICYmIHJlY29yZC51c2VySWQgIT09IGZpbHRlci51c2VySWQpIHJldHVybiBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLm5hbWVzcGFjZSAhPT0gZmlsdGVyLm5hbWVzcGFjZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKGZpbHRlci50cmFjZUlkICE9PSB1bmRlZmluZWQgJiYgcmVjb3JkLnRyYWNlSWQgIT09IGZpbHRlci50cmFjZUlkKSByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWFwcGx5VGltZVdpbmRvdyhyZWNvcmQsIGZpbHRlci5zaW5jZSwgZmlsdGVyLnVudGlsKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgZmlsdGVyLmxpbWl0KTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuYnVmZmVyLmNsZWFyKCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBb0dBLFNBQVMsZ0JBQ1AsUUFDQSxPQUNBLE9BQ1M7QUFDVCxLQUFJLFVBQVUsYUFB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
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ParsedTraceParent = {
|
|
2
|
+
version: string;
|
|
3
|
+
traceId: string;
|
|
4
|
+
parentId: string;
|
|
5
|
+
traceFlags: number;
|
|
6
|
+
sampled: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare function parseTraceParent(header: string): ParsedTraceParent | null;
|
|
9
|
+
export declare function generateTraceId(): string;
|
|
10
|
+
export declare function generateSpanId(): string;
|
|
11
|
+
export declare function formatTraceParent(traceId: string, spanId: string, sampled: boolean): string;
|
|
12
|
+
//# sourceMappingURL=ws-telemetry-trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-telemetry-trace.d.ts","sourceRoot":"","sources":["../../src/stream/ws-telemetry-trace.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAQF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAsBzE;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAG3F"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
import { randomBytes } from "node:crypto";
|
|
3
|
+
|
|
4
|
+
//#region src/stream/ws-telemetry-trace.ts
|
|
5
|
+
function parseTraceParent(header) {
|
|
6
|
+
const trimmed = header.trim().toLowerCase();
|
|
7
|
+
const match = TRACEPARENT_REGEX.exec(trimmed);
|
|
8
|
+
if (!match) return null;
|
|
9
|
+
const [, version, traceId, parentId, flagsHex] = match;
|
|
10
|
+
if (version === "ff") return null;
|
|
11
|
+
if (traceId === ALL_ZERO_TRACE_ID || parentId === ALL_ZERO_SPAN_ID) return null;
|
|
12
|
+
const traceFlags = parseInt(flagsHex, 16);
|
|
13
|
+
return {
|
|
14
|
+
version,
|
|
15
|
+
traceId,
|
|
16
|
+
parentId,
|
|
17
|
+
traceFlags,
|
|
18
|
+
sampled: (traceFlags & 1) === 1
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function generateTraceId() {
|
|
22
|
+
return randomBytes(16).toString("hex");
|
|
23
|
+
}
|
|
24
|
+
function generateSpanId() {
|
|
25
|
+
return randomBytes(8).toString("hex");
|
|
26
|
+
}
|
|
27
|
+
function formatTraceParent(traceId, spanId, sampled) {
|
|
28
|
+
const flags = sampled ? "01" : "00";
|
|
29
|
+
return `00-${traceId}-${spanId}-${flags}`;
|
|
30
|
+
}
|
|
31
|
+
var TRACEPARENT_REGEX, ALL_ZERO_TRACE_ID, ALL_ZERO_SPAN_ID;
|
|
32
|
+
var init_ws_telemetry_trace = __esmMin((() => {
|
|
33
|
+
TRACEPARENT_REGEX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
|
|
34
|
+
ALL_ZERO_TRACE_ID = "00000000000000000000000000000000";
|
|
35
|
+
ALL_ZERO_SPAN_ID = "0000000000000000";
|
|
36
|
+
}));
|
|
37
|
+
|
|
38
|
+
//#endregion
|
|
39
|
+
init_ws_telemetry_trace();
|
|
40
|
+
export { formatTraceParent, generateSpanId, generateTraceId, init_ws_telemetry_trace, parseTraceParent };
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGVsZW1ldHJ5LXRyYWNlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vd3MtdGVsZW1ldHJ5LXRyYWNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5cbmV4cG9ydCB0eXBlIFBhcnNlZFRyYWNlUGFyZW50ID0ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIHRyYWNlSWQ6IHN0cmluZztcbiAgcGFyZW50SWQ6IHN0cmluZztcbiAgdHJhY2VGbGFnczogbnVtYmVyO1xuICBzYW1wbGVkOiBib29sZWFuO1xufTtcblxuLy8gdHJhY2VwYXJlbnQg7Y+s66e3OiAwMC08MzIgaGV4IHRyYWNlSWQ+LTwxNiBoZXggc3BhbklkPi08MiBoZXggZmxhZ3M+XG4vLyDsmIjsi5w6IDAwLTRiZjkyZjM1NzdiMTZkOGEyZTNlMjRmZjAyZTZjOTk4LTAwZjA2N2FhMGJhOTAyYjctMDFcbmNvbnN0IFRSQUNFUEFSRU5UX1JFR0VYID0gL14oWzAtOWEtZl17Mn0pLShbMC05YS1mXXszMn0pLShbMC05YS1mXXsxNn0pLShbMC05YS1mXXsyfSkkLztcbmNvbnN0IEFMTF9aRVJPX1RSQUNFX0lEID0gXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiO1xuY29uc3QgQUxMX1pFUk9fU1BBTl9JRCA9IFwiMDAwMDAwMDAwMDAwMDAwMFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUcmFjZVBhcmVudChoZWFkZXI6IHN0cmluZyk6IFBhcnNlZFRyYWNlUGFyZW50IHwgbnVsbCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBoZWFkZXIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG1hdGNoID0gVFJBQ0VQQVJFTlRfUkVHRVguZXhlYyh0cmltbWVkKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgWywgdmVyc2lvbiwgdHJhY2VJZCwgcGFyZW50SWQsIGZsYWdzSGV4XSA9IG1hdGNoO1xuXG4gIC8vIGZm64qUIFczQyBUcmFjZSBDb250ZXh0IOyKpO2OmeyXkOyEnCBpbnZhbGlkIHZlcnNpb24gbWFya2Vy66GcIOyYiOyVveuQmOyWtCDsnojsnYxcbiAgaWYgKHZlcnNpb24gPT09IFwiZmZcIikgcmV0dXJuIG51bGw7XG5cbiAgLy8gVzNDIOyKpO2OmeyXkCDrlLDrnbwg66qo65GQIDDsnbggdHJhY2UgaWQgLyBzcGFuIGlk64qUIOycoO2aqO2VmOyngCDslYrsnYxcbiAgaWYgKHRyYWNlSWQgPT09IEFMTF9aRVJPX1RSQUNFX0lEIHx8IHBhcmVudElkID09PSBBTExfWkVST19TUEFOX0lEKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB0cmFjZUZsYWdzID0gcGFyc2VJbnQoZmxhZ3NIZXgsIDE2KTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb24sXG4gICAgdHJhY2VJZCxcbiAgICBwYXJlbnRJZCxcbiAgICB0cmFjZUZsYWdzLFxuICAgIHNhbXBsZWQ6ICh0cmFjZUZsYWdzICYgMHgwMSkgPT09IDEsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVRyYWNlSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZyhcImhleFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlU3BhbklkKCk6IHN0cmluZyB7XG4gIHJldHVybiByYW5kb21CeXRlcyg4KS50b1N0cmluZyhcImhleFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFRyYWNlUGFyZW50KHRyYWNlSWQ6IHN0cmluZywgc3BhbklkOiBzdHJpbmcsIHNhbXBsZWQ6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBmbGFncyA9IHNhbXBsZWQgPyBcIjAxXCIgOiBcIjAwXCI7XG4gIHJldHVybiBgMDAtJHt0cmFjZUlkfS0ke3NwYW5JZH0tJHtmbGFnc31gO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBZ0JBLFNBQWdCLGlCQUFpQixRQUEwQztDQUN6RSxNQUFNLFVBQVUsT0FBTyxNQUFNLENBQUMsYUFBYTtDQUMzQyxNQUFNLFFBQVEsa0JBQWtCLEtBQUssUUFBUTtBQUM3QyxLQUFJLENBQUMsTUFBTyxRQUFPO0NBRW5CLE1BQU0sR0FBRyxTQUFTLFNBQVMsVUFBVSxZQUFZO0FBR2pELEtBQUksWUFBWSxLQUFNLFFBQU87QUFHN0IsS0FBSSxZQUFZLHFCQUFxQixhQUFhLGlCQUFrQixRQUFPO0NBRTNFLE1BQU0sYUFBYSxTQUFTLFVBQVUsR0FBRztBQUV6QyxRQUFPO0VBQ0w7RUFDQTtFQUNBO0VBQ0E7RUFDQSxVQUFVLGFBQWEsT0FBVTtFQUNsQzs7QUFHSCxTQUFnQixrQkFBMEI7QUFDeEMsUUFBTyxZQUFZLEdBQUcsQ0FBQyxTQUFTLE1BQU07O0FBR3hDLFNBQWdCLGlCQUF5QjtBQUN2QyxRQUFPLFlBQVksRUFBRSxDQUFDLFNBQVMsTUFBTTs7QUFHdkMsU0FBZ0Isa0JBQWtCLFNBQWlCLFFBQWdCLFNBQTBCO0NBQzNGLE1BQU0sUUFBUSxVQUFVLE9BQU87QUFDL0IsUUFBTyxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUc7Ozs7Q0F0QzlCLG9CQUFvQjtDQUNwQixvQkFBb0I7Q0FDcEIsbUJBQW1CIn0=
|