@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.
Files changed (542) hide show
  1. package/README.md +99 -40
  2. package/bin/conformanceServer.ts +45 -13
  3. package/bin/demoServer.ts +38 -13
  4. package/bin/mqtt.ts +2 -2
  5. package/client/ConnectionState.ts +3 -1
  6. package/client/client.ts +88 -47
  7. package/client/context.ts +79 -27
  8. package/client/deps.ts +10 -3
  9. package/client/handlers/handleAuth.test.ts +193 -0
  10. package/client/handlers/handleAuth.ts +89 -0
  11. package/client/handlers/handleConnack.test.ts +173 -0
  12. package/client/handlers/handleConnack.ts +18 -8
  13. package/client/handlers/handleDisconnect.test.ts +22 -0
  14. package/client/handlers/handleDisconnect.ts +17 -0
  15. package/client/handlers/handlePacket.test.ts +242 -0
  16. package/client/handlers/handlePacket.ts +19 -5
  17. package/client/handlers/handlePuback.test.ts +99 -0
  18. package/client/handlers/handlePuback.ts +6 -0
  19. package/client/handlers/handlePubcomp.test.ts +112 -0
  20. package/client/handlers/handlePubcomp.ts +5 -0
  21. package/client/handlers/handlePublish.test.ts +188 -0
  22. package/client/handlers/handlePubrec.test.ts +119 -0
  23. package/client/handlers/handlePubrec.ts +5 -1
  24. package/client/handlers/handlePubrel.test.ts +136 -0
  25. package/client/handlers/handleSuback.test.ts +122 -0
  26. package/client/handlers/handleSuback.ts +3 -0
  27. package/client/handlers/handleUnsuback.test.ts +101 -0
  28. package/client/mod.ts +13 -2
  29. package/client/store/memoryStore.ts +12 -11
  30. package/client/store/store.ts +4 -2
  31. package/deno/README.md +1 -2
  32. package/deno/tcpClient.test.ts +75 -0
  33. package/deno/tcpClient.ts +36 -18
  34. package/deno/tcpServer.test.ts +22 -21
  35. package/deno/tcpServer.ts +26 -4
  36. package/deno/tlsServer.test.ts +97 -0
  37. package/deno/tlsServer.ts +58 -0
  38. package/deno/wsServer.test.ts +93 -0
  39. package/deno/wsServer.ts +96 -0
  40. package/dev_utils/generateCert.ts +95 -0
  41. package/dev_utils/mockConn.ts +36 -0
  42. package/dev_utils/mockServer.ts +28 -0
  43. package/dev_utils/mod.ts +30 -3
  44. package/dev_utils/packetHelpers.ts +404 -0
  45. package/dev_utils/test-handlers.ts +98 -0
  46. package/dev_utils/timers.ts +14 -0
  47. package/dev_utils/webStreamPair.test.ts +171 -0
  48. package/dev_utils/webStreamPair.ts +143 -0
  49. package/dist/bin/conformanceServer.js +17 -12
  50. package/dist/bin/conformanceServer.js.map +1 -1
  51. package/dist/bin/demoServer.js +16 -12
  52. package/dist/bin/demoServer.js.map +1 -1
  53. package/dist/bin/mqtt.js +2 -2
  54. package/dist/bin/mqtt.js.map +1 -1
  55. package/dist/client/ConnectionState.d.ts +3 -1
  56. package/dist/client/ConnectionState.d.ts.map +1 -1
  57. package/dist/client/ConnectionState.js +2 -0
  58. package/dist/client/ConnectionState.js.map +1 -1
  59. package/dist/client/client.d.ts +47 -21
  60. package/dist/client/client.d.ts.map +1 -1
  61. package/dist/client/client.js +57 -20
  62. package/dist/client/client.js.map +1 -1
  63. package/dist/client/context.d.ts +15 -7
  64. package/dist/client/context.d.ts.map +1 -1
  65. package/dist/client/context.js +44 -12
  66. package/dist/client/context.js.map +1 -1
  67. package/dist/client/deps.d.ts +4 -3
  68. package/dist/client/deps.d.ts.map +1 -1
  69. package/dist/client/deps.js +1 -1
  70. package/dist/client/deps.js.map +1 -1
  71. package/dist/client/handlers/handleAuth.d.ts +9 -0
  72. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  73. package/dist/client/handlers/handleAuth.js +66 -0
  74. package/dist/client/handlers/handleAuth.js.map +1 -0
  75. package/dist/client/handlers/handleConnack.d.ts +2 -2
  76. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  77. package/dist/client/handlers/handleConnack.js +16 -6
  78. package/dist/client/handlers/handleConnack.js.map +1 -1
  79. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  80. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  81. package/dist/client/handlers/handleDisconnect.js +15 -0
  82. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  83. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  84. package/dist/client/handlers/handlePacket.js +14 -3
  85. package/dist/client/handlers/handlePacket.js.map +1 -1
  86. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  87. package/dist/client/handlers/handlePuback.js +5 -0
  88. package/dist/client/handlers/handlePuback.js.map +1 -1
  89. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.js +5 -0
  91. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  92. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  93. package/dist/client/handlers/handlePubrec.js +5 -1
  94. package/dist/client/handlers/handlePubrec.js.map +1 -1
  95. package/dist/client/handlers/handleSuback.d.ts +1 -0
  96. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  97. package/dist/client/handlers/handleSuback.js +3 -0
  98. package/dist/client/handlers/handleSuback.js.map +1 -1
  99. package/dist/client/mod.d.ts +3 -2
  100. package/dist/client/mod.d.ts.map +1 -1
  101. package/dist/client/mod.js +1 -1
  102. package/dist/client/mod.js.map +1 -1
  103. package/dist/client/store/memoryStore.d.ts +3 -3
  104. package/dist/client/store/memoryStore.d.ts.map +1 -1
  105. package/dist/client/store/memoryStore.js +3 -3
  106. package/dist/client/store/memoryStore.js.map +1 -1
  107. package/dist/client/store/store.d.ts +3 -2
  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 +24 -31
  128. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  129. package/dist/mqttConn/mqttConn.js +57 -36
  130. package/dist/mqttConn/mqttConn.js.map +1 -1
  131. package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
  132. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  133. package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
  134. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  135. package/dist/mqttPacket/PacketType.d.ts +4 -0
  136. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  137. package/dist/mqttPacket/Properties.d.ts +4 -4
  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 +4 -5
  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 +4 -0
  145. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  146. package/dist/mqttPacket/auth.d.ts +7 -8
  147. package/dist/mqttPacket/auth.d.ts.map +1 -1
  148. package/dist/mqttPacket/auth.js +31 -30
  149. package/dist/mqttPacket/auth.js.map +1 -1
  150. package/dist/mqttPacket/codec.d.ts +48 -0
  151. package/dist/mqttPacket/codec.d.ts.map +1 -0
  152. package/dist/mqttPacket/codec.js +93 -0
  153. package/dist/mqttPacket/codec.js.map +1 -0
  154. package/dist/mqttPacket/connack.d.ts +11 -10
  155. package/dist/mqttPacket/connack.d.ts.map +1 -1
  156. package/dist/mqttPacket/connack.js +43 -45
  157. package/dist/mqttPacket/connack.js.map +1 -1
  158. package/dist/mqttPacket/connect.d.ts +7 -7
  159. package/dist/mqttPacket/connect.d.ts.map +1 -1
  160. package/dist/mqttPacket/connect.js +156 -157
  161. package/dist/mqttPacket/connect.js.map +1 -1
  162. package/dist/mqttPacket/decoder.d.ts +6 -16
  163. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  164. package/dist/mqttPacket/decoder.js +7 -28
  165. package/dist/mqttPacket/decoder.js.map +1 -1
  166. package/dist/mqttPacket/disconnect.d.ts +9 -8
  167. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  168. package/dist/mqttPacket/disconnect.js +41 -43
  169. package/dist/mqttPacket/disconnect.js.map +1 -1
  170. package/dist/mqttPacket/encoder.d.ts +7 -19
  171. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  172. package/dist/mqttPacket/encoder.js +5 -28
  173. package/dist/mqttPacket/encoder.js.map +1 -1
  174. package/dist/mqttPacket/mod.d.ts +21 -103
  175. package/dist/mqttPacket/mod.d.ts.map +1 -1
  176. package/dist/mqttPacket/mod.js +5 -94
  177. package/dist/mqttPacket/mod.js.map +1 -1
  178. package/dist/mqttPacket/pingreq.d.ts +6 -6
  179. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  180. package/dist/mqttPacket/pingreq.js +11 -13
  181. package/dist/mqttPacket/pingreq.js.map +1 -1
  182. package/dist/mqttPacket/pingres.d.ts +6 -6
  183. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  184. package/dist/mqttPacket/pingres.js +11 -13
  185. package/dist/mqttPacket/pingres.js.map +1 -1
  186. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  187. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  188. package/dist/mqttPacket/protocolLevels.js +5 -1
  189. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  190. package/dist/mqttPacket/pubblishAcks.d.ts +9 -10
  191. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  192. package/dist/mqttPacket/pubblishAcks.js +43 -45
  193. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  194. package/dist/mqttPacket/publish.d.ts +8 -7
  195. package/dist/mqttPacket/publish.d.ts.map +1 -1
  196. package/dist/mqttPacket/publish.js +53 -55
  197. package/dist/mqttPacket/publish.js.map +1 -1
  198. package/dist/mqttPacket/suback.d.ts +9 -8
  199. package/dist/mqttPacket/suback.d.ts.map +1 -1
  200. package/dist/mqttPacket/suback.js +38 -40
  201. package/dist/mqttPacket/suback.js.map +1 -1
  202. package/dist/mqttPacket/subscribe.d.ts +41 -10
  203. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  204. package/dist/mqttPacket/subscribe.js +90 -89
  205. package/dist/mqttPacket/subscribe.js.map +1 -1
  206. package/dist/mqttPacket/types.d.ts +2 -29
  207. package/dist/mqttPacket/types.d.ts.map +1 -1
  208. package/dist/mqttPacket/unsuback.d.ts +9 -8
  209. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  210. package/dist/mqttPacket/unsuback.js +32 -34
  211. package/dist/mqttPacket/unsuback.js.map +1 -1
  212. package/dist/mqttPacket/unsubscribe.d.ts +26 -8
  213. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  214. package/dist/mqttPacket/unsubscribe.js +45 -44
  215. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  216. package/dist/mqttPacket/validators.d.ts +4 -16
  217. package/dist/mqttPacket/validators.d.ts.map +1 -1
  218. package/dist/mqttPacket/validators.js +5 -26
  219. package/dist/mqttPacket/validators.js.map +1 -1
  220. package/dist/node/tcpClient.d.ts +22 -2
  221. package/dist/node/tcpClient.d.ts.map +1 -1
  222. package/dist/node/tcpClient.js +29 -10
  223. package/dist/node/tcpClient.js.map +1 -1
  224. package/dist/node/tcpServer.d.ts +18 -0
  225. package/dist/node/tcpServer.d.ts.map +1 -1
  226. package/dist/node/tcpServer.js +21 -2
  227. package/dist/node/tcpServer.js.map +1 -1
  228. package/dist/node/tlsServer.d.ts +37 -0
  229. package/dist/node/tlsServer.d.ts.map +1 -0
  230. package/dist/node/tlsServer.js +73 -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 +45 -70
  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 +199 -25
  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 +9 -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 +32 -9
  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 +15 -9
  340. package/dist/socket/socket.d.ts.map +1 -1
  341. package/dist/socket/socket.js +66 -18
  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 +61 -41
  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 +42 -5
  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 +14 -0
  396. package/dist/web/wsClient.d.ts.map +1 -0
  397. package/dist/web/wsClient.js +33 -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 +76 -60
  409. package/mqttPacket/AuthenticationResult.ts +6 -0
  410. package/mqttPacket/PacketType.ts +5 -0
  411. package/mqttPacket/Properties.ts +8 -5
  412. package/mqttPacket/ReasonCode.ts +8 -9
  413. package/mqttPacket/RetainHandling.ts +5 -0
  414. package/mqttPacket/auth.test.ts +1 -1
  415. package/mqttPacket/auth.ts +44 -51
  416. package/mqttPacket/codec.ts +147 -0
  417. package/mqttPacket/connack.ts +63 -73
  418. package/mqttPacket/connect.test.ts +2 -2
  419. package/mqttPacket/connect.ts +178 -192
  420. package/mqttPacket/decoder.test.ts +0 -39
  421. package/mqttPacket/decoder.ts +17 -46
  422. package/mqttPacket/disconnect.ts +60 -71
  423. package/mqttPacket/encoder.test.ts +2 -2
  424. package/mqttPacket/encoder.ts +13 -46
  425. package/mqttPacket/mod.ts +48 -204
  426. package/mqttPacket/pingreq.ts +22 -28
  427. package/mqttPacket/pingres.ts +22 -28
  428. package/mqttPacket/protocolLevels.ts +12 -7
  429. package/mqttPacket/pubblishAcks.ts +61 -75
  430. package/mqttPacket/publish.ts +70 -84
  431. package/mqttPacket/publishAcks.test.ts +3 -3
  432. package/mqttPacket/suback.ts +53 -68
  433. package/mqttPacket/subscribe.ts +146 -128
  434. package/mqttPacket/types.ts +2 -35
  435. package/mqttPacket/unsuback.ts +50 -61
  436. package/mqttPacket/unsubscribe.ts +77 -72
  437. package/mqttPacket/validators.ts +5 -31
  438. package/node/socket-node-stream.test.ts +322 -0
  439. package/node/socket-node-stream.ts +174 -0
  440. package/node/tcpClient.test.ts +70 -0
  441. package/node/tcpClient.ts +33 -17
  442. package/node/tcpServer.test.ts +24 -20
  443. package/node/tcpServer.ts +29 -6
  444. package/node/tlsServer.test.ts +94 -0
  445. package/node/tlsServer.ts +97 -0
  446. package/node/wrapNodeSocket.ts +7 -30
  447. package/package.json +72 -44
  448. package/persistence/basicPersistence.ts +495 -0
  449. package/persistence/deps.ts +11 -1
  450. package/persistence/memory/memoryPersistence.ts +12 -153
  451. package/persistence/memory/memoryStorage.ts +232 -0
  452. package/persistence/mod.ts +5 -10
  453. package/persistence/persistence.test.ts +24 -0
  454. package/persistence/persistence.testing.ts +1324 -0
  455. package/persistence/persistence.ts +112 -68
  456. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  457. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  458. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  459. package/persistence/sqlite/sqliteStorage.ts +324 -0
  460. package/persistence/storage.ts +84 -0
  461. package/server/config.ts +65 -0
  462. package/server/context.ts +660 -76
  463. package/server/deps.ts +24 -5
  464. package/server/handlers/completeConnect.ts +93 -0
  465. package/server/handlers/duplicate.test.ts +196 -0
  466. package/server/handlers/handleAuth.test.ts +225 -0
  467. package/server/handlers/handleAuth.ts +88 -0
  468. package/server/handlers/handleConnect.test.ts +589 -0
  469. package/server/handlers/handleConnect.ts +201 -86
  470. package/server/handlers/handleConnect.version.test.ts +108 -0
  471. package/server/handlers/handleDisconnect.test.ts +56 -0
  472. package/server/handlers/handleDisconnect.ts +3 -3
  473. package/server/handlers/handlePacket.test.ts +24 -0
  474. package/server/handlers/handlePacket.ts +30 -8
  475. package/server/handlers/handlePingreq.test.ts +29 -0
  476. package/server/handlers/handlePuback.test.ts +28 -0
  477. package/server/handlers/handlePuback.ts +5 -8
  478. package/server/handlers/handlePubcomp.test.ts +28 -0
  479. package/server/handlers/handlePubcomp.ts +5 -4
  480. package/server/handlers/handlePublish.test.ts +471 -0
  481. package/server/handlers/handlePublish.ts +188 -35
  482. package/server/handlers/handlePubrec.test.ts +28 -0
  483. package/server/handlers/handlePubrec.ts +2 -3
  484. package/server/handlers/handlePubrel.test.ts +74 -0
  485. package/server/handlers/handlePubrel.ts +12 -2
  486. package/server/handlers/handleSubscribe.test.ts +971 -0
  487. package/server/handlers/handleSubscribe.ts +157 -39
  488. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  489. package/server/handlers/handleUnsubscribe.ts +28 -4
  490. package/server/handlers/keepalive.test.ts +132 -0
  491. package/server/handlers/session.persistence.test.ts +194 -0
  492. package/server/handlers/will.delivery.test.ts +221 -0
  493. package/server/mod.ts +5 -4
  494. package/server/preconnect.test.ts +151 -0
  495. package/server/server.ts +117 -19
  496. package/socket/socket.test.ts +91 -0
  497. package/socket/socket.ts +85 -34
  498. package/timer/timer.test.ts +4 -7
  499. package/timer/timer.ts +36 -0
  500. package/tools/benchmarks/receiver.ts +51 -0
  501. package/tools/benchmarks/sender.ts +48 -0
  502. package/tools/benchmarks/utils.ts +31 -0
  503. package/tools/mqtt-compat/README.md +130 -0
  504. package/tools/mqtt-compat/broker.ts +52 -0
  505. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  506. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  507. package/trie/trie.test.ts +9 -1
  508. package/trie/trie.ts +70 -45
  509. package/utils/bufferedAsyncIterable.test.ts +92 -0
  510. package/utils/deferred.test.ts +36 -0
  511. package/utils/deferred.ts +0 -1
  512. package/utils/getOrInsertPolyFill.ts +12 -0
  513. package/utils/logger.test.ts +189 -0
  514. package/utils/logger.ts +64 -9
  515. package/utils/mod.ts +15 -1
  516. package/utils/outboundTopicAliasManager.ts +100 -0
  517. package/utils/queue.test.ts +61 -0
  518. package/utils/topicFilter.test.ts +63 -0
  519. package/utils/topicFilter.ts +61 -0
  520. package/utils/utils.ts +3 -0
  521. package/utils/validators.ts +67 -0
  522. package/web/webSocketStream.ts +97 -0
  523. package/web/wrapWebSocket.ts +52 -0
  524. package/web/wsClient.test.ts +26 -0
  525. package/web/wsClient.ts +37 -0
  526. package/benchmarks/receiver.ts +0 -35
  527. package/benchmarks/sender.ts +0 -32
  528. package/benchmarks/utils.ts +0 -9
  529. package/dev_utils/dummyConn.ts +0 -110
  530. package/dev_utils/socketPair.ts +0 -85
  531. package/dist/persistence/store.d.ts +0 -14
  532. package/dist/persistence/store.d.ts.map +0 -1
  533. package/dist/persistence/store.js +0 -2
  534. package/dist/persistence/store.js.map +0 -1
  535. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  536. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  537. package/examples/tcpServer.test.ts +0 -148
  538. package/persistence/memory/memoryPersistence.test.ts +0 -156
  539. package/persistence/store.ts +0 -16
  540. package/server/test/handleConnect.test.ts +0 -122
  541. package/server/test/test-handlers.ts +0 -53
  542. /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
@@ -58,7 +58,8 @@ export const ReasonCode = {
58
58
  */
59
59
 
60
60
  export type ReasonCodeByNumberType = InvertRecord<typeof ReasonCode>;
61
- export const ReasonCodeByNumber = Object
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
- // Can't import this from types as this would create an import loop
230
- type TPacketType = typeof PacketType[keyof typeof PacketType];
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: TPacketType,
236
- code: TReasonCode,
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: TPacketType,
249
+ packetType: PacketType,
251
250
  code: number,
252
251
  ): boolean {
253
252
  const validReasonCodes =
254
- ReasonCodebyPacket[packetType as TReasonCodeByPacket] as readonly number[];
253
+ ReasonCodebyPacket[packetType as ReasonCodeByPacket] as readonly number[];
255
254
  return validReasonCodes.includes(code);
256
255
  }
@@ -9,3 +9,8 @@ export const RetainHandling = {
9
9
  ifSubscriptionNotExists: 1,
10
10
  noRetain: 2,
11
11
  } as const;
12
+
13
+ /**
14
+ * helper type to limit retain handling values
15
+ */
16
+ export type RetainHandling = typeof RetainHandling[keyof typeof RetainHandling];
@@ -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: 5,
78
+ protocolLevel: MQTTLevel.v5,
79
79
  type: PacketType.auth,
80
80
  reasonCode: ReasonCode.continueAuthentication,
81
81
  properties: {
@@ -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 { TReasonCode } from "./ReasonCode.ts";
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: TPacketType;
11
+ type: PacketType;
11
12
  protocolLevel: 5;
12
- reasonCode: TReasonCode;
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 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
+ .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
- 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: 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
+ }
@@ -1,9 +1,5 @@
1
- import type {
2
- CodecOpts,
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 { TReasonCode } from "./ReasonCode.ts";
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: TPacketType;
18
+ type: PacketType;
22
19
  protocolLevel: ProtocolLevelNoV5;
23
20
  sessionPresent: boolean;
24
- returnCode: TAuthenticationResult;
21
+ returnCode: AuthenticationResult;
25
22
  };
26
23
 
27
24
  export type ConnackPacketV5 = {
28
- type: TPacketType;
25
+ type: PacketType;
29
26
  protocolLevel: 5;
30
27
  sessionPresent: boolean;
31
- reasonCode: TReasonCode;
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 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
- },
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
- 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);
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: 5,
83
+ protocolLevel: codecOpts.protocolLevel,
103
84
  sessionPresent,
104
- reasonCode,
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 = 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