@seriousme/opifex 1.8.1 → 1.9.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 +10 -10
- package/dist/mqttPacket/BitMask.d.ts +14 -10
- package/dist/mqttPacket/BitMask.d.ts.map +1 -1
- package/dist/mqttPacket/BitMask.js +13 -0
- package/dist/mqttPacket/BitMask.js.map +1 -1
- package/dist/mqttPacket/PacketType.d.ts +6 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -1
- package/dist/mqttPacket/PacketType.js +6 -0
- package/dist/mqttPacket/PacketType.js.map +1 -1
- package/dist/mqttPacket/decoder.d.ts +71 -0
- package/dist/mqttPacket/decoder.d.ts.map +1 -1
- package/dist/mqttPacket/decoder.js +71 -0
- package/dist/mqttPacket/decoder.js.map +1 -1
- package/dist/mqttPacket/encoder.d.ts +52 -0
- package/dist/mqttPacket/encoder.d.ts.map +1 -1
- package/dist/mqttPacket/encoder.js +52 -0
- package/dist/mqttPacket/encoder.js.map +1 -1
- package/dist/mqttPacket/length.d.ts +21 -0
- package/dist/mqttPacket/length.d.ts.map +1 -1
- package/dist/mqttPacket/length.js +18 -0
- package/dist/mqttPacket/length.js.map +1 -1
- package/dist/mqttPacket/mod.d.ts +30 -3
- package/dist/mqttPacket/mod.d.ts.map +1 -1
- package/dist/mqttPacket/mod.js +30 -3
- package/dist/mqttPacket/mod.js.map +1 -1
- package/dist/node/wrapNodeSocket.d.ts.map +1 -1
- package/dist/node/wrapNodeSocket.js +1 -0
- package/dist/node/wrapNodeSocket.js.map +1 -1
- package/dist/persistence/memory/memoryPersistence.d.ts +1 -3
- package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
- package/dist/persistence/memory/memoryPersistence.js +3 -3
- package/dist/persistence/memory/memoryPersistence.js.map +1 -1
- package/dist/persistence/mod.d.ts +9 -0
- package/dist/persistence/mod.d.ts.map +1 -0
- package/dist/persistence/mod.js +2 -0
- package/dist/persistence/mod.js.map +1 -0
- package/dist/persistence/persistence.d.ts +5 -0
- package/dist/persistence/persistence.d.ts.map +1 -1
- package/dist/persistence/persistence.js +5 -1
- package/dist/persistence/persistence.js.map +1 -1
- package/dist/socket/socket.d.ts +7 -2
- package/dist/socket/socket.d.ts.map +1 -1
- package/dist/socket/socket.js.map +1 -1
- package/mqttPacket/BitMask.ts +14 -1
- package/mqttPacket/PacketType.ts +6 -0
- package/mqttPacket/decoder.ts +73 -1
- package/mqttPacket/encoder.ts +52 -0
- package/mqttPacket/length.ts +21 -0
- package/mqttPacket/mod.ts +31 -3
- package/node/wrapNodeSocket.ts +3 -2
- package/package.json +5 -3
- package/persistence/memory/memoryPersistence.ts +15 -16
- package/persistence/mod.ts +20 -0
- package/persistence/persistence.ts +5 -0
- package/socket/socket.ts +8 -2
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encodes a number into a variable-length byte array using a modified base-128 encoding
|
|
3
|
+
* @param n The number to encode
|
|
4
|
+
* @returns Array of bytes representing the encoded number
|
|
5
|
+
* @throws Error if the encoded length is greater than 4 bytes
|
|
6
|
+
*/
|
|
1
7
|
export function encodeLength(n) {
|
|
2
8
|
const output = [];
|
|
3
9
|
let x = n;
|
|
@@ -14,6 +20,13 @@ export function encodeLength(n) {
|
|
|
14
20
|
}
|
|
15
21
|
return output;
|
|
16
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Decodes a variable-length encoded number from a byte array
|
|
25
|
+
* @param buf The byte array containing the encoded number
|
|
26
|
+
* @param start The starting position in the buffer to begin decoding
|
|
27
|
+
* @returns Object containing the decoded length and number of bytes used for encoding
|
|
28
|
+
* @throws Error if decoding fails
|
|
29
|
+
*/
|
|
17
30
|
export function decodeLength(buf, start) {
|
|
18
31
|
const decode = getLengthDecoder();
|
|
19
32
|
const lenBuf = buf.subarray(start);
|
|
@@ -25,6 +38,11 @@ export function decodeLength(buf, start) {
|
|
|
25
38
|
}
|
|
26
39
|
throw Error("length decoding failed");
|
|
27
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a stateful decoder function for processing variable-length encoded numbers
|
|
43
|
+
* @returns Function that processes one byte at a time and returns decoding status
|
|
44
|
+
* @throws Error if the encoded length is greater than 4 bytes
|
|
45
|
+
*/
|
|
28
46
|
export function getLengthDecoder() {
|
|
29
47
|
let numLengthBytes = 1;
|
|
30
48
|
let length = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"length.js","sourceRoot":"","sources":["../../mqttPacket/length.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,GAAG,CAAC;QACF,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IAChB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,GAAe,EACf,KAAa;IAEb,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC;
|
|
1
|
+
{"version":3,"file":"length.js","sourceRoot":"","sources":["../../mqttPacket/length.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,GAAG,CAAC;QACF,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;QAC3B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,WAAW,GAAG,WAAW,GAAG,IAAI,CAAC;QACnC,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IAChB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAe,EACf,KAAa;IAEb,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IACD,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACxC,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAG9B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,OAAO,SAAS,aAAa,CAAC,WAAmB;QAC/C,MAAM,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;QAC5C,UAAU,IAAI,IAAI,CAAC;QACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAChD,CAAC;QACD,IAAI,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;IACjD,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/mqttPacket/mod.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @module MQTT Packet Encoding/Decoding
|
|
3
|
+
* @description This module provides comprehensive encoding and decoding functionality for MQTT packets
|
|
4
|
+
* used in both server and client implementations. It handles all MQTT packet types and their
|
|
5
|
+
* transformations between binary and object representations.
|
|
5
6
|
*/
|
|
6
7
|
import type { ClientId, Dup, PacketId, Payload, QoS, ReturnCodes, TAuthenticationResult, Topic, TopicFilter, TPacketType } from "./types.ts";
|
|
7
8
|
import { PacketNameByType, PacketType } from "./PacketType.ts";
|
|
@@ -29,6 +30,10 @@ export type AnyPacket = ConnectPacket | ConnackPacket | PublishPacket | PubackPa
|
|
|
29
30
|
export type { ClientId, ConnackPacket, ConnectPacket, DisconnectPacket, Dup, PacketId, Payload, PingreqPacket, PingresPacket, PubackPacket, PubcompPacket, PublishPacket, PubrecPacket, PubrelPacket, QoS, ReturnCodes, SubackPacket, SubscribePacket, TAuthenticationResult, Topic, TopicFilter, TPacketType, UnsubackPacket, UnsubscribePacket, };
|
|
30
31
|
export type { Subscription } from "./subscribe.ts";
|
|
31
32
|
export { AuthenticationResult, AuthenticationResultByNumber, decodeLength, encodeLength, invalidTopic, invalidTopicFilter, invalidUTF8, PacketNameByType, PacketType, };
|
|
33
|
+
/**
|
|
34
|
+
* Array mapping MQTT packet types to their corresponding encode/decode handlers
|
|
35
|
+
* Index corresponds to packet type number.
|
|
36
|
+
*/
|
|
32
37
|
export declare const packetsByType: readonly [null, {
|
|
33
38
|
encode(packet: ConnectPacket): {
|
|
34
39
|
flags: number;
|
|
@@ -114,8 +119,30 @@ export declare const packetsByType: readonly [null, {
|
|
|
114
119
|
};
|
|
115
120
|
decode(buffer: Uint8Array, _flags: number): DisconnectPacket;
|
|
116
121
|
}];
|
|
122
|
+
/**
|
|
123
|
+
* @function encode
|
|
124
|
+
* @description Encodes an MQTT packet object into a binary Uint8Array format
|
|
125
|
+
* @param {AnyPacket} packet - The MQTT packet object to encode
|
|
126
|
+
* @returns {Uint8Array} The encoded packet as a binary buffer
|
|
127
|
+
* @throws {Error} If packet encoding fails
|
|
128
|
+
*/
|
|
117
129
|
export declare function encode(packet: AnyPacket): Uint8Array;
|
|
130
|
+
/**
|
|
131
|
+
* @function decodePayload
|
|
132
|
+
* @description Decodes a packet payload from binary format into an MQTT packet object
|
|
133
|
+
* @param {number} firstByte - The first byte of the MQTT packet containing type and flags
|
|
134
|
+
* @param {Uint8Array} buffer - The binary buffer containing the packet payload
|
|
135
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
136
|
+
* @throws {Error} If packet decoding fails
|
|
137
|
+
*/
|
|
118
138
|
export declare function decodePayload(firstByte: number, buffer: Uint8Array): AnyPacket;
|
|
139
|
+
/**
|
|
140
|
+
* @function decode
|
|
141
|
+
* @description Decodes a complete MQTT packet from binary format into a packet object
|
|
142
|
+
* @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
|
|
143
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
144
|
+
* @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
|
|
145
|
+
*/
|
|
119
146
|
export declare function decode(buffer: Uint8Array): AnyPacket;
|
|
120
147
|
export { getLengthDecoder } from "../mqttPacket/length.ts";
|
|
121
148
|
export type { LengthDecoderResult } from "../mqttPacket/length.ts";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../mqttPacket/mod.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../mqttPacket/mod.ts"],"names":[],"mappings":"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"}
|
package/dist/mqttPacket/mod.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @module MQTT Packet Encoding/Decoding
|
|
3
|
+
* @description This module provides comprehensive encoding and decoding functionality for MQTT packets
|
|
4
|
+
* used in both server and client implementations. It handles all MQTT packet types and their
|
|
5
|
+
* transformations between binary and object representations.
|
|
5
6
|
*/
|
|
6
7
|
import { PacketNameByType, PacketType } from "./PacketType.js";
|
|
7
8
|
import { invalidTopic, invalidTopicFilter, invalidUTF8 } from "./validators.js";
|
|
@@ -23,6 +24,10 @@ import { pingres } from "./pingres.js";
|
|
|
23
24
|
import { disconnect } from "./disconnect.js";
|
|
24
25
|
import { DecoderError } from "./decoder.js";
|
|
25
26
|
export { AuthenticationResult, AuthenticationResultByNumber, decodeLength, encodeLength, invalidTopic, invalidTopicFilter, invalidUTF8, PacketNameByType, PacketType, };
|
|
27
|
+
/**
|
|
28
|
+
* Array mapping MQTT packet types to their corresponding encode/decode handlers
|
|
29
|
+
* Index corresponds to packet type number.
|
|
30
|
+
*/
|
|
26
31
|
export const packetsByType = [
|
|
27
32
|
null,
|
|
28
33
|
connect, // 1
|
|
@@ -40,6 +45,13 @@ export const packetsByType = [
|
|
|
40
45
|
pingres, // 13
|
|
41
46
|
disconnect, // 14
|
|
42
47
|
];
|
|
48
|
+
/**
|
|
49
|
+
* @function encode
|
|
50
|
+
* @description Encodes an MQTT packet object into a binary Uint8Array format
|
|
51
|
+
* @param {AnyPacket} packet - The MQTT packet object to encode
|
|
52
|
+
* @returns {Uint8Array} The encoded packet as a binary buffer
|
|
53
|
+
* @throws {Error} If packet encoding fails
|
|
54
|
+
*/
|
|
43
55
|
export function encode(packet) {
|
|
44
56
|
const packetType = packet.type;
|
|
45
57
|
// deno-lint-ignore no-explicit-any
|
|
@@ -55,6 +67,14 @@ export function encode(packet) {
|
|
|
55
67
|
...bytes,
|
|
56
68
|
]);
|
|
57
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* @function decodePayload
|
|
72
|
+
* @description Decodes a packet payload from binary format into an MQTT packet object
|
|
73
|
+
* @param {number} firstByte - The first byte of the MQTT packet containing type and flags
|
|
74
|
+
* @param {Uint8Array} buffer - The binary buffer containing the packet payload
|
|
75
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
76
|
+
* @throws {Error} If packet decoding fails
|
|
77
|
+
*/
|
|
58
78
|
export function decodePayload(firstByte, buffer) {
|
|
59
79
|
const packetType = firstByte >> 4;
|
|
60
80
|
const flags = firstByte & 0x0f;
|
|
@@ -64,6 +84,13 @@ export function decodePayload(firstByte, buffer) {
|
|
|
64
84
|
}
|
|
65
85
|
throw new Error("packet decoding failed");
|
|
66
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* @function decode
|
|
89
|
+
* @description Decodes a complete MQTT packet from binary format into a packet object
|
|
90
|
+
* @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
|
|
91
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
92
|
+
* @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
|
|
93
|
+
*/
|
|
67
94
|
export function decode(buffer) {
|
|
68
95
|
if (buffer.length < 2) {
|
|
69
96
|
throw new DecoderError("Packet decoding failed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mqttPacket/mod.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../mqttPacket/mod.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAA0B,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAuB,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAsB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAkD5C,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,UAAU,GACX,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI;IACJ,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,IAAI;IACZ,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,KAAK;CACT,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,MAAiB;IACtC,MAAM,UAAU,GAAW,MAAM,CAAC,IAAI,CAAC;IACvC,mCAAmC;IACnC,MAAM,GAAG,GAAQ,MAAM,CAAC;IACxB,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IACjC,OAAO,UAAU,CAAC,IAAI,CAAC;QACrB,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,KAAK;QACzB,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7B,GAAG,KAAK;KACT,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AAEH,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,MAAkB;IAElB,MAAM,UAAU,GAAG,SAAS,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,MAAkB;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,YAAY,CAAC,wBAAwB,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,cAAc,GAAG,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC;IAC3B,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapNodeSocket.d.ts","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"wrapNodeSocket.d.ts","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAW7D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CA4CvD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrapNodeSocket.js","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;GAGG;AACH,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,QAAQ,GAAG,IAAI,cAAc,CACjC;QACE,IAAI,EAAE,OAAO;QACb,KAAK,CAAC,UAAU;YACd,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE;gBAC1C,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;gBAChD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACrB,2CAA2C;oBAC3C,oDAAoD;oBACpD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACpB,uBAAuB;gBACvB,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,wCAAwC;gBACxC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;KACF,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"wrapNodeSocket.js","sourceRoot":"","sources":["../../node/wrapNodeSocket.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;GAGG;AACH,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,QAAQ,GAAG,IAAI,cAAc,CACjC;QACE,IAAI,EAAE,OAAO;QACb,KAAK,CAAC,UAAU;YACd,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAqB,EAAE,EAAE;gBAC1C,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACzB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;gBAChD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;oBACrB,2CAA2C;oBAC3C,oDAAoD;oBACpD,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACpB,uBAAuB;gBACvB,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnB,wCAAwC;gBACxC,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;KACF,CACF,CAAC;IACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAY;QAC1B,QAAQ,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;QAC5B,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,MAAM,IAAI,GAAa;QACrB,QAAQ,EAAE,QAAsC;QAChD,QAAQ,EAAE,QAAsC;QAChD,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,UAAU;KACX,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Client, Handler, IPersistence, RetainStore } from "../persistence.ts";
|
|
3
|
-
import type { IStore, PacketStore, SubscriptionStore } from "../store.ts";
|
|
1
|
+
import type { Client, ClientId, Handler, IPersistence, IStore, PacketId, PacketStore, PublishPacket, QoS, RetainStore, SubscriptionStore, Topic, TopicFilter } from "../mod.ts";
|
|
4
2
|
export declare class MemoryStore implements IStore {
|
|
5
3
|
existingSession: boolean;
|
|
6
4
|
clientId: ClientId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryPersistence.d.ts","sourceRoot":"","sources":["../../../persistence/memory/memoryPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"memoryPersistence.d.ts","sourceRoot":"","sources":["../../../persistence/memory/memoryPersistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,WAAW,EACX,aAAa,EACb,GAAG,EACH,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,WAAW,EACZ,MAAM,WAAW,CAAC;AAYnB,qBAAa,WAAY,YAAW,MAAM;IACxC,eAAe,EAAE,OAAO,CAAS;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAW;IAC3B,eAAe,EAAE,WAAW,CAAC;IAC7B,eAAe,EAAE,WAAW,CAAC;IAC7B,kBAAkB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,aAAa,EAAE,iBAAiB,CAAC;gBAErB,QAAQ,EAAE,QAAQ;IAS9B,MAAM,IAAI,QAAQ;CAenB;AAED,qBAAa,iBAAkB,YAAW,YAAY;IACpD,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,IAAI,CAA2B;;IAQvC,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;IAS5E,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQ1C,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI;IAQlE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAS1D,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IA4BlD,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAezC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { maxPacketId } from "../mod.js";
|
|
2
|
+
import { Trie } from "../deps.js";
|
|
2
3
|
import { assert } from "../../utils/mod.js";
|
|
3
|
-
const maxPacketId = 0xffff;
|
|
4
4
|
export class MemoryStore {
|
|
5
5
|
existingSession = false;
|
|
6
6
|
clientId;
|
|
@@ -65,7 +65,7 @@ export class MemoryPersistence {
|
|
|
65
65
|
unsubscribe(store, topicFilter) {
|
|
66
66
|
const clientId = store.clientId;
|
|
67
67
|
const qos = store.subscriptions.get(topicFilter);
|
|
68
|
-
if (qos) {
|
|
68
|
+
if (qos !== undefined) {
|
|
69
69
|
store.subscriptions.delete(topicFilter);
|
|
70
70
|
this.trie.remove(topicFilter, { clientId, qos });
|
|
71
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryPersistence.js","sourceRoot":"","sources":["../../../persistence/memory/memoryPersistence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memoryPersistence.js","sourceRoot":"","sources":["../../../persistence/memory/memoryPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module persistence
|
|
3
|
+
* @description Module for handling MQTT message persistence and client management
|
|
4
|
+
*/
|
|
5
|
+
export type { IStore, PacketStore, SubscriptionStore } from "./store.ts";
|
|
6
|
+
export type { ClientId, PacketId, PublishPacket, QoS, Topic, TopicFilter, } from "./deps.ts";
|
|
7
|
+
export type { Client, Handler, IPersistence, RetainStore, } from "./persistence.ts";
|
|
8
|
+
export { maxPacketId } from "./persistence.ts";
|
|
9
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../persistence/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,GAAG,EACH,KAAK,EACL,WAAW,GACZ,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,MAAM,EACN,OAAO,EACP,YAAY,EACZ,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../persistence/mod.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { ClientId, PublishPacket, QoS, Topic } from "./deps.ts";
|
|
6
6
|
import type { IStore } from "./store.ts";
|
|
7
|
+
/**
|
|
8
|
+
* Maximum packet ID value for MQTT messages (0xffff/65535)
|
|
9
|
+
* @constant {number}
|
|
10
|
+
*/
|
|
11
|
+
export declare const maxPacketId = 65535;
|
|
7
12
|
/**
|
|
8
13
|
* Handler function type for processing publish packets
|
|
9
14
|
* @callback Handler
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../persistence/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,QAAQ,EAAE,WAAW,CAAC;IAEtB;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAE7E;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE3C;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAEnD;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAEvD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE/C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC1C"}
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../persistence/persistence.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAS,CAAC;AAClC;;;;GAIG;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAElC;;;OAGG;IACH,QAAQ,EAAE,WAAW,CAAC;IAEtB;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAE7E;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE3C;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAEnD;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAEvD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAE/C;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../persistence/persistence.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../persistence/persistence.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC"}
|
package/dist/socket/socket.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export type SockAddr = NetAddr | UnixAddr |
|
|
1
|
+
export type SockAddr = NetAddr | UnixAddr | VsockAddr;
|
|
2
2
|
export interface NetAddr {
|
|
3
|
-
transport
|
|
3
|
+
transport: "tcp" | "udp";
|
|
4
4
|
hostname: string;
|
|
5
5
|
port: number;
|
|
6
6
|
}
|
|
@@ -8,6 +8,11 @@ export interface UnixAddr {
|
|
|
8
8
|
transport: "unix" | "unixpacket";
|
|
9
9
|
path: string;
|
|
10
10
|
}
|
|
11
|
+
export interface VsockAddr {
|
|
12
|
+
transport: "vsock";
|
|
13
|
+
cid: number;
|
|
14
|
+
port: number;
|
|
15
|
+
}
|
|
11
16
|
export type SockConn = {
|
|
12
17
|
readable: ReadableStream<Uint8Array>;
|
|
13
18
|
writable: WritableStream<Uint8Array>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,WAAW,OAAO;IACtB,SAAS,
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;gBAEP,QAAQ,EAAE,QAAQ;IASxB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxC,KAAK;CAMN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAO,IAAI;IACf,MAAM,CAA2B;IACjC,MAAM,CAA0C;IAChD,MAAM,CAAU;IAChB,UAAU,CAAuB;IACjC,MAAM,CAAa;IAEnB,YAAY,QAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC5C,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
package/mqttPacket/BitMask.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Object containing bit mask values from 2^0 to 2^7
|
|
3
|
+
* @constant
|
|
4
|
+
* @type {Record<string,number>}
|
|
5
|
+
* @property {number} bit0 - Represents 2^0 = 1
|
|
6
|
+
* @property {number} bit1 - Represents 2^1 = 2
|
|
7
|
+
* @property {number} bit2 - Represents 2^2 = 4
|
|
8
|
+
* @property {number} bit3 - Represents 2^3 = 8
|
|
9
|
+
* @property {number} bit4 - Represents 2^4 = 16
|
|
10
|
+
* @property {number} bit5 - Represents 2^5 = 32
|
|
11
|
+
* @property {number} bit6 - Represents 2^6 = 64
|
|
12
|
+
* @property {number} bit7 - Represents 2^7 = 128
|
|
13
|
+
*/
|
|
14
|
+
export const BitMask: Record<string, number> = {
|
|
2
15
|
bit0: 2 ** 0,
|
|
3
16
|
bit1: 2 ** 1,
|
|
4
17
|
bit2: 2 ** 2,
|
package/mqttPacket/PacketType.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Possible MQTT packet types
|
|
3
|
+
*/
|
|
1
4
|
export const PacketType = {
|
|
2
5
|
reserved: 0,
|
|
3
6
|
connect: 1,
|
|
@@ -16,6 +19,9 @@ export const PacketType = {
|
|
|
16
19
|
disconnect: 14,
|
|
17
20
|
} as const;
|
|
18
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Reverse lookup for packet types
|
|
24
|
+
*/
|
|
19
25
|
export const PacketNameByType: Record<number, string> = Object.fromEntries(
|
|
20
26
|
Object.entries(PacketType).map(([k, v]) => [v, k]),
|
|
21
27
|
);
|
package/mqttPacket/decoder.ts
CHANGED
|
@@ -2,23 +2,41 @@ import type { TBitMask, Topic, TopicFilter } from "./types.ts";
|
|
|
2
2
|
import { invalidTopic, invalidTopicFilter } from "./validators.ts";
|
|
3
3
|
|
|
4
4
|
const utf8Decoder = new TextDecoder("utf-8");
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Checks if a specific bit flag is set in a byte using a bitmask
|
|
7
|
+
* @param byte - The byte to check
|
|
8
|
+
* @param mask - The bitmask to apply
|
|
9
|
+
* @returns True if the flag is set, false otherwise
|
|
10
|
+
*/
|
|
6
11
|
export function booleanFlag(byte: number, mask: TBitMask): boolean {
|
|
7
12
|
return !!(byte & mask);
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Checks if a buffer is empty, throws error if not empty
|
|
17
|
+
* @param buf - The buffer to check
|
|
18
|
+
* @throws {DecoderError} If buffer is not empty
|
|
19
|
+
*/
|
|
10
20
|
export function isEmptyBuf(buf: Uint8Array): void {
|
|
11
21
|
if (buf.length > 0) {
|
|
12
22
|
throw new DecoderError("Packet too long");
|
|
13
23
|
}
|
|
14
24
|
}
|
|
15
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Checks if flags are empty (zero), throws error if not
|
|
28
|
+
* @param flags - The flags value to check
|
|
29
|
+
* @throws {DecoderError} If flags are not zero
|
|
30
|
+
*/
|
|
16
31
|
export function hasEmptyFlags(flags: number): void {
|
|
17
32
|
if (flags !== 0) {
|
|
18
33
|
throw new DecoderError("Invalid fixed header flags");
|
|
19
34
|
}
|
|
20
35
|
}
|
|
21
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Custom error class for decoder errors
|
|
39
|
+
*/
|
|
22
40
|
export class DecoderError extends Error {
|
|
23
41
|
constructor(message: string) {
|
|
24
42
|
super(message);
|
|
@@ -26,33 +44,59 @@ export class DecoderError extends Error {
|
|
|
26
44
|
}
|
|
27
45
|
}
|
|
28
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Decoder class for parsing MQTT packets
|
|
49
|
+
*/
|
|
29
50
|
export class Decoder {
|
|
30
51
|
private buf: Uint8Array;
|
|
31
52
|
private pos: number;
|
|
32
53
|
private len: number;
|
|
33
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new Decoder instance
|
|
57
|
+
* @param buf - The buffer to decode
|
|
58
|
+
* @param pos - Starting position in the buffer (default: 0)
|
|
59
|
+
*/
|
|
34
60
|
constructor(buf: Uint8Array, pos: number = 0) {
|
|
35
61
|
this.buf = buf;
|
|
36
62
|
this.pos = pos;
|
|
37
63
|
this.len = buf.length;
|
|
38
64
|
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Checks if the current position is valid
|
|
68
|
+
* @param pos - Position to check
|
|
69
|
+
* @throws {DecoderError} If position exceeds buffer length
|
|
70
|
+
*/
|
|
39
71
|
checkpos(pos: number): void {
|
|
40
72
|
if (pos > this.len) {
|
|
41
73
|
throw new DecoderError("Packet too short");
|
|
42
74
|
}
|
|
43
75
|
}
|
|
44
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Gets a single byte from the buffer
|
|
79
|
+
* @returns The byte value
|
|
80
|
+
*/
|
|
45
81
|
getByte(): number {
|
|
46
82
|
this.checkpos(this.pos);
|
|
47
83
|
return this.buf[this.pos++];
|
|
48
84
|
}
|
|
49
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Gets a 16-bit integer from the buffer
|
|
88
|
+
* @returns The 16-bit integer value
|
|
89
|
+
*/
|
|
50
90
|
getInt16(): number {
|
|
51
91
|
const msb = this.getByte();
|
|
52
92
|
const lsb = this.getByte();
|
|
53
93
|
return (msb << 8) | lsb;
|
|
54
94
|
}
|
|
55
95
|
|
|
96
|
+
/**
|
|
97
|
+
* Gets a byte array from the buffer
|
|
98
|
+
* @returns A subarray of the buffer
|
|
99
|
+
*/
|
|
56
100
|
getByteArray(): Uint8Array {
|
|
57
101
|
const len = this.getInt16();
|
|
58
102
|
const start = this.pos;
|
|
@@ -62,11 +106,20 @@ export class Decoder {
|
|
|
62
106
|
return this.buf.subarray(start, end);
|
|
63
107
|
}
|
|
64
108
|
|
|
109
|
+
/**
|
|
110
|
+
* Gets a UTF-8 string from the buffer
|
|
111
|
+
* @returns The decoded UTF-8 string
|
|
112
|
+
*/
|
|
65
113
|
getUtf8String(): string {
|
|
66
114
|
const str = utf8Decoder.decode(this.getByteArray());
|
|
67
115
|
return str;
|
|
68
116
|
}
|
|
69
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Gets a topic from the buffer
|
|
120
|
+
* @returns The decoded topic
|
|
121
|
+
* @throws {DecoderError} If topic is invalid
|
|
122
|
+
*/
|
|
70
123
|
getTopic(): Topic {
|
|
71
124
|
const topic = this.getUtf8String();
|
|
72
125
|
if (invalidTopic(topic)) {
|
|
@@ -77,6 +130,11 @@ export class Decoder {
|
|
|
77
130
|
return topic;
|
|
78
131
|
}
|
|
79
132
|
|
|
133
|
+
/**
|
|
134
|
+
* Gets a topic filter from the buffer
|
|
135
|
+
* @returns The decoded topic filter
|
|
136
|
+
* @throws {DecoderError} If topic filter is invalid
|
|
137
|
+
*/
|
|
80
138
|
getTopicFilter(): TopicFilter {
|
|
81
139
|
const topicFilter = this.getUtf8String();
|
|
82
140
|
if (invalidTopicFilter(topicFilter)) {
|
|
@@ -87,6 +145,10 @@ export class Decoder {
|
|
|
87
145
|
return topicFilter;
|
|
88
146
|
}
|
|
89
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Gets the remaining bytes from the current position to the end
|
|
150
|
+
* @returns The remaining bytes as a subarray
|
|
151
|
+
*/
|
|
90
152
|
getRemainder() {
|
|
91
153
|
const start = this.pos;
|
|
92
154
|
const end = this.len;
|
|
@@ -94,12 +156,22 @@ export class Decoder {
|
|
|
94
156
|
return this.buf.subarray(start, end);
|
|
95
157
|
}
|
|
96
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Checks if decoder has reached the end of the buffer
|
|
161
|
+
* @returns True if at end, false otherwise
|
|
162
|
+
*/
|
|
97
163
|
atEnd(): boolean {
|
|
98
164
|
if (this.len === this.pos) {
|
|
99
165
|
return true;
|
|
100
166
|
}
|
|
101
167
|
return false;
|
|
102
168
|
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Checks if decoding is complete
|
|
172
|
+
* @returns True if complete
|
|
173
|
+
* @throws {DecoderError} If packet is too long
|
|
174
|
+
*/
|
|
103
175
|
done(): boolean {
|
|
104
176
|
if (this.atEnd()) {
|
|
105
177
|
return true;
|