@agentuity/react 0.0.100 → 0.0.101
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/api.d.ts +1 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +1 -2
- package/dist/api.js.map +1 -1
- package/dist/client.d.ts +90 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +102 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +3 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +21 -5
- package/dist/context.js.map +1 -1
- package/dist/eventstream.d.ts +8 -22
- package/dist/eventstream.d.ts.map +1 -1
- package/dist/eventstream.js +62 -136
- package/dist/eventstream.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/memo.d.ts +2 -3
- package/dist/memo.d.ts.map +1 -1
- package/dist/memo.js +2 -20
- package/dist/memo.js.map +1 -1
- package/dist/websocket.d.ts +9 -22
- package/dist/websocket.d.ts.map +1 -1
- package/dist/websocket.js +80 -169
- package/dist/websocket.js.map +1 -1
- package/package.json +5 -2
- package/src/api.ts +1 -3
- package/src/client.ts +148 -0
- package/src/context.tsx +30 -6
- package/src/eventstream.ts +77 -177
- package/src/index.ts +43 -3
- package/src/memo.ts +2 -18
- package/src/websocket.ts +105 -225
- package/dist/env.d.ts +0 -2
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -10
- package/dist/env.js.map +0 -1
- package/dist/reconnect.d.ts +0 -22
- package/dist/reconnect.d.ts.map +0 -1
- package/dist/reconnect.js +0 -47
- package/dist/reconnect.js.map +0 -1
- package/dist/serialization.d.ts +0 -6
- package/dist/serialization.d.ts.map +0 -1
- package/dist/serialization.js +0 -16
- package/dist/serialization.js.map +0 -1
- package/dist/types.d.ts +0 -19
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/url.d.ts +0 -3
- package/dist/url.d.ts.map +0 -1
- package/dist/url.js +0 -24
- package/dist/url.js.map +0 -1
- package/src/env.ts +0 -9
- package/src/reconnect.ts +0 -73
- package/src/serialization.ts +0 -14
- package/src/types.ts +0 -29
- package/src/url.ts +0 -32
package/dist/eventstream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eventstream.js","sourceRoot":"","sources":["../src/eventstream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtF,OAAO,
|
|
1
|
+
{"version":3,"file":"eventstream.js","sourceRoot":"","sources":["../src/eventstream.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { AgentuityContext, AgentuityProvider, useAgentuity, useAuth, type ContextProviderArgs, type AgentuityContextValue, type AgentuityHookValue, type AuthContextValue, } from './context';
|
|
2
|
+
export { createClient, createAPIClient, setGlobalBaseUrl, getGlobalBaseUrl, setGlobalAuthHeader, getGlobalAuthHeader, type RPCRouteRegistry, } from './client';
|
|
2
3
|
export { useWebsocket, type WebSocketRouteKey, type WebSocketRouteInput, type WebSocketRouteOutput, type WebsocketOptions, } from './websocket';
|
|
3
4
|
export { useEventStream, type SSERouteKey, type SSERouteOutput, type EventStreamOptions, } from './eventstream';
|
|
4
|
-
export { type RouteRegistry, type WebSocketRouteRegistry, type SSERouteRegistry } from './types';
|
|
5
5
|
export { useAPI, type RouteKey, type ExtractMethod, type RouteIsStream, type RouteInput, type RouteOutput, type UseAPIOptions, type UseAPIResult, } from './api';
|
|
6
|
-
export {
|
|
7
|
-
export { buildUrl, defaultBaseUrl } from '
|
|
6
|
+
export { useJsonMemo } from './memo';
|
|
7
|
+
export { buildUrl, defaultBaseUrl, deserializeData, createReconnectManager, jsonEqual, getProcessEnv, WebSocketManager, EventStreamManager, type RouteRegistry, type WebSocketRouteRegistry, type SSERouteRegistry, type ReconnectOptions, type ReconnectManager, type WebSocketMessageHandler, type WebSocketCallbacks, type WebSocketManagerOptions, type WebSocketManagerState, type EventStreamMessageHandler, type EventStreamCallbacks, type EventStreamManagerOptions, type EventStreamManagerState, type Client, type ClientOptions, type RouteEndpoint, type WebSocketClient, type EventStreamClient, type StreamClient, type EventHandler, } from '@agentuity/frontend';
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,OAAO,EACP,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACN,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,GACrB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,kBAAkB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,MAAM,EACN,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,GACjB,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,EACN,QAAQ,EACR,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAE5B,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,GACjB,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { AgentuityContext, AgentuityProvider, useAgentuity, useAuth, } from './context';
|
|
2
|
+
export { createClient, createAPIClient, setGlobalBaseUrl, getGlobalBaseUrl, setGlobalAuthHeader, getGlobalAuthHeader, } from './client';
|
|
2
3
|
export { useWebsocket, } from './websocket';
|
|
3
4
|
export { useEventStream, } from './eventstream';
|
|
4
5
|
export { useAPI, } from './api';
|
|
5
|
-
export {
|
|
6
|
-
export
|
|
6
|
+
export { useJsonMemo } from './memo';
|
|
7
|
+
// Re-export web utilities for convenience
|
|
8
|
+
export { buildUrl, defaultBaseUrl, deserializeData, createReconnectManager, jsonEqual, getProcessEnv, WebSocketManager, EventStreamManager, } from '@agentuity/frontend';
|
|
7
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,OAAO,GAKP,MAAM,WAAW,CAAC;AACnB,OAAO,EACN,YAAY,GAKZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,cAAc,GAId,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,OAAO,GAKP,MAAM,WAAW,CAAC;AACnB,OAAO,EACN,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GAEnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,YAAY,GAKZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,cAAc,GAId,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,MAAM,GAQN,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,0CAA0C;AAC1C,OAAO,EACN,QAAQ,EACR,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GAsBlB,MAAM,qBAAqB,CAAC"}
|
package/dist/memo.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* Hook to memoize a value based on JSON equality instead of reference equality.
|
|
3
|
+
* Prevents unnecessary re-renders when data hasn't actually changed.
|
|
4
4
|
*/
|
|
5
|
-
export declare function jsonEqual<T>(a: T, b: T): boolean;
|
|
6
5
|
export declare function useJsonMemo<T>(value: T): T;
|
|
7
6
|
//# sourceMappingURL=memo.d.ts.map
|
package/dist/memo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memo.d.ts","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAQ1C"}
|
package/dist/memo.js
CHANGED
|
@@ -1,27 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* Compares stringified JSON to avoid deep equality overhead.
|
|
4
|
-
*/
|
|
5
|
-
export function jsonEqual(a, b) {
|
|
6
|
-
if (a === b)
|
|
7
|
-
return true;
|
|
8
|
-
if (a === undefined || b === undefined)
|
|
9
|
-
return false;
|
|
10
|
-
if (a === null || b === null)
|
|
11
|
-
return a === b;
|
|
12
|
-
try {
|
|
13
|
-
return JSON.stringify(a) === JSON.stringify(b);
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
// Fallback for non-serializable values
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
1
|
+
import { useRef } from 'react';
|
|
2
|
+
import { jsonEqual } from '@agentuity/frontend';
|
|
20
3
|
/**
|
|
21
4
|
* Hook to memoize a value based on JSON equality instead of reference equality.
|
|
22
5
|
* Prevents unnecessary re-renders when data hasn't actually changed.
|
|
23
6
|
*/
|
|
24
|
-
import { useRef } from 'react';
|
|
25
7
|
export function useJsonMemo(value) {
|
|
26
8
|
const ref = useRef(value);
|
|
27
9
|
if (!jsonEqual(ref.current, value)) {
|
package/dist/memo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../src/memo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAI,KAAQ;IACtC,MAAM,GAAG,GAAG,MAAM,CAAI,KAAK,CAAC,CAAC;IAE7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC;AACpB,CAAC"}
|
package/dist/websocket.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { InferInput, InferOutput } from '@agentuity/core';
|
|
2
|
-
import type
|
|
3
|
-
type onMessageHandler<T = unknown> = (data: T) => void;
|
|
2
|
+
import { type WebSocketRouteRegistry } from '@agentuity/frontend';
|
|
4
3
|
/**
|
|
5
4
|
* Extract WebSocket route keys (e.g., '/ws', '/chat')
|
|
6
5
|
*/
|
|
@@ -40,24 +39,6 @@ export interface WebsocketOptions {
|
|
|
40
39
|
*/
|
|
41
40
|
maxMessages?: number;
|
|
42
41
|
}
|
|
43
|
-
interface WebsocketResponseInternal<TInput, TOutput> {
|
|
44
|
-
/** Whether WebSocket is currently connected */
|
|
45
|
-
isConnected: boolean;
|
|
46
|
-
/** Error if connection or message failed */
|
|
47
|
-
error: Error | null;
|
|
48
|
-
/** Whether an error has occurred */
|
|
49
|
-
isError: boolean;
|
|
50
|
-
/** Send data through the WebSocket */
|
|
51
|
-
send: (data: TInput) => void;
|
|
52
|
-
/** Set handler for incoming messages */
|
|
53
|
-
setHandler: (handler: onMessageHandler<TOutput>) => void;
|
|
54
|
-
/** WebSocket connection state (CONNECTING=0, OPEN=1, CLOSING=2, CLOSED=3) */
|
|
55
|
-
readyState: WebSocket['readyState'];
|
|
56
|
-
/** Close the WebSocket connection */
|
|
57
|
-
close: () => void;
|
|
58
|
-
/** Reset state to initial values */
|
|
59
|
-
reset: () => void;
|
|
60
|
-
}
|
|
61
42
|
/**
|
|
62
43
|
* Type-safe WebSocket hook for connecting to WebSocket routes.
|
|
63
44
|
*
|
|
@@ -92,10 +73,16 @@ interface WebsocketResponseInternal<TInput, TOutput> {
|
|
|
92
73
|
* clearMessages();
|
|
93
74
|
* ```
|
|
94
75
|
*/
|
|
95
|
-
export declare function useWebsocket<TRoute extends WebSocketRouteKey>(route: TRoute, options?: WebsocketOptions):
|
|
76
|
+
export declare function useWebsocket<TRoute extends WebSocketRouteKey>(route: TRoute, options?: WebsocketOptions): {
|
|
77
|
+
isConnected: boolean;
|
|
78
|
+
close: () => void;
|
|
96
79
|
data?: WebSocketRouteOutput<TRoute>;
|
|
97
80
|
messages: WebSocketRouteOutput<TRoute>[];
|
|
98
81
|
clearMessages: () => void;
|
|
82
|
+
error: Error | null;
|
|
83
|
+
isError: boolean;
|
|
84
|
+
reset: () => void;
|
|
85
|
+
send: (data: WebSocketRouteInput<TRoute>) => void;
|
|
86
|
+
readyState: WebSocket['readyState'];
|
|
99
87
|
};
|
|
100
|
-
export {};
|
|
101
88
|
//# sourceMappingURL=websocket.d.ts.map
|
package/dist/websocket.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAA8B,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG9F;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,sBAAsB,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,MAAM,SAAS,iBAAiB,IAC/D,MAAM,SAAS,MAAM,sBAAsB,GACxC,sBAAsB,CAAC,MAAM,CAAC,SAAS;IAAE,WAAW,EAAE,MAAM,OAAO,CAAA;CAAE,GACpE,OAAO,SAAS,SAAS,GAAG,KAAK,GAChC,KAAK,GACL,UAAU,CAAC,OAAO,CAAC,GACpB,KAAK,GACN,KAAK,CAAC;AAEV;;GAEG;AACH,MAAM,MAAM,oBAAoB,CAAC,MAAM,SAAS,iBAAiB,IAChE,MAAM,SAAS,MAAM,sBAAsB,GACxC,sBAAsB,CAAC,MAAM,CAAC,SAAS;IAAE,YAAY,EAAE,MAAM,OAAO,CAAA;CAAE,GACrE,OAAO,SAAS,SAAS,GAAG,KAAK,GAChC,IAAI,GACJ,WAAW,CAAC,OAAO,CAAC,GACrB,IAAI,GACL,IAAI,CAAC;AAET;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,YAAY,CAAC,MAAM,SAAS,iBAAiB,EAC5D,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,GACxB;IACF,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;IACzC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;CACpC,CAiIA"}
|
package/dist/websocket.js
CHANGED
|
@@ -1,171 +1,6 @@
|
|
|
1
1
|
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { buildUrl, WebSocketManager } from '@agentuity/frontend';
|
|
2
3
|
import { AgentuityContext } from './context';
|
|
3
|
-
import { buildUrl } from './url';
|
|
4
|
-
import { deserializeData } from './serialization';
|
|
5
|
-
import { createReconnectManager } from './reconnect';
|
|
6
|
-
const serializeWSData = (data) => {
|
|
7
|
-
if (typeof data === 'string') {
|
|
8
|
-
return data;
|
|
9
|
-
}
|
|
10
|
-
if (typeof data === 'object') {
|
|
11
|
-
if (data instanceof ArrayBuffer || ArrayBuffer.isView(data) || data instanceof Blob) {
|
|
12
|
-
return data;
|
|
13
|
-
}
|
|
14
|
-
return JSON.stringify(data);
|
|
15
|
-
}
|
|
16
|
-
throw new Error('unsupported data type for websocket: ' + typeof data);
|
|
17
|
-
};
|
|
18
|
-
const useWebsocketInternal = (path, options) => {
|
|
19
|
-
const context = useContext(AgentuityContext);
|
|
20
|
-
if (!context) {
|
|
21
|
-
throw new Error('useWebsocket must be used within a AgentuityProvider');
|
|
22
|
-
}
|
|
23
|
-
const manualClose = useRef(false);
|
|
24
|
-
const wsRef = useRef(undefined);
|
|
25
|
-
const pending = useRef([]);
|
|
26
|
-
const queued = useRef([]);
|
|
27
|
-
const handler = useRef(undefined);
|
|
28
|
-
const reconnectManagerRef = useRef(undefined);
|
|
29
|
-
const [error, setError] = useState(null);
|
|
30
|
-
const [isError, setIsError] = useState(false);
|
|
31
|
-
const [isConnected, setIsConnected] = useState(false);
|
|
32
|
-
const wsUrl = useMemo(() => {
|
|
33
|
-
const base = context.baseUrl;
|
|
34
|
-
const wsBase = base.replace(/^http(s?):/, 'ws$1:');
|
|
35
|
-
// Add auth token to query params if present
|
|
36
|
-
// (WebSocket doesn't support custom headers, so we pass via query string)
|
|
37
|
-
let queryParams = options?.query;
|
|
38
|
-
if (context.authHeader) {
|
|
39
|
-
const token = context.authHeader.replace(/^Bearer\s+/i, '');
|
|
40
|
-
const authQuery = new URLSearchParams({ token });
|
|
41
|
-
if (queryParams) {
|
|
42
|
-
queryParams = new URLSearchParams([...queryParams, ...authQuery]);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
queryParams = authQuery;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return buildUrl(wsBase, path, options?.subpath, queryParams);
|
|
49
|
-
}, [context.baseUrl, context.authHeader, path, options?.subpath, options?.query?.toString()]);
|
|
50
|
-
const connect = useCallback(() => {
|
|
51
|
-
if (manualClose.current)
|
|
52
|
-
return;
|
|
53
|
-
wsRef.current = new WebSocket(wsUrl);
|
|
54
|
-
wsRef.current.onopen = () => {
|
|
55
|
-
reconnectManagerRef.current?.recordSuccess();
|
|
56
|
-
setIsConnected(true);
|
|
57
|
-
setError(null);
|
|
58
|
-
setIsError(false);
|
|
59
|
-
if (queued.current.length > 0) {
|
|
60
|
-
queued.current.forEach((msg) => wsRef.current.send(serializeWSData(msg)));
|
|
61
|
-
queued.current = [];
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
wsRef.current.onerror = () => {
|
|
65
|
-
setError(new Error('WebSocket error'));
|
|
66
|
-
setIsError(true);
|
|
67
|
-
};
|
|
68
|
-
wsRef.current.onclose = (evt) => {
|
|
69
|
-
wsRef.current = undefined;
|
|
70
|
-
setIsConnected(false);
|
|
71
|
-
if (manualClose.current) {
|
|
72
|
-
queued.current = [];
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (evt.code !== 1000) {
|
|
76
|
-
setError(new Error(`WebSocket closed: ${evt.code} ${evt.reason || ''}`));
|
|
77
|
-
setIsError(true);
|
|
78
|
-
}
|
|
79
|
-
reconnectManagerRef.current?.recordFailure();
|
|
80
|
-
};
|
|
81
|
-
wsRef.current.onmessage = (event) => {
|
|
82
|
-
const payload = deserializeData(event.data);
|
|
83
|
-
if (handler.current) {
|
|
84
|
-
handler.current(payload);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
pending.current.push(payload);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
}, [wsUrl]);
|
|
91
|
-
useEffect(() => {
|
|
92
|
-
reconnectManagerRef.current = createReconnectManager({
|
|
93
|
-
onReconnect: connect,
|
|
94
|
-
threshold: 0,
|
|
95
|
-
baseDelay: 500,
|
|
96
|
-
factor: 2,
|
|
97
|
-
maxDelay: 30000,
|
|
98
|
-
jitter: 500,
|
|
99
|
-
enabled: () => !manualClose.current,
|
|
100
|
-
});
|
|
101
|
-
return () => reconnectManagerRef.current?.dispose();
|
|
102
|
-
}, [connect]);
|
|
103
|
-
const cleanup = useCallback(() => {
|
|
104
|
-
manualClose.current = true;
|
|
105
|
-
reconnectManagerRef.current?.dispose();
|
|
106
|
-
const ws = wsRef.current;
|
|
107
|
-
if (ws) {
|
|
108
|
-
ws.onopen = null;
|
|
109
|
-
ws.onerror = null;
|
|
110
|
-
ws.onclose = null;
|
|
111
|
-
ws.onmessage = null;
|
|
112
|
-
ws.close();
|
|
113
|
-
}
|
|
114
|
-
wsRef.current = undefined;
|
|
115
|
-
handler.current = undefined;
|
|
116
|
-
pending.current = [];
|
|
117
|
-
queued.current = [];
|
|
118
|
-
setIsConnected(false);
|
|
119
|
-
}, []);
|
|
120
|
-
useEffect(() => {
|
|
121
|
-
manualClose.current = false;
|
|
122
|
-
connect();
|
|
123
|
-
return () => {
|
|
124
|
-
cleanup();
|
|
125
|
-
};
|
|
126
|
-
}, [connect, cleanup]);
|
|
127
|
-
useEffect(() => {
|
|
128
|
-
if (options?.signal) {
|
|
129
|
-
const listener = () => {
|
|
130
|
-
cleanup();
|
|
131
|
-
};
|
|
132
|
-
options.signal.addEventListener('abort', listener);
|
|
133
|
-
return () => {
|
|
134
|
-
options.signal?.removeEventListener('abort', listener);
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
}, [options?.signal, cleanup]);
|
|
138
|
-
const reset = () => {
|
|
139
|
-
setError(null);
|
|
140
|
-
setIsError(false);
|
|
141
|
-
};
|
|
142
|
-
const send = (data) => {
|
|
143
|
-
if (wsRef.current?.readyState === WebSocket.OPEN) {
|
|
144
|
-
wsRef.current.send(serializeWSData(data));
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
queued.current.push(data);
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
const setHandler = useCallback((h) => {
|
|
151
|
-
handler.current = h;
|
|
152
|
-
pending.current.forEach(h);
|
|
153
|
-
pending.current = [];
|
|
154
|
-
}, []);
|
|
155
|
-
const close = () => {
|
|
156
|
-
cleanup();
|
|
157
|
-
};
|
|
158
|
-
return {
|
|
159
|
-
isConnected,
|
|
160
|
-
close,
|
|
161
|
-
error,
|
|
162
|
-
isError,
|
|
163
|
-
send,
|
|
164
|
-
setHandler,
|
|
165
|
-
reset,
|
|
166
|
-
readyState: wsRef.current?.readyState ?? WebSocket.CLOSED,
|
|
167
|
-
};
|
|
168
|
-
};
|
|
169
4
|
/**
|
|
170
5
|
* Type-safe WebSocket hook for connecting to WebSocket routes.
|
|
171
6
|
*
|
|
@@ -201,11 +36,59 @@ const useWebsocketInternal = (path, options) => {
|
|
|
201
36
|
* ```
|
|
202
37
|
*/
|
|
203
38
|
export function useWebsocket(route, options) {
|
|
39
|
+
const context = useContext(AgentuityContext);
|
|
40
|
+
if (!context) {
|
|
41
|
+
throw new Error('useWebsocket must be used within a AgentuityProvider');
|
|
42
|
+
}
|
|
43
|
+
const managerRef = useRef(null);
|
|
204
44
|
const [data, setData] = useState();
|
|
205
45
|
const [messages, setMessages] = useState([]);
|
|
206
|
-
const
|
|
46
|
+
const [error, setError] = useState(null);
|
|
47
|
+
const [isError, setIsError] = useState(false);
|
|
48
|
+
const [isConnected, setIsConnected] = useState(false);
|
|
49
|
+
const [readyState, setReadyState] = useState(WebSocket.CLOSED);
|
|
50
|
+
// Build WebSocket URL
|
|
51
|
+
const wsUrl = useMemo(() => {
|
|
52
|
+
const base = context.baseUrl;
|
|
53
|
+
const wsBase = base.replace(/^http(s?):/, 'ws$1:');
|
|
54
|
+
// Add auth token to query params if present
|
|
55
|
+
// (WebSocket doesn't support custom headers, so we pass via query string)
|
|
56
|
+
let queryParams = options?.query;
|
|
57
|
+
if (context.authHeader) {
|
|
58
|
+
const token = context.authHeader.replace(/^Bearer\s+/i, '');
|
|
59
|
+
const authQuery = new URLSearchParams({ token });
|
|
60
|
+
if (queryParams) {
|
|
61
|
+
queryParams = new URLSearchParams([...queryParams, ...authQuery]);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
queryParams = authQuery;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return buildUrl(wsBase, route, options?.subpath, queryParams);
|
|
68
|
+
}, [context.baseUrl, context.authHeader, route, options?.subpath, options?.query?.toString()]);
|
|
69
|
+
// Initialize manager and connect
|
|
207
70
|
useEffect(() => {
|
|
208
|
-
|
|
71
|
+
const manager = new WebSocketManager({
|
|
72
|
+
url: wsUrl,
|
|
73
|
+
callbacks: {
|
|
74
|
+
onConnect: () => {
|
|
75
|
+
setIsConnected(true);
|
|
76
|
+
setError(null);
|
|
77
|
+
setIsError(false);
|
|
78
|
+
setReadyState(WebSocket.OPEN);
|
|
79
|
+
},
|
|
80
|
+
onDisconnect: () => {
|
|
81
|
+
setIsConnected(false);
|
|
82
|
+
setReadyState(WebSocket.CLOSED);
|
|
83
|
+
},
|
|
84
|
+
onError: (err) => {
|
|
85
|
+
setError(err);
|
|
86
|
+
setIsError(true);
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// Set message handler
|
|
91
|
+
manager.setMessageHandler((message) => {
|
|
209
92
|
setData(message);
|
|
210
93
|
setMessages((prev) => {
|
|
211
94
|
const newMessages = [...prev, message];
|
|
@@ -216,7 +99,35 @@ export function useWebsocket(route, options) {
|
|
|
216
99
|
return newMessages;
|
|
217
100
|
});
|
|
218
101
|
});
|
|
219
|
-
|
|
102
|
+
manager.connect();
|
|
103
|
+
managerRef.current = manager;
|
|
104
|
+
return () => {
|
|
105
|
+
manager.dispose();
|
|
106
|
+
managerRef.current = null;
|
|
107
|
+
};
|
|
108
|
+
}, [wsUrl, options?.maxMessages]);
|
|
109
|
+
// Handle abort signal
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
if (options?.signal) {
|
|
112
|
+
const listener = () => {
|
|
113
|
+
managerRef.current?.close();
|
|
114
|
+
};
|
|
115
|
+
options.signal.addEventListener('abort', listener);
|
|
116
|
+
return () => {
|
|
117
|
+
options.signal?.removeEventListener('abort', listener);
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}, [options?.signal]);
|
|
121
|
+
const reset = useCallback(() => {
|
|
122
|
+
setError(null);
|
|
123
|
+
setIsError(false);
|
|
124
|
+
}, []);
|
|
125
|
+
const send = useCallback((sendData) => {
|
|
126
|
+
managerRef.current?.send(sendData);
|
|
127
|
+
}, []);
|
|
128
|
+
const close = useCallback(() => {
|
|
129
|
+
managerRef.current?.close();
|
|
130
|
+
}, []);
|
|
220
131
|
const clearMessages = useCallback(() => {
|
|
221
132
|
setMessages([]);
|
|
222
133
|
}, []);
|
package/dist/websocket.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.101",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -26,9 +26,12 @@
|
|
|
26
26
|
"prepublishOnly": "bun run clean && bun run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agentuity/core": "0.0.
|
|
29
|
+
"@agentuity/core": "0.0.101",
|
|
30
|
+
"@agentuity/frontend": "0.0.101"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
33
|
+
"@agentuity/schema": "0.0.101",
|
|
34
|
+
"@agentuity/test-utils": "0.0.101",
|
|
32
35
|
"@types/bun": "latest",
|
|
33
36
|
"bun-types": "latest",
|
|
34
37
|
"typescript": "^5.9.0"
|
package/src/api.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
import { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import type { InferInput, InferOutput } from '@agentuity/core';
|
|
4
|
+
import { deserializeData, buildUrl, type RouteRegistry } from '@agentuity/frontend';
|
|
4
5
|
import { AgentuityContext } from './context';
|
|
5
|
-
import { deserializeData } from './serialization';
|
|
6
|
-
import { buildUrl } from './url';
|
|
7
|
-
import type { RouteRegistry } from './types';
|
|
8
6
|
|
|
9
7
|
/**
|
|
10
8
|
* Extract route keys from RouteRegistry (e.g., 'GET /users', 'POST /users')
|