@zlink-systems/stream-wire 0.27.0 → 0.29.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.
@@ -166,6 +166,17 @@ function isStreamWireMessageKind(value) {
166
166
  function isStreamWireCodec(value) {
167
167
  return validCodecs.has(value);
168
168
  }
169
+ function validateHeaderKindAndControl(kind, codec, flags) {
170
+ if (!isStreamWireMessageKind(kind)) {
171
+ throw new Error("Unknown stream message kind.");
172
+ }
173
+ if (!isStreamWireCodec(codec)) {
174
+ throw new Error("Unknown stream codec.");
175
+ }
176
+ if (kind === 5 /* Control */ && (codec !== 0 /* Raw */ || flags !== 0 /* None */)) {
177
+ throw new Error("Control packet must use raw codec and must not contain flags.");
178
+ }
179
+ }
169
180
  var UTF8_TWO_BYTE_MIN = 128;
170
181
  var UTF8_THREE_BYTE_MIN = 2048;
171
182
  var UTF16_HIGH_SURROGATE_MIN = 55296;
@@ -398,6 +409,7 @@ function encodeStreamWireHeader(header, flagOverrides) {
398
409
  headerFlags = hasCorrelation ? headerFlags | flags.hasCorrelationId : headerFlags & ~flags.hasCorrelationId;
399
410
  headerFlags = hasFlow ? headerFlags | flags.hasFlowId : headerFlags & ~flags.hasFlowId;
400
411
  headerFlags = hasActorSlot ? headerFlags | flags.hasActorSlot : headerFlags & ~flags.hasActorSlot;
412
+ validateHeaderKindAndControl(header.kind, header.codec, header.flags | headerFlags);
401
413
  const metadataBytes = hasMetadata ? encodeStreamWireMetadata(header.metadata) : new Uint8Array();
402
414
  const size = 4 + (hasRequestSeq ? UINT64_BYTES : 0) + 1 + nameBytes.length + (hasMetadata ? UINT16_BYTES + metadataBytes.length : 0) + (hasCorrelation ? 1 + correlationBytes.length : 0) + (hasFlow ? FLOW_FIELDS_BYTES : 0) + (hasActorSlot ? UINT16_BYTES : 0);
403
415
  const buffer = new Uint8Array(size);
@@ -449,6 +461,7 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
449
461
  const kind = header[offset++];
450
462
  const codec = header[offset++];
451
463
  const headerFlags = header[offset++];
464
+ validateHeaderKindAndControl(kind, codec, headerFlags);
452
465
  const hasRequestSeq = (headerFlags & flags.hasRequestSeq) !== 0;
453
466
  const hasMetadata = (headerFlags & flags.hasMetadata) !== 0;
454
467
  const hasCorrelation = (headerFlags & flags.hasCorrelationId) !== 0;
package/dist/index.js CHANGED
@@ -73,6 +73,18 @@ function isStreamWireMessageKind(value) {
73
73
  function isStreamWireCodec(value) {
74
74
  return validCodecs.has(value);
75
75
  }
76
+ function validateHeaderKindAndControl(kind, codec, flags) {
77
+ if (!isStreamWireMessageKind(kind)) {
78
+ throw new Error('Unknown stream message kind.');
79
+ }
80
+ if (!isStreamWireCodec(codec)) {
81
+ throw new Error('Unknown stream codec.');
82
+ }
83
+ if (kind === ZlinkStreamMessageKind.Control &&
84
+ (codec !== ZlinkStreamCodec.Raw || flags !== ZlinkStreamHeaderFlags.None)) {
85
+ throw new Error('Control packet must use raw codec and must not contain flags.');
86
+ }
87
+ }
76
88
  const UTF8_TWO_BYTE_MIN = 0x80;
77
89
  const UTF8_THREE_BYTE_MIN = 0x800;
78
90
  const UTF16_HIGH_SURROGATE_MIN = 0xd800;
@@ -322,6 +334,7 @@ function encodeStreamWireHeader(header, flagOverrides) {
322
334
  : headerFlags & ~flags.hasCorrelationId;
323
335
  headerFlags = hasFlow ? headerFlags | flags.hasFlowId : headerFlags & ~flags.hasFlowId;
324
336
  headerFlags = hasActorSlot ? headerFlags | flags.hasActorSlot : headerFlags & ~flags.hasActorSlot;
337
+ validateHeaderKindAndControl(header.kind, header.codec, header.flags | headerFlags);
325
338
  const metadataBytes = hasMetadata ? encodeStreamWireMetadata(header.metadata) : new Uint8Array();
326
339
  const size = 4 +
327
340
  (hasRequestSeq ? exports.UINT64_BYTES : 0) +
@@ -380,6 +393,7 @@ function decodeStreamWireHeader(header, flagOverrides, includeFlow = true) {
380
393
  const kind = header[offset++];
381
394
  const codec = header[offset++];
382
395
  const headerFlags = header[offset++];
396
+ validateHeaderKindAndControl(kind, codec, headerFlags);
383
397
  const hasRequestSeq = (headerFlags & flags.hasRequestSeq) !== 0;
384
398
  const hasMetadata = (headerFlags & flags.hasMetadata) !== 0;
385
399
  const hasCorrelation = (headerFlags & flags.hasCorrelationId) !== 0;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zlink-systems/stream-wire",
3
- "version": "0.27.0",
3
+ "version": "0.29.0",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "repository": {
6
6
  "type": "git",