assistant-stream 0.3.15 → 0.3.16
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/README.md +6 -4
- package/dist/core/AssistantStream.d.ts +35 -31
- package/dist/core/AssistantStream.d.ts.map +1 -1
- package/dist/core/AssistantStream.js +39 -37
- package/dist/core/AssistantStream.js.map +1 -1
- package/dist/core/AssistantStreamChunk.d.ts +71 -78
- package/dist/core/AssistantStreamChunk.d.ts.map +1 -1
- package/dist/core/AssistantStreamChunk.js +0 -2
- package/dist/core/accumulators/AssistantMessageStream.d.ts +15 -11
- package/dist/core/accumulators/AssistantMessageStream.d.ts.map +1 -1
- package/dist/core/accumulators/AssistantMessageStream.js +52 -48
- package/dist/core/accumulators/AssistantMessageStream.js.map +1 -1
- package/dist/core/accumulators/TimingTracker.d.ts +15 -11
- package/dist/core/accumulators/TimingTracker.d.ts.map +1 -1
- package/dist/core/accumulators/TimingTracker.js +36 -43
- package/dist/core/accumulators/TimingTracker.js.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.d.ts +21 -11
- package/dist/core/accumulators/assistant-message-accumulator.d.ts.map +1 -1
- package/dist/core/accumulators/assistant-message-accumulator.js +349 -390
- package/dist/core/accumulators/assistant-message-accumulator.js.map +1 -1
- package/dist/core/converters/toGenericMessages.d.ts +49 -47
- package/dist/core/converters/toGenericMessages.d.ts.map +1 -1
- package/dist/core/converters/toGenericMessages.js +122 -136
- package/dist/core/converters/toGenericMessages.js.map +1 -1
- package/dist/core/modules/assistant-stream.d.ts +62 -66
- package/dist/core/modules/assistant-stream.d.ts.map +1 -1
- package/dist/core/modules/assistant-stream.js +174 -182
- package/dist/core/modules/assistant-stream.js.map +1 -1
- package/dist/core/modules/text.d.ts +11 -7
- package/dist/core/modules/text.d.ts.map +1 -1
- package/dist/core/modules/text.js +45 -45
- package/dist/core/modules/text.js.map +1 -1
- package/dist/core/modules/tool-call.d.ts +15 -11
- package/dist/core/modules/tool-call.d.ts.map +1 -1
- package/dist/core/modules/tool-call.js +81 -96
- package/dist/core/modules/tool-call.js.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.d.ts +13 -9
- package/dist/core/object/ObjectStreamAccumulator.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamAccumulator.js +44 -52
- package/dist/core/object/ObjectStreamAccumulator.js.map +1 -1
- package/dist/core/object/ObjectStreamResponse.d.ts +12 -8
- package/dist/core/object/ObjectStreamResponse.d.ts.map +1 -1
- package/dist/core/object/ObjectStreamResponse.js +52 -71
- package/dist/core/object/ObjectStreamResponse.js.map +1 -1
- package/dist/core/object/createObjectStream.d.ts +14 -8
- package/dist/core/object/createObjectStream.d.ts.map +1 -1
- package/dist/core/object/createObjectStream.js +50 -47
- package/dist/core/object/createObjectStream.js.map +1 -1
- package/dist/core/object/types.d.ts +14 -11
- package/dist/core/object/types.d.ts.map +1 -1
- package/dist/core/object/types.js +0 -2
- package/dist/core/serialization/PlainText.d.ts +11 -7
- package/dist/core/serialization/PlainText.d.ts.map +1 -1
- package/dist/core/serialization/PlainText.js +40 -48
- package/dist/core/serialization/PlainText.js.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +11 -7
- package/dist/core/serialization/assistant-transport/AssistantTransport.d.ts.map +1 -1
- package/dist/core/serialization/assistant-transport/AssistantTransport.js +102 -117
- package/dist/core/serialization/assistant-transport/AssistantTransport.js.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.d.ts +11 -7
- package/dist/core/serialization/data-stream/DataStream.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/DataStream.js +320 -371
- package/dist/core/serialization/data-stream/DataStream.js.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.d.ts +101 -100
- package/dist/core/serialization/data-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/chunk-types.js +27 -23
- package/dist/core/serialization/data-stream/chunk-types.js.map +1 -1
- package/dist/core/serialization/data-stream/serialization.d.ts +9 -5
- package/dist/core/serialization/data-stream/serialization.d.ts.map +1 -1
- package/dist/core/serialization/data-stream/serialization.js +23 -24
- package/dist/core/serialization/data-stream/serialization.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +15 -12
- package/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js +205 -228
- package/dist/core/serialization/ui-message-stream/UIMessageStream.js.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts +68 -65
- package/dist/core/serialization/ui-message-stream/chunk-types.d.ts.map +1 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js +0 -2
- package/dist/core/tool/ToolCallReader.d.ts +34 -30
- package/dist/core/tool/ToolCallReader.d.ts.map +1 -1
- package/dist/core/tool/ToolCallReader.js +264 -317
- package/dist/core/tool/ToolCallReader.js.map +1 -1
- package/dist/core/tool/ToolExecutionStream.d.ts +20 -17
- package/dist/core/tool/ToolExecutionStream.d.ts.map +1 -1
- package/dist/core/tool/ToolExecutionStream.js +123 -146
- package/dist/core/tool/ToolExecutionStream.js.map +1 -1
- package/dist/core/tool/ToolResponse.d.ts +41 -41
- package/dist/core/tool/ToolResponse.d.ts.map +1 -1
- package/dist/core/tool/ToolResponse.js +50 -56
- package/dist/core/tool/ToolResponse.js.map +1 -1
- package/dist/core/tool/schema-utils.d.ts +19 -15
- package/dist/core/tool/schema-utils.d.ts.map +1 -1
- package/dist/core/tool/schema-utils.js +50 -84
- package/dist/core/tool/schema-utils.js.map +1 -1
- package/dist/core/tool/tool-types.d.ts +103 -122
- package/dist/core/tool/tool-types.d.ts.map +1 -1
- package/dist/core/tool/tool-types.js +0 -2
- package/dist/core/tool/toolResultStream.d.ts +11 -9
- package/dist/core/tool/toolResultStream.d.ts.map +1 -1
- package/dist/core/tool/toolResultStream.js +127 -157
- package/dist/core/tool/toolResultStream.js.map +1 -1
- package/dist/core/tool/type-path-utils.d.ts +8 -19
- package/dist/core/tool/type-path-utils.d.ts.map +1 -1
- package/dist/core/tool/type-path-utils.js +0 -2
- package/dist/core/utils/Counter.d.ts +6 -3
- package/dist/core/utils/Counter.d.ts.map +1 -1
- package/dist/core/utils/Counter.js +10 -6
- package/dist/core/utils/Counter.js.map +1 -1
- package/dist/core/utils/generateId.d.ts +4 -1
- package/dist/core/utils/generateId.d.ts.map +1 -1
- package/dist/core/utils/generateId.js +5 -1
- package/dist/core/utils/generateId.js.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +15 -11
- package/dist/core/utils/stream/AssistantMetaTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantMetaTransformStream.js +38 -42
- package/dist/core/utils/stream/AssistantMetaTransformStream.js.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.d.ts +11 -8
- package/dist/core/utils/stream/AssistantTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/AssistantTransformStream.js +37 -35
- package/dist/core/utils/stream/AssistantTransformStream.js.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.d.ts +6 -3
- package/dist/core/utils/stream/LineDecoderStream.d.ts.map +1 -1
- package/dist/core/utils/stream/LineDecoderStream.js +23 -26
- package/dist/core/utils/stream/LineDecoderStream.js.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.d.ts +5 -2
- package/dist/core/utils/stream/PipeableTransformStream.d.ts.map +1 -1
- package/dist/core/utils/stream/PipeableTransformStream.js +14 -10
- package/dist/core/utils/stream/PipeableTransformStream.js.map +1 -1
- package/dist/core/utils/stream/SSE.d.ts +10 -6
- package/dist/core/utils/stream/SSE.d.ts.map +1 -1
- package/dist/core/utils/stream/SSE.js +79 -91
- package/dist/core/utils/stream/SSE.js.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.d.ts +7 -4
- package/dist/core/utils/stream/UnderlyingReadable.d.ts.map +1 -1
- package/dist/core/utils/stream/UnderlyingReadable.js +0 -2
- package/dist/core/utils/stream/merge.d.ts +11 -7
- package/dist/core/utils/stream/merge.d.ts.map +1 -1
- package/dist/core/utils/stream/merge.js +68 -170
- package/dist/core/utils/stream/merge.js.map +1 -1
- package/dist/core/utils/stream/path-utils.d.ts +11 -7
- package/dist/core/utils/stream/path-utils.d.ts.map +1 -1
- package/dist/core/utils/stream/path-utils.js +46 -52
- package/dist/core/utils/stream/path-utils.js.map +1 -1
- package/dist/core/utils/types.d.ts +109 -113
- package/dist/core/utils/types.d.ts.map +1 -1
- package/dist/core/utils/types.js +0 -2
- package/dist/core/utils/withPromiseOrValue.d.ts +4 -1
- package/dist/core/utils/withPromiseOrValue.d.ts.map +1 -1
- package/dist/core/utils/withPromiseOrValue.js +12 -15
- package/dist/core/utils/withPromiseOrValue.js.map +1 -1
- package/dist/index.d.ts +23 -24
- package/dist/index.js +16 -16
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
- package/dist/resumable/ResumableStreamContext.d.ts +28 -24
- package/dist/resumable/ResumableStreamContext.d.ts.map +1 -1
- package/dist/resumable/ResumableStreamContext.js +99 -114
- package/dist/resumable/ResumableStreamContext.js.map +1 -1
- package/dist/resumable/constants.d.ts +4 -1
- package/dist/resumable/constants.d.ts.map +1 -1
- package/dist/resumable/constants.js +5 -1
- package/dist/resumable/constants.js.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts +22 -21
- package/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -1
- package/dist/resumable/createResumableAssistantStreamResponse.js +25 -32
- package/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -1
- package/dist/resumable/errors.d.ts +8 -5
- package/dist/resumable/errors.d.ts.map +1 -1
- package/dist/resumable/errors.js +14 -12
- package/dist/resumable/errors.js.map +1 -1
- package/dist/resumable/index.d.ts +7 -7
- package/dist/resumable/index.js +5 -5
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts +14 -10
- package/dist/resumable/stores/InMemoryResumableStreamStore.d.ts.map +1 -1
- package/dist/resumable/stores/InMemoryResumableStreamStore.js +159 -193
- package/dist/resumable/stores/InMemoryResumableStreamStore.js.map +1 -1
- package/dist/resumable/stores/ioredis.d.ts +9 -5
- package/dist/resumable/stores/ioredis.d.ts.map +1 -1
- package/dist/resumable/stores/ioredis.js +70 -82
- package/dist/resumable/stores/ioredis.js.map +1 -1
- package/dist/resumable/stores/redis-impl.d.ts +51 -48
- package/dist/resumable/stores/redis-impl.d.ts.map +1 -1
- package/dist/resumable/stores/redis-impl.js +176 -176
- package/dist/resumable/stores/redis-impl.js.map +1 -1
- package/dist/resumable/stores/redis.d.ts +31 -28
- package/dist/resumable/stores/redis.d.ts.map +1 -1
- package/dist/resumable/stores/redis.js +87 -95
- package/dist/resumable/stores/redis.js.map +1 -1
- package/dist/resumable/types.d.ts +29 -26
- package/dist/resumable/types.d.ts.map +1 -1
- package/dist/resumable/types.js +0 -2
- package/dist/utils/AsyncIterableStream.d.ts +5 -2
- package/dist/utils/AsyncIterableStream.d.ts.map +1 -1
- package/dist/utils/AsyncIterableStream.js +17 -16
- package/dist/utils/AsyncIterableStream.js.map +1 -1
- package/dist/utils/json/fix-json.d.ts +4 -1
- package/dist/utils/json/fix-json.d.ts.map +1 -1
- package/dist/utils/json/fix-json.js +286 -380
- package/dist/utils/json/fix-json.js.map +1 -1
- package/dist/utils/json/is-json.d.ts +8 -4
- package/dist/utils/json/is-json.d.ts.map +1 -1
- package/dist/utils/json/is-json.js +13 -21
- package/dist/utils/json/is-json.js.map +1 -1
- package/dist/utils/json/json-value.d.ts +7 -4
- package/dist/utils/json/json-value.d.ts.map +1 -1
- package/dist/utils/json/json-value.js +0 -2
- package/dist/utils/json/parse-partial-json-object.d.ts +11 -8
- package/dist/utils/json/parse-partial-json-object.d.ts.map +1 -1
- package/dist/utils/json/parse-partial-json-object.js +50 -62
- package/dist/utils/json/parse-partial-json-object.js.map +1 -1
- package/dist/utils/promiseWithResolvers.d.ts +7 -4
- package/dist/utils/promiseWithResolvers.d.ts.map +1 -1
- package/dist/utils/promiseWithResolvers.js +17 -10
- package/dist/utils/promiseWithResolvers.js.map +1 -1
- package/dist/utils.d.ts +6 -6
- package/dist/utils.js +5 -5
- package/package.json +3 -3
- package/dist/core/AssistantStreamChunk.js.map +0 -1
- package/dist/core/object/types.js.map +0 -1
- package/dist/core/serialization/ui-message-stream/chunk-types.js.map +0 -1
- package/dist/core/tool/tool-types.js.map +0 -1
- package/dist/core/tool/type-path-utils.js.map +0 -1
- package/dist/core/utils/stream/UnderlyingReadable.js.map +0 -1
- package/dist/core/utils/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/resumable/index.d.ts.map +0 -1
- package/dist/resumable/index.js.map +0 -1
- package/dist/resumable/types.js.map +0 -1
- package/dist/utils/json/json-value.js.map +0 -1
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js.map +0 -1
|
@@ -1,95 +1,83 @@
|
|
|
1
|
-
import { RedisResumableStreamStore
|
|
1
|
+
import { RedisResumableStreamStore } from "./redis-impl.js";
|
|
2
|
+
//#region src/resumable/stores/ioredis.ts
|
|
2
3
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
* Resumable stream store backed by [`ioredis`](https://www.npmjs.com/package/ioredis)
|
|
5
|
+
* v5. Accepts a `Redis` or `Cluster` instance.
|
|
6
|
+
*/
|
|
7
|
+
function createIoredisResumableStreamStore(client, options) {
|
|
8
|
+
return new RedisResumableStreamStore(adapt(client), options);
|
|
8
9
|
}
|
|
9
10
|
function adapt(client) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const pipe = client.pipeline();
|
|
48
|
-
for (const cmd of commands) {
|
|
49
|
-
applyPipelineCommand(pipe, cmd);
|
|
50
|
-
}
|
|
51
|
-
const results = (await pipe.exec()) ?? [];
|
|
52
|
-
for (const [err] of results) {
|
|
53
|
-
if (err)
|
|
54
|
-
throw err;
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
};
|
|
11
|
+
return {
|
|
12
|
+
async setNX(key, value, ttlSec) {
|
|
13
|
+
return await client.set(key, value, "EX", ttlSec, "NX") === "OK";
|
|
14
|
+
},
|
|
15
|
+
async set(key, value, ttlSec) {
|
|
16
|
+
await client.set(key, value, "EX", ttlSec);
|
|
17
|
+
},
|
|
18
|
+
async get(key) {
|
|
19
|
+
return client.get(key);
|
|
20
|
+
},
|
|
21
|
+
async expire(key, ttlSec) {
|
|
22
|
+
await client.expire(key, ttlSec);
|
|
23
|
+
},
|
|
24
|
+
async exists(key) {
|
|
25
|
+
return await client.exists(key) > 0;
|
|
26
|
+
},
|
|
27
|
+
async del(keys) {
|
|
28
|
+
if (keys.length === 0) return;
|
|
29
|
+
await client.del(...keys);
|
|
30
|
+
},
|
|
31
|
+
async xAdd(key, fields) {
|
|
32
|
+
return await client.xadd(key, "*", ...toFieldArgs(fields)) ?? "";
|
|
33
|
+
},
|
|
34
|
+
async xRange(key, start, end) {
|
|
35
|
+
return (await client.xrangeBuffer(key, start, end)).map(([idBuf, fieldArray]) => ({
|
|
36
|
+
id: idBuf.toString("utf8"),
|
|
37
|
+
fields: bufferFieldsToRecord(fieldArray)
|
|
38
|
+
}));
|
|
39
|
+
},
|
|
40
|
+
async pipeline(commands) {
|
|
41
|
+
if (commands.length === 0) return;
|
|
42
|
+
const pipe = client.pipeline();
|
|
43
|
+
for (const cmd of commands) applyPipelineCommand(pipe, cmd);
|
|
44
|
+
const results = await pipe.exec() ?? [];
|
|
45
|
+
for (const [err] of results) if (err) throw err;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
58
48
|
}
|
|
59
49
|
function applyPipelineCommand(pipe, cmd) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
50
|
+
switch (cmd.type) {
|
|
51
|
+
case "xAdd":
|
|
52
|
+
pipe.xadd(cmd.key, "*", ...toFieldArgs(cmd.fields));
|
|
53
|
+
return;
|
|
54
|
+
case "expire":
|
|
55
|
+
pipe.expire(cmd.key, cmd.ttlSec);
|
|
56
|
+
return;
|
|
57
|
+
case "set":
|
|
58
|
+
pipe.set(cmd.key, cmd.value, "EX", cmd.ttlSec);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
71
61
|
}
|
|
72
62
|
function toFieldArgs(fields) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
return args;
|
|
63
|
+
const args = [];
|
|
64
|
+
for (const [k, v] of Object.entries(fields)) args.push(k, typeof v === "string" ? v : toBuffer(v));
|
|
65
|
+
return args;
|
|
78
66
|
}
|
|
79
67
|
function toBuffer(bytes) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
68
|
+
if (Buffer.isBuffer(bytes)) return bytes;
|
|
69
|
+
return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
83
70
|
}
|
|
84
71
|
function bufferFieldsToRecord(fields) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
return out;
|
|
72
|
+
const out = {};
|
|
73
|
+
for (let i = 0; i + 1 < fields.length; i += 2) {
|
|
74
|
+
const key = fields[i]?.toString("utf8");
|
|
75
|
+
const value = fields[i + 1];
|
|
76
|
+
if (key !== void 0 && value !== void 0) out[key] = new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
94
79
|
}
|
|
80
|
+
//#endregion
|
|
81
|
+
export { createIoredisResumableStreamStore };
|
|
82
|
+
|
|
95
83
|
//# sourceMappingURL=ioredis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ioredis.js","
|
|
1
|
+
{"version":3,"file":"ioredis.js","names":[],"sources":["../../../src/resumable/stores/ioredis.ts"],"sourcesContent":["import type {\n ChainableCommander,\n Cluster as IoRedisCluster,\n Redis as IoRedis,\n} from \"ioredis\";\nimport {\n RedisResumableStreamStore,\n type PipelineCommand,\n type RedisLikeClient,\n type RedisResumableStreamStoreOptions,\n} from \"./redis-impl\";\nimport type { ResumableStreamStore } from \"../types\";\n\nexport type IoRedisLike = IoRedis | IoRedisCluster;\n\n/**\n * Resumable stream store backed by [`ioredis`](https://www.npmjs.com/package/ioredis)\n * v5. Accepts a `Redis` or `Cluster` instance.\n */\nexport function createIoredisResumableStreamStore(\n client: IoRedisLike,\n options?: RedisResumableStreamStoreOptions,\n): ResumableStreamStore {\n return new RedisResumableStreamStore(adapt(client), options);\n}\n\nfunction adapt(client: IoRedisLike): RedisLikeClient {\n return {\n async setNX(key, value, ttlSec) {\n const result = await client.set(key, value, \"EX\", ttlSec, \"NX\");\n return result === \"OK\";\n },\n async set(key, value, ttlSec) {\n await client.set(key, value, \"EX\", ttlSec);\n },\n async get(key) {\n return client.get(key);\n },\n async expire(key, ttlSec) {\n await client.expire(key, ttlSec);\n },\n async exists(key) {\n const result = await client.exists(key);\n return result > 0;\n },\n async del(keys) {\n if (keys.length === 0) return;\n await client.del(...keys);\n },\n async xAdd(key, fields) {\n const id = await client.xadd(key, \"*\", ...toFieldArgs(fields));\n return id ?? \"\";\n },\n async xRange(key, start, end) {\n const entries = await client.xrangeBuffer(key, start, end);\n return entries.map(([idBuf, fieldArray]) => ({\n id: idBuf.toString(\"utf8\"),\n fields: bufferFieldsToRecord(fieldArray),\n }));\n },\n async pipeline(commands) {\n if (commands.length === 0) return;\n const pipe = client.pipeline();\n for (const cmd of commands) {\n applyPipelineCommand(pipe, cmd);\n }\n const results = (await pipe.exec()) ?? [];\n for (const [err] of results) {\n if (err) throw err;\n }\n },\n };\n}\n\nfunction applyPipelineCommand(\n pipe: ChainableCommander,\n cmd: PipelineCommand,\n): void {\n switch (cmd.type) {\n case \"xAdd\":\n pipe.xadd(cmd.key, \"*\", ...toFieldArgs(cmd.fields));\n return;\n case \"expire\":\n pipe.expire(cmd.key, cmd.ttlSec);\n return;\n case \"set\":\n pipe.set(cmd.key, cmd.value, \"EX\", cmd.ttlSec);\n return;\n }\n}\n\nfunction toFieldArgs(\n fields: Record<string, string | Uint8Array>,\n): Array<string | Buffer> {\n const args: Array<string | Buffer> = [];\n for (const [k, v] of Object.entries(fields)) {\n args.push(k, typeof v === \"string\" ? v : toBuffer(v));\n }\n return args;\n}\n\nfunction toBuffer(bytes: Uint8Array): Buffer {\n if (Buffer.isBuffer(bytes)) return bytes;\n return Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n}\n\nfunction bufferFieldsToRecord(\n fields: Buffer[],\n): Record<string, string | Uint8Array> {\n const out: Record<string, string | Uint8Array> = {};\n for (let i = 0; i + 1 < fields.length; i += 2) {\n const key = fields[i]?.toString(\"utf8\");\n const value = fields[i + 1];\n if (key !== undefined && value !== undefined) {\n out[key] = new Uint8Array(\n value.buffer,\n value.byteOffset,\n value.byteLength,\n );\n }\n }\n return out;\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,kCACd,QACA,SACsB;CACtB,OAAO,IAAI,0BAA0B,MAAM,MAAM,GAAG,OAAO;AAC7D;AAEA,SAAS,MAAM,QAAsC;CACnD,OAAO;EACL,MAAM,MAAM,KAAK,OAAO,QAAQ;GAE9B,OAAO,MADc,OAAO,IAAI,KAAK,OAAO,MAAM,QAAQ,IAAI,MAC5C;EACpB;EACA,MAAM,IAAI,KAAK,OAAO,QAAQ;GAC5B,MAAM,OAAO,IAAI,KAAK,OAAO,MAAM,MAAM;EAC3C;EACA,MAAM,IAAI,KAAK;GACb,OAAO,OAAO,IAAI,GAAG;EACvB;EACA,MAAM,OAAO,KAAK,QAAQ;GACxB,MAAM,OAAO,OAAO,KAAK,MAAM;EACjC;EACA,MAAM,OAAO,KAAK;GAEhB,OAAO,MADc,OAAO,OAAO,GAAG,IACtB;EAClB;EACA,MAAM,IAAI,MAAM;GACd,IAAI,KAAK,WAAW,GAAG;GACvB,MAAM,OAAO,IAAI,GAAG,IAAI;EAC1B;EACA,MAAM,KAAK,KAAK,QAAQ;GAEtB,OAAO,MADU,OAAO,KAAK,KAAK,KAAK,GAAG,YAAY,MAAM,CAAC,KAChD;EACf;EACA,MAAM,OAAO,KAAK,OAAO,KAAK;GAE5B,QAAO,MADe,OAAO,aAAa,KAAK,OAAO,GAAG,GAC1C,KAAK,CAAC,OAAO,iBAAiB;IAC3C,IAAI,MAAM,SAAS,MAAM;IACzB,QAAQ,qBAAqB,UAAU;GACzC,EAAE;EACJ;EACA,MAAM,SAAS,UAAU;GACvB,IAAI,SAAS,WAAW,GAAG;GAC3B,MAAM,OAAO,OAAO,SAAS;GAC7B,KAAK,MAAM,OAAO,UAChB,qBAAqB,MAAM,GAAG;GAEhC,MAAM,UAAW,MAAM,KAAK,KAAK,KAAM,CAAC;GACxC,KAAK,MAAM,CAAC,QAAQ,SAClB,IAAI,KAAK,MAAM;EAEnB;CACF;AACF;AAEA,SAAS,qBACP,MACA,KACM;CACN,QAAQ,IAAI,MAAZ;EACE,KAAK;GACH,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,YAAY,IAAI,MAAM,CAAC;GAClD;EACF,KAAK;GACH,KAAK,OAAO,IAAI,KAAK,IAAI,MAAM;GAC/B;EACF,KAAK;GACH,KAAK,IAAI,IAAI,KAAK,IAAI,OAAO,MAAM,IAAI,MAAM;GAC7C;CACJ;AACF;AAEA,SAAS,YACP,QACwB;CACxB,MAAM,OAA+B,CAAC;CACtC,KAAK,MAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,MAAM,GACxC,KAAK,KAAK,GAAG,OAAO,MAAM,WAAW,IAAI,SAAS,CAAC,CAAC;CAEtD,OAAO;AACT;AAEA,SAAS,SAAS,OAA2B;CAC3C,IAAI,OAAO,SAAS,KAAK,GAAG,OAAO;CACnC,OAAO,OAAO,KAAK,MAAM,QAAQ,MAAM,YAAY,MAAM,UAAU;AACrE;AAEA,SAAS,qBACP,QACqC;CACrC,MAAM,MAA2C,CAAC;CAClD,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,OAAO,QAAQ,KAAK,GAAG;EAC7C,MAAM,MAAM,OAAO,IAAI,SAAS,MAAM;EACtC,MAAM,QAAQ,OAAO,IAAI;EACzB,IAAI,QAAQ,KAAA,KAAa,UAAU,KAAA,GACjC,IAAI,OAAO,IAAI,WACb,MAAM,QACN,MAAM,YACN,MAAM,UACR;CAEJ;CACA,OAAO;AACT"}
|
|
@@ -1,60 +1,63 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { ResumableStreamAcquireOptions, ResumableStreamEntry, ResumableStreamRole, ResumableStreamStatus, ResumableStreamStore } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/resumable/stores/redis-impl.d.ts
|
|
4
|
+
type PipelineCommand = {
|
|
5
|
+
readonly type: "xAdd";
|
|
6
|
+
readonly key: string;
|
|
7
|
+
readonly fields: Record<string, string | Uint8Array>;
|
|
6
8
|
} | {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
readonly type: "expire";
|
|
10
|
+
readonly key: string;
|
|
11
|
+
readonly ttlSec: number;
|
|
10
12
|
} | {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
readonly type: "set";
|
|
14
|
+
readonly key: string;
|
|
15
|
+
readonly value: string;
|
|
16
|
+
readonly ttlSec: number;
|
|
15
17
|
};
|
|
16
18
|
/**
|
|
17
19
|
* Structural Redis-client interface. The bundled `redis` and `ioredis`
|
|
18
20
|
* adapters wrap their respective clients to satisfy it; custom or proxied
|
|
19
21
|
* clients can implement it directly.
|
|
20
22
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
23
|
+
interface RedisLikeClient {
|
|
24
|
+
setNX(key: string, value: string, ttlSec: number): Promise<boolean>;
|
|
25
|
+
set(key: string, value: string, ttlSec: number): Promise<void>;
|
|
26
|
+
get(key: string): Promise<string | null>;
|
|
27
|
+
expire(key: string, ttlSec: number): Promise<void>;
|
|
28
|
+
exists(key: string): Promise<boolean>;
|
|
29
|
+
del(keys: string[]): Promise<void>;
|
|
30
|
+
xAdd(key: string, fields: Record<string, string | Uint8Array>): Promise<string>;
|
|
31
|
+
xRange(key: string, start: string, end: string): Promise<Array<{
|
|
32
|
+
id: string;
|
|
33
|
+
fields: Record<string, string | Uint8Array>;
|
|
34
|
+
}>>;
|
|
35
|
+
/** Executes the commands as a single pipeline batch (one round trip). */
|
|
36
|
+
pipeline(commands: readonly PipelineCommand[]): Promise<void>;
|
|
35
37
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
readonly maxChunkBytes?: number;
|
|
38
|
+
type RedisResumableStreamStoreOptions = {
|
|
39
|
+
readonly keyPrefix?: string;
|
|
40
|
+
readonly defaultTtlMs?: number; /** Defaults to 100ms. Lower values reduce read latency, raise traffic. */
|
|
41
|
+
readonly pollIntervalMs?: number;
|
|
42
|
+
readonly maxChunkBytes?: number;
|
|
42
43
|
};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
44
|
+
declare class RedisResumableStreamStore implements ResumableStreamStore {
|
|
45
|
+
private readonly client;
|
|
46
|
+
private readonly keyPrefix;
|
|
47
|
+
private readonly defaultTtlMs;
|
|
48
|
+
private readonly pollIntervalMs;
|
|
49
|
+
private readonly maxChunkBytes;
|
|
50
|
+
constructor(client: RedisLikeClient, options?: RedisResumableStreamStoreOptions);
|
|
51
|
+
acquire(streamId: string, options?: ResumableStreamAcquireOptions): Promise<ResumableStreamRole>;
|
|
52
|
+
append(streamId: string, chunk: Uint8Array): Promise<void>;
|
|
53
|
+
finalize(streamId: string, status: "done" | "error", error?: string): Promise<void>;
|
|
54
|
+
read(streamId: string, cursor: string, signal: AbortSignal): AsyncIterable<ResumableStreamEntry>;
|
|
55
|
+
status(streamId: string): Promise<ResumableStreamStatus>;
|
|
56
|
+
delete(streamId: string): Promise<void>;
|
|
57
|
+
private readMeta;
|
|
58
|
+
private metaKey;
|
|
59
|
+
private dataKey;
|
|
59
60
|
}
|
|
61
|
+
//#endregion
|
|
62
|
+
export { PipelineCommand, RedisLikeClient, RedisResumableStreamStore, RedisResumableStreamStoreOptions };
|
|
60
63
|
//# sourceMappingURL=redis-impl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis-impl.d.ts","
|
|
1
|
+
{"version":3,"file":"redis-impl.d.ts","names":[],"sources":["../../../src/resumable/stores/redis-impl.ts"],"mappings":";;;KAsBY,eAAA;EAAA,SAEG,IAAA;EAAA,SACA,GAAA;EAAA,SACA,MAAA,EAAQ,MAAM,kBAAkB,UAAA;AAAA;EAAA,SAEhC,IAAA;EAAA,SAAyB,GAAA;EAAA,SAAsB,MAAA;AAAA;EAAA,SAE/C,IAAA;EAAA,SACA,GAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA;AAAA;;;;;;UAQE,eAAA;EACf,KAAA,CAAM,GAAA,UAAa,KAAA,UAAe,MAAA,WAAiB,OAAA;EACnD,GAAA,CAAI,GAAA,UAAa,KAAA,UAAe,MAAA,WAAiB,OAAA;EACjD,GAAA,CAAI,GAAA,WAAc,OAAA;EAClB,MAAA,CAAO,GAAA,UAAa,MAAA,WAAiB,OAAA;EACrC,MAAA,CAAO,GAAA,WAAc,OAAA;EACrB,GAAA,CAAI,IAAA,aAAiB,OAAA;EACrB,IAAA,CACE,GAAA,UACA,MAAA,EAAQ,MAAA,kBAAwB,UAAA,IAC/B,OAAA;EACH,MAAA,CACE,GAAA,UACA,KAAA,UACA,GAAA,WACC,OAAA,CACD,KAAA;IAAQ,EAAA;IAAY,MAAA,EAAQ,MAAA,kBAAwB,UAAA;EAAA;EANnD;EASH,QAAA,CAAS,QAAA,WAAmB,eAAA,KAAoB,OAAA;AAAA;AAAA,KAGtC,gCAAA;EAAA,SACD,SAAA;EAAA,SACA,YAAA,WALuC;EAAA,SAOvC,cAAA;EAAA,SACA,aAAA;AAAA;AAAA,cAGE,yBAAA,YAAqC,oBAAA;EAAA,iBAC/B,MAAA;EAAA,iBACA,SAAA;EAAA,iBACA,YAAA;EAAA,iBACA,cAAA;EAAA,iBACA,aAAA;cAGf,MAAA,EAAQ,eAAA,EACR,OAAA,GAAS,gCAAA;EASL,OAAA,CACJ,QAAA,UACA,OAAA,GAAU,6BAAA,GACT,OAAA,CAAQ,mBAAA;EAiBL,MAAA,CAAO,QAAA,UAAkB,KAAA,EAAO,UAAA,GAAa,OAAA;EA8B7C,QAAA,CACJ,QAAA,UACA,MAAA,oBACA,KAAA,YACC,OAAA;EA6BI,IAAA,CACL,QAAA,UACA,MAAA,UACA,MAAA,EAAQ,WAAA,GACP,aAAA,CAAc,oBAAA;EA2CX,MAAA,CAAO,QAAA,WAAmB,OAAA,CAAQ,qBAAA;EAWlC,MAAA,CAAO,QAAA,WAAmB,OAAA;EAAA,QAKlB,QAAA;EAAA,QAQN,OAAA;EAAA,QAIA,OAAA;AAAA"}
|