@agentuity/react 0.0.51 → 0.0.52
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/context.js +10 -0
- package/dist/context.js.map +1 -0
- package/dist/env.js +7 -0
- package/dist/env.js.map +1 -0
- package/dist/eventstream.js +142 -0
- package/dist/eventstream.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/reconnect.js +47 -0
- package/dist/reconnect.js.map +1 -0
- package/dist/run.js +68 -0
- package/dist/run.js.map +1 -0
- package/dist/serialization.js +18 -0
- package/dist/serialization.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/url.js +18 -0
- package/dist/url.js.map +1 -0
- package/dist/websocket.js +167 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +4 -4
package/dist/context.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext } from 'react';
|
|
3
|
+
import { defaultBaseUrl } from './url';
|
|
4
|
+
export const AgentuityContext = createContext({
|
|
5
|
+
baseUrl: '',
|
|
6
|
+
});
|
|
7
|
+
export const AgentuityProvider = ({ baseUrl, children }) => {
|
|
8
|
+
return (_jsx(AgentuityContext.Provider, { value: { baseUrl: baseUrl || defaultBaseUrl }, children: children }));
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAmC,MAAM,OAAO,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAOvC,MAAM,CAAC,MAAM,gBAAgB,GAAiC,aAAa,CAAsB;IAChG,OAAO,EAAE,EAAE;CACX,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAuB,EAAgB,EAAE;IAC7F,OAAO,CACN,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,YACtE,QAAQ,GACkB,CAC5B,CAAC;AACH,CAAC,CAAC"}
|
package/dist/env.js
ADDED
package/dist/env.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAsB,EAAE;IAChE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { AgentuityContext } from './context';
|
|
3
|
+
import { buildUrl } from './url';
|
|
4
|
+
import { deserializeData } from './serialization';
|
|
5
|
+
import { createReconnectManager } from './reconnect';
|
|
6
|
+
export const useEventStream = (path, options) => {
|
|
7
|
+
const context = useContext(AgentuityContext);
|
|
8
|
+
if (!context) {
|
|
9
|
+
throw new Error('useEventStream must be used within a AgentuityProvider');
|
|
10
|
+
}
|
|
11
|
+
const manualClose = useRef(false);
|
|
12
|
+
const esRef = useRef(undefined);
|
|
13
|
+
const pending = useRef([]);
|
|
14
|
+
const handler = useRef(undefined);
|
|
15
|
+
const reconnectManagerRef = useRef(undefined);
|
|
16
|
+
const [data, setData] = useState();
|
|
17
|
+
const [error, setError] = useState(null);
|
|
18
|
+
const [connected, setConnected] = useState(false);
|
|
19
|
+
const esUrl = useMemo(() => buildUrl(context.baseUrl, path, options?.subpath, options?.query), [context.baseUrl, path, options?.subpath, options?.query?.toString()]);
|
|
20
|
+
const connect = useCallback(() => {
|
|
21
|
+
if (manualClose.current)
|
|
22
|
+
return;
|
|
23
|
+
esRef.current = new EventSource(esUrl);
|
|
24
|
+
let firstMessageReceived = false;
|
|
25
|
+
esRef.current.onopen = () => {
|
|
26
|
+
reconnectManagerRef.current?.recordSuccess();
|
|
27
|
+
setConnected(true);
|
|
28
|
+
setError(null);
|
|
29
|
+
};
|
|
30
|
+
esRef.current.onerror = () => {
|
|
31
|
+
setError(new Error('EventStream error'));
|
|
32
|
+
setConnected(false);
|
|
33
|
+
if (manualClose.current) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const result = reconnectManagerRef.current?.recordFailure();
|
|
37
|
+
if (result?.scheduled) {
|
|
38
|
+
const es = esRef.current;
|
|
39
|
+
if (es) {
|
|
40
|
+
es.onopen = null;
|
|
41
|
+
es.onerror = null;
|
|
42
|
+
es.onmessage = null;
|
|
43
|
+
es.close();
|
|
44
|
+
}
|
|
45
|
+
esRef.current = undefined;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
esRef.current.onmessage = (event) => {
|
|
49
|
+
if (!firstMessageReceived) {
|
|
50
|
+
reconnectManagerRef.current?.recordSuccess();
|
|
51
|
+
firstMessageReceived = true;
|
|
52
|
+
}
|
|
53
|
+
const payload = deserializeData(event.data);
|
|
54
|
+
setData(payload);
|
|
55
|
+
if (handler.current) {
|
|
56
|
+
handler.current(payload);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
pending.current.push(payload);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
}, [esUrl]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
reconnectManagerRef.current = createReconnectManager({
|
|
65
|
+
onReconnect: connect,
|
|
66
|
+
threshold: 3,
|
|
67
|
+
baseDelay: 500,
|
|
68
|
+
factor: 2,
|
|
69
|
+
maxDelay: 30000,
|
|
70
|
+
jitter: 250,
|
|
71
|
+
enabled: () => !manualClose.current,
|
|
72
|
+
});
|
|
73
|
+
return () => reconnectManagerRef.current?.dispose();
|
|
74
|
+
}, [connect]);
|
|
75
|
+
const cleanup = useCallback(() => {
|
|
76
|
+
manualClose.current = true;
|
|
77
|
+
reconnectManagerRef.current?.dispose();
|
|
78
|
+
const es = esRef.current;
|
|
79
|
+
if (es) {
|
|
80
|
+
es.onopen = null;
|
|
81
|
+
es.onerror = null;
|
|
82
|
+
es.onmessage = null;
|
|
83
|
+
es.close();
|
|
84
|
+
}
|
|
85
|
+
esRef.current = undefined;
|
|
86
|
+
handler.current = undefined;
|
|
87
|
+
pending.current = [];
|
|
88
|
+
setConnected(false);
|
|
89
|
+
}, []);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
manualClose.current = false;
|
|
92
|
+
connect();
|
|
93
|
+
return () => {
|
|
94
|
+
cleanup();
|
|
95
|
+
};
|
|
96
|
+
}, [connect, cleanup]);
|
|
97
|
+
useEffect(() => {
|
|
98
|
+
if (options?.signal) {
|
|
99
|
+
const listener = () => {
|
|
100
|
+
cleanup();
|
|
101
|
+
};
|
|
102
|
+
options.signal.addEventListener('abort', listener);
|
|
103
|
+
return () => {
|
|
104
|
+
options.signal?.removeEventListener('abort', listener);
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}, [options?.signal, cleanup]);
|
|
108
|
+
const reset = () => setError(null);
|
|
109
|
+
const setHandler = useCallback((h) => {
|
|
110
|
+
handler.current = h;
|
|
111
|
+
pending.current.forEach(h);
|
|
112
|
+
pending.current = [];
|
|
113
|
+
}, []);
|
|
114
|
+
const close = () => {
|
|
115
|
+
cleanup();
|
|
116
|
+
};
|
|
117
|
+
return {
|
|
118
|
+
connected,
|
|
119
|
+
close,
|
|
120
|
+
data,
|
|
121
|
+
error,
|
|
122
|
+
setHandler,
|
|
123
|
+
reset,
|
|
124
|
+
readyState: esRef.current?.readyState ?? EventSource.CLOSED,
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
export const useAgentEventStream = (agent, options) => {
|
|
128
|
+
const [data, setData] = useState();
|
|
129
|
+
const { connected, close, setHandler, readyState, error, reset } = useEventStream(`/agent/${agent}`, options);
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
setHandler(setData);
|
|
132
|
+
}, [agent, setHandler]);
|
|
133
|
+
return {
|
|
134
|
+
connected,
|
|
135
|
+
close,
|
|
136
|
+
data,
|
|
137
|
+
error,
|
|
138
|
+
reset,
|
|
139
|
+
readyState,
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=eventstream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventstream.js","sourceRoot":"","sources":["../src/eventstream.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export function createReconnectManager(opts) {
|
|
2
|
+
let attempts = 0;
|
|
3
|
+
let timer = null;
|
|
4
|
+
const cancel = () => {
|
|
5
|
+
if (timer) {
|
|
6
|
+
clearTimeout(timer);
|
|
7
|
+
timer = null;
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
const reset = () => {
|
|
11
|
+
attempts = 0;
|
|
12
|
+
cancel();
|
|
13
|
+
};
|
|
14
|
+
const recordSuccess = () => reset();
|
|
15
|
+
const computeDelay = (attemptAfterThreshold) => {
|
|
16
|
+
const base = opts.baseDelay ?? 500;
|
|
17
|
+
const factor = opts.factor ?? 2;
|
|
18
|
+
const max = opts.maxDelay ?? 30000;
|
|
19
|
+
const jitterMax = opts.jitter ?? 250;
|
|
20
|
+
const backoff = Math.min(base * Math.pow(factor, attemptAfterThreshold), max);
|
|
21
|
+
const jitter = jitterMax > 0 ? Math.random() * jitterMax : 0;
|
|
22
|
+
return backoff + jitter;
|
|
23
|
+
};
|
|
24
|
+
const recordFailure = () => {
|
|
25
|
+
attempts += 1;
|
|
26
|
+
const threshold = opts.threshold ?? 0;
|
|
27
|
+
if (opts.enabled && !opts.enabled()) {
|
|
28
|
+
return { scheduled: false, delay: null };
|
|
29
|
+
}
|
|
30
|
+
if (attempts - threshold >= 0) {
|
|
31
|
+
const after = Math.max(0, attempts - threshold);
|
|
32
|
+
const delay = computeDelay(after);
|
|
33
|
+
cancel();
|
|
34
|
+
timer = setTimeout(() => {
|
|
35
|
+
if (opts.enabled && !opts.enabled())
|
|
36
|
+
return;
|
|
37
|
+
opts.onReconnect();
|
|
38
|
+
}, delay);
|
|
39
|
+
return { scheduled: true, delay };
|
|
40
|
+
}
|
|
41
|
+
return { scheduled: false, delay: null };
|
|
42
|
+
};
|
|
43
|
+
const dispose = () => cancel();
|
|
44
|
+
const getAttempts = () => attempts;
|
|
45
|
+
return { recordFailure, recordSuccess, cancel, reset, dispose, getAttempts };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=reconnect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconnect.js","sourceRoot":"","sources":["../src/reconnect.ts"],"names":[],"mappings":"AAmBA,MAAM,UAAU,sBAAsB,CAAC,IAAsB;IAC5D,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,IAAI,KAAK,GAAyC,IAAI,CAAC;IAEvD,MAAM,MAAM,GAAG,GAAG,EAAE;QACnB,IAAI,KAAK,EAAE,CAAC;YACX,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC;QACd,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAClB,QAAQ,GAAG,CAAC,CAAC;QACb,MAAM,EAAE,CAAC;IACV,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;IAEpC,MAAM,YAAY,GAAG,CAAC,qBAA6B,EAAE,EAAE;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,OAAO,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,QAAQ,IAAI,CAAC,CAAC;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACrC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC1C,CAAC;QAED,IAAI,QAAQ,GAAG,SAAS,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,CAAC;YACT,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;oBAAE,OAAO;gBAC5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;IAE/B,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;IAEnC,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAC9E,CAAC"}
|
package/dist/run.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { useContext, useState } from 'react';
|
|
2
|
+
import { buildUrl } from './url';
|
|
3
|
+
import { AgentuityContext } from './context';
|
|
4
|
+
export const useAgent = (name) => {
|
|
5
|
+
const context = useContext(AgentuityContext);
|
|
6
|
+
const [data, setData] = useState();
|
|
7
|
+
const [error, setError] = useState(null);
|
|
8
|
+
const [running, setRunning] = useState(false);
|
|
9
|
+
if (!context) {
|
|
10
|
+
throw new Error('useAgent must be used within a AgentuityProvider');
|
|
11
|
+
}
|
|
12
|
+
// Reset error (for now)
|
|
13
|
+
const reset = () => setError(null);
|
|
14
|
+
const run = async (input, options) => {
|
|
15
|
+
setRunning(true);
|
|
16
|
+
setError(null);
|
|
17
|
+
try {
|
|
18
|
+
const url = buildUrl(context.baseUrl, `/agent/${name}`, options?.subpath, options?.query);
|
|
19
|
+
const signal = options?.signal ?? new AbortController().signal;
|
|
20
|
+
const response = await fetch(url, {
|
|
21
|
+
method: options?.method ?? 'POST',
|
|
22
|
+
headers: {
|
|
23
|
+
'Content-Type': 'application/json',
|
|
24
|
+
...(options?.headers ?? {}),
|
|
25
|
+
},
|
|
26
|
+
signal,
|
|
27
|
+
body: input && typeof input === 'object' && (options?.method ?? 'POST') !== 'GET'
|
|
28
|
+
? JSON.stringify(input)
|
|
29
|
+
: undefined,
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const err = new Error(`Error invoking agent ${name}: ${response.status} ${response.statusText}`);
|
|
33
|
+
setError(err);
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
// TODO: handle streams
|
|
37
|
+
const ct = response.headers.get('Content-Type') || '';
|
|
38
|
+
if (ct.includes('text/')) {
|
|
39
|
+
const text = await response.text();
|
|
40
|
+
const _data = text;
|
|
41
|
+
setData(_data);
|
|
42
|
+
return _data;
|
|
43
|
+
}
|
|
44
|
+
if (ct.includes('/json')) {
|
|
45
|
+
const json = await response.json();
|
|
46
|
+
const _data = json;
|
|
47
|
+
setData(_data);
|
|
48
|
+
return _data;
|
|
49
|
+
}
|
|
50
|
+
const err = new Error(`Unsupported content type: ${ct}`);
|
|
51
|
+
setError(err);
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
if (e instanceof Error && e.name === 'AbortError') {
|
|
56
|
+
throw e;
|
|
57
|
+
}
|
|
58
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
59
|
+
setError(err);
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
setRunning(false);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return { data, error, run, reset, running };
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=run.js.map
|
package/dist/run.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deserialize data received from WebSocket or EventStream.
|
|
3
|
+
* Attempts to parse as JSON if the data looks like JSON, otherwise returns as-is.
|
|
4
|
+
*/
|
|
5
|
+
export const deserializeData = (data) => {
|
|
6
|
+
if (data) {
|
|
7
|
+
if (data.startsWith('{') || data.startsWith('[')) {
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(data);
|
|
10
|
+
}
|
|
11
|
+
catch (ex) {
|
|
12
|
+
console.error('error parsing data as JSON', ex, data);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return data;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAI,IAAY,EAAK,EAAE;IACrD,IAAI,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;YAC9B,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,IAAS,CAAC;AAClB,CAAC,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/url.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getProcessEnv } from './env';
|
|
2
|
+
export const buildUrl = (base, path, subpath, query) => {
|
|
3
|
+
path = path.startsWith('/') ? path : `/${path}`;
|
|
4
|
+
let url = base.replace(/\/$/, '') + path;
|
|
5
|
+
if (subpath) {
|
|
6
|
+
subpath = subpath.startsWith('/') ? subpath : `/${subpath}`;
|
|
7
|
+
url += `/${subpath}`;
|
|
8
|
+
}
|
|
9
|
+
if (query) {
|
|
10
|
+
url += `?${query.toString()}`;
|
|
11
|
+
}
|
|
12
|
+
return url;
|
|
13
|
+
};
|
|
14
|
+
export const defaultBaseUrl = getProcessEnv('NEXT_PUBLIC_AGENTUITY_URL') ||
|
|
15
|
+
getProcessEnv('VITE_AGENTUITY_URL') ||
|
|
16
|
+
getProcessEnv('AGENTUITY_URL') ||
|
|
17
|
+
'http://localhost:3500';
|
|
18
|
+
//# sourceMappingURL=url.js.map
|
package/dist/url.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,CAAC,MAAM,QAAQ,GAAG,CACvB,IAAY,EACZ,IAAY,EACZ,OAAgB,EAChB,KAAuB,EACd,EAAE;IACX,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;IACzC,IAAI,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC5D,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC;IACtB,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACX,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAC1B,aAAa,CAAC,2BAA2B,CAAC;IAC1C,aAAa,CAAC,oBAAoB,CAAC;IACnC,aAAa,CAAC,eAAe,CAAC;IAC9B,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
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
|
+
export const useWebsocket = (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 [data, setData] = useState();
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const [connected, setConnected] = useState(false);
|
|
32
|
+
const wsUrl = useMemo(() => {
|
|
33
|
+
const base = context.baseUrl;
|
|
34
|
+
const wsBase = base.replace(/^http(s?):/, 'ws$1:');
|
|
35
|
+
return buildUrl(wsBase, path, options?.subpath, options?.query);
|
|
36
|
+
}, [context.baseUrl, path, options?.subpath, options?.query?.toString()]);
|
|
37
|
+
const connect = useCallback(() => {
|
|
38
|
+
if (manualClose.current)
|
|
39
|
+
return;
|
|
40
|
+
wsRef.current = new WebSocket(wsUrl);
|
|
41
|
+
wsRef.current.onopen = () => {
|
|
42
|
+
reconnectManagerRef.current?.recordSuccess();
|
|
43
|
+
setConnected(true);
|
|
44
|
+
setError(null);
|
|
45
|
+
if (queued.current.length > 0) {
|
|
46
|
+
queued.current.forEach((msg) => wsRef.current.send(serializeWSData(msg)));
|
|
47
|
+
queued.current = [];
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
wsRef.current.onerror = () => {
|
|
51
|
+
setError(new Error('WebSocket error'));
|
|
52
|
+
};
|
|
53
|
+
wsRef.current.onclose = (evt) => {
|
|
54
|
+
wsRef.current = undefined;
|
|
55
|
+
setConnected(false);
|
|
56
|
+
if (manualClose.current) {
|
|
57
|
+
queued.current = [];
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (evt.code !== 1000) {
|
|
61
|
+
setError(new Error(`WebSocket closed: ${evt.code} ${evt.reason || ''}`));
|
|
62
|
+
}
|
|
63
|
+
reconnectManagerRef.current?.recordFailure();
|
|
64
|
+
};
|
|
65
|
+
wsRef.current.onmessage = (event) => {
|
|
66
|
+
const payload = deserializeData(event.data);
|
|
67
|
+
setData(payload);
|
|
68
|
+
if (handler.current) {
|
|
69
|
+
handler.current(payload);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
pending.current.push(payload);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}, [wsUrl]);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
reconnectManagerRef.current = createReconnectManager({
|
|
78
|
+
onReconnect: connect,
|
|
79
|
+
threshold: 0,
|
|
80
|
+
baseDelay: 500,
|
|
81
|
+
factor: 2,
|
|
82
|
+
maxDelay: 30000,
|
|
83
|
+
jitter: 500,
|
|
84
|
+
enabled: () => !manualClose.current,
|
|
85
|
+
});
|
|
86
|
+
return () => reconnectManagerRef.current?.dispose();
|
|
87
|
+
}, [connect]);
|
|
88
|
+
const cleanup = useCallback(() => {
|
|
89
|
+
manualClose.current = true;
|
|
90
|
+
reconnectManagerRef.current?.dispose();
|
|
91
|
+
const ws = wsRef.current;
|
|
92
|
+
if (ws) {
|
|
93
|
+
ws.onopen = null;
|
|
94
|
+
ws.onerror = null;
|
|
95
|
+
ws.onclose = null;
|
|
96
|
+
ws.onmessage = null;
|
|
97
|
+
ws.close();
|
|
98
|
+
}
|
|
99
|
+
wsRef.current = undefined;
|
|
100
|
+
handler.current = undefined;
|
|
101
|
+
pending.current = [];
|
|
102
|
+
queued.current = [];
|
|
103
|
+
setConnected(false);
|
|
104
|
+
}, []);
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
manualClose.current = false;
|
|
107
|
+
connect();
|
|
108
|
+
return () => {
|
|
109
|
+
cleanup();
|
|
110
|
+
};
|
|
111
|
+
}, [connect, cleanup]);
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (options?.signal) {
|
|
114
|
+
const listener = () => {
|
|
115
|
+
cleanup();
|
|
116
|
+
};
|
|
117
|
+
options.signal.addEventListener('abort', listener);
|
|
118
|
+
return () => {
|
|
119
|
+
options.signal?.removeEventListener('abort', listener);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
}, [options?.signal, cleanup]);
|
|
123
|
+
const reset = () => setError(null);
|
|
124
|
+
const send = (data) => {
|
|
125
|
+
if (wsRef.current?.readyState === WebSocket.OPEN) {
|
|
126
|
+
wsRef.current.send(serializeWSData(data));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
queued.current.push(data);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const setHandler = useCallback((h) => {
|
|
133
|
+
handler.current = h;
|
|
134
|
+
pending.current.forEach(h);
|
|
135
|
+
pending.current = [];
|
|
136
|
+
}, []);
|
|
137
|
+
const close = () => {
|
|
138
|
+
cleanup();
|
|
139
|
+
};
|
|
140
|
+
return {
|
|
141
|
+
connected,
|
|
142
|
+
close,
|
|
143
|
+
data,
|
|
144
|
+
error,
|
|
145
|
+
send,
|
|
146
|
+
setHandler,
|
|
147
|
+
reset,
|
|
148
|
+
readyState: wsRef.current?.readyState ?? WebSocket.CLOSED,
|
|
149
|
+
};
|
|
150
|
+
};
|
|
151
|
+
export const useAgentWebsocket = (agent, options) => {
|
|
152
|
+
const [data, setData] = useState();
|
|
153
|
+
const { connected, close, send, setHandler, readyState, error, reset } = useWebsocket(`/agent/${agent}`, options);
|
|
154
|
+
useEffect(() => {
|
|
155
|
+
setHandler(setData);
|
|
156
|
+
}, [agent, setHandler]);
|
|
157
|
+
return {
|
|
158
|
+
connected,
|
|
159
|
+
close,
|
|
160
|
+
data,
|
|
161
|
+
error,
|
|
162
|
+
reset,
|
|
163
|
+
send,
|
|
164
|
+
readyState,
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
//# sourceMappingURL=websocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket.js","sourceRoot":"","sources":["../src/websocket.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.52",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
7
|
-
"main": "./
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"import": "./
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
12
|
"types": "./dist/index.d.ts"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"prepublishOnly": "bun run clean && bun run build"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@agentuity/core": "0.0.
|
|
28
|
+
"@agentuity/core": "0.0.52"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/bun": "latest",
|