@laserdata/laser-sdk 0.5.3 → 0.6.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/README.md +105 -79
- package/dist/agent/agdx.d.ts +8 -3
- package/dist/agent/agdx.d.ts.map +1 -1
- package/dist/agent/agdx.js +39 -22
- package/dist/agent/agdx.js.map +1 -1
- package/dist/agent/builder.d.ts +25 -15
- package/dist/agent/builder.d.ts.map +1 -1
- package/dist/agent/builder.js +103 -59
- package/dist/agent/builder.js.map +1 -1
- package/dist/agent/context.d.ts +3 -6
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +17 -9
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/contract.d.ts +2 -2
- package/dist/agent/contract.d.ts.map +1 -1
- package/dist/agent/contract.js +10 -6
- package/dist/agent/contract.js.map +1 -1
- package/dist/agent/memory-handler.d.ts +25 -0
- package/dist/agent/memory-handler.d.ts.map +1 -0
- package/dist/agent/memory-handler.js +43 -0
- package/dist/agent/memory-handler.js.map +1 -0
- package/dist/agent/registry.d.ts +3 -10
- package/dist/agent/registry.d.ts.map +1 -1
- package/dist/agent/registry.js +22 -19
- package/dist/agent/registry.js.map +1 -1
- package/dist/agent/reliable-consumer.d.ts +19 -9
- package/dist/agent/reliable-consumer.d.ts.map +1 -1
- package/dist/agent/reliable-consumer.js +193 -54
- package/dist/agent/reliable-consumer.js.map +1 -1
- package/dist/agent/replies.d.ts +6 -0
- package/dist/agent/replies.d.ts.map +1 -1
- package/dist/agent/replies.js +55 -4
- package/dist/agent/replies.js.map +1 -1
- package/dist/agent/router.d.ts +1 -1
- package/dist/agent/router.d.ts.map +1 -1
- package/dist/agent/router.js +5 -19
- package/dist/agent/router.js.map +1 -1
- package/dist/agent/scope.d.ts +7 -3
- package/dist/agent/scope.d.ts.map +1 -1
- package/dist/agent/scope.js +11 -1
- package/dist/agent/scope.js.map +1 -1
- package/dist/agent/timer.d.ts +6 -0
- package/dist/agent/timer.d.ts.map +1 -0
- package/dist/agent/timer.js +21 -0
- package/dist/agent/timer.js.map +1 -0
- package/dist/agent/workflow.d.ts +16 -19
- package/dist/agent/workflow.d.ts.map +1 -1
- package/dist/agent/workflow.js +17 -6
- package/dist/agent/workflow.js.map +1 -1
- package/dist/blob.d.ts +2 -3
- package/dist/blob.d.ts.map +1 -1
- package/dist/blob.js.map +1 -1
- package/dist/bridges/a2a.d.ts +34 -23
- package/dist/bridges/a2a.d.ts.map +1 -1
- package/dist/bridges/a2a.js +29 -19
- package/dist/bridges/a2a.js.map +1 -1
- package/dist/bridges/hops.d.ts +1 -1
- package/dist/bridges/hops.d.ts.map +1 -1
- package/dist/bridges/hops.js +1 -1
- package/dist/bridges/hops.js.map +1 -1
- package/dist/bridges/mcp.d.ts +27 -7
- package/dist/bridges/mcp.d.ts.map +1 -1
- package/dist/bridges/mcp.js +24 -9
- package/dist/bridges/mcp.js.map +1 -1
- package/dist/client/bytes.d.ts +5 -0
- package/dist/client/bytes.d.ts.map +1 -1
- package/dist/client/bytes.js +15 -0
- package/dist/client/bytes.js.map +1 -1
- package/dist/client/capabilities.d.ts +25 -13
- package/dist/client/capabilities.d.ts.map +1 -1
- package/dist/client/capabilities.js +145 -123
- package/dist/client/capabilities.js.map +1 -1
- package/dist/client/error-classify.d.ts +57 -0
- package/dist/client/error-classify.d.ts.map +1 -0
- package/dist/client/error-classify.js +347 -0
- package/dist/client/error-classify.js.map +1 -0
- package/dist/client/errors.d.ts +113 -40
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +191 -53
- package/dist/client/errors.js.map +1 -1
- package/dist/client/internals.d.ts +1 -0
- package/dist/client/internals.d.ts.map +1 -1
- package/dist/client/internals.js +1 -0
- package/dist/client/internals.js.map +1 -1
- package/dist/client/laser.d.ts +62 -46
- package/dist/client/laser.d.ts.map +1 -1
- package/dist/client/laser.js +206 -120
- package/dist/client/laser.js.map +1 -1
- package/dist/client/managed.d.ts +3 -0
- package/dist/client/managed.d.ts.map +1 -1
- package/dist/client/managed.js +70 -3
- package/dist/client/managed.js.map +1 -1
- package/dist/context-scope.d.ts +25 -9
- package/dist/context-scope.d.ts.map +1 -1
- package/dist/context-scope.js +36 -9
- package/dist/context-scope.js.map +1 -1
- package/dist/context.d.ts +33 -16
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +174 -95
- package/dist/context.js.map +1 -1
- package/dist/conversation-state.d.ts +1 -1
- package/dist/conversation-state.d.ts.map +1 -1
- package/dist/conversation-state.js +35 -16
- package/dist/conversation-state.js.map +1 -1
- package/dist/govern.d.ts +24 -5
- package/dist/govern.d.ts.map +1 -1
- package/dist/govern.js +116 -28
- package/dist/govern.js.map +1 -1
- package/dist/iggy/apache-iggy.d.ts +59 -56
- package/dist/iggy/apache-iggy.d.ts.map +1 -1
- package/dist/iggy/apache-iggy.js +300 -137
- package/dist/iggy/apache-iggy.js.map +1 -1
- package/dist/index.d.ts +97 -65
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -30
- package/dist/index.js.map +1 -1
- package/dist/intent.d.ts +16 -2
- package/dist/intent.d.ts.map +1 -1
- package/dist/intent.js +50 -18
- package/dist/intent.js.map +1 -1
- package/dist/managed/coordination.d.ts +82 -0
- package/dist/managed/coordination.d.ts.map +1 -0
- package/dist/managed/coordination.js +367 -0
- package/dist/managed/coordination.js.map +1 -0
- package/dist/managed/destinations.d.ts +4 -3
- package/dist/managed/destinations.d.ts.map +1 -1
- package/dist/managed/destinations.js +29 -13
- package/dist/managed/destinations.js.map +1 -1
- package/dist/managed/filters.d.ts +5 -5
- package/dist/managed/filters.d.ts.map +1 -1
- package/dist/managed/filters.js +39 -22
- package/dist/managed/filters.js.map +1 -1
- package/dist/managed/forks.d.ts +8 -11
- package/dist/managed/forks.d.ts.map +1 -1
- package/dist/managed/forks.js +33 -13
- package/dist/managed/forks.js.map +1 -1
- package/dist/managed/graph.d.ts +1 -4
- package/dist/managed/graph.d.ts.map +1 -1
- package/dist/managed/graph.js +5 -3
- package/dist/managed/graph.js.map +1 -1
- package/dist/managed/kv.d.ts +26 -14
- package/dist/managed/kv.d.ts.map +1 -1
- package/dist/managed/kv.js +88 -61
- package/dist/managed/kv.js.map +1 -1
- package/dist/managed/projections.d.ts +5 -8
- package/dist/managed/projections.d.ts.map +1 -1
- package/dist/managed/projections.js +22 -2
- package/dist/managed/projections.js.map +1 -1
- package/dist/managed/query.d.ts +20 -6
- package/dist/managed/query.d.ts.map +1 -1
- package/dist/managed/query.js +97 -24
- package/dist/managed/query.js.map +1 -1
- package/dist/managed/runs.d.ts +2 -4
- package/dist/managed/runs.d.ts.map +1 -1
- package/dist/managed/runs.js +9 -1
- package/dist/managed/runs.js.map +1 -1
- package/dist/managed/watch.d.ts +2 -4
- package/dist/managed/watch.d.ts.map +1 -1
- package/dist/managed/watch.js +9 -1
- package/dist/managed/watch.js.map +1 -1
- package/dist/memory/handle.d.ts +75 -22
- package/dist/memory/handle.d.ts.map +1 -1
- package/dist/memory/handle.js +232 -58
- package/dist/memory/handle.js.map +1 -1
- package/dist/memory/log-memory.d.ts +24 -12
- package/dist/memory/log-memory.d.ts.map +1 -1
- package/dist/memory/log-memory.js +214 -100
- package/dist/memory/log-memory.js.map +1 -1
- package/dist/memory/topic.d.ts +2 -2
- package/dist/memory/topic.d.ts.map +1 -1
- package/dist/memory/topic.js +7 -5
- package/dist/memory/topic.js.map +1 -1
- package/dist/memory/types.d.ts +41 -5
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +44 -18
- package/dist/memory/types.js.map +1 -1
- package/dist/memory/vector-memory.d.ts +8 -6
- package/dist/memory/vector-memory.d.ts.map +1 -1
- package/dist/memory/vector-memory.js +65 -34
- package/dist/memory/vector-memory.js.map +1 -1
- package/dist/memory.d.ts +6 -5
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +4 -4
- package/dist/memory.js.map +1 -1
- package/dist/provenance/agent-topic.d.ts +3 -1
- package/dist/provenance/agent-topic.d.ts.map +1 -1
- package/dist/provenance/agent-topic.js +3 -1
- package/dist/provenance/agent-topic.js.map +1 -1
- package/dist/provenance/provenance.d.ts +3 -3
- package/dist/provenance/provenance.d.ts.map +1 -1
- package/dist/provenance/provenance.js +30 -18
- package/dist/provenance/provenance.js.map +1 -1
- package/dist/runtime/clock.d.ts +3 -0
- package/dist/runtime/clock.d.ts.map +1 -1
- package/dist/runtime/clock.js +16 -3
- package/dist/runtime/clock.js.map +1 -1
- package/dist/schema-codecs.d.ts +7 -3
- package/dist/schema-codecs.d.ts.map +1 -1
- package/dist/schema-codecs.js +80 -12
- package/dist/schema-codecs.js.map +1 -1
- package/dist/session.d.ts +27 -18
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +95 -37
- package/dist/session.js.map +1 -1
- package/dist/signing.d.ts +11 -5
- package/dist/signing.d.ts.map +1 -1
- package/dist/signing.js +64 -21
- package/dist/signing.js.map +1 -1
- package/dist/snapshot.d.ts +10 -2
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +62 -28
- package/dist/snapshot.js.map +1 -1
- package/dist/state-store.d.ts +1 -1
- package/dist/state-store.d.ts.map +1 -1
- package/dist/state-store.js.map +1 -1
- package/dist/stream/batching.d.ts +81 -0
- package/dist/stream/batching.d.ts.map +1 -0
- package/dist/stream/batching.js +210 -0
- package/dist/stream/batching.js.map +1 -0
- package/dist/stream/bson.d.ts +3 -0
- package/dist/stream/bson.d.ts.map +1 -0
- package/dist/stream/bson.js +245 -0
- package/dist/stream/bson.js.map +1 -0
- package/dist/stream/codecs.d.ts +58 -6
- package/dist/stream/codecs.d.ts.map +1 -1
- package/dist/stream/codecs.js +143 -59
- package/dist/stream/codecs.js.map +1 -1
- package/dist/stream/consumer-group.d.ts +13 -10
- package/dist/stream/consumer-group.d.ts.map +1 -1
- package/dist/stream/consumer-group.js +91 -31
- package/dist/stream/consumer-group.js.map +1 -1
- package/dist/stream/consumer-start.d.ts +17 -0
- package/dist/stream/consumer-start.d.ts.map +1 -0
- package/dist/stream/consumer-start.js +2 -0
- package/dist/stream/consumer-start.js.map +1 -0
- package/dist/stream/consumer.d.ts +166 -24
- package/dist/stream/consumer.d.ts.map +1 -1
- package/dist/stream/consumer.js +451 -68
- package/dist/stream/consumer.js.map +1 -1
- package/dist/stream/cursor.d.ts +5 -12
- package/dist/stream/cursor.d.ts.map +1 -1
- package/dist/stream/cursor.js +34 -8
- package/dist/stream/cursor.js.map +1 -1
- package/dist/stream/header-value.d.ts +61 -15
- package/dist/stream/header-value.d.ts.map +1 -1
- package/dist/stream/header-value.js.map +1 -1
- package/dist/stream/message.d.ts +17 -0
- package/dist/stream/message.d.ts.map +1 -0
- package/dist/stream/message.js +9 -0
- package/dist/stream/message.js.map +1 -0
- package/dist/stream/producer.d.ts +127 -11
- package/dist/stream/producer.d.ts.map +1 -1
- package/dist/stream/producer.js +401 -36
- package/dist/stream/producer.js.map +1 -1
- package/dist/stream/publish.d.ts +6 -15
- package/dist/stream/publish.d.ts.map +1 -1
- package/dist/stream/publish.js +18 -28
- package/dist/stream/publish.js.map +1 -1
- package/dist/stream/record.d.ts +4 -6
- package/dist/stream/record.d.ts.map +1 -1
- package/dist/stream/record.js +4 -3
- package/dist/stream/record.js.map +1 -1
- package/dist/stream/routing.d.ts +12 -0
- package/dist/stream/routing.d.ts.map +1 -1
- package/dist/stream/routing.js +6 -1
- package/dist/stream/routing.js.map +1 -1
- package/dist/stream/stream.d.ts +1 -4
- package/dist/stream/stream.d.ts.map +1 -1
- package/dist/stream/stream.js +5 -1
- package/dist/stream/stream.js.map +1 -1
- package/dist/stream/topic.d.ts +22 -23
- package/dist/stream/topic.d.ts.map +1 -1
- package/dist/stream/topic.js +90 -30
- package/dist/stream/topic.js.map +1 -1
- package/dist/stream/typed-topic.d.ts +9 -13
- package/dist/stream/typed-topic.d.ts.map +1 -1
- package/dist/stream/typed-topic.js +25 -10
- package/dist/stream/typed-topic.js.map +1 -1
- package/dist/swarm.d.ts +0 -1
- package/dist/swarm.d.ts.map +1 -1
- package/dist/swarm.js +1 -0
- package/dist/swarm.js.map +1 -1
- package/dist/testing.d.ts +3 -3
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +3 -3
- package/dist/testing.js.map +1 -1
- package/dist/types/ids.d.ts +17 -2
- package/dist/types/ids.d.ts.map +1 -1
- package/dist/types/ids.js +34 -14
- package/dist/types/ids.js.map +1 -1
- package/dist/wire/agent.d.ts +22 -0
- package/dist/wire/agent.d.ts.map +1 -1
- package/dist/wire/agent.js +80 -25
- package/dist/wire/agent.js.map +1 -1
- package/dist/wire/authz.d.ts +35 -1
- package/dist/wire/authz.d.ts.map +1 -1
- package/dist/wire/authz.js +45 -15
- package/dist/wire/authz.js.map +1 -1
- package/dist/wire/cbor.d.ts.map +1 -1
- package/dist/wire/cbor.js +13 -2
- package/dist/wire/cbor.js.map +1 -1
- package/dist/wire/checkpoint.d.ts +17 -12
- package/dist/wire/checkpoint.d.ts.map +1 -1
- package/dist/wire/checkpoint.js +28 -3
- package/dist/wire/checkpoint.js.map +1 -1
- package/dist/wire/control.d.ts +82 -0
- package/dist/wire/control.d.ts.map +1 -1
- package/dist/wire/control.js +219 -0
- package/dist/wire/control.js.map +1 -1
- package/dist/wire/filter-eval.d.ts +41 -7
- package/dist/wire/filter-eval.d.ts.map +1 -1
- package/dist/wire/filter-eval.js +26 -28
- package/dist/wire/filter-eval.js.map +1 -1
- package/dist/wire/filter.d.ts +51 -17
- package/dist/wire/filter.d.ts.map +1 -1
- package/dist/wire/filter.js +99 -10
- package/dist/wire/filter.js.map +1 -1
- package/dist/wire/fork.d.ts +14 -1
- package/dist/wire/fork.d.ts.map +1 -1
- package/dist/wire/fork.js +19 -8
- package/dist/wire/fork.js.map +1 -1
- package/dist/wire/graph.d.ts +3 -0
- package/dist/wire/graph.d.ts.map +1 -1
- package/dist/wire/graph.js +18 -4
- package/dist/wire/graph.js.map +1 -1
- package/dist/wire/hello.d.ts +4 -1
- package/dist/wire/hello.d.ts.map +1 -1
- package/dist/wire/hello.js +13 -3
- package/dist/wire/hello.js.map +1 -1
- package/dist/wire/index.d.ts +4 -1
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +4 -1
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/kv.d.ts +37 -2
- package/dist/wire/kv.d.ts.map +1 -1
- package/dist/wire/kv.js +36 -18
- package/dist/wire/kv.js.map +1 -1
- package/dist/wire/query.d.ts +6 -0
- package/dist/wire/query.d.ts.map +1 -1
- package/dist/wire/query.js +38 -12
- package/dist/wire/query.js.map +1 -1
- package/dist/wire/schema.d.ts +29 -6
- package/dist/wire/schema.d.ts.map +1 -1
- package/dist/wire/schema.js +61 -26
- package/dist/wire/schema.js.map +1 -1
- package/dist/wire/snapshot.js +1 -1
- package/dist/wire/snapshot.js.map +1 -1
- package/dist/wire/value.d.ts +10 -2
- package/dist/wire/value.d.ts.map +1 -1
- package/dist/wire/value.js +29 -3
- package/dist/wire/value.js.map +1 -1
- package/package.json +2 -3
- package/dist/stream/polling-strategy.d.ts +0 -14
- package/dist/stream/polling-strategy.d.ts.map +0 -1
- package/dist/stream/polling-strategy.js +0 -2
- package/dist/stream/polling-strategy.js.map +0 -1
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
const DOUBLE = 0x01;
|
|
2
|
+
const STRING = 0x02;
|
|
3
|
+
const DOCUMENT = 0x03;
|
|
4
|
+
const ARRAY = 0x04;
|
|
5
|
+
const BINARY = 0x05;
|
|
6
|
+
const BOOLEAN = 0x08;
|
|
7
|
+
const NULL = 0x0a;
|
|
8
|
+
const INT32 = 0x10;
|
|
9
|
+
const INT64 = 0x12;
|
|
10
|
+
const BINARY_OLD = 0x02;
|
|
11
|
+
const MAX_DEPTH = 100;
|
|
12
|
+
const I64_MIN = -(1n << 63n);
|
|
13
|
+
const I64_MAX = (1n << 63n) - 1n;
|
|
14
|
+
const textEncoder = new TextEncoder();
|
|
15
|
+
const textDecoder = new TextDecoder("utf-8", { fatal: true });
|
|
16
|
+
// Encodes the way the Rust and Python clients do through serde: every integer
|
|
17
|
+
// is an Int64, every other number a Double, bytes a generic Binary.
|
|
18
|
+
export function encodeBsonDocument(value) {
|
|
19
|
+
const entries = documentEntries(value);
|
|
20
|
+
if (entries === undefined)
|
|
21
|
+
throw new TypeError("a BSON body must be a document");
|
|
22
|
+
const out = [];
|
|
23
|
+
writeDocument(out, entries, 0);
|
|
24
|
+
return Uint8Array.from(out);
|
|
25
|
+
}
|
|
26
|
+
export function decodeBsonDocument(payload) {
|
|
27
|
+
const reader = new Reader(payload);
|
|
28
|
+
const document = reader.document(0, false);
|
|
29
|
+
if (reader.offset !== payload.length)
|
|
30
|
+
throw new RangeError("BSON payload has trailing bytes");
|
|
31
|
+
return document;
|
|
32
|
+
}
|
|
33
|
+
function documentEntries(value) {
|
|
34
|
+
if (value instanceof Map) {
|
|
35
|
+
const entries = [...value.entries()];
|
|
36
|
+
if (!entries.every(([key]) => typeof key === "string"))
|
|
37
|
+
throw new TypeError("BSON document keys must be strings");
|
|
38
|
+
return entries;
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === "object" &&
|
|
41
|
+
value !== null &&
|
|
42
|
+
!Array.isArray(value) &&
|
|
43
|
+
!ArrayBuffer.isView(value) &&
|
|
44
|
+
!(value instanceof Date)) {
|
|
45
|
+
return Object.entries(value).filter(([, nested]) => nested !== undefined);
|
|
46
|
+
}
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
function writeDocument(out, entries, depth) {
|
|
50
|
+
if (depth > MAX_DEPTH)
|
|
51
|
+
throw new TypeError("BSON value exceeds the maximum depth");
|
|
52
|
+
const start = out.length;
|
|
53
|
+
writeI32(out, 0);
|
|
54
|
+
for (const [key, value] of entries)
|
|
55
|
+
writeElement(out, key, value, depth);
|
|
56
|
+
out.push(0);
|
|
57
|
+
patchI32(out, start, out.length - start);
|
|
58
|
+
}
|
|
59
|
+
function writeElement(out, key, value, depth) {
|
|
60
|
+
const tag = out.length;
|
|
61
|
+
out.push(0);
|
|
62
|
+
writeCString(out, key);
|
|
63
|
+
out[tag] = writeValue(out, value, depth);
|
|
64
|
+
}
|
|
65
|
+
function writeValue(out, value, depth) {
|
|
66
|
+
if (value === null)
|
|
67
|
+
return NULL;
|
|
68
|
+
if (typeof value === "boolean") {
|
|
69
|
+
out.push(value ? 1 : 0);
|
|
70
|
+
return BOOLEAN;
|
|
71
|
+
}
|
|
72
|
+
if (typeof value === "number") {
|
|
73
|
+
if (Number.isSafeInteger(value)) {
|
|
74
|
+
writeI64(out, BigInt(value));
|
|
75
|
+
return INT64;
|
|
76
|
+
}
|
|
77
|
+
writeF64(out, value);
|
|
78
|
+
return DOUBLE;
|
|
79
|
+
}
|
|
80
|
+
if (typeof value === "bigint") {
|
|
81
|
+
if (value < I64_MIN || value > I64_MAX)
|
|
82
|
+
throw new RangeError("BSON integers must fit in signed 64 bits");
|
|
83
|
+
writeI64(out, value);
|
|
84
|
+
return INT64;
|
|
85
|
+
}
|
|
86
|
+
if (typeof value === "string") {
|
|
87
|
+
const bytes = textEncoder.encode(value);
|
|
88
|
+
writeI32(out, bytes.length + 1);
|
|
89
|
+
for (const byte of bytes)
|
|
90
|
+
out.push(byte);
|
|
91
|
+
out.push(0);
|
|
92
|
+
return STRING;
|
|
93
|
+
}
|
|
94
|
+
if (value instanceof Uint8Array) {
|
|
95
|
+
writeI32(out, value.length);
|
|
96
|
+
out.push(0);
|
|
97
|
+
for (const byte of value)
|
|
98
|
+
out.push(byte);
|
|
99
|
+
return BINARY;
|
|
100
|
+
}
|
|
101
|
+
if (Array.isArray(value)) {
|
|
102
|
+
writeDocument(out, value.map((item, index) => [String(index), item ?? null]), depth + 1);
|
|
103
|
+
return ARRAY;
|
|
104
|
+
}
|
|
105
|
+
const entries = documentEntries(value);
|
|
106
|
+
if (entries === undefined)
|
|
107
|
+
throw new TypeError(`${typeof value} has no BSON form`);
|
|
108
|
+
writeDocument(out, entries, depth + 1);
|
|
109
|
+
return DOCUMENT;
|
|
110
|
+
}
|
|
111
|
+
function writeCString(out, text) {
|
|
112
|
+
const bytes = textEncoder.encode(text);
|
|
113
|
+
if (bytes.includes(0))
|
|
114
|
+
throw new TypeError("BSON keys must not contain a NUL byte");
|
|
115
|
+
for (const byte of bytes)
|
|
116
|
+
out.push(byte);
|
|
117
|
+
out.push(0);
|
|
118
|
+
}
|
|
119
|
+
function writeI32(out, value) {
|
|
120
|
+
out.push(value & 0xff, (value >>> 8) & 0xff, (value >>> 16) & 0xff, (value >>> 24) & 0xff);
|
|
121
|
+
}
|
|
122
|
+
function patchI32(out, at, value) {
|
|
123
|
+
out[at] = value & 0xff;
|
|
124
|
+
out[at + 1] = (value >>> 8) & 0xff;
|
|
125
|
+
out[at + 2] = (value >>> 16) & 0xff;
|
|
126
|
+
out[at + 3] = (value >>> 24) & 0xff;
|
|
127
|
+
}
|
|
128
|
+
function writeI64(out, value) {
|
|
129
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
130
|
+
view.setBigInt64(0, value, true);
|
|
131
|
+
for (let index = 0; index < 8; index += 1)
|
|
132
|
+
out.push(view.getUint8(index));
|
|
133
|
+
}
|
|
134
|
+
function writeF64(out, value) {
|
|
135
|
+
const view = new DataView(new ArrayBuffer(8));
|
|
136
|
+
view.setFloat64(0, value, true);
|
|
137
|
+
for (let index = 0; index < 8; index += 1)
|
|
138
|
+
out.push(view.getUint8(index));
|
|
139
|
+
}
|
|
140
|
+
class Reader {
|
|
141
|
+
bytes;
|
|
142
|
+
offset = 0;
|
|
143
|
+
view;
|
|
144
|
+
constructor(bytes) {
|
|
145
|
+
this.bytes = bytes;
|
|
146
|
+
this.view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
147
|
+
}
|
|
148
|
+
document(depth, array) {
|
|
149
|
+
if (depth > MAX_DEPTH)
|
|
150
|
+
throw new RangeError("BSON value exceeds the maximum depth");
|
|
151
|
+
const start = this.offset;
|
|
152
|
+
const length = this.i32();
|
|
153
|
+
const end = start + length;
|
|
154
|
+
if (length < 5 || end > this.bytes.length)
|
|
155
|
+
throw new RangeError("BSON document length is invalid");
|
|
156
|
+
const object = {};
|
|
157
|
+
const items = [];
|
|
158
|
+
while (this.offset < end - 1) {
|
|
159
|
+
const tag = this.u8();
|
|
160
|
+
const key = this.cstring();
|
|
161
|
+
const value = this.value(tag, depth);
|
|
162
|
+
if (array)
|
|
163
|
+
items.push(value);
|
|
164
|
+
else
|
|
165
|
+
object[key] = value;
|
|
166
|
+
}
|
|
167
|
+
if (this.offset !== end - 1 || this.u8() !== 0)
|
|
168
|
+
throw new RangeError("BSON document is not terminated");
|
|
169
|
+
return array ? items : object;
|
|
170
|
+
}
|
|
171
|
+
value(tag, depth) {
|
|
172
|
+
switch (tag) {
|
|
173
|
+
case DOUBLE:
|
|
174
|
+
return this.view.getFloat64(this.take(8), true);
|
|
175
|
+
case STRING: {
|
|
176
|
+
const length = this.i32();
|
|
177
|
+
if (length < 1)
|
|
178
|
+
throw new RangeError("BSON string length is invalid");
|
|
179
|
+
const start = this.take(length);
|
|
180
|
+
if (this.bytes[start + length - 1] !== 0)
|
|
181
|
+
throw new RangeError("BSON string is not terminated");
|
|
182
|
+
return textDecoder.decode(this.bytes.subarray(start, start + length - 1));
|
|
183
|
+
}
|
|
184
|
+
case DOCUMENT:
|
|
185
|
+
return this.document(depth + 1, false);
|
|
186
|
+
case ARRAY:
|
|
187
|
+
return this.document(depth + 1, true);
|
|
188
|
+
case BINARY: {
|
|
189
|
+
const length = this.i32();
|
|
190
|
+
if (length < 0)
|
|
191
|
+
throw new RangeError("BSON binary length is invalid");
|
|
192
|
+
const subtype = this.u8();
|
|
193
|
+
if (subtype === BINARY_OLD) {
|
|
194
|
+
const inner = this.i32();
|
|
195
|
+
if (inner !== length - 4)
|
|
196
|
+
throw new RangeError("BSON binary length is invalid");
|
|
197
|
+
const start = this.take(inner);
|
|
198
|
+
return this.bytes.slice(start, start + inner);
|
|
199
|
+
}
|
|
200
|
+
const start = this.take(length);
|
|
201
|
+
return this.bytes.slice(start, start + length);
|
|
202
|
+
}
|
|
203
|
+
case BOOLEAN: {
|
|
204
|
+
const byte = this.u8();
|
|
205
|
+
if (byte > 1)
|
|
206
|
+
throw new RangeError("BSON boolean must be 0 or 1");
|
|
207
|
+
return byte === 1;
|
|
208
|
+
}
|
|
209
|
+
case NULL:
|
|
210
|
+
return null;
|
|
211
|
+
case INT32:
|
|
212
|
+
return this.view.getInt32(this.take(4), true);
|
|
213
|
+
case INT64: {
|
|
214
|
+
const value = this.view.getBigInt64(this.take(8), true);
|
|
215
|
+
return value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER)
|
|
216
|
+
? Number(value)
|
|
217
|
+
: value;
|
|
218
|
+
}
|
|
219
|
+
default:
|
|
220
|
+
throw new RangeError(`BSON element type 0x${tag.toString(16)} has no plain value form`);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
cstring() {
|
|
224
|
+
const end = this.bytes.indexOf(0, this.offset);
|
|
225
|
+
if (end < 0)
|
|
226
|
+
throw new RangeError("BSON key is not terminated");
|
|
227
|
+
const text = textDecoder.decode(this.bytes.subarray(this.offset, end));
|
|
228
|
+
this.offset = end + 1;
|
|
229
|
+
return text;
|
|
230
|
+
}
|
|
231
|
+
i32() {
|
|
232
|
+
return this.view.getInt32(this.take(4), true);
|
|
233
|
+
}
|
|
234
|
+
u8() {
|
|
235
|
+
return this.view.getUint8(this.take(1));
|
|
236
|
+
}
|
|
237
|
+
take(length) {
|
|
238
|
+
const start = this.offset;
|
|
239
|
+
if (start + length > this.bytes.length)
|
|
240
|
+
throw new RangeError("BSON payload is truncated");
|
|
241
|
+
this.offset += length;
|
|
242
|
+
return start;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=bson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bson.js","sourceRoot":"","sources":["../../src/stream/bson.ts"],"names":[],"mappings":"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"}
|
package/dist/stream/codecs.d.ts
CHANGED
|
@@ -1,9 +1,61 @@
|
|
|
1
|
-
|
|
1
|
+
import { ContentType } from "../wire/content.js";
|
|
2
|
+
import type { KvEntry } from "../wire/kv.js";
|
|
3
|
+
/** The decode half of a codec. */
|
|
4
|
+
export interface Decoder<T> {
|
|
5
|
+
decode(payload: Uint8Array): T;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Encoding strategy for a typed body. `contentType` is the tag stamped on
|
|
9
|
+
* `agdx.ct` so consumers can decode downstream.
|
|
10
|
+
*/
|
|
11
|
+
export interface Codec<T> extends Decoder<T> {
|
|
12
|
+
readonly contentType: ContentType;
|
|
13
|
+
encode(value: T): Uint8Array;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The built-in JSON codec. `decodeValue` checks a decoded value and narrows it
|
|
17
|
+
* to `T`, and the codec passes the decoded value through without it.
|
|
18
|
+
*/
|
|
19
|
+
export declare class Json<T = unknown> implements Codec<T> {
|
|
20
|
+
private readonly decodeValue;
|
|
21
|
+
readonly contentType: ContentType;
|
|
22
|
+
constructor(decodeValue?: (value: unknown) => T);
|
|
23
|
+
encode(value: T): Uint8Array;
|
|
24
|
+
decode(payload: Uint8Array): T;
|
|
25
|
+
}
|
|
26
|
+
/** The built-in CBOR codec. `decodeValue` narrows a decoded value to `T`. */
|
|
27
|
+
export declare class Cbor<T = unknown> implements Codec<T> {
|
|
28
|
+
private readonly decodeValue;
|
|
29
|
+
readonly contentType: ContentType;
|
|
30
|
+
constructor(decodeValue?: (value: unknown) => T);
|
|
31
|
+
encode(value: T): Uint8Array;
|
|
32
|
+
decode(payload: Uint8Array): T;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The built-in MessagePack codec, with named-map encoding so field names
|
|
36
|
+
* round-trip with JSON-shaped consumers. `decodeValue` narrows a decoded value
|
|
37
|
+
* to `T`.
|
|
38
|
+
*/
|
|
39
|
+
export declare class Msgpack<T = unknown> implements Codec<T> {
|
|
40
|
+
private readonly decodeValue;
|
|
41
|
+
readonly contentType: ContentType;
|
|
42
|
+
constructor(decodeValue?: (value: unknown) => T);
|
|
43
|
+
encode(value: T): Uint8Array;
|
|
44
|
+
decode(payload: Uint8Array): T;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The built-in BSON codec. The top-level body must be a document (an object or
|
|
48
|
+
* a string-keyed map). `decodeValue` narrows a decoded value to `T`.
|
|
49
|
+
*/
|
|
50
|
+
export declare class Bson<T = unknown> implements Codec<T> {
|
|
51
|
+
private readonly decodeValue;
|
|
52
|
+
readonly contentType: ContentType;
|
|
53
|
+
constructor(decodeValue?: (value: unknown) => T);
|
|
2
54
|
encode(value: T): Uint8Array;
|
|
3
|
-
decode(
|
|
55
|
+
decode(payload: Uint8Array): T;
|
|
4
56
|
}
|
|
5
|
-
|
|
6
|
-
export declare function
|
|
7
|
-
|
|
8
|
-
export declare function
|
|
57
|
+
/** Decode a key-value entry's value as JSON, narrowed by `decodeValue` when given. */
|
|
58
|
+
export declare function kvEntryDecodeValue<T = unknown>(entry: KvEntry, decodeValue?: (value: unknown) => T): T;
|
|
59
|
+
/** Decode a key-value entry's value with any decoder. */
|
|
60
|
+
export declare function kvEntryDecodeValueWith<T>(entry: KvEntry, decoder: Decoder<T>): T;
|
|
9
61
|
//# sourceMappingURL=codecs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/stream/codecs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codecs.d.ts","sourceRoot":"","sources":["../../src/stream/codecs.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAG5C,kCAAkC;AAClC,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAA;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,KAAK,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAA;CAC7B;AAED;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAGpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAmB;IAEpD,YAA6B,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAyB,EAAI;IAE3F,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAS3B;IAED,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAQ7B;CACF;AAED,6EAA6E;AAC7E,qBAAa,IAAI,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAGpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAmB;IAEpD,YAA6B,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAyB,EAAI;IAE3F,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAM3B;IAED,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAE7B;CACF;AAED;;;;GAIG;AACH,qBAAa,OAAO,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAGvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAsB;IAEvD,YAA6B,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAyB,EAAI;IAE3F,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAQ3B;IAED,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAU7B;CACF;AAED;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,KAAK,CAAC,CAAC,CAAC;IAGpC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAFxC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAmB;IAEpD,YAA6B,WAAW,GAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAyB,EAAI;IAE3F,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAM3B;IAED,MAAM,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAQ7B;CACF;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,CAAC,GAAG,OAAO,EAC5C,KAAK,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,GAClC,CAAC,CAEH;AAED,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAEhF"}
|
package/dist/stream/codecs.js
CHANGED
|
@@ -1,26 +1,130 @@
|
|
|
1
1
|
import { decode as decodeMessagePack, encode as encodeMessagePack } from "@msgpack/msgpack";
|
|
2
2
|
import { CodecError } from "../client/errors.js";
|
|
3
3
|
import { decodeOne, encodeOne } from "../wire/cbor.js";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { ContentType } from "../wire/content.js";
|
|
5
|
+
import { decodeBsonDocument, encodeBsonDocument } from "./bson.js";
|
|
6
|
+
/**
|
|
7
|
+
* The built-in JSON codec. `decodeValue` checks a decoded value and narrows it
|
|
8
|
+
* to `T`, and the codec passes the decoded value through without it.
|
|
9
|
+
*/
|
|
10
|
+
export class Json {
|
|
11
|
+
decodeValue;
|
|
12
|
+
contentType = ContentType.Json;
|
|
13
|
+
constructor(decodeValue = (value) => value) {
|
|
14
|
+
this.decodeValue = decodeValue;
|
|
15
|
+
}
|
|
16
|
+
encode(value) {
|
|
17
|
+
try {
|
|
18
|
+
if (value === undefined || typeof value === "function" || typeof value === "symbol") {
|
|
19
|
+
throw new TypeError("value has no JSON representation");
|
|
20
|
+
}
|
|
21
|
+
return new TextEncoder().encode(JSON.stringify(value));
|
|
22
|
+
}
|
|
23
|
+
catch (cause) {
|
|
24
|
+
throw new CodecError("value does not encode as JSON", "json", "encode", { cause });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
decode(payload) {
|
|
28
|
+
let value;
|
|
29
|
+
try {
|
|
30
|
+
value = JSON.parse(new TextDecoder().decode(payload));
|
|
31
|
+
}
|
|
32
|
+
catch (cause) {
|
|
33
|
+
throw new CodecError("payload does not decode as JSON", "json", "decode", { cause });
|
|
34
|
+
}
|
|
35
|
+
return this.decodeValue(value);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** The built-in CBOR codec. `decodeValue` narrows a decoded value to `T`. */
|
|
39
|
+
export class Cbor {
|
|
40
|
+
decodeValue;
|
|
41
|
+
contentType = ContentType.Cbor;
|
|
42
|
+
constructor(decodeValue = (value) => value) {
|
|
43
|
+
this.decodeValue = decodeValue;
|
|
44
|
+
}
|
|
45
|
+
encode(value) {
|
|
46
|
+
try {
|
|
47
|
+
return encodeOne(value);
|
|
48
|
+
}
|
|
49
|
+
catch (cause) {
|
|
50
|
+
throw new CodecError("value does not encode as CBOR", "cbor", "encode", { cause });
|
|
8
51
|
}
|
|
9
|
-
const json = JSON.stringify(value);
|
|
10
|
-
return new TextEncoder().encode(json);
|
|
11
52
|
}
|
|
12
|
-
|
|
13
|
-
|
|
53
|
+
decode(payload) {
|
|
54
|
+
return this.decodeValue(lowerCborValue(decodeOne(payload, "typed CBOR payload")));
|
|
14
55
|
}
|
|
15
56
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
57
|
+
/**
|
|
58
|
+
* The built-in MessagePack codec, with named-map encoding so field names
|
|
59
|
+
* round-trip with JSON-shaped consumers. `decodeValue` narrows a decoded value
|
|
60
|
+
* to `T`.
|
|
61
|
+
*/
|
|
62
|
+
export class Msgpack {
|
|
63
|
+
decodeValue;
|
|
64
|
+
contentType = ContentType.Msgpack;
|
|
65
|
+
constructor(decodeValue = (value) => value) {
|
|
66
|
+
this.decodeValue = decodeValue;
|
|
19
67
|
}
|
|
20
|
-
|
|
21
|
-
|
|
68
|
+
encode(value) {
|
|
69
|
+
try {
|
|
70
|
+
return encodeMessagePack(messagePackValue(value), { useBigInt64: true });
|
|
71
|
+
}
|
|
72
|
+
catch (cause) {
|
|
73
|
+
throw new CodecError("value does not encode as MessagePack", "msgpack", "encode", {
|
|
74
|
+
cause
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
decode(payload) {
|
|
79
|
+
let value;
|
|
80
|
+
try {
|
|
81
|
+
value = decodeMessagePack(payload, { useBigInt64: true });
|
|
82
|
+
}
|
|
83
|
+
catch (cause) {
|
|
84
|
+
throw new CodecError("payload does not decode as MessagePack", "msgpack", "decode", {
|
|
85
|
+
cause
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return this.decodeValue(value);
|
|
22
89
|
}
|
|
23
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* The built-in BSON codec. The top-level body must be a document (an object or
|
|
93
|
+
* a string-keyed map). `decodeValue` narrows a decoded value to `T`.
|
|
94
|
+
*/
|
|
95
|
+
export class Bson {
|
|
96
|
+
decodeValue;
|
|
97
|
+
contentType = ContentType.Bson;
|
|
98
|
+
constructor(decodeValue = (value) => value) {
|
|
99
|
+
this.decodeValue = decodeValue;
|
|
100
|
+
}
|
|
101
|
+
encode(value) {
|
|
102
|
+
try {
|
|
103
|
+
return encodeBsonDocument(value);
|
|
104
|
+
}
|
|
105
|
+
catch (cause) {
|
|
106
|
+
throw new CodecError("value does not encode as BSON", "bson", "encode", { cause });
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
decode(payload) {
|
|
110
|
+
let value;
|
|
111
|
+
try {
|
|
112
|
+
value = decodeBsonDocument(payload);
|
|
113
|
+
}
|
|
114
|
+
catch (cause) {
|
|
115
|
+
throw new CodecError("payload does not decode as BSON", "bson", "decode", { cause });
|
|
116
|
+
}
|
|
117
|
+
return this.decodeValue(value);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/** Decode a key-value entry's value as JSON, narrowed by `decodeValue` when given. */
|
|
121
|
+
export function kvEntryDecodeValue(entry, decodeValue) {
|
|
122
|
+
return new Json(decodeValue).decode(entry.value);
|
|
123
|
+
}
|
|
124
|
+
/** Decode a key-value entry's value with any decoder. */
|
|
125
|
+
export function kvEntryDecodeValueWith(entry, decoder) {
|
|
126
|
+
return decoder.decode(entry.value);
|
|
127
|
+
}
|
|
24
128
|
function lowerCborValue(value) {
|
|
25
129
|
if (Array.isArray(value))
|
|
26
130
|
return value.map(lowerCborValue);
|
|
@@ -33,51 +137,31 @@ function lowerCborValue(value) {
|
|
|
33
137
|
}
|
|
34
138
|
return value;
|
|
35
139
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
catch (cause) {
|
|
64
|
-
throw new CodecError("value does not encode as MessagePack", "msgpack", "encode", {
|
|
65
|
-
cause
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
decode(bytes) {
|
|
70
|
-
try {
|
|
71
|
-
return decodeValue(decodeMessagePack(bytes, { useBigInt64: true }));
|
|
72
|
-
}
|
|
73
|
-
catch (cause) {
|
|
74
|
-
if (cause instanceof CodecError)
|
|
75
|
-
throw cause;
|
|
76
|
-
throw new CodecError("payload does not decode as MessagePack", "msgpack", "decode", {
|
|
77
|
-
cause
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
};
|
|
140
|
+
function messagePackValue(value, depth = 0) {
|
|
141
|
+
if (depth > 100)
|
|
142
|
+
throw new TypeError("MessagePack value exceeds the maximum depth");
|
|
143
|
+
if (typeof value === "bigint") {
|
|
144
|
+
if (value < -(1n << 63n) || value > (1n << 64n) - 1n)
|
|
145
|
+
throw new RangeError("MessagePack integers must fit in signed or unsigned 64 bits");
|
|
146
|
+
return value >= -0x80000000n && value <= 0xffffffffn ? Number(value) : value;
|
|
147
|
+
}
|
|
148
|
+
if (typeof value === "number" && Number.isSafeInteger(value)) {
|
|
149
|
+
return value < -0x8000_0000 || value > 0xffff_ffff ? BigInt(value) : value;
|
|
150
|
+
}
|
|
151
|
+
if (Array.isArray(value))
|
|
152
|
+
return value.map((nested) => messagePackValue(nested, depth + 1));
|
|
153
|
+
if (value instanceof Map) {
|
|
154
|
+
const entries = [...value.entries()];
|
|
155
|
+
if (!entries.every(([key]) => typeof key === "string"))
|
|
156
|
+
throw new TypeError("MessagePack object keys must be strings");
|
|
157
|
+
return Object.fromEntries(entries.map(([key, nested]) => [key, messagePackValue(nested, depth + 1)]));
|
|
158
|
+
}
|
|
159
|
+
if (typeof value === "object" &&
|
|
160
|
+
value !== null &&
|
|
161
|
+
!ArrayBuffer.isView(value) &&
|
|
162
|
+
!(value instanceof Date)) {
|
|
163
|
+
return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, messagePackValue(nested, depth + 1)]));
|
|
164
|
+
}
|
|
165
|
+
return value;
|
|
82
166
|
}
|
|
83
167
|
//# sourceMappingURL=codecs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codecs.js","sourceRoot":"","sources":["../../src/stream/codecs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,IAAI,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAE3F,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"codecs.js","sourceRoot":"","sources":["../../src/stream/codecs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { Capabilities } from "../client/capabilities.js";
|
|
2
|
-
import type
|
|
3
|
-
import { FilteredReaderBuilder, type CatalogPageOptions, type FilterPreviewOptions, type FilterTransport } from "../managed/filters.js";
|
|
2
|
+
import { FilteredReaderBuilder, type FilterPreviewOptions, type FilterTransport } from "../managed/filters.js";
|
|
4
3
|
import type { ConsumerFilter, FilterBinding, FilterGroupIdentity, FilterHeader, FilterPreview, FilterRevisionPage, FilterRevisionRef, FilterTestResult, GroupFilterSpec } from "../wire/filter.js";
|
|
5
4
|
import { Consumer, type ConsumerOptions } from "./consumer.js";
|
|
5
|
+
import type { Topic } from "./topic.js";
|
|
6
6
|
/** What a consumer group needs beyond the stream transport to reach its filter policy. */
|
|
7
7
|
export interface GroupContext {
|
|
8
8
|
readonly transport: FilterTransport;
|
|
9
9
|
readonly capabilities: () => Promise<Capabilities>;
|
|
10
|
+
/** Probes the server again, for a consumer built before any probe answered. */
|
|
11
|
+
readonly refreshCapabilities?: () => Promise<Capabilities>;
|
|
10
12
|
}
|
|
11
13
|
/** A consumer group by name or by its native numeric id. */
|
|
12
14
|
export type GroupTarget = {
|
|
@@ -48,12 +50,12 @@ export interface CreateConsumerGroupOptions {
|
|
|
48
50
|
*/
|
|
49
51
|
export declare class ConsumerGroup {
|
|
50
52
|
private readonly transport;
|
|
51
|
-
|
|
52
|
-
readonly
|
|
53
|
+
/** The topic this group consumes. */
|
|
54
|
+
readonly topic: Topic;
|
|
53
55
|
private readonly target;
|
|
54
56
|
private readonly context?;
|
|
55
57
|
private configuredAt;
|
|
56
|
-
constructor(
|
|
58
|
+
private constructor();
|
|
57
59
|
/** The group name, `undefined` for a handle addressed by numeric id. */
|
|
58
60
|
get name(): string | undefined;
|
|
59
61
|
/** The native numeric id, `undefined` for a handle addressed by name. */
|
|
@@ -63,8 +65,8 @@ export declare class ConsumerGroup {
|
|
|
63
65
|
* call. Idempotent: an existing group is kept, and the same policy keeps its
|
|
64
66
|
* binding. A policy is preflighted against the server's capabilities before
|
|
65
67
|
* the native group is created. A group that runs another policy throws
|
|
66
|
-
* `ConsumerGroupSetupError`
|
|
67
|
-
* it is.
|
|
68
|
+
* `ConsumerGroupSetupError` whose cause has filter reason `conflict`, and
|
|
69
|
+
* the group is left as it is.
|
|
68
70
|
*/
|
|
69
71
|
create(options?: CreateConsumerGroupOptions): Promise<ConsumerGroupInfo>;
|
|
70
72
|
/** The group as the server knows it: its id, exact identity and active policy. */
|
|
@@ -79,8 +81,9 @@ export declare class ConsumerGroup {
|
|
|
79
81
|
* resolves group policies the consumer runs the group's filter, or none, and
|
|
80
82
|
* commits through the group's fenced acknowledgments. On Apache Iggy it is
|
|
81
83
|
* the native group consumer. A server that serves filters without group
|
|
82
|
-
* reads is refused with `UnsupportedError
|
|
83
|
-
*
|
|
84
|
+
* reads is refused with `UnsupportedError`. When no probe answered yet, the
|
|
85
|
+
* server is probed again, and a probe that still established nothing is a
|
|
86
|
+
* retryable `TimeoutError`, never a native read.
|
|
84
87
|
*/
|
|
85
88
|
consumer(options?: ConsumerOptions): Promise<Consumer>;
|
|
86
89
|
/**
|
|
@@ -120,7 +123,7 @@ export declare class GroupFilter {
|
|
|
120
123
|
/** The active policy, `undefined` for an unbound group. */
|
|
121
124
|
get(): Promise<FilterBinding | undefined>;
|
|
122
125
|
/** One page of the group's own filter revisions, newest first. */
|
|
123
|
-
revisions(
|
|
126
|
+
revisions(page?: number, pageSize?: number): Promise<FilterRevisionPage>;
|
|
124
127
|
/**
|
|
125
128
|
* Draft a revision of the group's own filter. Readers keep running the
|
|
126
129
|
* active revision. `expectedRevision` must still be the latest.
|