@seriousme/opifex 1.11.2 → 2.0.3

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