@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 +1 @@
1
- {"version":3,"file":"handlePubcomp.js","sourceRoot":"","sources":["../../../server/handlers/handlePubcomp.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAAqB;IAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"handlePubcomp.js","sourceRoot":"","sources":["../../../server/handlers/handlePubcomp.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,MAAqB;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,MAAM,GAAG,CAAC,WAAW,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAS,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC"}
@@ -3,7 +3,7 @@ import type { PublishPacket } from "../deps.ts";
3
3
  /**
4
4
  * Handles MQTT PUBLISH packets
5
5
  * @param ctx - The connection context
6
- * @param packet - The PUBLISH packet to process
6
+ * @param extPacket - The PUBLISH packet to process
7
7
  * @returns Promise that resolves when packet is processed
8
8
  * @throws Error if packet processing fails
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"handlePublish.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAS,MAAM,YAAY,CAAC;AAkBvD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
1
+ {"version":3,"file":"handlePublish.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAGV,aAAa,EAId,MAAM,YAAY,CAAC;AAuIpB;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CAyEf"}
@@ -1,72 +1,176 @@
1
- import { SysPrefix } from "../context.js";
2
- import { PacketType } from "../deps.js";
1
+ import { SessionState, SysPrefix } from "../context.js";
2
+ import { invalidmaxTopicLevels, invalidTopic, logger, PacketType, ReasonCode, } from "../deps.js";
3
+ const reasonsToDisconnect = [
4
+ ReasonCode.topicAliasInvalid,
5
+ ];
6
+ async function handlePublishError(ctx, id, qos, reasonCode, reasonString) {
7
+ // in v4 we can only close the connection
8
+ if (ctx.protocolLevel === 4) {
9
+ // in V4 we can only close the connection
10
+ await ctx.close(false);
11
+ return;
12
+ }
13
+ // in v5 we can message the client
14
+ //
15
+ if (reasonsToDisconnect.includes(reasonCode)) {
16
+ await ctx.send({
17
+ type: PacketType.disconnect,
18
+ protocolLevel: ctx.protocolLevel,
19
+ reasonCode,
20
+ properties: {
21
+ reasonString,
22
+ },
23
+ });
24
+ await ctx.close(false);
25
+ return;
26
+ }
27
+ if (qos === 0) {
28
+ // no message for QoS 0
29
+ return;
30
+ }
31
+ // QoS 1 and 2 get a nice message
32
+ const pType = qos === 1 ? PacketType.puback : PacketType.pubrec;
33
+ await ctx.send({
34
+ type: pType,
35
+ protocolLevel: ctx.protocolLevel,
36
+ id,
37
+ reasonCode,
38
+ properties: {
39
+ reasonString,
40
+ },
41
+ });
42
+ return;
43
+ }
3
44
  /**
4
45
  * Checks if a client is authorized to publish to a given topic
5
46
  * @param ctx - The connection context
6
47
  * @param topic - The topic to check authorization for
7
48
  * @returns boolean indicating if client is authorized to publish
8
49
  */
9
- function authorizedToPublish(ctx, topic) {
10
- if (topic.startsWith(SysPrefix)) {
50
+ async function authorizedToPublish(ctx, topic) {
51
+ if (topic.startsWith(SysPrefix) && !ctx.isBroker) {
52
+ return false;
53
+ }
54
+ if (ctx.state === SessionState.authenticating) {
11
55
  return false;
12
56
  }
13
57
  if (ctx.handlers.isAuthorizedToPublish) {
14
- return ctx.handlers.isAuthorizedToPublish(ctx, topic);
58
+ try {
59
+ return await ctx.handlers.isAuthorizedToPublish(ctx, topic);
60
+ }
61
+ catch (err) {
62
+ let message = "unknown error";
63
+ if (err instanceof Error) {
64
+ message = err.message;
65
+ }
66
+ logger.error("isAuthorizedToPublish failed with error", message);
67
+ return false;
68
+ }
15
69
  }
16
70
  return true;
17
71
  }
72
+ /**
73
+ * Validates incoming PUBLISH packet rules prior to processing.
74
+ * Returns an error object if invalid, or null if valid.
75
+ */
76
+ function validatePublishPacket(ctx, packet) {
77
+ const cfg = ctx.config.context;
78
+ const isProtocolV5 = packet.protocolLevel === 5;
79
+ const hasTopicAlias = isProtocolV5 &&
80
+ packet.properties?.topicAlias !== undefined;
81
+ if (!cfg.retainAvailable && packet.retain) {
82
+ return {
83
+ reasonCode: ReasonCode.unspecifiedError,
84
+ message: "Server does not support retain",
85
+ };
86
+ }
87
+ const isInvalidTopic = (packet.topic.length === 0 && !hasTopicAlias) ||
88
+ invalidTopic(packet.topic) ||
89
+ invalidmaxTopicLevels(packet.topic, cfg.maxTopicLevels);
90
+ if (isInvalidTopic) {
91
+ return {
92
+ reasonCode: ReasonCode.topicNameInvalid,
93
+ message: "Invalid topic name",
94
+ };
95
+ }
96
+ if (hasTopicAlias) {
97
+ const topicAlias = packet.properties?.topicAlias;
98
+ const aliasedTopic = ctx.incomingTopicAliases.get(topicAlias);
99
+ if ((topicAlias === 0 || topicAlias > cfg.topicAliasMaximum) ||
100
+ (packet.topic === "" && aliasedTopic === undefined)) {
101
+ return {
102
+ reasonCode: ReasonCode.topicAliasInvalid,
103
+ message: "Invalid topic alias",
104
+ };
105
+ }
106
+ if (packet.topic !== "") {
107
+ ctx.incomingTopicAliases.set(topicAlias, packet.topic);
108
+ }
109
+ else {
110
+ packet.topic = aliasedTopic;
111
+ }
112
+ }
113
+ return null;
114
+ }
18
115
  /**
19
116
  * Handles MQTT PUBLISH packets
20
117
  * @param ctx - The connection context
21
- * @param packet - The PUBLISH packet to process
118
+ * @param extPacket - The PUBLISH packet to process
22
119
  * @returns Promise that resolves when packet is processed
23
120
  * @throws Error if packet processing fails
24
121
  */
25
122
  export async function handlePublish(ctx, packet) {
26
- if (!authorizedToPublish(ctx, packet.topic)) {
123
+ const extPacket = packet;
124
+ const qos = extPacket.qos || 0;
125
+ const id = extPacket.id;
126
+ const validationError = validatePublishPacket(ctx, extPacket);
127
+ if (validationError) {
128
+ return await handlePublishError(ctx, id, qos, validationError.reasonCode, validationError.message);
129
+ }
130
+ if (!await authorizedToPublish(ctx, extPacket.topic)) {
131
+ await handlePublishError(ctx, id, qos, ReasonCode.notAuthorized, `Client not authorized to publish to ${extPacket.topic}`);
27
132
  return;
28
133
  }
29
- const qos = packet.qos || 0;
134
+ if ((extPacket.protocolLevel === 5) &&
135
+ extPacket.properties?.messageExpiryInterval) {
136
+ extPacket.expiresAtMs = Date.now() +
137
+ extPacket.properties.messageExpiryInterval * 1000;
138
+ }
30
139
  if (qos === 0) {
31
- ctx.persistence.publish(packet.topic, packet);
140
+ await ctx.publish(extPacket);
32
141
  return;
33
142
  }
34
- if (packet.id !== undefined) {
35
- // qos 1
36
- if (qos === 1) {
37
- const id = packet.id; // retain the id
38
- ctx.persistence.publish(packet.topic, packet);
39
- await ctx.send({
40
- type: PacketType.puback,
41
- protocolLevel: ctx.protocolLevel,
42
- id,
43
- });
44
- return;
45
- }
46
- /*
47
- In the QoS 2 delivery protocol, the Receiver
48
-
49
- - MUST respond with a PUBREC containing the Packet Identifier from the incoming PUBLISH Packet,
50
- having accepted ownership of the Application Message.
51
- - Until it has received the corresponding PUBREL packet, the Receiver MUST acknowledge any subsequent
52
- PUBLISH packet with the same Packet Identifier by sending a PUBREC. It MUST NOT cause duplicate
53
- messages to be delivered to any onward recipients in this case.
54
- - MUST respond to a PUBREL packet by sending a PUBCOMP packet containing the same Packet Identifier as the PUBREL.
55
- - After it has sent a PUBCOMP, the receiver MUST treat any subsequent PUBLISH packet that contains that Packet
56
- Identifier as being a new publication.
57
- [MQTT-4.3.3-2].
58
- */
59
- if (ctx.store) {
60
- if (!ctx.store.pendingIncoming.has(packet.id)) {
61
- ctx.store.pendingIncoming.set(packet.id, packet);
62
- ctx.persistence.publish(packet.topic, packet);
63
- }
64
- await ctx.send({
65
- type: PacketType.pubrec,
66
- protocolLevel: ctx.protocolLevel,
67
- id: packet.id,
68
- });
69
- }
143
+ // qos 1
144
+ if (qos === 1) {
145
+ // publish the packet
146
+ await ctx.publish(extPacket);
147
+ // send the pubAck
148
+ await ctx.send({
149
+ type: PacketType.puback,
150
+ protocolLevel: ctx.protocolLevel,
151
+ id: id,
152
+ });
153
+ return;
70
154
  }
155
+ /*
156
+ In the QoS 2 delivery protocol, the Receiver
157
+
158
+ - MUST respond with a PUBREC containing the Packet Identifier from the incoming PUBLISH Packet,
159
+ having accepted ownership of the Application Message.
160
+ - Until it has received the corresponding PUBREL packet, the Receiver MUST acknowledge any subsequent
161
+ PUBLISH packet with the same Packet Identifier by sending a PUBREC. It MUST NOT cause duplicate
162
+ messages to be delivered to any onward recipients in this case.
163
+ - MUST respond to a PUBREL packet by sending a PUBCOMP packet containing the same Packet Identifier as the PUBREL.
164
+ - After it has sent a PUBCOMP, the receiver MUST treat any subsequent PUBLISH packet that contains that Packet
165
+ Identifier as being a new publication.
166
+ [MQTT-4.3.3-2].
167
+ */
168
+ // we take responsibility for the packet
169
+ await ctx.persistence.addPendingIncomingPacket(ctx.clientId, extPacket);
170
+ await ctx.send({
171
+ type: PacketType.pubrec,
172
+ protocolLevel: ctx.protocolLevel,
173
+ id: id,
174
+ });
71
175
  }
72
176
  //# sourceMappingURL=handlePublish.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlePublish.js","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,GAAY,EAAE,KAAY;IACrD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,MAAqB;IAErB,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC5B,QAAQ;QACR,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,gBAAgB;YACtC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,MAAM;gBACvB,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,EAAE;aACH,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED;;;;;;;;;;;;UAYE;QACF,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACjD,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,GAAG,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,MAAM;gBACvB,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,EAAE,EAAE,MAAM,CAAC,EAAE;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"handlePublish.js","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handlePubrec.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"handlePubrec.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -12,9 +12,8 @@ import { PacketType } from "../deps.js";
12
12
  */
13
13
  export async function handlePubrec(ctx, packet) {
14
14
  const id = packet.id;
15
- if (ctx.store?.pendingOutgoing.has(id)) {
16
- ctx.store.pendingOutgoing.delete(id);
17
- ctx.store.pendingAckOutgoing.add(id);
15
+ if (await ctx.processAck(id)) {
16
+ await ctx.persistence.addPendingAck(ctx.clientId, id);
18
17
  await ctx.send({
19
18
  type: PacketType.pubrel,
20
19
  protocolLevel: ctx.protocolLevel,
@@ -1 +1 @@
1
- {"version":3,"file":"handlePubrec.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,EAAE;SACH,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"handlePubrec.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,MAAM,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,QAAS,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,GAAG,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,EAAE;SACH,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"handlePubrel.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"handlePubrel.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -13,8 +13,12 @@ import { PacketType } from "../deps.js";
13
13
  */
14
14
  export async function handlePubrel(ctx, packet) {
15
15
  const id = packet.id;
16
- if (ctx.store?.pendingIncoming.has(id)) {
17
- ctx.store.pendingIncoming.delete(id);
16
+ const storedPacket = await ctx.persistence.getPendingIncomingPacket(ctx.clientId, id);
17
+ if (storedPacket) {
18
+ // packet is in store
19
+ // publish the packet
20
+ await ctx.publish(storedPacket);
21
+ await ctx.persistence.deletePendingIncomingPacket(ctx.clientId, id);
18
22
  }
19
23
  await ctx.send({
20
24
  type: PacketType.pubcomp,
@@ -1 +1 @@
1
- {"version":3,"file":"handlePubrel.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,OAAO;QACxB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,EAAE;KACH,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"handlePubrel.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAErB,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,wBAAwB,CACjE,GAAG,CAAC,QAAS,EACb,EAAE,CACH,CAAC;IAEF,IAAI,YAAY,EAAE,CAAC;QACjB,qBAAqB;QACrB,qBAAqB;QACrB,MAAM,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,GAAG,CAAC,WAAW,CAAC,2BAA2B,CAAC,GAAG,CAAC,QAAS,EAAE,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,OAAO;QACxB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,EAAE;KACH,CAAC,CAAC;AACL,CAAC"}
@@ -1,12 +1,7 @@
1
1
  import type { Context } from "../context.ts";
2
2
  import type { SubscribePacket } from "../deps.ts";
3
3
  /**
4
- * @function handleSubscribe
5
- * @description Processes an MQTT SUBSCRIBE packet
6
- * @param {Context} ctx - The connection context
7
- * @param {SubscribePacket} packet - The SUBSCRIBE packet received from the client
8
- * @returns {Promise<void>}
9
- * @throws {Error} If subscription processing fails
4
+ * Processes an MQTT SUBSCRIBE packet.
10
5
  * @remarks The order of return codes in the SUBACK Packet MUST match the order of Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1]
11
6
  */
12
7
  export declare function handleSubscribe(ctx: Context, packet: SubscribePacket): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"handleSubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAuB,MAAM,YAAY,CAAC;AAqBvE;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
1
+ {"version":3,"file":"handleSubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,OAAO,KAAK,EAGV,eAAe,EAGhB,MAAM,YAAY,CAAC;AAsEpB;;;GAGG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA0Ff"}
@@ -1,58 +1,119 @@
1
- import { PacketType } from "../deps.js";
1
+ import { SessionState } from "../context.js";
2
+ import { hasWildcards, invalidmaxTopicLevels, invalidTopicFilter, joinTopicFilter, logger, PacketType, parseTopicFilter, ReasonCode, } from "../deps.js";
3
+ // V4 Subscription Failure
4
+ const V4SubscriptionFailure = 0x80;
2
5
  /**
3
- * @constant {number} SubscriptionFailure
4
- * @description Code indicating a failed subscription attempt
6
+ * Checks if a client is authorized to subscribe to a topic.
5
7
  */
6
- const SubscriptionFailure = 0x80;
8
+ async function authorizedToSubscribe(ctx, topicFilter, shareName) {
9
+ if (ctx.state === SessionState.authenticating) {
10
+ return false;
11
+ }
12
+ try {
13
+ if (ctx.handlers.isAuthorizedToSubscribe) {
14
+ return await ctx.handlers.isAuthorizedToSubscribe(ctx, topicFilter, shareName);
15
+ }
16
+ }
17
+ catch (err) {
18
+ let message = "unknown error";
19
+ if (err instanceof Error) {
20
+ message = err.message;
21
+ }
22
+ logger.error("isAuthorizedToSubscribe failed with error", message);
23
+ return false;
24
+ }
25
+ return true;
26
+ }
7
27
  /**
8
- * Checks if a client is authorized to subscribe to a topic
9
- * @param ctx - The connection context
10
- * @param topicFilter - The topic filter to check authorization for
11
- * @returns True if authorized, false otherwise
28
+ * Validates a single subscription topic filter against server configuration.
29
+ * Returns an error ReasonCode if invalid, or null if valid.
12
30
  */
13
- function authorizedToSubscribe(ctx, topicFilter) {
14
- if (ctx.handlers.isAuthorizedToSubscribe) {
15
- return ctx.handlers.isAuthorizedToSubscribe(ctx, topicFilter);
31
+ function validateSubscription(isProtocolV5, sub, cfg) {
32
+ if (cfg.wildcardSubscriptionAvailable === false && hasWildcards(sub.topicFilter)) {
33
+ return ReasonCode.wildcardSubscriptionsNotSupported;
16
34
  }
17
- return true;
35
+ if (sub.shareName !== "") {
36
+ if (cfg.sharedSubscriptionAvailable === false || !isProtocolV5) {
37
+ return ReasonCode.sharedSubscriptionsNotSupported;
38
+ }
39
+ // noLocal is not allowed on shared subscriptions
40
+ if (sub.noLocal) {
41
+ return ReasonCode.topicFilterInvalid;
42
+ }
43
+ }
44
+ if (sub.topicFilter.length === 0 ||
45
+ invalidTopicFilter(sub.topicFilter) ||
46
+ invalidmaxTopicLevels(sub.topicFilter, cfg.maxTopicLevels)) {
47
+ return ReasonCode.topicFilterInvalid;
48
+ }
49
+ return null;
18
50
  }
19
51
  /**
20
- * @function handleSubscribe
21
- * @description Processes an MQTT SUBSCRIBE packet
22
- * @param {Context} ctx - The connection context
23
- * @param {SubscribePacket} packet - The SUBSCRIBE packet received from the client
24
- * @returns {Promise<void>}
25
- * @throws {Error} If subscription processing fails
52
+ * Processes an MQTT SUBSCRIBE packet.
26
53
  * @remarks The order of return codes in the SUBACK Packet MUST match the order of Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1]
27
54
  */
28
55
  export async function handleSubscribe(ctx, packet) {
29
- /*
30
- * The order of return codes in the SUBACK Packet MUST match the order of
31
- * Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1].
32
- */
33
- const validSubscriptions = [];
34
- const returnCodes = packet.subscriptions.map((sub) => {
35
- if (ctx.store) {
36
- if (!authorizedToSubscribe(ctx, sub.topicFilter)) {
37
- return SubscriptionFailure;
56
+ const cfg = ctx.config.context;
57
+ const isProtocolV5 = packet.protocolLevel === 5;
58
+ const subscriptionIdentifier = isProtocolV5
59
+ ? packet.properties?.subscriptionIdentifier
60
+ : undefined;
61
+ // Pre-fetch existing subscriptions to evaluate Retain Handling logic (retainHandling === 1)
62
+ const existingTopicFilters = new Set();
63
+ for await (const sub of ctx.persistence.listSubscriptions(ctx.clientId)) {
64
+ existingTopicFilters.add(joinTopicFilter(sub.topicFilter, sub.shareName));
65
+ }
66
+ const retainedSubscriptions = [];
67
+ const results = [];
68
+ for (const sub of packet.subscriptions) {
69
+ const clientSub = sub;
70
+ // split topicFilter into topicFilter and shareName
71
+ const { topicFilter, shareName } = parseTopicFilter(sub.topicFilter);
72
+ clientSub.topicFilter = topicFilter;
73
+ clientSub.shareName = shareName;
74
+ // TopicFilter Validation
75
+ const validationError = validateSubscription(isProtocolV5, clientSub, cfg);
76
+ if (validationError !== null) {
77
+ if (!isProtocolV5) {
78
+ await ctx.close(false);
79
+ return;
38
80
  }
39
- ctx.persistence.subscribe(ctx.store, sub.topicFilter, sub.qos);
40
- validSubscriptions.push(sub);
41
- return sub.qos;
81
+ results.push(validationError);
82
+ continue;
42
83
  }
43
- return SubscriptionFailure;
44
- });
84
+ // Authorization Check
85
+ if (!await authorizedToSubscribe(ctx, clientSub.topicFilter, clientSub.shareName)) {
86
+ results.push(isProtocolV5 ? ReasonCode.notAuthorized : V4SubscriptionFailure);
87
+ continue;
88
+ }
89
+ // Register Subscription
90
+ const filterKey = sub.topicFilter;
91
+ const isNewSubscription = !existingTopicFilters.has(filterKey);
92
+ if (subscriptionIdentifier) {
93
+ clientSub.subscriptionIdentifier = subscriptionIdentifier;
94
+ }
95
+ await ctx.persistence.subscribe(ctx.clientId, clientSub);
96
+ existingTopicFilters.add(filterKey);
97
+ // Collect Subscriptions Requiring Retained Messages
98
+ if (clientSub.retainHandling !== 2 &&
99
+ (clientSub.retainHandling !== 1 || isNewSubscription)) {
100
+ retainedSubscriptions.push(clientSub);
101
+ }
102
+ // Success code (Granted QoS)
103
+ results.push(sub.qos);
104
+ }
105
+ // Send SUBACK response
45
106
  await ctx.send({
46
107
  type: PacketType.suback,
47
108
  protocolLevel: ctx.protocolLevel,
48
109
  id: packet.id,
49
- returnCodes: returnCodes,
110
+ ...(isProtocolV5
111
+ ? { reasonCodes: results }
112
+ : { returnCodes: results }),
50
113
  });
51
- /*
52
- * send any retained messages that match these subscriptions
53
- */
54
- if (ctx.store) {
55
- ctx.persistence.handleRetained(ctx.store.clientId);
114
+ // Dispatch matching retained messages
115
+ if (retainedSubscriptions.length > 0) {
116
+ await ctx.persistence.handleRetained(ctx.clientId, retainedSubscriptions);
56
117
  }
57
118
  }
58
119
  //# sourceMappingURL=handleSubscribe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleSubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,WAAkB;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAY,EACZ,MAAuB;IAEvB;;;OAGG;IACH,MAAM,kBAAkB,GAAmB,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YACD,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/D,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,MAAM;QACvB,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"handleSubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"handleUnsubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAWf"}
1
+ {"version":3,"file":"handleUnsubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAe,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
@@ -1,4 +1,5 @@
1
- import { PacketType } from "../deps.js";
1
+ import { joinTopicFilter, PacketType, parseTopicFilter, ReasonCode, } from "../deps.js";
2
+ import { SessionState } from "../context.js";
2
3
  /**
3
4
  * Handles MQTT unsubscribe packets by removing subscriptions and sending acknowledgement
4
5
  * @param ctx - The connection context containing client information and methods
@@ -6,15 +7,29 @@ import { PacketType } from "../deps.js";
6
7
  * @returns Promise that resolves when unsubscribe is complete and acknowledged
7
8
  */
8
9
  export async function handleUnsubscribe(ctx, packet) {
9
- for (const topic of packet.topicFilters) {
10
- if (ctx.store) {
11
- ctx.persistence.unsubscribe(ctx.store, topic);
10
+ // this is v5 only, no unsubscriptions while reauthenticating
11
+ const isAuthenticating = ctx.state === SessionState.authenticating;
12
+ const subscriptions = new Set();
13
+ for await (const sub of ctx.persistence.listSubscriptions(ctx.clientId)) {
14
+ subscriptions.add(joinTopicFilter(sub.topicFilter, sub.shareName));
15
+ }
16
+ const reasonCodes = [];
17
+ for (const packetTopicFilter of packet.topicFilters) {
18
+ // split topicFilter into topicFilter and shareName
19
+ const { topicFilter, shareName } = parseTopicFilter(packetTopicFilter);
20
+ if (subscriptions.has(packetTopicFilter) && !isAuthenticating) {
21
+ reasonCodes.push(ReasonCode.success);
22
+ await ctx.persistence.unsubscribe(ctx.clientId, topicFilter, shareName);
23
+ }
24
+ else {
25
+ reasonCodes.push(ReasonCode.noSubscriptionExisted);
12
26
  }
13
27
  }
14
28
  await ctx.send({
15
29
  type: PacketType.unsuback,
16
30
  id: packet.id,
17
31
  protocolLevel: ctx.protocolLevel,
32
+ reasonCodes,
18
33
  });
19
34
  }
20
35
  //# sourceMappingURL=handleUnsubscribe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleUnsubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,MAAyB;IAEzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,aAAa,EAAE,GAAG,CAAC,aAAa;KACjC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"handleUnsubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,UAAU,EACV,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,MAAyB;IAEzB,6DAA6D;IAC7D,MAAM,gBAAgB,GAAG,GAAG,CAAC,KAAK,KAAK,YAAY,CAAC,cAAc,CAAC;IAEnE,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAS,CAAC,EAAE,CAAC;QACzE,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,WAAW,GAAkB,EAAE,CAAC;IAEtC,KAAK,MAAM,iBAAiB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACpD,mDAAmD;QACnD,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,gBAAgB,CACjD,iBAAiB,CAClB,CAAC;QACF,IAAI,aAAa,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9D,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,QAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,WAAW;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -2,10 +2,10 @@
2
2
  * This module provides an MQTT Server interface see the /bin folder for examples
3
3
  * @module
4
4
  */
5
- export { AuthenticationResult } from "./deps.ts";
6
- export type { IPersistence, SockConn, TAuthenticationResult, Topic, } from "./deps.ts";
5
+ export { ReasonCode } from "./deps.ts";
6
+ export type { ConnectPacket, IPersistence, ShareName, SockConn, Topic, } from "./deps.ts";
7
7
  export { MqttServer } from "./server.ts";
8
8
  export type { MqttServerOptions } from "./server.ts";
9
9
  export { Context } from "./context.ts";
10
- export type { Handlers } from "./context.ts";
10
+ export type { AuthenticatedResult, Handlers } from "./context.ts";
11
11
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,aAAa,EACb,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * This module provides an MQTT Server interface see the /bin folder for examples
3
3
  * @module
4
4
  */
5
- export { AuthenticationResult } from "./deps.js";
5
+ export { ReasonCode } from "./deps.js";
6
6
  export { MqttServer } from "./server.js";
7
7
  export { Context } from "./context.js";
8
8
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAOjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAQvC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}