@agentuity/react 0.0.77 → 0.0.78
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 +22 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +179 -2
- package/dist/api.js.map +1 -1
- package/package.json +2 -2
- package/src/api.ts +260 -12
- package/src/types.ts +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -8,6 +8,12 @@ export type RouteKey = keyof RouteRegistry;
|
|
|
8
8
|
* Extract HTTP method from route key
|
|
9
9
|
*/
|
|
10
10
|
export type ExtractMethod<TRoute extends RouteKey> = TRoute extends `${infer Method} ${string}` ? Method : never;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a route is a streaming route
|
|
13
|
+
*/
|
|
14
|
+
export type RouteIsStream<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry ? RouteRegistry[TRoute] extends {
|
|
15
|
+
stream: true;
|
|
16
|
+
} ? true : false : false;
|
|
11
17
|
/**
|
|
12
18
|
* Extract input type for a specific route
|
|
13
19
|
*/
|
|
@@ -17,10 +23,20 @@ export type RouteInput<TRoute extends RouteKey> = TRoute extends keyof RouteRegi
|
|
|
17
23
|
/**
|
|
18
24
|
* Extract output type for a specific route
|
|
19
25
|
* Returns void if no outputSchema is defined (e.g., 204 No Content)
|
|
26
|
+
* For streaming routes, returns T[] (accumulated chunks)
|
|
20
27
|
*/
|
|
21
28
|
export type RouteOutput<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry ? RouteRegistry[TRoute] extends {
|
|
22
29
|
outputSchema: infer TSchema;
|
|
30
|
+
stream: true;
|
|
31
|
+
} ? TSchema extends undefined | never ? unknown[] : InferOutput<TSchema>[] : RouteRegistry[TRoute] extends {
|
|
32
|
+
outputSchema: infer TSchema;
|
|
23
33
|
} ? TSchema extends undefined | never ? void : InferOutput<TSchema> : void : void;
|
|
34
|
+
/**
|
|
35
|
+
* Helper to extract single chunk type from RouteOutput
|
|
36
|
+
*/
|
|
37
|
+
type RouteChunkType<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry ? RouteRegistry[TRoute] extends {
|
|
38
|
+
outputSchema: infer TSchema;
|
|
39
|
+
} ? TSchema extends undefined | never ? unknown : InferOutput<TSchema> : unknown : unknown;
|
|
24
40
|
/**
|
|
25
41
|
* Common options shared by all UseAPI configurations
|
|
26
42
|
*/
|
|
@@ -39,7 +55,12 @@ type UseAPICommonOptions<TRoute extends RouteKey> = {
|
|
|
39
55
|
onSuccess?: (data: RouteOutput<TRoute>) => void;
|
|
40
56
|
/** Callback when request fails */
|
|
41
57
|
onError?: (error: Error) => void;
|
|
42
|
-
} & (
|
|
58
|
+
} & (RouteIsStream<TRoute> extends true ? {
|
|
59
|
+
/** Delimiter for splitting stream chunks (default: \n for JSON lines) */
|
|
60
|
+
delimiter?: string;
|
|
61
|
+
/** Optional transform callback for each chunk */
|
|
62
|
+
onChunk?: (chunk: RouteChunkType<TRoute>) => Promise<RouteChunkType<TRoute>> | RouteChunkType<TRoute>;
|
|
63
|
+
} : Record<string, never>) & (ExtractMethod<TRoute> extends 'GET' ? {
|
|
43
64
|
/** GET requests cannot have input (use query params instead) */
|
|
44
65
|
input?: never;
|
|
45
66
|
} : {
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;AAE3C;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,QAAQ,IAAI,MAAM,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,EAAE,GAC5F,MAAM,GACN,KAAK,CAAC;AAET;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,MAAM,SAAS,QAAQ,IAAI,MAAM,SAAS,MAAM,aAAa,GACjF,aAAa,CAAC,MAAM,CAAC,SAAS;IAAE,WAAW,EAAE,GAAG,CAAA;CAAE,GACjD,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,GAChD,KAAK,GACN,KAAK,CAAC;AAET
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/api.js
CHANGED
|
@@ -23,6 +23,95 @@ function toSearchParams(query) {
|
|
|
23
23
|
return query;
|
|
24
24
|
return new URLSearchParams(query);
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Process ReadableStream with delimiter-based parsing
|
|
28
|
+
*/
|
|
29
|
+
async function processStream(stream, options) {
|
|
30
|
+
const { delimiter, onChunk, onData, onError, mountedRef } = options;
|
|
31
|
+
const reader = stream.getReader();
|
|
32
|
+
const decoder = new TextDecoder();
|
|
33
|
+
let buffer = '';
|
|
34
|
+
try {
|
|
35
|
+
while (true) {
|
|
36
|
+
const { done, value } = await reader.read();
|
|
37
|
+
if (!mountedRef.current) {
|
|
38
|
+
reader.cancel();
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
if (done)
|
|
42
|
+
break;
|
|
43
|
+
buffer += decoder.decode(value, { stream: true });
|
|
44
|
+
const parts = buffer.split(delimiter);
|
|
45
|
+
buffer = parts.pop() || '';
|
|
46
|
+
for (const part of parts) {
|
|
47
|
+
if (!part.trim())
|
|
48
|
+
continue;
|
|
49
|
+
try {
|
|
50
|
+
// Try JSON parsing first, fall back to plain string for text streams
|
|
51
|
+
let parsed;
|
|
52
|
+
try {
|
|
53
|
+
parsed = JSON.parse(part);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// Not valid JSON - treat as plain string
|
|
57
|
+
parsed = part;
|
|
58
|
+
}
|
|
59
|
+
if (onChunk) {
|
|
60
|
+
parsed = await Promise.resolve(onChunk(parsed));
|
|
61
|
+
}
|
|
62
|
+
if (!mountedRef.current) {
|
|
63
|
+
reader.cancel();
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
onData(parsed);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
if (!mountedRef.current) {
|
|
70
|
+
reader.cancel();
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
74
|
+
onError(error);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (buffer.trim()) {
|
|
80
|
+
try {
|
|
81
|
+
// Try JSON parsing first, fall back to plain string for text streams
|
|
82
|
+
let parsed;
|
|
83
|
+
try {
|
|
84
|
+
parsed = JSON.parse(buffer);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Not valid JSON - treat as plain string
|
|
88
|
+
parsed = buffer;
|
|
89
|
+
}
|
|
90
|
+
if (onChunk) {
|
|
91
|
+
parsed = await Promise.resolve(onChunk(parsed));
|
|
92
|
+
}
|
|
93
|
+
if (mountedRef.current) {
|
|
94
|
+
onData(parsed);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if (!mountedRef.current)
|
|
99
|
+
return false;
|
|
100
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
101
|
+
onError(error);
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
if (!mountedRef.current)
|
|
108
|
+
return false;
|
|
109
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
110
|
+
onError(error);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
26
115
|
/**
|
|
27
116
|
* Type-safe API client hook with TanStack Query-inspired features.
|
|
28
117
|
*
|
|
@@ -97,6 +186,8 @@ export function useAPI(routeOrOptions) {
|
|
|
97
186
|
: routeOrOptions;
|
|
98
187
|
const context = useContext(AgentuityContext);
|
|
99
188
|
const { input, query, headers, enabled, staleTime = 0, refetchInterval, onSuccess, onError, } = options;
|
|
189
|
+
const delimiter = 'delimiter' in options ? (options.delimiter ?? '\n') : '\n';
|
|
190
|
+
const onChunk = 'onChunk' in options ? options.onChunk : undefined;
|
|
100
191
|
if (!context) {
|
|
101
192
|
throw new Error('useAPI must be used within AgentuityProvider');
|
|
102
193
|
}
|
|
@@ -130,6 +221,14 @@ export function useAPI(routeOrOptions) {
|
|
|
130
221
|
mountedRef.current = false;
|
|
131
222
|
};
|
|
132
223
|
}, []);
|
|
224
|
+
// Use refs to store latest delimiter/onChunk values to avoid stale closures
|
|
225
|
+
// without causing infinite loops in useCallback dependencies
|
|
226
|
+
const delimiterRef = useRef(delimiter);
|
|
227
|
+
const onChunkRef = useRef(onChunk);
|
|
228
|
+
useEffect(() => {
|
|
229
|
+
delimiterRef.current = delimiter;
|
|
230
|
+
onChunkRef.current = onChunk;
|
|
231
|
+
});
|
|
133
232
|
const fetchData = useCallback(async () => {
|
|
134
233
|
if (!mountedRef.current)
|
|
135
234
|
return;
|
|
@@ -171,7 +270,43 @@ export function useAPI(routeOrOptions) {
|
|
|
171
270
|
}
|
|
172
271
|
else {
|
|
173
272
|
const contentType = response.headers.get('Content-Type') || '';
|
|
174
|
-
if (contentType.includes('
|
|
273
|
+
if (contentType.includes('text/event-stream') ||
|
|
274
|
+
contentType.includes('application/octet-stream')) {
|
|
275
|
+
if (!response.body) {
|
|
276
|
+
throw new Error('Response body is null for streaming response');
|
|
277
|
+
}
|
|
278
|
+
setData([]);
|
|
279
|
+
// Track accumulated chunks locally to avoid stale closure
|
|
280
|
+
const accumulatedChunks = [];
|
|
281
|
+
const success = await processStream(response.body, {
|
|
282
|
+
delimiter: delimiterRef.current,
|
|
283
|
+
onChunk: onChunkRef.current,
|
|
284
|
+
onData: (chunk) => {
|
|
285
|
+
if (!mountedRef.current)
|
|
286
|
+
return;
|
|
287
|
+
accumulatedChunks.push(chunk);
|
|
288
|
+
setData([...accumulatedChunks]);
|
|
289
|
+
},
|
|
290
|
+
onError: (err) => {
|
|
291
|
+
if (!mountedRef.current)
|
|
292
|
+
return;
|
|
293
|
+
setError(err);
|
|
294
|
+
setIsError(true);
|
|
295
|
+
onError?.(err);
|
|
296
|
+
},
|
|
297
|
+
mountedRef,
|
|
298
|
+
});
|
|
299
|
+
if (!mountedRef.current)
|
|
300
|
+
return;
|
|
301
|
+
if (success) {
|
|
302
|
+
setIsSuccess(true);
|
|
303
|
+
lastFetchTimeRef.current = Date.now();
|
|
304
|
+
const finalData = accumulatedChunks;
|
|
305
|
+
onSuccess?.(finalData);
|
|
306
|
+
}
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
else if (contentType.includes('application/json')) {
|
|
175
310
|
responseData = await response.json();
|
|
176
311
|
}
|
|
177
312
|
else {
|
|
@@ -279,7 +414,49 @@ export function useAPI(routeOrOptions) {
|
|
|
279
414
|
}
|
|
280
415
|
else {
|
|
281
416
|
const contentType = response.headers.get('Content-Type') || '';
|
|
282
|
-
if (contentType.includes('
|
|
417
|
+
if (contentType.includes('text/event-stream') ||
|
|
418
|
+
contentType.includes('application/octet-stream')) {
|
|
419
|
+
if (!response.body) {
|
|
420
|
+
throw new Error('Response body is null for streaming response');
|
|
421
|
+
}
|
|
422
|
+
setData([]);
|
|
423
|
+
// Track accumulated chunks locally to avoid stale closure
|
|
424
|
+
const accumulatedChunks = [];
|
|
425
|
+
let streamError = undefined;
|
|
426
|
+
const success = await processStream(response.body, {
|
|
427
|
+
delimiter: delimiterRef.current,
|
|
428
|
+
onChunk: onChunkRef.current,
|
|
429
|
+
onData: (chunk) => {
|
|
430
|
+
if (!mountedRef.current)
|
|
431
|
+
return;
|
|
432
|
+
accumulatedChunks.push(chunk);
|
|
433
|
+
setData([...accumulatedChunks]);
|
|
434
|
+
},
|
|
435
|
+
onError: (err) => {
|
|
436
|
+
if (!mountedRef.current)
|
|
437
|
+
return;
|
|
438
|
+
streamError = err;
|
|
439
|
+
setError(err);
|
|
440
|
+
setIsError(true);
|
|
441
|
+
onError?.(err);
|
|
442
|
+
},
|
|
443
|
+
mountedRef,
|
|
444
|
+
});
|
|
445
|
+
if (!mountedRef.current)
|
|
446
|
+
return accumulatedChunks;
|
|
447
|
+
if (!success && streamError) {
|
|
448
|
+
throw streamError;
|
|
449
|
+
}
|
|
450
|
+
if (success) {
|
|
451
|
+
setIsSuccess(true);
|
|
452
|
+
lastFetchTimeRef.current = Date.now();
|
|
453
|
+
const finalData = accumulatedChunks;
|
|
454
|
+
onSuccess?.(finalData);
|
|
455
|
+
return finalData;
|
|
456
|
+
}
|
|
457
|
+
return accumulatedChunks;
|
|
458
|
+
}
|
|
459
|
+
else if (contentType.includes('application/json')) {
|
|
283
460
|
responseData = await response.json();
|
|
284
461
|
}
|
|
285
462
|
else {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.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.78",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"prepublishOnly": "bun run clean && bun run build"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@agentuity/core": "0.0.
|
|
29
|
+
"@agentuity/core": "0.0.78"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/bun": "latest",
|
package/src/api.ts
CHANGED
|
@@ -18,6 +18,15 @@ export type ExtractMethod<TRoute extends RouteKey> = TRoute extends `${infer Met
|
|
|
18
18
|
? Method
|
|
19
19
|
: never;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* Check if a route is a streaming route
|
|
23
|
+
*/
|
|
24
|
+
export type RouteIsStream<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry
|
|
25
|
+
? RouteRegistry[TRoute] extends { stream: true }
|
|
26
|
+
? true
|
|
27
|
+
: false
|
|
28
|
+
: false;
|
|
29
|
+
|
|
21
30
|
/**
|
|
22
31
|
* Extract input type for a specific route
|
|
23
32
|
*/
|
|
@@ -30,14 +39,30 @@ export type RouteInput<TRoute extends RouteKey> = TRoute extends keyof RouteRegi
|
|
|
30
39
|
/**
|
|
31
40
|
* Extract output type for a specific route
|
|
32
41
|
* Returns void if no outputSchema is defined (e.g., 204 No Content)
|
|
42
|
+
* For streaming routes, returns T[] (accumulated chunks)
|
|
33
43
|
*/
|
|
34
44
|
export type RouteOutput<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry
|
|
45
|
+
? RouteRegistry[TRoute] extends { outputSchema: infer TSchema; stream: true }
|
|
46
|
+
? TSchema extends undefined | never
|
|
47
|
+
? unknown[]
|
|
48
|
+
: InferOutput<TSchema>[]
|
|
49
|
+
: RouteRegistry[TRoute] extends { outputSchema: infer TSchema }
|
|
50
|
+
? TSchema extends undefined | never
|
|
51
|
+
? void
|
|
52
|
+
: InferOutput<TSchema>
|
|
53
|
+
: void
|
|
54
|
+
: void;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Helper to extract single chunk type from RouteOutput
|
|
58
|
+
*/
|
|
59
|
+
type RouteChunkType<TRoute extends RouteKey> = TRoute extends keyof RouteRegistry
|
|
35
60
|
? RouteRegistry[TRoute] extends { outputSchema: infer TSchema }
|
|
36
61
|
? TSchema extends undefined | never
|
|
37
|
-
?
|
|
62
|
+
? unknown
|
|
38
63
|
: InferOutput<TSchema>
|
|
39
|
-
:
|
|
40
|
-
:
|
|
64
|
+
: unknown
|
|
65
|
+
: unknown;
|
|
41
66
|
|
|
42
67
|
/**
|
|
43
68
|
* Common options shared by all UseAPI configurations
|
|
@@ -57,15 +82,25 @@ type UseAPICommonOptions<TRoute extends RouteKey> = {
|
|
|
57
82
|
onSuccess?: (data: RouteOutput<TRoute>) => void;
|
|
58
83
|
/** Callback when request fails */
|
|
59
84
|
onError?: (error: Error) => void;
|
|
60
|
-
} & (
|
|
85
|
+
} & (RouteIsStream<TRoute> extends true
|
|
61
86
|
? {
|
|
62
|
-
/**
|
|
63
|
-
|
|
87
|
+
/** Delimiter for splitting stream chunks (default: \n for JSON lines) */
|
|
88
|
+
delimiter?: string;
|
|
89
|
+
/** Optional transform callback for each chunk */
|
|
90
|
+
onChunk?: (
|
|
91
|
+
chunk: RouteChunkType<TRoute>
|
|
92
|
+
) => Promise<RouteChunkType<TRoute>> | RouteChunkType<TRoute>;
|
|
64
93
|
}
|
|
65
|
-
:
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
94
|
+
: Record<string, never>) &
|
|
95
|
+
(ExtractMethod<TRoute> extends 'GET'
|
|
96
|
+
? {
|
|
97
|
+
/** GET requests cannot have input (use query params instead) */
|
|
98
|
+
input?: never;
|
|
99
|
+
}
|
|
100
|
+
: {
|
|
101
|
+
/** Input data for the request (required for POST/PUT/PATCH/DELETE) */
|
|
102
|
+
input?: RouteInput<TRoute>;
|
|
103
|
+
});
|
|
69
104
|
|
|
70
105
|
/**
|
|
71
106
|
* Options with route property (e.g., { route: 'GET /users' })
|
|
@@ -187,6 +222,113 @@ function toSearchParams(
|
|
|
187
222
|
return new URLSearchParams(query);
|
|
188
223
|
}
|
|
189
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Process ReadableStream with delimiter-based parsing
|
|
227
|
+
*/
|
|
228
|
+
async function processStream<T>(
|
|
229
|
+
stream: ReadableStream<Uint8Array>,
|
|
230
|
+
options: {
|
|
231
|
+
delimiter: string;
|
|
232
|
+
onChunk?: (chunk: T) => Promise<T> | T;
|
|
233
|
+
onData: (chunk: T) => void;
|
|
234
|
+
onError: (error: Error) => void;
|
|
235
|
+
mountedRef: React.MutableRefObject<boolean>;
|
|
236
|
+
}
|
|
237
|
+
): Promise<boolean> {
|
|
238
|
+
const { delimiter, onChunk, onData, onError, mountedRef } = options;
|
|
239
|
+
const reader = stream.getReader();
|
|
240
|
+
const decoder = new TextDecoder();
|
|
241
|
+
let buffer = '';
|
|
242
|
+
|
|
243
|
+
try {
|
|
244
|
+
while (true) {
|
|
245
|
+
const { done, value } = await reader.read();
|
|
246
|
+
|
|
247
|
+
if (!mountedRef.current) {
|
|
248
|
+
reader.cancel();
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (done) break;
|
|
253
|
+
|
|
254
|
+
buffer += decoder.decode(value, { stream: true });
|
|
255
|
+
|
|
256
|
+
const parts = buffer.split(delimiter);
|
|
257
|
+
buffer = parts.pop() || '';
|
|
258
|
+
|
|
259
|
+
for (const part of parts) {
|
|
260
|
+
if (!part.trim()) continue;
|
|
261
|
+
|
|
262
|
+
try {
|
|
263
|
+
// Try JSON parsing first, fall back to plain string for text streams
|
|
264
|
+
let parsed: T;
|
|
265
|
+
try {
|
|
266
|
+
parsed = JSON.parse(part) as T;
|
|
267
|
+
} catch {
|
|
268
|
+
// Not valid JSON - treat as plain string
|
|
269
|
+
parsed = part as T;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (onChunk) {
|
|
273
|
+
parsed = await Promise.resolve(onChunk(parsed));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (!mountedRef.current) {
|
|
277
|
+
reader.cancel();
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
onData(parsed);
|
|
282
|
+
} catch (err) {
|
|
283
|
+
if (!mountedRef.current) {
|
|
284
|
+
reader.cancel();
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
289
|
+
onError(error);
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (buffer.trim()) {
|
|
296
|
+
try {
|
|
297
|
+
// Try JSON parsing first, fall back to plain string for text streams
|
|
298
|
+
let parsed: T;
|
|
299
|
+
try {
|
|
300
|
+
parsed = JSON.parse(buffer) as T;
|
|
301
|
+
} catch {
|
|
302
|
+
// Not valid JSON - treat as plain string
|
|
303
|
+
parsed = buffer as T;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (onChunk) {
|
|
307
|
+
parsed = await Promise.resolve(onChunk(parsed));
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
if (mountedRef.current) {
|
|
311
|
+
onData(parsed);
|
|
312
|
+
}
|
|
313
|
+
} catch (err) {
|
|
314
|
+
if (!mountedRef.current) return false;
|
|
315
|
+
|
|
316
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
317
|
+
onError(error);
|
|
318
|
+
return false;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
} catch (err) {
|
|
322
|
+
if (!mountedRef.current) return false;
|
|
323
|
+
|
|
324
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
325
|
+
onError(error);
|
|
326
|
+
return false;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
|
|
190
332
|
/**
|
|
191
333
|
* Type-safe API client hook with TanStack Query-inspired features.
|
|
192
334
|
*
|
|
@@ -274,6 +416,9 @@ export function useAPI<TRoute extends RouteKey>(
|
|
|
274
416
|
onError,
|
|
275
417
|
} = options;
|
|
276
418
|
|
|
419
|
+
const delimiter = 'delimiter' in options ? (options.delimiter ?? '\n') : '\n';
|
|
420
|
+
const onChunk = 'onChunk' in options ? options.onChunk : undefined;
|
|
421
|
+
|
|
277
422
|
if (!context) {
|
|
278
423
|
throw new Error('useAPI must be used within AgentuityProvider');
|
|
279
424
|
}
|
|
@@ -310,6 +455,16 @@ export function useAPI<TRoute extends RouteKey>(
|
|
|
310
455
|
};
|
|
311
456
|
}, []);
|
|
312
457
|
|
|
458
|
+
// Use refs to store latest delimiter/onChunk values to avoid stale closures
|
|
459
|
+
// without causing infinite loops in useCallback dependencies
|
|
460
|
+
const delimiterRef = useRef(delimiter);
|
|
461
|
+
const onChunkRef = useRef(onChunk);
|
|
462
|
+
|
|
463
|
+
useEffect(() => {
|
|
464
|
+
delimiterRef.current = delimiter;
|
|
465
|
+
onChunkRef.current = onChunk;
|
|
466
|
+
});
|
|
467
|
+
|
|
313
468
|
const fetchData = useCallback(async () => {
|
|
314
469
|
if (!mountedRef.current) return;
|
|
315
470
|
|
|
@@ -360,7 +515,49 @@ export function useAPI<TRoute extends RouteKey>(
|
|
|
360
515
|
responseData = undefined;
|
|
361
516
|
} else {
|
|
362
517
|
const contentType = response.headers.get('Content-Type') || '';
|
|
363
|
-
|
|
518
|
+
|
|
519
|
+
if (
|
|
520
|
+
contentType.includes('text/event-stream') ||
|
|
521
|
+
contentType.includes('application/octet-stream')
|
|
522
|
+
) {
|
|
523
|
+
if (!response.body) {
|
|
524
|
+
throw new Error('Response body is null for streaming response');
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
setData([] as unknown as RouteOutput<TRoute>);
|
|
528
|
+
|
|
529
|
+
// Track accumulated chunks locally to avoid stale closure
|
|
530
|
+
const accumulatedChunks: RouteChunkType<TRoute>[] = [];
|
|
531
|
+
|
|
532
|
+
const success = await processStream<RouteChunkType<TRoute>>(response.body, {
|
|
533
|
+
delimiter: delimiterRef.current,
|
|
534
|
+
onChunk: onChunkRef.current as any,
|
|
535
|
+
onData: (chunk) => {
|
|
536
|
+
if (!mountedRef.current) return;
|
|
537
|
+
|
|
538
|
+
accumulatedChunks.push(chunk);
|
|
539
|
+
setData([...accumulatedChunks] as unknown as RouteOutput<TRoute>);
|
|
540
|
+
},
|
|
541
|
+
onError: (err) => {
|
|
542
|
+
if (!mountedRef.current) return;
|
|
543
|
+
setError(err);
|
|
544
|
+
setIsError(true);
|
|
545
|
+
onError?.(err);
|
|
546
|
+
},
|
|
547
|
+
mountedRef,
|
|
548
|
+
});
|
|
549
|
+
|
|
550
|
+
if (!mountedRef.current) return;
|
|
551
|
+
|
|
552
|
+
if (success) {
|
|
553
|
+
setIsSuccess(true);
|
|
554
|
+
lastFetchTimeRef.current = Date.now();
|
|
555
|
+
|
|
556
|
+
const finalData = accumulatedChunks as unknown as RouteOutput<TRoute>;
|
|
557
|
+
onSuccess?.(finalData);
|
|
558
|
+
}
|
|
559
|
+
return;
|
|
560
|
+
} else if (contentType.includes('application/json')) {
|
|
364
561
|
responseData = await response.json();
|
|
365
562
|
} else {
|
|
366
563
|
const text = await response.text();
|
|
@@ -481,7 +678,58 @@ export function useAPI<TRoute extends RouteKey>(
|
|
|
481
678
|
responseData = undefined;
|
|
482
679
|
} else {
|
|
483
680
|
const contentType = response.headers.get('Content-Type') || '';
|
|
484
|
-
|
|
681
|
+
|
|
682
|
+
if (
|
|
683
|
+
contentType.includes('text/event-stream') ||
|
|
684
|
+
contentType.includes('application/octet-stream')
|
|
685
|
+
) {
|
|
686
|
+
if (!response.body) {
|
|
687
|
+
throw new Error('Response body is null for streaming response');
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
setData([] as unknown as RouteOutput<TRoute>);
|
|
691
|
+
|
|
692
|
+
// Track accumulated chunks locally to avoid stale closure
|
|
693
|
+
const accumulatedChunks: RouteChunkType<TRoute>[] = [];
|
|
694
|
+
let streamError: any = undefined;
|
|
695
|
+
|
|
696
|
+
const success = await processStream<RouteChunkType<TRoute>>(response.body, {
|
|
697
|
+
delimiter: delimiterRef.current,
|
|
698
|
+
onChunk: onChunkRef.current as any,
|
|
699
|
+
onData: (chunk) => {
|
|
700
|
+
if (!mountedRef.current) return;
|
|
701
|
+
|
|
702
|
+
accumulatedChunks.push(chunk);
|
|
703
|
+
setData([...accumulatedChunks] as unknown as RouteOutput<TRoute>);
|
|
704
|
+
},
|
|
705
|
+
onError: (err) => {
|
|
706
|
+
if (!mountedRef.current) return;
|
|
707
|
+
streamError = err;
|
|
708
|
+
setError(err);
|
|
709
|
+
setIsError(true);
|
|
710
|
+
onError?.(err);
|
|
711
|
+
},
|
|
712
|
+
mountedRef,
|
|
713
|
+
});
|
|
714
|
+
|
|
715
|
+
if (!mountedRef.current)
|
|
716
|
+
return accumulatedChunks as unknown as RouteOutput<TRoute>;
|
|
717
|
+
|
|
718
|
+
if (!success && streamError) {
|
|
719
|
+
throw streamError;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
if (success) {
|
|
723
|
+
setIsSuccess(true);
|
|
724
|
+
lastFetchTimeRef.current = Date.now();
|
|
725
|
+
|
|
726
|
+
const finalData = accumulatedChunks as unknown as RouteOutput<TRoute>;
|
|
727
|
+
onSuccess?.(finalData);
|
|
728
|
+
return finalData;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
return accumulatedChunks as unknown as RouteOutput<TRoute>;
|
|
732
|
+
} else if (contentType.includes('application/json')) {
|
|
485
733
|
responseData = await response.json();
|
|
486
734
|
} else {
|
|
487
735
|
const text = await response.text();
|
package/src/types.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
6
6
|
export interface RouteRegistry {
|
|
7
7
|
// Will be augmented by generated code
|
|
8
|
-
// Format: 'METHOD /path': { inputSchema: ..., outputSchema:
|
|
8
|
+
// Format: 'METHOD /path': { inputSchema: ..., outputSchema: ..., stream?: boolean }
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/**
|