cantian-request 0.0.11 → 0.0.13

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/sse.d.ts CHANGED
@@ -1,2 +1,5 @@
1
1
  import { EventSourceMessage } from 'eventsource-parser';
2
- export declare const sse: (input: string | URL | globalThis.Request, init?: RequestInit) => AsyncGenerator<EventSourceMessage | undefined, void, unknown>;
2
+ export interface SseExtOptions {
3
+ idleTimeoutMs?: number;
4
+ }
5
+ export declare const sse: (input: string | URL | globalThis.Request, init?: RequestInit, extOptions?: SseExtOptions) => AsyncGenerator<EventSourceMessage | undefined, void, unknown>;
package/dist/sse.js CHANGED
@@ -1,13 +1,39 @@
1
1
  import { createParser } from 'eventsource-parser';
2
2
  import { createThrowHttpErrorFetch } from './basic.js';
3
3
  const basicSse = createThrowHttpErrorFetch();
4
- export const sse = async function* (input, init) {
5
- const response = await basicSse(input, init);
4
+ const withTimeoutInit = (init, timeoutSignal) => {
5
+ return {
6
+ ...init,
7
+ signal: init?.signal ? AbortSignal.any([init.signal, timeoutSignal]) : timeoutSignal,
8
+ };
9
+ };
10
+ export const sse = async function* (input, init, extOptions) {
11
+ const idleTimeoutMs = extOptions?.idleTimeoutMs ?? 300000;
12
+ const connectTimeoutController = new AbortController();
13
+ const connectTimeoutId = setTimeout(() => {
14
+ connectTimeoutController.abort(new Error(`SSE idle timeout while waiting for response (${idleTimeoutMs}ms)`));
15
+ }, idleTimeoutMs);
16
+ let response;
17
+ try {
18
+ response = await basicSse(input, withTimeoutInit(init, connectTimeoutController.signal));
19
+ }
20
+ finally {
21
+ clearTimeout(connectTimeoutId);
22
+ }
6
23
  if (!response.body) {
7
24
  console.error(`FETCH_ERROR_NO_BODY`);
8
25
  throw new Error('No body');
9
26
  }
10
27
  const reader = response.body.getReader();
28
+ let idleError;
29
+ let readStartedAt;
30
+ const idleCheckId = setInterval(() => {
31
+ if (!idleError && readStartedAt && Date.now() - readStartedAt >= idleTimeoutMs) {
32
+ const idleMs = Date.now() - readStartedAt;
33
+ idleError = new Error(`SSE idle timeout while waiting for data (${idleMs}ms >= ${idleTimeoutMs}ms)`);
34
+ void reader.cancel(idleError).catch(() => { });
35
+ }
36
+ }, 1000);
11
37
  const pending = [];
12
38
  let parserError;
13
39
  const decoder = new TextDecoder();
@@ -19,16 +45,29 @@ export const sse = async function* (input, init) {
19
45
  parserError = error;
20
46
  },
21
47
  });
22
- let error;
23
48
  try {
24
49
  while (true) {
25
50
  while (pending.length) {
26
51
  yield pending.shift();
27
52
  }
28
- let chunk;
29
- chunk = await reader.read();
53
+ readStartedAt = Date.now();
54
+ const chunk = await reader.read();
55
+ readStartedAt = undefined;
56
+ if (idleError) {
57
+ throw idleError;
58
+ }
30
59
  const { value, done } = chunk;
31
60
  if (done) {
61
+ const tail = decoder.decode();
62
+ if (tail) {
63
+ parser.feed(tail);
64
+ if (parserError) {
65
+ throw parserError;
66
+ }
67
+ }
68
+ while (pending.length) {
69
+ yield pending.shift();
70
+ }
32
71
  break;
33
72
  }
34
73
  parser.feed(decoder.decode(value, { stream: true }));
@@ -37,18 +76,16 @@ export const sse = async function* (input, init) {
37
76
  }
38
77
  }
39
78
  }
40
- catch (e) {
41
- error = e;
79
+ finally {
80
+ clearInterval(idleCheckId);
42
81
  try {
43
82
  await reader.cancel();
44
83
  }
45
84
  catch { }
46
- throw error;
47
- }
48
- finally {
49
- if (!error) {
85
+ try {
50
86
  reader.releaseLock();
51
87
  }
88
+ catch { }
52
89
  }
53
90
  };
54
91
  //# sourceMappingURL=sse.js.map
package/dist/sse.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,QAAQ,GAAG,yBAAyB,EAAE,CAAC;AAC7C,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,EAAE,KAAwC,EAAE,IAAkB;IAC9F,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;IACzC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,IAAI,WAAgB,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,CAAC,KAAK;YACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,OAAO,CAAC,KAAK;YACX,WAAW,GAAG,KAAK,CAAC;QACtB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,KAAU,CAAC;IACf,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;YAED,IAAI,KAAK,CAAC;YACV,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;YAC9B,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM;YACR,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,WAAW,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,GAAG,CAAC,CAAC;QACV,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../src/sse.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cantian-request",
3
- "version": "0.0.11",
3
+ "version": "0.0.13",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dist/index.js"