@lichen-ai/lichen-sdk 0.1.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.
- package/LICENSE +21 -0
- package/dist/auth/error.d.ts +9 -0
- package/dist/auth/error.js +76 -0
- package/dist/auth/error.js.map +1 -0
- package/dist/auth/error.mjs +76 -0
- package/dist/auth/error.mjs.map +1 -0
- package/dist/auth/index.d.ts +18 -0
- package/dist/auth/index.js +35 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/index.mjs +35 -0
- package/dist/auth/index.mjs.map +1 -0
- package/dist/auth/types.d.ts +297 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/types.mjs +2 -0
- package/dist/auth/types.mjs.map +1 -0
- package/dist/client.d.ts +773 -0
- package/dist/client.js +1544 -0
- package/dist/client.js.map +1 -0
- package/dist/client.mjs +1544 -0
- package/dist/client.mjs.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/logging/index.d.ts +43 -0
- package/dist/logging/index.js +33 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/index.mjs +33 -0
- package/dist/logging/index.mjs.map +1 -0
- package/dist/schema.d.ts +661 -0
- package/dist/schema.js +30 -0
- package/dist/schema.js.map +1 -0
- package/dist/schema.mjs +30 -0
- package/dist/schema.mjs.map +1 -0
- package/dist/singletons/fetch.d.ts +7 -0
- package/dist/singletons/fetch.js +24 -0
- package/dist/singletons/fetch.js.map +1 -0
- package/dist/singletons/fetch.mjs +24 -0
- package/dist/singletons/fetch.mjs.map +1 -0
- package/dist/tests/fetch.test.d.ts +1 -0
- package/dist/tests/fetch.test.js +460 -0
- package/dist/tests/fetch.test.js.map +1 -0
- package/dist/tests/fetch.test.mjs +460 -0
- package/dist/tests/fetch.test.mjs.map +1 -0
- package/dist/tests/sse.test.d.ts +1 -0
- package/dist/tests/sse.test.js +132 -0
- package/dist/tests/sse.test.js.map +1 -0
- package/dist/tests/sse.test.mjs +132 -0
- package/dist/tests/sse.test.mjs.map +1 -0
- package/dist/types.d.ts +178 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/types.messages.d.ts +86 -0
- package/dist/types.messages.js +2 -0
- package/dist/types.messages.js.map +1 -0
- package/dist/types.messages.mjs +2 -0
- package/dist/types.messages.mjs.map +1 -0
- package/dist/types.mjs +2 -0
- package/dist/types.mjs.map +1 -0
- package/dist/types.stream.d.ts +212 -0
- package/dist/types.stream.js +2 -0
- package/dist/types.stream.js.map +1 -0
- package/dist/types.stream.mjs +2 -0
- package/dist/types.stream.mjs.map +1 -0
- package/dist/ui/branching.d.ts +35 -0
- package/dist/ui/branching.js +143 -0
- package/dist/ui/branching.js.map +1 -0
- package/dist/ui/branching.mjs +143 -0
- package/dist/ui/branching.mjs.map +1 -0
- package/dist/ui/branching.test.d.ts +1 -0
- package/dist/ui/branching.test.js +369 -0
- package/dist/ui/branching.test.js.map +1 -0
- package/dist/ui/branching.test.mjs +369 -0
- package/dist/ui/branching.test.mjs.map +1 -0
- package/dist/ui/errors.d.ts +12 -0
- package/dist/ui/errors.js +10 -0
- package/dist/ui/errors.js.map +1 -0
- package/dist/ui/errors.mjs +10 -0
- package/dist/ui/errors.mjs.map +1 -0
- package/dist/ui/manager.d.ts +87 -0
- package/dist/ui/manager.js +158 -0
- package/dist/ui/manager.js.map +1 -0
- package/dist/ui/manager.mjs +158 -0
- package/dist/ui/manager.mjs.map +1 -0
- package/dist/ui/messages.d.ts +18 -0
- package/dist/ui/messages.js +64 -0
- package/dist/ui/messages.js.map +1 -0
- package/dist/ui/messages.mjs +64 -0
- package/dist/ui/messages.mjs.map +1 -0
- package/dist/ui/utils.d.ts +2 -0
- package/dist/ui/utils.js +11 -0
- package/dist/ui/utils.js.map +1 -0
- package/dist/ui/utils.mjs +11 -0
- package/dist/ui/utils.mjs.map +1 -0
- package/dist/utils/async_caller.d.ts +48 -0
- package/dist/utils/async_caller.js +153 -0
- package/dist/utils/async_caller.js.map +1 -0
- package/dist/utils/async_caller.mjs +153 -0
- package/dist/utils/async_caller.mjs.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.js +13 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/env.mjs +13 -0
- package/dist/utils/env.mjs.map +1 -0
- package/dist/utils/signals.d.ts +1 -0
- package/dist/utils/signals.js +19 -0
- package/dist/utils/signals.js.map +1 -0
- package/dist/utils/signals.mjs +19 -0
- package/dist/utils/signals.mjs.map +1 -0
- package/dist/utils/sse.d.ts +8 -0
- package/dist/utils/sse.js +151 -0
- package/dist/utils/sse.js.map +1 -0
- package/dist/utils/sse.mjs +151 -0
- package/dist/utils/sse.mjs.map +1 -0
- package/dist/utils/stream.d.ts +13 -0
- package/dist/utils/stream.js +109 -0
- package/dist/utils/stream.js.map +1 -0
- package/dist/utils/stream.mjs +109 -0
- package/dist/utils/stream.mjs.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import pRetry from 'p-retry';
|
|
2
|
+
import * as PQueueModule from 'p-queue';
|
|
3
|
+
import { _getFetchImplementation } from "../singletons/fetch.mjs";
|
|
4
|
+
const STATUS_NO_RETRY = [
|
|
5
|
+
400, // Bad Request
|
|
6
|
+
401, // Unauthorized
|
|
7
|
+
402, // Payment required
|
|
8
|
+
403, // Forbidden
|
|
9
|
+
404, // Not Found
|
|
10
|
+
405, // Method Not Allowed
|
|
11
|
+
406, // Not Acceptable
|
|
12
|
+
407, // Proxy Authentication Required
|
|
13
|
+
408, // Request Timeout
|
|
14
|
+
409, // Conflict
|
|
15
|
+
422 // Unprocessable Entity
|
|
16
|
+
];
|
|
17
|
+
function isQueueConstructor(value) {
|
|
18
|
+
return typeof value === 'function';
|
|
19
|
+
}
|
|
20
|
+
function resolveQueueConstructor() {
|
|
21
|
+
const moduleValue = PQueueModule;
|
|
22
|
+
if (isQueueConstructor(moduleValue))
|
|
23
|
+
return moduleValue;
|
|
24
|
+
if (moduleValue && typeof moduleValue === 'object' && 'default' in moduleValue) {
|
|
25
|
+
const defaultExport = moduleValue.default;
|
|
26
|
+
if (isQueueConstructor(defaultExport))
|
|
27
|
+
return defaultExport;
|
|
28
|
+
}
|
|
29
|
+
throw new Error('p-queue did not expose a queue constructor');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Do not rely on globalThis.Response, rather just
|
|
33
|
+
* do duck typing
|
|
34
|
+
*/
|
|
35
|
+
function isResponse(x) {
|
|
36
|
+
if (x == null || typeof x !== 'object')
|
|
37
|
+
return false;
|
|
38
|
+
return 'status' in x && 'statusText' in x && 'text' in x;
|
|
39
|
+
}
|
|
40
|
+
function hasErrorCode(value, code) {
|
|
41
|
+
return Boolean(value && typeof value === 'object' && 'code' in value && value.code === code);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Utility error to properly handle failed requests
|
|
45
|
+
*/
|
|
46
|
+
class HTTPError extends Error {
|
|
47
|
+
status;
|
|
48
|
+
text;
|
|
49
|
+
response;
|
|
50
|
+
constructor(status, message, response) {
|
|
51
|
+
super(`HTTP ${status}: ${message}`);
|
|
52
|
+
this.status = status;
|
|
53
|
+
this.text = message;
|
|
54
|
+
this.response = response;
|
|
55
|
+
}
|
|
56
|
+
static async fromResponse(response, options) {
|
|
57
|
+
try {
|
|
58
|
+
return new HTTPError(response.status, await response.text(), options?.includeResponse ? response : undefined);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return new HTTPError(response.status, response.statusText, options?.includeResponse ? response : undefined);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A class that can be used to make async calls with concurrency and retry logic.
|
|
67
|
+
*
|
|
68
|
+
* This is useful for making calls to any kind of "expensive" external resource,
|
|
69
|
+
* be it because it's rate-limited, subject to network issues, etc.
|
|
70
|
+
*
|
|
71
|
+
* Concurrent calls are limited by the `maxConcurrency` parameter, which defaults
|
|
72
|
+
* to `Infinity`. This means that by default, all calls will be made in parallel.
|
|
73
|
+
*
|
|
74
|
+
* Retries are limited by the `maxRetries` parameter, which defaults to 5. This
|
|
75
|
+
* means that by default, each call will be retried up to 5 times, with an
|
|
76
|
+
* exponential backoff between each attempt.
|
|
77
|
+
*/
|
|
78
|
+
export class AsyncCaller {
|
|
79
|
+
maxConcurrency;
|
|
80
|
+
maxRetries;
|
|
81
|
+
queue;
|
|
82
|
+
onFailedResponseHook;
|
|
83
|
+
customFetch;
|
|
84
|
+
constructor(params) {
|
|
85
|
+
this.maxConcurrency = params.maxConcurrency ?? Infinity;
|
|
86
|
+
this.maxRetries = params.maxRetries ?? 4;
|
|
87
|
+
const Queue = resolveQueueConstructor();
|
|
88
|
+
this.queue = new Queue({ concurrency: this.maxConcurrency });
|
|
89
|
+
this.onFailedResponseHook = params?.onFailedResponseHook;
|
|
90
|
+
this.customFetch = params.fetch;
|
|
91
|
+
}
|
|
92
|
+
call(callable, ...args) {
|
|
93
|
+
const { onFailedResponseHook } = this;
|
|
94
|
+
return this.queue.add(() => pRetry(() => callable(...args).catch(async (error) => {
|
|
95
|
+
// eslint-disable-next-line no-instanceof/no-instanceof
|
|
96
|
+
if (error instanceof Error) {
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
else if (isResponse(error)) {
|
|
100
|
+
throw await HTTPError.fromResponse(error, {
|
|
101
|
+
includeResponse: !!onFailedResponseHook
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
throw new Error(typeof error === 'string' ? error : 'Unknown async caller failure');
|
|
106
|
+
}
|
|
107
|
+
}), {
|
|
108
|
+
async onFailedAttempt(error) {
|
|
109
|
+
if (error.message.startsWith('Cancel') ||
|
|
110
|
+
error.message.startsWith('TimeoutError') ||
|
|
111
|
+
error.message.startsWith('AbortError')) {
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
114
|
+
if (hasErrorCode(error, 'ECONNABORTED')) {
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
// eslint-disable-next-line no-instanceof/no-instanceof
|
|
118
|
+
if (error instanceof HTTPError) {
|
|
119
|
+
if (STATUS_NO_RETRY.includes(error.status)) {
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
if (onFailedResponseHook && error.response) {
|
|
123
|
+
await onFailedResponseHook(error.response);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
// If needed we can change some of the defaults here,
|
|
128
|
+
// but they're quite sensible.
|
|
129
|
+
retries: this.maxRetries,
|
|
130
|
+
randomize: true
|
|
131
|
+
}), { throwOnTimeout: true });
|
|
132
|
+
}
|
|
133
|
+
callWithOptions(options, callable, ...args) {
|
|
134
|
+
// Note this doesn't cancel the underlying request,
|
|
135
|
+
// when available prefer to use the signal option of the underlying call
|
|
136
|
+
if (options.signal) {
|
|
137
|
+
return Promise.race([
|
|
138
|
+
this.call(callable, ...args),
|
|
139
|
+
new Promise((_, reject) => {
|
|
140
|
+
options.signal?.addEventListener('abort', () => {
|
|
141
|
+
reject(new Error('AbortError'));
|
|
142
|
+
});
|
|
143
|
+
})
|
|
144
|
+
]);
|
|
145
|
+
}
|
|
146
|
+
return this.call(callable, ...args);
|
|
147
|
+
}
|
|
148
|
+
fetch(...args) {
|
|
149
|
+
const fetchFn = this.customFetch ?? _getFetchImplementation();
|
|
150
|
+
return this.call(() => fetchFn(...args).then((res) => (res.ok ? res : Promise.reject(res))));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=async_caller.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async_caller.mjs","sourceRoot":"","sources":["../../src/utils/async_caller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getEnvironmentVariable(name: string): string | undefined;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function getEnvironmentVariable(name) {
|
|
2
|
+
// Certain setups (Deno, frontend) will throw an error if you try to access environment variables
|
|
3
|
+
try {
|
|
4
|
+
return typeof process !== 'undefined'
|
|
5
|
+
? // eslint-disable-next-line no-process-env
|
|
6
|
+
process.env?.[name]
|
|
7
|
+
: undefined;
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iGAAiG;IACjG,IAAI,CAAC;QACH,OAAO,OAAO,OAAO,KAAK,WAAW;YACnC,CAAC,CAAC,0CAA0C;gBAC1C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function getEnvironmentVariable(name) {
|
|
2
|
+
// Certain setups (Deno, frontend) will throw an error if you try to access environment variables
|
|
3
|
+
try {
|
|
4
|
+
return typeof process !== 'undefined'
|
|
5
|
+
? // eslint-disable-next-line no-process-env
|
|
6
|
+
process.env?.[name]
|
|
7
|
+
: undefined;
|
|
8
|
+
}
|
|
9
|
+
catch (e) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=env.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.mjs","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iGAAiG;IACjG,IAAI,CAAC;QACH,OAAO,OAAO,OAAO,KAAK,WAAW;YACnC,CAAC,CAAC,0CAA0C;gBAC1C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;YACrB,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function mergeSignals(...signals: (AbortSignal | null | undefined)[]): AbortSignal | undefined;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function mergeSignals(...signals) {
|
|
2
|
+
const nonZeroSignals = signals.filter((signal) => signal != null);
|
|
3
|
+
if (nonZeroSignals.length === 0)
|
|
4
|
+
return undefined;
|
|
5
|
+
if (nonZeroSignals.length === 1)
|
|
6
|
+
return nonZeroSignals[0];
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
for (const signal of signals) {
|
|
9
|
+
if (signal?.aborted) {
|
|
10
|
+
controller.abort(signal.reason);
|
|
11
|
+
return controller.signal;
|
|
12
|
+
}
|
|
13
|
+
signal?.addEventListener('abort', () => controller.abort(signal.reason), {
|
|
14
|
+
once: true
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return controller.signal;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/utils/signals.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,GAAG,OAA2C;IACzE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAA;IAExF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;IAEzD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC/B,OAAO,UAAU,CAAC,MAAM,CAAA;QAC1B,CAAC;QAED,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACvE,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAA;AAC1B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export function mergeSignals(...signals) {
|
|
2
|
+
const nonZeroSignals = signals.filter((signal) => signal != null);
|
|
3
|
+
if (nonZeroSignals.length === 0)
|
|
4
|
+
return undefined;
|
|
5
|
+
if (nonZeroSignals.length === 1)
|
|
6
|
+
return nonZeroSignals[0];
|
|
7
|
+
const controller = new AbortController();
|
|
8
|
+
for (const signal of signals) {
|
|
9
|
+
if (signal?.aborted) {
|
|
10
|
+
controller.abort(signal.reason);
|
|
11
|
+
return controller.signal;
|
|
12
|
+
}
|
|
13
|
+
signal?.addEventListener('abort', () => controller.abort(signal.reason), {
|
|
14
|
+
once: true
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return controller.signal;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=signals.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signals.mjs","sourceRoot":"","sources":["../../src/utils/signals.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,GAAG,OAA2C;IACzE,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,CAAA;IAExF,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAA;IACjD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC,CAAC,CAAC,CAAA;IAEzD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAC/B,OAAO,UAAU,CAAC,MAAM,CAAA;QAC1B,CAAC;QAED,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YACvE,IAAI,EAAE,IAAI;SACX,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAA;AAC1B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function BytesLineDecoder(): TransformStream<Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>;
|
|
2
|
+
interface StreamPart {
|
|
3
|
+
id: string | undefined;
|
|
4
|
+
event: string;
|
|
5
|
+
data: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function SSEDecoder(): TransformStream<Uint8Array<ArrayBufferLike>, StreamPart>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const CR = '\r'.charCodeAt(0);
|
|
2
|
+
const LF = '\n'.charCodeAt(0);
|
|
3
|
+
const NULL = '\0'.charCodeAt(0);
|
|
4
|
+
const COLON = ':'.charCodeAt(0);
|
|
5
|
+
const SPACE = ' '.charCodeAt(0);
|
|
6
|
+
const TRAILING_NEWLINE = [CR, LF];
|
|
7
|
+
export function BytesLineDecoder() {
|
|
8
|
+
let buffer = [];
|
|
9
|
+
let trailingCr = false;
|
|
10
|
+
return new TransformStream({
|
|
11
|
+
start() {
|
|
12
|
+
buffer = [];
|
|
13
|
+
trailingCr = false;
|
|
14
|
+
},
|
|
15
|
+
transform(chunk, controller) {
|
|
16
|
+
// See https://docs.python.org/3/glossary.html#term-universal-newlines
|
|
17
|
+
let text = chunk;
|
|
18
|
+
// Handle trailing CR from previous chunk
|
|
19
|
+
if (trailingCr) {
|
|
20
|
+
text = joinArrays([[CR], text]);
|
|
21
|
+
trailingCr = false;
|
|
22
|
+
}
|
|
23
|
+
// Check for trailing CR in current chunk
|
|
24
|
+
if (text.length > 0 && text.at(-1) === CR) {
|
|
25
|
+
trailingCr = true;
|
|
26
|
+
text = text.subarray(0, -1);
|
|
27
|
+
}
|
|
28
|
+
if (!text.length)
|
|
29
|
+
return;
|
|
30
|
+
const trailingNewline = TRAILING_NEWLINE.includes(text.at(-1));
|
|
31
|
+
const lastIdx = text.length - 1;
|
|
32
|
+
const { lines } = text.reduce((acc, cur, idx) => {
|
|
33
|
+
if (acc.from > idx)
|
|
34
|
+
return acc;
|
|
35
|
+
if (cur === CR || cur === LF) {
|
|
36
|
+
acc.lines.push(text.subarray(acc.from, idx));
|
|
37
|
+
if (cur === CR && text[idx + 1] === LF) {
|
|
38
|
+
acc.from = idx + 2;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
acc.from = idx + 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (idx === lastIdx && acc.from <= lastIdx) {
|
|
45
|
+
acc.lines.push(text.subarray(acc.from));
|
|
46
|
+
}
|
|
47
|
+
return acc;
|
|
48
|
+
}, { lines: [], from: 0 });
|
|
49
|
+
if (lines.length === 1 && !trailingNewline) {
|
|
50
|
+
buffer.push(lines[0]);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (buffer.length) {
|
|
54
|
+
// Include existing buffer in first line
|
|
55
|
+
buffer.push(lines[0]);
|
|
56
|
+
lines[0] = joinArrays(buffer);
|
|
57
|
+
buffer = [];
|
|
58
|
+
}
|
|
59
|
+
if (!trailingNewline) {
|
|
60
|
+
// If the last segment is not newline terminated,
|
|
61
|
+
// buffer it for the next chunk
|
|
62
|
+
if (lines.length)
|
|
63
|
+
buffer = [lines.pop()];
|
|
64
|
+
}
|
|
65
|
+
// Enqueue complete lines
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
controller.enqueue(line);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
flush(controller) {
|
|
71
|
+
if (buffer.length) {
|
|
72
|
+
controller.enqueue(joinArrays(buffer));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export function SSEDecoder() {
|
|
78
|
+
let event = '';
|
|
79
|
+
let data = [];
|
|
80
|
+
let lastEventId = '';
|
|
81
|
+
let retry = null;
|
|
82
|
+
const decoder = new TextDecoder();
|
|
83
|
+
return new TransformStream({
|
|
84
|
+
transform(chunk, controller) {
|
|
85
|
+
// Handle empty line case
|
|
86
|
+
if (!chunk.length) {
|
|
87
|
+
if (!event && !data.length && !lastEventId && retry == null)
|
|
88
|
+
return;
|
|
89
|
+
const sse = {
|
|
90
|
+
id: lastEventId || undefined,
|
|
91
|
+
event,
|
|
92
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
93
|
+
};
|
|
94
|
+
// NOTE: as per the SSE spec, do not reset lastEventId
|
|
95
|
+
event = '';
|
|
96
|
+
data = [];
|
|
97
|
+
retry = null;
|
|
98
|
+
controller.enqueue(sse);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Ignore comments
|
|
102
|
+
if (chunk[0] === COLON)
|
|
103
|
+
return;
|
|
104
|
+
const sepIdx = chunk.indexOf(COLON);
|
|
105
|
+
if (sepIdx === -1)
|
|
106
|
+
return;
|
|
107
|
+
const fieldName = decoder.decode(chunk.subarray(0, sepIdx));
|
|
108
|
+
let value = chunk.subarray(sepIdx + 1);
|
|
109
|
+
if (value[0] === SPACE)
|
|
110
|
+
value = value.subarray(1);
|
|
111
|
+
if (fieldName === 'event') {
|
|
112
|
+
event = decoder.decode(value);
|
|
113
|
+
}
|
|
114
|
+
else if (fieldName === 'data') {
|
|
115
|
+
data.push(value);
|
|
116
|
+
}
|
|
117
|
+
else if (fieldName === 'id') {
|
|
118
|
+
if (value.indexOf(NULL) === -1)
|
|
119
|
+
lastEventId = decoder.decode(value);
|
|
120
|
+
}
|
|
121
|
+
else if (fieldName === 'retry') {
|
|
122
|
+
const retryNum = Number.parseInt(decoder.decode(value), 10);
|
|
123
|
+
if (!Number.isNaN(retryNum))
|
|
124
|
+
retry = retryNum;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
flush(controller) {
|
|
128
|
+
if (event) {
|
|
129
|
+
controller.enqueue({
|
|
130
|
+
id: lastEventId || undefined,
|
|
131
|
+
event,
|
|
132
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function joinArrays(data) {
|
|
139
|
+
const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);
|
|
140
|
+
const merged = new Uint8Array(totalLength);
|
|
141
|
+
let offset = 0;
|
|
142
|
+
for (const c of data) {
|
|
143
|
+
merged.set(c, offset);
|
|
144
|
+
offset += c.length;
|
|
145
|
+
}
|
|
146
|
+
return merged;
|
|
147
|
+
}
|
|
148
|
+
function decodeArraysToJson(decoder, data) {
|
|
149
|
+
return JSON.parse(decoder.decode(joinArrays(data)));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=sse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
const CR = '\r'.charCodeAt(0);
|
|
2
|
+
const LF = '\n'.charCodeAt(0);
|
|
3
|
+
const NULL = '\0'.charCodeAt(0);
|
|
4
|
+
const COLON = ':'.charCodeAt(0);
|
|
5
|
+
const SPACE = ' '.charCodeAt(0);
|
|
6
|
+
const TRAILING_NEWLINE = [CR, LF];
|
|
7
|
+
export function BytesLineDecoder() {
|
|
8
|
+
let buffer = [];
|
|
9
|
+
let trailingCr = false;
|
|
10
|
+
return new TransformStream({
|
|
11
|
+
start() {
|
|
12
|
+
buffer = [];
|
|
13
|
+
trailingCr = false;
|
|
14
|
+
},
|
|
15
|
+
transform(chunk, controller) {
|
|
16
|
+
// See https://docs.python.org/3/glossary.html#term-universal-newlines
|
|
17
|
+
let text = chunk;
|
|
18
|
+
// Handle trailing CR from previous chunk
|
|
19
|
+
if (trailingCr) {
|
|
20
|
+
text = joinArrays([[CR], text]);
|
|
21
|
+
trailingCr = false;
|
|
22
|
+
}
|
|
23
|
+
// Check for trailing CR in current chunk
|
|
24
|
+
if (text.length > 0 && text.at(-1) === CR) {
|
|
25
|
+
trailingCr = true;
|
|
26
|
+
text = text.subarray(0, -1);
|
|
27
|
+
}
|
|
28
|
+
if (!text.length)
|
|
29
|
+
return;
|
|
30
|
+
const trailingNewline = TRAILING_NEWLINE.includes(text.at(-1));
|
|
31
|
+
const lastIdx = text.length - 1;
|
|
32
|
+
const { lines } = text.reduce((acc, cur, idx) => {
|
|
33
|
+
if (acc.from > idx)
|
|
34
|
+
return acc;
|
|
35
|
+
if (cur === CR || cur === LF) {
|
|
36
|
+
acc.lines.push(text.subarray(acc.from, idx));
|
|
37
|
+
if (cur === CR && text[idx + 1] === LF) {
|
|
38
|
+
acc.from = idx + 2;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
acc.from = idx + 1;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (idx === lastIdx && acc.from <= lastIdx) {
|
|
45
|
+
acc.lines.push(text.subarray(acc.from));
|
|
46
|
+
}
|
|
47
|
+
return acc;
|
|
48
|
+
}, { lines: [], from: 0 });
|
|
49
|
+
if (lines.length === 1 && !trailingNewline) {
|
|
50
|
+
buffer.push(lines[0]);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (buffer.length) {
|
|
54
|
+
// Include existing buffer in first line
|
|
55
|
+
buffer.push(lines[0]);
|
|
56
|
+
lines[0] = joinArrays(buffer);
|
|
57
|
+
buffer = [];
|
|
58
|
+
}
|
|
59
|
+
if (!trailingNewline) {
|
|
60
|
+
// If the last segment is not newline terminated,
|
|
61
|
+
// buffer it for the next chunk
|
|
62
|
+
if (lines.length)
|
|
63
|
+
buffer = [lines.pop()];
|
|
64
|
+
}
|
|
65
|
+
// Enqueue complete lines
|
|
66
|
+
for (const line of lines) {
|
|
67
|
+
controller.enqueue(line);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
flush(controller) {
|
|
71
|
+
if (buffer.length) {
|
|
72
|
+
controller.enqueue(joinArrays(buffer));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export function SSEDecoder() {
|
|
78
|
+
let event = '';
|
|
79
|
+
let data = [];
|
|
80
|
+
let lastEventId = '';
|
|
81
|
+
let retry = null;
|
|
82
|
+
const decoder = new TextDecoder();
|
|
83
|
+
return new TransformStream({
|
|
84
|
+
transform(chunk, controller) {
|
|
85
|
+
// Handle empty line case
|
|
86
|
+
if (!chunk.length) {
|
|
87
|
+
if (!event && !data.length && !lastEventId && retry == null)
|
|
88
|
+
return;
|
|
89
|
+
const sse = {
|
|
90
|
+
id: lastEventId || undefined,
|
|
91
|
+
event,
|
|
92
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
93
|
+
};
|
|
94
|
+
// NOTE: as per the SSE spec, do not reset lastEventId
|
|
95
|
+
event = '';
|
|
96
|
+
data = [];
|
|
97
|
+
retry = null;
|
|
98
|
+
controller.enqueue(sse);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Ignore comments
|
|
102
|
+
if (chunk[0] === COLON)
|
|
103
|
+
return;
|
|
104
|
+
const sepIdx = chunk.indexOf(COLON);
|
|
105
|
+
if (sepIdx === -1)
|
|
106
|
+
return;
|
|
107
|
+
const fieldName = decoder.decode(chunk.subarray(0, sepIdx));
|
|
108
|
+
let value = chunk.subarray(sepIdx + 1);
|
|
109
|
+
if (value[0] === SPACE)
|
|
110
|
+
value = value.subarray(1);
|
|
111
|
+
if (fieldName === 'event') {
|
|
112
|
+
event = decoder.decode(value);
|
|
113
|
+
}
|
|
114
|
+
else if (fieldName === 'data') {
|
|
115
|
+
data.push(value);
|
|
116
|
+
}
|
|
117
|
+
else if (fieldName === 'id') {
|
|
118
|
+
if (value.indexOf(NULL) === -1)
|
|
119
|
+
lastEventId = decoder.decode(value);
|
|
120
|
+
}
|
|
121
|
+
else if (fieldName === 'retry') {
|
|
122
|
+
const retryNum = Number.parseInt(decoder.decode(value), 10);
|
|
123
|
+
if (!Number.isNaN(retryNum))
|
|
124
|
+
retry = retryNum;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
flush(controller) {
|
|
128
|
+
if (event) {
|
|
129
|
+
controller.enqueue({
|
|
130
|
+
id: lastEventId || undefined,
|
|
131
|
+
event,
|
|
132
|
+
data: data.length ? decodeArraysToJson(decoder, data) : null
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function joinArrays(data) {
|
|
139
|
+
const totalLength = data.reduce((acc, curr) => acc + curr.length, 0);
|
|
140
|
+
const merged = new Uint8Array(totalLength);
|
|
141
|
+
let offset = 0;
|
|
142
|
+
for (const c of data) {
|
|
143
|
+
merged.set(c, offset);
|
|
144
|
+
offset += c.length;
|
|
145
|
+
}
|
|
146
|
+
return merged;
|
|
147
|
+
}
|
|
148
|
+
function decodeArraysToJson(decoder, data) {
|
|
149
|
+
return JSON.parse(decoder.decode(joinArrays(data)));
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=sse.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse.mjs","sourceRoot":"","sources":["../../src/utils/sse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
type IterableReadableStreamInterface<T> = ReadableStream<T> & AsyncIterable<T>;
|
|
2
|
+
export declare class IterableReadableStream<T> extends ReadableStream<T> implements IterableReadableStreamInterface<T> {
|
|
3
|
+
private reader;
|
|
4
|
+
private ensureReader;
|
|
5
|
+
next(): Promise<IteratorResult<T>>;
|
|
6
|
+
return(): Promise<IteratorResult<T>>;
|
|
7
|
+
throw(e: any): Promise<IteratorResult<T>>;
|
|
8
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
9
|
+
[Symbol.asyncIterator](): this;
|
|
10
|
+
static fromReadableStream<T>(stream: ReadableStream<T>): IterableReadableStream<T>;
|
|
11
|
+
static fromAsyncGenerator<T>(generator: AsyncGenerator<T>): IterableReadableStream<T>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|