@zlink-systems/stream-wire 0.21.0 → 0.23.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/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.mjs +26 -4
- package/dist/index.d.ts +2 -0
- package/dist/index.js +42 -11
- package/dist/lz4-pickle.js +4 -4
- package/package.json +1 -1
package/dist/esm/index.d.ts
CHANGED
|
@@ -19,12 +19,14 @@ export interface ZLinkStreamWireHeader {
|
|
|
19
19
|
readonly correlationId?: string;
|
|
20
20
|
readonly flowId?: string;
|
|
21
21
|
readonly flowOrigin?: number;
|
|
22
|
+
readonly actorSlot?: number;
|
|
22
23
|
}
|
|
23
24
|
export interface ZLinkStreamWireHeaderFlags {
|
|
24
25
|
readonly hasRequestSeq: number;
|
|
25
26
|
readonly hasMetadata: number;
|
|
26
27
|
readonly hasCorrelationId: number;
|
|
27
28
|
readonly hasFlowId: number;
|
|
29
|
+
readonly hasActorSlot: number;
|
|
28
30
|
}
|
|
29
31
|
export declare const ZLINK_STREAM_FORMAT_MARKER = 242;
|
|
30
32
|
export declare function encodeStreamWireFrame(header: Uint8Array, payload: Uint8Array): Uint8Array;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -120,7 +120,8 @@ var defaultHeaderFlags = {
|
|
|
120
120
|
hasRequestSeq: 1,
|
|
121
121
|
hasMetadata: 2,
|
|
122
122
|
hasCorrelationId: 8,
|
|
123
|
-
hasFlowId: 16
|
|
123
|
+
hasFlowId: 16,
|
|
124
|
+
hasActorSlot: 32
|
|
124
125
|
};
|
|
125
126
|
var ZLINK_STREAM_FORMAT_MARKER = 242;
|
|
126
127
|
var ZLINK_STREAM_RESPONSE_KIND = 3;
|
|
@@ -181,6 +182,7 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
181
182
|
}
|
|
182
183
|
const hasCorrelation = correlationBytes !== void 0;
|
|
183
184
|
const hasFlow = header.flowId !== void 0 || header.flowOrigin !== void 0;
|
|
185
|
+
const hasActorSlot = header.actorSlot !== void 0;
|
|
184
186
|
if (hasFlow && (header.flowId === void 0 || header.flowOrigin === void 0)) {
|
|
185
187
|
throw new Error("Stream flow id and origin must be provided together.");
|
|
186
188
|
}
|
|
@@ -188,13 +190,17 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
188
190
|
if (header.flowOrigin !== void 0 && ![1, 2, 3, 4].includes(header.flowOrigin)) {
|
|
189
191
|
throw new Error("Stream flow origin is invalid.");
|
|
190
192
|
}
|
|
193
|
+
if (header.actorSlot !== void 0 && (!Number.isInteger(header.actorSlot) || header.actorSlot < 1 || header.actorSlot > 65535)) {
|
|
194
|
+
throw new Error("Stream actor slot is invalid.");
|
|
195
|
+
}
|
|
191
196
|
let headerFlags = header.flags;
|
|
192
197
|
headerFlags = hasRequestSeq ? headerFlags | flags.hasRequestSeq : headerFlags & ~flags.hasRequestSeq;
|
|
193
198
|
headerFlags = hasMetadata ? headerFlags | flags.hasMetadata : headerFlags & ~flags.hasMetadata;
|
|
194
199
|
headerFlags = hasCorrelation ? headerFlags | flags.hasCorrelationId : headerFlags & ~flags.hasCorrelationId;
|
|
195
200
|
headerFlags = hasFlow ? headerFlags | flags.hasFlowId : headerFlags & ~flags.hasFlowId;
|
|
201
|
+
headerFlags = hasActorSlot ? headerFlags | flags.hasActorSlot : headerFlags & ~flags.hasActorSlot;
|
|
196
202
|
const metadataBytes = hasMetadata ? encodeStreamWireMetadata(header.metadata) : new Uint8Array();
|
|
197
|
-
const size = 4 + (hasRequestSeq ? 8 : 0) + 1 + nameBytes.length + (hasMetadata ? 2 + metadataBytes.length : 0) + (hasCorrelation ? 1 + correlationBytes.length : 0) + (hasFlow ? 37 : 0);
|
|
203
|
+
const size = 4 + (hasRequestSeq ? 8 : 0) + 1 + nameBytes.length + (hasMetadata ? 2 + metadataBytes.length : 0) + (hasCorrelation ? 1 + correlationBytes.length : 0) + (hasFlow ? 37 : 0) + (hasActorSlot ? 2 : 0);
|
|
198
204
|
const buffer = new Uint8Array(size);
|
|
199
205
|
let offset = 0;
|
|
200
206
|
buffer[offset++] = ZLINK_STREAM_FORMAT_MARKER;
|
|
@@ -227,6 +233,9 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
227
233
|
offset += 36;
|
|
228
234
|
buffer[offset++] = header.flowOrigin;
|
|
229
235
|
}
|
|
236
|
+
if (hasActorSlot) {
|
|
237
|
+
writeUInt16BE(buffer, offset, header.actorSlot);
|
|
238
|
+
}
|
|
230
239
|
return buffer;
|
|
231
240
|
}
|
|
232
241
|
function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
@@ -245,7 +254,8 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
245
254
|
const hasMetadata = (headerFlags & flags.hasMetadata) !== 0;
|
|
246
255
|
const hasCorrelation = (headerFlags & flags.hasCorrelationId) !== 0;
|
|
247
256
|
const hasFlow = (headerFlags & flags.hasFlowId) !== 0;
|
|
248
|
-
|
|
257
|
+
const hasActorSlot = (headerFlags & flags.hasActorSlot) !== 0;
|
|
258
|
+
if ((headerFlags & ~63) !== 0) {
|
|
249
259
|
throw new Error("Unknown mandatory stream header flag.");
|
|
250
260
|
}
|
|
251
261
|
let requestSeq;
|
|
@@ -300,6 +310,17 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
300
310
|
}
|
|
301
311
|
flowOrigin = includeFlow ? decodedFlowOrigin : void 0;
|
|
302
312
|
}
|
|
313
|
+
let actorSlot;
|
|
314
|
+
if (hasActorSlot) {
|
|
315
|
+
if (header.length - offset < 2) {
|
|
316
|
+
throw new Error("Stream actor slot is incomplete.");
|
|
317
|
+
}
|
|
318
|
+
actorSlot = readUInt16BE(header, offset);
|
|
319
|
+
if (actorSlot === 0) {
|
|
320
|
+
throw new Error("Stream actor slot must not be zero.");
|
|
321
|
+
}
|
|
322
|
+
offset += 2;
|
|
323
|
+
}
|
|
303
324
|
if (offset !== header.length) {
|
|
304
325
|
throw new Error("Stream header has trailing bytes.");
|
|
305
326
|
}
|
|
@@ -312,7 +333,8 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
312
333
|
metadata: decodedMetadata.metadata,
|
|
313
334
|
correlationId,
|
|
314
335
|
flowId,
|
|
315
|
-
flowOrigin
|
|
336
|
+
flowOrigin,
|
|
337
|
+
actorSlot
|
|
316
338
|
};
|
|
317
339
|
}
|
|
318
340
|
function validateFlowId(flowId) {
|
package/dist/index.d.ts
CHANGED
|
@@ -19,12 +19,14 @@ export interface ZLinkStreamWireHeader {
|
|
|
19
19
|
readonly correlationId?: string;
|
|
20
20
|
readonly flowId?: string;
|
|
21
21
|
readonly flowOrigin?: number;
|
|
22
|
+
readonly actorSlot?: number;
|
|
22
23
|
}
|
|
23
24
|
export interface ZLinkStreamWireHeaderFlags {
|
|
24
25
|
readonly hasRequestSeq: number;
|
|
25
26
|
readonly hasMetadata: number;
|
|
26
27
|
readonly hasCorrelationId: number;
|
|
27
28
|
readonly hasFlowId: number;
|
|
29
|
+
readonly hasActorSlot: number;
|
|
28
30
|
}
|
|
29
31
|
export declare const ZLINK_STREAM_FORMAT_MARKER = 242;
|
|
30
32
|
export declare function encodeStreamWireFrame(header: Uint8Array, payload: Uint8Array): Uint8Array;
|
package/dist/index.js
CHANGED
|
@@ -30,7 +30,8 @@ const defaultHeaderFlags = {
|
|
|
30
30
|
hasRequestSeq: 0x01,
|
|
31
31
|
hasMetadata: 0x02,
|
|
32
32
|
hasCorrelationId: 0x08,
|
|
33
|
-
hasFlowId: 0x10
|
|
33
|
+
hasFlowId: 0x10,
|
|
34
|
+
hasActorSlot: 0x20
|
|
34
35
|
};
|
|
35
36
|
exports.ZLINK_STREAM_FORMAT_MARKER = 0xf2;
|
|
36
37
|
const ZLINK_STREAM_RESPONSE_KIND = 3;
|
|
@@ -94,6 +95,7 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
94
95
|
}
|
|
95
96
|
const hasCorrelation = correlationBytes !== undefined;
|
|
96
97
|
const hasFlow = header.flowId !== undefined || header.flowOrigin !== undefined;
|
|
98
|
+
const hasActorSlot = header.actorSlot !== undefined;
|
|
97
99
|
if (hasFlow && (header.flowId === undefined || header.flowOrigin === undefined)) {
|
|
98
100
|
throw new Error('Stream flow id and origin must be provided together.');
|
|
99
101
|
}
|
|
@@ -102,16 +104,29 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
102
104
|
if (header.flowOrigin !== undefined && ![1, 2, 3, 4].includes(header.flowOrigin)) {
|
|
103
105
|
throw new Error('Stream flow origin is invalid.');
|
|
104
106
|
}
|
|
107
|
+
if (header.actorSlot !== undefined &&
|
|
108
|
+
(!Number.isInteger(header.actorSlot) || header.actorSlot < 1 || header.actorSlot > 0xffff)) {
|
|
109
|
+
throw new Error('Stream actor slot is invalid.');
|
|
110
|
+
}
|
|
105
111
|
let headerFlags = header.flags;
|
|
106
|
-
headerFlags = hasRequestSeq
|
|
112
|
+
headerFlags = hasRequestSeq
|
|
113
|
+
? headerFlags | flags.hasRequestSeq
|
|
114
|
+
: headerFlags & ~flags.hasRequestSeq;
|
|
107
115
|
headerFlags = hasMetadata ? headerFlags | flags.hasMetadata : headerFlags & ~flags.hasMetadata;
|
|
108
|
-
headerFlags = hasCorrelation
|
|
116
|
+
headerFlags = hasCorrelation
|
|
117
|
+
? headerFlags | flags.hasCorrelationId
|
|
118
|
+
: headerFlags & ~flags.hasCorrelationId;
|
|
109
119
|
headerFlags = hasFlow ? headerFlags | flags.hasFlowId : headerFlags & ~flags.hasFlowId;
|
|
120
|
+
headerFlags = hasActorSlot ? headerFlags | flags.hasActorSlot : headerFlags & ~flags.hasActorSlot;
|
|
110
121
|
const metadataBytes = hasMetadata ? encodeStreamWireMetadata(header.metadata) : new Uint8Array();
|
|
111
|
-
const size = 4 +
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
+
|
|
122
|
+
const size = 4 +
|
|
123
|
+
(hasRequestSeq ? 8 : 0) +
|
|
124
|
+
1 +
|
|
125
|
+
nameBytes.length +
|
|
126
|
+
(hasMetadata ? 2 + metadataBytes.length : 0) +
|
|
127
|
+
(hasCorrelation ? 1 + correlationBytes.length : 0) +
|
|
128
|
+
(hasFlow ? 37 : 0) +
|
|
129
|
+
(hasActorSlot ? 2 : 0);
|
|
115
130
|
const buffer = new Uint8Array(size);
|
|
116
131
|
let offset = 0;
|
|
117
132
|
buffer[offset++] = exports.ZLINK_STREAM_FORMAT_MARKER;
|
|
@@ -144,6 +159,9 @@ function encodeStreamWireHeader(header, flagOverrides) {
|
|
|
144
159
|
offset += 36;
|
|
145
160
|
buffer[offset++] = header.flowOrigin;
|
|
146
161
|
}
|
|
162
|
+
if (hasActorSlot) {
|
|
163
|
+
writeUInt16BE(buffer, offset, header.actorSlot);
|
|
164
|
+
}
|
|
147
165
|
return buffer;
|
|
148
166
|
}
|
|
149
167
|
function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
@@ -162,7 +180,8 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
162
180
|
const hasMetadata = (headerFlags & flags.hasMetadata) !== 0;
|
|
163
181
|
const hasCorrelation = (headerFlags & flags.hasCorrelationId) !== 0;
|
|
164
182
|
const hasFlow = (headerFlags & flags.hasFlowId) !== 0;
|
|
165
|
-
|
|
183
|
+
const hasActorSlot = (headerFlags & flags.hasActorSlot) !== 0;
|
|
184
|
+
if ((headerFlags & ~0x3f) !== 0) {
|
|
166
185
|
throw new Error('Unknown mandatory stream header flag.');
|
|
167
186
|
}
|
|
168
187
|
let requestSeq;
|
|
@@ -219,6 +238,17 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
219
238
|
}
|
|
220
239
|
flowOrigin = includeFlow ? decodedFlowOrigin : undefined;
|
|
221
240
|
}
|
|
241
|
+
let actorSlot;
|
|
242
|
+
if (hasActorSlot) {
|
|
243
|
+
if (header.length - offset < 2) {
|
|
244
|
+
throw new Error('Stream actor slot is incomplete.');
|
|
245
|
+
}
|
|
246
|
+
actorSlot = readUInt16BE(header, offset);
|
|
247
|
+
if (actorSlot === 0) {
|
|
248
|
+
throw new Error('Stream actor slot must not be zero.');
|
|
249
|
+
}
|
|
250
|
+
offset += 2;
|
|
251
|
+
}
|
|
222
252
|
if (offset !== header.length) {
|
|
223
253
|
throw new Error('Stream header has trailing bytes.');
|
|
224
254
|
}
|
|
@@ -231,7 +261,8 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
|
|
|
231
261
|
metadata: decodedMetadata.metadata,
|
|
232
262
|
correlationId,
|
|
233
263
|
flowId,
|
|
234
|
-
flowOrigin
|
|
264
|
+
flowOrigin,
|
|
265
|
+
actorSlot
|
|
235
266
|
};
|
|
236
267
|
}
|
|
237
268
|
function validateFlowId(flowId) {
|
|
@@ -360,8 +391,8 @@ function readUInt16BE(buffer, offset) {
|
|
|
360
391
|
return (buffer[offset] << 8) | buffer[offset + 1];
|
|
361
392
|
}
|
|
362
393
|
function readUInt32BE(buffer, offset) {
|
|
363
|
-
return (buffer[offset] * 0x1000000
|
|
364
|
-
|
|
394
|
+
return (buffer[offset] * 0x1000000 +
|
|
395
|
+
((buffer[offset + 1] << 16) | (buffer[offset + 2] << 8) | buffer[offset + 3]));
|
|
365
396
|
}
|
|
366
397
|
function writeUInt32BE(buffer, offset, value) {
|
|
367
398
|
buffer[offset] = (value >>> 24) & 0xff;
|
package/dist/lz4-pickle.js
CHANGED
|
@@ -52,10 +52,10 @@ function readLittleEndian(source, offset, size) {
|
|
|
52
52
|
return source[offset] | (source[offset + 1] << 8);
|
|
53
53
|
}
|
|
54
54
|
if (size === 4) {
|
|
55
|
-
return (source[offset]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
return (source[offset] |
|
|
56
|
+
(source[offset + 1] << 8) |
|
|
57
|
+
(source[offset + 2] << 16) |
|
|
58
|
+
(source[offset + 3] * 0x1000000));
|
|
59
59
|
}
|
|
60
60
|
throw new Error(`Unexpected LZ4 pickle field size: ${size}`);
|
|
61
61
|
}
|