@agentuity/core 0.0.103 → 0.0.105
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/AGENTS.md +1 -1
- package/dist/services/stream.d.ts.map +1 -1
- package/dist/services/stream.js +101 -81
- package/dist/services/stream.js.map +1 -1
- package/package.json +2 -2
- package/src/services/stream.ts +120 -91
package/AGENTS.md
CHANGED
|
@@ -12,7 +12,7 @@ Core utilities and shared types for the Agentuity framework. This package provid
|
|
|
12
12
|
|
|
13
13
|
## Architecture
|
|
14
14
|
|
|
15
|
-
- **Runtime**: Node/Bun compatible, no runtime-specific code
|
|
15
|
+
- **Runtime**: Browser and Node/Bun compatible, no runtime-specific code. Must work in all JavaScript environments
|
|
16
16
|
- **Build target**: ESNext with TypeScript declaration files
|
|
17
17
|
- **Exports**: All public APIs exported from `src/index.ts`
|
|
18
18
|
- **No dependencies**: This is a foundational package with zero runtime dependencies
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/services/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAiB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/services/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/services/stream.js
CHANGED
|
@@ -1,26 +1,37 @@
|
|
|
1
1
|
import { safeStringify } from '../json';
|
|
2
2
|
import { buildUrl, toServiceException } from './_util';
|
|
3
3
|
import { StructuredError } from '../error';
|
|
4
|
-
|
|
4
|
+
// Use Web API streams - in Node.js/Bun, import from 'stream/web' which provides proper Web API
|
|
5
|
+
// In browsers, use globalThis directly
|
|
6
|
+
// Check for Node.js/Bun by looking for process.versions.node
|
|
7
|
+
const isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
|
+
const streamWeb = isNode ? require('stream/web') : globalThis;
|
|
10
|
+
const NativeWritableStream = streamWeb.WritableStream;
|
|
11
|
+
const NativeReadableStream = streamWeb.ReadableStream;
|
|
12
|
+
const NativeCompressionStream = (streamWeb.CompressionStream ??
|
|
13
|
+
globalThis.CompressionStream);
|
|
5
14
|
const encoder = new TextEncoder();
|
|
6
15
|
const ReadStreamFailedError = StructuredError('ReadStreamFailedError')();
|
|
7
16
|
/**
|
|
8
|
-
* A writable stream implementation
|
|
17
|
+
* A writable stream implementation using composition (browser-compatible)
|
|
18
|
+
* This approach works across all environments since native WritableStream can't be properly extended
|
|
9
19
|
*/
|
|
10
|
-
class StreamImpl
|
|
20
|
+
class StreamImpl {
|
|
11
21
|
id;
|
|
12
22
|
url;
|
|
13
|
-
#
|
|
23
|
+
#writable;
|
|
14
24
|
#compressed;
|
|
15
25
|
#adapter;
|
|
16
26
|
#sink;
|
|
17
|
-
|
|
18
|
-
|
|
27
|
+
#closed = false;
|
|
28
|
+
constructor(id, url, compressed, sink, writable, adapter) {
|
|
19
29
|
this.id = id;
|
|
20
30
|
this.url = url;
|
|
21
31
|
this.#compressed = compressed;
|
|
22
32
|
this.#adapter = adapter;
|
|
23
|
-
this.#sink =
|
|
33
|
+
this.#sink = sink;
|
|
34
|
+
this.#writable = writable;
|
|
24
35
|
}
|
|
25
36
|
get bytesWritten() {
|
|
26
37
|
return this.#sink.total;
|
|
@@ -28,6 +39,10 @@ class StreamImpl extends WebWritableStream {
|
|
|
28
39
|
get compressed() {
|
|
29
40
|
return this.#compressed;
|
|
30
41
|
}
|
|
42
|
+
// WritableStream interface properties
|
|
43
|
+
get locked() {
|
|
44
|
+
return this.#writable.locked;
|
|
45
|
+
}
|
|
31
46
|
/**
|
|
32
47
|
* Write data to the stream
|
|
33
48
|
*/
|
|
@@ -48,27 +63,19 @@ class StreamImpl extends WebWritableStream {
|
|
|
48
63
|
else {
|
|
49
64
|
binaryChunk = encoder.encode(String(chunk));
|
|
50
65
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
await this.#activeWriter.write(binaryChunk);
|
|
66
|
+
// Delegate to the underlying sink's write method
|
|
67
|
+
await this.#sink.write(binaryChunk);
|
|
55
68
|
}
|
|
56
69
|
/**
|
|
57
|
-
*
|
|
58
|
-
* This method safely closes the stream, or silently returns if already closed
|
|
70
|
+
* Close the stream gracefully, handling already closed streams without error
|
|
59
71
|
*/
|
|
60
72
|
async close() {
|
|
73
|
+
if (this.#closed) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.#closed = true;
|
|
61
77
|
try {
|
|
62
|
-
|
|
63
|
-
if (this.#activeWriter) {
|
|
64
|
-
const writer = this.#activeWriter;
|
|
65
|
-
this.#activeWriter = null;
|
|
66
|
-
await writer.close();
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
// Otherwise, get a writer and close it
|
|
70
|
-
const writer = super.getWriter();
|
|
71
|
-
await writer.close();
|
|
78
|
+
await this.#sink.close();
|
|
72
79
|
}
|
|
73
80
|
catch (error) {
|
|
74
81
|
// If we get a TypeError about the stream being closed, locked, or errored,
|
|
@@ -78,17 +85,29 @@ class StreamImpl extends WebWritableStream {
|
|
|
78
85
|
error.message.includes('errored') ||
|
|
79
86
|
error.message.includes('Cannot close'))) {
|
|
80
87
|
// Silently return - this is the desired behavior
|
|
81
|
-
return
|
|
88
|
+
return;
|
|
82
89
|
}
|
|
83
90
|
// If the stream is locked, try to close the underlying writer
|
|
84
91
|
if (error instanceof TypeError && error.message.includes('locked')) {
|
|
85
92
|
// Best-effort closure for locked streams
|
|
86
|
-
return
|
|
93
|
+
return;
|
|
87
94
|
}
|
|
88
95
|
// Re-throw any other errors
|
|
89
96
|
throw error;
|
|
90
97
|
}
|
|
91
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Abort the stream with an optional reason
|
|
101
|
+
*/
|
|
102
|
+
abort(reason) {
|
|
103
|
+
return this.#writable.abort(reason);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get a writer for the underlying stream
|
|
107
|
+
*/
|
|
108
|
+
getWriter() {
|
|
109
|
+
return this.#writable.getWriter();
|
|
110
|
+
}
|
|
92
111
|
/**
|
|
93
112
|
* Get a ReadableStream that streams from the internal URL
|
|
94
113
|
*
|
|
@@ -101,7 +120,8 @@ class StreamImpl extends WebWritableStream {
|
|
|
101
120
|
const url = this.url;
|
|
102
121
|
const adapter = this.#adapter;
|
|
103
122
|
let ac = null;
|
|
104
|
-
|
|
123
|
+
// Use native ReadableStream to avoid polyfill interference
|
|
124
|
+
return new NativeReadableStream({
|
|
105
125
|
async start(controller) {
|
|
106
126
|
try {
|
|
107
127
|
ac = new AbortController();
|
|
@@ -156,17 +176,30 @@ class StreamImpl extends WebWritableStream {
|
|
|
156
176
|
}
|
|
157
177
|
const StreamWriterInitializationError = StructuredError('StreamWriterInitializationError', 'Stream writer is not initialized');
|
|
158
178
|
const StreamAPIError = StructuredError('StreamAPIError')();
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Check if compression is available in the current environment.
|
|
181
|
+
* CompressionStream is available in:
|
|
182
|
+
* - Node.js 18+ (via stream/web)
|
|
183
|
+
* - Chrome 80+
|
|
184
|
+
* - Safari 16.4+
|
|
185
|
+
* - Firefox 113+
|
|
186
|
+
*/
|
|
187
|
+
function isCompressionAvailable() {
|
|
188
|
+
return typeof NativeCompressionStream !== 'undefined' && NativeCompressionStream !== null;
|
|
189
|
+
}
|
|
190
|
+
// State object that handles the actual streaming to the backend
|
|
191
|
+
// This is used by StreamImpl to manage write operations
|
|
192
|
+
class UnderlyingSinkState {
|
|
162
193
|
adapter;
|
|
163
194
|
abortController = null;
|
|
164
195
|
writer = null;
|
|
196
|
+
writable = null;
|
|
165
197
|
putRequestPromise = null;
|
|
166
198
|
total = 0;
|
|
167
199
|
closed = false;
|
|
168
200
|
url;
|
|
169
201
|
props;
|
|
202
|
+
compressionEnabled = false;
|
|
170
203
|
constructor(url, adapter, props) {
|
|
171
204
|
this.url = url;
|
|
172
205
|
this.adapter = adapter;
|
|
@@ -175,73 +208,58 @@ class UnderlyingSink {
|
|
|
175
208
|
async start() {
|
|
176
209
|
// Create AbortController for the fetch request
|
|
177
210
|
this.abortController = new AbortController();
|
|
178
|
-
// Create a
|
|
179
|
-
//
|
|
180
|
-
let
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
this.
|
|
211
|
+
// Create a pass-through WritableStream that writes to a ReadableStream
|
|
212
|
+
// Use native streams captured at module load to avoid polyfill interference
|
|
213
|
+
let readableController;
|
|
214
|
+
const readable = new NativeReadableStream({
|
|
215
|
+
start: (controller) => {
|
|
216
|
+
readableController = controller;
|
|
217
|
+
},
|
|
218
|
+
});
|
|
219
|
+
// Create a WritableStream that pushes chunks to the ReadableStream
|
|
220
|
+
this.writable = new NativeWritableStream({
|
|
221
|
+
write: (chunk) => {
|
|
222
|
+
readableController.enqueue(chunk);
|
|
223
|
+
this.total += chunk.length;
|
|
224
|
+
},
|
|
225
|
+
close: () => {
|
|
226
|
+
readableController.close();
|
|
227
|
+
},
|
|
228
|
+
abort: (reason) => {
|
|
229
|
+
readableController.error(reason);
|
|
230
|
+
},
|
|
231
|
+
});
|
|
232
|
+
// If compression is enabled and available, pipe through gzip
|
|
233
|
+
// Gracefully skip compression if CompressionStream is not available
|
|
234
|
+
let bodyStream = readable;
|
|
235
|
+
this.compressionEnabled = !!(this.props?.compress && isCompressionAvailable());
|
|
236
|
+
if (this.compressionEnabled) {
|
|
237
|
+
const compressionStream = new NativeCompressionStream('gzip');
|
|
238
|
+
bodyStream = readable.pipeThrough(compressionStream);
|
|
239
|
+
}
|
|
204
240
|
// Start the PUT request with the readable stream as body
|
|
205
241
|
const headers = {
|
|
206
242
|
'Content-Type': this.props?.contentType || 'application/octet-stream',
|
|
207
243
|
};
|
|
208
|
-
if (this.
|
|
244
|
+
if (this.compressionEnabled) {
|
|
209
245
|
headers['Content-Encoding'] = 'gzip';
|
|
210
246
|
}
|
|
211
247
|
this.putRequestPromise = this.adapter.invoke(this.url, {
|
|
212
248
|
method: 'PUT',
|
|
213
249
|
headers,
|
|
214
|
-
body:
|
|
250
|
+
body: bodyStream,
|
|
215
251
|
signal: this.abortController.signal,
|
|
216
252
|
duplex: 'half',
|
|
217
253
|
});
|
|
254
|
+
// Acquire writer immediately to prevent race conditions in concurrent write() calls
|
|
255
|
+
this.writer = this.writable.getWriter();
|
|
256
|
+
return this.writable;
|
|
218
257
|
}
|
|
219
258
|
async write(chunk) {
|
|
220
259
|
if (!this.writer) {
|
|
221
260
|
throw new StreamWriterInitializationError();
|
|
222
261
|
}
|
|
223
|
-
|
|
224
|
-
let binaryChunk;
|
|
225
|
-
if (chunk instanceof Uint8Array) {
|
|
226
|
-
binaryChunk = chunk;
|
|
227
|
-
}
|
|
228
|
-
else if (typeof chunk === 'string') {
|
|
229
|
-
binaryChunk = new TextEncoder().encode(chunk);
|
|
230
|
-
}
|
|
231
|
-
else if (chunk instanceof ArrayBuffer) {
|
|
232
|
-
binaryChunk = new Uint8Array(chunk);
|
|
233
|
-
}
|
|
234
|
-
else if (typeof chunk === 'object' && chunk !== null) {
|
|
235
|
-
// Convert objects to JSON string, then to bytes
|
|
236
|
-
binaryChunk = new TextEncoder().encode(safeStringify(chunk));
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
// Handle primitive types (number, boolean, etc.)
|
|
240
|
-
binaryChunk = new TextEncoder().encode(String(chunk));
|
|
241
|
-
}
|
|
242
|
-
// Write the chunk to the transform stream, which pipes to the PUT request
|
|
243
|
-
await this.writer.write(binaryChunk);
|
|
244
|
-
this.total += binaryChunk.length;
|
|
262
|
+
await this.writer.write(chunk);
|
|
245
263
|
}
|
|
246
264
|
async close() {
|
|
247
265
|
if (this.closed) {
|
|
@@ -331,8 +349,10 @@ export class StreamStorageService {
|
|
|
331
349
|
});
|
|
332
350
|
if (res.ok) {
|
|
333
351
|
const streamUrl = buildUrl(this.#baseUrl, res.data.id);
|
|
334
|
-
const
|
|
335
|
-
|
|
352
|
+
const sink = new UnderlyingSinkState(streamUrl, this.#adapter, props);
|
|
353
|
+
// Initialize the sink (start the PUT request) and get the writable stream
|
|
354
|
+
const writable = await sink.start();
|
|
355
|
+
const stream = new StreamImpl(res.data.id, streamUrl, sink.compressionEnabled, sink, writable, this.#adapter);
|
|
336
356
|
return stream;
|
|
337
357
|
}
|
|
338
358
|
throw await toServiceException('POST', url, res.response);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/services/stream.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/services/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,+FAA+F;AAC/F,uCAAuC;AACvC,6DAA6D;AAC7D,MAAM,MAAM,GACX,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;AAC7F,iEAAiE;AACjE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9D,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAuC,CAAC;AAC/E,MAAM,oBAAoB,GAAG,SAAS,CAAC,cAAuC,CAAC;AAC/E,MAAM,uBAAuB,GAAG,CAAC,SAAS,CAAC,iBAAiB;IAC3D,UAAU,CAAC,iBAAiB,CAA6B,CAAC;AAoQ3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,MAAM,qBAAqB,GAAG,eAAe,CAAC,uBAAuB,CAAC,EAAsB,CAAC;AAE7F;;;GAGG;AACH,MAAM,UAAU;IACC,EAAE,CAAS;IACX,GAAG,CAAS;IACnB,SAAS,CAA6B;IAC/C,WAAW,CAAU;IACrB,QAAQ,CAAe;IACvB,KAAK,CAAsB;IAC3B,OAAO,GAAG,KAAK,CAAC;IAEhB,YACC,EAAU,EACV,GAAW,EACX,UAAmB,EACnB,IAAyB,EACzB,QAAoC,EACpC,OAAqB;QAErB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,IAAI,YAAY;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,IAAI,UAAU;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,KAAiD;QAC5D,IAAI,WAAuB,CAAC;QAC5B,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YACjC,WAAW,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACzC,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACxD,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACP,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;QAED,iDAAiD;QACjD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,2EAA2E;YAC3E,4EAA4E;YAC5E,IACC,KAAK,YAAY,SAAS;gBAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAChC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;oBACjC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EACvC,CAAC;gBACF,iDAAiD;gBACjD,OAAO;YACR,CAAC;YACD,8DAA8D;YAC9D,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpE,yCAAyC;gBACzC,OAAO;YACR,CAAC;YACD,4BAA4B;YAC5B,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAgB;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,SAAS;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,SAAS;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,EAAE,GAA2B,IAAI,CAAC;QACtC,2DAA2D;QAC3D,OAAO,IAAI,oBAAoB,CAAC;YAC/B,KAAK,CAAC,KAAK,CAAC,UAAU;gBACrB,IAAI,CAAC;oBACJ,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;wBACrC,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,MAAM,EAAE,IAAI;qBACZ,CAAC,CAAC;oBAEH,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;oBAE9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;wBACb,UAAU,CAAC,KAAK,CACf,IAAI,qBAAqB,CAAC;4BACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,OAAO,EAAE,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;yBAC3E,CAAC,CACF,CAAC;wBACF,OAAO;oBACR,CAAC;oBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;wBACpB,UAAU,CAAC,KAAK,CACf,IAAI,qBAAqB,CAAC;4BACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,OAAO,EAAE,wBAAwB;yBACjC,CAAC,CACF,CAAC;wBACF,OAAO;oBACR,CAAC;oBAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACzC,IAAI,CAAC;wBACJ,mDAAmD;wBACnD,OAAO,IAAI,EAAE,CAAC;4BACb,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;4BAC5C,IAAI,IAAI;gCAAE,MAAM;4BAChB,IAAI,KAAK;gCAAE,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACtC,CAAC;wBACD,UAAU,CAAC,KAAK,EAAE,CAAC;oBACpB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBAChB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACzB,CAAC;gBACF,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,CAAC;YACF,CAAC;YACD,MAAM,CAAC,MAAgB;gBACtB,IAAI,EAAE,EAAE,CAAC;oBACR,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjB,EAAE,GAAG,IAAI,CAAC;gBACX,CAAC;YACF,CAAC;SACD,CAAC,CAAC;IACJ,CAAC;CACD;AAED,MAAM,+BAA+B,GAAG,eAAe,CACtD,iCAAiC,EACjC,kCAAkC,CAClC,CAAC;AAEF,MAAM,cAAc,GAAG,eAAe,CAAC,gBAAgB,CAAC,EAAsB,CAAC;AAE/E;;;;;;;GAOG;AACH,SAAS,sBAAsB;IAC9B,OAAO,OAAO,uBAAuB,KAAK,WAAW,IAAI,uBAAuB,KAAK,IAAI,CAAC;AAC3F,CAAC;AAED,gEAAgE;AAChE,wDAAwD;AACxD,MAAM,mBAAmB;IACxB,OAAO,CAAe;IACtB,eAAe,GAA2B,IAAI,CAAC;IAC/C,MAAM,GAAmD,IAAI,CAAC;IAC9D,QAAQ,GAAsC,IAAI,CAAC;IACnD,iBAAiB,GAA2C,IAAI,CAAC;IACjE,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,KAAK,CAAC;IACf,GAAG,CAAS;IACZ,KAAK,CAAqB;IAC1B,kBAAkB,GAAG,KAAK,CAAC;IAE3B,YAAY,GAAW,EAAE,OAAqB,EAAE,KAAyB;QACxE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,KAAK;QACV,+CAA+C;QAC/C,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAE7C,uEAAuE;QACvE,4EAA4E;QAC5E,IAAI,kBAA+D,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAa;YACrD,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE;gBACrB,kBAAkB,GAAG,UAAU,CAAC;YACjC,CAAC;SACD,CAAC,CAAC;QAEH,mEAAmE;QACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAa;YACpD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChB,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACX,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;gBACjB,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,CAAC;SACD,CAAC,CAAC;QAEH,6DAA6D;QAC7D,oEAAoE;QACpE,IAAI,UAAU,GAA+B,QAAQ,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,sBAAsB,EAAE,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAC9D,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACtD,CAAC;QAED,yDAAyD;QACzD,MAAM,OAAO,GAA2B;YACvC,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,0BAA0B;SACrE,CAAC;QAEF,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACtD,MAAM,EAAE,KAAK;YACb,OAAO;YACP,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM;YACnC,MAAM,EAAE,MAAM;SACd,CAAC,CAAC;QAEH,oFAAoF;QACpF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAExC,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAiB;QAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,IAAI,+BAA+B,EAAE,CAAC;QAC7C,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,CAAC;QAED,uCAAuC;QACvC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACJ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC;gBACzC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACb,MAAM,IAAI,cAAc,CAAC;wBACxB,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM;wBAC3B,OAAO,EAAE,uBAAuB,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE;qBAChF,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC3D,MAAM,KAAK,CAAC;gBACb,CAAC;YACF,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,MAAgB;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,0BAA0B;QAC1B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC/B,CAAC;CACD;AAED,MAAM,sBAAsB,GAAG,eAAe,CAC7C,wBAAwB,EACxB,kDAAkD,CAClD,CAAC;AAEF,MAAM,uBAAuB,GAAG,eAAe,CAC9C,yBAAyB,EACzB,oEAAoE,CACpE,CAAC;AAEF,MAAM,qBAAqB,GAAG,eAAe,CAC5C,uBAAuB,EACvB,sDAAsD,CACtD,CAAC;AAEF,MAAM,OAAO,oBAAoB;IAChC,QAAQ,CAAe;IACvB,QAAQ,CAAS;IAEjB,YAAY,OAAe,EAAE,OAAqB;QACjD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,KAAyB;QACnD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACnD,MAAM,IAAI,sBAAsB,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1B,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,UAAU,GAA2B;YAC1C,IAAI;SACJ,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;YACzB,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,CAAC,WAAW,GAAG,0BAA0B,CAAC;QAChD,CAAC;QACD,IAAI,KAAK,EAAE,QAAQ,EAAE,CAAC;YACrB,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;YACxB,UAAU,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,IAAI;YACJ,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpD,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SAC7D,CAAC,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAiB,GAAG,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,WAAW,EAAE,kBAAkB;YAC/B,MAAM;YACN,SAAS,EAAE;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,UAAU;aACV;SACD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACtE,0EAA0E;YAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAEpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAC5B,GAAG,CAAC,IAAI,CAAC,EAAE,EACX,SAAS,EACT,IAAI,CAAC,kBAAkB,EACvB,IAAI,EACJ,QAAQ,EACR,IAAI,CAAC,QAAQ,CACb,CAAC;YAEF,OAAO,MAAM,CAAC;QACf,CAAC;QACD,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA0B;QACpC,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC;gBAC9C,MAAM,IAAI,uBAAuB,EAAE,CAAC;YACrC,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACtB,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,WAAW,GAA4B,EAAE,CAAC;QAChD,IAAI,MAAM,EAAE,IAAI,EAAE,CAAC;YAClB,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QAChC,CAAC;QACD,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACtB,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACxC,CAAC;QACD,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC;YACnB,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAClC,CAAC;QACD,IAAI,MAAM,EAAE,MAAM,EAAE,CAAC;YACpB,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,CAAC;QAED,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAWnC,GAAG,EAAE;YACP,MAAM,EAAE,MAAM;YACd,MAAM;YACN,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YACjC,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE;gBACV,IAAI,EAAE,uBAAuB;gBAC7B,UAAU;aACV;SACD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,kDAAkD;YAClD,OAAO;gBACN,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO;gBACzB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO;gBACzB,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACrC,EAAE,EAAE,CAAC,CAAC,EAAE;oBACR,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,SAAS,EAAE,CAAC,CAAC,UAAU;iBACvB,CAAC,CAAC;gBACH,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK;aACrB,CAAC;QACH,CAAC;QACD,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QACnB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAMnC,GAAG,EAAE;YACP,MAAM,EAAE,MAAM;YACd,MAAM;YACN,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,kBAAkB;YAC/B,SAAS,EAAE;gBACV,IAAI,EAAE,sBAAsB;gBAC5B,UAAU,EAAE;oBACX,WAAW,EAAE,EAAE;iBACf;aACD;SACD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO;gBACN,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE;gBACf,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI;gBACnB,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ;gBAC3B,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG;gBACjB,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU;aAC9B,CAAC;QACH,CAAC;QACD,MAAM,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACxB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;QACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,MAAM;YACN,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACV,IAAI,EAAE,2BAA2B;gBACjC,UAAU,EAAE;oBACX,WAAW,EAAE,EAAE;iBACf;aACD;SACD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1B,CAAC;QACD,MAAM,MAAM,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAU;QACtB,IAAI,CAAC,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,qBAAqB,EAAE,CAAC;QACnC,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAO,GAAG,EAAE;YACjD,MAAM,EAAE,QAAQ;YAChB,MAAM;YACN,SAAS,EAAE;gBACV,IAAI,EAAE,yBAAyB;gBAC/B,UAAU,EAAE;oBACX,WAAW,EAAE,EAAE;iBACf;aACD;SACD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO;QACR,CAAC;QACD,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CACD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentuity/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.105",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "Agentuity employees and contributors",
|
|
6
6
|
"type": "module",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"zod": "^4.1.12"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@agentuity/test-utils": "0.0.
|
|
35
|
+
"@agentuity/test-utils": "0.0.105",
|
|
36
36
|
"@types/bun": "latest",
|
|
37
37
|
"bun-types": "latest",
|
|
38
38
|
"typescript": "^5.9.0"
|
package/src/services/stream.ts
CHANGED
|
@@ -2,10 +2,18 @@ import { safeStringify } from '../json';
|
|
|
2
2
|
import { FetchAdapter, FetchResponse } from './adapter';
|
|
3
3
|
import { buildUrl, toServiceException } from './_util';
|
|
4
4
|
import { StructuredError } from '../error';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
|
|
6
|
+
// Use Web API streams - in Node.js/Bun, import from 'stream/web' which provides proper Web API
|
|
7
|
+
// In browsers, use globalThis directly
|
|
8
|
+
// Check for Node.js/Bun by looking for process.versions.node
|
|
9
|
+
const isNode =
|
|
10
|
+
typeof process !== 'undefined' && process.versions != null && process.versions.node != null;
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
12
|
+
const streamWeb = isNode ? require('stream/web') : globalThis;
|
|
13
|
+
const NativeWritableStream = streamWeb.WritableStream as typeof WritableStream;
|
|
14
|
+
const NativeReadableStream = streamWeb.ReadableStream as typeof ReadableStream;
|
|
15
|
+
const NativeCompressionStream = (streamWeb.CompressionStream ??
|
|
16
|
+
globalThis.CompressionStream) as typeof CompressionStream;
|
|
9
17
|
|
|
10
18
|
/**
|
|
11
19
|
* Properties for creating a stream
|
|
@@ -270,29 +278,32 @@ const encoder = new TextEncoder();
|
|
|
270
278
|
const ReadStreamFailedError = StructuredError('ReadStreamFailedError')<{ status: number }>();
|
|
271
279
|
|
|
272
280
|
/**
|
|
273
|
-
* A writable stream implementation
|
|
281
|
+
* A writable stream implementation using composition (browser-compatible)
|
|
282
|
+
* This approach works across all environments since native WritableStream can't be properly extended
|
|
274
283
|
*/
|
|
275
|
-
class StreamImpl
|
|
284
|
+
class StreamImpl implements Stream {
|
|
276
285
|
public readonly id: string;
|
|
277
286
|
public readonly url: string;
|
|
278
|
-
#
|
|
287
|
+
readonly #writable: WritableStream<Uint8Array>;
|
|
279
288
|
#compressed: boolean;
|
|
280
289
|
#adapter: FetchAdapter;
|
|
281
|
-
#sink:
|
|
290
|
+
#sink: UnderlyingSinkState;
|
|
291
|
+
#closed = false;
|
|
282
292
|
|
|
283
293
|
constructor(
|
|
284
294
|
id: string,
|
|
285
295
|
url: string,
|
|
286
296
|
compressed: boolean,
|
|
287
|
-
|
|
297
|
+
sink: UnderlyingSinkState,
|
|
298
|
+
writable: WritableStream<Uint8Array>,
|
|
288
299
|
adapter: FetchAdapter
|
|
289
300
|
) {
|
|
290
|
-
super(underlyingSink);
|
|
291
301
|
this.id = id;
|
|
292
302
|
this.url = url;
|
|
293
303
|
this.#compressed = compressed;
|
|
294
304
|
this.#adapter = adapter;
|
|
295
|
-
this.#sink =
|
|
305
|
+
this.#sink = sink;
|
|
306
|
+
this.#writable = writable;
|
|
296
307
|
}
|
|
297
308
|
|
|
298
309
|
get bytesWritten(): number {
|
|
@@ -303,6 +314,11 @@ class StreamImpl extends WebWritableStream implements Stream {
|
|
|
303
314
|
return this.#compressed;
|
|
304
315
|
}
|
|
305
316
|
|
|
317
|
+
// WritableStream interface properties
|
|
318
|
+
get locked(): boolean {
|
|
319
|
+
return this.#writable.locked;
|
|
320
|
+
}
|
|
321
|
+
|
|
306
322
|
/**
|
|
307
323
|
* Write data to the stream
|
|
308
324
|
*/
|
|
@@ -320,29 +336,21 @@ class StreamImpl extends WebWritableStream implements Stream {
|
|
|
320
336
|
binaryChunk = encoder.encode(String(chunk));
|
|
321
337
|
}
|
|
322
338
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
await this.#activeWriter.write(binaryChunk);
|
|
339
|
+
// Delegate to the underlying sink's write method
|
|
340
|
+
await this.#sink.write(binaryChunk);
|
|
327
341
|
}
|
|
328
342
|
|
|
329
343
|
/**
|
|
330
|
-
*
|
|
331
|
-
* This method safely closes the stream, or silently returns if already closed
|
|
344
|
+
* Close the stream gracefully, handling already closed streams without error
|
|
332
345
|
*/
|
|
333
346
|
async close(): Promise<void> {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
this.#activeWriter = null;
|
|
339
|
-
await writer.close();
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
347
|
+
if (this.#closed) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
this.#closed = true;
|
|
342
351
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
await writer.close();
|
|
352
|
+
try {
|
|
353
|
+
await this.#sink.close();
|
|
346
354
|
} catch (error) {
|
|
347
355
|
// If we get a TypeError about the stream being closed, locked, or errored,
|
|
348
356
|
// that means pipeTo() or another operation already closed it or it's in use
|
|
@@ -353,18 +361,32 @@ class StreamImpl extends WebWritableStream implements Stream {
|
|
|
353
361
|
error.message.includes('Cannot close'))
|
|
354
362
|
) {
|
|
355
363
|
// Silently return - this is the desired behavior
|
|
356
|
-
return
|
|
364
|
+
return;
|
|
357
365
|
}
|
|
358
366
|
// If the stream is locked, try to close the underlying writer
|
|
359
367
|
if (error instanceof TypeError && error.message.includes('locked')) {
|
|
360
368
|
// Best-effort closure for locked streams
|
|
361
|
-
return
|
|
369
|
+
return;
|
|
362
370
|
}
|
|
363
371
|
// Re-throw any other errors
|
|
364
372
|
throw error;
|
|
365
373
|
}
|
|
366
374
|
}
|
|
367
375
|
|
|
376
|
+
/**
|
|
377
|
+
* Abort the stream with an optional reason
|
|
378
|
+
*/
|
|
379
|
+
abort(reason?: unknown): Promise<void> {
|
|
380
|
+
return this.#writable.abort(reason);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Get a writer for the underlying stream
|
|
385
|
+
*/
|
|
386
|
+
getWriter(): WritableStreamDefaultWriter<Uint8Array> {
|
|
387
|
+
return this.#writable.getWriter();
|
|
388
|
+
}
|
|
389
|
+
|
|
368
390
|
/**
|
|
369
391
|
* Get a ReadableStream that streams from the internal URL
|
|
370
392
|
*
|
|
@@ -377,7 +399,8 @@ class StreamImpl extends WebWritableStream implements Stream {
|
|
|
377
399
|
const url = this.url;
|
|
378
400
|
const adapter = this.#adapter;
|
|
379
401
|
let ac: AbortController | null = null;
|
|
380
|
-
|
|
402
|
+
// Use native ReadableStream to avoid polyfill interference
|
|
403
|
+
return new NativeReadableStream({
|
|
381
404
|
async start(controller) {
|
|
382
405
|
try {
|
|
383
406
|
ac = new AbortController();
|
|
@@ -442,17 +465,31 @@ const StreamWriterInitializationError = StructuredError(
|
|
|
442
465
|
|
|
443
466
|
const StreamAPIError = StructuredError('StreamAPIError')<{ status: number }>();
|
|
444
467
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
468
|
+
/**
|
|
469
|
+
* Check if compression is available in the current environment.
|
|
470
|
+
* CompressionStream is available in:
|
|
471
|
+
* - Node.js 18+ (via stream/web)
|
|
472
|
+
* - Chrome 80+
|
|
473
|
+
* - Safari 16.4+
|
|
474
|
+
* - Firefox 113+
|
|
475
|
+
*/
|
|
476
|
+
function isCompressionAvailable(): boolean {
|
|
477
|
+
return typeof NativeCompressionStream !== 'undefined' && NativeCompressionStream !== null;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// State object that handles the actual streaming to the backend
|
|
481
|
+
// This is used by StreamImpl to manage write operations
|
|
482
|
+
class UnderlyingSinkState {
|
|
448
483
|
adapter: FetchAdapter;
|
|
449
484
|
abortController: AbortController | null = null;
|
|
450
485
|
writer: WritableStreamDefaultWriter<Uint8Array> | null = null;
|
|
486
|
+
writable: WritableStream<Uint8Array> | null = null;
|
|
451
487
|
putRequestPromise: Promise<FetchResponse<unknown>> | null = null;
|
|
452
488
|
total = 0;
|
|
453
489
|
closed = false;
|
|
454
490
|
url: string;
|
|
455
491
|
props?: CreateStreamProps;
|
|
492
|
+
compressionEnabled = false;
|
|
456
493
|
|
|
457
494
|
constructor(url: string, adapter: FetchAdapter, props?: CreateStreamProps) {
|
|
458
495
|
this.url = url;
|
|
@@ -460,94 +497,83 @@ class UnderlyingSink {
|
|
|
460
497
|
this.props = props;
|
|
461
498
|
}
|
|
462
499
|
|
|
463
|
-
async start() {
|
|
500
|
+
async start(): Promise<WritableStream<Uint8Array>> {
|
|
464
501
|
// Create AbortController for the fetch request
|
|
465
502
|
this.abortController = new AbortController();
|
|
466
503
|
|
|
467
|
-
// Create a
|
|
468
|
-
//
|
|
469
|
-
let
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
});
|
|
490
|
-
|
|
491
|
-
// Chain: writable -> gzip -> compressedReadable
|
|
492
|
-
readable.pipeTo(nodeWritable).catch((error) => {
|
|
493
|
-
this.abortController?.abort(error);
|
|
494
|
-
this.writer?.abort(error).catch(() => {});
|
|
495
|
-
});
|
|
496
|
-
readable = compressedReadable;
|
|
497
|
-
}
|
|
504
|
+
// Create a pass-through WritableStream that writes to a ReadableStream
|
|
505
|
+
// Use native streams captured at module load to avoid polyfill interference
|
|
506
|
+
let readableController: ReadableStreamDefaultController<Uint8Array>;
|
|
507
|
+
const readable = new NativeReadableStream<Uint8Array>({
|
|
508
|
+
start: (controller) => {
|
|
509
|
+
readableController = controller;
|
|
510
|
+
},
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
// Create a WritableStream that pushes chunks to the ReadableStream
|
|
514
|
+
this.writable = new NativeWritableStream<Uint8Array>({
|
|
515
|
+
write: (chunk) => {
|
|
516
|
+
readableController.enqueue(chunk);
|
|
517
|
+
this.total += chunk.length;
|
|
518
|
+
},
|
|
519
|
+
close: () => {
|
|
520
|
+
readableController.close();
|
|
521
|
+
},
|
|
522
|
+
abort: (reason) => {
|
|
523
|
+
readableController.error(reason);
|
|
524
|
+
},
|
|
525
|
+
});
|
|
498
526
|
|
|
499
|
-
|
|
527
|
+
// If compression is enabled and available, pipe through gzip
|
|
528
|
+
// Gracefully skip compression if CompressionStream is not available
|
|
529
|
+
let bodyStream: ReadableStream<Uint8Array> = readable;
|
|
530
|
+
this.compressionEnabled = !!(this.props?.compress && isCompressionAvailable());
|
|
531
|
+
if (this.compressionEnabled) {
|
|
532
|
+
const compressionStream = new NativeCompressionStream('gzip');
|
|
533
|
+
bodyStream = readable.pipeThrough(compressionStream);
|
|
534
|
+
}
|
|
500
535
|
|
|
501
536
|
// Start the PUT request with the readable stream as body
|
|
502
537
|
const headers: Record<string, string> = {
|
|
503
538
|
'Content-Type': this.props?.contentType || 'application/octet-stream',
|
|
504
539
|
};
|
|
505
540
|
|
|
506
|
-
if (this.
|
|
541
|
+
if (this.compressionEnabled) {
|
|
507
542
|
headers['Content-Encoding'] = 'gzip';
|
|
508
543
|
}
|
|
509
544
|
|
|
510
545
|
this.putRequestPromise = this.adapter.invoke(this.url, {
|
|
511
546
|
method: 'PUT',
|
|
512
547
|
headers,
|
|
513
|
-
body:
|
|
548
|
+
body: bodyStream,
|
|
514
549
|
signal: this.abortController.signal,
|
|
515
550
|
duplex: 'half',
|
|
516
551
|
});
|
|
552
|
+
|
|
553
|
+
// Acquire writer immediately to prevent race conditions in concurrent write() calls
|
|
554
|
+
this.writer = this.writable.getWriter();
|
|
555
|
+
|
|
556
|
+
return this.writable;
|
|
517
557
|
}
|
|
518
558
|
|
|
519
|
-
async write(chunk:
|
|
559
|
+
async write(chunk: Uint8Array) {
|
|
520
560
|
if (!this.writer) {
|
|
521
561
|
throw new StreamWriterInitializationError();
|
|
522
562
|
}
|
|
523
|
-
|
|
524
|
-
let binaryChunk: Uint8Array;
|
|
525
|
-
if (chunk instanceof Uint8Array) {
|
|
526
|
-
binaryChunk = chunk;
|
|
527
|
-
} else if (typeof chunk === 'string') {
|
|
528
|
-
binaryChunk = new TextEncoder().encode(chunk);
|
|
529
|
-
} else if (chunk instanceof ArrayBuffer) {
|
|
530
|
-
binaryChunk = new Uint8Array(chunk);
|
|
531
|
-
} else if (typeof chunk === 'object' && chunk !== null) {
|
|
532
|
-
// Convert objects to JSON string, then to bytes
|
|
533
|
-
binaryChunk = new TextEncoder().encode(safeStringify(chunk));
|
|
534
|
-
} else {
|
|
535
|
-
// Handle primitive types (number, boolean, etc.)
|
|
536
|
-
binaryChunk = new TextEncoder().encode(String(chunk));
|
|
537
|
-
}
|
|
538
|
-
// Write the chunk to the transform stream, which pipes to the PUT request
|
|
539
|
-
await this.writer.write(binaryChunk);
|
|
540
|
-
this.total += binaryChunk.length;
|
|
563
|
+
await this.writer.write(chunk);
|
|
541
564
|
}
|
|
565
|
+
|
|
542
566
|
async close() {
|
|
543
567
|
if (this.closed) {
|
|
544
568
|
return;
|
|
545
569
|
}
|
|
546
570
|
this.closed = true;
|
|
571
|
+
|
|
547
572
|
if (this.writer) {
|
|
548
573
|
await this.writer.close();
|
|
549
574
|
this.writer = null;
|
|
550
575
|
}
|
|
576
|
+
|
|
551
577
|
// Wait for the PUT request to complete
|
|
552
578
|
if (this.putRequestPromise) {
|
|
553
579
|
try {
|
|
@@ -641,13 +667,16 @@ export class StreamStorageService implements StreamStorage {
|
|
|
641
667
|
});
|
|
642
668
|
if (res.ok) {
|
|
643
669
|
const streamUrl = buildUrl(this.#baseUrl, res.data.id);
|
|
644
|
-
const
|
|
670
|
+
const sink = new UnderlyingSinkState(streamUrl, this.#adapter, props);
|
|
671
|
+
// Initialize the sink (start the PUT request) and get the writable stream
|
|
672
|
+
const writable = await sink.start();
|
|
645
673
|
|
|
646
674
|
const stream = new StreamImpl(
|
|
647
675
|
res.data.id,
|
|
648
676
|
streamUrl,
|
|
649
|
-
|
|
650
|
-
|
|
677
|
+
sink.compressionEnabled,
|
|
678
|
+
sink,
|
|
679
|
+
writable,
|
|
651
680
|
this.#adapter
|
|
652
681
|
);
|
|
653
682
|
|