@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 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":"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"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/services/stream.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,37 @@
1
1
  import { safeStringify } from '../json';
2
2
  import { buildUrl, toServiceException } from './_util';
3
3
  import { StructuredError } from '../error';
4
- import { WritableStream as WebWritableStream, TransformStream as WebTransformStream, } from 'stream/web';
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 that extends WritableStream
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 extends WebWritableStream {
20
+ class StreamImpl {
11
21
  id;
12
22
  url;
13
- #activeWriter = null;
23
+ #writable;
14
24
  #compressed;
15
25
  #adapter;
16
26
  #sink;
17
- constructor(id, url, compressed, underlyingSink, adapter) {
18
- super(underlyingSink);
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 = underlyingSink;
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
- if (!this.#activeWriter) {
52
- this.#activeWriter = super.getWriter();
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
- * Override close to handle already closed streams gracefully
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
- // If we have an active writer from write() calls, use that
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 Promise.resolve();
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 Promise.resolve();
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
- return new ReadableStream({
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
- // Create a WritableStream that writes to the backend stream
160
- // Create the underlying sink that will handle the actual streaming
161
- class UnderlyingSink {
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 ReadableStream to pipe data to the PUT request
179
- // eslint-disable-next-line prefer-const
180
- let { readable, writable } = new WebTransformStream();
181
- // If compression is enabled, add gzip transform
182
- if (this.props?.compress) {
183
- const { Readable, Writable } = await import('node:stream');
184
- // Create a new transform for the compressed output
185
- const { readable: compressedReadable, writable: compressedWritable } = new WebTransformStream();
186
- // Set up compression pipeline
187
- const { createGzip } = await import('node:zlib');
188
- const gzipStream = createGzip();
189
- const nodeWritable = Writable.toWeb(gzipStream);
190
- // Pipe gzip output to the compressed readable
191
- const gzipReader = Readable.toWeb(gzipStream);
192
- gzipReader.pipeTo(compressedWritable).catch((error) => {
193
- this.abortController?.abort(error);
194
- this.writer?.abort(error).catch(() => { });
195
- });
196
- // Chain: writable -> gzip -> compressedReadable
197
- readable.pipeTo(nodeWritable).catch((error) => {
198
- this.abortController?.abort(error);
199
- this.writer?.abort(error).catch(() => { });
200
- });
201
- readable = compressedReadable;
202
- }
203
- this.writer = writable.getWriter();
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.props?.compress) {
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: readable,
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
- // Convert input to Uint8Array if needed
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 underlyingSink = new UnderlyingSink(streamUrl, this.#adapter, props);
335
- const stream = new StreamImpl(res.data.id, streamUrl, props?.compress ?? false, underlyingSink, this.#adapter);
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentuity/core",
3
- "version": "0.0.103",
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.103",
35
+ "@agentuity/test-utils": "0.0.105",
36
36
  "@types/bun": "latest",
37
37
  "bun-types": "latest",
38
38
  "typescript": "^5.9.0"
@@ -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
- import {
6
- WritableStream as WebWritableStream,
7
- TransformStream as WebTransformStream,
8
- } from 'stream/web';
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 that extends WritableStream
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 extends WebWritableStream implements Stream {
284
+ class StreamImpl implements Stream {
276
285
  public readonly id: string;
277
286
  public readonly url: string;
278
- #activeWriter: WritableStreamDefaultWriter<Uint8Array> | null = null;
287
+ readonly #writable: WritableStream<Uint8Array>;
279
288
  #compressed: boolean;
280
289
  #adapter: FetchAdapter;
281
- #sink: UnderlyingSink;
290
+ #sink: UnderlyingSinkState;
291
+ #closed = false;
282
292
 
283
293
  constructor(
284
294
  id: string,
285
295
  url: string,
286
296
  compressed: boolean,
287
- underlyingSink: UnderlyingSink,
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 = underlyingSink;
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
- if (!this.#activeWriter) {
324
- this.#activeWriter = super.getWriter();
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
- * Override close to handle already closed streams gracefully
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
- try {
335
- // If we have an active writer from write() calls, use that
336
- if (this.#activeWriter) {
337
- const writer = this.#activeWriter;
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
- // Otherwise, get a writer and close it
344
- const writer = super.getWriter();
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 Promise.resolve();
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 Promise.resolve();
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
- return new ReadableStream({
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
- // Create a WritableStream that writes to the backend stream
446
- // Create the underlying sink that will handle the actual streaming
447
- class UnderlyingSink {
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 ReadableStream to pipe data to the PUT request
468
- // eslint-disable-next-line prefer-const
469
- let { readable, writable } = new WebTransformStream<Uint8Array, Uint8Array>();
470
-
471
- // If compression is enabled, add gzip transform
472
- if (this.props?.compress) {
473
- const { Readable, Writable } = await import('node:stream');
474
-
475
- // Create a new transform for the compressed output
476
- const { readable: compressedReadable, writable: compressedWritable } =
477
- new WebTransformStream<Uint8Array, Uint8Array>();
478
-
479
- // Set up compression pipeline
480
- const { createGzip } = await import('node:zlib');
481
- const gzipStream = createGzip();
482
- const nodeWritable = Writable.toWeb(gzipStream) as WritableStream<Uint8Array>;
483
-
484
- // Pipe gzip output to the compressed readable
485
- const gzipReader = Readable.toWeb(gzipStream) as ReadableStream<Uint8Array>;
486
- gzipReader.pipeTo(compressedWritable).catch((error) => {
487
- this.abortController?.abort(error);
488
- this.writer?.abort(error).catch(() => {});
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
- this.writer = writable.getWriter();
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.props?.compress) {
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: readable,
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: string | Uint8Array | ArrayBuffer | Buffer | object) {
559
+ async write(chunk: Uint8Array) {
520
560
  if (!this.writer) {
521
561
  throw new StreamWriterInitializationError();
522
562
  }
523
- // Convert input to Uint8Array if needed
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 underlyingSink = new UnderlyingSink(streamUrl, this.#adapter, props);
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
- props?.compress ?? false,
650
- underlyingSink,
677
+ sink.compressionEnabled,
678
+ sink,
679
+ writable,
651
680
  this.#adapter
652
681
  );
653
682