sonamu 0.9.9 → 0.9.10
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 +2 -2
- 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 +11 -5
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +2 -2
- 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 +10 -3
- package/src/utils/class-name.ts +12 -0
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type Server } from "http";
|
|
2
2
|
import { type WebsocketPluginOptions } from "@fastify/websocket";
|
|
3
3
|
import { type FastifyReply } from "fastify";
|
|
4
|
-
import { type ExtendedApi } from "./decorators";
|
|
5
4
|
export declare function resolveIntegratedViteHmrOptions({ httpServer, requiresDedicatedWebSocketServer, rawPort, }: {
|
|
6
5
|
httpServer: Server;
|
|
7
6
|
requiresDedicatedWebSocketServer: boolean;
|
|
@@ -11,9 +10,8 @@ export declare function resolveIntegratedViteHmrOptions({ httpServer, requiresDe
|
|
|
11
10
|
} | {
|
|
12
11
|
port: number;
|
|
13
12
|
};
|
|
14
|
-
export declare function resolveWebSocketPluginOptions({ rawPluginOption,
|
|
13
|
+
export declare function resolveWebSocketPluginOptions({ rawPluginOption, }: {
|
|
15
14
|
rawPluginOption: boolean | WebsocketPluginOptions | undefined;
|
|
16
|
-
apis: ExtendedApi[];
|
|
17
15
|
}): WebsocketPluginOptions | undefined;
|
|
18
16
|
export declare function resolveWebSocketCloseDescriptor(error: unknown): {
|
|
19
17
|
code: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-helpers.d.ts","sourceRoot":"","sources":["../../src/api/websocket-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket-helpers.d.ts","sourceRoot":"","sources":["../../src/api/websocket-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAO5C,wBAAgB,+BAA+B,CAAC,EAC9C,UAAU,EACV,gCAAgC,EAChC,OAA0C,GAC3C,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC,EAAE,OAAO,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAOxC;AAGD,wBAAgB,6BAA6B,CAAC,EAC5C,eAAe,GAChB,EAAE;IACD,eAAe,EAAE,OAAO,GAAG,sBAAsB,GAAG,SAAS,CAAC;CAC/D,GAAG,sBAAsB,GAAG,SAAS,CAWrC;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5B,CAgCA;AAID,wBAAgB,wBAAwB,IAAI,YAAY,CAQvD"}
|
|
@@ -10,19 +10,9 @@ function resolveIntegratedViteHmrOptions({ httpServer, requiresDedicatedWebSocke
|
|
|
10
10
|
const parsedPort = rawPort?.trim() ? Number(rawPort) : 24678;
|
|
11
11
|
return Number.isFinite(parsedPort) && parsedPort > 0 ? { port: parsedPort } : { port: 24678 };
|
|
12
12
|
}
|
|
13
|
-
function resolveWebSocketPluginOptions({ rawPluginOption
|
|
13
|
+
function resolveWebSocketPluginOptions({ rawPluginOption }) {
|
|
14
14
|
const pluginOptions = rawPluginOption && rawPluginOption !== true ? { ...rawPluginOption } : {};
|
|
15
15
|
const serverOptions = isPlainObject(pluginOptions.options) ? { ...pluginOptions.options } : {};
|
|
16
|
-
if (isPositiveNumber(pluginOptions.maxPayload) && serverOptions.maxPayload === undefined) {
|
|
17
|
-
serverOptions.maxPayload = pluginOptions.maxPayload;
|
|
18
|
-
delete pluginOptions.maxPayload;
|
|
19
|
-
}
|
|
20
|
-
if (serverOptions.maxPayload === undefined) {
|
|
21
|
-
const routeMaxPayloads = apis.map((api) => api.websocketOptions?.maxPayload).filter(isPositiveNumber);
|
|
22
|
-
if (routeMaxPayloads.length > 0) {
|
|
23
|
-
serverOptions.maxPayload = Math.max(...routeMaxPayloads);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
16
|
if (Object.keys(serverOptions).length > 0) {
|
|
27
17
|
pluginOptions.options = serverOptions;
|
|
28
18
|
}
|
|
@@ -63,9 +53,6 @@ function createWebSocketReplyStub() {
|
|
|
63
53
|
throw new Error("FastifyReply is not available in websocket context. Define websocketContextProvider if your context setup depends on reply mutation.");
|
|
64
54
|
} });
|
|
65
55
|
}
|
|
66
|
-
function isPositiveNumber(value) {
|
|
67
|
-
return typeof value === "number" && Number.isFinite(value) && value > 0;
|
|
68
|
-
}
|
|
69
56
|
var init_websocket_helpers = __esmMin((() => {
|
|
70
57
|
init_so_exceptions();
|
|
71
58
|
init_utils();
|
|
@@ -74,4 +61,4 @@ var init_websocket_helpers = __esmMin((() => {
|
|
|
74
61
|
//#endregion
|
|
75
62
|
init_websocket_helpers();
|
|
76
63
|
export { createWebSocketReplyStub, init_websocket_helpers, resolveIntegratedViteHmrOptions, resolveWebSocketCloseDescriptor, resolveWebSocketPluginOptions };
|
|
77
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWhlbHBlcnMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS93ZWJzb2NrZXQtaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFNlcnZlciB9IGZyb20gXCJodHRwXCI7XG5cbmltcG9ydCB7IHR5cGUgV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gXCJAZmFzdGlmeS93ZWJzb2NrZXRcIjtcbmltcG9ydCB7IHR5cGUgRmFzdGlmeVJlcGx5IH0gZnJvbSBcImZhc3RpZnlcIjtcblxuaW1wb3J0IHsgaXNTb0V4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLy8gRmFzdGlmeSB3ZWJzb2NrZXQgcm91dGXsmYAgVml0ZSBITVIgd2Vic29ja2V07J20IOqwmeydgCBzZXJ2ZXIgc29ja2V07J2EIOuRkOqzoCDstqnrj4ztlZjripQg6rKD7J2EIOuwqeyngO2VmOq4sCDsnITtlbQsXG4vLyBXUyByb3V0ZeqwgCDsobTsnqztlZjrqbQgSE1S7J2EIOuzhOuPhCDtj6ztirjroZwg67aE66as7ZW0IOudhOybgFxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbnRlZ3JhdGVkVml0ZUhtck9wdGlvbnMoe1xuICBodHRwU2VydmVyLFxuICByZXF1aXJlc0RlZGljYXRlZFdlYlNvY2tldFNlcnZlcixcbiAgcmF3UG9ydCA9IHByb2Nlc3MuZW52LlNPTkFNVV9WSVRFX0hNUl9QT1JULFxufToge1xuICBodHRwU2VydmVyOiBTZXJ2ZXI7XG4gIHJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyOiBib29sZWFuO1xuICByYXdQb3J0Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufSk6IHsgc2VydmVyOiBTZXJ2ZXIgfSB8IHsgcG9ydDogbnVtYmVyIH0ge1xuICBpZiAoIXJlcXVpcmVzRGVkaWNhdGVkV2ViU29ja2V0U2VydmVyKSB7XG4gICAgcmV0dXJuIHsgc2VydmVyOiBodHRwU2VydmVyIH07XG4gIH1cblxuICBjb25zdCBwYXJzZWRQb3J0ID0gcmF3UG9ydD8udHJpbSgpID8gTnVtYmVyKHJhd1BvcnQpIDogMjQ2Nzg7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkUG9ydCkgJiYgcGFyc2VkUG9ydCA+IDAgPyB7IHBvcnQ6IHBhcnNlZFBvcnQgfSA6IHsgcG9ydDogMjQ2NzggfTtcbn1cblxuLy8gQGZhc3RpZnkvd2Vic29ja2V0IHRyYW5zcG9ydCBvcHRpb27snYAgc2VydmVyLnBsdWdpbnMud3Psl5Ag66qF7Iuc65CcIOqwkuunjCDsgqzsmqntlaguXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVdlYlNvY2tldFBsdWdpbk9wdGlvbnMoe1xuICByYXdQbHVnaW5PcHRpb24sXG59OiB7XG4gIHJhd1BsdWdpbk9wdGlvbjogYm9vbGVhbiB8IFdlYnNvY2tldFBsdWdpbk9wdGlvbnMgfCB1bmRlZmluZWQ7XG59KTogV2Vic29ja2V0UGx1Z2luT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHBsdWdpbk9wdGlvbnMgPSByYXdQbHVnaW5PcHRpb24gJiYgcmF3UGx1Z2luT3B0aW9uICE9PSB0cnVlID8geyAuLi5yYXdQbHVnaW5PcHRpb24gfSA6IHt9O1xuICBjb25zdCBzZXJ2ZXJPcHRpb25zID0gaXNQbGFpbk9iamVjdChwbHVnaW5PcHRpb25zLm9wdGlvbnMpXG4gICAgPyB7IC4uLnBsdWdpbk9wdGlvbnMub3B0aW9ucyB9XG4gICAgOiAoe30gYXMgTm9uTnVsbGFibGU8V2Vic29ja2V0UGx1Z2luT3B0aW9uc1tcIm9wdGlvbnNcIl0+KTtcblxuICBpZiAoT2JqZWN0LmtleXMoc2VydmVyT3B0aW9ucykubGVuZ3RoID4gMCkge1xuICAgIHBsdWdpbk9wdGlvbnMub3B0aW9ucyA9IHNlcnZlck9wdGlvbnM7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXMocGx1Z2luT3B0aW9ucykubGVuZ3RoID4gMCA/IHBsdWdpbk9wdGlvbnMgOiB1bmRlZmluZWQ7XG59XG5cbi8vIGhhbmRzaGFrZS9hdXRoL3ZhbGlkYXRpb24g7Iuk7Yyo66W8IGdlbmVyaWMgMTAxMeuhnCDrrYnqsJzsp4Ag7JWK6rOgIDEwMDgocG9saWN5IHZpb2xhdGlvbinroZwg66ek7ZWR7ZW0LFxuLy8gY2xvc2UgY29kZSBwb2xpY3nrpbwg7ZWcIOqzs+yXkOyEnCDsoJXsnZjtlahcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2ViU29ja2V0Q2xvc2VEZXNjcmlwdG9yKGVycm9yOiB1bmtub3duKToge1xuICBjb2RlOiBudW1iZXI7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBsb2dMZXZlbDogXCJ3YXJuXCIgfCBcImVycm9yXCI7XG59IHtcbiAgaWYgKGlzU29FeGNlcHRpb24oZXJyb3IpKSB7XG4gICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPT09IDQwMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29kZTogMTAwOCxcbiAgICAgICAgcmVhc29uOiBcIkludmFsaWQgd2Vic29ja2V0IGhhbmRzaGFrZVwiLFxuICAgICAgICBsb2dMZXZlbDogXCJ3YXJuXCIsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChlcnJvci5zdGF0dXNDb2RlID09PSA0MDEgfHwgZXJyb3Iuc3RhdHVzQ29kZSA9PT0gNDAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2RlOiAxMDA4LFxuICAgICAgICByZWFzb246IFwiVW5hdXRob3JpemVkIHdlYnNvY2tldCBjb25uZWN0aW9uXCIsXG4gICAgICAgIGxvZ0xldmVsOiBcIndhcm5cIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVycm9yLnN0YXR1c0NvZGUgPj0gNDAwICYmIGVycm9yLnN0YXR1c0NvZGUgPCA1MDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvZGU6IDEwMDgsXG4gICAgICAgIHJlYXNvbjogXCJSZWplY3RlZCB3ZWJzb2NrZXQgY29ubmVjdGlvblwiLFxuICAgICAgICBsb2dMZXZlbDogXCJ3YXJuXCIsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29kZTogMTAxMSxcbiAgICByZWFzb246IFwiV2ViU29ja2V0IGhhbmRsZXIgZmFpbGVkXCIsXG4gICAgbG9nTGV2ZWw6IFwiZXJyb3JcIixcbiAgfTtcbn1cblxuLy8gV1Mg6rK966Gc7JeQ7ISc64qUIHJlcGx56rCAIOyhtOyerO2VmOyngCDslYrsnLzrr4DroZwg7KCR6re8IOyLnOuPhOulvCDsponsi5wg7JeQ65+s66GcIHN1cmZhY2XtlbQgdHJhbnNwb3J0IG1pc3VzZeulvCDruajrpqwg65Oc65+s64OEXG4vLyBTU0UvcmVwbHnsl5Ag7J2Y7KG07ZWY64qUIGNvbnRleHRQcm92aWRlcuqwgCDsnojsnLzrqbQgd2Vic29ja2V0Q29udGV4dFByb3ZpZGVy66W8IOuUsOuhnCDsoJXsnZjtlZjrnbzripQg6rCA7J2065OcIOyXre2VoOuPhCDtlahcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVXZWJTb2NrZXRSZXBseVN0dWIoKTogRmFzdGlmeVJlcGx5IHtcbiAgcmV0dXJuIG5ldyBQcm94eSh7fSBhcyBGYXN0aWZ5UmVwbHksIHtcbiAgICBnZXQoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRmFzdGlmeVJlcGx5IGlzIG5vdCBhdmFpbGFibGUgaW4gd2Vic29ja2V0IGNvbnRleHQuIERlZmluZSB3ZWJzb2NrZXRDb250ZXh0UHJvdmlkZXIgaWYgeW91ciBjb250ZXh0IHNldHVwIGRlcGVuZHMgb24gcmVwbHkgbXV0YXRpb24uXCIsXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7OztBQVVBLFNBQWdCLGdDQUFnQyxFQUM5QyxZQUNBLGtDQUNBLFVBQVUsUUFBUSxJQUFJLHdCQUtrQjtBQUN4QyxLQUFJLENBQUMsa0NBQWtDO0FBQ3JDLFNBQU8sRUFBRSxRQUFRLFlBQVk7O0NBRy9CLE1BQU0sYUFBYSxTQUFTLE1BQU0sR0FBRyxPQUFPLFFBQVEsR0FBRztBQUN2RCxRQUFPLE9BQU8sU0FBUyxXQUFXLElBQUksYUFBYSxJQUFJLEVBQUUsTUFBTSxZQUFZLEdBQUcsRUFBRSxNQUFNLE9BQU87O0FBSS9GLFNBQWdCLDhCQUE4QixFQUM1QyxtQkFHcUM7Q0FDckMsTUFBTSxnQkFBZ0IsbUJBQW1CLG9CQUFvQixPQUFPLEVBQUUsR0FBRyxpQkFBaUIsR0FBRyxFQUFFO0NBQy9GLE1BQU0sZ0JBQWdCLGNBQWMsY0FBYyxRQUFRLEdBQ3RELEVBQUUsR0FBRyxjQUFjLFNBQVMsR0FDM0IsRUFBRTtBQUVQLEtBQUksT0FBTyxLQUFLLGNBQWMsQ0FBQyxTQUFTLEdBQUc7QUFDekMsZ0JBQWMsVUFBVTs7QUFHMUIsUUFBTyxPQUFPLEtBQUssY0FBYyxDQUFDLFNBQVMsSUFBSSxnQkFBZ0I7O0FBS2pFLFNBQWdCLGdDQUFnQyxPQUk5QztBQUNBLEtBQUksY0FBYyxNQUFNLEVBQUU7QUFDeEIsTUFBSSxNQUFNLGVBQWUsS0FBSztBQUM1QixVQUFPO0lBQ0wsTUFBTTtJQUNOLFFBQVE7SUFDUixVQUFVO0lBQ1g7O0FBR0gsTUFBSSxNQUFNLGVBQWUsT0FBTyxNQUFNLGVBQWUsS0FBSztBQUN4RCxVQUFPO0lBQ0wsTUFBTTtJQUNOLFFBQVE7SUFDUixVQUFVO0lBQ1g7O0FBR0gsTUFBSSxNQUFNLGNBQWMsT0FBTyxNQUFNLGFBQWEsS0FBSztBQUNyRCxVQUFPO0lBQ0wsTUFBTTtJQUNOLFFBQVE7SUFDUixVQUFVO0lBQ1g7OztBQUlMLFFBQU87RUFDTCxNQUFNO0VBQ04sUUFBUTtFQUNSLFVBQVU7RUFDWDs7QUFLSCxTQUFnQiwyQkFBeUM7QUFDdkQsUUFBTyxJQUFJLE1BQU0sRUFBRSxFQUFrQixFQUNuQyxNQUFNO0FBQ0osUUFBTSxJQUFJLE1BQ1IsdUlBQ0Q7SUFFSixDQUFDOzs7cUJBekZ3RDthQUNiIn0=
|
package/dist/stream/index.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ export * from "./ws-audience";
|
|
|
3
3
|
export * from "./ws-cluster-bus";
|
|
4
4
|
export * from "./ws-core";
|
|
5
5
|
export * from "./ws-presence-store";
|
|
6
|
+
export * from "./ws-telemetry";
|
|
7
|
+
export * from "./ws-telemetry-memory";
|
|
8
|
+
export * from "./ws-telemetry-trace";
|
|
6
9
|
export * from "./ws";
|
|
7
10
|
export * from "./ws-registry";
|
|
8
11
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stream/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/stream/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC"}
|
package/dist/stream/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { createMockSSEFactory, createSSEFactory, init_sse } from "./sse.js";
|
|
2
2
|
import { WebSocketAudience, init_ws_audience } from "./ws-audience.js";
|
|
3
3
|
import { NoopWebSocketClusterBus, init_ws_cluster_bus } from "./ws-cluster-bus.js";
|
|
4
|
+
import { InMemoryEventStore, InMemoryMetricStore, InMemorySpanStore, init_ws_telemetry_memory } from "./ws-telemetry-memory.js";
|
|
5
|
+
import { formatTraceParent, generateSpanId, generateTraceId, init_ws_telemetry_trace, parseTraceParent } from "./ws-telemetry-trace.js";
|
|
6
|
+
import { DEFAULT_TRACE_OPTIONS, EMPTY_METRICS_SNAPSHOT, NoopWebSocketTelemetryController, WebSocketTelemetryControllerImpl, createWebSocketTelemetryController, init_ws_telemetry, isPromiseLike } from "./ws-telemetry.js";
|
|
4
7
|
import { InMemoryWebSocketPresenceStore, init_ws_presence_store } from "./ws-presence-store.js";
|
|
5
8
|
import { WebSocketRegistry, init_ws_registry } from "./ws-registry.js";
|
|
6
9
|
import { WebSocketRuntime, createWebSocketRuntime, init_ws } from "./ws.js";
|
|
@@ -11,9 +14,12 @@ init_sse();
|
|
|
11
14
|
init_ws_audience();
|
|
12
15
|
init_ws_cluster_bus();
|
|
13
16
|
init_ws_presence_store();
|
|
17
|
+
init_ws_telemetry();
|
|
18
|
+
init_ws_telemetry_memory();
|
|
19
|
+
init_ws_telemetry_trace();
|
|
14
20
|
init_ws();
|
|
15
21
|
init_ws_registry();
|
|
16
22
|
|
|
17
23
|
//#endregion
|
|
18
|
-
export { InMemoryWebSocketPresenceStore, NoopWebSocketClusterBus, WebSocketAudience, WebSocketRegistry, WebSocketRuntime, createMockSSEFactory, createSSEFactory, createWebSocketRuntime };
|
|
19
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
24
|
+
export { DEFAULT_TRACE_OPTIONS, EMPTY_METRICS_SNAPSHOT, InMemoryEventStore, InMemoryMetricStore, InMemorySpanStore, InMemoryWebSocketPresenceStore, NoopWebSocketClusterBus, NoopWebSocketTelemetryController, WebSocketAudience, WebSocketRegistry, WebSocketRuntime, WebSocketTelemetryControllerImpl, createMockSSEFactory, createSSEFactory, createWebSocketRuntime, createWebSocketTelemetryController, formatTraceParent, generateSpanId, generateTraceId, isPromiseLike, parseTraceParent };
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dzLWF1ZGllbmNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93cy1jbHVzdGVyLWJ1c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtY29yZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtcHJlc2VuY2Utc3RvcmVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3dzLXRlbGVtZXRyeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtdGVsZW1ldHJ5LW1lbW9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtdGVsZW1ldHJ5LXRyYWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd3MtcmVnaXN0cnlcIjtcbiJdLCJtYXBwaW5ncyI6IiJ9
|
package/dist/stream/ws-core.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-core.d.ts","sourceRoot":"","sources":["../../src/stream/ws-core.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-core.d.ts","sourceRoot":"","sources":["../../src/stream/ws-core.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,0BAA0B;IACzC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAEhB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC,CAAC"}
|
|
@@ -2,19 +2,27 @@ import { type WebSocketAudience } from "./ws-audience";
|
|
|
2
2
|
import { type WebSocketAudienceResolver } from "./ws-audience-resolver";
|
|
3
3
|
import { type WebSocketClusterBus } from "./ws-cluster-bus";
|
|
4
4
|
import { type WebSocketLocalConnectionStore } from "./ws-local-connection-store";
|
|
5
|
+
import { type WebSocketTelemetryController } from "./ws-telemetry";
|
|
5
6
|
export declare class WebSocketDeliveryEngine {
|
|
6
7
|
private readonly options;
|
|
7
8
|
private readonly pendingFanOutJobs;
|
|
8
9
|
private fanOutFlushScheduled;
|
|
9
10
|
private readonly unsubscribe;
|
|
11
|
+
private readonly telemetry;
|
|
12
|
+
private readonly unregisterMetricSource;
|
|
10
13
|
constructor(options: {
|
|
11
14
|
nodeId: string;
|
|
12
15
|
localConnections: WebSocketLocalConnectionStore;
|
|
13
16
|
audienceResolver: WebSocketAudienceResolver;
|
|
14
17
|
clusterBus: WebSocketClusterBus;
|
|
18
|
+
telemetryController?: WebSocketTelemetryController;
|
|
15
19
|
});
|
|
16
20
|
publishToAudience(audience: WebSocketAudience, event: string, data: unknown): void;
|
|
17
21
|
shutdown(): Promise<void>;
|
|
22
|
+
getTelemetrySnapshot(): {
|
|
23
|
+
pendingFanOutJobs: number;
|
|
24
|
+
pendingFanOutTargets: number;
|
|
25
|
+
};
|
|
18
26
|
private handleClusterEnvelope;
|
|
19
27
|
private enqueueFanOut;
|
|
20
28
|
private scheduleFanOutFlush;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-delivery.d.ts","sourceRoot":"","sources":["../../src/stream/ws-delivery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,KAAK,mBAAmB,EAAiC,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-delivery.d.ts","sourceRoot":"","sources":["../../src/stream/ws-delivery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,KAAK,mBAAmB,EAAiC,MAAM,kBAAkB,CAAC;AAE3F,OAAO,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAEL,KAAK,4BAA4B,EAClC,MAAM,gBAAgB,CAAC;AAKxB,qBAAa,uBAAuB;IAahC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAK1B;IACR,OAAO,CAAC,oBAAoB,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAa;gBAGjC,OAAO,EAAE;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,gBAAgB,EAAE,6BAA6B,CAAC;QAChD,gBAAgB,EAAE,yBAAyB,CAAC;QAC5C,UAAU,EAAE,mBAAmB,CAAC;QAChC,mBAAmB,CAAC,EAAE,4BAA4B,CAAC;KACpD;IAWH,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IA0E5E,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B,oBAAoB,IAAI;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAA;KAAE;IAanF,OAAO,CAAC,qBAAqB;IA+C7B,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -1,28 +1,49 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
2
|
+
import { NoopWebSocketTelemetryController, init_ws_telemetry } from "./ws-telemetry.js";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
4
|
|
|
4
5
|
//#region src/stream/ws-delivery.ts
|
|
5
6
|
var FAN_OUT_BATCH_SIZE, WebSocketDeliveryEngine;
|
|
6
7
|
var init_ws_delivery = __esmMin((() => {
|
|
8
|
+
init_ws_telemetry();
|
|
7
9
|
FAN_OUT_BATCH_SIZE = 250;
|
|
8
10
|
WebSocketDeliveryEngine = class {
|
|
9
11
|
pendingFanOutJobs = [];
|
|
10
12
|
fanOutFlushScheduled = false;
|
|
11
13
|
unsubscribe;
|
|
14
|
+
telemetry;
|
|
15
|
+
unregisterMetricSource;
|
|
12
16
|
constructor(options) {
|
|
13
17
|
this.options = options;
|
|
18
|
+
this.telemetry = this.options.telemetryController ?? new NoopWebSocketTelemetryController();
|
|
14
19
|
this.unsubscribe = this.options.clusterBus.subscribe((envelope) => {
|
|
15
20
|
this.handleClusterEnvelope(envelope);
|
|
16
21
|
});
|
|
22
|
+
this.unregisterMetricSource = this.telemetry.registerMetricSource({ collect: () => this.getTelemetrySnapshot() });
|
|
17
23
|
}
|
|
18
24
|
publishToAudience(audience, event, data) {
|
|
19
25
|
const routingPlan = this.options.audienceResolver.resolve(audience);
|
|
20
26
|
const localTargets = this.options.localConnections.getConnections(routingPlan.localSessionIds);
|
|
27
|
+
this.telemetry.emit({
|
|
28
|
+
name: "ws.fanout.resolved",
|
|
29
|
+
level: "debug",
|
|
30
|
+
detail: {
|
|
31
|
+
localTargetCount: localTargets.length,
|
|
32
|
+
remoteNodeCount: routingPlan.remoteNodeIds.length
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
this.telemetry.recordMetric({
|
|
36
|
+
name: "sonamu.ws.fanout.targets",
|
|
37
|
+
kind: "histogram",
|
|
38
|
+
value: localTargets.length + routingPlan.remoteNodeIds.length,
|
|
39
|
+
unit: "1",
|
|
40
|
+
tags: { audience_type: audience.type }
|
|
41
|
+
});
|
|
21
42
|
this.enqueueFanOut(localTargets, event, data);
|
|
22
43
|
if (routingPlan.remoteNodeIds.length === 0) {
|
|
23
44
|
return;
|
|
24
45
|
}
|
|
25
|
-
|
|
46
|
+
const envelope = {
|
|
26
47
|
id: randomUUID(),
|
|
27
48
|
sourceNodeId: this.options.nodeId,
|
|
28
49
|
targetNodeIds: routingPlan.remoteNodeIds,
|
|
@@ -30,21 +51,106 @@ var init_ws_delivery = __esmMin((() => {
|
|
|
30
51
|
event,
|
|
31
52
|
data,
|
|
32
53
|
emittedAt: Date.now()
|
|
54
|
+
};
|
|
55
|
+
const publishStartedAt = performance.now();
|
|
56
|
+
Promise.resolve(this.options.clusterBus.publish(envelope)).then(() => {
|
|
57
|
+
const durationMs = performance.now() - publishStartedAt;
|
|
58
|
+
this.telemetry.emit({
|
|
59
|
+
name: "ws.cluster.envelope.published",
|
|
60
|
+
level: "debug",
|
|
61
|
+
detail: {
|
|
62
|
+
event,
|
|
63
|
+
targetNodeCount: routingPlan.remoteNodeIds.length
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
this.telemetry.recordSpan({
|
|
67
|
+
operationName: "ws.cluster.publish",
|
|
68
|
+
kind: "producer",
|
|
69
|
+
durationMs,
|
|
70
|
+
status: "unset",
|
|
71
|
+
attributes: {
|
|
72
|
+
event,
|
|
73
|
+
targetNodeCount: routingPlan.remoteNodeIds.length
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}).catch((error) => {
|
|
77
|
+
const durationMs = performance.now() - publishStartedAt;
|
|
78
|
+
this.telemetry.emit({
|
|
79
|
+
name: "ws.cluster.envelope.failed",
|
|
80
|
+
level: "error",
|
|
81
|
+
detail: { event }
|
|
82
|
+
});
|
|
83
|
+
this.telemetry.recordSpan({
|
|
84
|
+
operationName: "ws.cluster.publish",
|
|
85
|
+
kind: "producer",
|
|
86
|
+
durationMs,
|
|
87
|
+
status: "error",
|
|
88
|
+
attributes: { event },
|
|
89
|
+
errorType: error instanceof Error ? error.name : typeof error
|
|
90
|
+
});
|
|
33
91
|
});
|
|
34
92
|
}
|
|
35
93
|
async shutdown() {
|
|
94
|
+
this.unregisterMetricSource();
|
|
36
95
|
this.unsubscribe();
|
|
37
96
|
await this.options.clusterBus.shutdown();
|
|
38
97
|
}
|
|
98
|
+
getTelemetrySnapshot() {
|
|
99
|
+
let pendingFanOutTargets = 0;
|
|
100
|
+
for (const job of this.pendingFanOutJobs) {
|
|
101
|
+
pendingFanOutTargets += Math.max(job.targets.length - job.cursor, 0);
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
pendingFanOutJobs: this.pendingFanOutJobs.length,
|
|
105
|
+
pendingFanOutTargets
|
|
106
|
+
};
|
|
107
|
+
}
|
|
39
108
|
handleClusterEnvelope(envelope) {
|
|
40
109
|
if (envelope.sourceNodeId === this.options.nodeId) {
|
|
110
|
+
this.telemetry.emit({
|
|
111
|
+
name: "ws.cluster.envelope.ignored",
|
|
112
|
+
level: "debug",
|
|
113
|
+
detail: {
|
|
114
|
+
reason: "selfSource",
|
|
115
|
+
event: envelope.event
|
|
116
|
+
}
|
|
117
|
+
});
|
|
41
118
|
return;
|
|
42
119
|
}
|
|
43
120
|
if (envelope.targetNodeIds && envelope.targetNodeIds.length > 0 && !envelope.targetNodeIds.includes(this.options.nodeId)) {
|
|
121
|
+
this.telemetry.emit({
|
|
122
|
+
name: "ws.cluster.envelope.ignored",
|
|
123
|
+
level: "debug",
|
|
124
|
+
detail: {
|
|
125
|
+
reason: "targetMismatch",
|
|
126
|
+
event: envelope.event
|
|
127
|
+
}
|
|
128
|
+
});
|
|
44
129
|
return;
|
|
45
130
|
}
|
|
131
|
+
const startedAt = performance.now();
|
|
132
|
+
this.telemetry.emit({
|
|
133
|
+
name: "ws.cluster.envelope.received",
|
|
134
|
+
level: "debug",
|
|
135
|
+
detail: {
|
|
136
|
+
event: envelope.event,
|
|
137
|
+
sourceNodeId: envelope.sourceNodeId
|
|
138
|
+
}
|
|
139
|
+
});
|
|
46
140
|
const routingPlan = this.options.audienceResolver.resolve(envelope.audience);
|
|
47
|
-
this.
|
|
141
|
+
const localTargets = this.options.localConnections.getConnections(routingPlan.localSessionIds);
|
|
142
|
+
this.enqueueFanOut(localTargets, envelope.event, envelope.data);
|
|
143
|
+
this.telemetry.recordSpan({
|
|
144
|
+
operationName: "ws.cluster.receive",
|
|
145
|
+
kind: "consumer",
|
|
146
|
+
durationMs: performance.now() - startedAt,
|
|
147
|
+
status: "unset",
|
|
148
|
+
attributes: {
|
|
149
|
+
event: envelope.event,
|
|
150
|
+
sourceNodeId: envelope.sourceNodeId,
|
|
151
|
+
localTargetCount: localTargets.length
|
|
152
|
+
}
|
|
153
|
+
});
|
|
48
154
|
}
|
|
49
155
|
enqueueFanOut(targets, event, data) {
|
|
50
156
|
if (targets.length === 0) {
|
|
@@ -56,6 +162,14 @@ var init_ws_delivery = __esmMin((() => {
|
|
|
56
162
|
data,
|
|
57
163
|
cursor: 0
|
|
58
164
|
});
|
|
165
|
+
this.telemetry.emit({
|
|
166
|
+
name: "ws.fanout.enqueued",
|
|
167
|
+
level: "debug",
|
|
168
|
+
detail: {
|
|
169
|
+
targetCount: targets.length,
|
|
170
|
+
event
|
|
171
|
+
}
|
|
172
|
+
});
|
|
59
173
|
this.scheduleFanOutFlush();
|
|
60
174
|
}
|
|
61
175
|
scheduleFanOutFlush() {
|
|
@@ -69,21 +183,45 @@ var init_ws_delivery = __esmMin((() => {
|
|
|
69
183
|
});
|
|
70
184
|
}
|
|
71
185
|
flushFanOutJobs() {
|
|
186
|
+
const startedAt = performance.now();
|
|
72
187
|
let processed = 0;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
job
|
|
78
|
-
processed
|
|
188
|
+
let status = "unset";
|
|
189
|
+
let errorType;
|
|
190
|
+
try {
|
|
191
|
+
while (this.pendingFanOutJobs.length > 0 && processed < FAN_OUT_BATCH_SIZE) {
|
|
192
|
+
const job = this.pendingFanOutJobs[0];
|
|
193
|
+
while (job.cursor < job.targets.length && processed < FAN_OUT_BATCH_SIZE) {
|
|
194
|
+
this.safePublish(job.targets[job.cursor], job.event, job.data);
|
|
195
|
+
job.cursor += 1;
|
|
196
|
+
processed += 1;
|
|
197
|
+
}
|
|
198
|
+
if (job.cursor >= job.targets.length) {
|
|
199
|
+
this.pendingFanOutJobs.shift();
|
|
200
|
+
}
|
|
79
201
|
}
|
|
80
|
-
|
|
81
|
-
|
|
202
|
+
} catch (error) {
|
|
203
|
+
status = "error";
|
|
204
|
+
errorType = error instanceof Error ? error.name : typeof error;
|
|
205
|
+
throw error;
|
|
206
|
+
} finally {
|
|
207
|
+
const durationMs = performance.now() - startedAt;
|
|
208
|
+
this.telemetry.emit({
|
|
209
|
+
name: "ws.fanout.flushed",
|
|
210
|
+
level: "debug",
|
|
211
|
+
detail: { processedCount: processed }
|
|
212
|
+
});
|
|
213
|
+
this.telemetry.recordSpan({
|
|
214
|
+
operationName: "ws.fanout.dispatch",
|
|
215
|
+
kind: "internal",
|
|
216
|
+
durationMs,
|
|
217
|
+
status,
|
|
218
|
+
attributes: { processedCount: processed },
|
|
219
|
+
errorType
|
|
220
|
+
});
|
|
221
|
+
if (this.pendingFanOutJobs.length > 0) {
|
|
222
|
+
this.scheduleFanOutFlush();
|
|
82
223
|
}
|
|
83
224
|
}
|
|
84
|
-
if (this.pendingFanOutJobs.length > 0) {
|
|
85
|
-
this.scheduleFanOutFlush();
|
|
86
|
-
}
|
|
87
225
|
}
|
|
88
226
|
safePublish(connection, event, data) {
|
|
89
227
|
try {
|
|
@@ -91,6 +229,14 @@ var init_ws_delivery = __esmMin((() => {
|
|
|
91
229
|
connection.publishUntyped(event, data);
|
|
92
230
|
}
|
|
93
231
|
} catch {
|
|
232
|
+
this.telemetry.emit({
|
|
233
|
+
name: "ws.fanout.publish.failed",
|
|
234
|
+
level: "error",
|
|
235
|
+
connectionId: connection.id,
|
|
236
|
+
namespace: connection.namespace,
|
|
237
|
+
userId: connection.userId,
|
|
238
|
+
detail: { event }
|
|
239
|
+
});
|
|
94
240
|
connection.close(1011, "WebSocket publish failed");
|
|
95
241
|
}
|
|
96
242
|
}
|
|
@@ -100,4 +246,4 @@ var init_ws_delivery = __esmMin((() => {
|
|
|
100
246
|
//#endregion
|
|
101
247
|
init_ws_delivery();
|
|
102
248
|
export { WebSocketDeliveryEngine, init_ws_delivery };
|
|
103
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtZGVsaXZlcnkuanMiLCJuYW1lcyI6WyJvcHRpb25zOiB7XG4gICAgICBub2RlSWQ6IHN0cmluZztcbiAgICAgIGxvY2FsQ29ubmVjdGlvbnM6IFdlYlNvY2tldExvY2FsQ29ubmVjdGlvblN0b3JlO1xuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlcjtcbiAgICAgIGNsdXN0ZXJCdXM6IFdlYlNvY2tldENsdXN0ZXJCdXM7XG4gICAgfSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdHJlYW0vd3MtZGVsaXZlcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuXG5pbXBvcnQgeyB0eXBlIFdlYlNvY2tldEF1ZGllbmNlIH0gZnJvbSBcIi4vd3MtYXVkaWVuY2VcIjtcbmltcG9ydCB7IHR5cGUgV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlciB9IGZyb20gXCIuL3dzLWF1ZGllbmNlLXJlc29sdmVyXCI7XG5pbXBvcnQgeyB0eXBlIFdlYlNvY2tldENsdXN0ZXJCdXMsIHR5cGUgV2ViU29ja2V0Q2x1c3RlckVudmVsb3BlIH0gZnJvbSBcIi4vd3MtY2x1c3Rlci1idXNcIjtcbmltcG9ydCB7IHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24gfSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQgeyB0eXBlIFdlYlNvY2tldExvY2FsQ29ubmVjdGlvblN0b3JlIH0gZnJvbSBcIi4vd3MtbG9jYWwtY29ubmVjdGlvbi1zdG9yZVwiO1xuXG4vLyBmYW4tb3V07J2EIGV2ZW50IGxvb3AgdGljayDri6jsnITroZwg64KY64igIO2VnCDrsojsl5Ag6ri0IOuPmeq4sCDro6jtlITrpbwg66eM65Ok7KeAIOyViuqyjCDtlahcbmNvbnN0IEZBTl9PVVRfQkFUQ0hfU0laRSA9IDI1MDtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldERlbGl2ZXJ5RW5naW5lIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nRmFuT3V0Sm9iczogQXJyYXk8e1xuICAgIHRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW107XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBkYXRhOiB1bmtub3duO1xuICAgIGN1cnNvcjogbnVtYmVyO1xuICB9PiA9IFtdO1xuICBwcml2YXRlIGZhbk91dEZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiB7XG4gICAgICBub2RlSWQ6IHN0cmluZztcbiAgICAgIGxvY2FsQ29ubmVjdGlvbnM6IFdlYlNvY2tldExvY2FsQ29ubmVjdGlvblN0b3JlO1xuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlcjtcbiAgICAgIGNsdXN0ZXJCdXM6IFdlYlNvY2tldENsdXN0ZXJCdXM7XG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMub3B0aW9ucy5jbHVzdGVyQnVzLnN1YnNjcmliZSgoZW52ZWxvcGUpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlQ2x1c3RlckVudmVsb3BlKGVudmVsb3BlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1Ymxpc2hUb0F1ZGllbmNlKGF1ZGllbmNlOiBXZWJTb2NrZXRBdWRpZW5jZSwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IHJvdXRpbmdQbGFuID0gdGhpcy5vcHRpb25zLmF1ZGllbmNlUmVzb2x2ZXIucmVzb2x2ZShhdWRpZW5jZSk7XG4gICAgY29uc3QgbG9jYWxUYXJnZXRzID0gdGhpcy5vcHRpb25zLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbnMocm91dGluZ1BsYW4ubG9jYWxTZXNzaW9uSWRzKTtcbiAgICB0aGlzLmVucXVldWVGYW5PdXQobG9jYWxUYXJnZXRzLCBldmVudCwgZGF0YSk7XG5cbiAgICBpZiAocm91dGluZ1BsYW4ucmVtb3RlTm9kZUlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2b2lkIHRoaXMub3B0aW9ucy5jbHVzdGVyQnVzLnB1Ymxpc2goe1xuICAgICAgaWQ6IHJhbmRvbVVVSUQoKSxcbiAgICAgIHNvdXJjZU5vZGVJZDogdGhpcy5vcHRpb25zLm5vZGVJZCxcbiAgICAgIHRhcmdldE5vZGVJZHM6IHJvdXRpbmdQbGFuLnJlbW90ZU5vZGVJZHMsXG4gICAgICBhdWRpZW5jZSxcbiAgICAgIGV2ZW50LFxuICAgICAgZGF0YSxcbiAgICAgIGVtaXR0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnMuY2x1c3RlckJ1cy5zaHV0ZG93bigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbHVzdGVyRW52ZWxvcGUoZW52ZWxvcGU6IFdlYlNvY2tldENsdXN0ZXJFbnZlbG9wZSk6IHZvaWQge1xuICAgIGlmIChlbnZlbG9wZS5zb3VyY2VOb2RlSWQgPT09IHRoaXMub3B0aW9ucy5ub2RlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBlbnZlbG9wZS50YXJnZXROb2RlSWRzICYmXG4gICAgICBlbnZlbG9wZS50YXJnZXROb2RlSWRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICFlbnZlbG9wZS50YXJnZXROb2RlSWRzLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5ub2RlSWQpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGluZ1BsYW4gPSB0aGlzLm9wdGlvbnMuYXVkaWVuY2VSZXNvbHZlci5yZXNvbHZlKGVudmVsb3BlLmF1ZGllbmNlKTtcbiAgICB0aGlzLmVucXVldWVGYW5PdXQoXG4gICAgICB0aGlzLm9wdGlvbnMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9ucyhyb3V0aW5nUGxhbi5sb2NhbFNlc3Npb25JZHMpLFxuICAgICAgZW52ZWxvcGUuZXZlbnQsXG4gICAgICBlbnZlbG9wZS5kYXRhLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGVucXVldWVGYW5PdXQodGFyZ2V0czogTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb25bXSwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGVuZGluZ0Zhbk91dEpvYnMucHVzaCh7XG4gICAgICB0YXJnZXRzLFxuICAgICAgZXZlbnQsXG4gICAgICBkYXRhLFxuICAgICAgY3Vyc29yOiAwLFxuICAgIH0pO1xuICAgIHRoaXMuc2NoZWR1bGVGYW5PdXRGbHVzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZUZhbk91dEZsdXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZhbk91dEZsdXNoU2NoZWR1bGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mYW5PdXRGbHVzaFNjaGVkdWxlZCA9IHRydWU7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIHRoaXMuZmFuT3V0Rmx1c2hTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmx1c2hGYW5PdXRKb2JzKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoRmFuT3V0Sm9icygpOiB2b2lkIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gMDtcblxuICAgIHdoaWxlICh0aGlzLnBlbmRpbmdGYW5PdXRKb2JzLmxlbmd0aCA+IDAgJiYgcHJvY2Vzc2VkIDwgRkFOX09VVF9CQVRDSF9TSVpFKSB7XG4gICAgICBjb25zdCBqb2IgPSB0aGlzLnBlbmRpbmdGYW5PdXRKb2JzWzBdO1xuXG4gICAgICB3aGlsZSAoam9iLmN1cnNvciA8IGpvYi50YXJnZXRzLmxlbmd0aCAmJiBwcm9jZXNzZWQgPCBGQU5fT1VUX0JBVENIX1NJWkUpIHtcbiAgICAgICAgdGhpcy5zYWZlUHVibGlzaChqb2IudGFyZ2V0c1tqb2IuY3Vyc29yXSwgam9iLmV2ZW50LCBqb2IuZGF0YSk7XG4gICAgICAgIGpvYi5jdXJzb3IgKz0gMTtcbiAgICAgICAgcHJvY2Vzc2VkICs9IDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChqb2IuY3Vyc29yID49IGpvYi50YXJnZXRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnBlbmRpbmdGYW5PdXRKb2JzLnNoaWZ0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGVuZGluZ0Zhbk91dEpvYnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbk91dEZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYWZlUHVibGlzaChjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3Rpb24ucHVibGlzaFVudHlwZWQoZXZlbnQsIGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgY29ubmVjdGlvbi5jbG9zZSgxMDExLCBcIldlYlNvY2tldCBwdWJsaXNoIGZhaWxlZFwiKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0NBU00scUJBQXFCO0NBRWQsMEJBQWIsTUFBcUM7RUFDbkMsQUFBaUIsb0JBS1osRUFBRTtFQUNQLEFBQVEsdUJBQXVCO0VBQy9CLEFBQWlCO0VBRWpCLFlBQ0UsQUFBaUJBLFNBTWpCO0dBTmlCO0FBT2pCLFFBQUssY0FBYyxLQUFLLFFBQVEsV0FBVyxXQUFXLGFBQWE7QUFDakUsU0FBSyxzQkFBc0IsU0FBUztLQUNwQzs7RUFHSixrQkFBa0IsVUFBNkIsT0FBZSxNQUFxQjtHQUNqRixNQUFNLGNBQWMsS0FBSyxRQUFRLGlCQUFpQixRQUFRLFNBQVM7R0FDbkUsTUFBTSxlQUFlLEtBQUssUUFBUSxpQkFBaUIsZUFBZSxZQUFZLGdCQUFnQjtBQUM5RixRQUFLLGNBQWMsY0FBYyxPQUFPLEtBQUs7QUFFN0MsT0FBSSxZQUFZLGNBQWMsV0FBVyxHQUFHO0FBQzFDOztBQUdGLFFBQUssS0FBSyxRQUFRLFdBQVcsUUFBUTtJQUNuQyxJQUFJLFlBQVk7SUFDaEIsY0FBYyxLQUFLLFFBQVE7SUFDM0IsZUFBZSxZQUFZO0lBQzNCO0lBQ0E7SUFDQTtJQUNBLFdBQVcsS0FBSyxLQUFLO0lBQ3RCLENBQUM7O0VBR0osTUFBTSxXQUEwQjtBQUM5QixRQUFLLGFBQWE7QUFDbEIsU0FBTSxLQUFLLFFBQVEsV0FBVyxVQUFVOztFQUcxQyxBQUFRLHNCQUFzQixVQUEwQztBQUN0RSxPQUFJLFNBQVMsaUJBQWlCLEtBQUssUUFBUSxRQUFRO0FBQ2pEOztBQUdGLE9BQ0UsU0FBUyxpQkFDVCxTQUFTLGNBQWMsU0FBUyxLQUNoQyxDQUFDLFNBQVMsY0FBYyxTQUFTLEtBQUssUUFBUSxPQUFPLEVBQ3JEO0FBQ0E7O0dBR0YsTUFBTSxjQUFjLEtBQUssUUFBUSxpQkFBaUIsUUFBUSxTQUFTLFNBQVM7QUFDNUUsUUFBSyxjQUNILEtBQUssUUFBUSxpQkFBaUIsZUFBZSxZQUFZLGdCQUFnQixFQUN6RSxTQUFTLE9BQ1QsU0FBUyxLQUNWOztFQUdILEFBQVEsY0FBYyxTQUF1QyxPQUFlLE1BQXFCO0FBQy9GLE9BQUksUUFBUSxXQUFXLEdBQUc7QUFDeEI7O0FBR0YsUUFBSyxrQkFBa0IsS0FBSztJQUMxQjtJQUNBO0lBQ0E7SUFDQSxRQUFRO0lBQ1QsQ0FBQztBQUNGLFFBQUsscUJBQXFCOztFQUc1QixBQUFRLHNCQUE0QjtBQUNsQyxPQUFJLEtBQUssc0JBQXNCO0FBQzdCOztBQUdGLFFBQUssdUJBQXVCO0FBQzVCLHNCQUFtQjtBQUNqQixTQUFLLHVCQUF1QjtBQUM1QixTQUFLLGlCQUFpQjtLQUN0Qjs7RUFHSixBQUFRLGtCQUF3QjtHQUM5QixJQUFJLFlBQVk7QUFFaEIsVUFBTyxLQUFLLGtCQUFrQixTQUFTLEtBQUssWUFBWSxvQkFBb0I7SUFDMUUsTUFBTSxNQUFNLEtBQUssa0JBQWtCO0FBRW5DLFdBQU8sSUFBSSxTQUFTLElBQUksUUFBUSxVQUFVLFlBQVksb0JBQW9CO0FBQ3hFLFVBQUssWUFBWSxJQUFJLFFBQVEsSUFBSSxTQUFTLElBQUksT0FBTyxJQUFJLEtBQUs7QUFDOUQsU0FBSSxVQUFVO0FBQ2Qsa0JBQWE7O0FBR2YsUUFBSSxJQUFJLFVBQVUsSUFBSSxRQUFRLFFBQVE7QUFDcEMsVUFBSyxrQkFBa0IsT0FBTzs7O0FBSWxDLE9BQUksS0FBSyxrQkFBa0IsU0FBUyxHQUFHO0FBQ3JDLFNBQUsscUJBQXFCOzs7RUFJOUIsQUFBUSxZQUFZLFlBQXdDLE9BQWUsTUFBcUI7QUFDOUYsT0FBSTtBQUNGLFFBQUksQ0FBQyxXQUFXLFFBQVE7QUFDdEIsZ0JBQVcsZUFBZSxPQUFPLEtBQUs7O1dBRWxDO0FBQ04sZUFBVyxNQUFNLE1BQU0sMkJBQTJCIn0=
|
|
249
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtZGVsaXZlcnkuanMiLCJuYW1lcyI6WyJvcHRpb25zOiB7XG4gICAgICBub2RlSWQ6IHN0cmluZztcbiAgICAgIGxvY2FsQ29ubmVjdGlvbnM6IFdlYlNvY2tldExvY2FsQ29ubmVjdGlvblN0b3JlO1xuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlcjtcbiAgICAgIGNsdXN0ZXJCdXM6IFdlYlNvY2tldENsdXN0ZXJCdXM7XG4gICAgICB0ZWxlbWV0cnlDb250cm9sbGVyPzogV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcjtcbiAgICB9IiwiZW52ZWxvcGU6IFdlYlNvY2tldENsdXN0ZXJFbnZlbG9wZSIsInN0YXR1czogXCJ1bnNldFwiIHwgXCJlcnJvclwiIiwiZXJyb3JUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RyZWFtL3dzLWRlbGl2ZXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRBdWRpZW5jZSB9IGZyb20gXCIuL3dzLWF1ZGllbmNlXCI7XG5pbXBvcnQgeyB0eXBlIFdlYlNvY2tldEF1ZGllbmNlUmVzb2x2ZXIgfSBmcm9tIFwiLi93cy1hdWRpZW5jZS1yZXNvbHZlclwiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRDbHVzdGVyQnVzLCB0eXBlIFdlYlNvY2tldENsdXN0ZXJFbnZlbG9wZSB9IGZyb20gXCIuL3dzLWNsdXN0ZXItYnVzXCI7XG5pbXBvcnQgeyB0eXBlIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uIH0gZnJvbSBcIi4vd3MtY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBXZWJTb2NrZXRMb2NhbENvbm5lY3Rpb25TdG9yZSB9IGZyb20gXCIuL3dzLWxvY2FsLWNvbm5lY3Rpb24tc3RvcmVcIjtcbmltcG9ydCB7XG4gIE5vb3BXZWJTb2NrZXRUZWxlbWV0cnlDb250cm9sbGVyLFxuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUNvbnRyb2xsZXIsXG59IGZyb20gXCIuL3dzLXRlbGVtZXRyeVwiO1xuXG4vLyBmYW4tb3V07J2EIGV2ZW50IGxvb3AgdGljayDri6jsnITroZwg64KY64igIO2VnCDrsojsl5Ag6ri0IOuPmeq4sCDro6jtlITrpbwg66eM65Ok7KeAIOyViuqyjCDtlahcbmNvbnN0IEZBTl9PVVRfQkFUQ0hfU0laRSA9IDI1MDtcblxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldERlbGl2ZXJ5RW5naW5lIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nRmFuT3V0Sm9iczogQXJyYXk8e1xuICAgIHRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW107XG4gICAgZXZlbnQ6IHN0cmluZztcbiAgICBkYXRhOiB1bmtub3duO1xuICAgIGN1cnNvcjogbnVtYmVyO1xuICB9PiA9IFtdO1xuICBwcml2YXRlIGZhbk91dEZsdXNoU2NoZWR1bGVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGVsZW1ldHJ5OiBXZWJTb2NrZXRUZWxlbWV0cnlDb250cm9sbGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHVucmVnaXN0ZXJNZXRyaWNTb3VyY2U6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiB7XG4gICAgICBub2RlSWQ6IHN0cmluZztcbiAgICAgIGxvY2FsQ29ubmVjdGlvbnM6IFdlYlNvY2tldExvY2FsQ29ubmVjdGlvblN0b3JlO1xuICAgICAgYXVkaWVuY2VSZXNvbHZlcjogV2ViU29ja2V0QXVkaWVuY2VSZXNvbHZlcjtcbiAgICAgIGNsdXN0ZXJCdXM6IFdlYlNvY2tldENsdXN0ZXJCdXM7XG4gICAgICB0ZWxlbWV0cnlDb250cm9sbGVyPzogV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcjtcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLnRlbGVtZXRyeSA9IHRoaXMub3B0aW9ucy50ZWxlbWV0cnlDb250cm9sbGVyID8/IG5ldyBOb29wV2ViU29ja2V0VGVsZW1ldHJ5Q29udHJvbGxlcigpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLm9wdGlvbnMuY2x1c3RlckJ1cy5zdWJzY3JpYmUoKGVudmVsb3BlKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUNsdXN0ZXJFbnZlbG9wZShlbnZlbG9wZSk7XG4gICAgfSk7XG4gICAgdGhpcy51bnJlZ2lzdGVyTWV0cmljU291cmNlID0gdGhpcy50ZWxlbWV0cnkucmVnaXN0ZXJNZXRyaWNTb3VyY2Uoe1xuICAgICAgY29sbGVjdDogKCkgPT4gdGhpcy5nZXRUZWxlbWV0cnlTbmFwc2hvdCgpLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGlzaFRvQXVkaWVuY2UoYXVkaWVuY2U6IFdlYlNvY2tldEF1ZGllbmNlLCBldmVudDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3Qgcm91dGluZ1BsYW4gPSB0aGlzLm9wdGlvbnMuYXVkaWVuY2VSZXNvbHZlci5yZXNvbHZlKGF1ZGllbmNlKTtcbiAgICBjb25zdCBsb2NhbFRhcmdldHMgPSB0aGlzLm9wdGlvbnMubG9jYWxDb25uZWN0aW9ucy5nZXRDb25uZWN0aW9ucyhyb3V0aW5nUGxhbi5sb2NhbFNlc3Npb25JZHMpO1xuXG4gICAgdGhpcy50ZWxlbWV0cnkuZW1pdCh7XG4gICAgICBuYW1lOiBcIndzLmZhbm91dC5yZXNvbHZlZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBsb2NhbFRhcmdldENvdW50OiBsb2NhbFRhcmdldHMubGVuZ3RoLFxuICAgICAgICByZW1vdGVOb2RlQ291bnQ6IHJvdXRpbmdQbGFuLnJlbW90ZU5vZGVJZHMubGVuZ3RoLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnRlbGVtZXRyeS5yZWNvcmRNZXRyaWMoe1xuICAgICAgbmFtZTogXCJzb25hbXUud3MuZmFub3V0LnRhcmdldHNcIixcbiAgICAgIGtpbmQ6IFwiaGlzdG9ncmFtXCIsXG4gICAgICB2YWx1ZTogbG9jYWxUYXJnZXRzLmxlbmd0aCArIHJvdXRpbmdQbGFuLnJlbW90ZU5vZGVJZHMubGVuZ3RoLFxuICAgICAgdW5pdDogXCIxXCIsXG4gICAgICB0YWdzOiB7IGF1ZGllbmNlX3R5cGU6IGF1ZGllbmNlLnR5cGUgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuZW5xdWV1ZUZhbk91dChsb2NhbFRhcmdldHMsIGV2ZW50LCBkYXRhKTtcblxuICAgIGlmIChyb3V0aW5nUGxhbi5yZW1vdGVOb2RlSWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGVudmVsb3BlOiBXZWJTb2NrZXRDbHVzdGVyRW52ZWxvcGUgPSB7XG4gICAgICBpZDogcmFuZG9tVVVJRCgpLFxuICAgICAgc291cmNlTm9kZUlkOiB0aGlzLm9wdGlvbnMubm9kZUlkLFxuICAgICAgdGFyZ2V0Tm9kZUlkczogcm91dGluZ1BsYW4ucmVtb3RlTm9kZUlkcyxcbiAgICAgIGF1ZGllbmNlLFxuICAgICAgZXZlbnQsXG4gICAgICBkYXRhLFxuICAgICAgZW1pdHRlZEF0OiBEYXRlLm5vdygpLFxuICAgIH07XG5cbiAgICBjb25zdCBwdWJsaXNoU3RhcnRlZEF0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgUHJvbWlzZS5yZXNvbHZlKHRoaXMub3B0aW9ucy5jbHVzdGVyQnVzLnB1Ymxpc2goZW52ZWxvcGUpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBjb25zdCBkdXJhdGlvbk1zID0gcGVyZm9ybWFuY2Uubm93KCkgLSBwdWJsaXNoU3RhcnRlZEF0O1xuICAgICAgICB0aGlzLnRlbGVtZXRyeS5lbWl0KHtcbiAgICAgICAgICBuYW1lOiBcIndzLmNsdXN0ZXIuZW52ZWxvcGUucHVibGlzaGVkXCIsXG4gICAgICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgICAgICBkZXRhaWw6IHsgZXZlbnQsIHRhcmdldE5vZGVDb3VudDogcm91dGluZ1BsYW4ucmVtb3RlTm9kZUlkcy5sZW5ndGggfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGVsZW1ldHJ5LnJlY29yZFNwYW4oe1xuICAgICAgICAgIG9wZXJhdGlvbk5hbWU6IFwid3MuY2x1c3Rlci5wdWJsaXNoXCIsXG4gICAgICAgICAga2luZDogXCJwcm9kdWNlclwiLFxuICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgc3RhdHVzOiBcInVuc2V0XCIsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0YXJnZXROb2RlQ291bnQ6IHJvdXRpbmdQbGFuLnJlbW90ZU5vZGVJZHMubGVuZ3RoLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gcHVibGlzaFN0YXJ0ZWRBdDtcbiAgICAgICAgdGhpcy50ZWxlbWV0cnkuZW1pdCh7XG4gICAgICAgICAgbmFtZTogXCJ3cy5jbHVzdGVyLmVudmVsb3BlLmZhaWxlZFwiLFxuICAgICAgICAgIGxldmVsOiBcImVycm9yXCIsXG4gICAgICAgICAgZGV0YWlsOiB7IGV2ZW50IH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRlbGVtZXRyeS5yZWNvcmRTcGFuKHtcbiAgICAgICAgICBvcGVyYXRpb25OYW1lOiBcIndzLmNsdXN0ZXIucHVibGlzaFwiLFxuICAgICAgICAgIGtpbmQ6IFwicHJvZHVjZXJcIixcbiAgICAgICAgICBkdXJhdGlvbk1zLFxuICAgICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHsgZXZlbnQgfSxcbiAgICAgICAgICBlcnJvclR5cGU6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5uYW1lIDogdHlwZW9mIGVycm9yLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy51bnJlZ2lzdGVyTWV0cmljU291cmNlKCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIGF3YWl0IHRoaXMub3B0aW9ucy5jbHVzdGVyQnVzLnNodXRkb3duKCk7XG4gIH1cblxuICBnZXRUZWxlbWV0cnlTbmFwc2hvdCgpOiB7IHBlbmRpbmdGYW5PdXRKb2JzOiBudW1iZXI7IHBlbmRpbmdGYW5PdXRUYXJnZXRzOiBudW1iZXIgfSB7XG4gICAgbGV0IHBlbmRpbmdGYW5PdXRUYXJnZXRzID0gMDtcblxuICAgIGZvciAoY29uc3Qgam9iIG9mIHRoaXMucGVuZGluZ0Zhbk91dEpvYnMpIHtcbiAgICAgIHBlbmRpbmdGYW5PdXRUYXJnZXRzICs9IE1hdGgubWF4KGpvYi50YXJnZXRzLmxlbmd0aCAtIGpvYi5jdXJzb3IsIDApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nRmFuT3V0Sm9iczogdGhpcy5wZW5kaW5nRmFuT3V0Sm9icy5sZW5ndGgsXG4gICAgICBwZW5kaW5nRmFuT3V0VGFyZ2V0cyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDbHVzdGVyRW52ZWxvcGUoZW52ZWxvcGU6IFdlYlNvY2tldENsdXN0ZXJFbnZlbG9wZSk6IHZvaWQge1xuICAgIGlmIChlbnZlbG9wZS5zb3VyY2VOb2RlSWQgPT09IHRoaXMub3B0aW9ucy5ub2RlSWQpIHtcbiAgICAgIHRoaXMudGVsZW1ldHJ5LmVtaXQoe1xuICAgICAgICBuYW1lOiBcIndzLmNsdXN0ZXIuZW52ZWxvcGUuaWdub3JlZFwiLFxuICAgICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgICBkZXRhaWw6IHsgcmVhc29uOiBcInNlbGZTb3VyY2VcIiwgZXZlbnQ6IGVudmVsb3BlLmV2ZW50IH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBlbnZlbG9wZS50YXJnZXROb2RlSWRzICYmXG4gICAgICBlbnZlbG9wZS50YXJnZXROb2RlSWRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICFlbnZlbG9wZS50YXJnZXROb2RlSWRzLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5ub2RlSWQpXG4gICAgKSB7XG4gICAgICB0aGlzLnRlbGVtZXRyeS5lbWl0KHtcbiAgICAgICAgbmFtZTogXCJ3cy5jbHVzdGVyLmVudmVsb3BlLmlnbm9yZWRcIixcbiAgICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgICAgZGV0YWlsOiB7IHJlYXNvbjogXCJ0YXJnZXRNaXNtYXRjaFwiLCBldmVudDogZW52ZWxvcGUuZXZlbnQgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRoaXMudGVsZW1ldHJ5LmVtaXQoe1xuICAgICAgbmFtZTogXCJ3cy5jbHVzdGVyLmVudmVsb3BlLnJlY2VpdmVkXCIsXG4gICAgICBsZXZlbDogXCJkZWJ1Z1wiLFxuICAgICAgZGV0YWlsOiB7IGV2ZW50OiBlbnZlbG9wZS5ldmVudCwgc291cmNlTm9kZUlkOiBlbnZlbG9wZS5zb3VyY2VOb2RlSWQgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvdXRpbmdQbGFuID0gdGhpcy5vcHRpb25zLmF1ZGllbmNlUmVzb2x2ZXIucmVzb2x2ZShlbnZlbG9wZS5hdWRpZW5jZSk7XG4gICAgY29uc3QgbG9jYWxUYXJnZXRzID0gdGhpcy5vcHRpb25zLmxvY2FsQ29ubmVjdGlvbnMuZ2V0Q29ubmVjdGlvbnMocm91dGluZ1BsYW4ubG9jYWxTZXNzaW9uSWRzKTtcbiAgICB0aGlzLmVucXVldWVGYW5PdXQobG9jYWxUYXJnZXRzLCBlbnZlbG9wZS5ldmVudCwgZW52ZWxvcGUuZGF0YSk7XG5cbiAgICB0aGlzLnRlbGVtZXRyeS5yZWNvcmRTcGFuKHtcbiAgICAgIG9wZXJhdGlvbk5hbWU6IFwid3MuY2x1c3Rlci5yZWNlaXZlXCIsXG4gICAgICBraW5kOiBcImNvbnN1bWVyXCIsXG4gICAgICBkdXJhdGlvbk1zOiBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0ZWRBdCxcbiAgICAgIHN0YXR1czogXCJ1bnNldFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBldmVudDogZW52ZWxvcGUuZXZlbnQsXG4gICAgICAgIHNvdXJjZU5vZGVJZDogZW52ZWxvcGUuc291cmNlTm9kZUlkLFxuICAgICAgICBsb2NhbFRhcmdldENvdW50OiBsb2NhbFRhcmdldHMubGVuZ3RoLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5xdWV1ZUZhbk91dCh0YXJnZXRzOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbltdLCBldmVudDogc3RyaW5nLCBkYXRhOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRhcmdldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nRmFuT3V0Sm9icy5wdXNoKHtcbiAgICAgIHRhcmdldHMsXG4gICAgICBldmVudCxcbiAgICAgIGRhdGEsXG4gICAgICBjdXJzb3I6IDAsXG4gICAgfSk7XG4gICAgdGhpcy50ZWxlbWV0cnkuZW1pdCh7XG4gICAgICBuYW1lOiBcIndzLmZhbm91dC5lbnF1ZXVlZFwiLFxuICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgIGRldGFpbDogeyB0YXJnZXRDb3VudDogdGFyZ2V0cy5sZW5ndGgsIGV2ZW50IH0sXG4gICAgfSk7XG4gICAgdGhpcy5zY2hlZHVsZUZhbk91dEZsdXNoKCk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlRmFuT3V0Rmx1c2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFuT3V0Rmx1c2hTY2hlZHVsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZhbk91dEZsdXNoU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgdGhpcy5mYW5PdXRGbHVzaFNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5mbHVzaEZhbk91dEpvYnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmx1c2hGYW5PdXRKb2JzKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIGxldCBwcm9jZXNzZWQgPSAwO1xuICAgIGxldCBzdGF0dXM6IFwidW5zZXRcIiB8IFwiZXJyb3JcIiA9IFwidW5zZXRcIjtcbiAgICBsZXQgZXJyb3JUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgd2hpbGUgKHRoaXMucGVuZGluZ0Zhbk91dEpvYnMubGVuZ3RoID4gMCAmJiBwcm9jZXNzZWQgPCBGQU5fT1VUX0JBVENIX1NJWkUpIHtcbiAgICAgICAgY29uc3Qgam9iID0gdGhpcy5wZW5kaW5nRmFuT3V0Sm9ic1swXTtcblxuICAgICAgICB3aGlsZSAoam9iLmN1cnNvciA8IGpvYi50YXJnZXRzLmxlbmd0aCAmJiBwcm9jZXNzZWQgPCBGQU5fT1VUX0JBVENIX1NJWkUpIHtcbiAgICAgICAgICB0aGlzLnNhZmVQdWJsaXNoKGpvYi50YXJnZXRzW2pvYi5jdXJzb3JdLCBqb2IuZXZlbnQsIGpvYi5kYXRhKTtcbiAgICAgICAgICBqb2IuY3Vyc29yICs9IDE7XG4gICAgICAgICAgcHJvY2Vzc2VkICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoam9iLmN1cnNvciA+PSBqb2IudGFyZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdGYW5PdXRKb2JzLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc3RhdHVzID0gXCJlcnJvclwiO1xuICAgICAgZXJyb3JUeXBlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm5hbWUgOiB0eXBlb2YgZXJyb3I7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc3QgZHVyYXRpb25NcyA9IHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRlZEF0O1xuICAgICAgdGhpcy50ZWxlbWV0cnkuZW1pdCh7XG4gICAgICAgIG5hbWU6IFwid3MuZmFub3V0LmZsdXNoZWRcIixcbiAgICAgICAgbGV2ZWw6IFwiZGVidWdcIixcbiAgICAgICAgZGV0YWlsOiB7IHByb2Nlc3NlZENvdW50OiBwcm9jZXNzZWQgfSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50ZWxlbWV0cnkucmVjb3JkU3Bhbih7XG4gICAgICAgIG9wZXJhdGlvbk5hbWU6IFwid3MuZmFub3V0LmRpc3BhdGNoXCIsXG4gICAgICAgIGtpbmQ6IFwiaW50ZXJuYWxcIixcbiAgICAgICAgZHVyYXRpb25NcyxcbiAgICAgICAgc3RhdHVzLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7IHByb2Nlc3NlZENvdW50OiBwcm9jZXNzZWQgfSxcbiAgICAgICAgZXJyb3JUeXBlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnBlbmRpbmdGYW5PdXRKb2JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZhbk91dEZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYWZlUHVibGlzaChjb25uZWN0aW9uOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiwgZXZlbnQ6IHN0cmluZywgZGF0YTogdW5rbm93bik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgIGNvbm5lY3Rpb24ucHVibGlzaFVudHlwZWQoZXZlbnQsIGRhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy50ZWxlbWV0cnkuZW1pdCh7XG4gICAgICAgIG5hbWU6IFwid3MuZmFub3V0LnB1Ymxpc2guZmFpbGVkXCIsXG4gICAgICAgIGxldmVsOiBcImVycm9yXCIsXG4gICAgICAgIGNvbm5lY3Rpb25JZDogY29ubmVjdGlvbi5pZCxcbiAgICAgICAgbmFtZXNwYWNlOiBjb25uZWN0aW9uLm5hbWVzcGFjZSxcbiAgICAgICAgdXNlcklkOiBjb25uZWN0aW9uLnVzZXJJZCxcbiAgICAgICAgZGV0YWlsOiB7IGV2ZW50IH0sXG4gICAgICB9KTtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UoMTAxMSwgXCJXZWJTb2NrZXQgcHVibGlzaCBmYWlsZWRcIik7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7b0JBVXdCO0NBR2xCLHFCQUFxQjtDQUVkLDBCQUFiLE1BQXFDO0VBQ25DLEFBQWlCLG9CQUtaLEVBQUU7RUFDUCxBQUFRLHVCQUF1QjtFQUMvQixBQUFpQjtFQUNqQixBQUFpQjtFQUNqQixBQUFpQjtFQUVqQixZQUNFLEFBQWlCQSxTQU9qQjtHQVBpQjtBQVFqQixRQUFLLFlBQVksS0FBSyxRQUFRLHVCQUF1QixJQUFJLGtDQUFrQztBQUMzRixRQUFLLGNBQWMsS0FBSyxRQUFRLFdBQVcsV0FBVyxhQUFhO0FBQ2pFLFNBQUssc0JBQXNCLFNBQVM7S0FDcEM7QUFDRixRQUFLLHlCQUF5QixLQUFLLFVBQVUscUJBQXFCLEVBQ2hFLGVBQWUsS0FBSyxzQkFBc0IsRUFDM0MsQ0FBQzs7RUFHSixrQkFBa0IsVUFBNkIsT0FBZSxNQUFxQjtHQUNqRixNQUFNLGNBQWMsS0FBSyxRQUFRLGlCQUFpQixRQUFRLFNBQVM7R0FDbkUsTUFBTSxlQUFlLEtBQUssUUFBUSxpQkFBaUIsZUFBZSxZQUFZLGdCQUFnQjtBQUU5RixRQUFLLFVBQVUsS0FBSztJQUNsQixNQUFNO0lBQ04sT0FBTztJQUNQLFFBQVE7S0FDTixrQkFBa0Is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
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { type ManagedWebSocketConnection } from "./ws-core";
|
|
2
|
+
import { type WebSocketTelemetryConnectionSnapshot } from "./ws-telemetry";
|
|
2
3
|
export declare class WebSocketLocalConnectionStore {
|
|
3
4
|
private readonly connections;
|
|
4
5
|
register(connection: ManagedWebSocketConnection): void;
|
|
5
6
|
unregister(connectionId: string): void;
|
|
6
7
|
getConnection(connectionId: string): ManagedWebSocketConnection | undefined;
|
|
7
8
|
getConnections(connectionIds: string[]): ManagedWebSocketConnection[];
|
|
9
|
+
getTelemetrySnapshot(): WebSocketTelemetryConnectionSnapshot;
|
|
8
10
|
closeAll(code?: number, reason?: string): void;
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=ws-local-connection-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-local-connection-store.d.ts","sourceRoot":"","sources":["../../src/stream/ws-local-connection-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-local-connection-store.d.ts","sourceRoot":"","sources":["../../src/stream/ws-local-connection-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EACL,KAAK,oCAAoC,EAE1C,MAAM,gBAAgB,CAAC;AAExB,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAE7E,QAAQ,CAAC,UAAU,EAAE,0BAA0B,GAAG,IAAI;IAItD,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAItC,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS;IAI3E,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,0BAA0B,EAAE;IAqBrE,oBAAoB,IAAI,oCAAoC;IAqB5D,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAK/C"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { __esmMin } from "../_virtual/rolldown_runtime.js";
|
|
2
2
|
|
|
3
3
|
//#region src/stream/ws-local-connection-store.ts
|
|
4
|
+
function isTelemetryInspectableConnection(connection) {
|
|
5
|
+
return "getTelemetrySnapshot" in connection && typeof connection.getTelemetrySnapshot === "function";
|
|
6
|
+
}
|
|
4
7
|
var WebSocketLocalConnectionStore;
|
|
5
8
|
var init_ws_local_connection_store = __esmMin((() => {
|
|
6
9
|
WebSocketLocalConnectionStore = class {
|
|
@@ -30,6 +33,23 @@ var init_ws_local_connection_store = __esmMin((() => {
|
|
|
30
33
|
}
|
|
31
34
|
return targets;
|
|
32
35
|
}
|
|
36
|
+
getTelemetrySnapshot() {
|
|
37
|
+
const snapshot = {
|
|
38
|
+
pendingInboundMessages: 0,
|
|
39
|
+
pendingOutboundMessages: 0,
|
|
40
|
+
socketBufferedBytes: 0
|
|
41
|
+
};
|
|
42
|
+
for (const connection of this.connections.values()) {
|
|
43
|
+
if (!isTelemetryInspectableConnection(connection)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const connectionSnapshot = connection.getTelemetrySnapshot();
|
|
47
|
+
snapshot.pendingInboundMessages += connectionSnapshot.pendingInboundMessages;
|
|
48
|
+
snapshot.pendingOutboundMessages += connectionSnapshot.pendingOutboundMessages;
|
|
49
|
+
snapshot.socketBufferedBytes += connectionSnapshot.socketBufferedBytes;
|
|
50
|
+
}
|
|
51
|
+
return snapshot;
|
|
52
|
+
}
|
|
33
53
|
closeAll(code, reason) {
|
|
34
54
|
for (const connection of this.connections.values()) {
|
|
35
55
|
connection.close(code, reason);
|
|
@@ -41,4 +61,4 @@ var init_ws_local_connection_store = __esmMin((() => {
|
|
|
41
61
|
//#endregion
|
|
42
62
|
init_ws_local_connection_store();
|
|
43
63
|
export { WebSocketLocalConnectionStore, init_ws_local_connection_store };
|
|
44
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtbG9jYWwtY29ubmVjdGlvbi1zdG9yZS5qcyIsIm5hbWVzIjpbInRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10iLCJzbmFwc2hvdDogV2ViU29ja2V0VGVsZW1ldHJ5Q29ubmVjdGlvblNuYXBzaG90Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0cmVhbS93cy1sb2NhbC1jb25uZWN0aW9uLXN0b3JlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgTWFuYWdlZFdlYlNvY2tldENvbm5lY3Rpb24gfSBmcm9tIFwiLi93cy1jb3JlXCI7XG5pbXBvcnQge1xuICB0eXBlIFdlYlNvY2tldFRlbGVtZXRyeUNvbm5lY3Rpb25TbmFwc2hvdCxcbiAgdHlwZSBUZWxlbWV0cnlJbnNwZWN0YWJsZUNvbm5lY3Rpb24sXG59IGZyb20gXCIuL3dzLXRlbGVtZXRyeVwiO1xuXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0TG9jYWxDb25uZWN0aW9uU3RvcmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uPigpO1xuXG4gIHJlZ2lzdGVyKGNvbm5lY3Rpb246IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQoY29ubmVjdGlvbi5pZCwgY29ubmVjdGlvbik7XG4gIH1cblxuICB1bnJlZ2lzdGVyKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5kZWxldGUoY29ubmVjdGlvbklkKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oY29ubmVjdGlvbklkOiBzdHJpbmcpOiBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnMuZ2V0KGNvbm5lY3Rpb25JZCk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9ucyhjb25uZWN0aW9uSWRzOiBzdHJpbmdbXSk6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10ge1xuICAgIGNvbnN0IHRhcmdldHM6IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uW10gPSBbXTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb25JZCBvZiBjb25uZWN0aW9uSWRzKSB7XG4gICAgICBpZiAoc2Vlbi5oYXMoY29ubmVjdGlvbklkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHNlZW4uYWRkKGNvbm5lY3Rpb25JZCk7XG5cbiAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLmdldChjb25uZWN0aW9uSWQpO1xuICAgICAgaWYgKCFjb25uZWN0aW9uIHx8IGNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRzLnB1c2goY29ubmVjdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldHM7XG4gIH1cblxuICBnZXRUZWxlbWV0cnlTbmFwc2hvdCgpOiBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uU25hcHNob3Qge1xuICAgIGNvbnN0IHNuYXBzaG90OiBXZWJTb2NrZXRUZWxlbWV0cnlDb25uZWN0aW9uU25hcHNob3QgPSB7XG4gICAgICBwZW5kaW5nSW5ib3VuZE1lc3NhZ2VzOiAwLFxuICAgICAgcGVuZGluZ091dGJvdW5kTWVzc2FnZXM6IDAsXG4gICAgICBzb2NrZXRCdWZmZXJlZEJ5dGVzOiAwLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGNvbm5lY3Rpb24gb2YgdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFpc1RlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbihjb25uZWN0aW9uKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29ubmVjdGlvblNuYXBzaG90ID0gY29ubmVjdGlvbi5nZXRUZWxlbWV0cnlTbmFwc2hvdCgpO1xuICAgICAgc25hcHNob3QucGVuZGluZ0luYm91bmRNZXNzYWdlcyArPSBjb25uZWN0aW9uU25hcHNob3QucGVuZGluZ0luYm91bmRNZXNzYWdlcztcbiAgICAgIHNuYXBzaG90LnBlbmRpbmdPdXRib3VuZE1lc3NhZ2VzICs9IGNvbm5lY3Rpb25TbmFwc2hvdC5wZW5kaW5nT3V0Ym91bmRNZXNzYWdlcztcbiAgICAgIHNuYXBzaG90LnNvY2tldEJ1ZmZlcmVkQnl0ZXMgKz0gY29ubmVjdGlvblNuYXBzaG90LnNvY2tldEJ1ZmZlcmVkQnl0ZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9XG5cbiAgY2xvc2VBbGwoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjb25uZWN0aW9uIG9mIHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGNvbm5lY3Rpb24uY2xvc2UoY29kZSwgcmVhc29uKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNUZWxlbWV0cnlJbnNwZWN0YWJsZUNvbm5lY3Rpb24oXG4gIGNvbm5lY3Rpb246IE1hbmFnZWRXZWJTb2NrZXRDb25uZWN0aW9uLFxuKTogY29ubmVjdGlvbiBpcyBNYW5hZ2VkV2ViU29ja2V0Q29ubmVjdGlvbiAmIFRlbGVtZXRyeUluc3BlY3RhYmxlQ29ubmVjdGlvbiB7XG4gIHJldHVybiAoXG4gICAgXCJnZXRUZWxlbWV0cnlTbmFwc2hvdFwiIGluIGNvbm5lY3Rpb24gJiYgdHlwZW9mIGNvbm5lY3Rpb24uZ2V0VGVsZW1ldHJ5U25hcHNob3QgPT09IFwiZnVuY3Rpb25cIlxuICApO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFzRUEsU0FBUyxpQ0FDUCxZQUMyRTtBQUMzRSxRQUNFLDBCQUEwQixjQUFjLE9BQU8sV0FBVyx5QkFBeUI7Ozs7Q0FwRTFFLGdDQUFiLE1BQTJDO0VBQ3pDLEFBQWlCLGNBQWMsSUFBSSxLQUF5QztFQUU1RSxTQUFTLFlBQThDO0FBQ3JELFFBQUssWUFBWSxJQUFJLFdBQVcsSUFBSSxXQUFXOztFQUdqRCxXQUFXLGNBQTRCO0FBQ3JDLFFBQUssWUFBWSxPQUFPLGFBQWE7O0VBR3ZDLGNBQWMsY0FBOEQ7QUFDMUUsVUFBTyxLQUFLLFlBQVksSUFBSSxhQUFhOztFQUczQyxlQUFlLGVBQXVEO0dBQ3BFLE1BQU1BLFVBQXdDLEVBQUU7R0FDaEQsTUFBTSxPQUFPLElBQUksS0FBYTtBQUU5QixRQUFLLE1BQU0sZ0JBQWdCLGVBQWU7QUFDeEMsUUFBSSxLQUFLLElBQUksYUFBYSxFQUFFO0FBQzFCOztBQUVGLFNBQUssSUFBSSxhQUFhO0lBRXRCLE1BQU0sYUFBYSxLQUFLLFlBQVksSUFBSSxhQUFhO0FBQ3JELFFBQUksQ0FBQyxjQUFjLFdBQVcsUUFBUTtBQUNwQzs7QUFHRixZQUFRLEtBQUssV0FBVzs7QUFHMUIsVUFBTzs7RUFHVCx1QkFBNkQ7R0FDM0QsTUFBTUMsV0FBaUQ7SUFDckQsd0JBQXdCO0lBQ3hCLHlCQUF5QjtJQUN6QixxQkFBcUI7SUFDdEI7QUFFRCxRQUFLLE1BQU0sY0FBYyxLQUFLLFlBQVksUUFBUSxFQUFFO0FBQ2xELFFBQUksQ0FBQyxpQ0FBaUMsV0FBVyxFQUFFO0FBQ2pEOztJQUdGLE1BQU0scUJBQXFCLFdBQVcsc0JBQXNCO0FBQzVELGFBQVMsMEJBQTBCLG1CQUFtQjtBQUN0RCxhQUFTLDJCQUEyQixtQkFBbUI7QUFDdkQsYUFBUyx1QkFBdUIsbUJBQW1COztBQUdyRCxVQUFPOztFQUdULFNBQVMsTUFBZSxRQUF1QjtBQUM3QyxRQUFLLE1BQU0sY0FBYyxLQUFLLFlBQVksUUFBUSxFQUFFO0FBQ2xELGVBQVcsTUFBTSxNQUFNLE9BQU8ifQ==
|
|
@@ -5,12 +5,14 @@ import { type ManagedWebSocketConnection, type WebSocketRegistryStats, type WebS
|
|
|
5
5
|
import { WebSocketDeliveryEngine } from "./ws-delivery";
|
|
6
6
|
import { WebSocketLocalConnectionStore } from "./ws-local-connection-store";
|
|
7
7
|
import { type WebSocketPresenceStore, type WebSocketSessionPresence } from "./ws-presence-store";
|
|
8
|
+
import { type WebSocketTelemetryController } from "./ws-telemetry";
|
|
8
9
|
export type { ManagedWebSocketConnection, WebSocketRegistryStats, WebSocketRoomId, WebSocketUserId, };
|
|
9
10
|
export type WebSocketConnectionMeta = WebSocketSessionPresence;
|
|
10
11
|
export type WebSocketRegistryOptions = {
|
|
11
|
-
nodeId
|
|
12
|
+
nodeId: string;
|
|
12
13
|
presenceStore?: WebSocketPresenceStore;
|
|
13
14
|
clusterBus?: WebSocketClusterBus;
|
|
15
|
+
telemetryController?: WebSocketTelemetryController;
|
|
14
16
|
};
|
|
15
17
|
export declare class WebSocketRegistry {
|
|
16
18
|
readonly nodeId: string;
|
|
@@ -19,7 +21,8 @@ export declare class WebSocketRegistry {
|
|
|
19
21
|
readonly clusterBus: WebSocketClusterBus;
|
|
20
22
|
readonly audienceResolver: WebSocketAudienceResolver;
|
|
21
23
|
readonly deliveryEngine: WebSocketDeliveryEngine;
|
|
22
|
-
|
|
24
|
+
readonly telemetryController: WebSocketTelemetryController;
|
|
25
|
+
constructor(options: WebSocketRegistryOptions);
|
|
23
26
|
register(connection: ManagedWebSocketConnection, active?: boolean): WebSocketConnectionMeta;
|
|
24
27
|
activate(connectionId: string): void;
|
|
25
28
|
unregister(connectionId: string): void;
|
|
@@ -28,6 +31,7 @@ export declare class WebSocketRegistry {
|
|
|
28
31
|
clearUserId(connectionId: string): void;
|
|
29
32
|
join(connectionId: string, roomId: WebSocketRoomId): void;
|
|
30
33
|
leave(connectionId: string, roomId: WebSocketRoomId): void;
|
|
34
|
+
private emitMutationSkipped;
|
|
31
35
|
broadcast(event: string, data: unknown, namespace?: string): void;
|
|
32
36
|
publishToRoom(roomId: WebSocketRoomId, event: string, data: unknown, namespace?: string): void;
|
|
33
37
|
publishToUser(userId: WebSocketUserId, event: string, data: unknown, namespace?: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ws-registry.d.ts","sourceRoot":"","sources":["../../src/stream/ws-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAA2B,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC9B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"ws-registry.d.ts","sourceRoot":"","sources":["../../src/stream/ws-registry.ts"],"names":[],"mappings":"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"}
|