@agentuity/runtime 1.0.19 → 1.0.21
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/handlers/index.d.ts +1 -1
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +1 -1
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/websocket.d.ts +39 -2
- package/dist/handlers/websocket.d.ts.map +1 -1
- package/dist/handlers/websocket.js +50 -1
- package/dist/handlers/websocket.js.map +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js +77 -3
- package/dist/middleware.js.map +1 -1
- package/package.json +7 -7
- package/src/handlers/index.ts +6 -1
- package/src/handlers/websocket.ts +65 -2
- package/src/middleware.ts +141 -3
package/dist/handlers/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { websocket, type WebSocketConnection, type WebSocketHandler } from './websocket';
|
|
1
|
+
export { websocket, type WebSocketConnection, type WebSocketHandler, WS_DONE_PROMISE_KEY, } from './websocket';
|
|
2
2
|
export { sse, type SSEMessage, type SSEStream, type SSEHandler, type SSEOptions, STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY, } from './sse';
|
|
3
3
|
export { stream, type StreamHandler } from './stream';
|
|
4
4
|
export { cron, type CronHandler, type CronMetadata } from './cron';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EACT,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,mBAAmB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,GAAG,EACH,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,UAAU,EACf,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/handlers/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,SAAS,EAGT,mBAAmB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,GAAG,EAKH,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,MAAM,EAAsB,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAuC,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,MAAM,EAA0C,MAAM,UAAU,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { Context, MiddlewareHandler } from 'hono';
|
|
2
2
|
import type { Env } from '../app';
|
|
3
|
+
/**
|
|
4
|
+
* Context key for WebSocket close promise.
|
|
5
|
+
* Used by middleware to defer session finalization until WebSocket closes.
|
|
6
|
+
*/
|
|
7
|
+
export declare const WS_DONE_PROMISE_KEY = "_wsDonePromise";
|
|
3
8
|
/**
|
|
4
9
|
* WebSocket connection interface for handling WebSocket events.
|
|
5
10
|
*/
|
|
@@ -12,15 +17,31 @@ export interface WebSocketConnection {
|
|
|
12
17
|
/**
|
|
13
18
|
* Handler function for WebSocket connections.
|
|
14
19
|
* Receives the Hono context and WebSocket connection with a flattened signature.
|
|
20
|
+
*
|
|
21
|
+
* **This handler must be synchronous** (returns `void`, not `Promise<void>`).
|
|
22
|
+
* The handler is called inside Hono's `upgradeWebSocket` factory, which must
|
|
23
|
+
* return event handlers synchronously for the HTTP upgrade to complete. If the
|
|
24
|
+
* handler were async, any `ws.onOpen`/`ws.onMessage`/`ws.onClose` registrations
|
|
25
|
+
* after an `await` would be silently lost because the factory returns before
|
|
26
|
+
* they are registered.
|
|
27
|
+
*
|
|
28
|
+
* To perform async work, place it inside the `onOpen`, `onMessage`, or `onClose`
|
|
29
|
+
* callbacks, which are properly awaited by the runtime.
|
|
15
30
|
*/
|
|
16
|
-
export type WebSocketHandler<E extends Env = Env> = (c: Context<E>, ws: WebSocketConnection) => void
|
|
31
|
+
export type WebSocketHandler<E extends Env = Env> = (c: Context<E>, ws: WebSocketConnection) => void;
|
|
17
32
|
/**
|
|
18
33
|
* Creates a WebSocket middleware for handling WebSocket connections.
|
|
19
34
|
*
|
|
35
|
+
* The handler must be **synchronous** — it runs inside Hono's `upgradeWebSocket`
|
|
36
|
+
* factory which must return event handlers synchronously for the HTTP upgrade to
|
|
37
|
+
* complete. Async work should go inside `onOpen`, `onMessage`, or `onClose`
|
|
38
|
+
* callbacks, which are properly awaited by the runtime.
|
|
39
|
+
*
|
|
20
40
|
* Use with router.get() to create a WebSocket endpoint:
|
|
21
41
|
*
|
|
22
42
|
* @example
|
|
23
43
|
* ```typescript
|
|
44
|
+
* // Basic synchronous usage
|
|
24
45
|
* import { createRouter, websocket } from '@agentuity/runtime';
|
|
25
46
|
*
|
|
26
47
|
* const router = createRouter();
|
|
@@ -42,7 +63,23 @@ export type WebSocketHandler<E extends Env = Env> = (c: Context<E>, ws: WebSocke
|
|
|
42
63
|
* }));
|
|
43
64
|
* ```
|
|
44
65
|
*
|
|
45
|
-
* @
|
|
66
|
+
* @example
|
|
67
|
+
* ```typescript
|
|
68
|
+
* // Async work inside callbacks (correct pattern)
|
|
69
|
+
* router.get('/ws', websocket((c, ws) => {
|
|
70
|
+
* ws.onOpen(async () => {
|
|
71
|
+
* const user = await fetchUser(c.var.auth);
|
|
72
|
+
* ws.send(JSON.stringify({ welcome: user.name }));
|
|
73
|
+
* });
|
|
74
|
+
*
|
|
75
|
+
* ws.onMessage(async (event) => {
|
|
76
|
+
* const result = await processMessage(event.data);
|
|
77
|
+
* ws.send(JSON.stringify(result));
|
|
78
|
+
* });
|
|
79
|
+
* }));
|
|
80
|
+
* ```
|
|
81
|
+
*
|
|
82
|
+
* @param handler - Synchronous handler function receiving context and WebSocket connection
|
|
46
83
|
* @returns Hono middleware handler for WebSocket upgrade
|
|
47
84
|
*/
|
|
48
85
|
export declare function websocket<E extends Env = Env>(handler: WebSocketHandler<E>): MiddlewareHandler<E>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACxE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;CACxD;AAED
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAIvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAElC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAClE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IAC5E,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACxE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,KAAK,IAAI,CAAC;CACxD;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CACnD,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EACb,EAAE,EAAE,mBAAmB,KACnB,IAAI,CAAC;AAEV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAsIjG"}
|
|
@@ -1,13 +1,24 @@
|
|
|
1
1
|
import { upgradeWebSocket } from 'hono/bun';
|
|
2
2
|
import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api';
|
|
3
3
|
import { getAgentAsyncLocalStorage } from '../_context';
|
|
4
|
+
/**
|
|
5
|
+
* Context key for WebSocket close promise.
|
|
6
|
+
* Used by middleware to defer session finalization until WebSocket closes.
|
|
7
|
+
*/
|
|
8
|
+
export const WS_DONE_PROMISE_KEY = '_wsDonePromise';
|
|
4
9
|
/**
|
|
5
10
|
* Creates a WebSocket middleware for handling WebSocket connections.
|
|
6
11
|
*
|
|
12
|
+
* The handler must be **synchronous** — it runs inside Hono's `upgradeWebSocket`
|
|
13
|
+
* factory which must return event handlers synchronously for the HTTP upgrade to
|
|
14
|
+
* complete. Async work should go inside `onOpen`, `onMessage`, or `onClose`
|
|
15
|
+
* callbacks, which are properly awaited by the runtime.
|
|
16
|
+
*
|
|
7
17
|
* Use with router.get() to create a WebSocket endpoint:
|
|
8
18
|
*
|
|
9
19
|
* @example
|
|
10
20
|
* ```typescript
|
|
21
|
+
* // Basic synchronous usage
|
|
11
22
|
* import { createRouter, websocket } from '@agentuity/runtime';
|
|
12
23
|
*
|
|
13
24
|
* const router = createRouter();
|
|
@@ -29,7 +40,23 @@ import { getAgentAsyncLocalStorage } from '../_context';
|
|
|
29
40
|
* }));
|
|
30
41
|
* ```
|
|
31
42
|
*
|
|
32
|
-
* @
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Async work inside callbacks (correct pattern)
|
|
46
|
+
* router.get('/ws', websocket((c, ws) => {
|
|
47
|
+
* ws.onOpen(async () => {
|
|
48
|
+
* const user = await fetchUser(c.var.auth);
|
|
49
|
+
* ws.send(JSON.stringify({ welcome: user.name }));
|
|
50
|
+
* });
|
|
51
|
+
*
|
|
52
|
+
* ws.onMessage(async (event) => {
|
|
53
|
+
* const result = await processMessage(event.data);
|
|
54
|
+
* ws.send(JSON.stringify(result));
|
|
55
|
+
* });
|
|
56
|
+
* }));
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @param handler - Synchronous handler function receiving context and WebSocket connection
|
|
33
60
|
* @returns Hono middleware handler for WebSocket upgrade
|
|
34
61
|
*/
|
|
35
62
|
export function websocket(handler) {
|
|
@@ -40,6 +67,23 @@ export function websocket(handler) {
|
|
|
40
67
|
let initialized = false;
|
|
41
68
|
const asyncLocalStorage = getAgentAsyncLocalStorage();
|
|
42
69
|
const capturedContext = asyncLocalStorage.getStore();
|
|
70
|
+
// Create done promise for session lifecycle deferral, but ONLY for actual
|
|
71
|
+
// WebSocket upgrade requests. The factory runs unconditionally for every
|
|
72
|
+
// request hitting this route (Hono calls createEvents before attempting
|
|
73
|
+
// server.upgrade). For non-upgrade HTTP requests, setting the promise would
|
|
74
|
+
// cause the middleware to hang forever waiting for an onClose that never fires.
|
|
75
|
+
let resolveDone;
|
|
76
|
+
const isUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket';
|
|
77
|
+
if (isUpgrade) {
|
|
78
|
+
const donePromise = new Promise((resolve) => {
|
|
79
|
+
resolveDone = resolve;
|
|
80
|
+
});
|
|
81
|
+
// Defensive: guard against future code adding rejection paths
|
|
82
|
+
donePromise.catch(() => { });
|
|
83
|
+
// Set on context so middleware defers session finalization until WS closes
|
|
84
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
85
|
+
c.set(WS_DONE_PROMISE_KEY, donePromise);
|
|
86
|
+
}
|
|
43
87
|
const wsConnection = {
|
|
44
88
|
onOpen: (h) => {
|
|
45
89
|
openHandler = h;
|
|
@@ -134,6 +178,11 @@ export function websocket(handler) {
|
|
|
134
178
|
catch (err) {
|
|
135
179
|
c.var.logger?.error('WebSocket onClose error:', err);
|
|
136
180
|
}
|
|
181
|
+
finally {
|
|
182
|
+
// Resolve the done promise to trigger session finalization
|
|
183
|
+
// This must fire even if the user's onClose handler throws
|
|
184
|
+
resolveDone?.();
|
|
185
|
+
}
|
|
137
186
|
},
|
|
138
187
|
};
|
|
139
188
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/handlers/websocket.ts"],"names":[],"mappings":"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"}
|
package/dist/middleware.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,KAAK,EAAE,GAAG,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAQvC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAmCxD,eAAO,MAAM,wBAAwB,yIAc3B,CAAC;AAuBX,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,oEAsD5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,UAAU,oEA+E9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,qEAiuBnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,2BAA2B,CAC1C,YAAY,CAAC,EAAE,iBAAiB;AAChC;;;GAGG;AACH,cAAc,CAAC,EAAE,MAAM;IAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAA;CAAE,GAAG,SAAS,oEAmD9E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,qEA6BzC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/middleware.js
CHANGED
|
@@ -18,6 +18,7 @@ import * as runtimeConfig from './_config';
|
|
|
18
18
|
import { getSessionEventProvider } from './_services';
|
|
19
19
|
import { internal } from './logger/internal';
|
|
20
20
|
import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from './handlers/sse';
|
|
21
|
+
import { WS_DONE_PROMISE_KEY } from './handlers/websocket';
|
|
21
22
|
import { loadBuildMetadata } from './_metadata';
|
|
22
23
|
const SESSION_HEADER = 'x-session-id';
|
|
23
24
|
const THREAD_HEADER = 'x-thread-id';
|
|
@@ -284,6 +285,7 @@ export function createOtelMiddleware() {
|
|
|
284
285
|
const thread = await threadProvider.restore(c);
|
|
285
286
|
const session = await sessionProvider.restore(thread, sessionId);
|
|
286
287
|
const handler = new WaitUntilHandler(tracer);
|
|
288
|
+
const isWsUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket';
|
|
287
289
|
c.set('sessionId', sessionId);
|
|
288
290
|
c.set('thread', thread);
|
|
289
291
|
c.set('session', session);
|
|
@@ -293,7 +295,7 @@ export function createOtelMiddleware() {
|
|
|
293
295
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
294
296
|
c.set('agentIds', agentIds);
|
|
295
297
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
296
|
-
c.set('trigger', 'api');
|
|
298
|
+
c.set('trigger', isWsUpgrade ? 'websocket' : 'api');
|
|
297
299
|
// Send session start event (so evalruns can reference this session)
|
|
298
300
|
// The provider decides whether to send based on available data (orgId, projectId, etc.)
|
|
299
301
|
// Skip for workbench routes that don't need session tracking
|
|
@@ -339,7 +341,7 @@ export function createOtelMiddleware() {
|
|
|
339
341
|
projectId: projectId || '',
|
|
340
342
|
deploymentId: deploymentId || undefined,
|
|
341
343
|
devmode: isDevMode,
|
|
342
|
-
trigger: 'api',
|
|
344
|
+
trigger: isWsUpgrade ? 'websocket' : 'api',
|
|
343
345
|
routeId,
|
|
344
346
|
environment: runtimeConfig.getEnvironment(),
|
|
345
347
|
url: c.req.path,
|
|
@@ -401,13 +403,16 @@ export function createOtelMiddleware() {
|
|
|
401
403
|
const streamDone = c.get(STREAM_DONE_PROMISE_KEY);
|
|
402
404
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
403
405
|
const isStreaming = Boolean(c.get(IS_STREAMING_RESPONSE_KEY));
|
|
406
|
+
// Check if this is a WebSocket response that needs deferred finalization
|
|
407
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
408
|
+
const wsDone = c.get(WS_DONE_PROMISE_KEY);
|
|
404
409
|
// Check if Hono caught an error (c.error is set by Hono's error handler)
|
|
405
410
|
// or if the response status indicates an error
|
|
406
411
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
407
412
|
const honoError = c.error;
|
|
408
413
|
responseStatus = c.res?.status ?? 200;
|
|
409
414
|
const isError = honoError || responseStatus >= 500;
|
|
410
|
-
internal.info('[request] %s %s - status: %d, streaming: %s, error: %s (session: %s)', method, url.pathname, responseStatus, isStreaming, isError, sessionId);
|
|
415
|
+
internal.info('[request] %s %s - status: %d, streaming: %s, websocket: %s, error: %s (session: %s)', method, url.pathname, responseStatus, isStreaming, Boolean(wsDone), isError, sessionId);
|
|
411
416
|
if (isError) {
|
|
412
417
|
// Capture error message for finalization
|
|
413
418
|
errorMessage = honoError
|
|
@@ -501,6 +506,75 @@ export function createOtelMiddleware() {
|
|
|
501
506
|
}
|
|
502
507
|
});
|
|
503
508
|
}
|
|
509
|
+
else if (wsDone) {
|
|
510
|
+
// WebSocket connection — defer finalization until onClose fires
|
|
511
|
+
internal.info('[request] %s %s - websocket response, deferring finalization until close (session: %s)', method, url.pathname, sessionId);
|
|
512
|
+
// For WebSocket, we end the span inside waitUntil after the connection closes
|
|
513
|
+
shouldEndSpanInFinally = false;
|
|
514
|
+
// Capture pending promises BEFORE adding finalization waitUntil to avoid deadlock
|
|
515
|
+
const pendingPromises = handler.getPendingSnapshot();
|
|
516
|
+
const hasPendingTasks = pendingPromises.length > 0;
|
|
517
|
+
if (hasPendingTasks) {
|
|
518
|
+
internal.info('[request] %s %s - %d pending waitUntil tasks to wait for after websocket close (session: %s)', method, url.pathname, pendingPromises.length, sessionId);
|
|
519
|
+
}
|
|
520
|
+
// Capture values needed for span attributes
|
|
521
|
+
const capturedResponseStatus = responseStatus;
|
|
522
|
+
const capturedErrorMessage = errorMessage;
|
|
523
|
+
// Use waitUntil to handle WebSocket close and finalization
|
|
524
|
+
handler.waitUntil(async () => {
|
|
525
|
+
let wsError = undefined;
|
|
526
|
+
try {
|
|
527
|
+
await wsDone;
|
|
528
|
+
internal.info('[request] %s %s - websocket closed (session: %s)', method, url.pathname, sessionId);
|
|
529
|
+
}
|
|
530
|
+
catch (ex) {
|
|
531
|
+
wsError = ex;
|
|
532
|
+
internal.info('[request] %s %s - websocket closed with error: %s (session: %s)', method, url.pathname, ex, sessionId);
|
|
533
|
+
}
|
|
534
|
+
// Record duration now that WebSocket is closed
|
|
535
|
+
const wsDurationMs = performance.now() - requestStartTime;
|
|
536
|
+
const durationNs = Math.round(wsDurationMs * 1_000_000);
|
|
537
|
+
internal.info('[request] %s %s - recording websocket duration: %sms (session: %s)', method, url.pathname, wsDurationMs.toFixed(2), sessionId);
|
|
538
|
+
// Determine final status
|
|
539
|
+
const finalStatus = wsError ? 500 : capturedResponseStatus;
|
|
540
|
+
const finalErrorMessage = wsError
|
|
541
|
+
? wsError instanceof Error
|
|
542
|
+
? (wsError.stack ?? wsError.message)
|
|
543
|
+
: String(wsError)
|
|
544
|
+
: capturedErrorMessage;
|
|
545
|
+
try {
|
|
546
|
+
// Wait for pending tasks captured BEFORE this waitUntil was added
|
|
547
|
+
if (hasPendingTasks) {
|
|
548
|
+
internal.info('[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)', method, url.pathname, pendingPromises.length, sessionId);
|
|
549
|
+
const logger = c.get('logger');
|
|
550
|
+
await handler.waitForPromises(pendingPromises, logger, sessionId);
|
|
551
|
+
internal.info('[request] %s %s - all waitUntil tasks complete (session: %s)', method, url.pathname, sessionId);
|
|
552
|
+
}
|
|
553
|
+
// Finalize session after WebSocket closes
|
|
554
|
+
await finalizeSession(finalStatus >= 500 ? finalStatus : undefined, finalErrorMessage);
|
|
555
|
+
internal.info('[request] %s %s - websocket session finalization complete (session: %s)', method, url.pathname, sessionId);
|
|
556
|
+
}
|
|
557
|
+
finally {
|
|
558
|
+
// Set span attributes and end span AFTER all work is done
|
|
559
|
+
span.setAttribute('@agentuity/request.duration', durationNs);
|
|
560
|
+
span.setAttribute('http.status_code', finalStatus);
|
|
561
|
+
if (wsError) {
|
|
562
|
+
span.setStatus({
|
|
563
|
+
code: SpanStatusCode.ERROR,
|
|
564
|
+
message: finalErrorMessage ?? 'WebSocket ended with error',
|
|
565
|
+
});
|
|
566
|
+
if (wsError instanceof Error) {
|
|
567
|
+
span.recordException(wsError);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
572
|
+
}
|
|
573
|
+
span.end();
|
|
574
|
+
internal.info('[request] %s %s - websocket span ended (session: %s)', method, url.pathname, sessionId);
|
|
575
|
+
}
|
|
576
|
+
});
|
|
577
|
+
}
|
|
504
578
|
else {
|
|
505
579
|
// Non-streaming: record duration immediately
|
|
506
580
|
const durationNs = Math.round(handlerDurationMs * 1_000_000);
|
package/dist/middleware.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/runtime",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.21",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
"prepublishOnly": "bun run clean && bun run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agentuity/auth": "1.0.
|
|
30
|
-
"@agentuity/core": "1.0.
|
|
31
|
-
"@agentuity/frontend": "1.0.
|
|
32
|
-
"@agentuity/schema": "1.0.
|
|
33
|
-
"@agentuity/server": "1.0.
|
|
29
|
+
"@agentuity/auth": "1.0.21",
|
|
30
|
+
"@agentuity/core": "1.0.21",
|
|
31
|
+
"@agentuity/frontend": "1.0.21",
|
|
32
|
+
"@agentuity/schema": "1.0.21",
|
|
33
|
+
"@agentuity/server": "1.0.21",
|
|
34
34
|
"@opentelemetry/api": "^1.9.0",
|
|
35
35
|
"@opentelemetry/api-logs": "^0.207.0",
|
|
36
36
|
"@opentelemetry/auto-instrumentations-node": "^0.66.0",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"zod": "^4.3.5"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@agentuity/test-utils": "1.0.
|
|
53
|
+
"@agentuity/test-utils": "1.0.21",
|
|
54
54
|
"@types/bun": "latest",
|
|
55
55
|
"@types/react": "^19.2.2",
|
|
56
56
|
"@types/react-dom": "^19.2.2",
|
package/src/handlers/index.ts
CHANGED
|
@@ -4,6 +4,12 @@ import { context as otelContext, ROOT_CONTEXT } from '@opentelemetry/api';
|
|
|
4
4
|
import { getAgentAsyncLocalStorage } from '../_context';
|
|
5
5
|
import type { Env } from '../app';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Context key for WebSocket close promise.
|
|
9
|
+
* Used by middleware to defer session finalization until WebSocket closes.
|
|
10
|
+
*/
|
|
11
|
+
export const WS_DONE_PROMISE_KEY = '_wsDonePromise';
|
|
12
|
+
|
|
7
13
|
/**
|
|
8
14
|
* WebSocket connection interface for handling WebSocket events.
|
|
9
15
|
*/
|
|
@@ -17,19 +23,35 @@ export interface WebSocketConnection {
|
|
|
17
23
|
/**
|
|
18
24
|
* Handler function for WebSocket connections.
|
|
19
25
|
* Receives the Hono context and WebSocket connection with a flattened signature.
|
|
26
|
+
*
|
|
27
|
+
* **This handler must be synchronous** (returns `void`, not `Promise<void>`).
|
|
28
|
+
* The handler is called inside Hono's `upgradeWebSocket` factory, which must
|
|
29
|
+
* return event handlers synchronously for the HTTP upgrade to complete. If the
|
|
30
|
+
* handler were async, any `ws.onOpen`/`ws.onMessage`/`ws.onClose` registrations
|
|
31
|
+
* after an `await` would be silently lost because the factory returns before
|
|
32
|
+
* they are registered.
|
|
33
|
+
*
|
|
34
|
+
* To perform async work, place it inside the `onOpen`, `onMessage`, or `onClose`
|
|
35
|
+
* callbacks, which are properly awaited by the runtime.
|
|
20
36
|
*/
|
|
21
37
|
export type WebSocketHandler<E extends Env = Env> = (
|
|
22
38
|
c: Context<E>,
|
|
23
39
|
ws: WebSocketConnection
|
|
24
|
-
) => void
|
|
40
|
+
) => void;
|
|
25
41
|
|
|
26
42
|
/**
|
|
27
43
|
* Creates a WebSocket middleware for handling WebSocket connections.
|
|
28
44
|
*
|
|
45
|
+
* The handler must be **synchronous** — it runs inside Hono's `upgradeWebSocket`
|
|
46
|
+
* factory which must return event handlers synchronously for the HTTP upgrade to
|
|
47
|
+
* complete. Async work should go inside `onOpen`, `onMessage`, or `onClose`
|
|
48
|
+
* callbacks, which are properly awaited by the runtime.
|
|
49
|
+
*
|
|
29
50
|
* Use with router.get() to create a WebSocket endpoint:
|
|
30
51
|
*
|
|
31
52
|
* @example
|
|
32
53
|
* ```typescript
|
|
54
|
+
* // Basic synchronous usage
|
|
33
55
|
* import { createRouter, websocket } from '@agentuity/runtime';
|
|
34
56
|
*
|
|
35
57
|
* const router = createRouter();
|
|
@@ -51,7 +73,23 @@ export type WebSocketHandler<E extends Env = Env> = (
|
|
|
51
73
|
* }));
|
|
52
74
|
* ```
|
|
53
75
|
*
|
|
54
|
-
* @
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // Async work inside callbacks (correct pattern)
|
|
79
|
+
* router.get('/ws', websocket((c, ws) => {
|
|
80
|
+
* ws.onOpen(async () => {
|
|
81
|
+
* const user = await fetchUser(c.var.auth);
|
|
82
|
+
* ws.send(JSON.stringify({ welcome: user.name }));
|
|
83
|
+
* });
|
|
84
|
+
*
|
|
85
|
+
* ws.onMessage(async (event) => {
|
|
86
|
+
* const result = await processMessage(event.data);
|
|
87
|
+
* ws.send(JSON.stringify(result));
|
|
88
|
+
* });
|
|
89
|
+
* }));
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @param handler - Synchronous handler function receiving context and WebSocket connection
|
|
55
93
|
* @returns Hono middleware handler for WebSocket upgrade
|
|
56
94
|
*/
|
|
57
95
|
export function websocket<E extends Env = Env>(handler: WebSocketHandler<E>): MiddlewareHandler<E> {
|
|
@@ -64,6 +102,27 @@ export function websocket<E extends Env = Env>(handler: WebSocketHandler<E>): Mi
|
|
|
64
102
|
const asyncLocalStorage = getAgentAsyncLocalStorage();
|
|
65
103
|
const capturedContext = asyncLocalStorage.getStore();
|
|
66
104
|
|
|
105
|
+
// Create done promise for session lifecycle deferral, but ONLY for actual
|
|
106
|
+
// WebSocket upgrade requests. The factory runs unconditionally for every
|
|
107
|
+
// request hitting this route (Hono calls createEvents before attempting
|
|
108
|
+
// server.upgrade). For non-upgrade HTTP requests, setting the promise would
|
|
109
|
+
// cause the middleware to hang forever waiting for an onClose that never fires.
|
|
110
|
+
let resolveDone: (() => void) | undefined;
|
|
111
|
+
const isUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket';
|
|
112
|
+
|
|
113
|
+
if (isUpgrade) {
|
|
114
|
+
const donePromise = new Promise<void>((resolve) => {
|
|
115
|
+
resolveDone = resolve;
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Defensive: guard against future code adding rejection paths
|
|
119
|
+
donePromise.catch(() => {});
|
|
120
|
+
|
|
121
|
+
// Set on context so middleware defers session finalization until WS closes
|
|
122
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
123
|
+
(c as any).set(WS_DONE_PROMISE_KEY, donePromise);
|
|
124
|
+
}
|
|
125
|
+
|
|
67
126
|
const wsConnection: WebSocketConnection = {
|
|
68
127
|
onOpen: (h) => {
|
|
69
128
|
openHandler = h;
|
|
@@ -154,6 +213,10 @@ export function websocket<E extends Env = Env>(handler: WebSocketHandler<E>): Mi
|
|
|
154
213
|
}
|
|
155
214
|
} catch (err) {
|
|
156
215
|
c.var.logger?.error('WebSocket onClose error:', err);
|
|
216
|
+
} finally {
|
|
217
|
+
// Resolve the done promise to trigger session finalization
|
|
218
|
+
// This must fire even if the user's onClose handler throws
|
|
219
|
+
resolveDone?.();
|
|
157
220
|
}
|
|
158
221
|
},
|
|
159
222
|
};
|
package/src/middleware.ts
CHANGED
|
@@ -22,6 +22,7 @@ import * as runtimeConfig from './_config';
|
|
|
22
22
|
import { getSessionEventProvider } from './_services';
|
|
23
23
|
import { internal } from './logger/internal';
|
|
24
24
|
import { STREAM_DONE_PROMISE_KEY, IS_STREAMING_RESPONSE_KEY } from './handlers/sse';
|
|
25
|
+
import { WS_DONE_PROMISE_KEY } from './handlers/websocket';
|
|
25
26
|
import { loadBuildMetadata } from './_metadata';
|
|
26
27
|
|
|
27
28
|
const SESSION_HEADER = 'x-session-id';
|
|
@@ -347,6 +348,7 @@ export function createOtelMiddleware() {
|
|
|
347
348
|
const thread = await threadProvider.restore(c);
|
|
348
349
|
const session = await sessionProvider.restore(thread, sessionId);
|
|
349
350
|
const handler = new WaitUntilHandler(tracer);
|
|
351
|
+
const isWsUpgrade = c.req.header('upgrade')?.toLowerCase() === 'websocket';
|
|
350
352
|
|
|
351
353
|
c.set('sessionId', sessionId);
|
|
352
354
|
c.set('thread', thread);
|
|
@@ -357,7 +359,7 @@ export function createOtelMiddleware() {
|
|
|
357
359
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
358
360
|
(c as any).set('agentIds', agentIds);
|
|
359
361
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
360
|
-
(c as any).set('trigger', 'api');
|
|
362
|
+
(c as any).set('trigger', isWsUpgrade ? 'websocket' : 'api');
|
|
361
363
|
|
|
362
364
|
// Send session start event (so evalruns can reference this session)
|
|
363
365
|
// The provider decides whether to send based on available data (orgId, projectId, etc.)
|
|
@@ -412,7 +414,7 @@ export function createOtelMiddleware() {
|
|
|
412
414
|
projectId: projectId || '',
|
|
413
415
|
deploymentId: deploymentId || undefined,
|
|
414
416
|
devmode: isDevMode,
|
|
415
|
-
trigger: 'api',
|
|
417
|
+
trigger: isWsUpgrade ? 'websocket' : 'api',
|
|
416
418
|
routeId,
|
|
417
419
|
environment: runtimeConfig.getEnvironment(),
|
|
418
420
|
url: c.req.path,
|
|
@@ -505,6 +507,12 @@ export function createOtelMiddleware() {
|
|
|
505
507
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
506
508
|
const isStreaming = Boolean((c as any).get(IS_STREAMING_RESPONSE_KEY));
|
|
507
509
|
|
|
510
|
+
// Check if this is a WebSocket response that needs deferred finalization
|
|
511
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
512
|
+
const wsDone = (c as any).get(WS_DONE_PROMISE_KEY) as
|
|
513
|
+
| Promise<void>
|
|
514
|
+
| undefined;
|
|
515
|
+
|
|
508
516
|
// Check if Hono caught an error (c.error is set by Hono's error handler)
|
|
509
517
|
// or if the response status indicates an error
|
|
510
518
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -513,11 +521,12 @@ export function createOtelMiddleware() {
|
|
|
513
521
|
const isError = honoError || responseStatus >= 500;
|
|
514
522
|
|
|
515
523
|
internal.info(
|
|
516
|
-
'[request] %s %s - status: %d, streaming: %s, error: %s (session: %s)',
|
|
524
|
+
'[request] %s %s - status: %d, streaming: %s, websocket: %s, error: %s (session: %s)',
|
|
517
525
|
method,
|
|
518
526
|
url.pathname,
|
|
519
527
|
responseStatus,
|
|
520
528
|
isStreaming,
|
|
529
|
+
Boolean(wsDone),
|
|
521
530
|
isError,
|
|
522
531
|
sessionId
|
|
523
532
|
);
|
|
@@ -675,6 +684,135 @@ export function createOtelMiddleware() {
|
|
|
675
684
|
// it would wait for this very promise to complete.
|
|
676
685
|
}
|
|
677
686
|
});
|
|
687
|
+
} else if (wsDone) {
|
|
688
|
+
// WebSocket connection — defer finalization until onClose fires
|
|
689
|
+
internal.info(
|
|
690
|
+
'[request] %s %s - websocket response, deferring finalization until close (session: %s)',
|
|
691
|
+
method,
|
|
692
|
+
url.pathname,
|
|
693
|
+
sessionId
|
|
694
|
+
);
|
|
695
|
+
|
|
696
|
+
// For WebSocket, we end the span inside waitUntil after the connection closes
|
|
697
|
+
shouldEndSpanInFinally = false;
|
|
698
|
+
|
|
699
|
+
// Capture pending promises BEFORE adding finalization waitUntil to avoid deadlock
|
|
700
|
+
const pendingPromises = handler.getPendingSnapshot();
|
|
701
|
+
const hasPendingTasks = pendingPromises.length > 0;
|
|
702
|
+
|
|
703
|
+
if (hasPendingTasks) {
|
|
704
|
+
internal.info(
|
|
705
|
+
'[request] %s %s - %d pending waitUntil tasks to wait for after websocket close (session: %s)',
|
|
706
|
+
method,
|
|
707
|
+
url.pathname,
|
|
708
|
+
pendingPromises.length,
|
|
709
|
+
sessionId
|
|
710
|
+
);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
// Capture values needed for span attributes
|
|
714
|
+
const capturedResponseStatus = responseStatus;
|
|
715
|
+
const capturedErrorMessage = errorMessage;
|
|
716
|
+
|
|
717
|
+
// Use waitUntil to handle WebSocket close and finalization
|
|
718
|
+
handler.waitUntil(async () => {
|
|
719
|
+
let wsError: unknown = undefined;
|
|
720
|
+
|
|
721
|
+
try {
|
|
722
|
+
await wsDone;
|
|
723
|
+
internal.info(
|
|
724
|
+
'[request] %s %s - websocket closed (session: %s)',
|
|
725
|
+
method,
|
|
726
|
+
url.pathname,
|
|
727
|
+
sessionId
|
|
728
|
+
);
|
|
729
|
+
} catch (ex) {
|
|
730
|
+
wsError = ex;
|
|
731
|
+
internal.info(
|
|
732
|
+
'[request] %s %s - websocket closed with error: %s (session: %s)',
|
|
733
|
+
method,
|
|
734
|
+
url.pathname,
|
|
735
|
+
ex,
|
|
736
|
+
sessionId
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// Record duration now that WebSocket is closed
|
|
741
|
+
const wsDurationMs = performance.now() - requestStartTime;
|
|
742
|
+
const durationNs = Math.round(wsDurationMs * 1_000_000);
|
|
743
|
+
internal.info(
|
|
744
|
+
'[request] %s %s - recording websocket duration: %sms (session: %s)',
|
|
745
|
+
method,
|
|
746
|
+
url.pathname,
|
|
747
|
+
wsDurationMs.toFixed(2),
|
|
748
|
+
sessionId
|
|
749
|
+
);
|
|
750
|
+
|
|
751
|
+
// Determine final status
|
|
752
|
+
const finalStatus = wsError ? 500 : capturedResponseStatus;
|
|
753
|
+
const finalErrorMessage = wsError
|
|
754
|
+
? wsError instanceof Error
|
|
755
|
+
? (wsError.stack ?? wsError.message)
|
|
756
|
+
: String(wsError)
|
|
757
|
+
: capturedErrorMessage;
|
|
758
|
+
|
|
759
|
+
try {
|
|
760
|
+
// Wait for pending tasks captured BEFORE this waitUntil was added
|
|
761
|
+
if (hasPendingTasks) {
|
|
762
|
+
internal.info(
|
|
763
|
+
'[request] %s %s - waiting for %d pending waitUntil tasks (session: %s)',
|
|
764
|
+
method,
|
|
765
|
+
url.pathname,
|
|
766
|
+
pendingPromises.length,
|
|
767
|
+
sessionId
|
|
768
|
+
);
|
|
769
|
+
const logger = c.get('logger');
|
|
770
|
+
await handler.waitForPromises(pendingPromises, logger, sessionId);
|
|
771
|
+
internal.info(
|
|
772
|
+
'[request] %s %s - all waitUntil tasks complete (session: %s)',
|
|
773
|
+
method,
|
|
774
|
+
url.pathname,
|
|
775
|
+
sessionId
|
|
776
|
+
);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
// Finalize session after WebSocket closes
|
|
780
|
+
await finalizeSession(
|
|
781
|
+
finalStatus >= 500 ? finalStatus : undefined,
|
|
782
|
+
finalErrorMessage
|
|
783
|
+
);
|
|
784
|
+
internal.info(
|
|
785
|
+
'[request] %s %s - websocket session finalization complete (session: %s)',
|
|
786
|
+
method,
|
|
787
|
+
url.pathname,
|
|
788
|
+
sessionId
|
|
789
|
+
);
|
|
790
|
+
} finally {
|
|
791
|
+
// Set span attributes and end span AFTER all work is done
|
|
792
|
+
span.setAttribute('@agentuity/request.duration', durationNs);
|
|
793
|
+
span.setAttribute('http.status_code', finalStatus);
|
|
794
|
+
|
|
795
|
+
if (wsError) {
|
|
796
|
+
span.setStatus({
|
|
797
|
+
code: SpanStatusCode.ERROR,
|
|
798
|
+
message: finalErrorMessage ?? 'WebSocket ended with error',
|
|
799
|
+
});
|
|
800
|
+
if (wsError instanceof Error) {
|
|
801
|
+
span.recordException(wsError);
|
|
802
|
+
}
|
|
803
|
+
} else {
|
|
804
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
span.end();
|
|
808
|
+
internal.info(
|
|
809
|
+
'[request] %s %s - websocket span ended (session: %s)',
|
|
810
|
+
method,
|
|
811
|
+
url.pathname,
|
|
812
|
+
sessionId
|
|
813
|
+
);
|
|
814
|
+
}
|
|
815
|
+
});
|
|
678
816
|
} else {
|
|
679
817
|
// Non-streaming: record duration immediately
|
|
680
818
|
const durationNs = Math.round(handlerDurationMs * 1_000_000);
|