@seriousme/opifex 1.11.3 → 2.1.0

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