@seriousme/opifex 1.11.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. package/README.md +99 -40
  2. package/bin/conformanceServer.ts +45 -13
  3. package/bin/demoServer.ts +38 -13
  4. package/bin/mqtt.ts +2 -2
  5. package/client/ConnectionState.ts +3 -1
  6. package/client/client.ts +88 -47
  7. package/client/context.ts +79 -27
  8. package/client/deps.ts +10 -3
  9. package/client/handlers/handleAuth.test.ts +193 -0
  10. package/client/handlers/handleAuth.ts +89 -0
  11. package/client/handlers/handleConnack.test.ts +173 -0
  12. package/client/handlers/handleConnack.ts +18 -8
  13. package/client/handlers/handleDisconnect.test.ts +22 -0
  14. package/client/handlers/handleDisconnect.ts +17 -0
  15. package/client/handlers/handlePacket.test.ts +242 -0
  16. package/client/handlers/handlePacket.ts +19 -5
  17. package/client/handlers/handlePuback.test.ts +99 -0
  18. package/client/handlers/handlePuback.ts +6 -0
  19. package/client/handlers/handlePubcomp.test.ts +112 -0
  20. package/client/handlers/handlePubcomp.ts +5 -0
  21. package/client/handlers/handlePublish.test.ts +188 -0
  22. package/client/handlers/handlePubrec.test.ts +119 -0
  23. package/client/handlers/handlePubrec.ts +5 -1
  24. package/client/handlers/handlePubrel.test.ts +136 -0
  25. package/client/handlers/handleSuback.test.ts +122 -0
  26. package/client/handlers/handleSuback.ts +3 -0
  27. package/client/handlers/handleUnsuback.test.ts +101 -0
  28. package/client/mod.ts +13 -2
  29. package/client/store/memoryStore.ts +12 -11
  30. package/client/store/store.ts +4 -2
  31. package/deno/README.md +1 -2
  32. package/deno/tcpClient.test.ts +75 -0
  33. package/deno/tcpClient.ts +36 -18
  34. package/deno/tcpServer.test.ts +22 -21
  35. package/deno/tcpServer.ts +26 -4
  36. package/deno/tlsServer.test.ts +97 -0
  37. package/deno/tlsServer.ts +58 -0
  38. package/deno/wsServer.test.ts +93 -0
  39. package/deno/wsServer.ts +96 -0
  40. package/dev_utils/generateCert.ts +95 -0
  41. package/dev_utils/mockConn.ts +36 -0
  42. package/dev_utils/mockServer.ts +28 -0
  43. package/dev_utils/mod.ts +30 -3
  44. package/dev_utils/packetHelpers.ts +404 -0
  45. package/dev_utils/test-handlers.ts +98 -0
  46. package/dev_utils/timers.ts +14 -0
  47. package/dev_utils/webStreamPair.test.ts +171 -0
  48. package/dev_utils/webStreamPair.ts +143 -0
  49. package/dist/bin/conformanceServer.js +17 -12
  50. package/dist/bin/conformanceServer.js.map +1 -1
  51. package/dist/bin/demoServer.js +16 -12
  52. package/dist/bin/demoServer.js.map +1 -1
  53. package/dist/bin/mqtt.js +2 -2
  54. package/dist/bin/mqtt.js.map +1 -1
  55. package/dist/client/ConnectionState.d.ts +3 -1
  56. package/dist/client/ConnectionState.d.ts.map +1 -1
  57. package/dist/client/ConnectionState.js +2 -0
  58. package/dist/client/ConnectionState.js.map +1 -1
  59. package/dist/client/client.d.ts +47 -21
  60. package/dist/client/client.d.ts.map +1 -1
  61. package/dist/client/client.js +57 -20
  62. package/dist/client/client.js.map +1 -1
  63. package/dist/client/context.d.ts +15 -7
  64. package/dist/client/context.d.ts.map +1 -1
  65. package/dist/client/context.js +44 -12
  66. package/dist/client/context.js.map +1 -1
  67. package/dist/client/deps.d.ts +4 -3
  68. package/dist/client/deps.d.ts.map +1 -1
  69. package/dist/client/deps.js +1 -1
  70. package/dist/client/deps.js.map +1 -1
  71. package/dist/client/handlers/handleAuth.d.ts +9 -0
  72. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  73. package/dist/client/handlers/handleAuth.js +66 -0
  74. package/dist/client/handlers/handleAuth.js.map +1 -0
  75. package/dist/client/handlers/handleConnack.d.ts +2 -2
  76. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  77. package/dist/client/handlers/handleConnack.js +16 -6
  78. package/dist/client/handlers/handleConnack.js.map +1 -1
  79. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  80. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  81. package/dist/client/handlers/handleDisconnect.js +15 -0
  82. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  83. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  84. package/dist/client/handlers/handlePacket.js +14 -3
  85. package/dist/client/handlers/handlePacket.js.map +1 -1
  86. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  87. package/dist/client/handlers/handlePuback.js +5 -0
  88. package/dist/client/handlers/handlePuback.js.map +1 -1
  89. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.js +5 -0
  91. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  92. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  93. package/dist/client/handlers/handlePubrec.js +5 -1
  94. package/dist/client/handlers/handlePubrec.js.map +1 -1
  95. package/dist/client/handlers/handleSuback.d.ts +1 -0
  96. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  97. package/dist/client/handlers/handleSuback.js +3 -0
  98. package/dist/client/handlers/handleSuback.js.map +1 -1
  99. package/dist/client/mod.d.ts +3 -2
  100. package/dist/client/mod.d.ts.map +1 -1
  101. package/dist/client/mod.js +1 -1
  102. package/dist/client/mod.js.map +1 -1
  103. package/dist/client/store/memoryStore.d.ts +3 -3
  104. package/dist/client/store/memoryStore.d.ts.map +1 -1
  105. package/dist/client/store/memoryStore.js +3 -3
  106. package/dist/client/store/memoryStore.js.map +1 -1
  107. package/dist/client/store/store.d.ts +3 -2
  108. package/dist/client/store/store.d.ts.map +1 -1
  109. package/dist/client/store/store.js +1 -1
  110. package/dist/client/store/store.js.map +1 -1
  111. package/dist/dev_utils/generateCert.d.ts +11 -0
  112. package/dist/dev_utils/generateCert.d.ts.map +1 -0
  113. package/dist/dev_utils/generateCert.js +76 -0
  114. package/dist/dev_utils/generateCert.js.map +1 -0
  115. package/dist/examples/authHandler.test.d.ts +2 -0
  116. package/dist/examples/authHandler.test.d.ts.map +1 -0
  117. package/dist/examples/authHandler.test.js +123 -0
  118. package/dist/examples/authHandler.test.js.map +1 -0
  119. package/dist/examples/mqtt.test.d.ts +2 -0
  120. package/dist/examples/mqtt.test.d.ts.map +1 -0
  121. package/dist/examples/mqtt.test.js +70 -0
  122. package/dist/examples/mqtt.test.js.map +1 -0
  123. package/dist/examples/mqtts.test.d.ts +2 -0
  124. package/dist/examples/mqtts.test.d.ts.map +1 -0
  125. package/dist/examples/mqtts.test.js +81 -0
  126. package/dist/examples/mqtts.test.js.map +1 -0
  127. package/dist/mqttConn/mqttConn.d.ts +24 -31
  128. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  129. package/dist/mqttConn/mqttConn.js +57 -36
  130. package/dist/mqttConn/mqttConn.js.map +1 -1
  131. package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
  132. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  133. package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
  134. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  135. package/dist/mqttPacket/PacketType.d.ts +4 -0
  136. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  137. package/dist/mqttPacket/Properties.d.ts +4 -4
  138. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  139. package/dist/mqttPacket/Properties.js.map +1 -1
  140. package/dist/mqttPacket/ReasonCode.d.ts +4 -5
  141. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  142. package/dist/mqttPacket/ReasonCode.js +1 -0
  143. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  144. package/dist/mqttPacket/RetainHandling.d.ts +4 -0
  145. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  146. package/dist/mqttPacket/auth.d.ts +7 -8
  147. package/dist/mqttPacket/auth.d.ts.map +1 -1
  148. package/dist/mqttPacket/auth.js +31 -30
  149. package/dist/mqttPacket/auth.js.map +1 -1
  150. package/dist/mqttPacket/codec.d.ts +48 -0
  151. package/dist/mqttPacket/codec.d.ts.map +1 -0
  152. package/dist/mqttPacket/codec.js +93 -0
  153. package/dist/mqttPacket/codec.js.map +1 -0
  154. package/dist/mqttPacket/connack.d.ts +11 -10
  155. package/dist/mqttPacket/connack.d.ts.map +1 -1
  156. package/dist/mqttPacket/connack.js +43 -45
  157. package/dist/mqttPacket/connack.js.map +1 -1
  158. package/dist/mqttPacket/connect.d.ts +7 -7
  159. package/dist/mqttPacket/connect.d.ts.map +1 -1
  160. package/dist/mqttPacket/connect.js +156 -157
  161. package/dist/mqttPacket/connect.js.map +1 -1
  162. package/dist/mqttPacket/decoder.d.ts +6 -16
  163. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  164. package/dist/mqttPacket/decoder.js +7 -28
  165. package/dist/mqttPacket/decoder.js.map +1 -1
  166. package/dist/mqttPacket/disconnect.d.ts +9 -8
  167. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  168. package/dist/mqttPacket/disconnect.js +41 -43
  169. package/dist/mqttPacket/disconnect.js.map +1 -1
  170. package/dist/mqttPacket/encoder.d.ts +7 -19
  171. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  172. package/dist/mqttPacket/encoder.js +5 -28
  173. package/dist/mqttPacket/encoder.js.map +1 -1
  174. package/dist/mqttPacket/mod.d.ts +21 -103
  175. package/dist/mqttPacket/mod.d.ts.map +1 -1
  176. package/dist/mqttPacket/mod.js +5 -94
  177. package/dist/mqttPacket/mod.js.map +1 -1
  178. package/dist/mqttPacket/pingreq.d.ts +6 -6
  179. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  180. package/dist/mqttPacket/pingreq.js +11 -13
  181. package/dist/mqttPacket/pingreq.js.map +1 -1
  182. package/dist/mqttPacket/pingres.d.ts +6 -6
  183. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  184. package/dist/mqttPacket/pingres.js +11 -13
  185. package/dist/mqttPacket/pingres.js.map +1 -1
  186. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  187. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  188. package/dist/mqttPacket/protocolLevels.js +5 -1
  189. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  190. package/dist/mqttPacket/pubblishAcks.d.ts +9 -10
  191. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  192. package/dist/mqttPacket/pubblishAcks.js +43 -45
  193. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  194. package/dist/mqttPacket/publish.d.ts +8 -7
  195. package/dist/mqttPacket/publish.d.ts.map +1 -1
  196. package/dist/mqttPacket/publish.js +53 -55
  197. package/dist/mqttPacket/publish.js.map +1 -1
  198. package/dist/mqttPacket/suback.d.ts +9 -8
  199. package/dist/mqttPacket/suback.d.ts.map +1 -1
  200. package/dist/mqttPacket/suback.js +38 -40
  201. package/dist/mqttPacket/suback.js.map +1 -1
  202. package/dist/mqttPacket/subscribe.d.ts +41 -10
  203. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  204. package/dist/mqttPacket/subscribe.js +90 -89
  205. package/dist/mqttPacket/subscribe.js.map +1 -1
  206. package/dist/mqttPacket/types.d.ts +2 -29
  207. package/dist/mqttPacket/types.d.ts.map +1 -1
  208. package/dist/mqttPacket/unsuback.d.ts +9 -8
  209. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  210. package/dist/mqttPacket/unsuback.js +32 -34
  211. package/dist/mqttPacket/unsuback.js.map +1 -1
  212. package/dist/mqttPacket/unsubscribe.d.ts +26 -8
  213. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  214. package/dist/mqttPacket/unsubscribe.js +45 -44
  215. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  216. package/dist/mqttPacket/validators.d.ts +4 -16
  217. package/dist/mqttPacket/validators.d.ts.map +1 -1
  218. package/dist/mqttPacket/validators.js +5 -26
  219. package/dist/mqttPacket/validators.js.map +1 -1
  220. package/dist/node/tcpClient.d.ts +22 -2
  221. package/dist/node/tcpClient.d.ts.map +1 -1
  222. package/dist/node/tcpClient.js +29 -10
  223. package/dist/node/tcpClient.js.map +1 -1
  224. package/dist/node/tcpServer.d.ts +18 -0
  225. package/dist/node/tcpServer.d.ts.map +1 -1
  226. package/dist/node/tcpServer.js +21 -2
  227. package/dist/node/tcpServer.js.map +1 -1
  228. package/dist/node/tlsServer.d.ts +37 -0
  229. package/dist/node/tlsServer.d.ts.map +1 -0
  230. package/dist/node/tlsServer.js +73 -0
  231. package/dist/node/tlsServer.js.map +1 -0
  232. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  233. package/dist/node/wrapNodeSocket.js +6 -28
  234. package/dist/node/wrapNodeSocket.js.map +1 -1
  235. package/dist/persistence/basicPersistence.d.ts +36 -0
  236. package/dist/persistence/basicPersistence.d.ts.map +1 -0
  237. package/dist/persistence/basicPersistence.js +306 -0
  238. package/dist/persistence/basicPersistence.js.map +1 -0
  239. package/dist/persistence/deps.d.ts +3 -2
  240. package/dist/persistence/deps.d.ts.map +1 -1
  241. package/dist/persistence/deps.js +2 -1
  242. package/dist/persistence/deps.js.map +1 -1
  243. package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
  244. package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
  245. package/dist/persistence/memory/memoryPersistence.js +12 -115
  246. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  247. package/dist/persistence/memory/memoryStorage.d.ts +45 -0
  248. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
  249. package/dist/persistence/memory/memoryStorage.js +143 -0
  250. package/dist/persistence/memory/memoryStorage.js.map +1 -0
  251. package/dist/persistence/mod.d.ts +3 -3
  252. package/dist/persistence/mod.d.ts.map +1 -1
  253. package/dist/persistence/mod.js +6 -1
  254. package/dist/persistence/mod.js.map +1 -1
  255. package/dist/persistence/persistence.d.ts +45 -70
  256. package/dist/persistence/persistence.d.ts.map +1 -1
  257. package/dist/persistence/persistence.js +1 -2
  258. package/dist/persistence/persistence.js.map +1 -1
  259. package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
  260. package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
  261. package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
  262. package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
  263. package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
  264. package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
  265. package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
  266. package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
  267. package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
  268. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
  269. package/dist/persistence/sqlite/sqliteStorage.js +194 -0
  270. package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
  271. package/dist/persistence/storage.d.ts +38 -0
  272. package/dist/persistence/storage.d.ts.map +1 -0
  273. package/dist/persistence/storage.js +5 -0
  274. package/dist/persistence/storage.js.map +1 -0
  275. package/dist/server/config.d.ts +47 -0
  276. package/dist/server/config.d.ts.map +1 -0
  277. package/dist/server/config.js +41 -0
  278. package/dist/server/config.js.map +1 -0
  279. package/dist/server/context.d.ts +199 -25
  280. package/dist/server/context.d.ts.map +1 -1
  281. package/dist/server/context.js +432 -53
  282. package/dist/server/context.js.map +1 -1
  283. package/dist/server/deps.d.ts +5 -6
  284. package/dist/server/deps.d.ts.map +1 -1
  285. package/dist/server/deps.js +2 -2
  286. package/dist/server/deps.js.map +1 -1
  287. package/dist/server/handlers/completeConnect.d.ts +9 -0
  288. package/dist/server/handlers/completeConnect.d.ts.map +1 -0
  289. package/dist/server/handlers/completeConnect.js +74 -0
  290. package/dist/server/handlers/completeConnect.js.map +1 -0
  291. package/dist/server/handlers/handleAuth.d.ts +9 -0
  292. package/dist/server/handlers/handleAuth.d.ts.map +1 -0
  293. package/dist/server/handlers/handleAuth.js +69 -0
  294. package/dist/server/handlers/handleAuth.js.map +1 -0
  295. package/dist/server/handlers/handleConnect.d.ts +2 -4
  296. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  297. package/dist/server/handlers/handleConnect.js +140 -67
  298. package/dist/server/handlers/handleConnect.js.map +1 -1
  299. package/dist/server/handlers/handleDisconnect.d.ts +1 -1
  300. package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
  301. package/dist/server/handlers/handleDisconnect.js +3 -3
  302. package/dist/server/handlers/handleDisconnect.js.map +1 -1
  303. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  304. package/dist/server/handlers/handlePacket.js +19 -6
  305. package/dist/server/handlers/handlePacket.js.map +1 -1
  306. package/dist/server/handlers/handlePuback.d.ts +1 -3
  307. package/dist/server/handlers/handlePuback.d.ts.map +1 -1
  308. package/dist/server/handlers/handlePuback.js +2 -8
  309. package/dist/server/handlers/handlePuback.js.map +1 -1
  310. package/dist/server/handlers/handlePubcomp.d.ts +1 -1
  311. package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
  312. package/dist/server/handlers/handlePubcomp.js +2 -4
  313. package/dist/server/handlers/handlePubcomp.js.map +1 -1
  314. package/dist/server/handlers/handlePublish.d.ts +1 -1
  315. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  316. package/dist/server/handlers/handlePublish.js +149 -45
  317. package/dist/server/handlers/handlePublish.js.map +1 -1
  318. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  319. package/dist/server/handlers/handlePubrec.js +2 -3
  320. package/dist/server/handlers/handlePubrec.js.map +1 -1
  321. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  322. package/dist/server/handlers/handlePubrel.js +6 -2
  323. package/dist/server/handlers/handlePubrel.js.map +1 -1
  324. package/dist/server/handlers/handleSubscribe.d.ts +1 -6
  325. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  326. package/dist/server/handlers/handleSubscribe.js +99 -38
  327. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  328. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  329. package/dist/server/handlers/handleUnsubscribe.js +19 -4
  330. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  331. package/dist/server/mod.d.ts +3 -3
  332. package/dist/server/mod.d.ts.map +1 -1
  333. package/dist/server/mod.js +1 -1
  334. package/dist/server/mod.js.map +1 -1
  335. package/dist/server/server.d.ts +32 -9
  336. package/dist/server/server.d.ts.map +1 -1
  337. package/dist/server/server.js +84 -15
  338. package/dist/server/server.js.map +1 -1
  339. package/dist/socket/socket.d.ts +15 -9
  340. package/dist/socket/socket.d.ts.map +1 -1
  341. package/dist/socket/socket.js +66 -18
  342. package/dist/socket/socket.js.map +1 -1
  343. package/dist/timer/timer.d.ts +32 -0
  344. package/dist/timer/timer.d.ts.map +1 -1
  345. package/dist/timer/timer.js +32 -0
  346. package/dist/timer/timer.js.map +1 -1
  347. package/dist/trie/trie.d.ts +10 -5
  348. package/dist/trie/trie.d.ts.map +1 -1
  349. package/dist/trie/trie.js +61 -41
  350. package/dist/trie/trie.js.map +1 -1
  351. package/dist/utils/assert.d.ts.map +1 -1
  352. package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
  353. package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
  354. package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
  355. package/dist/utils/bufferedAsyncIterable.js.map +1 -0
  356. package/dist/utils/deferred.d.ts.map +1 -1
  357. package/dist/utils/deferred.js.map +1 -1
  358. package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
  359. package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
  360. package/dist/utils/getOrInsertPolyFill.js +12 -0
  361. package/dist/utils/getOrInsertPolyFill.js.map +1 -0
  362. package/dist/utils/logger.d.ts +42 -5
  363. package/dist/utils/logger.d.ts.map +1 -1
  364. package/dist/utils/logger.js +53 -7
  365. package/dist/utils/logger.js.map +1 -1
  366. package/dist/utils/mod.d.ts +6 -1
  367. package/dist/utils/mod.d.ts.map +1 -1
  368. package/dist/utils/mod.js +5 -1
  369. package/dist/utils/mod.js.map +1 -1
  370. package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
  371. package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
  372. package/dist/utils/outboundTopicAliasManager.js +74 -0
  373. package/dist/utils/outboundTopicAliasManager.js.map +1 -0
  374. package/dist/utils/queue.d.ts.map +1 -1
  375. package/dist/utils/topicFilter.d.ts +32 -0
  376. package/dist/utils/topicFilter.d.ts.map +1 -0
  377. package/dist/utils/topicFilter.js +52 -0
  378. package/dist/utils/topicFilter.js.map +1 -0
  379. package/dist/utils/utils.d.ts +2 -0
  380. package/dist/utils/utils.d.ts.map +1 -1
  381. package/dist/utils/utils.js +2 -0
  382. package/dist/utils/utils.js.map +1 -1
  383. package/dist/utils/validators.d.ts +34 -0
  384. package/dist/utils/validators.d.ts.map +1 -0
  385. package/dist/utils/validators.js +61 -0
  386. package/dist/utils/validators.js.map +1 -0
  387. package/dist/web/webSocketStream.d.ts +29 -0
  388. package/dist/web/webSocketStream.d.ts.map +1 -0
  389. package/dist/web/webSocketStream.js +69 -0
  390. package/dist/web/webSocketStream.js.map +1 -0
  391. package/dist/web/wrapWebSocket.d.ts +12 -0
  392. package/dist/web/wrapWebSocket.d.ts.map +1 -0
  393. package/dist/web/wrapWebSocket.js +41 -0
  394. package/dist/web/wrapWebSocket.js.map +1 -0
  395. package/dist/web/wsClient.d.ts +14 -0
  396. package/dist/web/wsClient.d.ts.map +1 -0
  397. package/dist/web/wsClient.js +33 -0
  398. package/dist/web/wsClient.js.map +1 -0
  399. package/dist/web/wsClient.test.d.ts +2 -0
  400. package/dist/web/wsClient.test.d.ts.map +1 -0
  401. package/dist/web/wsClient.test.js +20 -0
  402. package/dist/web/wsClient.test.js.map +1 -0
  403. package/examples/authHandler.test.ts +164 -0
  404. package/examples/mqtt.test.ts +89 -0
  405. package/examples/mqtts.test.ts +100 -0
  406. package/examples/webSocket.test.ts +94 -0
  407. package/mqttConn/mqttConn.test.ts +9 -9
  408. package/mqttConn/mqttConn.ts +76 -60
  409. package/mqttPacket/AuthenticationResult.ts +6 -0
  410. package/mqttPacket/PacketType.ts +5 -0
  411. package/mqttPacket/Properties.ts +8 -5
  412. package/mqttPacket/ReasonCode.ts +8 -9
  413. package/mqttPacket/RetainHandling.ts +5 -0
  414. package/mqttPacket/auth.test.ts +1 -1
  415. package/mqttPacket/auth.ts +44 -51
  416. package/mqttPacket/codec.ts +147 -0
  417. package/mqttPacket/connack.ts +63 -73
  418. package/mqttPacket/connect.test.ts +2 -2
  419. package/mqttPacket/connect.ts +178 -192
  420. package/mqttPacket/decoder.test.ts +0 -39
  421. package/mqttPacket/decoder.ts +17 -46
  422. package/mqttPacket/disconnect.ts +60 -71
  423. package/mqttPacket/encoder.test.ts +2 -2
  424. package/mqttPacket/encoder.ts +13 -46
  425. package/mqttPacket/mod.ts +48 -204
  426. package/mqttPacket/pingreq.ts +22 -28
  427. package/mqttPacket/pingres.ts +22 -28
  428. package/mqttPacket/protocolLevels.ts +12 -7
  429. package/mqttPacket/pubblishAcks.ts +61 -75
  430. package/mqttPacket/publish.ts +70 -84
  431. package/mqttPacket/publishAcks.test.ts +3 -3
  432. package/mqttPacket/suback.ts +53 -68
  433. package/mqttPacket/subscribe.ts +146 -128
  434. package/mqttPacket/types.ts +2 -35
  435. package/mqttPacket/unsuback.ts +50 -61
  436. package/mqttPacket/unsubscribe.ts +77 -72
  437. package/mqttPacket/validators.ts +5 -31
  438. package/node/socket-node-stream.test.ts +322 -0
  439. package/node/socket-node-stream.ts +174 -0
  440. package/node/tcpClient.test.ts +70 -0
  441. package/node/tcpClient.ts +33 -17
  442. package/node/tcpServer.test.ts +24 -20
  443. package/node/tcpServer.ts +29 -6
  444. package/node/tlsServer.test.ts +94 -0
  445. package/node/tlsServer.ts +97 -0
  446. package/node/wrapNodeSocket.ts +7 -30
  447. package/package.json +72 -44
  448. package/persistence/basicPersistence.ts +495 -0
  449. package/persistence/deps.ts +11 -1
  450. package/persistence/memory/memoryPersistence.ts +12 -153
  451. package/persistence/memory/memoryStorage.ts +232 -0
  452. package/persistence/mod.ts +5 -10
  453. package/persistence/persistence.test.ts +24 -0
  454. package/persistence/persistence.testing.ts +1324 -0
  455. package/persistence/persistence.ts +112 -68
  456. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  457. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  458. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  459. package/persistence/sqlite/sqliteStorage.ts +324 -0
  460. package/persistence/storage.ts +84 -0
  461. package/server/config.ts +65 -0
  462. package/server/context.ts +660 -76
  463. package/server/deps.ts +24 -5
  464. package/server/handlers/completeConnect.ts +93 -0
  465. package/server/handlers/duplicate.test.ts +196 -0
  466. package/server/handlers/handleAuth.test.ts +225 -0
  467. package/server/handlers/handleAuth.ts +88 -0
  468. package/server/handlers/handleConnect.test.ts +589 -0
  469. package/server/handlers/handleConnect.ts +201 -86
  470. package/server/handlers/handleConnect.version.test.ts +108 -0
  471. package/server/handlers/handleDisconnect.test.ts +56 -0
  472. package/server/handlers/handleDisconnect.ts +3 -3
  473. package/server/handlers/handlePacket.test.ts +24 -0
  474. package/server/handlers/handlePacket.ts +30 -8
  475. package/server/handlers/handlePingreq.test.ts +29 -0
  476. package/server/handlers/handlePuback.test.ts +28 -0
  477. package/server/handlers/handlePuback.ts +5 -8
  478. package/server/handlers/handlePubcomp.test.ts +28 -0
  479. package/server/handlers/handlePubcomp.ts +5 -4
  480. package/server/handlers/handlePublish.test.ts +471 -0
  481. package/server/handlers/handlePublish.ts +188 -35
  482. package/server/handlers/handlePubrec.test.ts +28 -0
  483. package/server/handlers/handlePubrec.ts +2 -3
  484. package/server/handlers/handlePubrel.test.ts +74 -0
  485. package/server/handlers/handlePubrel.ts +12 -2
  486. package/server/handlers/handleSubscribe.test.ts +971 -0
  487. package/server/handlers/handleSubscribe.ts +157 -39
  488. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  489. package/server/handlers/handleUnsubscribe.ts +28 -4
  490. package/server/handlers/keepalive.test.ts +132 -0
  491. package/server/handlers/session.persistence.test.ts +194 -0
  492. package/server/handlers/will.delivery.test.ts +221 -0
  493. package/server/mod.ts +5 -4
  494. package/server/preconnect.test.ts +151 -0
  495. package/server/server.ts +117 -19
  496. package/socket/socket.test.ts +91 -0
  497. package/socket/socket.ts +85 -34
  498. package/timer/timer.test.ts +4 -7
  499. package/timer/timer.ts +36 -0
  500. package/tools/benchmarks/receiver.ts +51 -0
  501. package/tools/benchmarks/sender.ts +48 -0
  502. package/tools/benchmarks/utils.ts +31 -0
  503. package/tools/mqtt-compat/README.md +130 -0
  504. package/tools/mqtt-compat/broker.ts +52 -0
  505. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  506. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  507. package/trie/trie.test.ts +9 -1
  508. package/trie/trie.ts +70 -45
  509. package/utils/bufferedAsyncIterable.test.ts +92 -0
  510. package/utils/deferred.test.ts +36 -0
  511. package/utils/deferred.ts +0 -1
  512. package/utils/getOrInsertPolyFill.ts +12 -0
  513. package/utils/logger.test.ts +189 -0
  514. package/utils/logger.ts +64 -9
  515. package/utils/mod.ts +15 -1
  516. package/utils/outboundTopicAliasManager.ts +100 -0
  517. package/utils/queue.test.ts +61 -0
  518. package/utils/topicFilter.test.ts +63 -0
  519. package/utils/topicFilter.ts +61 -0
  520. package/utils/utils.ts +3 -0
  521. package/utils/validators.ts +67 -0
  522. package/web/webSocketStream.ts +97 -0
  523. package/web/wrapWebSocket.ts +52 -0
  524. package/web/wsClient.test.ts +26 -0
  525. package/web/wsClient.ts +37 -0
  526. package/benchmarks/receiver.ts +0 -35
  527. package/benchmarks/sender.ts +0 -32
  528. package/benchmarks/utils.ts +0 -9
  529. package/dev_utils/dummyConn.ts +0 -110
  530. package/dev_utils/socketPair.ts +0 -85
  531. package/dist/persistence/store.d.ts +0 -14
  532. package/dist/persistence/store.d.ts.map +0 -1
  533. package/dist/persistence/store.js +0 -2
  534. package/dist/persistence/store.js.map +0 -1
  535. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  536. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  537. package/examples/tcpServer.test.ts +0 -148
  538. package/persistence/memory/memoryPersistence.test.ts +0 -156
  539. package/persistence/store.ts +0 -16
  540. package/server/test/handleConnect.test.ts +0 -122
  541. package/server/test/test-handlers.ts +0 -53
  542. /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
package/dist/trie/trie.js CHANGED
@@ -47,14 +47,11 @@ export class Trie {
47
47
  * @returns Array of matched values
48
48
  */
49
49
  _matchPrefix(parts) {
50
- if (parts.length === 0) {
51
- return this.#value ? this.#value : [];
52
- }
53
50
  const [first, ...rest] = parts;
54
- if (first !== undefined) {
55
- return this.matchChild(first, rest);
56
- }
57
- return [];
51
+ if (first === undefined)
52
+ return [];
53
+ // Direct lookup on the reserved topic node without evaluating top-level + or #
54
+ return this.matchChild(first, rest);
58
55
  }
59
56
  /**
60
57
  * Internal method to match keys with wildcard support
@@ -62,18 +59,26 @@ export class Trie {
62
59
  * @returns Array of matched values
63
60
  */
64
61
  _match(parts) {
62
+ let results = [];
63
+ // 1. Check if there is a multi-level wildcard ('#') at this level.
64
+ // In MQTT, 'a/#' matches 'a', 'a/b', 'a/b/c', etc.
65
+ const subtreeNode = this.#children.get(this.wildcardSubtree);
66
+ if (subtreeNode) {
67
+ results = results.concat(subtreeNode.#value);
68
+ }
69
+ // 2. Base case: we reached the end of the topic parts.
65
70
  if (parts.length === 0) {
66
- return this.#value ? this.#value : [];
71
+ return results.concat(this.#value);
67
72
  }
68
73
  const [first, ...rest] = parts;
69
- if (first !== undefined) {
70
- const exact = this.matchChild(first, rest);
71
- const single = this.matchChild(this.wildcardOne, rest);
72
- const subtree = this.matchChild(this.wildcardSubtree, []);
73
- const results = exact.concat(single, subtree);
74
- return results;
75
- }
76
- return [];
74
+ // deno-coverage-ignore
75
+ if (first === undefined)
76
+ return [];
77
+ // 3. Exact matching child node
78
+ const exact = this.matchChild(first, rest);
79
+ // 4. Single-level wildcard ('+') matching child node
80
+ const single = this.matchChild(this.wildcardOne, rest);
81
+ return results.concat(exact, single);
77
82
  }
78
83
  /**
79
84
  * Adds a value to the trie at the specified key
@@ -94,24 +99,29 @@ export class Trie {
94
99
  return;
95
100
  }
96
101
  const [first, ...rest] = parts;
97
- if (first !== undefined) {
98
- const child = this.#children.get(first);
99
- if (child instanceof Trie) {
100
- child._add(rest, value);
101
- }
102
- else {
103
- const node = new Trie(this.looseCompare);
104
- this.#children.set(first, node);
105
- node._add(rest, value);
106
- }
102
+ // deno-coverage-ignore
103
+ if (first === undefined)
104
+ return;
105
+ const child = this.#children.get(first);
106
+ if (child instanceof Trie) {
107
+ child._add(rest, value);
108
+ }
109
+ else {
110
+ const node = new Trie(this.looseCompare);
111
+ this.#children.set(first, node);
112
+ node._add(rest, value);
107
113
  }
108
- return;
109
114
  }
110
115
  /**
111
116
  * Removes a value from the trie at the specified key
112
117
  * @param key The key to remove the value from
113
118
  * @param value The value to remove
114
119
  */
120
+ /**
121
+ * Removes a value from the trie at the specified key
122
+ * @param key The key to remove the value from
123
+ * @param value The value (or partial object) to remove
124
+ */
115
125
  remove(key, value) {
116
126
  return this._remove(key.split(this.separator), value);
117
127
  }
@@ -122,37 +132,47 @@ export class Trie {
122
132
  */
123
133
  _remove(parts, value) {
124
134
  if (parts.length === 0) {
125
- const arr = this.#value || [];
135
+ const arr = this.#value;
126
136
  this.#value = arr.filter(this.filter(value));
127
137
  return;
128
138
  }
129
139
  const [first, ...rest] = parts;
130
- if (first !== undefined) {
131
- const node = this.#children.get(first);
132
- if (node) {
133
- node._remove(rest, value);
134
- if (node.#value.length === 0 && this.#children.size === 0) {
135
- this.#children.delete(first);
136
- }
140
+ // deno-coverage-ignore
141
+ if (first === undefined)
142
+ return;
143
+ const node = this.#children.get(first);
144
+ if (node) {
145
+ node._remove(rest, value);
146
+ if (node.#value.length === 0 && node.#children.size === 0) {
147
+ this.#children.delete(first);
137
148
  }
138
149
  }
139
150
  }
140
151
  /**
141
152
  * Creates a filter function for removing values
142
- * @param value The value to filter against
143
- * @returns Filter function
153
+ * Supports partial object matching when looseCompare is enabled or when matching objects.
154
+ * @param value The value (or partial value) to filter against
155
+ * @returns Filter function (returns true to KEEP the item, false to REMOVE it)
144
156
  */
145
157
  filter(value) {
146
- if (this.looseCompare && typeof value === "object") {
158
+ if (typeof value === "object" && value !== null) {
147
159
  return (item) => {
160
+ if (typeof item !== "object" || item === null) {
161
+ return true; // Keep if the stored item isn't an object but we are filtering by one
162
+ }
163
+ // Check if every key-value pair in our filter object matches the stored item
148
164
  for (const key in value) {
149
- if (value[key] !== item[key]) {
150
- return true;
165
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
166
+ // If the stored item has a different value (or doesn't have the key), it's not a match
167
+ if (item[key] !== value[key]) {
168
+ return true; // Keep the item (no match)
169
+ }
151
170
  }
152
171
  }
153
- return false;
172
+ return false; // Remove the item (it matches all criteria in the partial object)
154
173
  };
155
174
  }
175
+ // Fallback for primitives
156
176
  return (item) => item !== value;
157
177
  }
158
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"trie.js","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"trie.js","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../utils/assert.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,iCAAiC;gBACrB,OAAO,EAAE,MAAM;CAI5B;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D"}
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../utils/assert.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,iCAAiC;IACjC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,gEAAgE;AAChE,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D"}
@@ -23,4 +23,4 @@ export declare class BufferedAsyncIterable<T> implements AsyncIterable<T> {
23
23
  readonly push: (item: T) => void | Promise<void>;
24
24
  get isDone(): boolean;
25
25
  }
26
- //# sourceMappingURL=BufferedAsyncIterable.d.ts.map
26
+ //# sourceMappingURL=bufferedAsyncIterable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferedAsyncIterable.d.ts","sourceRoot":"","sources":["../../utils/bufferedAsyncIterable.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,qBAAa,qBAAqB,CAAC,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;;IAC/D,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,IAAI,CAAS;IAIrB,YAAY,UAAU,GAAE,MAAa,EAGpC;IAEM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAIzE;IAED,IAAI,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAUrB;IAED,KAAK,CAAC,MAAM,SAAW,GAAG,IAAI,CAK7B;IAED,QAAQ,CAAC,IAAI,SAAU,CAAC,KAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB7C;IAEF,IAAI,MAAM,IAAI,OAAO,CAEpB;CACF"}
@@ -67,4 +67,4 @@ export class BufferedAsyncIterable {
67
67
  return this.done;
68
68
  }
69
69
  }
70
- //# sourceMappingURL=BufferedAsyncIterable.js.map
70
+ //# sourceMappingURL=bufferedAsyncIterable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bufferedAsyncIterable.js","sourceRoot":"","sources":["../../utils/bufferedAsyncIterable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAgB;IACtB,UAAU,CAAS;IAEnB,IAAI,GAAG,KAAK,CAAC;IAErB,KAAK,CAA2B;IAEhC,YAAY,UAAU,GAAW,IAAI;QACnC,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,IAAI;QACF,oBAAoB;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,EAAG,CAAC;QAChC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,EAAK,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,GAAG,QAAQ;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEQ,IAAI,GAAG,CAAC,IAAO,EAAwB,EAAE;QAChD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACzC,8EAA8E;YAC9E,6EAA6E;YAC7E,6EAA6E;YAC7E,2EAA2E;YAC3E,+EAA+E;YAC/E,oCAAoC;YACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../utils/deferred.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAG,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,MAAM,EAAG,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;;CAQ/B"}
1
+ {"version":3,"file":"deferred.d.ts","sourceRoot":"","sources":["../../utils/deferred.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,EAAG,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,MAAM,EAAG,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAE9B,cAKC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"deferred.js","sourceRoot":"","sources":["../../utils/deferred.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,QAAQ;IACnB,OAAO,CAAa;IACpB,OAAO,CAAoB;IAC3B,MAAM,CAAwB;IAE9B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"deferred.js","sourceRoot":"","sources":["../../utils/deferred.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACnB,OAAO,CAAa;IACpB,OAAO,CAAoB;IAC3B,MAAM,CAAwB;IAE9B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function getOrInsert<K, V>(map: Map<K, V>, key: K, defaultValue: V): V;
2
+ //# sourceMappingURL=getOrInsertPolyFill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrInsertPolyFill.d.ts","sourceRoot":"","sources":["../../utils/getOrInsertPolyFill.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAM5E"}
@@ -0,0 +1,12 @@
1
+ /*
2
+ Node 26 has getOrInsert by default.
3
+ This is a polyfill for older versions
4
+ */
5
+ export function getOrInsert(map, key, defaultValue) {
6
+ if (map.has(key)) {
7
+ return map.get(key);
8
+ }
9
+ map.set(key, defaultValue);
10
+ return defaultValue;
11
+ }
12
+ //# sourceMappingURL=getOrInsertPolyFill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrInsertPolyFill.js","sourceRoot":"","sources":["../../utils/getOrInsertPolyFill.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,WAAW,CAAO,GAAc,EAAE,GAAM,EAAE,YAAe;IACvE,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC3B,OAAO,YAAY,CAAC;AACtB,CAAC"}
@@ -1,16 +1,26 @@
1
1
  /**
2
- * The available log levels
2
+ * The available log levels used to filter messages.
3
3
  */
4
4
  export declare const LogLevel: {
5
+ /** Crucial application errors or failures. */
5
6
  readonly error: 0;
7
+ /** Non-fatal warnings that indicate unexpected behavior. */
6
8
  readonly warn: 1;
9
+ /** Informational statements highlighting general operational flow. */
7
10
  readonly info: 2;
11
+ /** Detailed tracing and comprehensive runtime statements. */
8
12
  readonly verbose: 3;
13
+ /** High-density internal troubleshooting logs. */
9
14
  readonly debug: 4;
10
15
  };
11
- export type TLogLevel = typeof LogLevel[keyof typeof LogLevel];
12
16
  /**
13
- * Simple logger class
17
+ * Union type representing the permitted numeric log level indices.
18
+ */
19
+ export type LogLevel = typeof LogLevel[keyof typeof LogLevel];
20
+ /**
21
+ * Simple logger class providing level-configurable output routing.
22
+ * @class Logger
23
+ *
14
24
  * @example
15
25
  * ```ts
16
26
  * const logger = new Logger();
@@ -23,21 +33,48 @@ export type TLogLevel = typeof LogLevel[keyof typeof LogLevel];
23
33
  * ```
24
34
  */
25
35
  export declare class Logger {
36
+ /** Native console reference used to output critical errors. */
26
37
  private defaultError;
38
+ /** Native console reference used to output warning flags. */
27
39
  private defaultWarn;
40
+ /** Native console reference used to output standard runtime indicators. */
28
41
  private defaultInfo;
42
+ /** Native console reference used to track granular metrics and details. */
29
43
  private defaultVerbose;
44
+ /** Native console reference used to step through highly specific operations. */
30
45
  private defaultDebug;
46
+ /** Flag indicating if error messages should be logged. */
47
+ isError: boolean;
48
+ /** Flag indicating if warning messages should be logged. */
49
+ isWarn: boolean;
50
+ /** Flag indicating if informational messages should be logged. */
51
+ isInfo: boolean;
52
+ /** Flag indicating if verbose messages should be logged. */
53
+ isVerbose: boolean;
54
+ /** Flag indicating if debug messages should be logged. */
55
+ isDebug: boolean;
56
+ /** Log an error message to the standard error stream. */
31
57
  error: typeof console.log;
58
+ /** Log a warning message if the active log level permits. */
32
59
  warn: typeof console.log;
60
+ /** Log an informational status update if the active log level permits. */
33
61
  info: typeof console.log;
62
+ /** Log extended telemetry notes if the active log level permits. */
34
63
  verbose: typeof console.log;
64
+ /** Log debug parameters and objects if the active log level permits. */
35
65
  debug: typeof console.log;
66
+ /** Creates a wrapper function that evaluates lazy log arguments before invoking the target logging function. */
67
+ private createLogFn;
68
+ /** Create a new Logger instance. */
36
69
  constructor();
37
- level(logLevel: TLogLevel): void;
70
+ /**
71
+ * Adjusts the current verbosity threshold, enabling or masking specific log outputs.
72
+ * @param {LogLevel} logLevel - The minimum numeric severity level threshold to output.
73
+ */
74
+ level(logLevel: LogLevel): void;
38
75
  }
39
76
  /**
40
- * logger provides a singleton logger instance
77
+ * Provides a single pre-configured global logger instance.
41
78
  * @example
42
79
  * ```ts
43
80
  * import { logger } from "./utils/logger.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../utils/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAE/D;;;;;;;;;;;;GAYG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,YAAY,CAAe;IAEnC,KAAK,EAAE,OAAO,OAAO,CAAC,GAAG,CAAqB;IAC9C,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAoB;IAC5C,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAoB;IAC5C,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,CAAQ;IACnC,KAAK,EAAE,OAAO,OAAO,CAAC,GAAG,CAAQ;;IAIjC,KAAK,CAAC,QAAQ,EAAE,SAAS;CAM1B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,EAAE,MAAqB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../utils/logger.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB,8CAA8C;aAC9C,KAAK,EAAE,CAAC;IACR,4DAA4D;aAC5D,IAAI,EAAE,CAAC;IACP,sEAAsE;aACtE,IAAI,EAAE,CAAC;IACP,6DAA6D;aAC7D,OAAO,EAAE,CAAC;IACV,kDAAkD;aAClD,KAAK,EAAE,CAAC;CACA,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,QAAQ,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAI9D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,MAAM;IACjB,+DAA+D;IAC/D,OAAO,CAAC,YAAY,CAAiB;IACrC,6DAA6D;IAC7D,OAAO,CAAC,WAAW,CAAgB;IACnC,2EAA2E;IAC3E,OAAO,CAAC,WAAW,CAAgB;IACnC,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAAe;IACrC,gFAAgF;IAChF,OAAO,CAAC,YAAY,CAAe;IAEnC,0DAA0D;IAC1D,OAAO,UAAQ;IACf,4DAA4D;IAC5D,MAAM,UAAQ;IACd,kEAAkE;IAClE,MAAM,UAAQ;IACd,4DAA4D;IAC5D,SAAS,UAAS;IAClB,0DAA0D;IAC1D,OAAO,UAAS;IAEhB,yDAAyD;IACzD,KAAK,EAAE,OAAO,OAAO,CAAC,GAAG,CAAqB;IAC9C,6DAA6D;IAC7D,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAoB;IAC5C,0EAA0E;IAC1E,IAAI,EAAE,OAAO,OAAO,CAAC,GAAG,CAAoB;IAC5C,oEAAoE;IACpE,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,CAAQ;IACnC,wEAAwE;IACxE,KAAK,EAAE,OAAO,OAAO,CAAC,GAAG,CAAQ;IAEjC,gHAAgH;IAEhH,OAAO,CAAC,WAAW;IASnB,oCAAoC;IACpC,cAAgB;IAEhB;;;OAGG;IACH,KAAK,CAAC,QAAQ,EAAE,QAAQ,QAWvB;CACF;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,EAAE,MAAqB,CAAC"}
@@ -1,16 +1,23 @@
1
1
  import { noop } from "./utils.js";
2
2
  /**
3
- * The available log levels
3
+ * The available log levels used to filter messages.
4
4
  */
5
5
  export const LogLevel = {
6
+ /** Crucial application errors or failures. */
6
7
  error: 0,
8
+ /** Non-fatal warnings that indicate unexpected behavior. */
7
9
  warn: 1,
10
+ /** Informational statements highlighting general operational flow. */
8
11
  info: 2,
12
+ /** Detailed tracing and comprehensive runtime statements. */
9
13
  verbose: 3,
14
+ /** High-density internal troubleshooting logs. */
10
15
  debug: 4,
11
16
  };
12
17
  /**
13
- * Simple logger class
18
+ * Simple logger class providing level-configurable output routing.
19
+ * @class Logger
20
+ *
14
21
  * @example
15
22
  * ```ts
16
23
  * const logger = new Logger();
@@ -23,26 +30,65 @@ export const LogLevel = {
23
30
  * ```
24
31
  */
25
32
  export class Logger {
33
+ /** Native console reference used to output critical errors. */
26
34
  defaultError = console.error;
35
+ /** Native console reference used to output warning flags. */
27
36
  defaultWarn = console.warn;
37
+ /** Native console reference used to output standard runtime indicators. */
28
38
  defaultInfo = console.info;
39
+ /** Native console reference used to track granular metrics and details. */
29
40
  defaultVerbose = console.log;
41
+ /** Native console reference used to step through highly specific operations. */
30
42
  defaultDebug = console.log;
43
+ /** Flag indicating if error messages should be logged. */
44
+ isError = true;
45
+ /** Flag indicating if warning messages should be logged. */
46
+ isWarn = true;
47
+ /** Flag indicating if informational messages should be logged. */
48
+ isInfo = true;
49
+ /** Flag indicating if verbose messages should be logged. */
50
+ isVerbose = false;
51
+ /** Flag indicating if debug messages should be logged. */
52
+ isDebug = false;
53
+ /** Log an error message to the standard error stream. */
31
54
  error = this.defaultError;
55
+ /** Log a warning message if the active log level permits. */
32
56
  warn = this.defaultWarn;
57
+ /** Log an informational status update if the active log level permits. */
33
58
  info = this.defaultInfo;
59
+ /** Log extended telemetry notes if the active log level permits. */
34
60
  verbose = noop;
61
+ /** Log debug parameters and objects if the active log level permits. */
35
62
  debug = noop;
63
+ /** Creates a wrapper function that evaluates lazy log arguments before invoking the target logging function. */
64
+ // deno-lint-ignore no-explicit-any
65
+ createLogFn(targetFn) {
66
+ return (...args) => {
67
+ const evaluated = args.map((arg) => (typeof arg === "function" ? arg() : arg));
68
+ targetFn(...evaluated);
69
+ };
70
+ }
71
+ /** Create a new Logger instance. */
36
72
  constructor() { }
73
+ /**
74
+ * Adjusts the current verbosity threshold, enabling or masking specific log outputs.
75
+ * @param {LogLevel} logLevel - The minimum numeric severity level threshold to output.
76
+ */
37
77
  level(logLevel) {
38
- this.warn = logLevel > 0 ? this.defaultWarn : noop;
39
- this.info = logLevel > 1 ? this.defaultInfo : noop;
40
- this.verbose = logLevel > 2 ? this.defaultVerbose : noop;
41
- this.debug = logLevel > 3 ? this.defaultDebug : noop;
78
+ this.isWarn = logLevel >= LogLevel.warn;
79
+ this.isInfo = logLevel >= LogLevel.info;
80
+ this.isVerbose = logLevel >= LogLevel.verbose;
81
+ this.isDebug = logLevel >= LogLevel.debug;
82
+ this.warn = this.isWarn ? this.createLogFn(this.defaultWarn) : noop;
83
+ this.info = this.isInfo ? this.createLogFn(this.defaultInfo) : noop;
84
+ this.verbose = this.isVerbose
85
+ ? this.createLogFn(this.defaultVerbose)
86
+ : noop;
87
+ this.debug = this.isDebug ? this.createLogFn(this.defaultDebug) : noop;
42
88
  }
43
89
  }
44
90
  /**
45
- * logger provides a singleton logger instance
91
+ * Provides a single pre-configured global logger instance.
46
92
  * @example
47
93
  * ```ts
48
94
  * import { logger } from "./utils/logger.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;CACA,CAAC;AAIX;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,MAAM;IACT,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IAC7B,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IAC7B,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAEnC,KAAK,GAAuB,IAAI,CAAC,YAAY,CAAC;IAC9C,IAAI,GAAuB,IAAI,CAAC,WAAW,CAAC;IAC5C,IAAI,GAAuB,IAAI,CAAC,WAAW,CAAC;IAC5C,OAAO,GAAuB,IAAI,CAAC;IACnC,KAAK,GAAuB,IAAI,CAAC;IAEjC,gBAAe,CAAC;IAEhB,KAAK,CAAC,QAAmB;QACvB,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,CAAC;CACF;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAW,IAAI,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../utils/logger.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,10 @@
5
5
  export { assert } from "./assert.ts";
6
6
  export { Deferred } from "./deferred.ts";
7
7
  export { Logger, logger, LogLevel } from "./logger.ts";
8
- export { BufferedAsyncIterable } from "./BufferedAsyncIterable.ts";
8
+ export { BufferedAsyncIterable } from "./bufferedAsyncIterable.ts";
9
+ export { joinTopicFilter, parseTopicFilter, topicFilterToRegExp, } from "./topicFilter.ts";
10
+ export { OutboundTopicAliasManager } from "./outboundTopicAliasManager.ts";
11
+ export type { OutboundTopicAlias } from "./outboundTopicAliasManager.ts";
12
+ export { hasWildcards, invalidmaxTopicLevels, invalidTopic, invalidTopicFilter, } from "./validators.ts";
13
+ export { delay, noop } from "./utils.ts";
9
14
  //# sourceMappingURL=mod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../utils/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../utils/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
package/dist/utils/mod.js CHANGED
@@ -5,5 +5,9 @@
5
5
  export { assert } from "./assert.js";
6
6
  export { Deferred } from "./deferred.js";
7
7
  export { Logger, logger, LogLevel } from "./logger.js";
8
- export { BufferedAsyncIterable } from "./BufferedAsyncIterable.js";
8
+ export { BufferedAsyncIterable } from "./bufferedAsyncIterable.js";
9
+ export { joinTopicFilter, parseTopicFilter, topicFilterToRegExp, } from "./topicFilter.js";
10
+ export { OutboundTopicAliasManager } from "./outboundTopicAliasManager.js";
11
+ export { hasWildcards, invalidmaxTopicLevels, invalidTopic, invalidTopicFilter, } from "./validators.js";
12
+ export { delay, noop } from "./utils.js";
9
13
  //# sourceMappingURL=mod.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../utils/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../utils/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Represents the result of processing an outbound topic name,
3
+ * containing either the original topic name, a topic alias integer, or both.
4
+ */
5
+ export interface OutboundTopicAlias {
6
+ /**
7
+ * The topic name.
8
+ * Will be empty (`""`) when a valid alias mapping has already been established.
9
+ */
10
+ topicName: string;
11
+ /**
12
+ * The numeric alias assigned to the topic, if aliases are enabled.
13
+ */
14
+ topicAlias?: number;
15
+ }
16
+ /**
17
+ * Manages outbound MQTT topic aliases using a Least Recently Used (LRU) caching strategy.
18
+ */
19
+ export declare class OutboundTopicAliasManager {
20
+ /**
21
+ * The maximum number of topic aliases supported by the broker/client.
22
+ */
23
+ private readonly maxAliases;
24
+ /**
25
+ * Internal mapping from topic names to assigned aliases.
26
+ * Leverages JavaScript's Map insertion-order behavior to act as an LRU cache.
27
+ */
28
+ private readonly topicToAlias;
29
+ /**
30
+ * Creates an instance of `OutboundTopicAliasManager`.
31
+ *
32
+ * @param clientTopicAliasMaximum - The maximum number of topic aliases allowed (defaults to `0`, meaning disabled).
33
+ */
34
+ constructor(clientTopicAliasMaximum?: number);
35
+ /**
36
+ * Processes an outbound topic name and returns the appropriate payload metadata
37
+ * (`OutboundTopcAlias`) based on alias availability and caching state.
38
+ *
39
+ * - If aliases are disabled (`maxAliases === 0`), returns only the original `topicName`.
40
+ * - If the topic is already cached (cache hit), refreshes its LRU position and returns the `topicAlias` with an empty `topicName`.
41
+ * - If the topic is not cached (cache miss), assigns a new alias or evicts the least recently used topic alias mapping.
42
+ *
43
+ * @param topic - The outbound MQTT topic name to process.
44
+ * @returns An object containing the formatted `topicName` and optional `topicAlias`.
45
+ */
46
+ processTopic(topic: string): OutboundTopicAlias;
47
+ /**
48
+ * Clears all internal topic alias mappings and releases cached resources.
49
+ */
50
+ destroy(): void;
51
+ }
52
+ //# sourceMappingURL=outboundTopicAliasManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outboundTopicAliasManager.d.ts","sourceRoot":"","sources":["../../utils/outboundTopicAliasManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,yBAAyB;IACpC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IAEnD;;;;OAIG;IACH,YAAY,uBAAuB,GAAE,MAAU,EAG9C;IAED;;;;;;;;;;OAUG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAsCrD;IAED;;OAEG;IACI,OAAO,IAAI,IAAI,CAErB;CACF"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Manages outbound MQTT topic aliases using a Least Recently Used (LRU) caching strategy.
3
+ */
4
+ export class OutboundTopicAliasManager {
5
+ /**
6
+ * The maximum number of topic aliases supported by the broker/client.
7
+ */
8
+ maxAliases;
9
+ /**
10
+ * Internal mapping from topic names to assigned aliases.
11
+ * Leverages JavaScript's Map insertion-order behavior to act as an LRU cache.
12
+ */
13
+ topicToAlias;
14
+ /**
15
+ * Creates an instance of `OutboundTopicAliasManager`.
16
+ *
17
+ * @param clientTopicAliasMaximum - The maximum number of topic aliases allowed (defaults to `0`, meaning disabled).
18
+ */
19
+ constructor(clientTopicAliasMaximum = 0) {
20
+ this.maxAliases = clientTopicAliasMaximum;
21
+ this.topicToAlias = new Map();
22
+ }
23
+ /**
24
+ * Processes an outbound topic name and returns the appropriate payload metadata
25
+ * (`OutboundTopcAlias`) based on alias availability and caching state.
26
+ *
27
+ * - If aliases are disabled (`maxAliases === 0`), returns only the original `topicName`.
28
+ * - If the topic is already cached (cache hit), refreshes its LRU position and returns the `topicAlias` with an empty `topicName`.
29
+ * - If the topic is not cached (cache miss), assigns a new alias or evicts the least recently used topic alias mapping.
30
+ *
31
+ * @param topic - The outbound MQTT topic name to process.
32
+ * @returns An object containing the formatted `topicName` and optional `topicAlias`.
33
+ */
34
+ processTopic(topic) {
35
+ if (this.maxAliases === 0) {
36
+ return { topicName: topic };
37
+ }
38
+ // Cache Hit -> Refresh LRU-position in Map
39
+ if (this.topicToAlias.has(topic)) {
40
+ const alias = this.topicToAlias.get(topic);
41
+ this.topicToAlias.delete(topic);
42
+ this.topicToAlias.set(topic, alias);
43
+ return {
44
+ topicName: "",
45
+ topicAlias: alias,
46
+ };
47
+ }
48
+ // Cache Miss
49
+ let assignedAlias;
50
+ if (this.topicToAlias.size < this.maxAliases) {
51
+ // While there is space, simply assign the next alias (1, 2, 3...)
52
+ assignedAlias = this.topicToAlias.size + 1;
53
+ }
54
+ else {
55
+ // Cache full: reuse the alias of the least used topic (first key in the Map)
56
+ const lruTopic = this.topicToAlias.keys().next().value;
57
+ assignedAlias = this.topicToAlias.get(lruTopic);
58
+ this.topicToAlias.delete(lruTopic);
59
+ }
60
+ // Store the new topic
61
+ this.topicToAlias.set(topic, assignedAlias);
62
+ return {
63
+ topicName: topic,
64
+ topicAlias: assignedAlias,
65
+ };
66
+ }
67
+ /**
68
+ * Clears all internal topic alias mappings and releases cached resources.
69
+ */
70
+ destroy() {
71
+ this.topicToAlias.clear();
72
+ }
73
+ }
74
+ //# sourceMappingURL=outboundTopicAliasManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outboundTopicAliasManager.js","sourceRoot":"","sources":["../../utils/outboundTopicAliasManager.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACc,UAAU,CAAS;IAEpC;;;OAGG;IACc,YAAY,CAAsB;IAEnD;;;;OAIG;IACH,YAAY,uBAAuB,GAAW,CAAC;QAC7C,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC;QAC1C,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACI,YAAY,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QAED,2CAA2C;QAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAEpC,OAAO;gBACL,SAAS,EAAE,EAAE;gBACb,UAAU,EAAE,KAAK;aAClB,CAAC;QACJ,CAAC;QAED,aAAa;QACb,IAAI,aAAqB,CAAC;QAE1B,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC7C,kEAAkE;YAClE,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACvD,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAS,CAAE,CAAC;YAElD,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAS,CAAC,CAAC;QACtC,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAE5C,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,aAAa;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,OAAO;QACZ,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../utils/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAa;IAE9B;;;OAGG;IACI,IAAI,IAAI,MAAM;IAGrB;;;OAGG;IACI,OAAO,IAAI,OAAO;IAGzB;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAG7B;;;;OAIG;IACI,OAAO,IAAI,CAAC,GAAG,SAAS;CAiBhC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../utils/queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,UAAU,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAW;IACxB,OAAO,CAAC,SAAS,CAAa;IAE9B;;;OAGG;IACI,IAAI,IAAI,MAAM,CAEpB;IACD;;;OAGG;IACI,OAAO,IAAI,OAAO,CAExB;IACD;;;OAGG;IACI,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAE5B;IACD;;;;OAIG;IACI,OAAO,IAAI,CAAC,GAAG,SAAS,CAgB9B;CACF"}