@seriousme/opifex 1.11.3 → 2.1.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 +99 -40
- package/bin/conformanceServer.ts +45 -13
- package/bin/demoServer.ts +38 -13
- package/bin/mqtt.ts +2 -2
- package/client/ConnectionState.ts +3 -1
- package/client/client.ts +88 -47
- package/client/context.ts +79 -27
- package/client/deps.ts +10 -3
- package/client/handlers/handleAuth.test.ts +193 -0
- package/client/handlers/handleAuth.ts +89 -0
- package/client/handlers/handleConnack.test.ts +173 -0
- package/client/handlers/handleConnack.ts +18 -8
- package/client/handlers/handleDisconnect.test.ts +22 -0
- package/client/handlers/handleDisconnect.ts +17 -0
- package/client/handlers/handlePacket.test.ts +242 -0
- package/client/handlers/handlePacket.ts +19 -5
- package/client/handlers/handlePuback.test.ts +99 -0
- package/client/handlers/handlePuback.ts +6 -0
- package/client/handlers/handlePubcomp.test.ts +112 -0
- package/client/handlers/handlePubcomp.ts +5 -0
- package/client/handlers/handlePublish.test.ts +188 -0
- package/client/handlers/handlePubrec.test.ts +119 -0
- package/client/handlers/handlePubrec.ts +5 -1
- package/client/handlers/handlePubrel.test.ts +136 -0
- package/client/handlers/handleSuback.test.ts +122 -0
- package/client/handlers/handleSuback.ts +3 -0
- package/client/handlers/handleUnsuback.test.ts +101 -0
- package/client/mod.ts +13 -2
- package/client/store/memoryStore.ts +12 -11
- package/client/store/store.ts +4 -2
- package/deno/README.md +1 -2
- package/deno/tcpClient.test.ts +75 -0
- package/deno/tcpClient.ts +36 -18
- package/deno/tcpServer.test.ts +22 -21
- package/deno/tcpServer.ts +26 -4
- package/deno/tlsServer.test.ts +97 -0
- package/deno/tlsServer.ts +58 -0
- package/deno/wsServer.test.ts +93 -0
- package/deno/wsServer.ts +96 -0
- package/dev_utils/generateCert.ts +95 -0
- package/dev_utils/mockConn.ts +36 -0
- package/dev_utils/mockServer.ts +28 -0
- package/dev_utils/mod.ts +30 -3
- package/dev_utils/packetHelpers.ts +404 -0
- package/dev_utils/test-handlers.ts +98 -0
- package/dev_utils/timers.ts +14 -0
- package/dev_utils/webStreamPair.test.ts +171 -0
- package/dev_utils/webStreamPair.ts +143 -0
- package/dist/bin/conformanceServer.js +17 -12
- package/dist/bin/conformanceServer.js.map +1 -1
- package/dist/bin/demoServer.js +16 -12
- package/dist/bin/demoServer.js.map +1 -1
- package/dist/bin/mqtt.js +2 -2
- package/dist/bin/mqtt.js.map +1 -1
- package/dist/client/ConnectionState.d.ts +3 -1
- package/dist/client/ConnectionState.d.ts.map +1 -1
- package/dist/client/ConnectionState.js +2 -0
- package/dist/client/ConnectionState.js.map +1 -1
- package/dist/client/client.d.ts +47 -21
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +57 -20
- package/dist/client/client.js.map +1 -1
- package/dist/client/context.d.ts +15 -7
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js +44 -12
- package/dist/client/context.js.map +1 -1
- package/dist/client/deps.d.ts +4 -3
- package/dist/client/deps.d.ts.map +1 -1
- package/dist/client/deps.js +1 -1
- package/dist/client/deps.js.map +1 -1
- package/dist/client/handlers/handleAuth.d.ts +9 -0
- package/dist/client/handlers/handleAuth.d.ts.map +1 -0
- package/dist/client/handlers/handleAuth.js +66 -0
- package/dist/client/handlers/handleAuth.js.map +1 -0
- package/dist/client/handlers/handleConnack.d.ts +2 -2
- package/dist/client/handlers/handleConnack.d.ts.map +1 -1
- package/dist/client/handlers/handleConnack.js +16 -6
- package/dist/client/handlers/handleConnack.js.map +1 -1
- package/dist/client/handlers/handleDisconnect.d.ts +11 -0
- package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
- package/dist/client/handlers/handleDisconnect.js +15 -0
- package/dist/client/handlers/handleDisconnect.js.map +1 -0
- package/dist/client/handlers/handlePacket.d.ts.map +1 -1
- package/dist/client/handlers/handlePacket.js +14 -3
- package/dist/client/handlers/handlePacket.js.map +1 -1
- package/dist/client/handlers/handlePuback.d.ts.map +1 -1
- package/dist/client/handlers/handlePuback.js +5 -0
- package/dist/client/handlers/handlePuback.js.map +1 -1
- package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
- package/dist/client/handlers/handlePubcomp.js +5 -0
- package/dist/client/handlers/handlePubcomp.js.map +1 -1
- package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
- package/dist/client/handlers/handlePubrec.js +5 -1
- package/dist/client/handlers/handlePubrec.js.map +1 -1
- package/dist/client/handlers/handleSuback.d.ts +1 -0
- package/dist/client/handlers/handleSuback.d.ts.map +1 -1
- package/dist/client/handlers/handleSuback.js +3 -0
- package/dist/client/handlers/handleSuback.js.map +1 -1
- package/dist/client/mod.d.ts +3 -2
- package/dist/client/mod.d.ts.map +1 -1
- package/dist/client/mod.js +1 -1
- package/dist/client/mod.js.map +1 -1
- package/dist/client/store/memoryStore.d.ts +3 -3
- package/dist/client/store/memoryStore.d.ts.map +1 -1
- package/dist/client/store/memoryStore.js +3 -3
- package/dist/client/store/memoryStore.js.map +1 -1
- package/dist/client/store/store.d.ts +3 -2
- package/dist/client/store/store.d.ts.map +1 -1
- package/dist/client/store/store.js +1 -1
- package/dist/client/store/store.js.map +1 -1
- package/dist/dev_utils/generateCert.d.ts +11 -0
- package/dist/dev_utils/generateCert.d.ts.map +1 -0
- package/dist/dev_utils/generateCert.js +76 -0
- package/dist/dev_utils/generateCert.js.map +1 -0
- package/dist/examples/authHandler.test.d.ts +2 -0
- package/dist/examples/authHandler.test.d.ts.map +1 -0
- package/dist/examples/authHandler.test.js +123 -0
- package/dist/examples/authHandler.test.js.map +1 -0
- package/dist/examples/mqtt.test.d.ts +2 -0
- package/dist/examples/mqtt.test.d.ts.map +1 -0
- package/dist/examples/mqtt.test.js +70 -0
- package/dist/examples/mqtt.test.js.map +1 -0
- package/dist/examples/mqtts.test.d.ts +2 -0
- package/dist/examples/mqtts.test.d.ts.map +1 -0
- package/dist/examples/mqtts.test.js +81 -0
- package/dist/examples/mqtts.test.js.map +1 -0
- package/dist/mqttConn/mqttConn.d.ts +24 -31
- package/dist/mqttConn/mqttConn.d.ts.map +1 -1
- package/dist/mqttConn/mqttConn.js +57 -36
- package/dist/mqttConn/mqttConn.js.map +1 -1
- package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
- package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
- package/dist/mqttPacket/BitMask.d.ts.map +1 -1
- package/dist/mqttPacket/PacketType.d.ts +4 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -1
- package/dist/mqttPacket/Properties.d.ts +4 -4
- package/dist/mqttPacket/Properties.d.ts.map +1 -1
- package/dist/mqttPacket/Properties.js.map +1 -1
- package/dist/mqttPacket/ReasonCode.d.ts +4 -5
- package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
- package/dist/mqttPacket/ReasonCode.js +1 -0
- package/dist/mqttPacket/ReasonCode.js.map +1 -1
- package/dist/mqttPacket/RetainHandling.d.ts +4 -0
- package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
- package/dist/mqttPacket/auth.d.ts +7 -8
- package/dist/mqttPacket/auth.d.ts.map +1 -1
- package/dist/mqttPacket/auth.js +31 -30
- package/dist/mqttPacket/auth.js.map +1 -1
- package/dist/mqttPacket/codec.d.ts +48 -0
- package/dist/mqttPacket/codec.d.ts.map +1 -0
- package/dist/mqttPacket/codec.js +93 -0
- package/dist/mqttPacket/codec.js.map +1 -0
- package/dist/mqttPacket/connack.d.ts +11 -10
- package/dist/mqttPacket/connack.d.ts.map +1 -1
- package/dist/mqttPacket/connack.js +43 -45
- package/dist/mqttPacket/connack.js.map +1 -1
- package/dist/mqttPacket/connect.d.ts +7 -7
- package/dist/mqttPacket/connect.d.ts.map +1 -1
- package/dist/mqttPacket/connect.js +156 -157
- package/dist/mqttPacket/connect.js.map +1 -1
- package/dist/mqttPacket/decoder.d.ts +6 -16
- package/dist/mqttPacket/decoder.d.ts.map +1 -1
- package/dist/mqttPacket/decoder.js +7 -28
- package/dist/mqttPacket/decoder.js.map +1 -1
- package/dist/mqttPacket/disconnect.d.ts +9 -8
- package/dist/mqttPacket/disconnect.d.ts.map +1 -1
- package/dist/mqttPacket/disconnect.js +41 -43
- package/dist/mqttPacket/disconnect.js.map +1 -1
- package/dist/mqttPacket/encoder.d.ts +7 -19
- package/dist/mqttPacket/encoder.d.ts.map +1 -1
- package/dist/mqttPacket/encoder.js +5 -28
- package/dist/mqttPacket/encoder.js.map +1 -1
- package/dist/mqttPacket/mod.d.ts +21 -103
- package/dist/mqttPacket/mod.d.ts.map +1 -1
- package/dist/mqttPacket/mod.js +5 -94
- package/dist/mqttPacket/mod.js.map +1 -1
- package/dist/mqttPacket/pingreq.d.ts +6 -6
- package/dist/mqttPacket/pingreq.d.ts.map +1 -1
- package/dist/mqttPacket/pingreq.js +11 -13
- package/dist/mqttPacket/pingreq.js.map +1 -1
- package/dist/mqttPacket/pingres.d.ts +6 -6
- package/dist/mqttPacket/pingres.d.ts.map +1 -1
- package/dist/mqttPacket/pingres.js +11 -13
- package/dist/mqttPacket/pingres.js.map +1 -1
- package/dist/mqttPacket/protocolLevels.d.ts +11 -6
- package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
- package/dist/mqttPacket/protocolLevels.js +5 -1
- package/dist/mqttPacket/protocolLevels.js.map +1 -1
- package/dist/mqttPacket/pubblishAcks.d.ts +9 -10
- package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
- package/dist/mqttPacket/pubblishAcks.js +43 -45
- package/dist/mqttPacket/pubblishAcks.js.map +1 -1
- package/dist/mqttPacket/publish.d.ts +8 -7
- package/dist/mqttPacket/publish.d.ts.map +1 -1
- package/dist/mqttPacket/publish.js +53 -55
- package/dist/mqttPacket/publish.js.map +1 -1
- package/dist/mqttPacket/suback.d.ts +9 -8
- package/dist/mqttPacket/suback.d.ts.map +1 -1
- package/dist/mqttPacket/suback.js +38 -40
- package/dist/mqttPacket/suback.js.map +1 -1
- package/dist/mqttPacket/subscribe.d.ts +41 -10
- package/dist/mqttPacket/subscribe.d.ts.map +1 -1
- package/dist/mqttPacket/subscribe.js +90 -89
- package/dist/mqttPacket/subscribe.js.map +1 -1
- package/dist/mqttPacket/types.d.ts +2 -29
- package/dist/mqttPacket/types.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.d.ts +9 -8
- package/dist/mqttPacket/unsuback.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.js +32 -34
- package/dist/mqttPacket/unsuback.js.map +1 -1
- package/dist/mqttPacket/unsubscribe.d.ts +26 -8
- package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
- package/dist/mqttPacket/unsubscribe.js +45 -44
- package/dist/mqttPacket/unsubscribe.js.map +1 -1
- package/dist/mqttPacket/validators.d.ts +4 -16
- package/dist/mqttPacket/validators.d.ts.map +1 -1
- package/dist/mqttPacket/validators.js +5 -26
- package/dist/mqttPacket/validators.js.map +1 -1
- package/dist/node/tcpClient.d.ts +22 -2
- package/dist/node/tcpClient.d.ts.map +1 -1
- package/dist/node/tcpClient.js +29 -10
- package/dist/node/tcpClient.js.map +1 -1
- package/dist/node/tcpServer.d.ts +18 -0
- package/dist/node/tcpServer.d.ts.map +1 -1
- package/dist/node/tcpServer.js +21 -2
- package/dist/node/tcpServer.js.map +1 -1
- package/dist/node/tlsServer.d.ts +37 -0
- package/dist/node/tlsServer.d.ts.map +1 -0
- package/dist/node/tlsServer.js +73 -0
- package/dist/node/tlsServer.js.map +1 -0
- package/dist/node/wrapNodeSocket.d.ts.map +1 -1
- package/dist/node/wrapNodeSocket.js +6 -28
- package/dist/node/wrapNodeSocket.js.map +1 -1
- package/dist/persistence/basicPersistence.d.ts +36 -0
- package/dist/persistence/basicPersistence.d.ts.map +1 -0
- package/dist/persistence/basicPersistence.js +306 -0
- package/dist/persistence/basicPersistence.js.map +1 -0
- package/dist/persistence/deps.d.ts +3 -2
- package/dist/persistence/deps.d.ts.map +1 -1
- package/dist/persistence/deps.js +2 -1
- package/dist/persistence/deps.js.map +1 -1
- package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
- package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
- package/dist/persistence/memory/memoryPersistence.js +12 -115
- package/dist/persistence/memory/memoryPersistence.js.map +1 -1
- package/dist/persistence/memory/memoryStorage.d.ts +45 -0
- package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
- package/dist/persistence/memory/memoryStorage.js +143 -0
- package/dist/persistence/memory/memoryStorage.js.map +1 -0
- package/dist/persistence/mod.d.ts +3 -3
- package/dist/persistence/mod.d.ts.map +1 -1
- package/dist/persistence/mod.js +6 -1
- package/dist/persistence/mod.js.map +1 -1
- package/dist/persistence/persistence.d.ts +45 -70
- package/dist/persistence/persistence.d.ts.map +1 -1
- package/dist/persistence/persistence.js +1 -2
- package/dist/persistence/persistence.js.map +1 -1
- package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
- package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
- package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
- package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
- package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
- package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
- package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
- package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
- package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
- package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
- package/dist/persistence/sqlite/sqliteStorage.js +194 -0
- package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
- package/dist/persistence/storage.d.ts +38 -0
- package/dist/persistence/storage.d.ts.map +1 -0
- package/dist/persistence/storage.js +5 -0
- package/dist/persistence/storage.js.map +1 -0
- package/dist/server/config.d.ts +47 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +41 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/context.d.ts +199 -25
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +432 -53
- package/dist/server/context.js.map +1 -1
- package/dist/server/deps.d.ts +5 -6
- package/dist/server/deps.d.ts.map +1 -1
- package/dist/server/deps.js +2 -2
- package/dist/server/deps.js.map +1 -1
- package/dist/server/handlers/completeConnect.d.ts +9 -0
- package/dist/server/handlers/completeConnect.d.ts.map +1 -0
- package/dist/server/handlers/completeConnect.js +74 -0
- package/dist/server/handlers/completeConnect.js.map +1 -0
- package/dist/server/handlers/handleAuth.d.ts +9 -0
- package/dist/server/handlers/handleAuth.d.ts.map +1 -0
- package/dist/server/handlers/handleAuth.js +69 -0
- package/dist/server/handlers/handleAuth.js.map +1 -0
- package/dist/server/handlers/handleConnect.d.ts +2 -4
- package/dist/server/handlers/handleConnect.d.ts.map +1 -1
- package/dist/server/handlers/handleConnect.js +140 -67
- package/dist/server/handlers/handleConnect.js.map +1 -1
- package/dist/server/handlers/handleDisconnect.d.ts +1 -1
- package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
- package/dist/server/handlers/handleDisconnect.js +3 -3
- package/dist/server/handlers/handleDisconnect.js.map +1 -1
- package/dist/server/handlers/handlePacket.d.ts.map +1 -1
- package/dist/server/handlers/handlePacket.js +19 -6
- package/dist/server/handlers/handlePacket.js.map +1 -1
- package/dist/server/handlers/handlePuback.d.ts +1 -3
- package/dist/server/handlers/handlePuback.d.ts.map +1 -1
- package/dist/server/handlers/handlePuback.js +2 -8
- package/dist/server/handlers/handlePuback.js.map +1 -1
- package/dist/server/handlers/handlePubcomp.d.ts +1 -1
- package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
- package/dist/server/handlers/handlePubcomp.js +2 -4
- package/dist/server/handlers/handlePubcomp.js.map +1 -1
- package/dist/server/handlers/handlePublish.d.ts +1 -1
- package/dist/server/handlers/handlePublish.d.ts.map +1 -1
- package/dist/server/handlers/handlePublish.js +149 -45
- package/dist/server/handlers/handlePublish.js.map +1 -1
- package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
- package/dist/server/handlers/handlePubrec.js +2 -3
- package/dist/server/handlers/handlePubrec.js.map +1 -1
- package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
- package/dist/server/handlers/handlePubrel.js +6 -2
- package/dist/server/handlers/handlePubrel.js.map +1 -1
- package/dist/server/handlers/handleSubscribe.d.ts +1 -6
- package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleSubscribe.js +99 -38
- package/dist/server/handlers/handleSubscribe.js.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.js +19 -4
- package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
- package/dist/server/mod.d.ts +3 -3
- package/dist/server/mod.d.ts.map +1 -1
- package/dist/server/mod.js +1 -1
- package/dist/server/mod.js.map +1 -1
- package/dist/server/server.d.ts +32 -9
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +84 -15
- package/dist/server/server.js.map +1 -1
- package/dist/socket/socket.d.ts +15 -9
- package/dist/socket/socket.d.ts.map +1 -1
- package/dist/socket/socket.js +66 -18
- package/dist/socket/socket.js.map +1 -1
- package/dist/timer/timer.d.ts +32 -0
- package/dist/timer/timer.d.ts.map +1 -1
- package/dist/timer/timer.js +32 -0
- package/dist/timer/timer.js.map +1 -1
- package/dist/trie/trie.d.ts +10 -5
- package/dist/trie/trie.d.ts.map +1 -1
- package/dist/trie/trie.js +61 -41
- package/dist/trie/trie.js.map +1 -1
- package/dist/utils/assert.d.ts.map +1 -1
- package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
- package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
- package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
- package/dist/utils/bufferedAsyncIterable.js.map +1 -0
- package/dist/utils/deferred.d.ts.map +1 -1
- package/dist/utils/deferred.js.map +1 -1
- package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
- package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
- package/dist/utils/getOrInsertPolyFill.js +12 -0
- package/dist/utils/getOrInsertPolyFill.js.map +1 -0
- package/dist/utils/logger.d.ts +42 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +53 -7
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/mod.d.ts +6 -1
- package/dist/utils/mod.d.ts.map +1 -1
- package/dist/utils/mod.js +5 -1
- package/dist/utils/mod.js.map +1 -1
- package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
- package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
- package/dist/utils/outboundTopicAliasManager.js +74 -0
- package/dist/utils/outboundTopicAliasManager.js.map +1 -0
- package/dist/utils/queue.d.ts.map +1 -1
- package/dist/utils/topicFilter.d.ts +32 -0
- package/dist/utils/topicFilter.d.ts.map +1 -0
- package/dist/utils/topicFilter.js +52 -0
- package/dist/utils/topicFilter.js.map +1 -0
- package/dist/utils/utils.d.ts +2 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +2 -0
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/validators.d.ts +34 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/utils/validators.js +61 -0
- package/dist/utils/validators.js.map +1 -0
- package/dist/web/webSocketStream.d.ts +29 -0
- package/dist/web/webSocketStream.d.ts.map +1 -0
- package/dist/web/webSocketStream.js +69 -0
- package/dist/web/webSocketStream.js.map +1 -0
- package/dist/web/wrapWebSocket.d.ts +12 -0
- package/dist/web/wrapWebSocket.d.ts.map +1 -0
- package/dist/web/wrapWebSocket.js +41 -0
- package/dist/web/wrapWebSocket.js.map +1 -0
- package/dist/web/wsClient.d.ts +14 -0
- package/dist/web/wsClient.d.ts.map +1 -0
- package/dist/web/wsClient.js +33 -0
- package/dist/web/wsClient.js.map +1 -0
- package/dist/web/wsClient.test.d.ts +2 -0
- package/dist/web/wsClient.test.d.ts.map +1 -0
- package/dist/web/wsClient.test.js +20 -0
- package/dist/web/wsClient.test.js.map +1 -0
- package/examples/authHandler.test.ts +164 -0
- package/examples/mqtt.test.ts +89 -0
- package/examples/mqtts.test.ts +100 -0
- package/examples/webSocket.test.ts +94 -0
- package/mqttConn/mqttConn.test.ts +9 -9
- package/mqttConn/mqttConn.ts +76 -60
- package/mqttPacket/AuthenticationResult.ts +6 -0
- package/mqttPacket/PacketType.ts +5 -0
- package/mqttPacket/Properties.ts +8 -5
- package/mqttPacket/ReasonCode.ts +8 -9
- package/mqttPacket/RetainHandling.ts +5 -0
- package/mqttPacket/auth.test.ts +1 -1
- package/mqttPacket/auth.ts +44 -51
- package/mqttPacket/codec.ts +147 -0
- package/mqttPacket/connack.ts +63 -73
- package/mqttPacket/connect.test.ts +2 -2
- package/mqttPacket/connect.ts +178 -192
- package/mqttPacket/decoder.test.ts +0 -39
- package/mqttPacket/decoder.ts +17 -46
- package/mqttPacket/disconnect.ts +60 -71
- package/mqttPacket/encoder.test.ts +2 -2
- package/mqttPacket/encoder.ts +13 -46
- package/mqttPacket/mod.ts +48 -204
- package/mqttPacket/pingreq.ts +22 -28
- package/mqttPacket/pingres.ts +22 -28
- package/mqttPacket/protocolLevels.ts +12 -7
- package/mqttPacket/pubblishAcks.ts +61 -75
- package/mqttPacket/publish.ts +70 -84
- package/mqttPacket/publishAcks.test.ts +3 -3
- package/mqttPacket/suback.ts +53 -68
- package/mqttPacket/subscribe.ts +146 -128
- package/mqttPacket/types.ts +2 -35
- package/mqttPacket/unsuback.ts +50 -61
- package/mqttPacket/unsubscribe.ts +77 -72
- package/mqttPacket/validators.ts +5 -31
- package/node/socket-node-stream.test.ts +322 -0
- package/node/socket-node-stream.ts +174 -0
- package/node/tcpClient.test.ts +70 -0
- package/node/tcpClient.ts +33 -17
- package/node/tcpServer.test.ts +24 -20
- package/node/tcpServer.ts +29 -6
- package/node/tlsServer.test.ts +94 -0
- package/node/tlsServer.ts +97 -0
- package/node/wrapNodeSocket.ts +7 -30
- package/package.json +72 -44
- package/persistence/basicPersistence.ts +495 -0
- package/persistence/deps.ts +11 -1
- package/persistence/memory/memoryPersistence.ts +12 -153
- package/persistence/memory/memoryStorage.ts +232 -0
- package/persistence/mod.ts +5 -10
- package/persistence/persistence.test.ts +24 -0
- package/persistence/persistence.testing.ts +1324 -0
- package/persistence/persistence.ts +112 -68
- package/persistence/sqlite/sqliteDatabase.ts +294 -0
- package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
- package/persistence/sqlite/sqlitePersistence.ts +36 -0
- package/persistence/sqlite/sqliteStorage.ts +324 -0
- package/persistence/storage.ts +84 -0
- package/server/config.ts +65 -0
- package/server/context.ts +660 -76
- package/server/deps.ts +24 -5
- package/server/handlers/completeConnect.ts +93 -0
- package/server/handlers/duplicate.test.ts +196 -0
- package/server/handlers/handleAuth.test.ts +225 -0
- package/server/handlers/handleAuth.ts +88 -0
- package/server/handlers/handleConnect.test.ts +589 -0
- package/server/handlers/handleConnect.ts +201 -86
- package/server/handlers/handleConnect.version.test.ts +108 -0
- package/server/handlers/handleDisconnect.test.ts +56 -0
- package/server/handlers/handleDisconnect.ts +3 -3
- package/server/handlers/handlePacket.test.ts +24 -0
- package/server/handlers/handlePacket.ts +30 -8
- package/server/handlers/handlePingreq.test.ts +29 -0
- package/server/handlers/handlePuback.test.ts +28 -0
- package/server/handlers/handlePuback.ts +5 -8
- package/server/handlers/handlePubcomp.test.ts +28 -0
- package/server/handlers/handlePubcomp.ts +5 -4
- package/server/handlers/handlePublish.test.ts +471 -0
- package/server/handlers/handlePublish.ts +188 -35
- package/server/handlers/handlePubrec.test.ts +28 -0
- package/server/handlers/handlePubrec.ts +2 -3
- package/server/handlers/handlePubrel.test.ts +74 -0
- package/server/handlers/handlePubrel.ts +12 -2
- package/server/handlers/handleSubscribe.test.ts +971 -0
- package/server/handlers/handleSubscribe.ts +157 -39
- package/server/handlers/handleUnsubscribe.test.ts +79 -0
- package/server/handlers/handleUnsubscribe.ts +28 -4
- package/server/handlers/keepalive.test.ts +132 -0
- package/server/handlers/session.persistence.test.ts +194 -0
- package/server/handlers/will.delivery.test.ts +221 -0
- package/server/mod.ts +5 -4
- package/server/preconnect.test.ts +151 -0
- package/server/server.ts +117 -19
- package/socket/socket.test.ts +91 -0
- package/socket/socket.ts +85 -34
- package/timer/timer.test.ts +4 -7
- package/timer/timer.ts +36 -0
- package/tools/benchmarks/receiver.ts +51 -0
- package/tools/benchmarks/sender.ts +48 -0
- package/tools/benchmarks/utils.ts +31 -0
- package/tools/mqtt-compat/README.md +130 -0
- package/tools/mqtt-compat/broker.ts +52 -0
- package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
- package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
- package/trie/trie.test.ts +9 -1
- package/trie/trie.ts +70 -45
- package/utils/bufferedAsyncIterable.test.ts +92 -0
- package/utils/deferred.test.ts +36 -0
- package/utils/deferred.ts +0 -1
- package/utils/getOrInsertPolyFill.ts +12 -0
- package/utils/logger.test.ts +189 -0
- package/utils/logger.ts +64 -9
- package/utils/mod.ts +15 -1
- package/utils/outboundTopicAliasManager.ts +100 -0
- package/utils/queue.test.ts +61 -0
- package/utils/topicFilter.test.ts +63 -0
- package/utils/topicFilter.ts +61 -0
- package/utils/utils.ts +3 -0
- package/utils/validators.ts +67 -0
- package/web/webSocketStream.ts +97 -0
- package/web/wrapWebSocket.ts +52 -0
- package/web/wsClient.test.ts +26 -0
- package/web/wsClient.ts +37 -0
- package/benchmarks/receiver.ts +0 -35
- package/benchmarks/sender.ts +0 -32
- package/benchmarks/utils.ts +0 -9
- package/dev_utils/dummyConn.ts +0 -110
- package/dev_utils/socketPair.ts +0 -85
- package/dist/persistence/store.d.ts +0 -14
- package/dist/persistence/store.d.ts.map +0 -1
- package/dist/persistence/store.js +0 -2
- package/dist/persistence/store.js.map +0 -1
- package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
- package/dist/utils/BufferedAsyncIterable.js.map +0 -1
- package/examples/tcpServer.test.ts +0 -148
- package/persistence/memory/memoryPersistence.test.ts +0 -156
- package/persistence/store.ts +0 -16
- package/server/test/handleConnect.test.ts +0 -122
- package/server/test/test-handlers.ts +0 -53
- /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
package/mqttPacket/ReasonCode.ts
CHANGED
|
@@ -58,7 +58,8 @@ export const ReasonCode = {
|
|
|
58
58
|
*/
|
|
59
59
|
|
|
60
60
|
export type ReasonCodeByNumberType = InvertRecord<typeof ReasonCode>;
|
|
61
|
-
|
|
61
|
+
/** Map of numeric reason codes to names. */
|
|
62
|
+
export const ReasonCodeByNumber: ReasonCodeByNumberType = Object
|
|
62
63
|
.fromEntries(
|
|
63
64
|
Object.entries(ReasonCode).map(([k, v]) => [v, k]),
|
|
64
65
|
) as ReasonCodeByNumberType;
|
|
@@ -226,14 +227,12 @@ const reasonCodesToString = {
|
|
|
226
227
|
[0xa2]: "Wildcard Subscriptions not supported",
|
|
227
228
|
} as const;
|
|
228
229
|
|
|
229
|
-
|
|
230
|
-
type
|
|
231
|
-
export type TReasonCode = typeof ReasonCode[keyof typeof ReasonCode];
|
|
232
|
-
type TReasonCodeByPacket = keyof typeof ReasonCodebyPacket;
|
|
230
|
+
export type ReasonCode = typeof ReasonCode[keyof typeof ReasonCode];
|
|
231
|
+
type ReasonCodeByPacket = keyof typeof ReasonCodebyPacket;
|
|
233
232
|
|
|
234
233
|
export function reasonCodeToString(
|
|
235
|
-
packetType:
|
|
236
|
-
code:
|
|
234
|
+
packetType: PacketType,
|
|
235
|
+
code: ReasonCode,
|
|
237
236
|
): string {
|
|
238
237
|
if (code === 0) {
|
|
239
238
|
if (packetType === PacketType.disconnect) {
|
|
@@ -247,10 +246,10 @@ export function reasonCodeToString(
|
|
|
247
246
|
}
|
|
248
247
|
|
|
249
248
|
export function isValidReasonCode(
|
|
250
|
-
packetType:
|
|
249
|
+
packetType: PacketType,
|
|
251
250
|
code: number,
|
|
252
251
|
): boolean {
|
|
253
252
|
const validReasonCodes =
|
|
254
|
-
ReasonCodebyPacket[packetType as
|
|
253
|
+
ReasonCodebyPacket[packetType as ReasonCodeByPacket] as readonly number[];
|
|
255
254
|
return validReasonCodes.includes(code);
|
|
256
255
|
}
|
package/mqttPacket/auth.test.ts
CHANGED
|
@@ -75,7 +75,7 @@ test("encode/decode minimal auth V5", () => {
|
|
|
75
75
|
|
|
76
76
|
test("encode/decode auth V5", () => {
|
|
77
77
|
const packet: AuthPacket = {
|
|
78
|
-
protocolLevel:
|
|
78
|
+
protocolLevel: MQTTLevel.v5,
|
|
79
79
|
type: PacketType.auth,
|
|
80
80
|
reasonCode: ReasonCode.continueAuthentication,
|
|
81
81
|
properties: {
|
package/mqttPacket/auth.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type { CodecOpts, TPacketType } from "./types.ts";
|
|
2
1
|
import { PacketType } from "./PacketType.ts";
|
|
3
2
|
import { Encoder, EncoderError } from "./encoder.ts";
|
|
4
3
|
import { Decoder, DecoderError, hasEmptyFlags } from "./decoder.ts";
|
|
5
|
-
import type {
|
|
4
|
+
import type { ReasonCode } from "./ReasonCode.ts";
|
|
6
5
|
import type { AuthProperties } from "./Properties.ts";
|
|
6
|
+
import type { CodecOpts } from "./types.ts";
|
|
7
|
+
import { MQTTLevel } from "./protocolLevels.ts";
|
|
7
8
|
|
|
8
9
|
// AuthPacket does not exist on protocol levels < 5
|
|
9
10
|
export type AuthPacketV5 = {
|
|
10
|
-
type:
|
|
11
|
+
type: PacketType;
|
|
11
12
|
protocolLevel: 5;
|
|
12
|
-
reasonCode:
|
|
13
|
+
reasonCode: ReasonCode;
|
|
13
14
|
properties?: AuthProperties;
|
|
14
15
|
};
|
|
15
16
|
|
|
@@ -21,51 +22,43 @@ export type AuthPacketV5 = {
|
|
|
21
22
|
*/
|
|
22
23
|
export type AuthPacket = AuthPacketV5;
|
|
23
24
|
|
|
24
|
-
export
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
.setProperties(
|
|
41
|
-
packet.properties || {},
|
|
42
|
-
packet.type,
|
|
43
|
-
codecOpts.maxOutgoingPacketSize,
|
|
44
|
-
);
|
|
45
|
-
return encoder.done(0);
|
|
46
|
-
},
|
|
25
|
+
export function encode(packet: AuthPacket, codecOpts: CodecOpts): Uint8Array {
|
|
26
|
+
// deno-coverage-ignore-start
|
|
27
|
+
if (packet.protocolLevel !== 5) {
|
|
28
|
+
throw new EncoderError("Invalid protocol level");
|
|
29
|
+
}
|
|
30
|
+
// deno-coverage-ignore-stop
|
|
31
|
+
const encoder = new Encoder(packet.type);
|
|
32
|
+
encoder
|
|
33
|
+
.seReasonCode(packet.reasonCode || 0)
|
|
34
|
+
.setProperties(
|
|
35
|
+
packet.properties || {},
|
|
36
|
+
packet.type,
|
|
37
|
+
codecOpts.maxOutgoingPacketSize,
|
|
38
|
+
);
|
|
39
|
+
return encoder.done(0);
|
|
40
|
+
}
|
|
47
41
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
42
|
+
export function decode(
|
|
43
|
+
buffer: Uint8Array,
|
|
44
|
+
flags: number,
|
|
45
|
+
codecOpts: CodecOpts,
|
|
46
|
+
packetType: PacketType,
|
|
47
|
+
): AuthPacket {
|
|
48
|
+
// Bits 3,2,1 and 0 of the Fixed Header of the AUTH packet are reserved and MUST all be set to 0.
|
|
49
|
+
// The Client or Server MUST treat any other value as malformed and close the Network Connection [MQTT-3.15.1-1].
|
|
50
|
+
hasEmptyFlags(flags);
|
|
51
|
+
if (codecOpts.protocolLevel !== 5) {
|
|
52
|
+
throw new DecoderError("Invalid protocol level");
|
|
53
|
+
}
|
|
54
|
+
const decoder = new Decoder(packetType, buffer);
|
|
55
|
+
const reasonCode = decoder.geReasonCode();
|
|
56
|
+
const properties = decoder.getProperties(PacketType.auth);
|
|
57
|
+
decoder.done();
|
|
58
|
+
return {
|
|
59
|
+
type: PacketType.auth,
|
|
60
|
+
protocolLevel: MQTTLevel.v5,
|
|
61
|
+
reasonCode,
|
|
62
|
+
properties,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type { CodecOpts } from "./types.ts";
|
|
2
|
+
import type { PacketType } from "./PacketType.ts";
|
|
3
|
+
import { DecoderError } from "./decoder.ts";
|
|
4
|
+
import { decodeLength } from "./length.ts";
|
|
5
|
+
|
|
6
|
+
// import encoder/decoder for each packet type
|
|
7
|
+
import * as connect from "./connect.ts";
|
|
8
|
+
import * as connack from "./connack.ts";
|
|
9
|
+
import * as publish from "./publish.ts";
|
|
10
|
+
import * as anyAck from "./pubblishAcks.ts";
|
|
11
|
+
import * as subscribe from "./subscribe.ts";
|
|
12
|
+
import * as suback from "./suback.ts";
|
|
13
|
+
import * as unsubscribe from "./unsubscribe.ts";
|
|
14
|
+
import * as unsuback from "./unsuback.ts";
|
|
15
|
+
import * as pingreq from "./pingreq.ts";
|
|
16
|
+
import * as pingres from "./pingres.ts";
|
|
17
|
+
import * as disconnect from "./disconnect.ts";
|
|
18
|
+
import * as auth from "./auth.ts";
|
|
19
|
+
|
|
20
|
+
// import the Typescript types of the packet types
|
|
21
|
+
import type { ConnectPacket } from "./connect.ts";
|
|
22
|
+
import type { ConnackPacket } from "./connack.ts";
|
|
23
|
+
import type { PublishPacket } from "./publish.ts";
|
|
24
|
+
import type {
|
|
25
|
+
PubackPacket,
|
|
26
|
+
PubcompPacket,
|
|
27
|
+
PubrecPacket,
|
|
28
|
+
PubrelPacket,
|
|
29
|
+
} from "./pubblishAcks.ts";
|
|
30
|
+
import type { SubscribePacket } from "./subscribe.ts";
|
|
31
|
+
import type { SubackPacket } from "./suback.ts";
|
|
32
|
+
import type { UnsubscribePacket } from "./unsubscribe.ts";
|
|
33
|
+
import type { UnsubackPacket } from "./unsuback.ts";
|
|
34
|
+
import type { PingreqPacket } from "./pingreq.ts";
|
|
35
|
+
import type { PingresPacket } from "./pingres.ts";
|
|
36
|
+
import type { DisconnectPacket } from "./disconnect.ts";
|
|
37
|
+
import type { AuthPacket } from "./auth.ts";
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* this can be any possible MQTT packet
|
|
41
|
+
*/
|
|
42
|
+
export type AnyPacket =
|
|
43
|
+
| ConnectPacket
|
|
44
|
+
| ConnackPacket
|
|
45
|
+
| PublishPacket
|
|
46
|
+
| PubackPacket
|
|
47
|
+
| PubrecPacket
|
|
48
|
+
| PubrelPacket
|
|
49
|
+
| PubcompPacket
|
|
50
|
+
| SubscribePacket
|
|
51
|
+
| SubackPacket
|
|
52
|
+
| UnsubscribePacket
|
|
53
|
+
| UnsubackPacket
|
|
54
|
+
| PingreqPacket
|
|
55
|
+
| PingresPacket
|
|
56
|
+
| DisconnectPacket
|
|
57
|
+
| AuthPacket;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Array mapping MQTT packet types to their corresponding encode/decode handlers
|
|
61
|
+
* Index corresponds to packet type number.
|
|
62
|
+
*/
|
|
63
|
+
const packetsByType = [
|
|
64
|
+
null,
|
|
65
|
+
connect, // 1
|
|
66
|
+
connack, // 2
|
|
67
|
+
publish, // 3
|
|
68
|
+
anyAck, // 4 puback
|
|
69
|
+
anyAck, // 5 pubrec
|
|
70
|
+
anyAck, // 6 pubrel
|
|
71
|
+
anyAck, // 7 pubcomp
|
|
72
|
+
subscribe, // 8
|
|
73
|
+
suback, // 9
|
|
74
|
+
unsubscribe, // 10
|
|
75
|
+
unsuback, // 11
|
|
76
|
+
pingreq, // 12
|
|
77
|
+
pingres, // 13
|
|
78
|
+
disconnect, // 14
|
|
79
|
+
auth, // 15
|
|
80
|
+
] as const;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @function encode
|
|
84
|
+
* @description Encodes an MQTT packet object into a binary Uint8Array format
|
|
85
|
+
* @param {AnyPacket} packet - The MQTT packet object to encode
|
|
86
|
+
* @param {CodecOpts} codecOpts - options to use during encoding
|
|
87
|
+
* @returns {Uint8Array} The encoded packet as a binary buffer
|
|
88
|
+
* @throws {Error} If packet encoding fails
|
|
89
|
+
*/
|
|
90
|
+
export function encode(packet: AnyPacket, codecOpts: CodecOpts): Uint8Array {
|
|
91
|
+
const packetType: number = packet.type;
|
|
92
|
+
// deno-lint-ignore no-explicit-any
|
|
93
|
+
const pkt: any = packet;
|
|
94
|
+
const encoded = packetsByType[packetType]?.encode(pkt, codecOpts);
|
|
95
|
+
if (!encoded) {
|
|
96
|
+
throw Error("Packet encoding failed");
|
|
97
|
+
}
|
|
98
|
+
return encoded;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @function decodePayload
|
|
103
|
+
* @description Decodes a packet payload from binary format into an MQTT packet object
|
|
104
|
+
* @param {number} firstByte - The first byte of the MQTT packet containing type and flags
|
|
105
|
+
* @param {Uint8Array} buffer - The binary buffer containing the packet payload
|
|
106
|
+
* @param {CodecOpts} codecOpts - options to use during encoding
|
|
107
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
108
|
+
* @throws {DecoderError} If packet decoding fails
|
|
109
|
+
*/
|
|
110
|
+
export function decodePayload(
|
|
111
|
+
firstByte: number,
|
|
112
|
+
buffer: Uint8Array,
|
|
113
|
+
codecOpts: CodecOpts,
|
|
114
|
+
): AnyPacket {
|
|
115
|
+
const packetType = firstByte >> 4;
|
|
116
|
+
const flags = firstByte & 0x0f;
|
|
117
|
+
const packet = packetsByType[packetType]?.decode(
|
|
118
|
+
buffer,
|
|
119
|
+
flags,
|
|
120
|
+
codecOpts,
|
|
121
|
+
packetType as PacketType,
|
|
122
|
+
);
|
|
123
|
+
if (packet !== undefined) {
|
|
124
|
+
return packet;
|
|
125
|
+
}
|
|
126
|
+
throw new DecoderError("packet decoding failed");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @function decode
|
|
131
|
+
* @description Decodes a complete MQTT packet from binary format into a packet object,
|
|
132
|
+
* its basically a wrapper around decodePayload
|
|
133
|
+
*
|
|
134
|
+
* @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
|
|
135
|
+
* @param {CodecOpts} codecOpts - the options for the decoder
|
|
136
|
+
* @returns {AnyPacket} The decoded MQTT packet object
|
|
137
|
+
* @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
|
|
138
|
+
*/
|
|
139
|
+
export function decode(buffer: Uint8Array, codecOpts: CodecOpts): AnyPacket {
|
|
140
|
+
if (buffer.length < 2) {
|
|
141
|
+
throw new DecoderError("Packet decoding failed");
|
|
142
|
+
}
|
|
143
|
+
const { length, numLengthBytes } = decodeLength(buffer, 1);
|
|
144
|
+
const start = numLengthBytes + 1;
|
|
145
|
+
const end = start + length;
|
|
146
|
+
return decodePayload(buffer[0] || 0, buffer.subarray(start, end), codecOpts);
|
|
147
|
+
}
|
package/mqttPacket/connack.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
ProtocolLevelNoV5,
|
|
4
|
-
TAuthenticationResult,
|
|
5
|
-
TPacketType,
|
|
6
|
-
} from "./types.ts";
|
|
1
|
+
import type { CodecOpts } from "./types.ts";
|
|
2
|
+
import type { ProtocolLevelNoV5 } from "./protocolLevels.ts";
|
|
7
3
|
import { PacketType } from "./PacketType.ts";
|
|
8
4
|
import { BitMask } from "./BitMask.ts";
|
|
9
5
|
import { Encoder } from "./encoder.ts";
|
|
@@ -14,21 +10,22 @@ import {
|
|
|
14
10
|
hasEmptyFlags,
|
|
15
11
|
} from "./decoder.ts";
|
|
16
12
|
import { AuthenticationResultByNumber } from "./AuthenticationResult.ts";
|
|
17
|
-
import type {
|
|
13
|
+
import type { AuthenticationResult } from "./AuthenticationResult.ts";
|
|
14
|
+
import type { ReasonCode } from "./ReasonCode.ts";
|
|
18
15
|
import type { ConnackProperties } from "./Properties.ts";
|
|
19
16
|
|
|
20
17
|
export type ConnackPacketV4 = {
|
|
21
|
-
type:
|
|
18
|
+
type: PacketType;
|
|
22
19
|
protocolLevel: ProtocolLevelNoV5;
|
|
23
20
|
sessionPresent: boolean;
|
|
24
|
-
returnCode:
|
|
21
|
+
returnCode: AuthenticationResult;
|
|
25
22
|
};
|
|
26
23
|
|
|
27
24
|
export type ConnackPacketV5 = {
|
|
28
|
-
type:
|
|
25
|
+
type: PacketType;
|
|
29
26
|
protocolLevel: 5;
|
|
30
27
|
sessionPresent: boolean;
|
|
31
|
-
reasonCode:
|
|
28
|
+
reasonCode: ReasonCode;
|
|
32
29
|
properties?: ConnackProperties;
|
|
33
30
|
};
|
|
34
31
|
|
|
@@ -38,71 +35,64 @@ export type ConnackPacketV5 = {
|
|
|
38
35
|
*/
|
|
39
36
|
export type ConnackPacket = ConnackPacketV4 | ConnackPacketV5;
|
|
40
37
|
|
|
41
|
-
export
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
packet.properties || {},
|
|
65
|
-
packet.type,
|
|
66
|
-
codecOpts.maxOutgoingPacketSize,
|
|
67
|
-
);
|
|
68
|
-
return encoder.done(0);
|
|
69
|
-
},
|
|
38
|
+
export function encode(
|
|
39
|
+
packet: ConnackPacket,
|
|
40
|
+
codecOpts: CodecOpts,
|
|
41
|
+
): Uint8Array {
|
|
42
|
+
if (packet.protocolLevel !== 5) {
|
|
43
|
+
return new Uint8Array([
|
|
44
|
+
packet.type << 4,
|
|
45
|
+
2,
|
|
46
|
+
packet.sessionPresent ? 1 : 0,
|
|
47
|
+
packet.returnCode || 0,
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
const encoder = new Encoder(packet.type);
|
|
51
|
+
encoder
|
|
52
|
+
.setByte(packet.sessionPresent ? 1 : 0)
|
|
53
|
+
.seReasonCode(packet.reasonCode || 0)
|
|
54
|
+
.setProperties(
|
|
55
|
+
packet.properties || {},
|
|
56
|
+
packet.type,
|
|
57
|
+
codecOpts.maxOutgoingPacketSize,
|
|
58
|
+
);
|
|
59
|
+
return encoder.done(0);
|
|
60
|
+
}
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
decoder.done();
|
|
87
|
-
if (!AuthenticationResultByNumber[returnCode]) {
|
|
88
|
-
throw new DecoderError("Invalid return code");
|
|
89
|
-
}
|
|
90
|
-
return {
|
|
91
|
-
type: PacketType.connack,
|
|
92
|
-
protocolLevel: codecOpts.protocolLevel,
|
|
93
|
-
sessionPresent,
|
|
94
|
-
returnCode,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
const reasonCode = decoder.getReasonCode();
|
|
98
|
-
const properties = decoder.getProperties(PacketType.connack);
|
|
62
|
+
export function decode(
|
|
63
|
+
buffer: Uint8Array,
|
|
64
|
+
flags: number,
|
|
65
|
+
codecOpts: CodecOpts,
|
|
66
|
+
packetType: PacketType,
|
|
67
|
+
): ConnackPacket {
|
|
68
|
+
const decoder = new Decoder(packetType, buffer);
|
|
69
|
+
hasEmptyFlags(flags);
|
|
70
|
+
const ackflags = decoder.getByte();
|
|
71
|
+
if (ackflags > 1) {
|
|
72
|
+
throw new DecoderError("Invalid Connect Acknowledge flags");
|
|
73
|
+
}
|
|
74
|
+
const sessionPresent = booleanFlag(ackflags, BitMask.bit0);
|
|
75
|
+
if (codecOpts.protocolLevel !== 5) {
|
|
76
|
+
const returnCode = decoder.getByte() as AuthenticationResult;
|
|
99
77
|
decoder.done();
|
|
78
|
+
if (!AuthenticationResultByNumber[returnCode]) {
|
|
79
|
+
throw new DecoderError("Invalid return code");
|
|
80
|
+
}
|
|
100
81
|
return {
|
|
101
82
|
type: PacketType.connack,
|
|
102
|
-
protocolLevel:
|
|
83
|
+
protocolLevel: codecOpts.protocolLevel,
|
|
103
84
|
sessionPresent,
|
|
104
|
-
|
|
105
|
-
properties,
|
|
85
|
+
returnCode,
|
|
106
86
|
};
|
|
107
|
-
}
|
|
108
|
-
|
|
87
|
+
}
|
|
88
|
+
const reasonCode = decoder.geReasonCode();
|
|
89
|
+
const properties = decoder.getProperties(PacketType.connack);
|
|
90
|
+
decoder.done();
|
|
91
|
+
return {
|
|
92
|
+
type: PacketType.connack,
|
|
93
|
+
protocolLevel: 5,
|
|
94
|
+
sessionPresent,
|
|
95
|
+
reasonCode,
|
|
96
|
+
properties,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
@@ -289,7 +289,7 @@ test("decode Connect with username and password", () => {
|
|
|
289
289
|
);
|
|
290
290
|
});
|
|
291
291
|
|
|
292
|
-
const decodedConnectWithWill =
|
|
292
|
+
const decodedConnectWithWill = structuredClone(decodedConnect);
|
|
293
293
|
decodedConnectWithWill.will = {
|
|
294
294
|
topic: "mywill",
|
|
295
295
|
payload: Uint8Array.from([
|
|
@@ -472,7 +472,7 @@ test("encode MQTTv4, clean=false, no clientId", () => {
|
|
|
472
472
|
protocolLevel: MQTTLevel.v4,
|
|
473
473
|
clean: false,
|
|
474
474
|
}, codecOptsUnknown),
|
|
475
|
-
/Client id required for clean session/,
|
|
475
|
+
/Client id required for non-clean session/,
|
|
476
476
|
);
|
|
477
477
|
});
|
|
478
478
|
|