@seriousme/opifex 1.9.4 → 1.11.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 +37 -26
- package/bin/conformanceServer.ts +3 -2
- package/bin/demoServer.ts +3 -2
- package/bin/mqtt.ts +127 -118
- package/client/client.ts +61 -21
- package/client/context.ts +71 -30
- package/client/deps.ts +5 -0
- package/client/handlers/handleConnack.ts +17 -5
- package/client/handlers/handlePublish.ts +4 -1
- package/client/handlers/handlePubrec.ts +3 -1
- package/client/handlers/handlePubrel.ts +3 -1
- package/client/handlers/handleSuback.ts +3 -1
- package/client/mod.ts +8 -1
- package/client/store/memoryStore.ts +2 -1
- package/deno/tcpClient.ts +1 -1
- package/dev_utils/dummyConn.ts +17 -2
- package/dist/bin/conformanceServer.js +3 -2
- package/dist/bin/conformanceServer.js.map +1 -1
- package/dist/bin/demoServer.js +3 -2
- package/dist/bin/demoServer.js.map +1 -1
- package/dist/bin/mqtt.d.ts +29 -0
- package/dist/bin/mqtt.d.ts.map +1 -1
- package/dist/bin/mqtt.js +102 -97
- package/dist/bin/mqtt.js.map +1 -1
- package/dist/client/client.d.ts +16 -5
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +36 -15
- package/dist/client/client.js.map +1 -1
- package/dist/client/context.d.ts +8 -3
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js +51 -21
- package/dist/client/context.js.map +1 -1
- package/dist/client/deps.d.ts +3 -2
- package/dist/client/deps.d.ts.map +1 -1
- package/dist/client/deps.js +2 -1
- package/dist/client/deps.js.map +1 -1
- package/dist/client/handlers/handleConnack.d.ts +1 -1
- package/dist/client/handlers/handleConnack.d.ts.map +1 -1
- package/dist/client/handlers/handleConnack.js +14 -5
- package/dist/client/handlers/handleConnack.js.map +1 -1
- package/dist/client/handlers/handlePublish.d.ts +1 -1
- package/dist/client/handlers/handlePublish.d.ts.map +1 -1
- package/dist/client/handlers/handlePublish.js +2 -0
- package/dist/client/handlers/handlePublish.js.map +1 -1
- package/dist/client/handlers/handlePubrec.d.ts +1 -1
- package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
- package/dist/client/handlers/handlePubrec.js +1 -0
- package/dist/client/handlers/handlePubrec.js.map +1 -1
- package/dist/client/handlers/handlePubrel.d.ts +1 -1
- package/dist/client/handlers/handlePubrel.d.ts.map +1 -1
- package/dist/client/handlers/handlePubrel.js +1 -0
- package/dist/client/handlers/handlePubrel.js.map +1 -1
- package/dist/client/handlers/handleSuback.d.ts.map +1 -1
- package/dist/client/handlers/handleSuback.js +3 -1
- package/dist/client/handlers/handleSuback.js.map +1 -1
- package/dist/client/mod.d.ts +3 -1
- package/dist/client/mod.d.ts.map +1 -1
- package/dist/client/mod.js +2 -1
- package/dist/client/mod.js.map +1 -1
- package/dist/client/store/memoryStore.d.ts +1 -1
- package/dist/client/store/memoryStore.d.ts.map +1 -1
- package/dist/client/store/memoryStore.js.map +1 -1
- package/dist/mqttConn/mqttConn.d.ts +13 -8
- package/dist/mqttConn/mqttConn.d.ts.map +1 -1
- package/dist/mqttConn/mqttConn.js +27 -12
- package/dist/mqttConn/mqttConn.js.map +1 -1
- package/dist/mqttPacket/PacketType.d.ts +1 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -1
- package/dist/mqttPacket/PacketType.js +1 -0
- package/dist/mqttPacket/PacketType.js.map +1 -1
- package/dist/mqttPacket/Properties.d.ts +157 -0
- package/dist/mqttPacket/Properties.d.ts.map +1 -0
- package/dist/mqttPacket/Properties.js +177 -0
- package/dist/mqttPacket/Properties.js.map +1 -0
- package/dist/mqttPacket/ReasonCode.d.ts +74 -0
- package/dist/mqttPacket/ReasonCode.d.ts.map +1 -0
- package/dist/mqttPacket/ReasonCode.js +230 -0
- package/dist/mqttPacket/ReasonCode.js.map +1 -0
- package/dist/mqttPacket/RetainHandling.d.ts +12 -0
- package/dist/mqttPacket/RetainHandling.d.ts.map +1 -0
- package/dist/mqttPacket/RetainHandling.js +12 -0
- package/dist/mqttPacket/RetainHandling.js.map +1 -0
- package/dist/mqttPacket/auth.d.ts +21 -0
- package/dist/mqttPacket/auth.d.ts.map +1 -0
- package/dist/mqttPacket/auth.js +34 -0
- package/dist/mqttPacket/auth.js.map +1 -0
- package/dist/mqttPacket/connack.d.ts +19 -11
- package/dist/mqttPacket/connack.d.ts.map +1 -1
- package/dist/mqttPacket/connack.js +43 -15
- package/dist/mqttPacket/connack.js.map +1 -1
- package/dist/mqttPacket/connect.d.ts +30 -11
- package/dist/mqttPacket/connect.d.ts.map +1 -1
- package/dist/mqttPacket/connect.js +106 -30
- package/dist/mqttPacket/connect.js.map +1 -1
- package/dist/mqttPacket/decoder.d.ts +42 -3
- package/dist/mqttPacket/decoder.d.ts.map +1 -1
- package/dist/mqttPacket/decoder.js +135 -4
- package/dist/mqttPacket/decoder.js.map +1 -1
- package/dist/mqttPacket/disconnect.d.ts +15 -9
- package/dist/mqttPacket/disconnect.d.ts.map +1 -1
- package/dist/mqttPacket/disconnect.js +45 -6
- package/dist/mqttPacket/disconnect.js.map +1 -1
- package/dist/mqttPacket/encoder.d.ts +57 -8
- package/dist/mqttPacket/encoder.d.ts.map +1 -1
- package/dist/mqttPacket/encoder.js +185 -13
- package/dist/mqttPacket/encoder.js.map +1 -1
- package/dist/mqttPacket/length.d.ts.map +1 -1
- package/dist/mqttPacket/length.js +3 -2
- package/dist/mqttPacket/length.js.map +1 -1
- package/dist/mqttPacket/mod.d.ts +57 -91
- package/dist/mqttPacket/mod.d.ts.map +1 -1
- package/dist/mqttPacket/mod.js +23 -29
- package/dist/mqttPacket/mod.js.map +1 -1
- package/dist/mqttPacket/pingreq.d.ts +4 -6
- package/dist/mqttPacket/pingreq.d.ts.map +1 -1
- package/dist/mqttPacket/pingreq.js +5 -4
- package/dist/mqttPacket/pingreq.js.map +1 -1
- package/dist/mqttPacket/pingres.d.ts +4 -6
- package/dist/mqttPacket/pingres.d.ts.map +1 -1
- package/dist/mqttPacket/pingres.js +7 -5
- package/dist/mqttPacket/pingres.js.map +1 -1
- package/dist/mqttPacket/protocolLevels.d.ts +12 -0
- package/dist/mqttPacket/protocolLevels.d.ts.map +1 -0
- package/dist/mqttPacket/protocolLevels.js +11 -0
- package/dist/mqttPacket/protocolLevels.js.map +1 -0
- package/dist/mqttPacket/pubblishAcks.d.ts +42 -0
- package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -0
- package/dist/mqttPacket/pubblishAcks.js +56 -0
- package/dist/mqttPacket/pubblishAcks.js.map +1 -0
- package/dist/mqttPacket/publish.d.ts +19 -8
- package/dist/mqttPacket/publish.d.ts.map +1 -1
- package/dist/mqttPacket/publish.js +26 -7
- package/dist/mqttPacket/publish.js.map +1 -1
- package/dist/mqttPacket/suback.d.ts +18 -11
- package/dist/mqttPacket/suback.d.ts.map +1 -1
- package/dist/mqttPacket/suback.js +41 -20
- package/dist/mqttPacket/suback.js.map +1 -1
- package/dist/mqttPacket/subscribe.d.ts +27 -12
- package/dist/mqttPacket/subscribe.d.ts.map +1 -1
- package/dist/mqttPacket/subscribe.js +71 -15
- package/dist/mqttPacket/subscribe.js.map +1 -1
- package/dist/mqttPacket/types.d.ts +36 -0
- package/dist/mqttPacket/types.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.d.ts +17 -10
- package/dist/mqttPacket/unsuback.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.js +29 -6
- package/dist/mqttPacket/unsuback.js.map +1 -1
- package/dist/mqttPacket/unsubscribe.d.ts +17 -10
- package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
- package/dist/mqttPacket/unsubscribe.js +24 -8
- package/dist/mqttPacket/unsubscribe.js.map +1 -1
- package/dist/mqttPacket/validators.d.ts +15 -0
- package/dist/mqttPacket/validators.d.ts.map +1 -1
- package/dist/mqttPacket/validators.js +15 -0
- package/dist/mqttPacket/validators.js.map +1 -1
- package/dist/node/tcpClient.js +1 -1
- package/dist/node/tcpClient.js.map +1 -1
- package/dist/node/wrapNodeSocket.d.ts.map +1 -1
- package/dist/node/wrapNodeSocket.js.map +1 -1
- package/dist/persistence/deps.d.ts +1 -1
- package/dist/persistence/deps.d.ts.map +1 -1
- package/dist/persistence/deps.js +1 -1
- package/dist/persistence/deps.js.map +1 -1
- package/dist/persistence/memory/memoryPersistence.js +1 -1
- package/dist/persistence/memory/memoryPersistence.js.map +1 -1
- package/dist/server/context.d.ts +3 -1
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +8 -2
- package/dist/server/context.js.map +1 -1
- package/dist/server/deps.d.ts +2 -2
- package/dist/server/deps.d.ts.map +1 -1
- package/dist/server/deps.js +1 -1
- package/dist/server/deps.js.map +1 -1
- package/dist/server/handlers/handleConnect.d.ts +1 -1
- package/dist/server/handlers/handleConnect.d.ts.map +1 -1
- package/dist/server/handlers/handleConnect.js +9 -1
- package/dist/server/handlers/handleConnect.js.map +1 -1
- package/dist/server/handlers/handlePacket.d.ts +1 -1
- package/dist/server/handlers/handlePacket.d.ts.map +1 -1
- package/dist/server/handlers/handlePacket.js +1 -1
- package/dist/server/handlers/handlePacket.js.map +1 -1
- package/dist/server/handlers/handlePingreq.d.ts.map +1 -1
- package/dist/server/handlers/handlePingreq.js +1 -0
- package/dist/server/handlers/handlePingreq.js.map +1 -1
- package/dist/server/handlers/handlePublish.d.ts +2 -2
- package/dist/server/handlers/handlePublish.d.ts.map +1 -1
- package/dist/server/handlers/handlePublish.js +2 -0
- package/dist/server/handlers/handlePublish.js.map +1 -1
- package/dist/server/handlers/handlePubrec.d.ts +1 -1
- package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
- package/dist/server/handlers/handlePubrec.js +1 -0
- package/dist/server/handlers/handlePubrec.js.map +1 -1
- package/dist/server/handlers/handlePubrel.d.ts +1 -1
- package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
- package/dist/server/handlers/handlePubrel.js +1 -0
- package/dist/server/handlers/handlePubrel.js.map +1 -1
- package/dist/server/handlers/handleSubscribe.d.ts +1 -1
- package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleSubscribe.js +2 -1
- package/dist/server/handlers/handleSubscribe.js.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.d.ts +1 -1
- package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.js +1 -0
- package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
- package/dist/server/server.d.ts +2 -2
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +5 -3
- package/dist/server/server.js.map +1 -1
- package/dist/socket/socket.d.ts.map +1 -1
- package/dist/socket/socket.js +6 -1
- package/dist/socket/socket.js.map +1 -1
- package/dist/utils/assert.d.ts +0 -3
- package/dist/utils/assert.d.ts.map +1 -1
- package/dist/utils/assert.js +0 -7
- package/dist/utils/assert.js.map +1 -1
- package/dist/utils/asyncQueue.d.ts +1 -3
- package/dist/utils/asyncQueue.d.ts.map +1 -1
- package/dist/utils/asyncQueue.js +16 -21
- package/dist/utils/asyncQueue.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -15
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +7 -8
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mod.d.ts +0 -3
- package/dist/utils/mod.d.ts.map +1 -1
- package/dist/utils/mod.js +0 -2
- package/dist/utils/mod.js.map +1 -1
- package/dist/utils/utils.d.ts +2 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +6 -0
- package/dist/utils/utils.js.map +1 -0
- package/mqttConn/mqttConn.test.ts +27 -12
- package/mqttConn/mqttConn.ts +45 -14
- package/mqttPacket/PacketType.ts +1 -0
- package/mqttPacket/Properties.ts +276 -0
- package/mqttPacket/ReasonCode.test.ts +22 -0
- package/mqttPacket/ReasonCode.ts +256 -0
- package/mqttPacket/RetainHandling.ts +11 -0
- package/mqttPacket/auth.test.ts +112 -0
- package/mqttPacket/auth.ts +71 -0
- package/mqttPacket/connack.test.ts +84 -64
- package/mqttPacket/connack.ts +88 -24
- package/mqttPacket/connect.test.ts +497 -18
- package/mqttPacket/connect.ts +170 -39
- package/mqttPacket/decoder.test.ts +33 -16
- package/mqttPacket/decoder.ts +173 -5
- package/mqttPacket/disconnect.test.ts +97 -18
- package/mqttPacket/disconnect.ts +84 -12
- package/mqttPacket/encoder.test.ts +32 -8
- package/mqttPacket/encoder.ts +236 -11
- package/mqttPacket/length.ts +3 -2
- package/mqttPacket/mod.ts +76 -39
- package/mqttPacket/pingreq.test.ts +52 -4
- package/mqttPacket/pingreq.ts +20 -7
- package/mqttPacket/pingres.test.ts +52 -4
- package/mqttPacket/pingres.ts +22 -8
- package/mqttPacket/properties.test.ts +193 -0
- package/mqttPacket/protocolLevels.ts +13 -0
- package/mqttPacket/pubblishAcks.ts +123 -0
- package/mqttPacket/publish.test.ts +212 -133
- package/mqttPacket/publish.ts +69 -14
- package/mqttPacket/publishAcks.test.ts +128 -0
- package/mqttPacket/suback.test.ts +71 -27
- package/mqttPacket/suback.ts +82 -30
- package/mqttPacket/subscribe.test.ts +132 -43
- package/mqttPacket/subscribe.ts +128 -25
- package/mqttPacket/types.ts +43 -0
- package/mqttPacket/unsuback.test.ts +80 -30
- package/mqttPacket/unsuback.ts +68 -13
- package/mqttPacket/unsubscribe.test.ts +59 -34
- package/mqttPacket/unsubscribe.ts +64 -17
- package/mqttPacket/validators.ts +15 -0
- package/node/tcpClient.ts +1 -1
- package/node/wrapNodeSocket.ts +2 -1
- package/package.json +2 -2
- package/persistence/deps.ts +1 -1
- package/persistence/memory/memoryPersistence.test.ts +5 -1
- package/persistence/memory/memoryPersistence.ts +1 -1
- package/server/context.ts +23 -10
- package/server/deps.ts +2 -0
- package/server/handlers/handleConnect.ts +12 -9
- package/server/handlers/handlePacket.ts +10 -11
- package/server/handlers/handlePingreq.ts +1 -0
- package/server/handlers/handlePublish.ts +6 -2
- package/server/handlers/handlePubrec.ts +3 -1
- package/server/handlers/handlePubrel.ts +3 -1
- package/server/handlers/handleSubscribe.ts +3 -6
- package/server/handlers/handleUnsubscribe.ts +3 -1
- package/server/server.ts +8 -12
- package/server/test/handleConnect.test.ts +2 -1
- package/server/test/test-handlers.ts +2 -1
- package/socket/socket.ts +5 -1
- package/utils/assert.ts +0 -18
- package/utils/asyncQueue.ts +17 -21
- package/utils/logger.ts +12 -11
- package/utils/mod.ts +0 -3
- package/utils/utils.ts +6 -0
- package/dist/mqttPacket/puback.d.ts +0 -16
- package/dist/mqttPacket/puback.d.ts.map +0 -1
- package/dist/mqttPacket/puback.js +0 -21
- package/dist/mqttPacket/puback.js.map +0 -1
- package/dist/mqttPacket/pubcomp.d.ts +0 -17
- package/dist/mqttPacket/pubcomp.d.ts.map +0 -1
- package/dist/mqttPacket/pubcomp.js +0 -21
- package/dist/mqttPacket/pubcomp.js.map +0 -1
- package/dist/mqttPacket/pubrec.d.ts +0 -17
- package/dist/mqttPacket/pubrec.d.ts.map +0 -1
- package/dist/mqttPacket/pubrec.js +0 -21
- package/dist/mqttPacket/pubrec.js.map +0 -1
- package/dist/mqttPacket/pubrel.d.ts +0 -17
- package/dist/mqttPacket/pubrel.d.ts.map +0 -1
- package/dist/mqttPacket/pubrel.js +0 -21
- package/dist/mqttPacket/pubrel.js.map +0 -1
- package/dist/utils/args.d.ts +0 -28
- package/dist/utils/args.d.ts.map +0 -1
- package/dist/utils/args.js +0 -76
- package/dist/utils/args.js.map +0 -1
- package/dist/utils/platform.d.ts +0 -5
- package/dist/utils/platform.d.ts.map +0 -1
- package/dist/utils/platform.js +0 -8
- package/dist/utils/platform.js.map +0 -1
- package/mqttPacket/puback.test.ts +0 -55
- package/mqttPacket/puback.ts +0 -34
- package/mqttPacket/pubcomp.test.ts +0 -55
- package/mqttPacket/pubcomp.ts +0 -35
- package/mqttPacket/pubrec.test.ts +0 -55
- package/mqttPacket/pubrec.ts +0 -35
- package/mqttPacket/pubrel.test.ts +0 -55
- package/mqttPacket/pubrel.ts +0 -35
- package/utils/args.ts +0 -103
- package/utils/platform.ts +0 -8
|
@@ -1,25 +1,52 @@
|
|
|
1
|
+
import { PropertySetType } from "./Properties.js";
|
|
1
2
|
import { PacketType } from "./PacketType.js";
|
|
2
3
|
import { BitMask } from "./BitMask.js";
|
|
3
|
-
import { Encoder } from "./encoder.js";
|
|
4
|
+
import { Encoder, EncoderError } from "./encoder.js";
|
|
4
5
|
import { booleanFlag, Decoder, DecoderError, hasEmptyFlags, } from "./decoder.js";
|
|
5
6
|
function invalidProtocolName(version, name) {
|
|
6
|
-
if (version ===
|
|
7
|
-
return
|
|
7
|
+
if (version === 3 && name === "MQIsdp") {
|
|
8
|
+
return false;
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
+
if (version === 4 && name === "MQTT") {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (version === 5 && name == "MQTT") {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
10
17
|
}
|
|
11
18
|
export const connect = {
|
|
12
|
-
encode(packet) {
|
|
19
|
+
encode(packet, codecOpts) {
|
|
13
20
|
const flags = 0;
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
if (typeof packet.protocolLevel !== "number") {
|
|
22
|
+
throw new EncoderError("Protocol level must be a number");
|
|
23
|
+
}
|
|
24
|
+
const protocolLevel = packet.protocolLevel || 4;
|
|
25
|
+
if (protocolLevel < 3 || protocolLevel > 5) {
|
|
26
|
+
throw new EncoderError("Unsupported protocol level");
|
|
27
|
+
}
|
|
28
|
+
const protocolName = protocolLevel > 3 ? "MQTT" : "MQIsdp";
|
|
16
29
|
const clientId = packet.clientId || "";
|
|
17
|
-
const usernameFlag =
|
|
18
|
-
|
|
30
|
+
const usernameFlag = packet.username !== undefined;
|
|
31
|
+
if (protocolLevel === 3 && clientId === "") {
|
|
32
|
+
throw new EncoderError("Client id required for protocol level 3");
|
|
33
|
+
}
|
|
34
|
+
const passwordFlag = usernameFlag && packet.password !== undefined;
|
|
19
35
|
const willRetain = !!packet.will?.retain;
|
|
20
36
|
const willQoS = packet.will?.qos || 0;
|
|
21
|
-
const willFlag =
|
|
37
|
+
const willFlag = packet.will !== undefined;
|
|
38
|
+
if (willFlag) {
|
|
39
|
+
if (packet.will?.topic === undefined) {
|
|
40
|
+
throw new EncoderError("Will topic must be defined");
|
|
41
|
+
}
|
|
42
|
+
if (packet.will?.payload === undefined) {
|
|
43
|
+
throw new EncoderError("Will payload must be defined");
|
|
44
|
+
}
|
|
45
|
+
}
|
|
22
46
|
const cleanSession = packet.clean !== false;
|
|
47
|
+
if (!cleanSession && (clientId === "")) {
|
|
48
|
+
throw new EncoderError("Client id required for clean session");
|
|
49
|
+
}
|
|
23
50
|
const connectFlags = (usernameFlag ? BitMask.bit7 : 0) +
|
|
24
51
|
(passwordFlag ? BitMask.bit6 : 0) +
|
|
25
52
|
(willRetain ? BitMask.bit5 : 0) +
|
|
@@ -28,30 +55,43 @@ export const connect = {
|
|
|
28
55
|
(willFlag ? BitMask.bit2 : 0) +
|
|
29
56
|
(cleanSession ? BitMask.bit1 : 0);
|
|
30
57
|
const keepAlive = packet.keepAlive || 0;
|
|
31
|
-
const
|
|
58
|
+
const bridgeMode = !!packet.bridgeMode;
|
|
59
|
+
const rawProtocolLevel = bridgeMode ? protocolLevel + 128 : protocolLevel;
|
|
60
|
+
const encoder = new Encoder(packet.type);
|
|
32
61
|
encoder
|
|
33
62
|
.setUtf8String(protocolName)
|
|
34
|
-
.setByte(
|
|
63
|
+
.setByte(rawProtocolLevel)
|
|
35
64
|
.setByte(connectFlags)
|
|
36
|
-
.setInt16(keepAlive)
|
|
37
|
-
|
|
38
|
-
|
|
65
|
+
.setInt16(keepAlive);
|
|
66
|
+
if (packet.protocolLevel === 5) {
|
|
67
|
+
encoder.setProperties(packet.properties || {}, PropertySetType.connect, codecOpts.maxOutgoingPacketSize);
|
|
68
|
+
}
|
|
69
|
+
encoder.setUtf8String(clientId);
|
|
70
|
+
if (packet.will !== undefined && packet.will.topic !== undefined &&
|
|
71
|
+
packet.will.payload !== undefined) {
|
|
72
|
+
if (packet.protocolLevel === 5) {
|
|
73
|
+
encoder.setProperties(packet.will?.properties || {}, PropertySetType.will, codecOpts.maxOutgoingPacketSize);
|
|
74
|
+
}
|
|
39
75
|
encoder.setTopic(packet.will.topic).setByteArray(packet.will.payload);
|
|
40
76
|
}
|
|
41
|
-
if (packet.username) {
|
|
77
|
+
if (packet.username !== undefined) {
|
|
42
78
|
encoder.setUtf8String(packet.username);
|
|
43
79
|
}
|
|
44
|
-
if (packet.password) {
|
|
80
|
+
if (passwordFlag && packet.password !== undefined) {
|
|
45
81
|
encoder.setByteArray(packet.password);
|
|
46
82
|
}
|
|
47
|
-
return
|
|
83
|
+
return encoder.done(flags);
|
|
48
84
|
},
|
|
49
|
-
decode(buffer, flags) {
|
|
50
|
-
const decoder = new Decoder(buffer);
|
|
51
|
-
const protocolName = decoder.
|
|
52
|
-
const
|
|
85
|
+
decode(buffer, flags, _codecOpts, packetType) {
|
|
86
|
+
const decoder = new Decoder(packetType, buffer);
|
|
87
|
+
const protocolName = decoder.getUTF8String();
|
|
88
|
+
const rawProtocolLevel = decoder.getByte();
|
|
89
|
+
const bridgeMode = rawProtocolLevel > 128;
|
|
90
|
+
const protocolLevel = bridgeMode
|
|
91
|
+
? rawProtocolLevel - 128
|
|
92
|
+
: rawProtocolLevel;
|
|
53
93
|
if (invalidProtocolName(protocolLevel, protocolName)) {
|
|
54
|
-
throw new DecoderError("Invalid protocol name");
|
|
94
|
+
throw new DecoderError("Invalid protocol name or level");
|
|
55
95
|
}
|
|
56
96
|
const connectFlags = decoder.getByte();
|
|
57
97
|
const usernameFlag = booleanFlag(connectFlags, BitMask.bit7);
|
|
@@ -70,18 +110,30 @@ export const connect = {
|
|
|
70
110
|
if (willQoS !== 0 && willQoS !== 1 && willQoS !== 2) {
|
|
71
111
|
throw new DecoderError("Invalid will qos");
|
|
72
112
|
}
|
|
113
|
+
if (!usernameFlag && passwordFlag) {
|
|
114
|
+
throw new DecoderError("Password without username");
|
|
115
|
+
}
|
|
73
116
|
const keepAlive = decoder.getInt16();
|
|
74
|
-
const
|
|
117
|
+
const isV5 = protocolLevel === 5;
|
|
118
|
+
let properties;
|
|
119
|
+
if (isV5) {
|
|
120
|
+
properties = decoder.getProperties(PropertySetType.connect);
|
|
121
|
+
}
|
|
122
|
+
const clientId = decoder.getUTF8String();
|
|
123
|
+
let willProperties;
|
|
75
124
|
let willTopic;
|
|
76
125
|
let willPayload;
|
|
77
126
|
if (willFlag) {
|
|
127
|
+
if (isV5) {
|
|
128
|
+
willProperties = decoder.getProperties(PropertySetType.will);
|
|
129
|
+
}
|
|
78
130
|
willTopic = decoder.getTopic();
|
|
79
131
|
willPayload = decoder.getByteArray();
|
|
80
132
|
}
|
|
81
133
|
let username;
|
|
82
134
|
let password;
|
|
83
135
|
if (usernameFlag) {
|
|
84
|
-
username = decoder.
|
|
136
|
+
username = decoder.getUTF8String();
|
|
85
137
|
}
|
|
86
138
|
if (passwordFlag) {
|
|
87
139
|
password = decoder.getByteArray();
|
|
@@ -93,13 +145,39 @@ export const connect = {
|
|
|
93
145
|
if (clientId.length === 0 && cleanSession === false) {
|
|
94
146
|
throw new DecoderError("Clean session must be true if clientID is empty");
|
|
95
147
|
}
|
|
96
|
-
|
|
148
|
+
let bridgeModeProp = {};
|
|
149
|
+
if (bridgeMode) {
|
|
150
|
+
bridgeModeProp = { bridgeMode };
|
|
151
|
+
}
|
|
152
|
+
const commonProps = {
|
|
97
153
|
type: PacketType.connect,
|
|
98
154
|
protocolName: protocolName,
|
|
99
|
-
protocolLevel,
|
|
100
155
|
clientId: clientId,
|
|
101
|
-
username
|
|
156
|
+
username,
|
|
102
157
|
password: password ? password : undefined,
|
|
158
|
+
clean: cleanSession,
|
|
159
|
+
keepAlive,
|
|
160
|
+
...bridgeModeProp,
|
|
161
|
+
};
|
|
162
|
+
if (isV5) {
|
|
163
|
+
return {
|
|
164
|
+
...commonProps,
|
|
165
|
+
protocolLevel: 5,
|
|
166
|
+
will: willFlag
|
|
167
|
+
? {
|
|
168
|
+
topic: willTopic || "",
|
|
169
|
+
payload: willPayload || Uint8Array.from([0]),
|
|
170
|
+
retain: willRetain,
|
|
171
|
+
qos: willQoS,
|
|
172
|
+
properties: willProperties,
|
|
173
|
+
}
|
|
174
|
+
: undefined,
|
|
175
|
+
properties,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
...commonProps,
|
|
180
|
+
protocolLevel: protocolLevel,
|
|
103
181
|
will: willFlag
|
|
104
182
|
? {
|
|
105
183
|
topic: willTopic || "",
|
|
@@ -108,8 +186,6 @@ export const connect = {
|
|
|
108
186
|
qos: willQoS,
|
|
109
187
|
}
|
|
110
188
|
: undefined,
|
|
111
|
-
clean: cleanSession,
|
|
112
|
-
keepAlive,
|
|
113
189
|
};
|
|
114
190
|
},
|
|
115
191
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../mqttPacket/connect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../mqttPacket/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { TBitMask, Topic, TopicFilter } from "./types.ts";
|
|
1
|
+
import type { TBitMask, Topic, TopicFilter, TPacketType, TReasonCode, UTF8StringPair } from "./types.ts";
|
|
2
|
+
import type { PropsByPacketSetType } from "./Properties.ts";
|
|
2
3
|
/**
|
|
3
4
|
* Checks if a specific bit flag is set in a byte using a bitmask
|
|
4
5
|
* @param byte - The byte to check
|
|
@@ -28,6 +29,7 @@ export declare class DecoderError extends Error {
|
|
|
28
29
|
* Decoder class for parsing MQTT packets
|
|
29
30
|
*/
|
|
30
31
|
export declare class Decoder {
|
|
32
|
+
private packetType;
|
|
31
33
|
private buf;
|
|
32
34
|
private pos;
|
|
33
35
|
private len;
|
|
@@ -36,7 +38,7 @@ export declare class Decoder {
|
|
|
36
38
|
* @param buf - The buffer to decode
|
|
37
39
|
* @param pos - Starting position in the buffer (default: 0)
|
|
38
40
|
*/
|
|
39
|
-
constructor(buf: Uint8Array, pos?: number);
|
|
41
|
+
constructor(packetType: TPacketType, buf: Uint8Array, pos?: number);
|
|
40
42
|
/**
|
|
41
43
|
* Checks if the current position is valid
|
|
42
44
|
* @param pos - Position to check
|
|
@@ -53,6 +55,18 @@ export declare class Decoder {
|
|
|
53
55
|
* @returns The 16-bit integer value
|
|
54
56
|
*/
|
|
55
57
|
getInt16(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Gets a 4 byte integer from the buffer (for v5)
|
|
60
|
+
* @returns The 32 bit integer value
|
|
61
|
+
*/
|
|
62
|
+
getInt32(): number;
|
|
63
|
+
/**
|
|
64
|
+
* Gets a variable byte integer from the buffer (for v5)
|
|
65
|
+
* its like the length decoder in length.ts but this one works directly on the buffer
|
|
66
|
+
* @returns The decoded variable byte integer
|
|
67
|
+
* @throws {DecoderError} If malformed variable byte integer
|
|
68
|
+
*/
|
|
69
|
+
getVariableByteInteger(): number;
|
|
56
70
|
/**
|
|
57
71
|
* Gets a byte array from the buffer
|
|
58
72
|
* @returns A subarray of the buffer
|
|
@@ -62,7 +76,12 @@ export declare class Decoder {
|
|
|
62
76
|
* Gets a UTF-8 string from the buffer
|
|
63
77
|
* @returns The decoded UTF-8 string
|
|
64
78
|
*/
|
|
65
|
-
|
|
79
|
+
getUTF8String(): string;
|
|
80
|
+
/**
|
|
81
|
+
* Gets a UTF-8 string pair from the buffer (for v5)
|
|
82
|
+
* @returns The decoded UTF-8 pair as [name,value]
|
|
83
|
+
*/
|
|
84
|
+
getUTF8StringPair(): UTF8StringPair;
|
|
66
85
|
/**
|
|
67
86
|
* Gets a topic from the buffer
|
|
68
87
|
* @returns The decoded topic
|
|
@@ -80,6 +99,26 @@ export declare class Decoder {
|
|
|
80
99
|
* @returns The remaining bytes as a subarray
|
|
81
100
|
*/
|
|
82
101
|
getRemainder(): Uint8Array<ArrayBufferLike>;
|
|
102
|
+
/**
|
|
103
|
+
* Gets a single property
|
|
104
|
+
* @param id
|
|
105
|
+
* @returns
|
|
106
|
+
*/
|
|
107
|
+
private getProperty;
|
|
108
|
+
/**
|
|
109
|
+
* Gets all properties from the buffer
|
|
110
|
+
* and validates if they are allowed for this type of packet
|
|
111
|
+
* @param propertySetType
|
|
112
|
+
* @returns
|
|
113
|
+
* @throws {DecoderError} If properties are invalid
|
|
114
|
+
*/
|
|
115
|
+
getProperties<T extends keyof PropsByPacketSetType>(propertySetType: T): PropsByPacketSetType[T];
|
|
116
|
+
/**
|
|
117
|
+
* Gets a reason code from the buffer
|
|
118
|
+
* @returns The decoded reason code
|
|
119
|
+
* @throws {DecoderError} If reason code is invalid
|
|
120
|
+
*/
|
|
121
|
+
getReasonCode(): TReasonCode;
|
|
83
122
|
/**
|
|
84
123
|
* Checks if decoder has reached the end of the buffer
|
|
85
124
|
* @returns True if at end, false otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,KAAK,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAEV,oBAAoB,EAIrB,MAAM,iBAAiB,CAAC;AAazB;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAIhD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,GAAG,CAAS;IAEpB;;;;OAIG;gBACS,UAAU,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAE,MAAU;IAOrE;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM3B;;;OAGG;IACH,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAMlB;;;OAGG;IACH,QAAQ,IAAI,MAAM;IAMlB;;;;;OAKG;IACH,sBAAsB,IAAI,MAAM;IAehC;;;OAGG;IACH,YAAY,IAAI,UAAU;IAS1B;;;OAGG;IACH,aAAa,IAAI,MAAM;IAKvB;;;OAGG;IACH,iBAAiB,IAAI,cAAc;IAMnC;;;;OAIG;IACH,QAAQ,IAAI,KAAK;IAUjB;;;;OAIG;IACH,cAAc,IAAI,WAAW;IAU7B;;;OAGG;IACH,YAAY;IAOZ;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAuBnB;;;;;;OAMG;IACH,aAAa,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAChD,eAAe,EAAE,CAAC,GACjB,oBAAoB,CAAC,CAAC,CAAC;IAkD1B;;;;OAIG;IACH,aAAa,IAAI,WAAW;IAQ5B;;;OAGG;IACH,KAAK,IAAI,OAAO;IAOhB;;;;OAIG;IACH,IAAI,IAAI,OAAO;CAMhB"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { invalidTopic, invalidTopicFilter } from "./validators.js";
|
|
2
|
+
import { isValidReasonCode } from "./ReasonCode.js";
|
|
3
|
+
import { propertyByNumber, PropertyByPropertySetType, propertyKind, propertyToId, propertyToKind, } from "./Properties.js";
|
|
2
4
|
const utf8Decoder = new TextDecoder("utf-8");
|
|
5
|
+
const userPropID = propertyToId.userProperty;
|
|
6
|
+
const subIdentID = propertyToId.subscriptionIdentifier;
|
|
7
|
+
const subIdentsID = propertyToId.subscriptionIdentifiers;
|
|
3
8
|
/**
|
|
4
9
|
* Checks if a specific bit flag is set in a byte using a bitmask
|
|
5
10
|
* @param byte - The byte to check
|
|
@@ -42,6 +47,7 @@ export class DecoderError extends Error {
|
|
|
42
47
|
* Decoder class for parsing MQTT packets
|
|
43
48
|
*/
|
|
44
49
|
export class Decoder {
|
|
50
|
+
packetType;
|
|
45
51
|
buf;
|
|
46
52
|
pos;
|
|
47
53
|
len;
|
|
@@ -50,7 +56,8 @@ export class Decoder {
|
|
|
50
56
|
* @param buf - The buffer to decode
|
|
51
57
|
* @param pos - Starting position in the buffer (default: 0)
|
|
52
58
|
*/
|
|
53
|
-
constructor(buf, pos = 0) {
|
|
59
|
+
constructor(packetType, buf, pos = 0) {
|
|
60
|
+
this.packetType = packetType;
|
|
54
61
|
this.buf = buf;
|
|
55
62
|
this.pos = pos;
|
|
56
63
|
this.len = buf.length;
|
|
@@ -82,6 +89,35 @@ export class Decoder {
|
|
|
82
89
|
const lsb = this.getByte();
|
|
83
90
|
return (msb << 8) | lsb;
|
|
84
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Gets a 4 byte integer from the buffer (for v5)
|
|
94
|
+
* @returns The 32 bit integer value
|
|
95
|
+
*/
|
|
96
|
+
getInt32() {
|
|
97
|
+
const msb = this.getInt16();
|
|
98
|
+
const lsb = this.getInt16();
|
|
99
|
+
return (msb << 16) | lsb;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Gets a variable byte integer from the buffer (for v5)
|
|
103
|
+
* its like the length decoder in length.ts but this one works directly on the buffer
|
|
104
|
+
* @returns The decoded variable byte integer
|
|
105
|
+
* @throws {DecoderError} If malformed variable byte integer
|
|
106
|
+
*/
|
|
107
|
+
getVariableByteInteger() {
|
|
108
|
+
let num = 0;
|
|
109
|
+
let multiplier = 1;
|
|
110
|
+
let byte;
|
|
111
|
+
do {
|
|
112
|
+
byte = this.getByte();
|
|
113
|
+
num += (byte & 127) * multiplier;
|
|
114
|
+
if (multiplier > 128 * 128 * 128) {
|
|
115
|
+
throw new DecoderError("Malformed Variable Byte Integer");
|
|
116
|
+
}
|
|
117
|
+
multiplier *= 128;
|
|
118
|
+
} while ((byte & 128) !== 0);
|
|
119
|
+
return num;
|
|
120
|
+
}
|
|
85
121
|
/**
|
|
86
122
|
* Gets a byte array from the buffer
|
|
87
123
|
* @returns A subarray of the buffer
|
|
@@ -98,17 +134,26 @@ export class Decoder {
|
|
|
98
134
|
* Gets a UTF-8 string from the buffer
|
|
99
135
|
* @returns The decoded UTF-8 string
|
|
100
136
|
*/
|
|
101
|
-
|
|
137
|
+
getUTF8String() {
|
|
102
138
|
const str = utf8Decoder.decode(this.getByteArray());
|
|
103
139
|
return str;
|
|
104
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets a UTF-8 string pair from the buffer (for v5)
|
|
143
|
+
* @returns The decoded UTF-8 pair as [name,value]
|
|
144
|
+
*/
|
|
145
|
+
getUTF8StringPair() {
|
|
146
|
+
const name = utf8Decoder.decode(this.getByteArray());
|
|
147
|
+
const value = utf8Decoder.decode(this.getByteArray());
|
|
148
|
+
return [name, value];
|
|
149
|
+
}
|
|
105
150
|
/**
|
|
106
151
|
* Gets a topic from the buffer
|
|
107
152
|
* @returns The decoded topic
|
|
108
153
|
* @throws {DecoderError} If topic is invalid
|
|
109
154
|
*/
|
|
110
155
|
getTopic() {
|
|
111
|
-
const topic = this.
|
|
156
|
+
const topic = this.getUTF8String();
|
|
112
157
|
if (invalidTopic(topic)) {
|
|
113
158
|
throw new DecoderError("Topic must contain valid UTF-8 and contain more than 1 byte and no wildcards");
|
|
114
159
|
}
|
|
@@ -120,7 +165,7 @@ export class Decoder {
|
|
|
120
165
|
* @throws {DecoderError} If topic filter is invalid
|
|
121
166
|
*/
|
|
122
167
|
getTopicFilter() {
|
|
123
|
-
const topicFilter = this.
|
|
168
|
+
const topicFilter = this.getUTF8String();
|
|
124
169
|
if (invalidTopicFilter(topicFilter)) {
|
|
125
170
|
throw new DecoderError("Topicfilter must contain valid UTF-8 and contain more than 1 byte and valid wildcards");
|
|
126
171
|
}
|
|
@@ -136,6 +181,92 @@ export class Decoder {
|
|
|
136
181
|
this.pos = end;
|
|
137
182
|
return this.buf.subarray(start, end);
|
|
138
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Gets a single property
|
|
186
|
+
* @param id
|
|
187
|
+
* @returns
|
|
188
|
+
*/
|
|
189
|
+
getProperty(id) {
|
|
190
|
+
switch (propertyToKind[id]) {
|
|
191
|
+
case propertyKind.boolean:
|
|
192
|
+
return !!this.getByte();
|
|
193
|
+
case propertyKind.byte:
|
|
194
|
+
return this.getByte();
|
|
195
|
+
case propertyKind.int16:
|
|
196
|
+
return this.getInt16();
|
|
197
|
+
case propertyKind.int32:
|
|
198
|
+
return this.getInt32();
|
|
199
|
+
case propertyKind.varInt:
|
|
200
|
+
return this.getVariableByteInteger();
|
|
201
|
+
case propertyKind.byteArray:
|
|
202
|
+
return this.getByteArray();
|
|
203
|
+
case propertyKind.utf8string:
|
|
204
|
+
return this.getUTF8String();
|
|
205
|
+
}
|
|
206
|
+
// deno-coverage-ignore
|
|
207
|
+
throw new DecoderError("Invalid property kind");
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Gets all properties from the buffer
|
|
211
|
+
* and validates if they are allowed for this type of packet
|
|
212
|
+
* @param propertySetType
|
|
213
|
+
* @returns
|
|
214
|
+
* @throws {DecoderError} If properties are invalid
|
|
215
|
+
*/
|
|
216
|
+
getProperties(propertySetType) {
|
|
217
|
+
const allowedProps = PropertyByPropertySetType[propertySetType];
|
|
218
|
+
const properties = {};
|
|
219
|
+
const propLength = this.getVariableByteInteger();
|
|
220
|
+
const endPos = this.pos + propLength;
|
|
221
|
+
const userProps = [];
|
|
222
|
+
const subIdents = [];
|
|
223
|
+
while (this.pos < endPos) {
|
|
224
|
+
const id = this.getVariableByteInteger();
|
|
225
|
+
const label = propertyByNumber[id];
|
|
226
|
+
if (id === subIdentID && allowedProps.includes(subIdentsID)) {
|
|
227
|
+
subIdents.push(this.getVariableByteInteger());
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
if (!allowedProps.includes(id)) {
|
|
231
|
+
throw new DecoderError(`Property type ${label ? label : id} not allowed at byte ${this.pos}`);
|
|
232
|
+
}
|
|
233
|
+
if (id === userPropID) {
|
|
234
|
+
const stringPair = this.getUTF8StringPair();
|
|
235
|
+
userProps.push(stringPair);
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
const value = this.getProperty(id);
|
|
239
|
+
// deno-lint-ignore no-explicit-any
|
|
240
|
+
if (properties[label] !== undefined) {
|
|
241
|
+
throw new DecoderError(`Property ${label} only allowed once`);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
// deno-lint-ignore no-explicit-any
|
|
245
|
+
properties[label] = value;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (userProps.length > 0) {
|
|
249
|
+
// deno-lint-ignore no-explicit-any
|
|
250
|
+
properties.userProperty = userProps;
|
|
251
|
+
}
|
|
252
|
+
if (subIdents.length > 0) {
|
|
253
|
+
// deno-lint-ignore no-explicit-any
|
|
254
|
+
properties.subscriptionIdentifiers = subIdents;
|
|
255
|
+
}
|
|
256
|
+
return properties;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Gets a reason code from the buffer
|
|
260
|
+
* @returns The decoded reason code
|
|
261
|
+
* @throws {DecoderError} If reason code is invalid
|
|
262
|
+
*/
|
|
263
|
+
getReasonCode() {
|
|
264
|
+
const reasonCode = this.getByte();
|
|
265
|
+
if (!isValidReasonCode(this.packetType, reasonCode)) {
|
|
266
|
+
throw new DecoderError("Invalid reason code");
|
|
267
|
+
}
|
|
268
|
+
return reasonCode;
|
|
269
|
+
}
|
|
139
270
|
/**
|
|
140
271
|
* Checks if decoder has reached the end of the buffer
|
|
141
272
|
* @returns True if at end, false otherwise
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
import type { TPacketType } from "./types.ts";
|
|
1
|
+
import type { CodecOpts, ProtocolLevelNoV5, TPacketType, TReasonCode } from "./types.ts";
|
|
2
|
+
import type { DisconnectProperties } from "./Properties.ts";
|
|
3
|
+
export type DisconnectPacketv4 = {
|
|
4
|
+
type: TPacketType;
|
|
5
|
+
protocolLevel: ProtocolLevelNoV5;
|
|
6
|
+
};
|
|
7
|
+
export type DisconnectPacketv5 = {
|
|
8
|
+
type: TPacketType;
|
|
9
|
+
protocolLevel: 5;
|
|
10
|
+
reasonCode: TReasonCode;
|
|
11
|
+
properties?: DisconnectProperties;
|
|
12
|
+
};
|
|
2
13
|
/**
|
|
3
14
|
* DisconnectPacket is the final control packet sent from the client to the server.
|
|
4
15
|
* It indicates that the client is disconnecting cleanly.
|
|
5
16
|
*/
|
|
6
|
-
export type DisconnectPacket =
|
|
7
|
-
type: TPacketType;
|
|
8
|
-
};
|
|
17
|
+
export type DisconnectPacket = DisconnectPacketv4 | DisconnectPacketv5;
|
|
9
18
|
export declare const disconnect: {
|
|
10
|
-
encode(_packet: DisconnectPacket):
|
|
11
|
-
|
|
12
|
-
bytes: number[];
|
|
13
|
-
};
|
|
14
|
-
decode(buffer: Uint8Array, _flags: number): DisconnectPacket;
|
|
19
|
+
encode(_packet: DisconnectPacket, _codecOpts: CodecOpts): Uint8Array;
|
|
20
|
+
decode(buffer: Uint8Array, _flags: number, codecOpts: CodecOpts, packetType: TPacketType): DisconnectPacket;
|
|
15
21
|
};
|
|
16
22
|
//# sourceMappingURL=disconnect.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAIvE,eAAO,MAAM,UAAU,EAAE;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC;IACrE,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACtB,gBAAgB,CAAC;CA4DrB,CAAC"}
|
|
@@ -1,14 +1,53 @@
|
|
|
1
1
|
import { PacketType } from "./PacketType.js";
|
|
2
|
-
import { isEmptyBuf } from "./decoder.js";
|
|
2
|
+
import { Decoder, hasEmptyFlags, isEmptyBuf } from "./decoder.js";
|
|
3
|
+
import { Encoder } from "./encoder.js";
|
|
4
|
+
import { ReasonCode } from "./ReasonCode.js";
|
|
5
|
+
const DISCONNECT_PACKET = new Uint8Array([PacketType.disconnect << 4, 0]);
|
|
3
6
|
export const disconnect = {
|
|
4
|
-
encode(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
encode(packet, codecOpts) {
|
|
8
|
+
if (packet.protocolLevel !== 5) {
|
|
9
|
+
return DISCONNECT_PACKET;
|
|
10
|
+
}
|
|
11
|
+
const reasonCode = packet.reasonCode || ReasonCode.normalDisconnection;
|
|
12
|
+
const encoder = new Encoder(packet.type);
|
|
13
|
+
// see MQTT v5 3.14.2.1
|
|
14
|
+
// if remaining length is less than 1 the value of 0x00 (normal disconnect) is used.
|
|
15
|
+
if (reasonCode === ReasonCode.normalDisconnection &&
|
|
16
|
+
Object.keys(packet.properties || {}).length === 0) {
|
|
17
|
+
return encoder.done(0);
|
|
18
|
+
}
|
|
19
|
+
encoder
|
|
20
|
+
.setReasonCode(reasonCode);
|
|
21
|
+
if (packet.properties) {
|
|
22
|
+
encoder.setProperties(packet.properties, packet.type, codecOpts.maxOutgoingPacketSize);
|
|
23
|
+
}
|
|
24
|
+
return encoder.done(0);
|
|
7
25
|
},
|
|
8
|
-
decode(buffer,
|
|
9
|
-
|
|
26
|
+
decode(buffer, flags, codecOpts, packetType) {
|
|
27
|
+
hasEmptyFlags(flags);
|
|
28
|
+
if (codecOpts.protocolLevel !== 5) {
|
|
29
|
+
isEmptyBuf(buffer);
|
|
30
|
+
return {
|
|
31
|
+
type: PacketType.disconnect,
|
|
32
|
+
protocolLevel: codecOpts.protocolLevel,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const decoder = new Decoder(packetType, buffer);
|
|
36
|
+
if (decoder.atEnd()) {
|
|
37
|
+
return {
|
|
38
|
+
type: PacketType.disconnect,
|
|
39
|
+
protocolLevel: 5,
|
|
40
|
+
reasonCode: 0,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const reasonCode = decoder.getReasonCode();
|
|
44
|
+
const properties = decoder.getProperties(PacketType.disconnect);
|
|
45
|
+
decoder.done();
|
|
10
46
|
return {
|
|
11
47
|
type: PacketType.disconnect,
|
|
48
|
+
protocolLevel: 5,
|
|
49
|
+
reasonCode,
|
|
50
|
+
properties,
|
|
12
51
|
};
|
|
13
52
|
},
|
|
14
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQlE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAoB7C,MAAM,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,UAAU,GAQnB;IACF,MAAM,CAAC,MAAwB,EAAE,SAAoB;QACnD,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,mBAAmB,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,uBAAuB;QACvB,oFAAoF;QACpF,IACE,UAAU,KAAK,UAAU,CAAC,mBAAmB;YAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EACjD,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO;aACJ,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,SAAS,CAAC,qBAAqB,CAChC,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CACJ,MAAkB,EAClB,KAAa,EACb,SAAS,EACT,UAAuB;QAEvB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,UAAU;gBAC3B,aAAa,EAAE,SAAS,CAAC,aAAa;aACvC,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,UAAU;gBAC3B,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,UAAU;YAC3B,aAAa,EAAE,CAAC;YAChB,UAAU;YACV,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC"}
|