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