@seriousme/opifex 1.11.3 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +99 -40
  2. package/bin/conformanceServer.ts +45 -13
  3. package/bin/demoServer.ts +38 -13
  4. package/bin/mqtt.ts +2 -2
  5. package/client/ConnectionState.ts +2 -0
  6. package/client/client.ts +51 -41
  7. package/client/context.ts +75 -21
  8. package/client/deps.ts +4 -0
  9. package/client/handlers/handleAuth.test.ts +193 -0
  10. package/client/handlers/handleAuth.ts +89 -0
  11. package/client/handlers/handleConnack.test.ts +173 -0
  12. package/client/handlers/handleConnack.ts +16 -6
  13. package/client/handlers/handleDisconnect.test.ts +22 -0
  14. package/client/handlers/handleDisconnect.ts +17 -0
  15. package/client/handlers/handlePacket.test.ts +242 -0
  16. package/client/handlers/handlePacket.ts +19 -5
  17. package/client/handlers/handlePuback.test.ts +99 -0
  18. package/client/handlers/handlePuback.ts +6 -0
  19. package/client/handlers/handlePubcomp.test.ts +112 -0
  20. package/client/handlers/handlePubcomp.ts +5 -0
  21. package/client/handlers/handlePublish.test.ts +188 -0
  22. package/client/handlers/handlePubrec.test.ts +119 -0
  23. package/client/handlers/handlePubrec.ts +5 -1
  24. package/client/handlers/handlePubrel.test.ts +136 -0
  25. package/client/handlers/handleSuback.test.ts +122 -0
  26. package/client/handlers/handleSuback.ts +3 -0
  27. package/client/handlers/handleUnsuback.test.ts +101 -0
  28. package/client/mod.ts +1 -1
  29. package/client/store/memoryStore.ts +2 -2
  30. package/client/store/store.ts +3 -1
  31. package/deno/README.md +1 -2
  32. package/deno/tcpClient.test.ts +75 -0
  33. package/deno/tcpClient.ts +16 -11
  34. package/deno/tcpServer.test.ts +22 -21
  35. package/deno/tcpServer.ts +5 -0
  36. package/deno/tlsServer.test.ts +97 -0
  37. package/deno/tlsServer.ts +42 -0
  38. package/deno/wsServer.test.ts +93 -0
  39. package/deno/wsServer.ts +73 -0
  40. package/dev_utils/generateCert.ts +95 -0
  41. package/dev_utils/mockConn.ts +36 -0
  42. package/dev_utils/mockServer.ts +28 -0
  43. package/dev_utils/mod.ts +30 -3
  44. package/dev_utils/packetHelpers.ts +404 -0
  45. package/dev_utils/test-handlers.ts +98 -0
  46. package/dev_utils/timers.ts +14 -0
  47. package/dev_utils/webStreamPair.test.ts +171 -0
  48. package/dev_utils/webStreamPair.ts +143 -0
  49. package/dist/bin/conformanceServer.js +17 -12
  50. package/dist/bin/conformanceServer.js.map +1 -1
  51. package/dist/bin/demoServer.js +16 -12
  52. package/dist/bin/demoServer.js.map +1 -1
  53. package/dist/bin/mqtt.js +2 -2
  54. package/dist/bin/mqtt.js.map +1 -1
  55. package/dist/client/ConnectionState.d.ts +2 -0
  56. package/dist/client/ConnectionState.d.ts.map +1 -1
  57. package/dist/client/ConnectionState.js +2 -0
  58. package/dist/client/ConnectionState.js.map +1 -1
  59. package/dist/client/client.d.ts +13 -16
  60. package/dist/client/client.d.ts.map +1 -1
  61. package/dist/client/client.js +34 -20
  62. package/dist/client/client.js.map +1 -1
  63. package/dist/client/context.d.ts +11 -3
  64. package/dist/client/context.d.ts.map +1 -1
  65. package/dist/client/context.js +44 -12
  66. package/dist/client/context.js.map +1 -1
  67. package/dist/client/deps.d.ts +3 -2
  68. package/dist/client/deps.d.ts.map +1 -1
  69. package/dist/client/deps.js +1 -1
  70. package/dist/client/deps.js.map +1 -1
  71. package/dist/client/handlers/handleAuth.d.ts +9 -0
  72. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  73. package/dist/client/handlers/handleAuth.js +66 -0
  74. package/dist/client/handlers/handleAuth.js.map +1 -0
  75. package/dist/client/handlers/handleConnack.d.ts +2 -2
  76. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  77. package/dist/client/handlers/handleConnack.js +16 -6
  78. package/dist/client/handlers/handleConnack.js.map +1 -1
  79. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  80. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  81. package/dist/client/handlers/handleDisconnect.js +15 -0
  82. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  83. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  84. package/dist/client/handlers/handlePacket.js +14 -3
  85. package/dist/client/handlers/handlePacket.js.map +1 -1
  86. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  87. package/dist/client/handlers/handlePuback.js +5 -0
  88. package/dist/client/handlers/handlePuback.js.map +1 -1
  89. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.js +5 -0
  91. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  92. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  93. package/dist/client/handlers/handlePubrec.js +5 -1
  94. package/dist/client/handlers/handlePubrec.js.map +1 -1
  95. package/dist/client/handlers/handleSuback.d.ts +1 -0
  96. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  97. package/dist/client/handlers/handleSuback.js +3 -0
  98. package/dist/client/handlers/handleSuback.js.map +1 -1
  99. package/dist/client/mod.d.ts +1 -1
  100. package/dist/client/mod.d.ts.map +1 -1
  101. package/dist/client/mod.js +1 -1
  102. package/dist/client/mod.js.map +1 -1
  103. package/dist/client/store/memoryStore.d.ts.map +1 -1
  104. package/dist/client/store/memoryStore.js +2 -2
  105. package/dist/client/store/memoryStore.js.map +1 -1
  106. package/dist/client/store/store.d.ts +2 -1
  107. package/dist/client/store/store.d.ts.map +1 -1
  108. package/dist/client/store/store.js +1 -1
  109. package/dist/client/store/store.js.map +1 -1
  110. package/dist/dev_utils/generateCert.d.ts +11 -0
  111. package/dist/dev_utils/generateCert.d.ts.map +1 -0
  112. package/dist/dev_utils/generateCert.js +76 -0
  113. package/dist/dev_utils/generateCert.js.map +1 -0
  114. package/dist/examples/authHandler.test.d.ts +2 -0
  115. package/dist/examples/authHandler.test.d.ts.map +1 -0
  116. package/dist/examples/authHandler.test.js +123 -0
  117. package/dist/examples/authHandler.test.js.map +1 -0
  118. package/dist/examples/mqtt.test.d.ts +2 -0
  119. package/dist/examples/mqtt.test.d.ts.map +1 -0
  120. package/dist/examples/mqtt.test.js +70 -0
  121. package/dist/examples/mqtt.test.js.map +1 -0
  122. package/dist/examples/mqtts.test.d.ts +2 -0
  123. package/dist/examples/mqtts.test.d.ts.map +1 -0
  124. package/dist/examples/mqtts.test.js +81 -0
  125. package/dist/examples/mqtts.test.js.map +1 -0
  126. package/dist/mqttConn/mqttConn.d.ts +23 -15
  127. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  128. package/dist/mqttConn/mqttConn.js +56 -35
  129. package/dist/mqttConn/mqttConn.js.map +1 -1
  130. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  131. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  132. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  133. package/dist/mqttPacket/Properties.d.ts +2 -2
  134. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  135. package/dist/mqttPacket/Properties.js.map +1 -1
  136. package/dist/mqttPacket/ReasonCode.d.ts +1 -0
  137. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  138. package/dist/mqttPacket/ReasonCode.js +1 -0
  139. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  140. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  141. package/dist/mqttPacket/auth.d.ts +3 -5
  142. package/dist/mqttPacket/auth.d.ts.map +1 -1
  143. package/dist/mqttPacket/auth.js +31 -30
  144. package/dist/mqttPacket/auth.js.map +1 -1
  145. package/dist/mqttPacket/codec.d.ts +48 -0
  146. package/dist/mqttPacket/codec.d.ts.map +1 -0
  147. package/dist/mqttPacket/codec.js +93 -0
  148. package/dist/mqttPacket/codec.js.map +1 -0
  149. package/dist/mqttPacket/connack.d.ts +4 -5
  150. package/dist/mqttPacket/connack.d.ts.map +1 -1
  151. package/dist/mqttPacket/connack.js +43 -45
  152. package/dist/mqttPacket/connack.js.map +1 -1
  153. package/dist/mqttPacket/connect.d.ts +4 -5
  154. package/dist/mqttPacket/connect.d.ts.map +1 -1
  155. package/dist/mqttPacket/connect.js +156 -157
  156. package/dist/mqttPacket/connect.js.map +1 -1
  157. package/dist/mqttPacket/decoder.d.ts +1 -13
  158. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  159. package/dist/mqttPacket/decoder.js +6 -27
  160. package/dist/mqttPacket/decoder.js.map +1 -1
  161. package/dist/mqttPacket/disconnect.d.ts +4 -5
  162. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  163. package/dist/mqttPacket/disconnect.js +41 -43
  164. package/dist/mqttPacket/disconnect.js.map +1 -1
  165. package/dist/mqttPacket/encoder.d.ts +1 -15
  166. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  167. package/dist/mqttPacket/encoder.js +4 -27
  168. package/dist/mqttPacket/encoder.js.map +1 -1
  169. package/dist/mqttPacket/mod.d.ts +21 -103
  170. package/dist/mqttPacket/mod.d.ts.map +1 -1
  171. package/dist/mqttPacket/mod.js +5 -94
  172. package/dist/mqttPacket/mod.js.map +1 -1
  173. package/dist/mqttPacket/pingreq.d.ts +4 -5
  174. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  175. package/dist/mqttPacket/pingreq.js +11 -13
  176. package/dist/mqttPacket/pingreq.js.map +1 -1
  177. package/dist/mqttPacket/pingres.d.ts +4 -5
  178. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  179. package/dist/mqttPacket/pingres.js +11 -13
  180. package/dist/mqttPacket/pingres.js.map +1 -1
  181. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  182. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  183. package/dist/mqttPacket/protocolLevels.js +5 -1
  184. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  185. package/dist/mqttPacket/pubblishAcks.d.ts +4 -5
  186. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  187. package/dist/mqttPacket/pubblishAcks.js +43 -45
  188. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  189. package/dist/mqttPacket/publish.d.ts +5 -5
  190. package/dist/mqttPacket/publish.d.ts.map +1 -1
  191. package/dist/mqttPacket/publish.js +53 -55
  192. package/dist/mqttPacket/publish.js.map +1 -1
  193. package/dist/mqttPacket/suback.d.ts +4 -5
  194. package/dist/mqttPacket/suback.d.ts.map +1 -1
  195. package/dist/mqttPacket/suback.js +38 -40
  196. package/dist/mqttPacket/suback.js.map +1 -1
  197. package/dist/mqttPacket/subscribe.d.ts +36 -7
  198. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  199. package/dist/mqttPacket/subscribe.js +90 -89
  200. package/dist/mqttPacket/subscribe.js.map +1 -1
  201. package/dist/mqttPacket/types.d.ts +1 -8
  202. package/dist/mqttPacket/types.d.ts.map +1 -1
  203. package/dist/mqttPacket/unsuback.d.ts +4 -5
  204. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  205. package/dist/mqttPacket/unsuback.js +32 -34
  206. package/dist/mqttPacket/unsuback.js.map +1 -1
  207. package/dist/mqttPacket/unsubscribe.d.ts +23 -6
  208. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  209. package/dist/mqttPacket/unsubscribe.js +45 -44
  210. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  211. package/dist/mqttPacket/validators.d.ts +4 -16
  212. package/dist/mqttPacket/validators.d.ts.map +1 -1
  213. package/dist/mqttPacket/validators.js +5 -26
  214. package/dist/mqttPacket/validators.js.map +1 -1
  215. package/dist/node/tcpClient.d.ts +1 -1
  216. package/dist/node/tcpClient.d.ts.map +1 -1
  217. package/dist/node/tcpClient.js +12 -7
  218. package/dist/node/tcpClient.js.map +1 -1
  219. package/dist/node/tcpServer.d.ts.map +1 -1
  220. package/dist/node/tcpServer.js +4 -0
  221. package/dist/node/tcpServer.js.map +1 -1
  222. package/dist/node/tlsServer.d.ts +19 -0
  223. package/dist/node/tlsServer.d.ts.map +1 -0
  224. package/dist/node/tlsServer.js +58 -0
  225. package/dist/node/tlsServer.js.map +1 -0
  226. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  227. package/dist/node/wrapNodeSocket.js +6 -28
  228. package/dist/node/wrapNodeSocket.js.map +1 -1
  229. package/dist/persistence/basicPersistence.d.ts +36 -0
  230. package/dist/persistence/basicPersistence.d.ts.map +1 -0
  231. package/dist/persistence/basicPersistence.js +306 -0
  232. package/dist/persistence/basicPersistence.js.map +1 -0
  233. package/dist/persistence/deps.d.ts +3 -2
  234. package/dist/persistence/deps.d.ts.map +1 -1
  235. package/dist/persistence/deps.js +2 -1
  236. package/dist/persistence/deps.js.map +1 -1
  237. package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
  238. package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
  239. package/dist/persistence/memory/memoryPersistence.js +12 -115
  240. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  241. package/dist/persistence/memory/memoryStorage.d.ts +45 -0
  242. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
  243. package/dist/persistence/memory/memoryStorage.js +143 -0
  244. package/dist/persistence/memory/memoryStorage.js.map +1 -0
  245. package/dist/persistence/mod.d.ts +3 -3
  246. package/dist/persistence/mod.d.ts.map +1 -1
  247. package/dist/persistence/mod.js +6 -1
  248. package/dist/persistence/mod.js.map +1 -1
  249. package/dist/persistence/persistence.d.ts +44 -69
  250. package/dist/persistence/persistence.d.ts.map +1 -1
  251. package/dist/persistence/persistence.js +1 -2
  252. package/dist/persistence/persistence.js.map +1 -1
  253. package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
  254. package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
  255. package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
  256. package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
  257. package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
  258. package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
  259. package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
  260. package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
  261. package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
  262. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
  263. package/dist/persistence/sqlite/sqliteStorage.js +194 -0
  264. package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
  265. package/dist/persistence/storage.d.ts +38 -0
  266. package/dist/persistence/storage.d.ts.map +1 -0
  267. package/dist/persistence/storage.js +5 -0
  268. package/dist/persistence/storage.js.map +1 -0
  269. package/dist/server/config.d.ts +47 -0
  270. package/dist/server/config.d.ts.map +1 -0
  271. package/dist/server/config.js +41 -0
  272. package/dist/server/config.js.map +1 -0
  273. package/dist/server/context.d.ts +198 -24
  274. package/dist/server/context.d.ts.map +1 -1
  275. package/dist/server/context.js +432 -53
  276. package/dist/server/context.js.map +1 -1
  277. package/dist/server/deps.d.ts +5 -6
  278. package/dist/server/deps.d.ts.map +1 -1
  279. package/dist/server/deps.js +2 -2
  280. package/dist/server/deps.js.map +1 -1
  281. package/dist/server/handlers/completeConnect.d.ts +8 -0
  282. package/dist/server/handlers/completeConnect.d.ts.map +1 -0
  283. package/dist/server/handlers/completeConnect.js +74 -0
  284. package/dist/server/handlers/completeConnect.js.map +1 -0
  285. package/dist/server/handlers/handleAuth.d.ts +9 -0
  286. package/dist/server/handlers/handleAuth.d.ts.map +1 -0
  287. package/dist/server/handlers/handleAuth.js +69 -0
  288. package/dist/server/handlers/handleAuth.js.map +1 -0
  289. package/dist/server/handlers/handleConnect.d.ts +2 -4
  290. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  291. package/dist/server/handlers/handleConnect.js +140 -67
  292. package/dist/server/handlers/handleConnect.js.map +1 -1
  293. package/dist/server/handlers/handleDisconnect.d.ts +1 -1
  294. package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
  295. package/dist/server/handlers/handleDisconnect.js +3 -3
  296. package/dist/server/handlers/handleDisconnect.js.map +1 -1
  297. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  298. package/dist/server/handlers/handlePacket.js +19 -6
  299. package/dist/server/handlers/handlePacket.js.map +1 -1
  300. package/dist/server/handlers/handlePuback.d.ts +1 -3
  301. package/dist/server/handlers/handlePuback.d.ts.map +1 -1
  302. package/dist/server/handlers/handlePuback.js +2 -8
  303. package/dist/server/handlers/handlePuback.js.map +1 -1
  304. package/dist/server/handlers/handlePubcomp.d.ts +1 -1
  305. package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
  306. package/dist/server/handlers/handlePubcomp.js +2 -4
  307. package/dist/server/handlers/handlePubcomp.js.map +1 -1
  308. package/dist/server/handlers/handlePublish.d.ts +1 -1
  309. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  310. package/dist/server/handlers/handlePublish.js +149 -45
  311. package/dist/server/handlers/handlePublish.js.map +1 -1
  312. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  313. package/dist/server/handlers/handlePubrec.js +2 -3
  314. package/dist/server/handlers/handlePubrec.js.map +1 -1
  315. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  316. package/dist/server/handlers/handlePubrel.js +6 -2
  317. package/dist/server/handlers/handlePubrel.js.map +1 -1
  318. package/dist/server/handlers/handleSubscribe.d.ts +1 -6
  319. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  320. package/dist/server/handlers/handleSubscribe.js +99 -38
  321. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  322. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  323. package/dist/server/handlers/handleUnsubscribe.js +19 -4
  324. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  325. package/dist/server/mod.d.ts +3 -3
  326. package/dist/server/mod.d.ts.map +1 -1
  327. package/dist/server/mod.js +1 -1
  328. package/dist/server/mod.js.map +1 -1
  329. package/dist/server/server.d.ts +29 -6
  330. package/dist/server/server.d.ts.map +1 -1
  331. package/dist/server/server.js +84 -15
  332. package/dist/server/server.js.map +1 -1
  333. package/dist/socket/socket.d.ts +11 -9
  334. package/dist/socket/socket.d.ts.map +1 -1
  335. package/dist/socket/socket.js +66 -18
  336. package/dist/socket/socket.js.map +1 -1
  337. package/dist/timer/timer.d.ts +32 -0
  338. package/dist/timer/timer.d.ts.map +1 -1
  339. package/dist/timer/timer.js +32 -0
  340. package/dist/timer/timer.js.map +1 -1
  341. package/dist/trie/trie.d.ts +10 -5
  342. package/dist/trie/trie.d.ts.map +1 -1
  343. package/dist/trie/trie.js +61 -41
  344. package/dist/trie/trie.js.map +1 -1
  345. package/dist/utils/assert.d.ts.map +1 -1
  346. package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
  347. package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
  348. package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
  349. package/dist/utils/bufferedAsyncIterable.js.map +1 -0
  350. package/dist/utils/deferred.d.ts.map +1 -1
  351. package/dist/utils/deferred.js.map +1 -1
  352. package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
  353. package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
  354. package/dist/utils/getOrInsertPolyFill.js +12 -0
  355. package/dist/utils/getOrInsertPolyFill.js.map +1 -0
  356. package/dist/utils/logger.d.ts +40 -3
  357. package/dist/utils/logger.d.ts.map +1 -1
  358. package/dist/utils/logger.js +53 -7
  359. package/dist/utils/logger.js.map +1 -1
  360. package/dist/utils/mod.d.ts +6 -1
  361. package/dist/utils/mod.d.ts.map +1 -1
  362. package/dist/utils/mod.js +5 -1
  363. package/dist/utils/mod.js.map +1 -1
  364. package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
  365. package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
  366. package/dist/utils/outboundTopicAliasManager.js +74 -0
  367. package/dist/utils/outboundTopicAliasManager.js.map +1 -0
  368. package/dist/utils/queue.d.ts.map +1 -1
  369. package/dist/utils/topicFilter.d.ts +32 -0
  370. package/dist/utils/topicFilter.d.ts.map +1 -0
  371. package/dist/utils/topicFilter.js +52 -0
  372. package/dist/utils/topicFilter.js.map +1 -0
  373. package/dist/utils/utils.d.ts +2 -0
  374. package/dist/utils/utils.d.ts.map +1 -1
  375. package/dist/utils/utils.js +2 -0
  376. package/dist/utils/utils.js.map +1 -1
  377. package/dist/utils/validators.d.ts +34 -0
  378. package/dist/utils/validators.d.ts.map +1 -0
  379. package/dist/utils/validators.js +61 -0
  380. package/dist/utils/validators.js.map +1 -0
  381. package/dist/web/webSocketStream.d.ts +29 -0
  382. package/dist/web/webSocketStream.d.ts.map +1 -0
  383. package/dist/web/webSocketStream.js +69 -0
  384. package/dist/web/webSocketStream.js.map +1 -0
  385. package/dist/web/wrapWebSocket.d.ts +12 -0
  386. package/dist/web/wrapWebSocket.d.ts.map +1 -0
  387. package/dist/web/wrapWebSocket.js +41 -0
  388. package/dist/web/wrapWebSocket.js.map +1 -0
  389. package/dist/web/wsClient.d.ts +7 -0
  390. package/dist/web/wsClient.d.ts.map +1 -0
  391. package/dist/web/wsClient.js +22 -0
  392. package/dist/web/wsClient.js.map +1 -0
  393. package/dist/web/wsClient.test.d.ts +2 -0
  394. package/dist/web/wsClient.test.d.ts.map +1 -0
  395. package/dist/web/wsClient.test.js +20 -0
  396. package/dist/web/wsClient.test.js.map +1 -0
  397. package/examples/authHandler.test.ts +164 -0
  398. package/examples/mqtt.test.ts +89 -0
  399. package/examples/mqtts.test.ts +100 -0
  400. package/examples/webSocket.test.ts +94 -0
  401. package/mqttConn/mqttConn.test.ts +9 -9
  402. package/mqttConn/mqttConn.ts +76 -44
  403. package/mqttPacket/Properties.ts +6 -3
  404. package/mqttPacket/ReasonCode.ts +2 -1
  405. package/mqttPacket/auth.test.ts +1 -1
  406. package/mqttPacket/auth.ts +41 -48
  407. package/mqttPacket/codec.ts +146 -0
  408. package/mqttPacket/connack.ts +57 -68
  409. package/mqttPacket/connect.test.ts +2 -2
  410. package/mqttPacket/connect.ts +175 -182
  411. package/mqttPacket/decoder.test.ts +0 -39
  412. package/mqttPacket/decoder.ts +8 -35
  413. package/mqttPacket/disconnect.ts +57 -68
  414. package/mqttPacket/encoder.ts +5 -40
  415. package/mqttPacket/mod.ts +48 -200
  416. package/mqttPacket/pingreq.ts +21 -27
  417. package/mqttPacket/pingres.ts +21 -27
  418. package/mqttPacket/protocolLevels.ts +12 -7
  419. package/mqttPacket/pubblishAcks.ts +56 -70
  420. package/mqttPacket/publish.ts +67 -74
  421. package/mqttPacket/suback.ts +48 -58
  422. package/mqttPacket/subscribe.ts +141 -117
  423. package/mqttPacket/types.ts +1 -9
  424. package/mqttPacket/unsuback.ts +46 -58
  425. package/mqttPacket/unsubscribe.ts +74 -63
  426. package/mqttPacket/validators.ts +5 -31
  427. package/node/socket-node-stream.test.ts +322 -0
  428. package/node/socket-node-stream.ts +174 -0
  429. package/node/tcpClient.test.ts +70 -0
  430. package/node/tcpClient.ts +13 -12
  431. package/node/tcpServer.test.ts +24 -20
  432. package/node/tcpServer.ts +6 -0
  433. package/node/tlsServer.test.ts +94 -0
  434. package/node/tlsServer.ts +81 -0
  435. package/node/wrapNodeSocket.ts +7 -30
  436. package/package.json +72 -44
  437. package/persistence/basicPersistence.ts +495 -0
  438. package/persistence/deps.ts +11 -1
  439. package/persistence/memory/memoryPersistence.ts +12 -153
  440. package/persistence/memory/memoryStorage.ts +232 -0
  441. package/persistence/mod.ts +4 -9
  442. package/persistence/persistence.test.ts +24 -0
  443. package/persistence/persistence.testing.ts +1324 -0
  444. package/persistence/persistence.ts +111 -67
  445. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  446. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  447. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  448. package/persistence/sqlite/sqliteStorage.ts +324 -0
  449. package/persistence/storage.ts +84 -0
  450. package/server/config.ts +65 -0
  451. package/server/context.ts +658 -74
  452. package/server/deps.ts +25 -5
  453. package/server/handlers/completeConnect.ts +93 -0
  454. package/server/handlers/duplicate.test.ts +196 -0
  455. package/server/handlers/handleAuth.test.ts +225 -0
  456. package/server/handlers/handleAuth.ts +88 -0
  457. package/server/handlers/handleConnect.test.ts +589 -0
  458. package/server/handlers/handleConnect.ts +201 -86
  459. package/server/handlers/handleConnect.version.test.ts +108 -0
  460. package/server/handlers/handleDisconnect.test.ts +56 -0
  461. package/server/handlers/handleDisconnect.ts +3 -3
  462. package/server/handlers/handlePacket.test.ts +24 -0
  463. package/server/handlers/handlePacket.ts +30 -8
  464. package/server/handlers/handlePingreq.test.ts +29 -0
  465. package/server/handlers/handlePuback.test.ts +28 -0
  466. package/server/handlers/handlePuback.ts +5 -8
  467. package/server/handlers/handlePubcomp.test.ts +28 -0
  468. package/server/handlers/handlePubcomp.ts +5 -4
  469. package/server/handlers/handlePublish.test.ts +471 -0
  470. package/server/handlers/handlePublish.ts +189 -35
  471. package/server/handlers/handlePubrec.test.ts +28 -0
  472. package/server/handlers/handlePubrec.ts +2 -3
  473. package/server/handlers/handlePubrel.test.ts +74 -0
  474. package/server/handlers/handlePubrel.ts +12 -2
  475. package/server/handlers/handleSubscribe.test.ts +971 -0
  476. package/server/handlers/handleSubscribe.ts +158 -39
  477. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  478. package/server/handlers/handleUnsubscribe.ts +29 -5
  479. package/server/handlers/keepalive.test.ts +132 -0
  480. package/server/handlers/session.persistence.test.ts +194 -0
  481. package/server/handlers/will.delivery.test.ts +221 -0
  482. package/server/mod.ts +4 -3
  483. package/server/preconnect.test.ts +151 -0
  484. package/server/server.ts +115 -17
  485. package/socket/socket.test.ts +91 -0
  486. package/socket/socket.ts +81 -34
  487. package/timer/timer.test.ts +4 -7
  488. package/timer/timer.ts +36 -0
  489. package/tools/benchmarks/receiver.ts +51 -0
  490. package/tools/benchmarks/sender.ts +48 -0
  491. package/tools/benchmarks/utils.ts +31 -0
  492. package/tools/mqtt-compat/README.md +130 -0
  493. package/tools/mqtt-compat/broker.ts +52 -0
  494. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  495. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  496. package/trie/trie.test.ts +9 -1
  497. package/trie/trie.ts +70 -45
  498. package/utils/bufferedAsyncIterable.test.ts +92 -0
  499. package/utils/deferred.test.ts +36 -0
  500. package/utils/deferred.ts +0 -1
  501. package/utils/getOrInsertPolyFill.ts +12 -0
  502. package/utils/logger.test.ts +189 -0
  503. package/utils/logger.ts +62 -7
  504. package/utils/mod.ts +15 -1
  505. package/utils/outboundTopicAliasManager.ts +100 -0
  506. package/utils/queue.test.ts +61 -0
  507. package/utils/topicFilter.test.ts +63 -0
  508. package/utils/topicFilter.ts +61 -0
  509. package/utils/utils.ts +3 -0
  510. package/utils/validators.ts +67 -0
  511. package/web/webSocketStream.ts +97 -0
  512. package/web/wrapWebSocket.ts +52 -0
  513. package/web/wsClient.test.ts +26 -0
  514. package/web/wsClient.ts +25 -0
  515. package/benchmarks/receiver.ts +0 -35
  516. package/benchmarks/sender.ts +0 -32
  517. package/benchmarks/utils.ts +0 -9
  518. package/dev_utils/dummyConn.ts +0 -110
  519. package/dev_utils/socketPair.ts +0 -85
  520. package/dist/persistence/store.d.ts +0 -14
  521. package/dist/persistence/store.d.ts.map +0 -1
  522. package/dist/persistence/store.js +0 -2
  523. package/dist/persistence/store.js.map +0 -1
  524. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  525. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  526. package/examples/tcpServer.test.ts +0 -148
  527. package/persistence/memory/memoryPersistence.test.ts +0 -156
  528. package/persistence/store.ts +0 -16
  529. package/server/test/handleConnect.test.ts +0 -122
  530. package/server/test/test-handlers.ts +0 -53
  531. /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Server configuration parameters
3
+ */
4
+ import type { ProtocolLevel } from "./deps.ts";
5
+ export declare const QueueMode: {
6
+ readonly DiscardNewest: 0;
7
+ readonly DiscardOldest: 1;
8
+ };
9
+ export type QueueMode = typeof QueueMode[keyof typeof QueueMode];
10
+ export declare const defaultConfiguration: {
11
+ context: {
12
+ maxInflightMessages: number;
13
+ maxQueuedMessages: number;
14
+ maxSessionExpiryInterval: number;
15
+ maximumConnectPacketSize: number;
16
+ maximumIncomingPacketSize: number;
17
+ maximumOutgoingPacketSize: number;
18
+ maximumQos: number;
19
+ maxTopicLevels: number;
20
+ preconnectTimeoutMs: number;
21
+ protocols: ProtocolLevel[];
22
+ provideReasonStrings: boolean;
23
+ queueStrategy: 0;
24
+ receiveMaximum: number;
25
+ retainAvailable: boolean;
26
+ serverKeepAlive: number;
27
+ sharedSubscriptionAvailable: boolean;
28
+ subscriptionIdentifierAvailable: boolean;
29
+ topicAliasMaximum: number;
30
+ wildcardSubscriptionAvailable: boolean;
31
+ };
32
+ };
33
+ type DefaultContext = typeof defaultConfiguration.context;
34
+ type BaseContext = Omit<DefaultContext, "sessionExpiryInterval" | "queueStrategy"> & {
35
+ maxSessionExpiryInterval: number | undefined;
36
+ queueStrategy: QueueMode;
37
+ };
38
+ type ContextInput = Partial<BaseContext>;
39
+ export type Configuration = {
40
+ context: BaseContext;
41
+ };
42
+ export type ConfigurationInput = {
43
+ context?: ContextInput;
44
+ };
45
+ export declare function createConfiguration(input?: ConfigurationInput): Configuration;
46
+ export {};
47
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../server/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/C,eAAO,MAAM,SAAS;aACpB,aAAa,EAAE,CAAC;aAChB,aAAa,EAAE,CAAC;CACR,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAEjE,eAAO,MAAM,oBAAoB;IAC/B,OAAO;QACL,mBAAmB;QACnB,iBAAiB;QACjB,wBAAwB;QACxB,wBAAwB;QACxB,yBAAyB;QACzB,yBAAyB;QACzB,UAAU;QACV,cAAc;QACd,mBAAmB;QACnB,SAAS;QACT,oBAAoB;QACpB,aAAa;QACb,cAAc;QACd,eAAe;QACf,eAAe;QACf,2BAA2B;QAC3B,+BAA+B;QAC/B,iBAAiB;QACjB,6BAA6B;;CAEhC,CAAC;AAEF,KAAK,cAAc,GAAG,OAAO,oBAAoB,CAAC,OAAO,CAAC;AAC1D,KAAK,WAAW,GACZ,IAAI,CAAC,cAAc,EAAE,uBAAuB,GAAG,eAAe,CAAC,GAC/D;IACA,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,aAAa,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEJ,KAAK,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAGF,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAO7E"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Server configuration parameters
3
+ */
4
+ import { MQTTLevel } from "./deps.js";
5
+ export const QueueMode = {
6
+ DiscardNewest: 0, // when maxQueued messages has been reached do not accept new ones
7
+ DiscardOldest: 1, // when maxQueued messages has been reached discard the oldest message to make room
8
+ };
9
+ export const defaultConfiguration = {
10
+ context: {
11
+ maxInflightMessages: 20, // max number of messages sent to a client waiting for puback or pubcomp
12
+ maxQueuedMessages: 1000, // max number of messages in-store per client
13
+ maxSessionExpiryInterval: 86400, // 1 day
14
+ maximumConnectPacketSize: 4000, // max size on Connect packets, keep this resonably small to avoid risk on DoS
15
+ maximumIncomingPacketSize: 4000, // max size for other incoming packets
16
+ maximumOutgoingPacketSize: 4000, // max size for all outgoing packets
17
+ maximumQos: 2, // maximum QoS level accepted by the server
18
+ maxTopicLevels: 50, // topic levels on Topics and TopicFilters, keep this resonably small to avoid risk on DoS
19
+ preconnectTimeoutMs: 3000, // if the client does not complete connect within this time, hangup
20
+ protocols: [MQTTLevel.v4, MQTTLevel.v5],
21
+ provideReasonStrings: false, // provide reasonStrings in ack and disconnect messages
22
+ queueStrategy: QueueMode.DiscardNewest, // see definition of QueueMode
23
+ receiveMaximum: 20, // maximum incoming messages on the server per client waiting for pubComp
24
+ retainAvailable: true, // messages will be retained when retain flag is set
25
+ serverKeepAlive: 100, // 100 seconds
26
+ sharedSubscriptionAvailable: true, // clients can use shared subscriptions
27
+ subscriptionIdentifierAvailable: true, // clients can use subscriptions identifiers
28
+ topicAliasMaximum: 5, // max number of incoming topic aliases the server will acceptper client, 0 = none
29
+ wildcardSubscriptionAvailable: true, // clients can use wildcard subscriptions
30
+ },
31
+ };
32
+ // Helper function to safely merge consumer config with defaults
33
+ export function createConfiguration(input) {
34
+ return {
35
+ context: {
36
+ ...defaultConfiguration.context,
37
+ ...input?.context,
38
+ },
39
+ };
40
+ }
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../server/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,aAAa,EAAE,CAAC,EAAE,kEAAkE;IACpF,aAAa,EAAE,CAAC,EAAE,mFAAmF;CAC7F,CAAC;AAIX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE;QACP,mBAAmB,EAAE,EAAE,EAAE,wEAAwE;QACjG,iBAAiB,EAAE,IAAI,EAAE,6CAA6C;QACtE,wBAAwB,EAAE,KAAK,EAAE,QAAQ;QACzC,wBAAwB,EAAE,IAAI,EAAE,8EAA8E;QAC9G,yBAAyB,EAAE,IAAI,EAAE,sCAAsC;QACvE,yBAAyB,EAAE,IAAI,EAAE,oCAAoC;QACrE,UAAU,EAAE,CAAC,EAAE,2CAA2C;QAC1D,cAAc,EAAE,EAAE,EAAE,0FAA0F;QAC9G,mBAAmB,EAAE,IAAI,EAAE,mEAAmE;QAC9F,SAAS,EAAE,CAAC,SAAS,CAAC,EAAmB,EAAE,SAAS,CAAC,EAAmB,CAAC;QACzE,oBAAoB,EAAE,KAAK,EAAE,uDAAuD;QACpF,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,8BAA8B;QACtE,cAAc,EAAE,EAAE,EAAE,yEAAyE;QAC7F,eAAe,EAAE,IAAI,EAAE,oDAAoD;QAC3E,eAAe,EAAE,GAAG,EAAE,cAAc;QACpC,2BAA2B,EAAE,IAAI,EAAE,uCAAuC;QAC1E,+BAA+B,EAAE,IAAI,EAAE,4CAA4C;QACnF,iBAAiB,EAAE,CAAC,EAAE,kFAAkF;QACxG,6BAA6B,EAAE,IAAI,EAAE,yCAAyC;KAC/E;CACF,CAAC;AAoBF,gEAAgE;AAChE,MAAM,UAAU,mBAAmB,CAAC,KAA0B;IAC5D,OAAO;QACL,OAAO,EAAE;YACP,GAAG,oBAAoB,CAAC,OAAO;YAC/B,GAAG,KAAK,EAAE,OAAO;SAClB;KACF,CAAC;AACJ,CAAC"}
@@ -1,47 +1,221 @@
1
- import { MqttConn } from "./deps.ts";
2
- import type { AnyPacket, IPersistence, IStore, ProtocolLevel, PublishPacket, SockConn, TAuthenticationResult, Timer, Topic } from "./deps.ts";
1
+ import { MqttConn, OutboundTopicAliasManager, Timer } from "./deps.ts";
2
+ import type { AnyPacket, ConnectPacket, ExtPublishPacket, IPersistence, PacketId, ProtocolLevel, ShareName, SockConn, Topic, TReasonCode } from "./deps.ts";
3
+ import type { Configuration } from "./config.ts";
4
+ /** Unique identifier for an MQTT client. */
3
5
  export type ClientId = string;
6
+ /** System topic prefix character used for internal MQTT system topics. */
4
7
  export declare const SysPrefix = "$";
8
+ /** Standard UTF-8 encoder used across the server to convert strings to byte arrays. */
5
9
  export declare const utf8Encoder: TextEncoder;
10
+ /** Possible results from isAuthenticated and processAuth handler */
11
+ export type AuthenticatedResult = {
12
+ reasonCode: TReasonCode;
13
+ reasonString?: string;
14
+ authData?: Uint8Array;
15
+ };
16
+ export declare const SessionState: {
17
+ readonly connecting: 0;
18
+ readonly authenticating: 1;
19
+ readonly connected: 2;
20
+ readonly closing: 3;
21
+ readonly disconnected: 4;
22
+ };
23
+ export type SessionState = typeof SessionState[keyof typeof SessionState];
6
24
  /**
7
25
  * Handlers are hooks that the server will call
8
26
  * and let you influence the servers behaviour.
9
27
  * The following handlers can be configured:
10
- * - isAuthenticated()
11
- * - isAuthorizedToPublish()
12
- * - isAuthorizedToSubscribe()
28
+ * - preconnect()
29
+ * - isAuthenticated()
30
+ * - processAuth()
31
+ * - isAuthorizedToPublish()
32
+ * - isAuthorizedToSubscribe()
13
33
  */
14
34
  export type Handlers = {
15
- isAuthenticated?(ctx: Context, clientId: ClientId, username: string, password: Uint8Array): TAuthenticationResult;
16
- isAuthorizedToPublish?(ctx: Context, topic: Topic): boolean;
17
- isAuthorizedToSubscribe?(ctx: Context, topic: Topic): boolean;
35
+ /**
36
+ * Default preconnect handler that unconditionally permits all connections.
37
+ * @param {SockConn} conn - The connection context.
38
+ * @returns {boolean} false will close the connection
39
+ */
40
+ preconnect?(conn: SockConn): boolean | Promise<boolean>;
41
+ /**
42
+ * Hook to authenticate a client connection attempt.
43
+ * @param {Context} ctx - The connection context.
44
+ * @param {ClientId} clientId - The client identifier.
45
+ * @param {string} username - The username provided by the client.
46
+ * @param {Uint8Array} password - The password bytes provided by the client.
47
+ * @param {ConnectPacket} connectPacket - The raw connect packet
48
+ * @returns {AuthResult} The result of the authentication attempt.
49
+ */
50
+ isAuthenticated?(ctx: Context, clientId: ClientId, username: string, password: Uint8Array, connectPacket: ConnectPacket): AuthenticatedResult | Promise<AuthenticatedResult>;
51
+ /**
52
+ * Hook to authenticate a client connection attempt.
53
+ * @param {Context} ctx - The connection context.
54
+ * @param {ClientId} clientId - The client identifier.
55
+ * @param {string} authMethod - The authentication method provided by the client.
56
+ * @param {Uint8Array} authData- The authentication data provided by the client.
57
+ * @returns {AuthenticationResult} The result of the authentication attempt.
58
+ */
59
+ processAuth?(ctx: Context, clientId: ClientId, authMethod: string, authData: Uint8Array): AuthenticatedResult | Promise<AuthenticatedResult>;
60
+ /**
61
+ * Hook to authorize a message publication to a specific topic.
62
+ * @param {Context} ctx - The connection context.
63
+ * @param {Topic} topic - The topic the client wants to publish to.
64
+ * @returns {boolean} True if the client is authorized to publish, false otherwise.
65
+ */
66
+ isAuthorizedToPublish?(ctx: Context, topic: Topic): boolean | Promise<boolean>;
67
+ /**
68
+ * Hook to authorize a subscription request to a specific topic.
69
+ * @param {Context} ctx - The connection context.
70
+ * @param {Topic} topic - The topic filter the client wants to subscribe to.
71
+ * @param {ShareName} shareName - The name of the share in case of shared subscriptions
72
+ * @returns {boolean} True if the client is authorized to subscribe, false otherwise.
73
+ */
74
+ isAuthorizedToSubscribe?(ctx: Context, topic: Topic, shareName: ShareName): boolean | Promise<boolean>;
75
+ };
76
+ /**
77
+ * V5 options that can be passed by handleConnect
78
+ */
79
+ export type ConnectOptions = {
80
+ sessionExpiryInterval?: number | undefined;
81
+ willDelayInterval?: number | undefined;
82
+ topicAliasMaximum?: number | undefined;
83
+ maximumOutgoingPacketSize?: number | undefined;
84
+ receiveMaximum?: number | undefined;
85
+ assignedClientIdentifier?: string | undefined;
86
+ keepAlive?: number | undefined;
18
87
  };
19
88
  /**
20
- * The Context class is used to maintain state of a MQTT connection
21
- * It handles:
22
- * - connect/disconnect including broadcasting of these events
23
- * - publish
24
- * - persistence
25
- * - the will
89
+ * Per-connection server context that manages the lifecycle, packets,
90
+ * timers, and persistence interactions for an individual client connection.
26
91
  */
27
92
  export declare class Context {
28
- connected: boolean;
93
+ /** the client id is set after succesful connect */
94
+ clientId: ClientId | null;
95
+ /** Indicates the current state of the client */
96
+ state: SessionState;
97
+ /** Indicates whether the client asked for a clean session */
98
+ cleanSession: boolean;
99
+ /** Indicates whether the client is considered a broker and allowed to use $SYS topics etc */
100
+ isBroker: boolean;
101
+ /** The MQTT protocol level version determined during the connection handshake. */
29
102
  protocolLevel: ProtocolLevel;
103
+ /** The underlying raw socket connection. */
30
104
  conn: SockConn;
105
+ /** The wrapped MQTT connection wrapper handling frame reading and writing. */
31
106
  mqttConn: MqttConn;
107
+ /** The persistence layer instance used by the server. */
32
108
  persistence: IPersistence;
109
+ /** The configured authentication and authorization lifecycle hooks. */
33
110
  handlers: Handlers;
111
+ /** Configuration data */
112
+ config: Configuration;
113
+ /** Global registry mapping active client identifiers to their respective connection context. */
34
114
  static clientList: Map<ClientId, Context>;
35
- store?: IStore;
36
- will?: PublishPacket | undefined;
115
+ /** The optional Will packet configured by the client to be published if disconnected unexpectedly. */
116
+ will?: ExtPublishPacket | undefined;
117
+ /** The Keep Alive timer tracking the client activity timeout. */
37
118
  timer?: Timer;
38
- constructor(persistence: IPersistence, conn: SockConn, handlers: Handlers);
39
- send(packet: AnyPacket): Promise<void>;
40
- connect(clientId: string, clean: boolean): void;
41
- doPublish(packet: PublishPacket): void;
42
- clean(clientId: string): void;
43
- close(executewill?: boolean): void;
119
+ /** Timer to keep track of when a V5 session ends */
120
+ sessionEndsTimer?: Timer;
121
+ /** Timer to handle V5 delayed will delivery */
122
+ willTimer?: Timer;
123
+ /**
124
+ * Timer enforcing a deadline for the client to send a CONNECT packet
125
+ * after establishing a socket connection.
126
+ */
127
+ preconnectTimer?: Timer;
128
+ /**
129
+ * max number of inflight packets for this client,
130
+ * in V5 client can set this lower than maxInflightMessages
131
+ * theoretical max is maxInt
132
+ */
133
+ receiveMaximum: number;
134
+ /**
135
+ * inflighPackets, how many publish packets have been sent and are waiting for ack
136
+ */
137
+ inflightPackets: number;
138
+ /**
139
+ * set of Id's of publish packets waiting to be send to the client
140
+ */
141
+ queuedPacketIds: Set<PacketId>;
142
+ /**
143
+ * V5,max topicAliases ,0 = none
144
+ */
145
+ outgoingMaxTopicAlias: number;
146
+ incomingMaxTopicAlias: number;
147
+ /** V5 server topic aliases */
148
+ incomingTopicAliases: Map<number, Topic>;
149
+ /** V5 client topic aliases */
150
+ outgoingTopicAliasManager: undefined | OutboundTopicAliasManager;
151
+ connectOptions: undefined | ConnectOptions;
152
+ /**
153
+ * Initializes a new instance of the connection Context.
154
+ */
155
+ constructor(configuration: Configuration, // all settings
156
+ persistence: IPersistence, // The server persistence layer implementation.
157
+ conn: SockConn, // The underlying socket connection.
158
+ handlers: Handlers);
159
+ /**
160
+ * Configures and starts the preconnect timer to enforce connection deadlines.
161
+ */
162
+ private initializePreconnectTimer;
163
+ /**
164
+ * Transmits an MQTT packet to the client.
165
+ */
166
+ send(packet: AnyPacket): Promise<boolean>;
167
+ /**
168
+ * Dispatch the next publish packet in queue (if exists),
169
+ * when a ack packet on an already sent publish arrives
170
+ */
171
+ processAck(packetId: PacketId): Promise<boolean>;
172
+ /**
173
+ * Dispatch publish packets to client
174
+ */
175
+ dispatch(extPacket: ExtPublishPacket): Promise<void>;
176
+ /**
177
+ * Helper to setup the timers
178
+ */
179
+ private setupConnectionTimers;
180
+ /**
181
+ * process V5 connectOptions
182
+ */
183
+ private applyConnectOptions;
184
+ /**
185
+ * Finalizes the client connection state, registers the client in persistence,
186
+ * kicks out existing duplicate sessions, and broadcasts the client connection event.
187
+ */
188
+ prepareConnect(packet: ConnectPacket, clientId: string, connectOpts?: ConnectOptions): void;
189
+ connect(): Promise<boolean>;
190
+ /**
191
+ * Proces -inbound- publication requests
192
+ */
193
+ publish(packet: ExtPublishPacket): Promise<void>;
194
+ /**
195
+ * Explicitly removes a client session and its stored state from the persistence layer.
196
+ */
197
+ clean(): Promise<void>;
198
+ /**
199
+ * Tears down the connection context, terminates the underlying socket,
200
+ * clears internal timers, triggers the Will packet execution if requested,
201
+ * and announces the client disconnection.
202
+ * If executewill=true triggers the registered Will packet logic.
203
+ */
204
+ close(executewill?: boolean): Promise<void>;
205
+ /**
206
+ * Evaluates authorization and triggers the distribution of the client's Will packet.
207
+ */
44
208
  private handleWill;
45
- broadcast(topic: Topic, payload: string, retain?: boolean): void;
209
+ /**
210
+ * Utility method to generate and publish an internal system message payload to the persistence engine.
211
+ */
212
+ broadcast(topic: Topic, // The topic filter string to publish to.
213
+ payload: string, // The plain-text message string to encode.
214
+ retain?: boolean): Promise<void>;
215
+ /**
216
+ * utility method to redeliver packets that were cached
217
+ * called from handleConnect()
218
+ */
219
+ handleRedelivery(): Promise<void>;
46
220
  }
47
221
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../server/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAIT,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,MAAM,EACN,aAAa,EACb,aAAa,EACb,QAAQ,EACR,qBAAqB,EACrB,KAAK,EACL,KAAK,EACN,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,eAAO,MAAM,SAAS,MAAM,CAAC;AAE7B,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,CAAC,CACd,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,UAAU,GACnB,qBAAqB,CAAC;IACzB,qBAAqB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;IAC5D,uBAAuB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC;CAC/D,CAAC;AAEF;;;;;;;GAOG;AAEH,qBAAa,OAAO;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,YAAY,CAAC;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAa;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;gBAEF,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IASnE,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB/C,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IActC,KAAK,CAAC,QAAQ,EAAE,MAAM;IAItB,KAAK,CAAC,WAAW,UAAO,GAAG,IAAI;IA6B/B,OAAO,CAAC,UAAU;IAYlB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,IAAI;CAa/D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../server/context.ts"],"names":[],"mappings":"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"}