stitchkit 0.110.6 → 0.111.0

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/agent-runtime/sandbox-broker.d.ts.map +1 -1
  3. package/dist/browser/stream.d.ts +3 -2
  4. package/dist/browser/stream.d.ts.map +1 -1
  5. package/dist/contract/runtime-context.d.ts +3 -1
  6. package/dist/contract/runtime-context.d.ts.map +1 -1
  7. package/dist/entrypoints/agent-runtime/sandbox.js +13 -27
  8. package/dist/entrypoints/bin/upgrade-cli.d.ts.map +1 -1
  9. package/dist/entrypoints/bin/upgrade-cli.js +123 -29
  10. package/dist/entrypoints/cli/publish.js +1 -1
  11. package/dist/entrypoints/cli.js +2 -2
  12. package/dist/entrypoints/http.d.ts +2 -0
  13. package/dist/entrypoints/http.d.ts.map +1 -1
  14. package/dist/entrypoints/http.js +5 -1
  15. package/dist/entrypoints/index.d.ts +1 -0
  16. package/dist/entrypoints/index.d.ts.map +1 -1
  17. package/dist/entrypoints/index.js +5 -1
  18. package/dist/entrypoints/node.d.ts +1 -0
  19. package/dist/entrypoints/node.d.ts.map +1 -1
  20. package/dist/entrypoints/node.js +3 -1
  21. package/dist/entrypoints/observability.js +24 -9
  22. package/dist/entrypoints/remote.js +1 -1
  23. package/dist/entrypoints/server.d.ts +1 -0
  24. package/dist/entrypoints/server.d.ts.map +1 -1
  25. package/dist/entrypoints/server.js +24 -3
  26. package/dist/entrypoints/telegram.js +3 -3
  27. package/dist/entrypoints/testing.js +1 -1
  28. package/dist/entrypoints/tools/connections.js +16 -31
  29. package/dist/entrypoints/tools.js +39 -7
  30. package/dist/{index-jk44mbqb.js → index-1y0arq4z.js} +3 -57
  31. package/dist/index-cjbn98zt.js +68 -0
  32. package/dist/{index-s0xbnpfh.js → index-kdnfe0sr.js} +1 -1
  33. package/dist/{index-s6d8zsha.js → index-krng2a5j.js} +64 -110
  34. package/dist/index-qndsr7f0.js +55 -0
  35. package/dist/{index-n7hrpngg.js → index-syzngt7v.js} +1 -1
  36. package/dist/{index-3h0ztg0z.js → index-t65erk4z.js} +5 -21
  37. package/dist/internal/bounded-body.d.ts +44 -0
  38. package/dist/internal/bounded-body.d.ts.map +1 -0
  39. package/dist/internal/bounded-lines.d.ts +1 -2
  40. package/dist/internal/bounded-lines.d.ts.map +1 -1
  41. package/dist/internal/secure-fetch.d.ts.map +1 -1
  42. package/dist/internal/stream-chunks.d.ts +13 -0
  43. package/dist/internal/stream-chunks.d.ts.map +1 -0
  44. package/dist/internal/upgrade-affects.d.ts +5 -0
  45. package/dist/internal/upgrade-affects.d.ts.map +1 -1
  46. package/dist/internal/upgrade-plan.d.ts +18 -3
  47. package/dist/internal/upgrade-plan.d.ts.map +1 -1
  48. package/dist/internal/upgrade-usage.d.ts +21 -5
  49. package/dist/internal/upgrade-usage.d.ts.map +1 -1
  50. package/dist/observability/audit.d.ts +10 -0
  51. package/dist/observability/audit.d.ts.map +1 -1
  52. package/dist/observability/event.d.ts +5 -0
  53. package/dist/observability/event.d.ts.map +1 -1
  54. package/dist/server/multipart.d.ts.map +1 -1
  55. package/dist/server/oauth/endpoints.d.ts.map +1 -1
  56. package/dist/server/oauth/provider.d.ts +5 -0
  57. package/dist/server/oauth/provider.d.ts.map +1 -1
  58. package/dist/server/raw.d.ts +6 -3
  59. package/dist/server/raw.d.ts.map +1 -1
  60. package/dist/server/request-body.d.ts.map +1 -1
  61. package/dist/server/request-completion.d.ts.map +1 -1
  62. package/dist/server/request-ingress.d.ts +31 -0
  63. package/dist/server/request-ingress.d.ts.map +1 -0
  64. package/dist/server/unix-client-body.d.ts.map +1 -1
  65. package/dist/tools/connections/limits.d.ts.map +1 -1
  66. package/llms/http.txt +3 -0
  67. package/llms/observability.txt +19 -2
  68. package/llms/server.2.txt +4 -0
  69. package/llms/server.5.txt +2 -1
  70. package/llms/server.txt +42 -0
  71. package/llms/stitchkit.2.txt +28 -0
  72. package/llms/stitchkit.txt +3 -3
  73. package/llms/tools.3.txt +1 -1
  74. package/llms/tools.txt +4 -0
  75. package/llms/{upgrading-0.101.0-0.110.0.txt → upgrading-0.101.0-0.111.0.txt} +29 -3
  76. package/llms/upgrading.txt +8 -2
  77. package/llms-full.txt +136 -8
  78. package/llms.txt +6 -6
  79. package/package.json +1 -1
@@ -10,6 +10,9 @@ import {
10
10
  withinBound,
11
11
  createBoundedSinkManager
12
12
  } from "../index-qaet40b2.js";
13
+ import {
14
+ assertPositiveSafeInteger
15
+ } from "../index-0s4xebbg.js";
13
16
  import {
14
17
  redact2,
15
18
  truncatePreview2,
@@ -108,7 +111,17 @@ function readMcpContext(value) {
108
111
  function createSinkManager(config) {
109
112
  return createBoundedSinkManager(config);
110
113
  }
114
+ async function settlePayload(payload, payloadTruncated) {
115
+ if (!payload)
116
+ return { body: undefined, truncated: false };
117
+ try {
118
+ return { body: await payload, truncated: await payloadTruncated ?? false };
119
+ } catch {
120
+ return { body: undefined, truncated: false };
121
+ }
122
+ }
111
123
  function createObservability(config) {
124
+ assertPositiveSafeInteger("request.payloadMaxBytes", config.request?.payloadMaxBytes);
112
125
  const requestManager = config.request ? createSinkManager(config.request) : undefined;
113
126
  const toolManager = config.tools ? createSinkManager(config.tools) : undefined;
114
127
  let closed = false;
@@ -117,7 +130,15 @@ function createObservability(config) {
117
130
  let unbounded;
118
131
  const request = config.request ? {
119
132
  includePayload: config.request.includePayload ?? false,
120
- complete: ({ context, statusCode, durationMs, payload, outcome }) => {
133
+ payloadMaxBytes: config.request.payloadMaxBytes,
134
+ complete: ({
135
+ context,
136
+ statusCode,
137
+ durationMs,
138
+ payload,
139
+ payloadTruncated,
140
+ outcome
141
+ }) => {
121
142
  const requestConfig = config.request;
122
143
  if (!requestConfig)
123
144
  return;
@@ -125,14 +146,7 @@ function createObservability(config) {
125
146
  if (cancelled && !requestConfig.includeCancelled)
126
147
  return;
127
148
  requestManager?.submit(async () => {
128
- let body;
129
- if (!cancelled && payload) {
130
- try {
131
- body = await payload;
132
- } catch {
133
- body = undefined;
134
- }
135
- }
149
+ const { body, truncated } = cancelled ? { body: undefined, truncated: false } : await settlePayload(payload, payloadTruncated);
136
150
  return {
137
151
  source: context.source,
138
152
  kind: context.kind ?? "request",
@@ -161,6 +175,7 @@ function createObservability(config) {
161
175
  }
162
176
  },
163
177
  payload: cancelled ? null : sanitizePayload2(body, requestConfig.sanitize),
178
+ ...truncated && { payloadTruncated: true },
164
179
  resultSize: null,
165
180
  responseBytes: 0,
166
181
  userId: context.userId,
@@ -4,7 +4,7 @@ import"../index-p6apg0jg.js";
4
4
  import {
5
5
  endpointHasArguments,
6
6
  createClient2
7
- } from "../index-jk44mbqb.js";
7
+ } from "../index-1y0arq4z.js";
8
8
  import {
9
9
  ApiError2
10
10
  } from "../index-kfjkb396.js";
@@ -28,6 +28,7 @@ export { createRateLimiter, type RateLimitConfig } from '../server/rate-limit.js
28
28
  export { errorResponse, parseBody, respondJson } from '../server/raw.js';
29
29
  export { bindRealtimeServer, type RealtimeServer, type RealtimeServerConnection, type RealtimeServerHandle, } from '../server/realtime.js';
30
30
  export { bindReleaseRefreshSignal, type ReleaseRefreshSignal, type ReleaseRefreshSignalOptions, } from '../server/release-signal.js';
31
+ export { defineRequestIngress, type RequestIngress, type RequestIngressSource, } from '../server/request-ingress.js';
31
32
  export { type ManagedServerHandle, type ShutdownOptions, ShutdownOptionsSchema, type ShutdownResult, ShutdownResultSchema, type ShutdownState, ShutdownStateSchema, type ShutdownStatus, ShutdownStatusSchema, } from '../server/shutdown.js';
32
33
  export type { SocketIOHandshakeConfig, SocketIOPeerLoaders, SocketIORequestPolicy, SocketIOServerConfig, SocketIOServerHandle, SocketIOServerLifecycle, } from '../server/socket-io.js';
33
34
  export { createSocketIOServer, socketIoLane } from '../server/socket-io.js';
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/entrypoints/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/entrypoints/server.ts"],"names":[],"mappings":"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"}
@@ -42,13 +42,14 @@ import {
42
42
  implementRegistry2,
43
43
  createImplementRegistry2,
44
44
  bindProcessSignals2,
45
+ defineRequestIngress2,
45
46
  webSocketLane2,
46
47
  composeWebSocketHandlers2,
47
48
  createSocketIOServer2,
48
49
  socketIoLane2,
49
50
  UnixClientTransportError2,
50
51
  createUnixClientTransport2
51
- } from "../index-s6d8zsha.js";
52
+ } from "../index-krng2a5j.js";
52
53
  import {
53
54
  createFileStateStore2
54
55
  } from "../index-nx49x0tw.js";
@@ -82,6 +83,13 @@ import {
82
83
  realPathWithinDir
83
84
  } from "../index-5cc6r990.js";
84
85
  import"../index-1bx1xv1k.js";
86
+ import {
87
+ readBoundedChunks,
88
+ concatChunks
89
+ } from "../index-qndsr7f0.js";
90
+ import {
91
+ assertPositiveSafeInteger
92
+ } from "../index-0s4xebbg.js";
85
93
  import {
86
94
  DEFAULT_CORS_ALLOW_HEADERS2,
87
95
  DEFAULT_CORS_EXPOSE_HEADERS2,
@@ -1695,13 +1703,25 @@ function errorResponse2(error) {
1695
1703
  res.headers.set("x-request-id", traceId);
1696
1704
  return res;
1697
1705
  }
1698
- async function parseBody(req, schema) {
1699
- const raw = await req.json().catch(() => null);
1706
+ async function parseBody(req, schema, options = {}) {
1707
+ assertPositiveSafeInteger("maxBytes", options.maxBytes);
1708
+ const raw = await readJson(req, options.maxBytes ?? DEFAULT_PARSE_BODY_BYTES);
1700
1709
  if (raw === null)
1701
1710
  return null;
1702
1711
  const parsed = schema.safeParse(raw);
1703
1712
  return parsed.success ? parsed.data : null;
1704
1713
  }
1714
+ var DEFAULT_PARSE_BODY_BYTES = 1024 * 1024;
1715
+ async function readJson(req, maxBytes) {
1716
+ try {
1717
+ const result = await readBoundedChunks(req.body, { maxBytes, signal: req.signal });
1718
+ if (result.kind === "over-limit")
1719
+ return null;
1720
+ return JSON.parse(new TextDecoder().decode(concatChunks(result.chunks, result.total)));
1721
+ } catch {
1722
+ return null;
1723
+ }
1724
+ }
1705
1725
  // src/server/release-signal.ts
1706
1726
  function bindReleaseRefreshSignal(marker, options = {}) {
1707
1727
  const signal = options.signal ?? "SIGUSR2";
@@ -1807,6 +1827,7 @@ export {
1807
1827
  createUnixClientTransport2 as createUnixClientTransport,
1808
1828
  defineCookie,
1809
1829
  defineMultipartStream2 as defineMultipartStream,
1830
+ defineRequestIngress2 as defineRequestIngress,
1810
1831
  deriveCodeChallenge2 as deriveCodeChallenge,
1811
1832
  errorCode2 as errorCode,
1812
1833
  errorResponse2 as errorResponse,
@@ -16,9 +16,6 @@ import {
16
16
  TELEGRAM_TEXT_LIMIT2,
17
17
  truncateTelegramHtml2
18
18
  } from "../index-nmaqxdx7.js";
19
- import {
20
- untilAborted
21
- } from "../index-a5qr2rj6.js";
22
19
  import {
23
20
  writeFileAtomic2
24
21
  } from "../index-07dcf2yn.js";
@@ -29,6 +26,9 @@ import {
29
26
  MAX_TIMER_MS,
30
27
  sleep
31
28
  } from "../index-eemvahkc.js";
29
+ import {
30
+ untilAborted
31
+ } from "../index-a5qr2rj6.js";
32
32
  import {
33
33
  assertPositiveSafeInteger
34
34
  } from "../index-0s4xebbg.js";
@@ -35,7 +35,7 @@ import"../index-fynr93w4.js";
35
35
  import {
36
36
  createClient2,
37
37
  createClients2
38
- } from "../index-jk44mbqb.js";
38
+ } from "../index-1y0arq4z.js";
39
39
  import {
40
40
  assertPositiveSafeInteger
41
41
  } from "../index-0s4xebbg.js";
@@ -13,6 +13,10 @@ import {
13
13
  import {
14
14
  raceAbort
15
15
  } from "../../index-b0kddvzw.js";
16
+ import {
17
+ readBoundedChunks,
18
+ concatChunks
19
+ } from "../../index-qndsr7f0.js";
16
20
  import {
17
21
  MAX_TIMER_MS
18
22
  } from "../../index-eemvahkc.js";
@@ -243,40 +247,21 @@ function withConnectionDeadline(connectionName, context, callerSignal, body) {
243
247
  });
244
248
  }
245
249
  async function readBoundedText(response, maxBytes, connectionName, context) {
246
- context?.signal?.throwIfAborted();
247
- if (!response.body)
248
- return "";
249
- const reader = response.body.getReader();
250
- const decoder = new TextDecoder;
251
- let total = 0;
252
- let text = "";
253
- const cancel = () => void reader.cancel(context?.signal?.reason).catch(() => {
254
- return;
255
- });
256
- context?.signal?.addEventListener("abort", cancel, { once: true });
257
- try {
258
- for (;; ) {
259
- const { done, value } = await awaitConnection(reader.read(), context?.signal);
260
- if (done)
261
- break;
262
- total += value.byteLength;
250
+ const result = await readBoundedChunks(response.body, {
251
+ maxBytes,
252
+ ...context?.signal && { signal: context.signal },
253
+ onChunk: (chunk) => {
263
254
  if (context)
264
- context.observedReadBytes += value.byteLength;
265
- if (total > maxBytes) {
266
- throw new ConnectionResponseTooLargeError(connectionName, maxBytes, {
267
- ...context,
268
- observedReadBytes: total
269
- });
270
- }
271
- text += decoder.decode(value, { stream: true });
255
+ context.observedReadBytes += chunk.byteLength;
272
256
  }
273
- text += decoder.decode();
274
- return text;
275
- } finally {
276
- context?.signal?.removeEventListener("abort", cancel);
277
- cancel();
278
- reader.releaseLock();
257
+ });
258
+ if (result.kind === "over-limit") {
259
+ throw new ConnectionResponseTooLargeError(connectionName, maxBytes, {
260
+ ...context,
261
+ observedReadBytes: result.total
262
+ });
279
263
  }
264
+ return new TextDecoder().decode(concatChunks(result.chunks, result.total));
280
265
  }
281
266
  async function readBoundedJson(response, maxBytes, connectionName, context) {
282
267
  return JSON.parse(await readBoundedText(response, maxBytes, connectionName, context));
@@ -74,7 +74,7 @@ import {
74
74
  WaitTimeoutError,
75
75
  runWaitOperation,
76
76
  createCli2
77
- } from "../index-n7hrpngg.js";
77
+ } from "../index-syzngt7v.js";
78
78
  import {
79
79
  ManagedFilePathSchema2,
80
80
  ManagedFileRefSchema2
@@ -97,8 +97,15 @@ import {
97
97
  fetchGuarded,
98
98
  fetchPinnedDocument,
99
99
  readCapped
100
- } from "../index-3h0ztg0z.js";
100
+ } from "../index-t65erk4z.js";
101
101
  import"../index-1bx1xv1k.js";
102
+ import {
103
+ readBoundedChunks,
104
+ concatChunks
105
+ } from "../index-qndsr7f0.js";
106
+ import {
107
+ assertPositiveSafeInteger
108
+ } from "../index-0s4xebbg.js";
102
109
  import {
103
110
  DEFAULT_CORS_ALLOW_HEADERS2
104
111
  } from "../index-yk4g8805.js";
@@ -468,10 +475,29 @@ function redirectWith(uri, params) {
468
475
  url.searchParams.set(key, value);
469
476
  return new Response(null, { status: 302, headers: { Location: url.toString() } });
470
477
  }
471
- async function readForm(req) {
478
+ var DEFAULT_OAUTH_BODY_BYTES = 64 * 1024;
479
+ var tooLarge = () => oauthError("invalid_request", "Request body is too large", 413);
480
+ async function readBodyText(req, config) {
481
+ const result = await readBoundedChunks(req.body, {
482
+ maxBytes: config.maxRequestBodyBytes ?? DEFAULT_OAUTH_BODY_BYTES,
483
+ signal: req.signal
484
+ });
485
+ return result.kind === "over-limit" ? undefined : new TextDecoder().decode(concatChunks(result.chunks, result.total));
486
+ }
487
+ function parseJson(text) {
488
+ try {
489
+ return JSON.parse(text);
490
+ } catch {
491
+ return null;
492
+ }
493
+ }
494
+ async function readForm(req, config) {
495
+ const text = await readBodyText(req, config);
496
+ if (text === undefined)
497
+ return;
472
498
  const contentType = req.headers.get("content-type") ?? "";
473
499
  if (contentType.includes("application/json")) {
474
- const body = await req.json().catch(() => null);
500
+ const body = parseJson(text);
475
501
  const params = new URLSearchParams;
476
502
  if (isRecord(body)) {
477
503
  for (const [key, value] of Object.entries(body)) {
@@ -481,7 +507,7 @@ async function readForm(req) {
481
507
  }
482
508
  return params;
483
509
  }
484
- return new URLSearchParams(await req.text());
510
+ return new URLSearchParams(text);
485
511
  }
486
512
  function metadataRoute(ctx) {
487
513
  const { config } = ctx;
@@ -519,7 +545,10 @@ function registerRoute(ctx) {
519
545
  return new Response(null, { status: 204, headers: PUBLIC_CORS });
520
546
  if (req.method !== "POST")
521
547
  return oauthError("invalid_request", "POST required", 405);
522
- const meta = await req.json().catch(() => null);
548
+ const text = await readBodyText(req, config);
549
+ if (text === undefined)
550
+ return tooLarge();
551
+ const meta = parseJson(text);
523
552
  if (!isRecord(meta)) {
524
553
  return oauthError("invalid_client_metadata", "Body must be a JSON object");
525
554
  }
@@ -673,7 +702,9 @@ function tokenRoute(ctx) {
673
702
  return new Response(null, { status: 204, headers: PUBLIC_CORS });
674
703
  if (req.method !== "POST")
675
704
  return oauthError("invalid_request", "POST required", 405);
676
- const form = await readForm(req);
705
+ const form = await readForm(req, config);
706
+ if (!form)
707
+ return tooLarge();
677
708
  const grantType = form.get("grant_type");
678
709
  if (grantType === "authorization_code") {
679
710
  const code = form.get("code");
@@ -745,6 +776,7 @@ function tokenRoute(ctx) {
745
776
 
746
777
  // src/server/oauth/provider.ts
747
778
  function mountOAuthProvider(config) {
779
+ assertPositiveSafeInteger("maxRequestBodyBytes", config.maxRequestBodyBytes);
748
780
  const base = config.basePath ?? "/oauth";
749
781
  const ttl = config.accessTokenTtlSec ?? 3600;
750
782
  const registerPath = `${base}/register`;
@@ -14,10 +14,6 @@ import {
14
14
  withUploadProgress,
15
15
  parseApiErrorBody
16
16
  } from "./index-p6apg0jg.js";
17
- import {
18
- abortReason,
19
- untilAborted
20
- } from "./index-a5qr2rj6.js";
21
17
  import {
22
18
  inputIsQuery
23
19
  } from "./index-xhzq2qvj.js";
@@ -25,6 +21,9 @@ import {
25
21
  ApiError2,
26
22
  refuseLocally
27
23
  } from "./index-kfjkb396.js";
24
+ import {
25
+ chunksOf
26
+ } from "./index-cjbn98zt.js";
28
27
  import {
29
28
  assertPositiveSafeInteger
30
29
  } from "./index-0s4xebbg.js";
@@ -131,59 +130,6 @@ function createBoundedLineDecoder(maxLineBytes, requireFinalNewline = false) {
131
130
  const { push, end } = createLineSplitter(maxLineBytes, requireFinalNewline);
132
131
  return { push, end };
133
132
  }
134
- async function* chunksOf(source, signal) {
135
- signal?.throwIfAborted();
136
- const stream = source instanceof Response ? source.body : source;
137
- if (stream === null)
138
- return;
139
- if (stream instanceof ReadableStream) {
140
- const reader = stream.getReader();
141
- const abort = () => {
142
- if (signal)
143
- reader.cancel(abortReason(signal)).catch(() => {
144
- return;
145
- });
146
- };
147
- signal?.addEventListener("abort", abort, { once: true });
148
- try {
149
- for (;; ) {
150
- const chunk = await reader.read();
151
- signal?.throwIfAborted();
152
- if (chunk.done)
153
- return;
154
- yield chunk.value;
155
- }
156
- } finally {
157
- signal?.removeEventListener("abort", abort);
158
- await reader.cancel().catch(() => {
159
- return;
160
- });
161
- reader.releaseLock();
162
- }
163
- }
164
- const iterator = stream[Symbol.asyncIterator]();
165
- let finished = false;
166
- try {
167
- for (;; ) {
168
- const pending = iterator.next();
169
- const next = await (signal ? untilAborted(pending, signal) : pending);
170
- if (next.done) {
171
- finished = true;
172
- return;
173
- }
174
- yield next.value;
175
- }
176
- } finally {
177
- if (!finished && signal?.aborted)
178
- iterator.return?.().catch(() => {
179
- return;
180
- });
181
- else if (!finished)
182
- await iterator.return?.().catch(() => {
183
- return;
184
- });
185
- }
186
- }
187
133
  async function* readBoundedUtf8Lines(source, maxLineBytes, requireFinalNewline = false, signal) {
188
134
  const splitter = createLineSplitter(maxLineBytes, requireFinalNewline);
189
135
  for await (const chunk of chunksOf(source, signal)) {
@@ -0,0 +1,68 @@
1
+ import {
2
+ abortReason,
3
+ untilAborted
4
+ } from "./index-a5qr2rj6.js";
5
+
6
+ // src/internal/stream-chunks.ts
7
+ async function* chunksOf(source, signal) {
8
+ signal?.throwIfAborted();
9
+ const stream = source instanceof Response ? source.body : source;
10
+ if (stream === null)
11
+ return;
12
+ if (stream instanceof ReadableStream) {
13
+ const reader = stream.getReader();
14
+ const abort = () => {
15
+ if (signal)
16
+ reader.cancel(abortReason(signal)).catch(() => {
17
+ return;
18
+ });
19
+ };
20
+ signal?.addEventListener("abort", abort, { once: true });
21
+ try {
22
+ for (;; ) {
23
+ const pending = reader.read();
24
+ const chunk = await (signal ? untilAborted(pending, signal) : pending);
25
+ signal?.throwIfAborted();
26
+ if (chunk.done)
27
+ return;
28
+ yield chunk.value;
29
+ }
30
+ } finally {
31
+ signal?.removeEventListener("abort", abort);
32
+ if (signal?.aborted) {
33
+ reader.cancel(abortReason(signal)).catch(() => {
34
+ return;
35
+ });
36
+ } else {
37
+ await reader.cancel().catch(() => {
38
+ return;
39
+ });
40
+ reader.releaseLock();
41
+ }
42
+ }
43
+ }
44
+ const iterator = stream[Symbol.asyncIterator]();
45
+ let finished = false;
46
+ try {
47
+ for (;; ) {
48
+ const pending = iterator.next();
49
+ const next = await (signal ? untilAborted(pending, signal) : pending);
50
+ if (next.done) {
51
+ finished = true;
52
+ return;
53
+ }
54
+ yield next.value;
55
+ }
56
+ } finally {
57
+ if (!finished && signal?.aborted)
58
+ iterator.return?.().catch(() => {
59
+ return;
60
+ });
61
+ else if (!finished)
62
+ await iterator.return?.().catch(() => {
63
+ return;
64
+ });
65
+ }
66
+ }
67
+
68
+ export { chunksOf };
@@ -5,7 +5,7 @@ import {
5
5
  fetchGuarded,
6
6
  PrivateAddressRefusal,
7
7
  readCapped
8
- } from "./index-3h0ztg0z.js";
8
+ } from "./index-t65erk4z.js";
9
9
  import {
10
10
  writeFileAtomicSync2
11
11
  } from "./index-07dcf2yn.js";