elasticdash-test 0.1.18-alpha → 0.1.18-alpha-2
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/index.cjs +97 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +4 -0
- package/dist/observability.js.map +1 -1
- package/dist/socket-connector.d.ts +23 -0
- package/dist/socket-connector.d.ts.map +1 -0
- package/dist/socket-connector.js +102 -0
- package/dist/socket-connector.js.map +1 -0
- package/package.json +2 -1
- package/src/index.ts +4 -0
- package/src/observability.ts +5 -0
- package/src/socket-connector.ts +115 -0
package/dist/index.cjs
CHANGED
|
@@ -2985,6 +2985,95 @@ var init_trigger_executor = __esm({
|
|
|
2985
2985
|
}
|
|
2986
2986
|
});
|
|
2987
2987
|
|
|
2988
|
+
// src/socket-connector.ts
|
|
2989
|
+
function connectToBackend(options) {
|
|
2990
|
+
if (socket?.connected) return socket;
|
|
2991
|
+
if (socket) return socket;
|
|
2992
|
+
const { serverUrl, apiKey, sessionId, serviceId } = options;
|
|
2993
|
+
const cwd = process.cwd();
|
|
2994
|
+
socket = (0, import_socket.io)(serverUrl, {
|
|
2995
|
+
auth: {
|
|
2996
|
+
...apiKey ? { apiKey } : {},
|
|
2997
|
+
sessionId,
|
|
2998
|
+
serviceId
|
|
2999
|
+
},
|
|
3000
|
+
transports: ["websocket", "polling"],
|
|
3001
|
+
reconnection: true,
|
|
3002
|
+
reconnectionDelay: 1e3,
|
|
3003
|
+
reconnectionDelayMax: 3e4
|
|
3004
|
+
});
|
|
3005
|
+
socket.on("connect", () => {
|
|
3006
|
+
debugLog(`[elasticdash] Socket connected: ${socket.id}`);
|
|
3007
|
+
const tools = scanTools(cwd);
|
|
3008
|
+
const workflows = scanWorkflows(cwd);
|
|
3009
|
+
socket.emit("register", {
|
|
3010
|
+
sessionId,
|
|
3011
|
+
serviceId,
|
|
3012
|
+
tools: tools.map((t) => t.name),
|
|
3013
|
+
workflows: workflows.map((w) => w.name)
|
|
3014
|
+
});
|
|
3015
|
+
});
|
|
3016
|
+
socket.on("portal:task", async (task, ack) => {
|
|
3017
|
+
debugLog(`[elasticdash] Socket received portal task: ${task.taskId} type=${task.type} name=${task.name}`);
|
|
3018
|
+
try {
|
|
3019
|
+
const tools = scanTools(cwd);
|
|
3020
|
+
const result = await executePortalTask(task, cwd, tools);
|
|
3021
|
+
if (typeof ack === "function") {
|
|
3022
|
+
ack(result);
|
|
3023
|
+
} else {
|
|
3024
|
+
socket.emit("portal:result", result);
|
|
3025
|
+
}
|
|
3026
|
+
} catch (e) {
|
|
3027
|
+
const errorResult = {
|
|
3028
|
+
taskId: task.taskId,
|
|
3029
|
+
ok: false,
|
|
3030
|
+
output: null,
|
|
3031
|
+
error: e instanceof Error ? e.message : String(e),
|
|
3032
|
+
durationMs: 0,
|
|
3033
|
+
metadata: task.metadata
|
|
3034
|
+
};
|
|
3035
|
+
if (typeof ack === "function") {
|
|
3036
|
+
ack(errorResult);
|
|
3037
|
+
} else {
|
|
3038
|
+
socket.emit("portal:result", errorResult);
|
|
3039
|
+
}
|
|
3040
|
+
}
|
|
3041
|
+
});
|
|
3042
|
+
socket.on("trigger", async (trigger) => {
|
|
3043
|
+
debugLog(`[elasticdash] Socket received trigger: ${trigger.triggerId} steps=${trigger.steps.length} runs=${trigger.runCount}`);
|
|
3044
|
+
try {
|
|
3045
|
+
await executeTrigger(serverUrl, apiKey, trigger);
|
|
3046
|
+
} catch (e) {
|
|
3047
|
+
debugLog(`[elasticdash] Socket trigger execution failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
3048
|
+
}
|
|
3049
|
+
});
|
|
3050
|
+
socket.on("disconnect", (reason) => {
|
|
3051
|
+
debugLog(`[elasticdash] Socket disconnected: ${reason}`);
|
|
3052
|
+
});
|
|
3053
|
+
socket.on("connect_error", (err) => {
|
|
3054
|
+
debugLog(`[elasticdash] Socket connection error: ${err.message}`);
|
|
3055
|
+
});
|
|
3056
|
+
return socket;
|
|
3057
|
+
}
|
|
3058
|
+
async function disconnectFromBackend() {
|
|
3059
|
+
if (socket) {
|
|
3060
|
+
socket.disconnect();
|
|
3061
|
+
socket = null;
|
|
3062
|
+
}
|
|
3063
|
+
}
|
|
3064
|
+
var import_socket, socket;
|
|
3065
|
+
var init_socket_connector = __esm({
|
|
3066
|
+
"src/socket-connector.ts"() {
|
|
3067
|
+
"use strict";
|
|
3068
|
+
import_socket = require("socket.io-client");
|
|
3069
|
+
init_portal_executor();
|
|
3070
|
+
init_trigger_executor();
|
|
3071
|
+
init_tool_runner();
|
|
3072
|
+
init_debug();
|
|
3073
|
+
socket = null;
|
|
3074
|
+
}
|
|
3075
|
+
});
|
|
3076
|
+
|
|
2988
3077
|
// src/observability.ts
|
|
2989
3078
|
var observability_exports = {};
|
|
2990
3079
|
__export(observability_exports, {
|
|
@@ -3034,6 +3123,7 @@ function initObservability(options) {
|
|
|
3034
3123
|
interceptFetch();
|
|
3035
3124
|
installDBAutoInterceptor().catch(() => {
|
|
3036
3125
|
});
|
|
3126
|
+
connectToBackend({ serverUrl, apiKey, sessionId, serviceId });
|
|
3037
3127
|
heartbeatTimer = setInterval(() => {
|
|
3038
3128
|
batcher.enqueue({
|
|
3039
3129
|
id: ctx.nextId(),
|
|
@@ -3105,6 +3195,7 @@ async function shutdownObservability() {
|
|
|
3105
3195
|
durationMs: 0,
|
|
3106
3196
|
schemaVersion: 1
|
|
3107
3197
|
});
|
|
3198
|
+
await disconnectFromBackend();
|
|
3108
3199
|
await ctx.batcher.shutdown();
|
|
3109
3200
|
clearObservabilityContext();
|
|
3110
3201
|
debugLog(`[elasticdash] Observability shut down \u2014 sessionId=${ctx.sessionId}`);
|
|
@@ -3168,6 +3259,7 @@ var init_observability = __esm({
|
|
|
3168
3259
|
init_ai_interceptor();
|
|
3169
3260
|
init_http();
|
|
3170
3261
|
init_db_auto();
|
|
3262
|
+
init_socket_connector();
|
|
3171
3263
|
init_trigger_executor();
|
|
3172
3264
|
init_tool_runner();
|
|
3173
3265
|
init_debug();
|
|
@@ -3577,8 +3669,10 @@ __export(index_exports, {
|
|
|
3577
3669
|
checkToolAvailability: () => checkToolAvailability,
|
|
3578
3670
|
clearGlobalHttpContext: () => clearGlobalHttpContext,
|
|
3579
3671
|
clearRegistry: () => clearRegistry,
|
|
3672
|
+
connectToBackend: () => connectToBackend,
|
|
3580
3673
|
createTraceHandle: () => createTraceHandle,
|
|
3581
3674
|
deserializeAgentState: () => deserializeAgentState,
|
|
3675
|
+
disconnectFromBackend: () => disconnectFromBackend,
|
|
3582
3676
|
executePortalTask: () => executePortalTask,
|
|
3583
3677
|
expect: () => import_expect.expect,
|
|
3584
3678
|
extractTaskOutputs: () => extractTaskOutputs,
|
|
@@ -4865,6 +4959,7 @@ init_ai_interceptor();
|
|
|
4865
4959
|
init_observability();
|
|
4866
4960
|
init_telemetry_batcher();
|
|
4867
4961
|
init_portal_executor();
|
|
4962
|
+
init_socket_connector();
|
|
4868
4963
|
init_tracing();
|
|
4869
4964
|
|
|
4870
4965
|
// src/internals/conditional-recorder.ts
|
|
@@ -5247,8 +5342,10 @@ init_portal_executor();
|
|
|
5247
5342
|
checkToolAvailability,
|
|
5248
5343
|
clearGlobalHttpContext,
|
|
5249
5344
|
clearRegistry,
|
|
5345
|
+
connectToBackend,
|
|
5250
5346
|
createTraceHandle,
|
|
5251
5347
|
deserializeAgentState,
|
|
5348
|
+
disconnectFromBackend,
|
|
5252
5349
|
executePortalTask,
|
|
5253
5350
|
expect,
|
|
5254
5351
|
extractTaskOutputs,
|
package/dist/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export type { TelemetryBatcherOptions, TriggerSignal, TriggerStep } from './tele
|
|
|
29
29
|
export type { ObservabilityContext } from './interceptors/telemetry-push.js';
|
|
30
30
|
export { checkToolAvailability, checkAIAvailability } from './portal-executor.js';
|
|
31
31
|
export type { AvailabilityResult } from './portal-executor.js';
|
|
32
|
+
export { connectToBackend, disconnectFromBackend } from './socket-connector.js';
|
|
33
|
+
export type { SocketConnectorOptions } from './socket-connector.js';
|
|
32
34
|
export { startLLMProxy, fetchCapturedTrace } from './proxy/llm-capture.js';
|
|
33
35
|
export { recordToolCall } from './tracing.js';
|
|
34
36
|
export { safeRecordToolCall, isWorker } from './internals/conditional-recorder.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGxE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnH,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAGnI,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACzF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAG3D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAGtD,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAGtE,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAGrC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAGhG,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AACzF,YAAY,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGlE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAGjH,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAG/F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACvG,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,uBAAuB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACjG,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AACjF,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAG9D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAG1E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAGjF,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxH,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAG1G,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,8 @@ export { installAIInterceptor, uninstallAIInterceptor } from './interceptors/ai-
|
|
|
30
30
|
export { initObservability, shutdownObservability, startTrace, wrapWorkflow } from './observability.js';
|
|
31
31
|
export { TelemetryBatcher } from './telemetry-batcher.js';
|
|
32
32
|
export { checkToolAvailability, checkAIAvailability } from './portal-executor.js';
|
|
33
|
+
// Socket connector (real-time backend communication)
|
|
34
|
+
export { connectToBackend, disconnectFromBackend } from './socket-connector.js';
|
|
33
35
|
// LLM proxy
|
|
34
36
|
export { startLLMProxy, fetchCapturedTrace } from './proxy/llm-capture.js';
|
|
35
37
|
// Tracing
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAE1C,iBAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACnH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAGnH,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAItD,yBAAyB;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAEtD,oEAAoE;AACpE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,gBAAgB,EAChB,6BAA6B,EAC7B,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kCAAkC,CAAA;AAGzC,4DAA4D;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,8BAA8B,CAAA;AAUrC,wBAAwB;AACxB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3G,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAEhG,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAGzF,2BAA2B;AAC3B,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAEjH,sCAAsC;AACtC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAE/F,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAGjF,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE1E,UAAU;AACV,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAA;AAElF,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAGlD,yBAAyB;AACzB,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAGxH,8BAA8B;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9B;AAKD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAiFrF;AAgCD;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B3D;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EACpD,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAChC,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAsC/B"}
|
package/dist/observability.js
CHANGED
|
@@ -4,6 +4,7 @@ import { setObservabilityContext, getObservabilityContext, clearObservabilityCon
|
|
|
4
4
|
import { installAIInterceptor } from './interceptors/ai-interceptor.js';
|
|
5
5
|
import { interceptFetch } from './interceptors/http.js';
|
|
6
6
|
import { installDBAutoInterceptor } from './interceptors/db-auto.js';
|
|
7
|
+
import { connectToBackend, disconnectFromBackend } from './socket-connector.js';
|
|
7
8
|
import { executeTrigger } from './trigger-executor.js';
|
|
8
9
|
import { scanTools, scanWorkflows } from './execution/tool-runner.js';
|
|
9
10
|
import { debugLog } from './utils/debug.js';
|
|
@@ -59,6 +60,7 @@ export function initObservability(options) {
|
|
|
59
60
|
installAIInterceptor();
|
|
60
61
|
interceptFetch();
|
|
61
62
|
installDBAutoInterceptor().catch(() => { });
|
|
63
|
+
connectToBackend({ serverUrl, apiKey, sessionId, serviceId });
|
|
62
64
|
// Heartbeat
|
|
63
65
|
heartbeatTimer = setInterval(() => {
|
|
64
66
|
batcher.enqueue({
|
|
@@ -145,6 +147,8 @@ export async function shutdownObservability() {
|
|
|
145
147
|
durationMs: 0,
|
|
146
148
|
schemaVersion: 1,
|
|
147
149
|
});
|
|
150
|
+
// Disconnect socket
|
|
151
|
+
await disconnectFromBackend();
|
|
148
152
|
// Flush and shut down the batcher
|
|
149
153
|
await ctx.batcher.shutdown();
|
|
150
154
|
clearObservabilityContext();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,kCAAkC,CAAA;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAmB3C,IAAI,cAAc,GAA0C,IAAI,CAAA;AAChE,IAAI,kBAAkB,GAAG,KAAK,CAAA;AAE9B;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA8B;IAC9D,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAA;IAC7E,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAA;IAC9H,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAA;IACjE,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,iBAAiB,CAAA;IAC/F,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,UAAU,EAAE,CAAA;IAC1F,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,GAAG,CAAA;IAC7C,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,EAAE,CAAA;IAC5C,MAAM,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,MAAM,CAAA;IAElE,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;QACnC,SAAS;QACT,MAAM;QACN,SAAS;QACT,SAAS;QACT,eAAe,EAAE,OAAO,EAAE,eAAe;QACzC,YAAY,EAAE,OAAO,EAAE,YAAY;QACnC,UAAU;QACV,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YAC3B,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAClD,CAAC;KACF,CAAC,CAAA;IAEF,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,OAAO,GAAG,GAAG,SAAS,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;IAC1E,MAAM,GAAG,GAAyB;QAChC,SAAS;QACT,SAAS;QACT,SAAS;QACT,MAAM;QACN,OAAO;QACP,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO;QACvB,UAAU;QACV,UAAU;QACV,OAAO;KACR,CAAA;IAED,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC5B,oBAAoB,EAAE,CAAA;IACtB,cAAc,EAAE,CAAA;IAChB,wBAAwB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Socket } from 'socket.io-client';
|
|
2
|
+
export interface SocketConnectorOptions {
|
|
3
|
+
serverUrl: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
sessionId: string;
|
|
6
|
+
serviceId: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Establish a persistent socket.io connection to the backend.
|
|
10
|
+
*
|
|
11
|
+
* The SDK registers its sessionId, serviceId, and available tools/workflows
|
|
12
|
+
* on connect. The backend can then push portal tasks and trigger signals
|
|
13
|
+
* to this SDK instance for execution.
|
|
14
|
+
*
|
|
15
|
+
* Auto-reconnects on disconnect with exponential backoff (1s–30s).
|
|
16
|
+
* Safe to call multiple times — subsequent calls return the existing socket.
|
|
17
|
+
*/
|
|
18
|
+
export declare function connectToBackend(options: SocketConnectorOptions): Socket;
|
|
19
|
+
/**
|
|
20
|
+
* Disconnect from the backend and clean up the socket.
|
|
21
|
+
*/
|
|
22
|
+
export declare function disconnectFromBackend(): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=socket-connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-connector.d.ts","sourceRoot":"","sources":["../src/socket-connector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAQ7C,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB;AAID;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA6ExE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { io } from 'socket.io-client';
|
|
2
|
+
import { executePortalTask } from './portal-executor.js';
|
|
3
|
+
import { executeTrigger } from './trigger-executor.js';
|
|
4
|
+
import { scanTools, scanWorkflows } from './execution/tool-runner.js';
|
|
5
|
+
import { debugLog } from './utils/debug.js';
|
|
6
|
+
let socket = null;
|
|
7
|
+
/**
|
|
8
|
+
* Establish a persistent socket.io connection to the backend.
|
|
9
|
+
*
|
|
10
|
+
* The SDK registers its sessionId, serviceId, and available tools/workflows
|
|
11
|
+
* on connect. The backend can then push portal tasks and trigger signals
|
|
12
|
+
* to this SDK instance for execution.
|
|
13
|
+
*
|
|
14
|
+
* Auto-reconnects on disconnect with exponential backoff (1s–30s).
|
|
15
|
+
* Safe to call multiple times — subsequent calls return the existing socket.
|
|
16
|
+
*/
|
|
17
|
+
export function connectToBackend(options) {
|
|
18
|
+
if (socket?.connected)
|
|
19
|
+
return socket;
|
|
20
|
+
// If a socket exists but is disconnected/reconnecting, reuse it
|
|
21
|
+
if (socket)
|
|
22
|
+
return socket;
|
|
23
|
+
const { serverUrl, apiKey, sessionId, serviceId } = options;
|
|
24
|
+
const cwd = process.cwd();
|
|
25
|
+
socket = io(serverUrl, {
|
|
26
|
+
auth: {
|
|
27
|
+
...(apiKey ? { apiKey } : {}),
|
|
28
|
+
sessionId,
|
|
29
|
+
serviceId,
|
|
30
|
+
},
|
|
31
|
+
transports: ['websocket', 'polling'],
|
|
32
|
+
reconnection: true,
|
|
33
|
+
reconnectionDelay: 1000,
|
|
34
|
+
reconnectionDelayMax: 30_000,
|
|
35
|
+
});
|
|
36
|
+
socket.on('connect', () => {
|
|
37
|
+
debugLog(`[elasticdash] Socket connected: ${socket.id}`);
|
|
38
|
+
const tools = scanTools(cwd);
|
|
39
|
+
const workflows = scanWorkflows(cwd);
|
|
40
|
+
socket.emit('register', {
|
|
41
|
+
sessionId,
|
|
42
|
+
serviceId,
|
|
43
|
+
tools: tools.map(t => t.name),
|
|
44
|
+
workflows: workflows.map(w => w.name),
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
socket.on('portal:task', async (task, ack) => {
|
|
48
|
+
debugLog(`[elasticdash] Socket received portal task: ${task.taskId} type=${task.type} name=${task.name}`);
|
|
49
|
+
try {
|
|
50
|
+
const tools = scanTools(cwd);
|
|
51
|
+
const result = await executePortalTask(task, cwd, tools);
|
|
52
|
+
if (typeof ack === 'function') {
|
|
53
|
+
ack(result);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
socket.emit('portal:result', result);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
const errorResult = {
|
|
61
|
+
taskId: task.taskId,
|
|
62
|
+
ok: false,
|
|
63
|
+
output: null,
|
|
64
|
+
error: e instanceof Error ? e.message : String(e),
|
|
65
|
+
durationMs: 0,
|
|
66
|
+
metadata: task.metadata,
|
|
67
|
+
};
|
|
68
|
+
if (typeof ack === 'function') {
|
|
69
|
+
ack(errorResult);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
socket.emit('portal:result', errorResult);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
socket.on('trigger', async (trigger) => {
|
|
77
|
+
debugLog(`[elasticdash] Socket received trigger: ${trigger.triggerId} steps=${trigger.steps.length} runs=${trigger.runCount}`);
|
|
78
|
+
try {
|
|
79
|
+
await executeTrigger(serverUrl, apiKey, trigger);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
debugLog(`[elasticdash] Socket trigger execution failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
socket.on('disconnect', (reason) => {
|
|
86
|
+
debugLog(`[elasticdash] Socket disconnected: ${reason}`);
|
|
87
|
+
});
|
|
88
|
+
socket.on('connect_error', (err) => {
|
|
89
|
+
debugLog(`[elasticdash] Socket connection error: ${err.message}`);
|
|
90
|
+
});
|
|
91
|
+
return socket;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Disconnect from the backend and clean up the socket.
|
|
95
|
+
*/
|
|
96
|
+
export async function disconnectFromBackend() {
|
|
97
|
+
if (socket) {
|
|
98
|
+
socket.disconnect();
|
|
99
|
+
socket = null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=socket-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket-connector.js","sourceRoot":"","sources":["../src/socket-connector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elasticdash-test",
|
|
3
|
-
"version": "0.1.18-alpha",
|
|
3
|
+
"version": "0.1.18-alpha-2",
|
|
4
4
|
"description": "AI-native test runner for ElasticDash workflow testing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"expect": "^29.7.0",
|
|
52
52
|
"express": "^5.2.1",
|
|
53
53
|
"fast-glob": "^3.3.2",
|
|
54
|
+
"socket.io-client": "^4.8.3",
|
|
54
55
|
"tsx": "^4.15.6"
|
|
55
56
|
},
|
|
56
57
|
"devDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -80,6 +80,10 @@ export type { ObservabilityContext } from './interceptors/telemetry-push.js'
|
|
|
80
80
|
export { checkToolAvailability, checkAIAvailability } from './portal-executor.js'
|
|
81
81
|
export type { AvailabilityResult } from './portal-executor.js'
|
|
82
82
|
|
|
83
|
+
// Socket connector (real-time backend communication)
|
|
84
|
+
export { connectToBackend, disconnectFromBackend } from './socket-connector.js'
|
|
85
|
+
export type { SocketConnectorOptions } from './socket-connector.js'
|
|
86
|
+
|
|
83
87
|
// LLM proxy
|
|
84
88
|
export { startLLMProxy, fetchCapturedTrace } from './proxy/llm-capture.js'
|
|
85
89
|
|
package/src/observability.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { ObservabilityContext } from './interceptors/telemetry-push.js'
|
|
|
10
10
|
import { installAIInterceptor } from './interceptors/ai-interceptor.js'
|
|
11
11
|
import { interceptFetch } from './interceptors/http.js'
|
|
12
12
|
import { installDBAutoInterceptor } from './interceptors/db-auto.js'
|
|
13
|
+
import { connectToBackend, disconnectFromBackend } from './socket-connector.js'
|
|
13
14
|
import { executeTrigger } from './trigger-executor.js'
|
|
14
15
|
import { scanTools, scanWorkflows } from './execution/tool-runner.js'
|
|
15
16
|
import { debugLog } from './utils/debug.js'
|
|
@@ -88,6 +89,7 @@ export function initObservability(options?: ObservabilityOptions): Observability
|
|
|
88
89
|
installAIInterceptor()
|
|
89
90
|
interceptFetch()
|
|
90
91
|
installDBAutoInterceptor().catch(() => {})
|
|
92
|
+
connectToBackend({ serverUrl, apiKey, sessionId, serviceId })
|
|
91
93
|
|
|
92
94
|
// Heartbeat
|
|
93
95
|
heartbeatTimer = setInterval(() => {
|
|
@@ -182,6 +184,9 @@ export async function shutdownObservability(): Promise<void> {
|
|
|
182
184
|
schemaVersion: 1,
|
|
183
185
|
})
|
|
184
186
|
|
|
187
|
+
// Disconnect socket
|
|
188
|
+
await disconnectFromBackend()
|
|
189
|
+
|
|
185
190
|
// Flush and shut down the batcher
|
|
186
191
|
await ctx.batcher.shutdown()
|
|
187
192
|
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { io, Socket } from 'socket.io-client'
|
|
2
|
+
import type { PortalTask, PortalTaskResult } from './types/portal.js'
|
|
3
|
+
import type { TriggerSignal } from './telemetry-batcher.js'
|
|
4
|
+
import { executePortalTask } from './portal-executor.js'
|
|
5
|
+
import { executeTrigger } from './trigger-executor.js'
|
|
6
|
+
import { scanTools, scanWorkflows } from './execution/tool-runner.js'
|
|
7
|
+
import { debugLog } from './utils/debug.js'
|
|
8
|
+
|
|
9
|
+
export interface SocketConnectorOptions {
|
|
10
|
+
serverUrl: string
|
|
11
|
+
apiKey?: string
|
|
12
|
+
sessionId: string
|
|
13
|
+
serviceId: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
let socket: Socket | null = null
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Establish a persistent socket.io connection to the backend.
|
|
20
|
+
*
|
|
21
|
+
* The SDK registers its sessionId, serviceId, and available tools/workflows
|
|
22
|
+
* on connect. The backend can then push portal tasks and trigger signals
|
|
23
|
+
* to this SDK instance for execution.
|
|
24
|
+
*
|
|
25
|
+
* Auto-reconnects on disconnect with exponential backoff (1s–30s).
|
|
26
|
+
* Safe to call multiple times — subsequent calls return the existing socket.
|
|
27
|
+
*/
|
|
28
|
+
export function connectToBackend(options: SocketConnectorOptions): Socket {
|
|
29
|
+
if (socket?.connected) return socket
|
|
30
|
+
// If a socket exists but is disconnected/reconnecting, reuse it
|
|
31
|
+
if (socket) return socket
|
|
32
|
+
|
|
33
|
+
const { serverUrl, apiKey, sessionId, serviceId } = options
|
|
34
|
+
const cwd = process.cwd()
|
|
35
|
+
|
|
36
|
+
socket = io(serverUrl, {
|
|
37
|
+
auth: {
|
|
38
|
+
...(apiKey ? { apiKey } : {}),
|
|
39
|
+
sessionId,
|
|
40
|
+
serviceId,
|
|
41
|
+
},
|
|
42
|
+
transports: ['websocket', 'polling'],
|
|
43
|
+
reconnection: true,
|
|
44
|
+
reconnectionDelay: 1000,
|
|
45
|
+
reconnectionDelayMax: 30_000,
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
socket.on('connect', () => {
|
|
49
|
+
debugLog(`[elasticdash] Socket connected: ${socket!.id}`)
|
|
50
|
+
const tools = scanTools(cwd)
|
|
51
|
+
const workflows = scanWorkflows(cwd)
|
|
52
|
+
socket!.emit('register', {
|
|
53
|
+
sessionId,
|
|
54
|
+
serviceId,
|
|
55
|
+
tools: tools.map(t => t.name),
|
|
56
|
+
workflows: workflows.map(w => w.name),
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
socket.on('portal:task', async (task: PortalTask, ack?: (result: PortalTaskResult) => void) => {
|
|
61
|
+
debugLog(`[elasticdash] Socket received portal task: ${task.taskId} type=${task.type} name=${task.name}`)
|
|
62
|
+
try {
|
|
63
|
+
const tools = scanTools(cwd)
|
|
64
|
+
const result = await executePortalTask(task, cwd, tools)
|
|
65
|
+
if (typeof ack === 'function') {
|
|
66
|
+
ack(result)
|
|
67
|
+
} else {
|
|
68
|
+
socket!.emit('portal:result', result)
|
|
69
|
+
}
|
|
70
|
+
} catch (e) {
|
|
71
|
+
const errorResult: PortalTaskResult = {
|
|
72
|
+
taskId: task.taskId,
|
|
73
|
+
ok: false,
|
|
74
|
+
output: null,
|
|
75
|
+
error: e instanceof Error ? e.message : String(e),
|
|
76
|
+
durationMs: 0,
|
|
77
|
+
metadata: task.metadata,
|
|
78
|
+
}
|
|
79
|
+
if (typeof ack === 'function') {
|
|
80
|
+
ack(errorResult)
|
|
81
|
+
} else {
|
|
82
|
+
socket!.emit('portal:result', errorResult)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
socket.on('trigger', async (trigger: TriggerSignal) => {
|
|
88
|
+
debugLog(`[elasticdash] Socket received trigger: ${trigger.triggerId} steps=${trigger.steps.length} runs=${trigger.runCount}`)
|
|
89
|
+
try {
|
|
90
|
+
await executeTrigger(serverUrl, apiKey, trigger)
|
|
91
|
+
} catch (e) {
|
|
92
|
+
debugLog(`[elasticdash] Socket trigger execution failed: ${e instanceof Error ? e.message : String(e)}`)
|
|
93
|
+
}
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
socket.on('disconnect', (reason) => {
|
|
97
|
+
debugLog(`[elasticdash] Socket disconnected: ${reason}`)
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
socket.on('connect_error', (err) => {
|
|
101
|
+
debugLog(`[elasticdash] Socket connection error: ${err.message}`)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
return socket
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Disconnect from the backend and clean up the socket.
|
|
109
|
+
*/
|
|
110
|
+
export async function disconnectFromBackend(): Promise<void> {
|
|
111
|
+
if (socket) {
|
|
112
|
+
socket.disconnect()
|
|
113
|
+
socket = null
|
|
114
|
+
}
|
|
115
|
+
}
|