@seriousme/opifex 1.11.3 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (542) hide show
  1. package/README.md +99 -40
  2. package/bin/conformanceServer.ts +45 -13
  3. package/bin/demoServer.ts +38 -13
  4. package/bin/mqtt.ts +2 -2
  5. package/client/ConnectionState.ts +3 -1
  6. package/client/client.ts +88 -47
  7. package/client/context.ts +79 -27
  8. package/client/deps.ts +10 -3
  9. package/client/handlers/handleAuth.test.ts +193 -0
  10. package/client/handlers/handleAuth.ts +89 -0
  11. package/client/handlers/handleConnack.test.ts +173 -0
  12. package/client/handlers/handleConnack.ts +18 -8
  13. package/client/handlers/handleDisconnect.test.ts +22 -0
  14. package/client/handlers/handleDisconnect.ts +17 -0
  15. package/client/handlers/handlePacket.test.ts +242 -0
  16. package/client/handlers/handlePacket.ts +19 -5
  17. package/client/handlers/handlePuback.test.ts +99 -0
  18. package/client/handlers/handlePuback.ts +6 -0
  19. package/client/handlers/handlePubcomp.test.ts +112 -0
  20. package/client/handlers/handlePubcomp.ts +5 -0
  21. package/client/handlers/handlePublish.test.ts +188 -0
  22. package/client/handlers/handlePubrec.test.ts +119 -0
  23. package/client/handlers/handlePubrec.ts +5 -1
  24. package/client/handlers/handlePubrel.test.ts +136 -0
  25. package/client/handlers/handleSuback.test.ts +122 -0
  26. package/client/handlers/handleSuback.ts +3 -0
  27. package/client/handlers/handleUnsuback.test.ts +101 -0
  28. package/client/mod.ts +13 -2
  29. package/client/store/memoryStore.ts +12 -11
  30. package/client/store/store.ts +4 -2
  31. package/deno/README.md +1 -2
  32. package/deno/tcpClient.test.ts +75 -0
  33. package/deno/tcpClient.ts +36 -18
  34. package/deno/tcpServer.test.ts +22 -21
  35. package/deno/tcpServer.ts +26 -4
  36. package/deno/tlsServer.test.ts +97 -0
  37. package/deno/tlsServer.ts +58 -0
  38. package/deno/wsServer.test.ts +93 -0
  39. package/deno/wsServer.ts +96 -0
  40. package/dev_utils/generateCert.ts +95 -0
  41. package/dev_utils/mockConn.ts +36 -0
  42. package/dev_utils/mockServer.ts +28 -0
  43. package/dev_utils/mod.ts +30 -3
  44. package/dev_utils/packetHelpers.ts +404 -0
  45. package/dev_utils/test-handlers.ts +98 -0
  46. package/dev_utils/timers.ts +14 -0
  47. package/dev_utils/webStreamPair.test.ts +171 -0
  48. package/dev_utils/webStreamPair.ts +143 -0
  49. package/dist/bin/conformanceServer.js +17 -12
  50. package/dist/bin/conformanceServer.js.map +1 -1
  51. package/dist/bin/demoServer.js +16 -12
  52. package/dist/bin/demoServer.js.map +1 -1
  53. package/dist/bin/mqtt.js +2 -2
  54. package/dist/bin/mqtt.js.map +1 -1
  55. package/dist/client/ConnectionState.d.ts +3 -1
  56. package/dist/client/ConnectionState.d.ts.map +1 -1
  57. package/dist/client/ConnectionState.js +2 -0
  58. package/dist/client/ConnectionState.js.map +1 -1
  59. package/dist/client/client.d.ts +47 -21
  60. package/dist/client/client.d.ts.map +1 -1
  61. package/dist/client/client.js +57 -20
  62. package/dist/client/client.js.map +1 -1
  63. package/dist/client/context.d.ts +15 -7
  64. package/dist/client/context.d.ts.map +1 -1
  65. package/dist/client/context.js +44 -12
  66. package/dist/client/context.js.map +1 -1
  67. package/dist/client/deps.d.ts +4 -3
  68. package/dist/client/deps.d.ts.map +1 -1
  69. package/dist/client/deps.js +1 -1
  70. package/dist/client/deps.js.map +1 -1
  71. package/dist/client/handlers/handleAuth.d.ts +9 -0
  72. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  73. package/dist/client/handlers/handleAuth.js +66 -0
  74. package/dist/client/handlers/handleAuth.js.map +1 -0
  75. package/dist/client/handlers/handleConnack.d.ts +2 -2
  76. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  77. package/dist/client/handlers/handleConnack.js +16 -6
  78. package/dist/client/handlers/handleConnack.js.map +1 -1
  79. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  80. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  81. package/dist/client/handlers/handleDisconnect.js +15 -0
  82. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  83. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  84. package/dist/client/handlers/handlePacket.js +14 -3
  85. package/dist/client/handlers/handlePacket.js.map +1 -1
  86. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  87. package/dist/client/handlers/handlePuback.js +5 -0
  88. package/dist/client/handlers/handlePuback.js.map +1 -1
  89. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.js +5 -0
  91. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  92. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  93. package/dist/client/handlers/handlePubrec.js +5 -1
  94. package/dist/client/handlers/handlePubrec.js.map +1 -1
  95. package/dist/client/handlers/handleSuback.d.ts +1 -0
  96. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  97. package/dist/client/handlers/handleSuback.js +3 -0
  98. package/dist/client/handlers/handleSuback.js.map +1 -1
  99. package/dist/client/mod.d.ts +3 -2
  100. package/dist/client/mod.d.ts.map +1 -1
  101. package/dist/client/mod.js +1 -1
  102. package/dist/client/mod.js.map +1 -1
  103. package/dist/client/store/memoryStore.d.ts +3 -3
  104. package/dist/client/store/memoryStore.d.ts.map +1 -1
  105. package/dist/client/store/memoryStore.js +3 -3
  106. package/dist/client/store/memoryStore.js.map +1 -1
  107. package/dist/client/store/store.d.ts +3 -2
  108. package/dist/client/store/store.d.ts.map +1 -1
  109. package/dist/client/store/store.js +1 -1
  110. package/dist/client/store/store.js.map +1 -1
  111. package/dist/dev_utils/generateCert.d.ts +11 -0
  112. package/dist/dev_utils/generateCert.d.ts.map +1 -0
  113. package/dist/dev_utils/generateCert.js +76 -0
  114. package/dist/dev_utils/generateCert.js.map +1 -0
  115. package/dist/examples/authHandler.test.d.ts +2 -0
  116. package/dist/examples/authHandler.test.d.ts.map +1 -0
  117. package/dist/examples/authHandler.test.js +123 -0
  118. package/dist/examples/authHandler.test.js.map +1 -0
  119. package/dist/examples/mqtt.test.d.ts +2 -0
  120. package/dist/examples/mqtt.test.d.ts.map +1 -0
  121. package/dist/examples/mqtt.test.js +70 -0
  122. package/dist/examples/mqtt.test.js.map +1 -0
  123. package/dist/examples/mqtts.test.d.ts +2 -0
  124. package/dist/examples/mqtts.test.d.ts.map +1 -0
  125. package/dist/examples/mqtts.test.js +81 -0
  126. package/dist/examples/mqtts.test.js.map +1 -0
  127. package/dist/mqttConn/mqttConn.d.ts +24 -31
  128. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  129. package/dist/mqttConn/mqttConn.js +57 -36
  130. package/dist/mqttConn/mqttConn.js.map +1 -1
  131. package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
  132. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  133. package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
  134. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  135. package/dist/mqttPacket/PacketType.d.ts +4 -0
  136. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  137. package/dist/mqttPacket/Properties.d.ts +4 -4
  138. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  139. package/dist/mqttPacket/Properties.js.map +1 -1
  140. package/dist/mqttPacket/ReasonCode.d.ts +4 -5
  141. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  142. package/dist/mqttPacket/ReasonCode.js +1 -0
  143. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  144. package/dist/mqttPacket/RetainHandling.d.ts +4 -0
  145. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  146. package/dist/mqttPacket/auth.d.ts +7 -8
  147. package/dist/mqttPacket/auth.d.ts.map +1 -1
  148. package/dist/mqttPacket/auth.js +31 -30
  149. package/dist/mqttPacket/auth.js.map +1 -1
  150. package/dist/mqttPacket/codec.d.ts +48 -0
  151. package/dist/mqttPacket/codec.d.ts.map +1 -0
  152. package/dist/mqttPacket/codec.js +93 -0
  153. package/dist/mqttPacket/codec.js.map +1 -0
  154. package/dist/mqttPacket/connack.d.ts +11 -10
  155. package/dist/mqttPacket/connack.d.ts.map +1 -1
  156. package/dist/mqttPacket/connack.js +43 -45
  157. package/dist/mqttPacket/connack.js.map +1 -1
  158. package/dist/mqttPacket/connect.d.ts +7 -7
  159. package/dist/mqttPacket/connect.d.ts.map +1 -1
  160. package/dist/mqttPacket/connect.js +156 -157
  161. package/dist/mqttPacket/connect.js.map +1 -1
  162. package/dist/mqttPacket/decoder.d.ts +6 -16
  163. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  164. package/dist/mqttPacket/decoder.js +7 -28
  165. package/dist/mqttPacket/decoder.js.map +1 -1
  166. package/dist/mqttPacket/disconnect.d.ts +9 -8
  167. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  168. package/dist/mqttPacket/disconnect.js +41 -43
  169. package/dist/mqttPacket/disconnect.js.map +1 -1
  170. package/dist/mqttPacket/encoder.d.ts +7 -19
  171. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  172. package/dist/mqttPacket/encoder.js +5 -28
  173. package/dist/mqttPacket/encoder.js.map +1 -1
  174. package/dist/mqttPacket/mod.d.ts +21 -103
  175. package/dist/mqttPacket/mod.d.ts.map +1 -1
  176. package/dist/mqttPacket/mod.js +5 -94
  177. package/dist/mqttPacket/mod.js.map +1 -1
  178. package/dist/mqttPacket/pingreq.d.ts +6 -6
  179. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  180. package/dist/mqttPacket/pingreq.js +11 -13
  181. package/dist/mqttPacket/pingreq.js.map +1 -1
  182. package/dist/mqttPacket/pingres.d.ts +6 -6
  183. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  184. package/dist/mqttPacket/pingres.js +11 -13
  185. package/dist/mqttPacket/pingres.js.map +1 -1
  186. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  187. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  188. package/dist/mqttPacket/protocolLevels.js +5 -1
  189. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  190. package/dist/mqttPacket/pubblishAcks.d.ts +9 -10
  191. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  192. package/dist/mqttPacket/pubblishAcks.js +43 -45
  193. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  194. package/dist/mqttPacket/publish.d.ts +8 -7
  195. package/dist/mqttPacket/publish.d.ts.map +1 -1
  196. package/dist/mqttPacket/publish.js +53 -55
  197. package/dist/mqttPacket/publish.js.map +1 -1
  198. package/dist/mqttPacket/suback.d.ts +9 -8
  199. package/dist/mqttPacket/suback.d.ts.map +1 -1
  200. package/dist/mqttPacket/suback.js +38 -40
  201. package/dist/mqttPacket/suback.js.map +1 -1
  202. package/dist/mqttPacket/subscribe.d.ts +41 -10
  203. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  204. package/dist/mqttPacket/subscribe.js +90 -89
  205. package/dist/mqttPacket/subscribe.js.map +1 -1
  206. package/dist/mqttPacket/types.d.ts +2 -29
  207. package/dist/mqttPacket/types.d.ts.map +1 -1
  208. package/dist/mqttPacket/unsuback.d.ts +9 -8
  209. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  210. package/dist/mqttPacket/unsuback.js +32 -34
  211. package/dist/mqttPacket/unsuback.js.map +1 -1
  212. package/dist/mqttPacket/unsubscribe.d.ts +26 -8
  213. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  214. package/dist/mqttPacket/unsubscribe.js +45 -44
  215. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  216. package/dist/mqttPacket/validators.d.ts +4 -16
  217. package/dist/mqttPacket/validators.d.ts.map +1 -1
  218. package/dist/mqttPacket/validators.js +5 -26
  219. package/dist/mqttPacket/validators.js.map +1 -1
  220. package/dist/node/tcpClient.d.ts +22 -2
  221. package/dist/node/tcpClient.d.ts.map +1 -1
  222. package/dist/node/tcpClient.js +29 -10
  223. package/dist/node/tcpClient.js.map +1 -1
  224. package/dist/node/tcpServer.d.ts +18 -0
  225. package/dist/node/tcpServer.d.ts.map +1 -1
  226. package/dist/node/tcpServer.js +21 -2
  227. package/dist/node/tcpServer.js.map +1 -1
  228. package/dist/node/tlsServer.d.ts +37 -0
  229. package/dist/node/tlsServer.d.ts.map +1 -0
  230. package/dist/node/tlsServer.js +73 -0
  231. package/dist/node/tlsServer.js.map +1 -0
  232. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  233. package/dist/node/wrapNodeSocket.js +6 -28
  234. package/dist/node/wrapNodeSocket.js.map +1 -1
  235. package/dist/persistence/basicPersistence.d.ts +36 -0
  236. package/dist/persistence/basicPersistence.d.ts.map +1 -0
  237. package/dist/persistence/basicPersistence.js +306 -0
  238. package/dist/persistence/basicPersistence.js.map +1 -0
  239. package/dist/persistence/deps.d.ts +3 -2
  240. package/dist/persistence/deps.d.ts.map +1 -1
  241. package/dist/persistence/deps.js +2 -1
  242. package/dist/persistence/deps.js.map +1 -1
  243. package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
  244. package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
  245. package/dist/persistence/memory/memoryPersistence.js +12 -115
  246. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  247. package/dist/persistence/memory/memoryStorage.d.ts +45 -0
  248. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
  249. package/dist/persistence/memory/memoryStorage.js +143 -0
  250. package/dist/persistence/memory/memoryStorage.js.map +1 -0
  251. package/dist/persistence/mod.d.ts +3 -3
  252. package/dist/persistence/mod.d.ts.map +1 -1
  253. package/dist/persistence/mod.js +6 -1
  254. package/dist/persistence/mod.js.map +1 -1
  255. package/dist/persistence/persistence.d.ts +45 -70
  256. package/dist/persistence/persistence.d.ts.map +1 -1
  257. package/dist/persistence/persistence.js +1 -2
  258. package/dist/persistence/persistence.js.map +1 -1
  259. package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
  260. package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
  261. package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
  262. package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
  263. package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
  264. package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
  265. package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
  266. package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
  267. package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
  268. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
  269. package/dist/persistence/sqlite/sqliteStorage.js +194 -0
  270. package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
  271. package/dist/persistence/storage.d.ts +38 -0
  272. package/dist/persistence/storage.d.ts.map +1 -0
  273. package/dist/persistence/storage.js +5 -0
  274. package/dist/persistence/storage.js.map +1 -0
  275. package/dist/server/config.d.ts +47 -0
  276. package/dist/server/config.d.ts.map +1 -0
  277. package/dist/server/config.js +41 -0
  278. package/dist/server/config.js.map +1 -0
  279. package/dist/server/context.d.ts +199 -25
  280. package/dist/server/context.d.ts.map +1 -1
  281. package/dist/server/context.js +432 -53
  282. package/dist/server/context.js.map +1 -1
  283. package/dist/server/deps.d.ts +5 -6
  284. package/dist/server/deps.d.ts.map +1 -1
  285. package/dist/server/deps.js +2 -2
  286. package/dist/server/deps.js.map +1 -1
  287. package/dist/server/handlers/completeConnect.d.ts +9 -0
  288. package/dist/server/handlers/completeConnect.d.ts.map +1 -0
  289. package/dist/server/handlers/completeConnect.js +74 -0
  290. package/dist/server/handlers/completeConnect.js.map +1 -0
  291. package/dist/server/handlers/handleAuth.d.ts +9 -0
  292. package/dist/server/handlers/handleAuth.d.ts.map +1 -0
  293. package/dist/server/handlers/handleAuth.js +69 -0
  294. package/dist/server/handlers/handleAuth.js.map +1 -0
  295. package/dist/server/handlers/handleConnect.d.ts +2 -4
  296. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  297. package/dist/server/handlers/handleConnect.js +140 -67
  298. package/dist/server/handlers/handleConnect.js.map +1 -1
  299. package/dist/server/handlers/handleDisconnect.d.ts +1 -1
  300. package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
  301. package/dist/server/handlers/handleDisconnect.js +3 -3
  302. package/dist/server/handlers/handleDisconnect.js.map +1 -1
  303. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  304. package/dist/server/handlers/handlePacket.js +19 -6
  305. package/dist/server/handlers/handlePacket.js.map +1 -1
  306. package/dist/server/handlers/handlePuback.d.ts +1 -3
  307. package/dist/server/handlers/handlePuback.d.ts.map +1 -1
  308. package/dist/server/handlers/handlePuback.js +2 -8
  309. package/dist/server/handlers/handlePuback.js.map +1 -1
  310. package/dist/server/handlers/handlePubcomp.d.ts +1 -1
  311. package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
  312. package/dist/server/handlers/handlePubcomp.js +2 -4
  313. package/dist/server/handlers/handlePubcomp.js.map +1 -1
  314. package/dist/server/handlers/handlePublish.d.ts +1 -1
  315. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  316. package/dist/server/handlers/handlePublish.js +149 -45
  317. package/dist/server/handlers/handlePublish.js.map +1 -1
  318. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  319. package/dist/server/handlers/handlePubrec.js +2 -3
  320. package/dist/server/handlers/handlePubrec.js.map +1 -1
  321. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  322. package/dist/server/handlers/handlePubrel.js +6 -2
  323. package/dist/server/handlers/handlePubrel.js.map +1 -1
  324. package/dist/server/handlers/handleSubscribe.d.ts +1 -6
  325. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  326. package/dist/server/handlers/handleSubscribe.js +99 -38
  327. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  328. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  329. package/dist/server/handlers/handleUnsubscribe.js +19 -4
  330. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  331. package/dist/server/mod.d.ts +3 -3
  332. package/dist/server/mod.d.ts.map +1 -1
  333. package/dist/server/mod.js +1 -1
  334. package/dist/server/mod.js.map +1 -1
  335. package/dist/server/server.d.ts +32 -9
  336. package/dist/server/server.d.ts.map +1 -1
  337. package/dist/server/server.js +84 -15
  338. package/dist/server/server.js.map +1 -1
  339. package/dist/socket/socket.d.ts +15 -9
  340. package/dist/socket/socket.d.ts.map +1 -1
  341. package/dist/socket/socket.js +66 -18
  342. package/dist/socket/socket.js.map +1 -1
  343. package/dist/timer/timer.d.ts +32 -0
  344. package/dist/timer/timer.d.ts.map +1 -1
  345. package/dist/timer/timer.js +32 -0
  346. package/dist/timer/timer.js.map +1 -1
  347. package/dist/trie/trie.d.ts +10 -5
  348. package/dist/trie/trie.d.ts.map +1 -1
  349. package/dist/trie/trie.js +61 -41
  350. package/dist/trie/trie.js.map +1 -1
  351. package/dist/utils/assert.d.ts.map +1 -1
  352. package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
  353. package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
  354. package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
  355. package/dist/utils/bufferedAsyncIterable.js.map +1 -0
  356. package/dist/utils/deferred.d.ts.map +1 -1
  357. package/dist/utils/deferred.js.map +1 -1
  358. package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
  359. package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
  360. package/dist/utils/getOrInsertPolyFill.js +12 -0
  361. package/dist/utils/getOrInsertPolyFill.js.map +1 -0
  362. package/dist/utils/logger.d.ts +42 -5
  363. package/dist/utils/logger.d.ts.map +1 -1
  364. package/dist/utils/logger.js +53 -7
  365. package/dist/utils/logger.js.map +1 -1
  366. package/dist/utils/mod.d.ts +6 -1
  367. package/dist/utils/mod.d.ts.map +1 -1
  368. package/dist/utils/mod.js +5 -1
  369. package/dist/utils/mod.js.map +1 -1
  370. package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
  371. package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
  372. package/dist/utils/outboundTopicAliasManager.js +74 -0
  373. package/dist/utils/outboundTopicAliasManager.js.map +1 -0
  374. package/dist/utils/queue.d.ts.map +1 -1
  375. package/dist/utils/topicFilter.d.ts +32 -0
  376. package/dist/utils/topicFilter.d.ts.map +1 -0
  377. package/dist/utils/topicFilter.js +52 -0
  378. package/dist/utils/topicFilter.js.map +1 -0
  379. package/dist/utils/utils.d.ts +2 -0
  380. package/dist/utils/utils.d.ts.map +1 -1
  381. package/dist/utils/utils.js +2 -0
  382. package/dist/utils/utils.js.map +1 -1
  383. package/dist/utils/validators.d.ts +34 -0
  384. package/dist/utils/validators.d.ts.map +1 -0
  385. package/dist/utils/validators.js +61 -0
  386. package/dist/utils/validators.js.map +1 -0
  387. package/dist/web/webSocketStream.d.ts +29 -0
  388. package/dist/web/webSocketStream.d.ts.map +1 -0
  389. package/dist/web/webSocketStream.js +69 -0
  390. package/dist/web/webSocketStream.js.map +1 -0
  391. package/dist/web/wrapWebSocket.d.ts +12 -0
  392. package/dist/web/wrapWebSocket.d.ts.map +1 -0
  393. package/dist/web/wrapWebSocket.js +41 -0
  394. package/dist/web/wrapWebSocket.js.map +1 -0
  395. package/dist/web/wsClient.d.ts +14 -0
  396. package/dist/web/wsClient.d.ts.map +1 -0
  397. package/dist/web/wsClient.js +33 -0
  398. package/dist/web/wsClient.js.map +1 -0
  399. package/dist/web/wsClient.test.d.ts +2 -0
  400. package/dist/web/wsClient.test.d.ts.map +1 -0
  401. package/dist/web/wsClient.test.js +20 -0
  402. package/dist/web/wsClient.test.js.map +1 -0
  403. package/examples/authHandler.test.ts +164 -0
  404. package/examples/mqtt.test.ts +89 -0
  405. package/examples/mqtts.test.ts +100 -0
  406. package/examples/webSocket.test.ts +94 -0
  407. package/mqttConn/mqttConn.test.ts +9 -9
  408. package/mqttConn/mqttConn.ts +76 -60
  409. package/mqttPacket/AuthenticationResult.ts +6 -0
  410. package/mqttPacket/PacketType.ts +5 -0
  411. package/mqttPacket/Properties.ts +8 -5
  412. package/mqttPacket/ReasonCode.ts +8 -9
  413. package/mqttPacket/RetainHandling.ts +5 -0
  414. package/mqttPacket/auth.test.ts +1 -1
  415. package/mqttPacket/auth.ts +44 -51
  416. package/mqttPacket/codec.ts +147 -0
  417. package/mqttPacket/connack.ts +63 -73
  418. package/mqttPacket/connect.test.ts +2 -2
  419. package/mqttPacket/connect.ts +178 -192
  420. package/mqttPacket/decoder.test.ts +0 -39
  421. package/mqttPacket/decoder.ts +17 -46
  422. package/mqttPacket/disconnect.ts +60 -71
  423. package/mqttPacket/encoder.test.ts +2 -2
  424. package/mqttPacket/encoder.ts +13 -46
  425. package/mqttPacket/mod.ts +48 -204
  426. package/mqttPacket/pingreq.ts +22 -28
  427. package/mqttPacket/pingres.ts +22 -28
  428. package/mqttPacket/protocolLevels.ts +12 -7
  429. package/mqttPacket/pubblishAcks.ts +61 -75
  430. package/mqttPacket/publish.ts +70 -84
  431. package/mqttPacket/publishAcks.test.ts +3 -3
  432. package/mqttPacket/suback.ts +53 -68
  433. package/mqttPacket/subscribe.ts +146 -128
  434. package/mqttPacket/types.ts +2 -35
  435. package/mqttPacket/unsuback.ts +50 -61
  436. package/mqttPacket/unsubscribe.ts +77 -72
  437. package/mqttPacket/validators.ts +5 -31
  438. package/node/socket-node-stream.test.ts +322 -0
  439. package/node/socket-node-stream.ts +174 -0
  440. package/node/tcpClient.test.ts +70 -0
  441. package/node/tcpClient.ts +33 -17
  442. package/node/tcpServer.test.ts +24 -20
  443. package/node/tcpServer.ts +29 -6
  444. package/node/tlsServer.test.ts +94 -0
  445. package/node/tlsServer.ts +97 -0
  446. package/node/wrapNodeSocket.ts +7 -30
  447. package/package.json +72 -44
  448. package/persistence/basicPersistence.ts +495 -0
  449. package/persistence/deps.ts +11 -1
  450. package/persistence/memory/memoryPersistence.ts +12 -153
  451. package/persistence/memory/memoryStorage.ts +232 -0
  452. package/persistence/mod.ts +5 -10
  453. package/persistence/persistence.test.ts +24 -0
  454. package/persistence/persistence.testing.ts +1324 -0
  455. package/persistence/persistence.ts +112 -68
  456. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  457. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  458. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  459. package/persistence/sqlite/sqliteStorage.ts +324 -0
  460. package/persistence/storage.ts +84 -0
  461. package/server/config.ts +65 -0
  462. package/server/context.ts +660 -76
  463. package/server/deps.ts +24 -5
  464. package/server/handlers/completeConnect.ts +93 -0
  465. package/server/handlers/duplicate.test.ts +196 -0
  466. package/server/handlers/handleAuth.test.ts +225 -0
  467. package/server/handlers/handleAuth.ts +88 -0
  468. package/server/handlers/handleConnect.test.ts +589 -0
  469. package/server/handlers/handleConnect.ts +201 -86
  470. package/server/handlers/handleConnect.version.test.ts +108 -0
  471. package/server/handlers/handleDisconnect.test.ts +56 -0
  472. package/server/handlers/handleDisconnect.ts +3 -3
  473. package/server/handlers/handlePacket.test.ts +24 -0
  474. package/server/handlers/handlePacket.ts +30 -8
  475. package/server/handlers/handlePingreq.test.ts +29 -0
  476. package/server/handlers/handlePuback.test.ts +28 -0
  477. package/server/handlers/handlePuback.ts +5 -8
  478. package/server/handlers/handlePubcomp.test.ts +28 -0
  479. package/server/handlers/handlePubcomp.ts +5 -4
  480. package/server/handlers/handlePublish.test.ts +471 -0
  481. package/server/handlers/handlePublish.ts +188 -35
  482. package/server/handlers/handlePubrec.test.ts +28 -0
  483. package/server/handlers/handlePubrec.ts +2 -3
  484. package/server/handlers/handlePubrel.test.ts +74 -0
  485. package/server/handlers/handlePubrel.ts +12 -2
  486. package/server/handlers/handleSubscribe.test.ts +971 -0
  487. package/server/handlers/handleSubscribe.ts +157 -39
  488. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  489. package/server/handlers/handleUnsubscribe.ts +28 -4
  490. package/server/handlers/keepalive.test.ts +132 -0
  491. package/server/handlers/session.persistence.test.ts +194 -0
  492. package/server/handlers/will.delivery.test.ts +221 -0
  493. package/server/mod.ts +5 -4
  494. package/server/preconnect.test.ts +151 -0
  495. package/server/server.ts +117 -19
  496. package/socket/socket.test.ts +91 -0
  497. package/socket/socket.ts +85 -34
  498. package/timer/timer.test.ts +4 -7
  499. package/timer/timer.ts +36 -0
  500. package/tools/benchmarks/receiver.ts +51 -0
  501. package/tools/benchmarks/sender.ts +48 -0
  502. package/tools/benchmarks/utils.ts +31 -0
  503. package/tools/mqtt-compat/README.md +130 -0
  504. package/tools/mqtt-compat/broker.ts +52 -0
  505. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  506. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  507. package/trie/trie.test.ts +9 -1
  508. package/trie/trie.ts +70 -45
  509. package/utils/bufferedAsyncIterable.test.ts +92 -0
  510. package/utils/deferred.test.ts +36 -0
  511. package/utils/deferred.ts +0 -1
  512. package/utils/getOrInsertPolyFill.ts +12 -0
  513. package/utils/logger.test.ts +189 -0
  514. package/utils/logger.ts +64 -9
  515. package/utils/mod.ts +15 -1
  516. package/utils/outboundTopicAliasManager.ts +100 -0
  517. package/utils/queue.test.ts +61 -0
  518. package/utils/topicFilter.test.ts +63 -0
  519. package/utils/topicFilter.ts +61 -0
  520. package/utils/utils.ts +3 -0
  521. package/utils/validators.ts +67 -0
  522. package/web/webSocketStream.ts +97 -0
  523. package/web/wrapWebSocket.ts +52 -0
  524. package/web/wsClient.test.ts +26 -0
  525. package/web/wsClient.ts +37 -0
  526. package/benchmarks/receiver.ts +0 -35
  527. package/benchmarks/sender.ts +0 -32
  528. package/benchmarks/utils.ts +0 -9
  529. package/dev_utils/dummyConn.ts +0 -110
  530. package/dev_utils/socketPair.ts +0 -85
  531. package/dist/persistence/store.d.ts +0 -14
  532. package/dist/persistence/store.d.ts.map +0 -1
  533. package/dist/persistence/store.js +0 -2
  534. package/dist/persistence/store.js.map +0 -1
  535. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  536. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  537. package/examples/tcpServer.test.ts +0 -148
  538. package/persistence/memory/memoryPersistence.test.ts +0 -156
  539. package/persistence/store.ts +0 -16
  540. package/server/test/handleConnect.test.ts +0 -122
  541. package/server/test/test-handlers.ts +0 -53
  542. /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
@@ -1,27 +1,50 @@
1
1
  import type { Handlers } from "./context.ts";
2
- import type { IPersistence, SockConn } from "./deps.ts";
2
+ import type { Persistence, SockConn } from "./deps.ts";
3
+ import type { Configuration, ConfigurationInput } from "./config.ts";
3
4
  /**
4
- * The options to configure the MqttServer
5
+ * Configuration options for creating an MqttServer instance.
5
6
  */
6
7
  export type MqttServerOptions = {
7
- persistence?: IPersistence;
8
+ /** Optional persistence layer implementation. Defaults to MemoryPersistence. */
9
+ persistence?: Persistence;
10
+ /** Optional custom handlers for authentication and authorization. */
8
11
  handlers?: Handlers;
12
+ /** Optional configuration data */
13
+ configuration?: ConfigurationInput;
9
14
  };
10
- /** The MqttServer class provides a MQTT server with configurable persistence and
15
+ /** * The MqttServer class provides an MQTT server with configurable persistence and
11
16
  * authentication/authorization handlers.
12
17
  *
13
18
  * The default handlers are:
14
- * - isAuthenticated: always returns ok
15
- * - isAuthorizedToPublish: always returns true
16
- * - isAuthorizedToSubscribe: always returns true
19
+ * - isAuthenticated: always returns ok
20
+ * - isAuthorizedToPublish: always returns true
21
+ * - isAuthorizedToSubscribe: always returns true
17
22
  *
18
23
  * To customize the handlers, pass in a Handlers object.
19
24
  * To customize the persistence, pass in a Persistence object.
20
25
  */
21
26
  export declare class MqttServer {
27
+ /** The registered authentication and authorization handlers. */
22
28
  handlers: Handlers;
23
- persistence: IPersistence;
24
- constructor({ persistence, handlers, }: MqttServerOptions);
29
+ /** The persistence layer used for storing sessions and messages. */
30
+ persistence: Persistence;
31
+ /** The persistence layer used for storing sessions and messages. */
32
+ configuration: Configuration;
33
+ /**
34
+ * Initializes a new instance of the MqttServer.
35
+ * * @param {MqttServerOptions} options - The configuration options for the server.
36
+ */
37
+ constructor({ persistence, handlers, configuration, }: MqttServerOptions);
38
+ /**
39
+ * Serve a new client connection.
40
+ * @param {SockConn} conn - The socket connection to serve.
41
+ * @returns {Promise<void>} A promise that resolves when the connection is closed.
42
+ */
25
43
  serve(conn: SockConn): Promise<void>;
44
+ /**
45
+ * Close the server and all active client connections.
46
+ * @param {boolean} cleanUp - If true, clean up client sessions on close.
47
+ */
48
+ close(cleanUp?: boolean): Promise<void>;
26
49
  }
27
50
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAY/D;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AAEH,qBAAa,UAAU;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,YAAY,CAAC;gBACd,EACV,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB;IAWd,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAiB3C"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAa,QAAQ,EAAS,MAAM,WAAW,CAAC;AAGzE,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AA4DrE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,gFAAgF;IAChF,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,kCAAkC;IAClC,aAAa,CAAC,EAAE,kBAAkB,CAAC;CACpC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IACrB,gEAAgE;IAChE,QAAQ,EAAE,QAAQ,CAAC;IACnB,oEAAoE;IACpE,WAAW,EAAE,WAAW,CAAC;IACzB,oEAAoE;IACpE,aAAa,EAAE,aAAa,CAAC;IAE7B;;;OAGG;IACH,YAAY,EACV,WAAW,EACX,QAAQ,EACR,aAAa,GACd,EAAE,iBAAiB,EAYnB;IAED;;;;OAIG;IACG,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzC;IAED;;;OAGG;IACG,KAAK,CAAC,OAAO,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CASnD;CACF"}
@@ -1,48 +1,117 @@
1
- import { AuthenticationResult, logger, MemoryPersistence } from "./deps.js";
1
+ import { logger, MemoryPersistence, ReasonCode } from "./deps.js";
2
2
  import { Context } from "./context.js";
3
3
  import { handlePacket } from "./handlers/handlePacket.js";
4
- const defaultIsAuthenticated = (_ctx, _clientId, _username, _password) => AuthenticationResult.ok;
5
- const defaultIsAuthorized = (_ctx, _topic) => true;
6
- /** The MqttServer class provides a MQTT server with configurable persistence and
4
+ import { createConfiguration } from "./config.js";
5
+ /**
6
+ * Default preconnect handler that unconditionally permits all connections.
7
+ * @param {SockConn} _conn - The connection.
8
+ * @returns {boolean} Always returns true
9
+ */
10
+ const defaultPreconnect = (_conn) => (true);
11
+ /**
12
+ * Default authentication handler that unconditionally permits all connections.
13
+ * @param {Context} _ctx - The connection context.
14
+ * @param {string} _clientId - The client identifier.
15
+ * @param {string} _username - The username provided by the client.
16
+ * @param {Uint8Array} _password - The password provided by the client.
17
+ * @returns {IsAuthenticatedResult} Always returns ReasonCode.success.
18
+ */
19
+ const defaultIsAuthenticated = (_ctx, _clientId, _username, _password) => ({ reasonCode: ReasonCode.success });
20
+ const defaultProcessAuth = (_ctx, _clientId, _authMethod, _authData) => ({
21
+ reasonCode: ReasonCode.badAuthenticationMethod,
22
+ reasonString: "Authentication method not supported",
23
+ });
24
+ /**
25
+ * Default authorization handler that unconditionally permits all publish operations.
26
+ * @param {Context} _ctx - The connection context.
27
+ * @param {Topic} _topic - The topic being accessed.
28
+ * @returns {boolean} Always returns true.
29
+ */
30
+ const defaultIsAuthorizedToPublish = (_ctx, _topic) => (true);
31
+ /**
32
+ * Default authorization handler that unconditionally permits all subscribe operations.
33
+ * @param {Context} _ctx - The connection context.
34
+ * @param {Topic} _topic - The topic being accessed.
35
+ * @param {ShareName} _shareName - The share name being accessed when using shared subscriptions
36
+ * @returns {boolean} Always returns true.
37
+ */
38
+ const defaultIsAuthorizedToSubscribe = (_ctx, _topic, _shareName) => (true);
39
+ /** * The MqttServer class provides an MQTT server with configurable persistence and
7
40
  * authentication/authorization handlers.
8
41
  *
9
42
  * The default handlers are:
10
- * - isAuthenticated: always returns ok
11
- * - isAuthorizedToPublish: always returns true
12
- * - isAuthorizedToSubscribe: always returns true
43
+ * - isAuthenticated: always returns ok
44
+ * - isAuthorizedToPublish: always returns true
45
+ * - isAuthorizedToSubscribe: always returns true
13
46
  *
14
47
  * To customize the handlers, pass in a Handlers object.
15
48
  * To customize the persistence, pass in a Persistence object.
16
49
  */
17
50
  export class MqttServer {
51
+ /** The registered authentication and authorization handlers. */
18
52
  handlers;
53
+ /** The persistence layer used for storing sessions and messages. */
19
54
  persistence;
20
- constructor({ persistence, handlers, }) {
55
+ /** The persistence layer used for storing sessions and messages. */
56
+ configuration;
57
+ /**
58
+ * Initializes a new instance of the MqttServer.
59
+ * * @param {MqttServerOptions} options - The configuration options for the server.
60
+ */
61
+ constructor({ persistence, handlers, configuration, }) {
21
62
  this.persistence = persistence || new MemoryPersistence();
22
63
  this.handlers = {
64
+ preconnect: handlers?.preconnect || defaultPreconnect,
23
65
  isAuthenticated: handlers?.isAuthenticated || defaultIsAuthenticated,
66
+ processAuth: handlers?.processAuth || defaultProcessAuth,
24
67
  isAuthorizedToPublish: handlers?.isAuthorizedToPublish ||
25
- defaultIsAuthorized,
68
+ defaultIsAuthorizedToPublish,
26
69
  isAuthorizedToSubscribe: handlers?.isAuthorizedToSubscribe ||
27
- defaultIsAuthorized,
70
+ defaultIsAuthorizedToSubscribe,
28
71
  };
72
+ this.configuration = createConfiguration(configuration);
29
73
  }
74
+ /**
75
+ * Serve a new client connection.
76
+ * @param {SockConn} conn - The socket connection to serve.
77
+ * @returns {Promise<void>} A promise that resolves when the connection is closed.
78
+ */
30
79
  async serve(conn) {
31
- const ctx = new Context(this.persistence, conn, this.handlers);
80
+ if (this.handlers.preconnect) {
81
+ if (!await this.handlers.preconnect(conn)) {
82
+ conn.close();
83
+ return;
84
+ }
85
+ }
86
+ const ctx = new Context(this.configuration, this.persistence, conn, this.handlers);
32
87
  if (conn.remoteAddr?.transport === "tcp") {
33
- logger.debug(`socket connected from ${conn.remoteAddr.hostname}`);
88
+ logger.debug("socket connected from", conn.remoteAddr.hostname);
34
89
  }
35
90
  try {
36
91
  for await (const packet of ctx.mqttConn) {
92
+ logger.debug("next packet");
37
93
  await handlePacket(ctx, packet);
38
94
  }
39
95
  }
40
96
  catch (err) {
41
- logger.debug(`Error while serving:${err}`);
97
+ logger.debug("Error while serving:", err);
42
98
  }
43
99
  finally {
44
- if (!ctx.mqttConn.isClosed) {
45
- ctx.close();
100
+ logger.debug("done serving for", ctx.clientId);
101
+ await ctx.close();
102
+ }
103
+ }
104
+ /**
105
+ * Close the server and all active client connections.
106
+ * @param {boolean} cleanUp - If true, clean up client sessions on close.
107
+ */
108
+ async close(cleanUp = false) {
109
+ logger.debug("stopping mqttServer");
110
+ for (const [clientid, ctx] of Context.clientList) {
111
+ logger.debug("closing session for clientid:", clientid);
112
+ await ctx.close();
113
+ if (cleanUp) {
114
+ await ctx.clean();
46
115
  }
47
116
  }
48
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,sBAAsB,GAAG,CAC7B,IAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,SAAqB,EACrB,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;AAE7B,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,MAAa,EAAE,EAAE,CAAC,IAAI,CAAC;AAUnE;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,UAAU;IACrB,QAAQ,CAAW;IACnB,WAAW,CAAe;IAC1B,YAAY,EACV,WAAW,EACX,QAAQ,GACU;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,iBAAiB,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG;YACd,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,sBAAsB;YACpE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB;gBACpD,mBAAmB;YACrB,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB;gBACxD,mBAAmB;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAC3B,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,23 @@
1
- export type SockAddr = NetAddr | UnixAddr | VsockAddr;
2
- export interface NetAddr {
1
+ /** Net adresses */
2
+ export type NetAddr = {
3
3
  transport: "tcp" | "udp";
4
4
  hostname: string;
5
5
  port: number;
6
- }
7
- export interface UnixAddr {
6
+ };
7
+ /** Unix adresses */
8
+ export type UnixAddr = {
8
9
  transport: "unix" | "unixpacket";
9
10
  path: string;
10
- }
11
- export interface VsockAddr {
11
+ };
12
+ /** vSock adresses */
13
+ export type VsockAddr = {
12
14
  transport: "vsock";
13
15
  cid: number;
14
16
  port: number;
15
- }
17
+ };
18
+ /** Socket adresses */
19
+ export type SockAddr = NetAddr | UnixAddr | VsockAddr;
20
+ /** Socket connection descriptor. */
16
21
  export type SockConn = {
17
22
  readable: ReadableStream<Uint8Array>;
18
23
  writable: WritableStream<Uint8Array>;
@@ -21,13 +26,14 @@ export type SockConn = {
21
26
  remoteAddr?: SockAddr;
22
27
  };
23
28
  export declare class Conn {
24
- reader: ReadableStreamBYOBReader;
29
+ reader: ReadableStreamDefaultReader<Uint8Array>;
25
30
  writer: WritableStreamDefaultWriter<Uint8Array>;
26
31
  closed: boolean;
27
32
  remoteAddr: SockAddr | undefined;
28
33
  closer: () => void;
34
+ private leftover;
29
35
  constructor(sockConn: SockConn);
30
- read(buff: Uint8Array): Promise<number | null>;
36
+ read(length: number): Promise<Uint8Array | null>;
31
37
  write(data: Uint8Array): Promise<number>;
32
38
  close(): void;
33
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;gBAEP,QAAQ,EAAE,QAAQ;IASxB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxC,KAAK;CAaN"}
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,mBAAmB;AACnB,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,KAAK,GAAG,KAAK,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AACF,oBAAoB;AACpB,MAAM,MAAM,QAAQ,GAAG;IAAE,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,qBAAqB;AACrB,MAAM,MAAM,SAAS,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1E,sBAAsB;AACtB,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,oCAAoC;AACpC,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB,OAAO,CAAC,QAAQ,CAAiC;IAEjD,YAAY,QAAQ,EAAE,QAAQ,EAQ7B;IAEK,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6CrD;IAEK,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7C;IAED,KAAK,SAsBJ;CACF"}
@@ -4,42 +4,90 @@ export class Conn {
4
4
  closed;
5
5
  remoteAddr;
6
6
  closer;
7
+ leftover = new Uint8Array(0);
7
8
  constructor(sockConn) {
8
9
  this.closed = false;
9
- this.reader = sockConn.readable.getReader({ mode: "byob" });
10
+ this.reader = sockConn.readable.getReader();
10
11
  this.writer = sockConn.writable.getWriter();
11
- // this.writer.closed.then(() => this.closed = true);
12
12
  this.closer = sockConn.close.bind(sockConn);
13
+ this.reader.closed.catch(() => { });
14
+ this.writer.closed.catch(() => { });
13
15
  this.remoteAddr = sockConn.remoteAddr;
14
16
  }
15
- async read(buff) {
16
- const buff2 = new Uint8Array(buff.length);
17
- const result = await this.reader.read(buff2);
18
- if (!result.done) {
19
- buff.set(result.value);
17
+ async read(length) {
18
+ if (this.closed || length < 0) {
19
+ return null;
20
20
  }
21
- return result.value?.byteLength || null;
21
+ if (length === 0) {
22
+ return new Uint8Array(0);
23
+ }
24
+ const result = new Uint8Array(length);
25
+ let bytesAccumulated = 0;
26
+ // Do we have data from the previous read()
27
+ if (this.leftover.length > 0) {
28
+ const take = Math.min(this.leftover.length, length);
29
+ result.set(this.leftover.subarray(0, take), bytesAccumulated);
30
+ bytesAccumulated += take;
31
+ this.leftover = this.leftover.subarray(take);
32
+ }
33
+ // Keep readin until we have enough data
34
+ while (bytesAccumulated < length) {
35
+ const { value, done } = await this.reader.read();
36
+ if (value) {
37
+ const needed = length - bytesAccumulated;
38
+ if (value.length <= needed) {
39
+ // We need the whole chunk
40
+ result.set(value, bytesAccumulated);
41
+ bytesAccumulated += value.length;
42
+ }
43
+ else {
44
+ // Chunk is bigger than what we need
45
+ result.set(value.subarray(0, needed), bytesAccumulated);
46
+ bytesAccumulated += needed;
47
+ // Save the rest for the next read() call
48
+ this.leftover = value.subarray(needed);
49
+ }
50
+ }
51
+ if (done) {
52
+ // if the stream closed and not enough data was returned, return null
53
+ return null;
54
+ }
55
+ }
56
+ return result;
22
57
  }
23
- write(data) {
58
+ async write(data) {
24
59
  if (this.closed) {
25
- return Promise.reject();
60
+ return Promise.reject(new Error("Connection closed"));
61
+ }
62
+ try {
63
+ await this.writer.write(data);
64
+ return data.length;
65
+ }
66
+ catch (err) {
67
+ this.closed = true;
68
+ throw err;
26
69
  }
27
- this.writer.write(data);
28
- return new Promise((resolve) => resolve(data.length));
29
70
  }
30
71
  close() {
31
72
  if (!this.closed) {
73
+ this.closed = true;
74
+ // deno-coverage-ignore-start
75
+ void this.writer.close().catch(() => {
76
+ // ignore duplicate/late close attempts; the stream may already be closed
77
+ });
78
+ // deno-coverage-ignore-stop
32
79
  try {
33
- this.writer.close();
80
+ void this.reader.cancel().catch(() => {
81
+ // ignore duplicate/late cancel attempts; the stream may already be closed
82
+ });
83
+ this.reader?.releaseLock();
84
+ // deno-coverage-ignore
34
85
  }
35
- catch (_err) { /* swallow any errors on close */ }
36
- this.closed = true;
86
+ catch (_err) { /* swallow */ }
37
87
  try {
38
88
  this.closer();
39
89
  }
40
- catch (_err) {
41
- // swallow any errors on close
42
- }
90
+ catch (_err) { /* swallow */ }
43
91
  }
44
92
  }
45
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAO,IAAI;IACf,MAAM,CAA2B;IACjC,MAAM,CAA0C;IAChD,MAAM,CAAU;IAChB,UAAU,CAAuB;IACjC,MAAM,CAAa;IAEnB,YAAY,QAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC5C,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC,CAAC,iCAAiC,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC;YAAC,OAAO,IAAI,EAAE,CAAC;gBACd,8BAA8B;YAChC,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,45 @@
1
+ /**
2
+ * A reusable timer class that executes a callback function after a specified delay.
3
+ * It handles potential drifts or early triggers by checking the actual remaining time
4
+ * before executing the action.
5
+ */
1
6
  export declare class Timer {
7
+ /** The delay duration in milliseconds before the timer expires. */
2
8
  readonly delay: number;
9
+ /** The callback function to perform when the timer expires. */
3
10
  private action;
11
+ /** The internal timeout identifier reference, if a timer is active. */
4
12
  private timer?;
13
+ /** The timestamp (in milliseconds) indicating when the timer is scheduled to end. */
5
14
  private end;
15
+ /** Indicates whether the timer is currently active and running. */
6
16
  private running;
17
+ /**
18
+ * Initializes a new instance of the Timer.
19
+ * @param {Function} action - The callback function to execute upon expiration.
20
+ * @param {number} delay - The delay duration in milliseconds.
21
+ * @param {boolean} [wait=false] - If true, the timer will not start automatically until reset() is called.
22
+ */
7
23
  constructor(action: Function, delay: number, wait?: boolean);
24
+ /**
25
+ * Starts the internal setTimeout with the specified delay.
26
+ * @param {number} delay - The duration in milliseconds for the timeout.
27
+ */
8
28
  private startTimer;
29
+ /**
30
+ * Internal handler triggered when the timeout fires.
31
+ * Verifies if the target end time has genuinely passed, rescheduling if necessary,
32
+ * or executes the action.
33
+ */
9
34
  private ring;
35
+ /**
36
+ * Resets the timer, recalculating the end time and restarting the countdown.
37
+ * If the timer is already running, it updates the target end time.
38
+ */
10
39
  reset(): void;
40
+ /**
41
+ * Cancels the active timeout and stops the timer from running.
42
+ */
11
43
  clear(): void;
12
44
  }
13
45
  //# sourceMappingURL=timer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAS;gBAGZ,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,UAAQ;IAQzD,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;IAWZ,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,IAAI;CAId"}
1
+ {"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,KAAK;IAChB,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,+DAA+D;IAE/D,OAAO,CAAC,MAAM,CAAW;IAEzB,uEAAuE;IACvE,OAAO,CAAC,KAAK,CAAC,CAAgC;IAE9C,qFAAqF;IACrF,OAAO,CAAC,GAAG,CAAK;IAEhB,mEAAmE;IACnE,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;OAKG;IAEH,YAAY,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,UAAQ,EAMxD;IAED;;;OAGG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAWZ;;;OAGG;IACH,KAAK,IAAI,IAAI,CAKZ;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAGZ;CACF"}
@@ -1,10 +1,26 @@
1
+ /**
2
+ * A reusable timer class that executes a callback function after a specified delay.
3
+ * It handles potential drifts or early triggers by checking the actual remaining time
4
+ * before executing the action.
5
+ */
1
6
  export class Timer {
7
+ /** The delay duration in milliseconds before the timer expires. */
2
8
  delay; // delay in microseconds
9
+ /** The callback function to perform when the timer expires. */
3
10
  // deno-lint-ignore ban-types
4
11
  action; // function to perform when timer expires
12
+ /** The internal timeout identifier reference, if a timer is active. */
5
13
  timer;
14
+ /** The timestamp (in milliseconds) indicating when the timer is scheduled to end. */
6
15
  end = 0;
16
+ /** Indicates whether the timer is currently active and running. */
7
17
  running = false;
18
+ /**
19
+ * Initializes a new instance of the Timer.
20
+ * @param {Function} action - The callback function to execute upon expiration.
21
+ * @param {number} delay - The delay duration in milliseconds.
22
+ * @param {boolean} [wait=false] - If true, the timer will not start automatically until reset() is called.
23
+ */
8
24
  // deno-lint-ignore ban-types
9
25
  constructor(action, delay, wait = false) {
10
26
  this.delay = delay;
@@ -13,10 +29,19 @@ export class Timer {
13
29
  this.reset();
14
30
  }
15
31
  }
32
+ /**
33
+ * Starts the internal setTimeout with the specified delay.
34
+ * @param {number} delay - The duration in milliseconds for the timeout.
35
+ */
16
36
  startTimer(delay) {
17
37
  this.running = true;
18
38
  this.timer = setTimeout(() => this.ring(), delay);
19
39
  }
40
+ /**
41
+ * Internal handler triggered when the timeout fires.
42
+ * Verifies if the target end time has genuinely passed, rescheduling if necessary,
43
+ * or executes the action.
44
+ */
20
45
  ring() {
21
46
  const timeLeft = this.end - Date.now();
22
47
  // check if delay has passed, else execute action
@@ -27,12 +52,19 @@ export class Timer {
27
52
  this.running = false;
28
53
  this.action();
29
54
  }
55
+ /**
56
+ * Resets the timer, recalculating the end time and restarting the countdown.
57
+ * If the timer is already running, it updates the target end time.
58
+ */
30
59
  reset() {
31
60
  this.end = Date.now() + this.delay;
32
61
  if (!this.running) {
33
62
  this.startTimer(this.delay);
34
63
  }
35
64
  }
65
+ /**
66
+ * Cancels the active timeout and stops the timer from running.
67
+ */
36
68
  clear() {
37
69
  clearTimeout(this.timer);
38
70
  this.running = false;
@@ -1 +1 @@
1
- {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,KAAK;IACP,KAAK,CAAS,CAAC,wBAAwB;IAChD,6BAA6B;IACrB,MAAM,CAAW,CAAC,yCAAyC;IAC3D,KAAK,CAAiC;IACtC,GAAG,GAAG,CAAC,CAAC;IACR,OAAO,GAAG,KAAK,CAAC;IAExB,6BAA6B;IAC7B,YAAY,MAAgB,EAAE,KAAa,EAAE,IAAI,GAAG,KAAK;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,KAAa;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEO,IAAI;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,iDAAiD;QACjD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK;QACH,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"timer.js","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,KAAK;IAChB,mEAAmE;IAC1D,KAAK,CAAS,CAAC,wBAAwB;IAEhD,+DAA+D;IAC/D,6BAA6B;IACrB,MAAM,CAAW,CAAC,yCAAyC;IAEnE,uEAAuE;IAC/D,KAAK,CAAiC;IAE9C,qFAAqF;IAC7E,GAAG,GAAG,CAAC,CAAC;IAEhB,mEAAmE;IAC3D,OAAO,GAAG,KAAK,CAAC;IAExB;;;;;OAKG;IACH,6BAA6B;IAC7B,YAAY,MAAgB,EAAE,KAAa,EAAE,IAAI,GAAG,KAAK;QACvD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,KAAa;QAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACK,IAAI;QACV,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,iDAAiD;QACjD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF"}
@@ -3,7 +3,7 @@
3
3
  * @description A Trie data structure implementation that supports wildcard matching
4
4
  * @template T The type of values stored in the trie
5
5
  */
6
- type Parts = string[];
6
+ export type Parts = string[];
7
7
  /**
8
8
  * Trie class for storing and matching hierarchical key-value pairs with wildcard support
9
9
  * @template T The type of values stored in the trie
@@ -62,7 +62,12 @@ export declare class Trie<T> {
62
62
  * @param key The key to remove the value from
63
63
  * @param value The value to remove
64
64
  */
65
- remove(key: string, value: T): void;
65
+ /**
66
+ * Removes a value from the trie at the specified key
67
+ * @param key The key to remove the value from
68
+ * @param value The value (or partial object) to remove
69
+ */
70
+ remove(key: string, value: Partial<T> | T): void;
66
71
  /**
67
72
  * Internal method to recursively remove a value
68
73
  * @param parts Parts of the key to remove from
@@ -71,10 +76,10 @@ export declare class Trie<T> {
71
76
  private _remove;
72
77
  /**
73
78
  * Creates a filter function for removing values
74
- * @param value The value to filter against
75
- * @returns Filter function
79
+ * Supports partial object matching when looseCompare is enabled or when matching objects.
80
+ * @param value The value (or partial value) to filter against
81
+ * @returns Filter function (returns true to KEEP the item, false to REMOVE it)
76
82
  */
77
83
  private filter;
78
84
  }
79
- export {};
80
85
  //# sourceMappingURL=trie.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"trie.d.ts","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,KAAK,KAAK,GAAG,MAAM,EAAE,CAAC;AAEtB;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAGjB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAU;IAE9B;;;OAGG;gBACS,YAAY,UAAQ;IAMhC;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IAKjD;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE;IAQvB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAWpB;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAed;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAIhC;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAmBZ;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAInC;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAkBf;;;;OAIG;IACH,OAAO,CAAC,MAAM;CAaf"}
1
+ {"version":3,"file":"trie.d.ts","sourceRoot":"","sources":["../../trie/trie.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;AAE7B;;;GAGG;AACH,qBAAa,IAAI,CAAC,CAAC;;IAGjB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAU;IAE9B;;;OAGG;IACH,YAAY,YAAY,UAAQ,EAI/B;IAED;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAGhD;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,CAMtB;IAED;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;OAIG;IACH,OAAO,CAAC,MAAM;IA4Bd;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAE/B;IAED;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAkBZ;;;;OAIG;IACH;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAE/C;IAED;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAkBf;;;;;OAKG;IACH,OAAO,CAAC,MAAM;CAuBf"}