@seriousme/opifex 1.11.2 → 2.0.3

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.
Files changed (538) hide show
  1. package/LICENSE.txt +1 -1
  2. package/README.md +102 -43
  3. package/bin/conformanceServer.ts +45 -13
  4. package/bin/demoServer.ts +38 -13
  5. package/bin/mqtt.ts +52 -30
  6. package/client/ConnectionState.ts +2 -0
  7. package/client/client.ts +57 -47
  8. package/client/context.ts +75 -21
  9. package/client/deps.ts +5 -0
  10. package/client/handlers/handleAuth.test.ts +193 -0
  11. package/client/handlers/handleAuth.ts +89 -0
  12. package/client/handlers/handleConnack.test.ts +173 -0
  13. package/client/handlers/handleConnack.ts +16 -6
  14. package/client/handlers/handleDisconnect.test.ts +22 -0
  15. package/client/handlers/handleDisconnect.ts +17 -0
  16. package/client/handlers/handlePacket.test.ts +242 -0
  17. package/client/handlers/handlePacket.ts +19 -5
  18. package/client/handlers/handlePuback.test.ts +99 -0
  19. package/client/handlers/handlePuback.ts +6 -0
  20. package/client/handlers/handlePubcomp.test.ts +112 -0
  21. package/client/handlers/handlePubcomp.ts +5 -0
  22. package/client/handlers/handlePublish.test.ts +188 -0
  23. package/client/handlers/handlePubrec.test.ts +119 -0
  24. package/client/handlers/handlePubrec.ts +5 -1
  25. package/client/handlers/handlePubrel.test.ts +136 -0
  26. package/client/handlers/handleSuback.test.ts +122 -0
  27. package/client/handlers/handleSuback.ts +3 -0
  28. package/client/handlers/handleUnsuback.test.ts +101 -0
  29. package/client/mod.ts +2 -2
  30. package/client/store/memoryStore.ts +2 -2
  31. package/client/store/store.ts +3 -1
  32. package/deno/README.md +1 -2
  33. package/deno/tcpClient.test.ts +75 -0
  34. package/deno/tcpClient.ts +16 -11
  35. package/deno/tcpServer.test.ts +22 -21
  36. package/deno/tcpServer.ts +5 -0
  37. package/deno/tlsServer.test.ts +97 -0
  38. package/deno/tlsServer.ts +42 -0
  39. package/deno/wsServer.test.ts +93 -0
  40. package/deno/wsServer.ts +73 -0
  41. package/dev_utils/generateCert.ts +95 -0
  42. package/dev_utils/mockConn.ts +36 -0
  43. package/dev_utils/mockServer.ts +28 -0
  44. package/dev_utils/mod.ts +30 -2
  45. package/dev_utils/packetHelpers.ts +404 -0
  46. package/dev_utils/test-handlers.ts +98 -0
  47. package/dev_utils/timers.ts +14 -0
  48. package/dev_utils/webStreamPair.test.ts +171 -0
  49. package/dev_utils/webStreamPair.ts +143 -0
  50. package/dist/bin/conformanceServer.js +17 -12
  51. package/dist/bin/conformanceServer.js.map +1 -1
  52. package/dist/bin/demoServer.js +16 -12
  53. package/dist/bin/demoServer.js.map +1 -1
  54. package/dist/bin/mqtt.js +19 -16
  55. package/dist/bin/mqtt.js.map +1 -1
  56. package/dist/client/ConnectionState.d.ts +2 -0
  57. package/dist/client/ConnectionState.d.ts.map +1 -1
  58. package/dist/client/ConnectionState.js +2 -0
  59. package/dist/client/ConnectionState.js.map +1 -1
  60. package/dist/client/client.d.ts +19 -22
  61. package/dist/client/client.d.ts.map +1 -1
  62. package/dist/client/client.js +34 -20
  63. package/dist/client/client.js.map +1 -1
  64. package/dist/client/context.d.ts +11 -3
  65. package/dist/client/context.d.ts.map +1 -1
  66. package/dist/client/context.js +44 -12
  67. package/dist/client/context.js.map +1 -1
  68. package/dist/client/deps.d.ts +3 -2
  69. package/dist/client/deps.d.ts.map +1 -1
  70. package/dist/client/deps.js +1 -1
  71. package/dist/client/deps.js.map +1 -1
  72. package/dist/client/handlers/handleAuth.d.ts +9 -0
  73. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  74. package/dist/client/handlers/handleAuth.js +66 -0
  75. package/dist/client/handlers/handleAuth.js.map +1 -0
  76. package/dist/client/handlers/handleConnack.d.ts +2 -2
  77. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  78. package/dist/client/handlers/handleConnack.js +16 -6
  79. package/dist/client/handlers/handleConnack.js.map +1 -1
  80. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  81. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  82. package/dist/client/handlers/handleDisconnect.js +15 -0
  83. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  84. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  85. package/dist/client/handlers/handlePacket.js +14 -3
  86. package/dist/client/handlers/handlePacket.js.map +1 -1
  87. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  88. package/dist/client/handlers/handlePuback.js +5 -0
  89. package/dist/client/handlers/handlePuback.js.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  91. package/dist/client/handlers/handlePubcomp.js +5 -0
  92. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  93. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  94. package/dist/client/handlers/handlePubrec.js +5 -1
  95. package/dist/client/handlers/handlePubrec.js.map +1 -1
  96. package/dist/client/handlers/handleSuback.d.ts +1 -0
  97. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  98. package/dist/client/handlers/handleSuback.js +3 -0
  99. package/dist/client/handlers/handleSuback.js.map +1 -1
  100. package/dist/client/mod.d.ts +2 -2
  101. package/dist/client/mod.d.ts.map +1 -1
  102. package/dist/client/mod.js +1 -1
  103. package/dist/client/mod.js.map +1 -1
  104. package/dist/client/store/memoryStore.d.ts.map +1 -1
  105. package/dist/client/store/memoryStore.js +2 -2
  106. package/dist/client/store/memoryStore.js.map +1 -1
  107. package/dist/client/store/store.d.ts +2 -1
  108. package/dist/client/store/store.d.ts.map +1 -1
  109. package/dist/client/store/store.js +1 -1
  110. package/dist/client/store/store.js.map +1 -1
  111. package/dist/dev_utils/generateCert.d.ts +11 -0
  112. package/dist/dev_utils/generateCert.d.ts.map +1 -0
  113. package/dist/dev_utils/generateCert.js +76 -0
  114. package/dist/dev_utils/generateCert.js.map +1 -0
  115. package/dist/examples/authHandler.test.d.ts +2 -0
  116. package/dist/examples/authHandler.test.d.ts.map +1 -0
  117. package/dist/examples/authHandler.test.js +123 -0
  118. package/dist/examples/authHandler.test.js.map +1 -0
  119. package/dist/examples/mqtt.test.d.ts +2 -0
  120. package/dist/examples/mqtt.test.d.ts.map +1 -0
  121. package/dist/examples/mqtt.test.js +70 -0
  122. package/dist/examples/mqtt.test.js.map +1 -0
  123. package/dist/examples/mqtts.test.d.ts +2 -0
  124. package/dist/examples/mqtts.test.d.ts.map +1 -0
  125. package/dist/examples/mqtts.test.js +81 -0
  126. package/dist/examples/mqtts.test.js.map +1 -0
  127. package/dist/mqttConn/mqttConn.d.ts +25 -16
  128. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  129. package/dist/mqttConn/mqttConn.js +69 -40
  130. package/dist/mqttConn/mqttConn.js.map +1 -1
  131. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  132. package/dist/mqttPacket/BitMask.d.ts +12 -11
  133. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  134. package/dist/mqttPacket/BitMask.js +10 -18
  135. package/dist/mqttPacket/BitMask.js.map +1 -1
  136. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  137. package/dist/mqttPacket/Properties.d.ts +2 -2
  138. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  139. package/dist/mqttPacket/Properties.js.map +1 -1
  140. package/dist/mqttPacket/ReasonCode.d.ts +1 -0
  141. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  142. package/dist/mqttPacket/ReasonCode.js +1 -0
  143. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  144. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  145. package/dist/mqttPacket/auth.d.ts +3 -5
  146. package/dist/mqttPacket/auth.d.ts.map +1 -1
  147. package/dist/mqttPacket/auth.js +31 -30
  148. package/dist/mqttPacket/auth.js.map +1 -1
  149. package/dist/mqttPacket/codec.d.ts +48 -0
  150. package/dist/mqttPacket/codec.d.ts.map +1 -0
  151. package/dist/mqttPacket/codec.js +93 -0
  152. package/dist/mqttPacket/codec.js.map +1 -0
  153. package/dist/mqttPacket/connack.d.ts +4 -5
  154. package/dist/mqttPacket/connack.d.ts.map +1 -1
  155. package/dist/mqttPacket/connack.js +43 -45
  156. package/dist/mqttPacket/connack.js.map +1 -1
  157. package/dist/mqttPacket/connect.d.ts +26 -27
  158. package/dist/mqttPacket/connect.d.ts.map +1 -1
  159. package/dist/mqttPacket/connect.js +156 -157
  160. package/dist/mqttPacket/connect.js.map +1 -1
  161. package/dist/mqttPacket/decoder.d.ts +1 -13
  162. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  163. package/dist/mqttPacket/decoder.js +7 -28
  164. package/dist/mqttPacket/decoder.js.map +1 -1
  165. package/dist/mqttPacket/disconnect.d.ts +4 -5
  166. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  167. package/dist/mqttPacket/disconnect.js +41 -43
  168. package/dist/mqttPacket/disconnect.js.map +1 -1
  169. package/dist/mqttPacket/encoder.d.ts +1 -15
  170. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  171. package/dist/mqttPacket/encoder.js +4 -27
  172. package/dist/mqttPacket/encoder.js.map +1 -1
  173. package/dist/mqttPacket/length.js +1 -1
  174. package/dist/mqttPacket/length.js.map +1 -1
  175. package/dist/mqttPacket/mod.d.ts +21 -103
  176. package/dist/mqttPacket/mod.d.ts.map +1 -1
  177. package/dist/mqttPacket/mod.js +5 -94
  178. package/dist/mqttPacket/mod.js.map +1 -1
  179. package/dist/mqttPacket/pingreq.d.ts +4 -5
  180. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  181. package/dist/mqttPacket/pingreq.js +11 -13
  182. package/dist/mqttPacket/pingreq.js.map +1 -1
  183. package/dist/mqttPacket/pingres.d.ts +4 -5
  184. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  185. package/dist/mqttPacket/pingres.js +11 -13
  186. package/dist/mqttPacket/pingres.js.map +1 -1
  187. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  188. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  189. package/dist/mqttPacket/protocolLevels.js +5 -1
  190. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  191. package/dist/mqttPacket/pubblishAcks.d.ts +9 -10
  192. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  193. package/dist/mqttPacket/pubblishAcks.js +43 -45
  194. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  195. package/dist/mqttPacket/publish.d.ts +14 -14
  196. package/dist/mqttPacket/publish.d.ts.map +1 -1
  197. package/dist/mqttPacket/publish.js +53 -55
  198. package/dist/mqttPacket/publish.js.map +1 -1
  199. package/dist/mqttPacket/suback.d.ts +4 -5
  200. package/dist/mqttPacket/suback.d.ts.map +1 -1
  201. package/dist/mqttPacket/suback.js +38 -40
  202. package/dist/mqttPacket/suback.js.map +1 -1
  203. package/dist/mqttPacket/subscribe.d.ts +36 -7
  204. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  205. package/dist/mqttPacket/subscribe.js +90 -89
  206. package/dist/mqttPacket/subscribe.js.map +1 -1
  207. package/dist/mqttPacket/types.d.ts +1 -8
  208. package/dist/mqttPacket/types.d.ts.map +1 -1
  209. package/dist/mqttPacket/unsuback.d.ts +4 -5
  210. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  211. package/dist/mqttPacket/unsuback.js +32 -34
  212. package/dist/mqttPacket/unsuback.js.map +1 -1
  213. package/dist/mqttPacket/unsubscribe.d.ts +23 -6
  214. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  215. package/dist/mqttPacket/unsubscribe.js +45 -44
  216. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  217. package/dist/mqttPacket/validators.d.ts +4 -16
  218. package/dist/mqttPacket/validators.d.ts.map +1 -1
  219. package/dist/mqttPacket/validators.js +5 -26
  220. package/dist/mqttPacket/validators.js.map +1 -1
  221. package/dist/node/tcpClient.d.ts +1 -1
  222. package/dist/node/tcpClient.d.ts.map +1 -1
  223. package/dist/node/tcpClient.js +12 -7
  224. package/dist/node/tcpClient.js.map +1 -1
  225. package/dist/node/tcpServer.d.ts.map +1 -1
  226. package/dist/node/tcpServer.js +4 -0
  227. package/dist/node/tcpServer.js.map +1 -1
  228. package/dist/node/tlsServer.d.ts +19 -0
  229. package/dist/node/tlsServer.d.ts.map +1 -0
  230. package/dist/node/tlsServer.js +58 -0
  231. package/dist/node/tlsServer.js.map +1 -0
  232. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  233. package/dist/node/wrapNodeSocket.js +6 -28
  234. package/dist/node/wrapNodeSocket.js.map +1 -1
  235. package/dist/persistence/basicPersistence.d.ts +36 -0
  236. package/dist/persistence/basicPersistence.d.ts.map +1 -0
  237. package/dist/persistence/basicPersistence.js +306 -0
  238. package/dist/persistence/basicPersistence.js.map +1 -0
  239. package/dist/persistence/deps.d.ts +3 -2
  240. package/dist/persistence/deps.d.ts.map +1 -1
  241. package/dist/persistence/deps.js +2 -1
  242. package/dist/persistence/deps.js.map +1 -1
  243. package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
  244. package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
  245. package/dist/persistence/memory/memoryPersistence.js +12 -115
  246. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  247. package/dist/persistence/memory/memoryStorage.d.ts +45 -0
  248. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
  249. package/dist/persistence/memory/memoryStorage.js +143 -0
  250. package/dist/persistence/memory/memoryStorage.js.map +1 -0
  251. package/dist/persistence/mod.d.ts +3 -3
  252. package/dist/persistence/mod.d.ts.map +1 -1
  253. package/dist/persistence/mod.js +6 -1
  254. package/dist/persistence/mod.js.map +1 -1
  255. package/dist/persistence/persistence.d.ts +44 -69
  256. package/dist/persistence/persistence.d.ts.map +1 -1
  257. package/dist/persistence/persistence.js +1 -2
  258. package/dist/persistence/persistence.js.map +1 -1
  259. package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
  260. package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
  261. package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
  262. package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
  263. package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
  264. package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
  265. package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
  266. package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
  267. package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
  268. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
  269. package/dist/persistence/sqlite/sqliteStorage.js +194 -0
  270. package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
  271. package/dist/persistence/storage.d.ts +38 -0
  272. package/dist/persistence/storage.d.ts.map +1 -0
  273. package/dist/persistence/storage.js +5 -0
  274. package/dist/persistence/storage.js.map +1 -0
  275. package/dist/server/config.d.ts +47 -0
  276. package/dist/server/config.d.ts.map +1 -0
  277. package/dist/server/config.js +41 -0
  278. package/dist/server/config.js.map +1 -0
  279. package/dist/server/context.d.ts +198 -24
  280. package/dist/server/context.d.ts.map +1 -1
  281. package/dist/server/context.js +432 -53
  282. package/dist/server/context.js.map +1 -1
  283. package/dist/server/deps.d.ts +5 -6
  284. package/dist/server/deps.d.ts.map +1 -1
  285. package/dist/server/deps.js +2 -2
  286. package/dist/server/deps.js.map +1 -1
  287. package/dist/server/handlers/completeConnect.d.ts +8 -0
  288. package/dist/server/handlers/completeConnect.d.ts.map +1 -0
  289. package/dist/server/handlers/completeConnect.js +74 -0
  290. package/dist/server/handlers/completeConnect.js.map +1 -0
  291. package/dist/server/handlers/handleAuth.d.ts +9 -0
  292. package/dist/server/handlers/handleAuth.d.ts.map +1 -0
  293. package/dist/server/handlers/handleAuth.js +69 -0
  294. package/dist/server/handlers/handleAuth.js.map +1 -0
  295. package/dist/server/handlers/handleConnect.d.ts +2 -4
  296. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  297. package/dist/server/handlers/handleConnect.js +140 -67
  298. package/dist/server/handlers/handleConnect.js.map +1 -1
  299. package/dist/server/handlers/handleDisconnect.d.ts +1 -1
  300. package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
  301. package/dist/server/handlers/handleDisconnect.js +3 -3
  302. package/dist/server/handlers/handleDisconnect.js.map +1 -1
  303. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  304. package/dist/server/handlers/handlePacket.js +19 -6
  305. package/dist/server/handlers/handlePacket.js.map +1 -1
  306. package/dist/server/handlers/handlePuback.d.ts +1 -3
  307. package/dist/server/handlers/handlePuback.d.ts.map +1 -1
  308. package/dist/server/handlers/handlePuback.js +2 -8
  309. package/dist/server/handlers/handlePuback.js.map +1 -1
  310. package/dist/server/handlers/handlePubcomp.d.ts +1 -1
  311. package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
  312. package/dist/server/handlers/handlePubcomp.js +2 -4
  313. package/dist/server/handlers/handlePubcomp.js.map +1 -1
  314. package/dist/server/handlers/handlePublish.d.ts +1 -1
  315. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  316. package/dist/server/handlers/handlePublish.js +149 -45
  317. package/dist/server/handlers/handlePublish.js.map +1 -1
  318. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  319. package/dist/server/handlers/handlePubrec.js +2 -3
  320. package/dist/server/handlers/handlePubrec.js.map +1 -1
  321. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  322. package/dist/server/handlers/handlePubrel.js +6 -2
  323. package/dist/server/handlers/handlePubrel.js.map +1 -1
  324. package/dist/server/handlers/handleSubscribe.d.ts +1 -6
  325. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  326. package/dist/server/handlers/handleSubscribe.js +99 -38
  327. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  328. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  329. package/dist/server/handlers/handleUnsubscribe.js +19 -4
  330. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  331. package/dist/server/mod.d.ts +3 -3
  332. package/dist/server/mod.d.ts.map +1 -1
  333. package/dist/server/mod.js +1 -1
  334. package/dist/server/mod.js.map +1 -1
  335. package/dist/server/server.d.ts +29 -6
  336. package/dist/server/server.d.ts.map +1 -1
  337. package/dist/server/server.js +84 -15
  338. package/dist/server/server.js.map +1 -1
  339. package/dist/socket/socket.d.ts +11 -9
  340. package/dist/socket/socket.d.ts.map +1 -1
  341. package/dist/socket/socket.js +67 -15
  342. package/dist/socket/socket.js.map +1 -1
  343. package/dist/timer/timer.d.ts +32 -0
  344. package/dist/timer/timer.d.ts.map +1 -1
  345. package/dist/timer/timer.js +32 -0
  346. package/dist/timer/timer.js.map +1 -1
  347. package/dist/trie/trie.d.ts +10 -5
  348. package/dist/trie/trie.d.ts.map +1 -1
  349. package/dist/trie/trie.js +47 -17
  350. package/dist/trie/trie.js.map +1 -1
  351. package/dist/utils/assert.d.ts.map +1 -1
  352. package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
  353. package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
  354. package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
  355. package/dist/utils/bufferedAsyncIterable.js.map +1 -0
  356. package/dist/utils/deferred.d.ts.map +1 -1
  357. package/dist/utils/deferred.js.map +1 -1
  358. package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
  359. package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
  360. package/dist/utils/getOrInsertPolyFill.js +12 -0
  361. package/dist/utils/getOrInsertPolyFill.js.map +1 -0
  362. package/dist/utils/logger.d.ts +40 -3
  363. package/dist/utils/logger.d.ts.map +1 -1
  364. package/dist/utils/logger.js +53 -7
  365. package/dist/utils/logger.js.map +1 -1
  366. package/dist/utils/mod.d.ts +6 -1
  367. package/dist/utils/mod.d.ts.map +1 -1
  368. package/dist/utils/mod.js +5 -1
  369. package/dist/utils/mod.js.map +1 -1
  370. package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
  371. package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
  372. package/dist/utils/outboundTopicAliasManager.js +74 -0
  373. package/dist/utils/outboundTopicAliasManager.js.map +1 -0
  374. package/dist/utils/queue.d.ts.map +1 -1
  375. package/dist/utils/topicFilter.d.ts +32 -0
  376. package/dist/utils/topicFilter.d.ts.map +1 -0
  377. package/dist/utils/topicFilter.js +52 -0
  378. package/dist/utils/topicFilter.js.map +1 -0
  379. package/dist/utils/utils.d.ts +2 -0
  380. package/dist/utils/utils.d.ts.map +1 -1
  381. package/dist/utils/utils.js +2 -0
  382. package/dist/utils/utils.js.map +1 -1
  383. package/dist/utils/validators.d.ts +34 -0
  384. package/dist/utils/validators.d.ts.map +1 -0
  385. package/dist/utils/validators.js +61 -0
  386. package/dist/utils/validators.js.map +1 -0
  387. package/dist/web/webSocketStream.d.ts +29 -0
  388. package/dist/web/webSocketStream.d.ts.map +1 -0
  389. package/dist/web/webSocketStream.js +69 -0
  390. package/dist/web/webSocketStream.js.map +1 -0
  391. package/dist/web/wrapWebSocket.d.ts +12 -0
  392. package/dist/web/wrapWebSocket.d.ts.map +1 -0
  393. package/dist/web/wrapWebSocket.js +41 -0
  394. package/dist/web/wrapWebSocket.js.map +1 -0
  395. package/dist/web/wsClient.d.ts +7 -0
  396. package/dist/web/wsClient.d.ts.map +1 -0
  397. package/dist/web/wsClient.js +22 -0
  398. package/dist/web/wsClient.js.map +1 -0
  399. package/dist/web/wsClient.test.d.ts +2 -0
  400. package/dist/web/wsClient.test.d.ts.map +1 -0
  401. package/dist/web/wsClient.test.js +20 -0
  402. package/dist/web/wsClient.test.js.map +1 -0
  403. package/examples/authHandler.test.ts +164 -0
  404. package/examples/mqtt.test.ts +89 -0
  405. package/examples/mqtts.test.ts +100 -0
  406. package/examples/webSocket.test.ts +94 -0
  407. package/mqttConn/mqttConn.test.ts +9 -9
  408. package/mqttConn/mqttConn.ts +91 -49
  409. package/mqttPacket/BitMask.ts +11 -19
  410. package/mqttPacket/Properties.ts +6 -3
  411. package/mqttPacket/ReasonCode.ts +2 -1
  412. package/mqttPacket/auth.test.ts +1 -1
  413. package/mqttPacket/auth.ts +41 -48
  414. package/mqttPacket/codec.ts +146 -0
  415. package/mqttPacket/connack.ts +57 -68
  416. package/mqttPacket/connect.test.ts +2 -2
  417. package/mqttPacket/connect.ts +197 -204
  418. package/mqttPacket/decoder.test.ts +0 -39
  419. package/mqttPacket/decoder.ts +9 -36
  420. package/mqttPacket/disconnect.ts +57 -68
  421. package/mqttPacket/encoder.ts +5 -40
  422. package/mqttPacket/length.ts +1 -1
  423. package/mqttPacket/mod.ts +48 -200
  424. package/mqttPacket/pingreq.ts +21 -27
  425. package/mqttPacket/pingres.ts +21 -27
  426. package/mqttPacket/protocolLevels.ts +12 -7
  427. package/mqttPacket/pubblishAcks.ts +68 -77
  428. package/mqttPacket/publish.ts +76 -83
  429. package/mqttPacket/suback.ts +48 -58
  430. package/mqttPacket/subscribe.ts +141 -117
  431. package/mqttPacket/types.ts +1 -9
  432. package/mqttPacket/unsuback.ts +46 -58
  433. package/mqttPacket/unsubscribe.ts +74 -63
  434. package/mqttPacket/validators.ts +5 -31
  435. package/node/socket-node-stream.test.ts +322 -0
  436. package/node/socket-node-stream.ts +174 -0
  437. package/node/tcpClient.test.ts +70 -0
  438. package/node/tcpClient.ts +13 -12
  439. package/node/tcpServer.test.ts +24 -20
  440. package/node/tcpServer.ts +6 -0
  441. package/node/tlsServer.test.ts +94 -0
  442. package/node/tlsServer.ts +81 -0
  443. package/node/wrapNodeSocket.ts +7 -30
  444. package/package.json +73 -45
  445. package/persistence/basicPersistence.ts +495 -0
  446. package/persistence/deps.ts +11 -1
  447. package/persistence/memory/memoryPersistence.ts +12 -152
  448. package/persistence/memory/memoryStorage.ts +232 -0
  449. package/persistence/mod.ts +4 -4
  450. package/persistence/persistence.test.ts +24 -0
  451. package/persistence/persistence.testing.ts +1324 -0
  452. package/persistence/persistence.ts +111 -67
  453. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  454. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  455. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  456. package/persistence/sqlite/sqliteStorage.ts +324 -0
  457. package/persistence/storage.ts +84 -0
  458. package/server/config.ts +65 -0
  459. package/server/context.ts +658 -74
  460. package/server/deps.ts +25 -5
  461. package/server/handlers/completeConnect.ts +93 -0
  462. package/server/handlers/duplicate.test.ts +196 -0
  463. package/server/handlers/handleAuth.test.ts +225 -0
  464. package/server/handlers/handleAuth.ts +88 -0
  465. package/server/handlers/handleConnect.test.ts +589 -0
  466. package/server/handlers/handleConnect.ts +201 -86
  467. package/server/handlers/handleConnect.version.test.ts +108 -0
  468. package/server/handlers/handleDisconnect.test.ts +56 -0
  469. package/server/handlers/handleDisconnect.ts +3 -3
  470. package/server/handlers/handlePacket.test.ts +24 -0
  471. package/server/handlers/handlePacket.ts +30 -8
  472. package/server/handlers/handlePingreq.test.ts +29 -0
  473. package/server/handlers/handlePuback.test.ts +28 -0
  474. package/server/handlers/handlePuback.ts +5 -8
  475. package/server/handlers/handlePubcomp.test.ts +28 -0
  476. package/server/handlers/handlePubcomp.ts +5 -4
  477. package/server/handlers/handlePublish.test.ts +471 -0
  478. package/server/handlers/handlePublish.ts +189 -35
  479. package/server/handlers/handlePubrec.test.ts +28 -0
  480. package/server/handlers/handlePubrec.ts +2 -3
  481. package/server/handlers/handlePubrel.test.ts +74 -0
  482. package/server/handlers/handlePubrel.ts +12 -2
  483. package/server/handlers/handleSubscribe.test.ts +971 -0
  484. package/server/handlers/handleSubscribe.ts +158 -39
  485. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  486. package/server/handlers/handleUnsubscribe.ts +29 -5
  487. package/server/handlers/keepalive.test.ts +132 -0
  488. package/server/handlers/session.persistence.test.ts +194 -0
  489. package/server/handlers/will.delivery.test.ts +221 -0
  490. package/server/mod.ts +4 -3
  491. package/server/preconnect.test.ts +151 -0
  492. package/server/server.ts +115 -17
  493. package/socket/socket.test.ts +91 -0
  494. package/socket/socket.ts +81 -31
  495. package/timer/timer.test.ts +4 -7
  496. package/timer/timer.ts +36 -0
  497. package/tools/benchmarks/receiver.ts +51 -0
  498. package/tools/benchmarks/sender.ts +48 -0
  499. package/tools/benchmarks/utils.ts +31 -0
  500. package/tools/mqtt-compat/README.md +130 -0
  501. package/tools/mqtt-compat/broker.ts +52 -0
  502. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  503. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  504. package/trie/trie.test.ts +9 -1
  505. package/trie/trie.ts +57 -22
  506. package/utils/bufferedAsyncIterable.test.ts +92 -0
  507. package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +1 -1
  508. package/utils/deferred.test.ts +36 -0
  509. package/utils/deferred.ts +0 -1
  510. package/utils/getOrInsertPolyFill.ts +12 -0
  511. package/utils/logger.test.ts +189 -0
  512. package/utils/logger.ts +62 -7
  513. package/utils/mod.ts +15 -1
  514. package/utils/outboundTopicAliasManager.ts +100 -0
  515. package/utils/queue.test.ts +61 -0
  516. package/utils/topicFilter.test.ts +63 -0
  517. package/utils/topicFilter.ts +61 -0
  518. package/utils/utils.ts +3 -0
  519. package/utils/validators.ts +67 -0
  520. package/web/webSocketStream.ts +97 -0
  521. package/web/wrapWebSocket.ts +52 -0
  522. package/web/wsClient.test.ts +26 -0
  523. package/web/wsClient.ts +25 -0
  524. package/benchmarks/receiver.ts +0 -35
  525. package/benchmarks/sender.ts +0 -32
  526. package/benchmarks/utils.ts +0 -9
  527. package/dev_utils/dummyConn.ts +0 -110
  528. package/dist/persistence/store.d.ts +0 -13
  529. package/dist/persistence/store.d.ts.map +0 -1
  530. package/dist/persistence/store.js +0 -2
  531. package/dist/persistence/store.js.map +0 -1
  532. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  533. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  534. package/examples/tcpServer.test.ts +0 -148
  535. package/persistence/memory/memoryPersistence.test.ts +0 -156
  536. package/persistence/store.ts +0 -15
  537. package/server/test/handleConnect.test.ts +0 -130
  538. package/server/test/test-handlers.ts +0 -53
@@ -1,9 +1,10 @@
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
4
  import type { TReasonCode } from "./ReasonCode.ts";
6
5
  import type { AuthProperties } from "./Properties.ts";
6
+ import type { CodecOpts, TPacketType } 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 = {
@@ -21,51 +22,43 @@ export type AuthPacketV5 = {
21
22
  */
22
23
  export type AuthPacket = AuthPacketV5;
23
24
 
24
- export const auth: {
25
- encode(packet: AuthPacket, codecOpts: CodecOpts): Uint8Array;
26
- decode(
27
- buffer: Uint8Array,
28
- flags: number,
29
- codecOpts: CodecOpts,
30
- packetType: TPacketType,
31
- ): AuthPacket;
32
- } = {
33
- encode(packet: AuthPacket, codecOpts: CodecOpts): Uint8Array {
34
- if (packet.protocolLevel !== 5) {
35
- throw new EncoderError("Invalid protocol level");
36
- }
37
- const encoder = new Encoder(packet.type);
38
- encoder
39
- .setReasonCode(packet.reasonCode || 0)
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
+ .setReasonCode(packet.reasonCode || 0)
34
+ .setProperties(
35
+ packet.properties || {},
36
+ packet.type,
37
+ codecOpts.maxOutgoingPacketSize,
38
+ );
39
+ return encoder.done(0);
40
+ }
47
41
 
48
- decode(
49
- buffer: Uint8Array,
50
- flags: number,
51
- codecOpts: CodecOpts,
52
- packetType: TPacketType,
53
- ): AuthPacket {
54
- // Bits 3,2,1 and 0 of the Fixed Header of the AUTH packet are reserved and MUST all be set to 0.
55
- // The Client or Server MUST treat any other value as malformed and close the Network Connection [MQTT-3.15.1-1].
56
- hasEmptyFlags(flags);
57
- if (codecOpts.protocolLevel !== 5) {
58
- throw new DecoderError("Invalid protocol level");
59
- }
60
- const decoder = new Decoder(packetType, buffer);
61
- const reasonCode = decoder.getReasonCode();
62
- const properties = decoder.getProperties(PacketType.auth);
63
- decoder.done();
64
- return {
65
- type: PacketType.auth,
66
- protocolLevel: 5,
67
- reasonCode,
68
- properties,
69
- };
70
- },
71
- };
42
+ export function decode(
43
+ buffer: Uint8Array,
44
+ flags: number,
45
+ codecOpts: CodecOpts,
46
+ packetType: TPacketType,
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.getReasonCode();
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,146 @@
1
+ import type { CodecOpts, TPacketType } from "./types.ts";
2
+ import { DecoderError } from "./decoder.ts";
3
+ import { decodeLength } from "./length.ts";
4
+
5
+ // import encoder/decoder for each packet type
6
+ import * as connect from "./connect.ts";
7
+ import * as connack from "./connack.ts";
8
+ import * as publish from "./publish.ts";
9
+ import * as anyAck from "./pubblishAcks.ts";
10
+ import * as subscribe from "./subscribe.ts";
11
+ import * as suback from "./suback.ts";
12
+ import * as unsubscribe from "./unsubscribe.ts";
13
+ import * as unsuback from "./unsuback.ts";
14
+ import * as pingreq from "./pingreq.ts";
15
+ import * as pingres from "./pingres.ts";
16
+ import * as disconnect from "./disconnect.ts";
17
+ import * as auth from "./auth.ts";
18
+
19
+ // import the Typescript types of the packet types
20
+ import type { ConnectPacket } from "./connect.ts";
21
+ import type { ConnackPacket } from "./connack.ts";
22
+ import type { PublishPacket } from "./publish.ts";
23
+ import type {
24
+ PubackPacket,
25
+ PubcompPacket,
26
+ PubrecPacket,
27
+ PubrelPacket,
28
+ } from "./pubblishAcks.ts";
29
+ import type { SubscribePacket } from "./subscribe.ts";
30
+ import type { SubackPacket } from "./suback.ts";
31
+ import type { UnsubscribePacket } from "./unsubscribe.ts";
32
+ import type { UnsubackPacket } from "./unsuback.ts";
33
+ import type { PingreqPacket } from "./pingreq.ts";
34
+ import type { PingresPacket } from "./pingres.ts";
35
+ import type { DisconnectPacket } from "./disconnect.ts";
36
+ import type { AuthPacket } from "./auth.ts";
37
+
38
+ /**
39
+ * this can be any possible MQTT packet
40
+ */
41
+ export type AnyPacket =
42
+ | ConnectPacket
43
+ | ConnackPacket
44
+ | PublishPacket
45
+ | PubackPacket
46
+ | PubrecPacket
47
+ | PubrelPacket
48
+ | PubcompPacket
49
+ | SubscribePacket
50
+ | SubackPacket
51
+ | UnsubscribePacket
52
+ | UnsubackPacket
53
+ | PingreqPacket
54
+ | PingresPacket
55
+ | DisconnectPacket
56
+ | AuthPacket;
57
+
58
+ /**
59
+ * Array mapping MQTT packet types to their corresponding encode/decode handlers
60
+ * Index corresponds to packet type number.
61
+ */
62
+ const packetsByType = [
63
+ null,
64
+ connect, // 1
65
+ connack, // 2
66
+ publish, // 3
67
+ anyAck, // 4 puback
68
+ anyAck, // 5 pubrec
69
+ anyAck, // 6 pubrel
70
+ anyAck, // 7 pubcomp
71
+ subscribe, // 8
72
+ suback, // 9
73
+ unsubscribe, // 10
74
+ unsuback, // 11
75
+ pingreq, // 12
76
+ pingres, // 13
77
+ disconnect, // 14
78
+ auth, // 15
79
+ ] as const;
80
+
81
+ /**
82
+ * @function encode
83
+ * @description Encodes an MQTT packet object into a binary Uint8Array format
84
+ * @param {AnyPacket} packet - The MQTT packet object to encode
85
+ * @param {CodecOpts} codecOpts - options to use during encoding
86
+ * @returns {Uint8Array} The encoded packet as a binary buffer
87
+ * @throws {Error} If packet encoding fails
88
+ */
89
+ export function encode(packet: AnyPacket, codecOpts: CodecOpts): Uint8Array {
90
+ const packetType: number = packet.type;
91
+ // deno-lint-ignore no-explicit-any
92
+ const pkt: any = packet;
93
+ const encoded = packetsByType[packetType]?.encode(pkt, codecOpts);
94
+ if (!encoded) {
95
+ throw Error("Packet encoding failed");
96
+ }
97
+ return encoded;
98
+ }
99
+
100
+ /**
101
+ * @function decodePayload
102
+ * @description Decodes a packet payload from binary format into an MQTT packet object
103
+ * @param {number} firstByte - The first byte of the MQTT packet containing type and flags
104
+ * @param {Uint8Array} buffer - The binary buffer containing the packet payload
105
+ * @param {CodecOpts} codecOpts - options to use during encoding
106
+ * @returns {AnyPacket} The decoded MQTT packet object
107
+ * @throws {DecoderError} If packet decoding fails
108
+ */
109
+ export function decodePayload(
110
+ firstByte: number,
111
+ buffer: Uint8Array,
112
+ codecOpts: CodecOpts,
113
+ ): AnyPacket {
114
+ const packetType = firstByte >> 4;
115
+ const flags = firstByte & 0x0f;
116
+ const packet = packetsByType[packetType]?.decode(
117
+ buffer,
118
+ flags,
119
+ codecOpts,
120
+ packetType as TPacketType,
121
+ );
122
+ if (packet !== undefined) {
123
+ return packet;
124
+ }
125
+ throw new DecoderError("packet decoding failed");
126
+ }
127
+
128
+ /**
129
+ * @function decode
130
+ * @description Decodes a complete MQTT packet from binary format into a packet object,
131
+ * its basically a wrapper around decodePayload
132
+ *
133
+ * @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
134
+ * @param {CodecOpts} codecOpts - the options for the decoder
135
+ * @returns {AnyPacket} The decoded MQTT packet object
136
+ * @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
137
+ */
138
+ export function decode(buffer: Uint8Array, codecOpts: CodecOpts): AnyPacket {
139
+ if (buffer.length < 2) {
140
+ throw new DecoderError("Packet decoding failed");
141
+ }
142
+ const { length, numLengthBytes } = decodeLength(buffer, 1);
143
+ const start = numLengthBytes + 1;
144
+ const end = start + length;
145
+ return decodePayload(buffer[0] || 0, buffer.subarray(start, end), codecOpts);
146
+ }
@@ -1,9 +1,5 @@
1
- import type {
2
- CodecOpts,
3
- ProtocolLevelNoV5,
4
- TAuthenticationResult,
5
- TPacketType,
6
- } from "./types.ts";
1
+ import type { CodecOpts, TAuthenticationResult, TPacketType } 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";
@@ -38,71 +34,64 @@ export type ConnackPacketV5 = {
38
34
  */
39
35
  export type ConnackPacket = ConnackPacketV4 | ConnackPacketV5;
40
36
 
41
- export const connack: {
42
- encode(packet: ConnackPacket, codecOpts: CodecOpts): Uint8Array;
43
- decode(
44
- buffer: Uint8Array,
45
- flags: number,
46
- codecOpts: CodecOpts,
47
- packetType: TPacketType,
48
- ): ConnackPacket;
49
- } = {
50
- encode(packet: ConnackPacket, codecOpts: CodecOpts): Uint8Array {
51
- if (packet.protocolLevel !== 5) {
52
- return new Uint8Array([
53
- packet.type << 4,
54
- 2,
55
- packet.sessionPresent ? 1 : 0,
56
- packet.returnCode || 0,
57
- ]);
58
- }
59
- const encoder = new Encoder(packet.type);
60
- encoder
61
- .setByte(packet.sessionPresent ? 1 : 0)
62
- .setReasonCode(packet.reasonCode || 0)
63
- .setProperties(
64
- packet.properties || {},
65
- packet.type,
66
- codecOpts.maxOutgoingPacketSize,
67
- );
68
- return encoder.done(0);
69
- },
37
+ export function encode(
38
+ packet: ConnackPacket,
39
+ codecOpts: CodecOpts,
40
+ ): Uint8Array {
41
+ if (packet.protocolLevel !== 5) {
42
+ return new Uint8Array([
43
+ packet.type << 4,
44
+ 2,
45
+ packet.sessionPresent ? 1 : 0,
46
+ packet.returnCode || 0,
47
+ ]);
48
+ }
49
+ const encoder = new Encoder(packet.type);
50
+ encoder
51
+ .setByte(packet.sessionPresent ? 1 : 0)
52
+ .setReasonCode(packet.reasonCode || 0)
53
+ .setProperties(
54
+ packet.properties || {},
55
+ packet.type,
56
+ codecOpts.maxOutgoingPacketSize,
57
+ );
58
+ return encoder.done(0);
59
+ }
70
60
 
71
- decode(
72
- buffer: Uint8Array,
73
- flags: number,
74
- codecOpts: CodecOpts,
75
- packetType: TPacketType,
76
- ): ConnackPacket {
77
- const decoder = new Decoder(packetType, buffer);
78
- hasEmptyFlags(flags);
79
- const ackflags = decoder.getByte();
80
- if (ackflags > 1) {
81
- throw new DecoderError("Invalid Connect Acknowledge flags");
82
- }
83
- const sessionPresent = booleanFlag(ackflags, BitMask.bit0);
84
- if (codecOpts.protocolLevel !== 5) {
85
- const returnCode = decoder.getByte() as TAuthenticationResult;
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);
61
+ export function decode(
62
+ buffer: Uint8Array,
63
+ flags: number,
64
+ codecOpts: CodecOpts,
65
+ packetType: TPacketType,
66
+ ): ConnackPacket {
67
+ const decoder = new Decoder(packetType, buffer);
68
+ hasEmptyFlags(flags);
69
+ const ackflags = decoder.getByte();
70
+ if (ackflags > 1) {
71
+ throw new DecoderError("Invalid Connect Acknowledge flags");
72
+ }
73
+ const sessionPresent = booleanFlag(ackflags, BitMask.bit0);
74
+ if (codecOpts.protocolLevel !== 5) {
75
+ const returnCode = decoder.getByte() as TAuthenticationResult;
99
76
  decoder.done();
77
+ if (!AuthenticationResultByNumber[returnCode]) {
78
+ throw new DecoderError("Invalid return code");
79
+ }
100
80
  return {
101
81
  type: PacketType.connack,
102
- protocolLevel: 5,
82
+ protocolLevel: codecOpts.protocolLevel,
103
83
  sessionPresent,
104
- reasonCode,
105
- properties,
84
+ returnCode,
106
85
  };
107
- },
108
- };
86
+ }
87
+ const reasonCode = decoder.getReasonCode();
88
+ const properties = decoder.getProperties(PacketType.connack);
89
+ decoder.done();
90
+ return {
91
+ type: PacketType.connack,
92
+ protocolLevel: 5,
93
+ sessionPresent,
94
+ reasonCode,
95
+ properties,
96
+ };
97
+ }
@@ -289,7 +289,7 @@ test("decode Connect with username and password", () => {
289
289
  );
290
290
  });
291
291
 
292
- const decodedConnectWithWill = Object.assign({}, decodedConnect);
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