@seriousme/opifex 1.11.3 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +99 -40
  2. package/bin/conformanceServer.ts +45 -13
  3. package/bin/demoServer.ts +38 -13
  4. package/bin/mqtt.ts +2 -2
  5. package/client/ConnectionState.ts +2 -0
  6. package/client/client.ts +51 -41
  7. package/client/context.ts +75 -21
  8. package/client/deps.ts +4 -0
  9. package/client/handlers/handleAuth.test.ts +193 -0
  10. package/client/handlers/handleAuth.ts +89 -0
  11. package/client/handlers/handleConnack.test.ts +173 -0
  12. package/client/handlers/handleConnack.ts +16 -6
  13. package/client/handlers/handleDisconnect.test.ts +22 -0
  14. package/client/handlers/handleDisconnect.ts +17 -0
  15. package/client/handlers/handlePacket.test.ts +242 -0
  16. package/client/handlers/handlePacket.ts +19 -5
  17. package/client/handlers/handlePuback.test.ts +99 -0
  18. package/client/handlers/handlePuback.ts +6 -0
  19. package/client/handlers/handlePubcomp.test.ts +112 -0
  20. package/client/handlers/handlePubcomp.ts +5 -0
  21. package/client/handlers/handlePublish.test.ts +188 -0
  22. package/client/handlers/handlePubrec.test.ts +119 -0
  23. package/client/handlers/handlePubrec.ts +5 -1
  24. package/client/handlers/handlePubrel.test.ts +136 -0
  25. package/client/handlers/handleSuback.test.ts +122 -0
  26. package/client/handlers/handleSuback.ts +3 -0
  27. package/client/handlers/handleUnsuback.test.ts +101 -0
  28. package/client/mod.ts +1 -1
  29. package/client/store/memoryStore.ts +2 -2
  30. package/client/store/store.ts +3 -1
  31. package/deno/README.md +1 -2
  32. package/deno/tcpClient.test.ts +75 -0
  33. package/deno/tcpClient.ts +16 -11
  34. package/deno/tcpServer.test.ts +22 -21
  35. package/deno/tcpServer.ts +5 -0
  36. package/deno/tlsServer.test.ts +97 -0
  37. package/deno/tlsServer.ts +42 -0
  38. package/deno/wsServer.test.ts +93 -0
  39. package/deno/wsServer.ts +73 -0
  40. package/dev_utils/generateCert.ts +95 -0
  41. package/dev_utils/mockConn.ts +36 -0
  42. package/dev_utils/mockServer.ts +28 -0
  43. package/dev_utils/mod.ts +30 -3
  44. package/dev_utils/packetHelpers.ts +404 -0
  45. package/dev_utils/test-handlers.ts +98 -0
  46. package/dev_utils/timers.ts +14 -0
  47. package/dev_utils/webStreamPair.test.ts +171 -0
  48. package/dev_utils/webStreamPair.ts +143 -0
  49. package/dist/bin/conformanceServer.js +17 -12
  50. package/dist/bin/conformanceServer.js.map +1 -1
  51. package/dist/bin/demoServer.js +16 -12
  52. package/dist/bin/demoServer.js.map +1 -1
  53. package/dist/bin/mqtt.js +2 -2
  54. package/dist/bin/mqtt.js.map +1 -1
  55. package/dist/client/ConnectionState.d.ts +2 -0
  56. package/dist/client/ConnectionState.d.ts.map +1 -1
  57. package/dist/client/ConnectionState.js +2 -0
  58. package/dist/client/ConnectionState.js.map +1 -1
  59. package/dist/client/client.d.ts +13 -16
  60. package/dist/client/client.d.ts.map +1 -1
  61. package/dist/client/client.js +34 -20
  62. package/dist/client/client.js.map +1 -1
  63. package/dist/client/context.d.ts +11 -3
  64. package/dist/client/context.d.ts.map +1 -1
  65. package/dist/client/context.js +44 -12
  66. package/dist/client/context.js.map +1 -1
  67. package/dist/client/deps.d.ts +3 -2
  68. package/dist/client/deps.d.ts.map +1 -1
  69. package/dist/client/deps.js +1 -1
  70. package/dist/client/deps.js.map +1 -1
  71. package/dist/client/handlers/handleAuth.d.ts +9 -0
  72. package/dist/client/handlers/handleAuth.d.ts.map +1 -0
  73. package/dist/client/handlers/handleAuth.js +66 -0
  74. package/dist/client/handlers/handleAuth.js.map +1 -0
  75. package/dist/client/handlers/handleConnack.d.ts +2 -2
  76. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  77. package/dist/client/handlers/handleConnack.js +16 -6
  78. package/dist/client/handlers/handleConnack.js.map +1 -1
  79. package/dist/client/handlers/handleDisconnect.d.ts +11 -0
  80. package/dist/client/handlers/handleDisconnect.d.ts.map +1 -0
  81. package/dist/client/handlers/handleDisconnect.js +15 -0
  82. package/dist/client/handlers/handleDisconnect.js.map +1 -0
  83. package/dist/client/handlers/handlePacket.d.ts.map +1 -1
  84. package/dist/client/handlers/handlePacket.js +14 -3
  85. package/dist/client/handlers/handlePacket.js.map +1 -1
  86. package/dist/client/handlers/handlePuback.d.ts.map +1 -1
  87. package/dist/client/handlers/handlePuback.js +5 -0
  88. package/dist/client/handlers/handlePuback.js.map +1 -1
  89. package/dist/client/handlers/handlePubcomp.d.ts.map +1 -1
  90. package/dist/client/handlers/handlePubcomp.js +5 -0
  91. package/dist/client/handlers/handlePubcomp.js.map +1 -1
  92. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  93. package/dist/client/handlers/handlePubrec.js +5 -1
  94. package/dist/client/handlers/handlePubrec.js.map +1 -1
  95. package/dist/client/handlers/handleSuback.d.ts +1 -0
  96. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  97. package/dist/client/handlers/handleSuback.js +3 -0
  98. package/dist/client/handlers/handleSuback.js.map +1 -1
  99. package/dist/client/mod.d.ts +1 -1
  100. package/dist/client/mod.d.ts.map +1 -1
  101. package/dist/client/mod.js +1 -1
  102. package/dist/client/mod.js.map +1 -1
  103. package/dist/client/store/memoryStore.d.ts.map +1 -1
  104. package/dist/client/store/memoryStore.js +2 -2
  105. package/dist/client/store/memoryStore.js.map +1 -1
  106. package/dist/client/store/store.d.ts +2 -1
  107. package/dist/client/store/store.d.ts.map +1 -1
  108. package/dist/client/store/store.js +1 -1
  109. package/dist/client/store/store.js.map +1 -1
  110. package/dist/dev_utils/generateCert.d.ts +11 -0
  111. package/dist/dev_utils/generateCert.d.ts.map +1 -0
  112. package/dist/dev_utils/generateCert.js +76 -0
  113. package/dist/dev_utils/generateCert.js.map +1 -0
  114. package/dist/examples/authHandler.test.d.ts +2 -0
  115. package/dist/examples/authHandler.test.d.ts.map +1 -0
  116. package/dist/examples/authHandler.test.js +123 -0
  117. package/dist/examples/authHandler.test.js.map +1 -0
  118. package/dist/examples/mqtt.test.d.ts +2 -0
  119. package/dist/examples/mqtt.test.d.ts.map +1 -0
  120. package/dist/examples/mqtt.test.js +70 -0
  121. package/dist/examples/mqtt.test.js.map +1 -0
  122. package/dist/examples/mqtts.test.d.ts +2 -0
  123. package/dist/examples/mqtts.test.d.ts.map +1 -0
  124. package/dist/examples/mqtts.test.js +81 -0
  125. package/dist/examples/mqtts.test.js.map +1 -0
  126. package/dist/mqttConn/mqttConn.d.ts +23 -15
  127. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  128. package/dist/mqttConn/mqttConn.js +56 -35
  129. package/dist/mqttConn/mqttConn.js.map +1 -1
  130. package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
  131. package/dist/mqttPacket/BitMask.d.ts.map +1 -1
  132. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  133. package/dist/mqttPacket/Properties.d.ts +2 -2
  134. package/dist/mqttPacket/Properties.d.ts.map +1 -1
  135. package/dist/mqttPacket/Properties.js.map +1 -1
  136. package/dist/mqttPacket/ReasonCode.d.ts +1 -0
  137. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
  138. package/dist/mqttPacket/ReasonCode.js +1 -0
  139. package/dist/mqttPacket/ReasonCode.js.map +1 -1
  140. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
  141. package/dist/mqttPacket/auth.d.ts +3 -5
  142. package/dist/mqttPacket/auth.d.ts.map +1 -1
  143. package/dist/mqttPacket/auth.js +31 -30
  144. package/dist/mqttPacket/auth.js.map +1 -1
  145. package/dist/mqttPacket/codec.d.ts +48 -0
  146. package/dist/mqttPacket/codec.d.ts.map +1 -0
  147. package/dist/mqttPacket/codec.js +93 -0
  148. package/dist/mqttPacket/codec.js.map +1 -0
  149. package/dist/mqttPacket/connack.d.ts +4 -5
  150. package/dist/mqttPacket/connack.d.ts.map +1 -1
  151. package/dist/mqttPacket/connack.js +43 -45
  152. package/dist/mqttPacket/connack.js.map +1 -1
  153. package/dist/mqttPacket/connect.d.ts +4 -5
  154. package/dist/mqttPacket/connect.d.ts.map +1 -1
  155. package/dist/mqttPacket/connect.js +156 -157
  156. package/dist/mqttPacket/connect.js.map +1 -1
  157. package/dist/mqttPacket/decoder.d.ts +1 -13
  158. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  159. package/dist/mqttPacket/decoder.js +6 -27
  160. package/dist/mqttPacket/decoder.js.map +1 -1
  161. package/dist/mqttPacket/disconnect.d.ts +4 -5
  162. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  163. package/dist/mqttPacket/disconnect.js +41 -43
  164. package/dist/mqttPacket/disconnect.js.map +1 -1
  165. package/dist/mqttPacket/encoder.d.ts +1 -15
  166. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  167. package/dist/mqttPacket/encoder.js +4 -27
  168. package/dist/mqttPacket/encoder.js.map +1 -1
  169. package/dist/mqttPacket/mod.d.ts +21 -103
  170. package/dist/mqttPacket/mod.d.ts.map +1 -1
  171. package/dist/mqttPacket/mod.js +5 -94
  172. package/dist/mqttPacket/mod.js.map +1 -1
  173. package/dist/mqttPacket/pingreq.d.ts +4 -5
  174. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  175. package/dist/mqttPacket/pingreq.js +11 -13
  176. package/dist/mqttPacket/pingreq.js.map +1 -1
  177. package/dist/mqttPacket/pingres.d.ts +4 -5
  178. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  179. package/dist/mqttPacket/pingres.js +11 -13
  180. package/dist/mqttPacket/pingres.js.map +1 -1
  181. package/dist/mqttPacket/protocolLevels.d.ts +11 -6
  182. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -1
  183. package/dist/mqttPacket/protocolLevels.js +5 -1
  184. package/dist/mqttPacket/protocolLevels.js.map +1 -1
  185. package/dist/mqttPacket/pubblishAcks.d.ts +4 -5
  186. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
  187. package/dist/mqttPacket/pubblishAcks.js +43 -45
  188. package/dist/mqttPacket/pubblishAcks.js.map +1 -1
  189. package/dist/mqttPacket/publish.d.ts +5 -5
  190. package/dist/mqttPacket/publish.d.ts.map +1 -1
  191. package/dist/mqttPacket/publish.js +53 -55
  192. package/dist/mqttPacket/publish.js.map +1 -1
  193. package/dist/mqttPacket/suback.d.ts +4 -5
  194. package/dist/mqttPacket/suback.d.ts.map +1 -1
  195. package/dist/mqttPacket/suback.js +38 -40
  196. package/dist/mqttPacket/suback.js.map +1 -1
  197. package/dist/mqttPacket/subscribe.d.ts +36 -7
  198. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  199. package/dist/mqttPacket/subscribe.js +90 -89
  200. package/dist/mqttPacket/subscribe.js.map +1 -1
  201. package/dist/mqttPacket/types.d.ts +1 -8
  202. package/dist/mqttPacket/types.d.ts.map +1 -1
  203. package/dist/mqttPacket/unsuback.d.ts +4 -5
  204. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  205. package/dist/mqttPacket/unsuback.js +32 -34
  206. package/dist/mqttPacket/unsuback.js.map +1 -1
  207. package/dist/mqttPacket/unsubscribe.d.ts +23 -6
  208. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  209. package/dist/mqttPacket/unsubscribe.js +45 -44
  210. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  211. package/dist/mqttPacket/validators.d.ts +4 -16
  212. package/dist/mqttPacket/validators.d.ts.map +1 -1
  213. package/dist/mqttPacket/validators.js +5 -26
  214. package/dist/mqttPacket/validators.js.map +1 -1
  215. package/dist/node/tcpClient.d.ts +1 -1
  216. package/dist/node/tcpClient.d.ts.map +1 -1
  217. package/dist/node/tcpClient.js +12 -7
  218. package/dist/node/tcpClient.js.map +1 -1
  219. package/dist/node/tcpServer.d.ts.map +1 -1
  220. package/dist/node/tcpServer.js +4 -0
  221. package/dist/node/tcpServer.js.map +1 -1
  222. package/dist/node/tlsServer.d.ts +19 -0
  223. package/dist/node/tlsServer.d.ts.map +1 -0
  224. package/dist/node/tlsServer.js +58 -0
  225. package/dist/node/tlsServer.js.map +1 -0
  226. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  227. package/dist/node/wrapNodeSocket.js +6 -28
  228. package/dist/node/wrapNodeSocket.js.map +1 -1
  229. package/dist/persistence/basicPersistence.d.ts +36 -0
  230. package/dist/persistence/basicPersistence.d.ts.map +1 -0
  231. package/dist/persistence/basicPersistence.js +306 -0
  232. package/dist/persistence/basicPersistence.js.map +1 -0
  233. package/dist/persistence/deps.d.ts +3 -2
  234. package/dist/persistence/deps.d.ts.map +1 -1
  235. package/dist/persistence/deps.js +2 -1
  236. package/dist/persistence/deps.js.map +1 -1
  237. package/dist/persistence/memory/memoryPersistence.d.ts +6 -23
  238. package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -1
  239. package/dist/persistence/memory/memoryPersistence.js +12 -115
  240. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  241. package/dist/persistence/memory/memoryStorage.d.ts +45 -0
  242. package/dist/persistence/memory/memoryStorage.d.ts.map +1 -0
  243. package/dist/persistence/memory/memoryStorage.js +143 -0
  244. package/dist/persistence/memory/memoryStorage.js.map +1 -0
  245. package/dist/persistence/mod.d.ts +3 -3
  246. package/dist/persistence/mod.d.ts.map +1 -1
  247. package/dist/persistence/mod.js +6 -1
  248. package/dist/persistence/mod.js.map +1 -1
  249. package/dist/persistence/persistence.d.ts +44 -69
  250. package/dist/persistence/persistence.d.ts.map +1 -1
  251. package/dist/persistence/persistence.js +1 -2
  252. package/dist/persistence/persistence.js.map +1 -1
  253. package/dist/persistence/sqlite/sqliteDatabase.d.ts +46 -0
  254. package/dist/persistence/sqlite/sqliteDatabase.d.ts.map +1 -0
  255. package/dist/persistence/sqlite/sqliteDatabase.js +215 -0
  256. package/dist/persistence/sqlite/sqliteDatabase.js.map +1 -0
  257. package/dist/persistence/sqlite/sqlitePersistence.d.ts +16 -0
  258. package/dist/persistence/sqlite/sqlitePersistence.d.ts.map +1 -0
  259. package/dist/persistence/sqlite/sqlitePersistence.js +29 -0
  260. package/dist/persistence/sqlite/sqlitePersistence.js.map +1 -0
  261. package/dist/persistence/sqlite/sqliteStorage.d.ts +36 -0
  262. package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -0
  263. package/dist/persistence/sqlite/sqliteStorage.js +194 -0
  264. package/dist/persistence/sqlite/sqliteStorage.js.map +1 -0
  265. package/dist/persistence/storage.d.ts +38 -0
  266. package/dist/persistence/storage.d.ts.map +1 -0
  267. package/dist/persistence/storage.js +5 -0
  268. package/dist/persistence/storage.js.map +1 -0
  269. package/dist/server/config.d.ts +47 -0
  270. package/dist/server/config.d.ts.map +1 -0
  271. package/dist/server/config.js +41 -0
  272. package/dist/server/config.js.map +1 -0
  273. package/dist/server/context.d.ts +198 -24
  274. package/dist/server/context.d.ts.map +1 -1
  275. package/dist/server/context.js +432 -53
  276. package/dist/server/context.js.map +1 -1
  277. package/dist/server/deps.d.ts +5 -6
  278. package/dist/server/deps.d.ts.map +1 -1
  279. package/dist/server/deps.js +2 -2
  280. package/dist/server/deps.js.map +1 -1
  281. package/dist/server/handlers/completeConnect.d.ts +8 -0
  282. package/dist/server/handlers/completeConnect.d.ts.map +1 -0
  283. package/dist/server/handlers/completeConnect.js +74 -0
  284. package/dist/server/handlers/completeConnect.js.map +1 -0
  285. package/dist/server/handlers/handleAuth.d.ts +9 -0
  286. package/dist/server/handlers/handleAuth.d.ts.map +1 -0
  287. package/dist/server/handlers/handleAuth.js +69 -0
  288. package/dist/server/handlers/handleAuth.js.map +1 -0
  289. package/dist/server/handlers/handleConnect.d.ts +2 -4
  290. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  291. package/dist/server/handlers/handleConnect.js +140 -67
  292. package/dist/server/handlers/handleConnect.js.map +1 -1
  293. package/dist/server/handlers/handleDisconnect.d.ts +1 -1
  294. package/dist/server/handlers/handleDisconnect.d.ts.map +1 -1
  295. package/dist/server/handlers/handleDisconnect.js +3 -3
  296. package/dist/server/handlers/handleDisconnect.js.map +1 -1
  297. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  298. package/dist/server/handlers/handlePacket.js +19 -6
  299. package/dist/server/handlers/handlePacket.js.map +1 -1
  300. package/dist/server/handlers/handlePuback.d.ts +1 -3
  301. package/dist/server/handlers/handlePuback.d.ts.map +1 -1
  302. package/dist/server/handlers/handlePuback.js +2 -8
  303. package/dist/server/handlers/handlePuback.js.map +1 -1
  304. package/dist/server/handlers/handlePubcomp.d.ts +1 -1
  305. package/dist/server/handlers/handlePubcomp.d.ts.map +1 -1
  306. package/dist/server/handlers/handlePubcomp.js +2 -4
  307. package/dist/server/handlers/handlePubcomp.js.map +1 -1
  308. package/dist/server/handlers/handlePublish.d.ts +1 -1
  309. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  310. package/dist/server/handlers/handlePublish.js +149 -45
  311. package/dist/server/handlers/handlePublish.js.map +1 -1
  312. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  313. package/dist/server/handlers/handlePubrec.js +2 -3
  314. package/dist/server/handlers/handlePubrec.js.map +1 -1
  315. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  316. package/dist/server/handlers/handlePubrel.js +6 -2
  317. package/dist/server/handlers/handlePubrel.js.map +1 -1
  318. package/dist/server/handlers/handleSubscribe.d.ts +1 -6
  319. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  320. package/dist/server/handlers/handleSubscribe.js +99 -38
  321. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  322. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  323. package/dist/server/handlers/handleUnsubscribe.js +19 -4
  324. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  325. package/dist/server/mod.d.ts +3 -3
  326. package/dist/server/mod.d.ts.map +1 -1
  327. package/dist/server/mod.js +1 -1
  328. package/dist/server/mod.js.map +1 -1
  329. package/dist/server/server.d.ts +29 -6
  330. package/dist/server/server.d.ts.map +1 -1
  331. package/dist/server/server.js +84 -15
  332. package/dist/server/server.js.map +1 -1
  333. package/dist/socket/socket.d.ts +11 -9
  334. package/dist/socket/socket.d.ts.map +1 -1
  335. package/dist/socket/socket.js +66 -18
  336. package/dist/socket/socket.js.map +1 -1
  337. package/dist/timer/timer.d.ts +32 -0
  338. package/dist/timer/timer.d.ts.map +1 -1
  339. package/dist/timer/timer.js +32 -0
  340. package/dist/timer/timer.js.map +1 -1
  341. package/dist/trie/trie.d.ts +10 -5
  342. package/dist/trie/trie.d.ts.map +1 -1
  343. package/dist/trie/trie.js +61 -41
  344. package/dist/trie/trie.js.map +1 -1
  345. package/dist/utils/assert.d.ts.map +1 -1
  346. package/dist/utils/{BufferedAsyncIterable.d.ts → bufferedAsyncIterable.d.ts} +1 -1
  347. package/dist/utils/bufferedAsyncIterable.d.ts.map +1 -0
  348. package/dist/utils/{BufferedAsyncIterable.js → bufferedAsyncIterable.js} +1 -1
  349. package/dist/utils/bufferedAsyncIterable.js.map +1 -0
  350. package/dist/utils/deferred.d.ts.map +1 -1
  351. package/dist/utils/deferred.js.map +1 -1
  352. package/dist/utils/getOrInsertPolyFill.d.ts +2 -0
  353. package/dist/utils/getOrInsertPolyFill.d.ts.map +1 -0
  354. package/dist/utils/getOrInsertPolyFill.js +12 -0
  355. package/dist/utils/getOrInsertPolyFill.js.map +1 -0
  356. package/dist/utils/logger.d.ts +40 -3
  357. package/dist/utils/logger.d.ts.map +1 -1
  358. package/dist/utils/logger.js +53 -7
  359. package/dist/utils/logger.js.map +1 -1
  360. package/dist/utils/mod.d.ts +6 -1
  361. package/dist/utils/mod.d.ts.map +1 -1
  362. package/dist/utils/mod.js +5 -1
  363. package/dist/utils/mod.js.map +1 -1
  364. package/dist/utils/outboundTopicAliasManager.d.ts +52 -0
  365. package/dist/utils/outboundTopicAliasManager.d.ts.map +1 -0
  366. package/dist/utils/outboundTopicAliasManager.js +74 -0
  367. package/dist/utils/outboundTopicAliasManager.js.map +1 -0
  368. package/dist/utils/queue.d.ts.map +1 -1
  369. package/dist/utils/topicFilter.d.ts +32 -0
  370. package/dist/utils/topicFilter.d.ts.map +1 -0
  371. package/dist/utils/topicFilter.js +52 -0
  372. package/dist/utils/topicFilter.js.map +1 -0
  373. package/dist/utils/utils.d.ts +2 -0
  374. package/dist/utils/utils.d.ts.map +1 -1
  375. package/dist/utils/utils.js +2 -0
  376. package/dist/utils/utils.js.map +1 -1
  377. package/dist/utils/validators.d.ts +34 -0
  378. package/dist/utils/validators.d.ts.map +1 -0
  379. package/dist/utils/validators.js +61 -0
  380. package/dist/utils/validators.js.map +1 -0
  381. package/dist/web/webSocketStream.d.ts +29 -0
  382. package/dist/web/webSocketStream.d.ts.map +1 -0
  383. package/dist/web/webSocketStream.js +69 -0
  384. package/dist/web/webSocketStream.js.map +1 -0
  385. package/dist/web/wrapWebSocket.d.ts +12 -0
  386. package/dist/web/wrapWebSocket.d.ts.map +1 -0
  387. package/dist/web/wrapWebSocket.js +41 -0
  388. package/dist/web/wrapWebSocket.js.map +1 -0
  389. package/dist/web/wsClient.d.ts +7 -0
  390. package/dist/web/wsClient.d.ts.map +1 -0
  391. package/dist/web/wsClient.js +22 -0
  392. package/dist/web/wsClient.js.map +1 -0
  393. package/dist/web/wsClient.test.d.ts +2 -0
  394. package/dist/web/wsClient.test.d.ts.map +1 -0
  395. package/dist/web/wsClient.test.js +20 -0
  396. package/dist/web/wsClient.test.js.map +1 -0
  397. package/examples/authHandler.test.ts +164 -0
  398. package/examples/mqtt.test.ts +89 -0
  399. package/examples/mqtts.test.ts +100 -0
  400. package/examples/webSocket.test.ts +94 -0
  401. package/mqttConn/mqttConn.test.ts +9 -9
  402. package/mqttConn/mqttConn.ts +76 -44
  403. package/mqttPacket/Properties.ts +6 -3
  404. package/mqttPacket/ReasonCode.ts +2 -1
  405. package/mqttPacket/auth.test.ts +1 -1
  406. package/mqttPacket/auth.ts +41 -48
  407. package/mqttPacket/codec.ts +146 -0
  408. package/mqttPacket/connack.ts +57 -68
  409. package/mqttPacket/connect.test.ts +2 -2
  410. package/mqttPacket/connect.ts +175 -182
  411. package/mqttPacket/decoder.test.ts +0 -39
  412. package/mqttPacket/decoder.ts +8 -35
  413. package/mqttPacket/disconnect.ts +57 -68
  414. package/mqttPacket/encoder.ts +5 -40
  415. package/mqttPacket/mod.ts +48 -200
  416. package/mqttPacket/pingreq.ts +21 -27
  417. package/mqttPacket/pingres.ts +21 -27
  418. package/mqttPacket/protocolLevels.ts +12 -7
  419. package/mqttPacket/pubblishAcks.ts +56 -70
  420. package/mqttPacket/publish.ts +67 -74
  421. package/mqttPacket/suback.ts +48 -58
  422. package/mqttPacket/subscribe.ts +141 -117
  423. package/mqttPacket/types.ts +1 -9
  424. package/mqttPacket/unsuback.ts +46 -58
  425. package/mqttPacket/unsubscribe.ts +74 -63
  426. package/mqttPacket/validators.ts +5 -31
  427. package/node/socket-node-stream.test.ts +322 -0
  428. package/node/socket-node-stream.ts +174 -0
  429. package/node/tcpClient.test.ts +70 -0
  430. package/node/tcpClient.ts +13 -12
  431. package/node/tcpServer.test.ts +24 -20
  432. package/node/tcpServer.ts +6 -0
  433. package/node/tlsServer.test.ts +94 -0
  434. package/node/tlsServer.ts +81 -0
  435. package/node/wrapNodeSocket.ts +7 -30
  436. package/package.json +72 -44
  437. package/persistence/basicPersistence.ts +495 -0
  438. package/persistence/deps.ts +11 -1
  439. package/persistence/memory/memoryPersistence.ts +12 -153
  440. package/persistence/memory/memoryStorage.ts +232 -0
  441. package/persistence/mod.ts +4 -9
  442. package/persistence/persistence.test.ts +24 -0
  443. package/persistence/persistence.testing.ts +1324 -0
  444. package/persistence/persistence.ts +111 -67
  445. package/persistence/sqlite/sqliteDatabase.ts +294 -0
  446. package/persistence/sqlite/sqlitePersistence.test.ts +48 -0
  447. package/persistence/sqlite/sqlitePersistence.ts +36 -0
  448. package/persistence/sqlite/sqliteStorage.ts +324 -0
  449. package/persistence/storage.ts +84 -0
  450. package/server/config.ts +65 -0
  451. package/server/context.ts +658 -74
  452. package/server/deps.ts +25 -5
  453. package/server/handlers/completeConnect.ts +93 -0
  454. package/server/handlers/duplicate.test.ts +196 -0
  455. package/server/handlers/handleAuth.test.ts +225 -0
  456. package/server/handlers/handleAuth.ts +88 -0
  457. package/server/handlers/handleConnect.test.ts +589 -0
  458. package/server/handlers/handleConnect.ts +201 -86
  459. package/server/handlers/handleConnect.version.test.ts +108 -0
  460. package/server/handlers/handleDisconnect.test.ts +56 -0
  461. package/server/handlers/handleDisconnect.ts +3 -3
  462. package/server/handlers/handlePacket.test.ts +24 -0
  463. package/server/handlers/handlePacket.ts +30 -8
  464. package/server/handlers/handlePingreq.test.ts +29 -0
  465. package/server/handlers/handlePuback.test.ts +28 -0
  466. package/server/handlers/handlePuback.ts +5 -8
  467. package/server/handlers/handlePubcomp.test.ts +28 -0
  468. package/server/handlers/handlePubcomp.ts +5 -4
  469. package/server/handlers/handlePublish.test.ts +471 -0
  470. package/server/handlers/handlePublish.ts +189 -35
  471. package/server/handlers/handlePubrec.test.ts +28 -0
  472. package/server/handlers/handlePubrec.ts +2 -3
  473. package/server/handlers/handlePubrel.test.ts +74 -0
  474. package/server/handlers/handlePubrel.ts +12 -2
  475. package/server/handlers/handleSubscribe.test.ts +971 -0
  476. package/server/handlers/handleSubscribe.ts +158 -39
  477. package/server/handlers/handleUnsubscribe.test.ts +79 -0
  478. package/server/handlers/handleUnsubscribe.ts +29 -5
  479. package/server/handlers/keepalive.test.ts +132 -0
  480. package/server/handlers/session.persistence.test.ts +194 -0
  481. package/server/handlers/will.delivery.test.ts +221 -0
  482. package/server/mod.ts +4 -3
  483. package/server/preconnect.test.ts +151 -0
  484. package/server/server.ts +115 -17
  485. package/socket/socket.test.ts +91 -0
  486. package/socket/socket.ts +81 -34
  487. package/timer/timer.test.ts +4 -7
  488. package/timer/timer.ts +36 -0
  489. package/tools/benchmarks/receiver.ts +51 -0
  490. package/tools/benchmarks/sender.ts +48 -0
  491. package/tools/benchmarks/utils.ts +31 -0
  492. package/tools/mqtt-compat/README.md +130 -0
  493. package/tools/mqtt-compat/broker.ts +52 -0
  494. package/tools/mqtt-compat/paho-mqtt4.test.ts +379 -0
  495. package/tools/mqtt-compat/paho-mqtt5.tests.ts +887 -0
  496. package/trie/trie.test.ts +9 -1
  497. package/trie/trie.ts +70 -45
  498. package/utils/bufferedAsyncIterable.test.ts +92 -0
  499. package/utils/deferred.test.ts +36 -0
  500. package/utils/deferred.ts +0 -1
  501. package/utils/getOrInsertPolyFill.ts +12 -0
  502. package/utils/logger.test.ts +189 -0
  503. package/utils/logger.ts +62 -7
  504. package/utils/mod.ts +15 -1
  505. package/utils/outboundTopicAliasManager.ts +100 -0
  506. package/utils/queue.test.ts +61 -0
  507. package/utils/topicFilter.test.ts +63 -0
  508. package/utils/topicFilter.ts +61 -0
  509. package/utils/utils.ts +3 -0
  510. package/utils/validators.ts +67 -0
  511. package/web/webSocketStream.ts +97 -0
  512. package/web/wrapWebSocket.ts +52 -0
  513. package/web/wsClient.test.ts +26 -0
  514. package/web/wsClient.ts +25 -0
  515. package/benchmarks/receiver.ts +0 -35
  516. package/benchmarks/sender.ts +0 -32
  517. package/benchmarks/utils.ts +0 -9
  518. package/dev_utils/dummyConn.ts +0 -110
  519. package/dev_utils/socketPair.ts +0 -85
  520. package/dist/persistence/store.d.ts +0 -14
  521. package/dist/persistence/store.d.ts.map +0 -1
  522. package/dist/persistence/store.js +0 -2
  523. package/dist/persistence/store.js.map +0 -1
  524. package/dist/utils/BufferedAsyncIterable.d.ts.map +0 -1
  525. package/dist/utils/BufferedAsyncIterable.js.map +0 -1
  526. package/examples/tcpServer.test.ts +0 -148
  527. package/persistence/memory/memoryPersistence.test.ts +0 -156
  528. package/persistence/store.ts +0 -16
  529. package/server/test/handleConnect.test.ts +0 -122
  530. package/server/test/test-handlers.ts +0 -53
  531. /package/utils/{BufferedAsyncIterable.ts → bufferedAsyncIterable.ts} +0 -0
@@ -0,0 +1,46 @@
1
+ import sqlite from "node:sqlite";
2
+ import type { ClientId } from "../../mqttPacket/types.ts";
3
+ /**
4
+ * Instantiates the physical relational structures and schemas required by the persistence engine.
5
+ * @param filename Filepath location or memory target specifier.
6
+ */
7
+ export declare function initializeDatabase(filename: string): sqlite.DatabaseSync;
8
+ export type AllStatements = {
9
+ saveSession: sqlite.StatementSync;
10
+ getSession: sqlite.StatementSync;
11
+ listAllSessions: sqlite.StatementSync;
12
+ saveSubscription: sqlite.StatementSync;
13
+ deleteSubscription: sqlite.StatementSync;
14
+ listSubscriptions: sqlite.StatementSync;
15
+ listAllSubscriptions: sqlite.StatementSync;
16
+ saveIncoming: sqlite.StatementSync;
17
+ getIncoming: sqlite.StatementSync;
18
+ updateIncomingDup: sqlite.StatementSync;
19
+ deleteIncoming: sqlite.StatementSync;
20
+ listIncoming: sqlite.StatementSync;
21
+ saveOutgoing: sqlite.StatementSync;
22
+ getOutgoing: sqlite.StatementSync;
23
+ updateOutgoingDup: sqlite.StatementSync;
24
+ deleteOutgoing: sqlite.StatementSync;
25
+ listOutgoing: sqlite.StatementSync;
26
+ saveAck: sqlite.StatementSync;
27
+ hasAck: sqlite.StatementSync;
28
+ deleteAck: sqlite.StatementSync;
29
+ listAcks: sqlite.StatementSync;
30
+ saveRetained: sqlite.StatementSync;
31
+ deleteRetained: sqlite.StatementSync;
32
+ getRetainedExact: sqlite.StatementSync;
33
+ listRetainedLike: sqlite.StatementSync;
34
+ };
35
+ /**
36
+ * Instantiates the physical relational structures and schemas required by the persistence engine.
37
+ * @param db the database for which to prepare the statements
38
+ */
39
+ export declare function prepareAllStatements(db: sqlite.DatabaseSync): AllStatements;
40
+ /**
41
+ * Truncates and drops relational state assignments under targeted clients inside atomic scopes.
42
+ * @param db Connection reference context.
43
+ * @param clientId Specific target client ID tracking token.
44
+ */
45
+ export declare function deleteClientState(db: sqlite.DatabaseSync, clientId: ClientId): void;
46
+ //# sourceMappingURL=sqliteDatabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteDatabase.d.ts","sourceRoot":"","sources":["../../../persistence/sqlite/sqliteDatabase.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,YAAY,CAoDxE;AAED,MAAM,MAAM,aAAa,GAAG;IAE1B,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC;IAGtC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC;IACvC,kBAAkB,EAAE,MAAM,CAAC,aAAa,CAAC;IACzC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IACxC,oBAAoB,EAAE,MAAM,CAAC,aAAa,CAAC;IAG3C,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IAGnC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IAGnC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC;IAG/B,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC,aAAa,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,GAAG,aAAa,CAiK3E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,MAAM,CAAC,YAAY,EACvB,QAAQ,EAAE,QAAQ,GACjB,IAAI,CAkBN"}
@@ -0,0 +1,215 @@
1
+ import sqlite from "node:sqlite";
2
+ /**
3
+ * Instantiates the physical relational structures and schemas required by the persistence engine.
4
+ * @param filename Filepath location or memory target specifier.
5
+ */
6
+ export function initializeDatabase(filename) {
7
+ const db = new sqlite.DatabaseSync(filename);
8
+ db.exec(`
9
+ PRAGMA journal_mode = WAL;
10
+ PRAGMA synchronous = NORMAL;
11
+
12
+ CREATE TABLE IF NOT EXISTS client_sessions (
13
+ client_id TEXT PRIMARY KEY,
14
+ session_data TEXT NOT NULL
15
+ );
16
+
17
+ CREATE TABLE IF NOT EXISTS subscriptions (
18
+ client_id TEXT NOT NULL,
19
+ topic TEXT NOT NULL,
20
+ share_name TEXT NOT NULL,
21
+ subscription_data TEXT NOT NULL,
22
+ PRIMARY KEY (client_id, topic, share_name)
23
+ );
24
+
25
+ CREATE TABLE IF NOT EXISTS pending_incoming (
26
+ seq_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Guarantees absolute insertion order
27
+ client_id TEXT NOT NULL,
28
+ packet_id INTEGER NOT NULL,
29
+ packet TEXT NOT NULL,
30
+ payload BLOB,
31
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
32
+ UNIQUE (client_id, packet_id)
33
+ );
34
+
35
+ CREATE TABLE IF NOT EXISTS pending_outgoing (
36
+ seq_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Guarantees absolute insertion order
37
+ client_id TEXT NOT NULL,
38
+ packet_id INTEGER NOT NULL,
39
+ packet TEXT NOT NULL,
40
+ payload BLOB,
41
+ created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
42
+ UNIQUE (client_id, packet_id)
43
+ );
44
+
45
+ CREATE TABLE IF NOT EXISTS pending_ack_outgoing (
46
+ client_id TEXT NOT NULL,
47
+ packet_id INTEGER NOT NULL,
48
+ PRIMARY KEY (client_id, packet_id)
49
+ );
50
+
51
+ CREATE TABLE IF NOT EXISTS retained (
52
+ topic TEXT PRIMARY KEY,
53
+ packet TEXT NOT NULL,
54
+ payload BLOB
55
+ );
56
+ `);
57
+ return db;
58
+ }
59
+ /**
60
+ * Instantiates the physical relational structures and schemas required by the persistence engine.
61
+ * @param db the database for which to prepare the statements
62
+ */
63
+ export function prepareAllStatements(db) {
64
+ return {
65
+ // Sessions
66
+ saveSession: db.prepare(`
67
+ INSERT INTO client_sessions (client_id, session_data)
68
+ VALUES (?, ?)
69
+ ON CONFLICT(client_id) DO UPDATE SET
70
+ session_data = excluded.session_data
71
+ `),
72
+ getSession: db.prepare(`
73
+ SELECT session_data
74
+ FROM client_sessions
75
+ WHERE client_id = ?
76
+ `),
77
+ listAllSessions: db.prepare(`
78
+ SELECT client_id, session_data
79
+ FROM client_sessions
80
+ `),
81
+ // Subscriptions
82
+ saveSubscription: db.prepare(`
83
+ INSERT INTO subscriptions (client_id, topic, share_name, subscription_data)
84
+ VALUES (?, ?, ?, ?)
85
+ ON CONFLICT(client_id, topic, share_name) DO UPDATE SET
86
+ subscription_data = excluded.subscription_data
87
+ `),
88
+ deleteSubscription: db.prepare(`
89
+ DELETE FROM subscriptions
90
+ WHERE client_id = ? AND topic = ? AND share_name = ?
91
+ `),
92
+ listSubscriptions: db.prepare(`
93
+ SELECT topic, share_name, subscription_data
94
+ FROM subscriptions
95
+ WHERE client_id = ?
96
+ `),
97
+ listAllSubscriptions: db.prepare(`
98
+ SELECT client_id, topic, share_name, subscription_data
99
+ FROM subscriptions
100
+ `),
101
+ // Pending Incoming Packets
102
+ saveIncoming: db.prepare(`
103
+ INSERT INTO pending_incoming (client_id, packet_id, packet, payload)
104
+ VALUES (?, ?, ?, ?)
105
+ ON CONFLICT(client_id, packet_id) DO UPDATE SET
106
+ packet = excluded.packet,
107
+ payload = excluded.payload
108
+ `),
109
+ getIncoming: db.prepare(`
110
+ SELECT packet, payload
111
+ FROM pending_incoming
112
+ WHERE client_id = ? AND packet_id = ?
113
+ `),
114
+ updateIncomingDup: db.prepare(`
115
+ UPDATE pending_incoming
116
+ SET packet = json_set(packet, '$.dup', json(?))
117
+ WHERE client_id = ? AND packet_id = ?
118
+ `),
119
+ deleteIncoming: db.prepare(`
120
+ DELETE FROM pending_incoming
121
+ WHERE client_id = ? AND packet_id = ?
122
+ `),
123
+ listIncoming: db.prepare(`
124
+ SELECT packet, payload
125
+ FROM pending_incoming
126
+ WHERE client_id = ?
127
+ ORDER BY seq_id ASC
128
+ `),
129
+ // Pending Outgoing Packets
130
+ saveOutgoing: db.prepare(`
131
+ INSERT INTO pending_outgoing (client_id, packet_id, packet, payload)
132
+ VALUES (?, ?, ?, ?)
133
+ ON CONFLICT(client_id, packet_id) DO UPDATE SET
134
+ packet = excluded.packet,
135
+ payload = excluded.payload
136
+ `),
137
+ getOutgoing: db.prepare(`
138
+ SELECT packet, payload
139
+ FROM pending_outgoing
140
+ WHERE client_id = ? AND packet_id = ?
141
+ `),
142
+ updateOutgoingDup: db.prepare(`
143
+ UPDATE pending_outgoing
144
+ SET packet = json_set(packet, '$.dup', json(?))
145
+ WHERE client_id = ? AND packet_id = ?
146
+ `),
147
+ deleteOutgoing: db.prepare(`
148
+ DELETE FROM pending_outgoing
149
+ WHERE client_id = ? AND packet_id = ?
150
+ `),
151
+ listOutgoing: db.prepare(`
152
+ SELECT packet, payload
153
+ FROM pending_outgoing
154
+ WHERE client_id = ?
155
+ ORDER BY seq_id ASC
156
+ `),
157
+ // ACKs
158
+ saveAck: db.prepare(`
159
+ INSERT INTO pending_ack_outgoing (client_id, packet_id)
160
+ VALUES (?, ?)
161
+ ON CONFLICT(client_id, packet_id) DO NOTHING
162
+ `),
163
+ hasAck: db.prepare(`
164
+ SELECT 1
165
+ FROM pending_ack_outgoing
166
+ WHERE client_id = ? AND packet_id = ?
167
+ `),
168
+ deleteAck: db.prepare(`
169
+ DELETE FROM pending_ack_outgoing
170
+ WHERE client_id = ? AND packet_id = ?
171
+ `),
172
+ listAcks: db.prepare(`
173
+ SELECT packet_id
174
+ FROM pending_ack_outgoing
175
+ WHERE client_id = ?
176
+ `),
177
+ // Retained Messages
178
+ saveRetained: db.prepare(`
179
+ INSERT INTO retained (topic, packet, payload)
180
+ VALUES (?, ?, ?)
181
+ ON CONFLICT(topic) DO UPDATE SET
182
+ packet = excluded.packet,
183
+ payload = excluded.payload
184
+ `),
185
+ deleteRetained: db.prepare(`
186
+ DELETE FROM retained
187
+ WHERE topic = ?
188
+ `),
189
+ getRetainedExact: db.prepare(`
190
+ SELECT packet, payload
191
+ FROM retained
192
+ WHERE topic = ?
193
+ `),
194
+ listRetainedLike: db.prepare(`
195
+ SELECT topic, packet, payload
196
+ FROM retained
197
+ WHERE topic LIKE ?
198
+ `),
199
+ };
200
+ }
201
+ /**
202
+ * Truncates and drops relational state assignments under targeted clients inside atomic scopes.
203
+ * @param db Connection reference context.
204
+ * @param clientId Specific target client ID tracking token.
205
+ */
206
+ export function deleteClientState(db, clientId) {
207
+ db.exec("begin;");
208
+ db.prepare("delete from subscriptions where client_id = ?").run(clientId);
209
+ db.prepare("delete from pending_incoming where client_id = ?").run(clientId);
210
+ db.prepare("delete from pending_outgoing where client_id = ?").run(clientId);
211
+ db.prepare("delete from pending_ack_outgoing where client_id = ?").run(clientId);
212
+ db.prepare("delete from client_sessions where client_id = ?").run(clientId);
213
+ db.exec("commit;");
214
+ }
215
+ //# sourceMappingURL=sqliteDatabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteDatabase.js","sourceRoot":"","sources":["../../../persistence/sqlite/sqliteDatabase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { MqttPersistence } from "../basicPersistence.ts";
2
+ import type sqlite from "node:sqlite";
3
+ export declare class SqlitePersistence extends MqttPersistence {
4
+ private storageInstance;
5
+ constructor(db?: string | sqlite.DatabaseSync);
6
+ /**
7
+ * Convenient lifecycle method combining instance creation and initialization.
8
+ */
9
+ static start(db?: string | sqlite.DatabaseSync): Promise<SqlitePersistence>;
10
+ /**
11
+ * Overrides close to make sure the underlying database file
12
+ * handle is cleaned up correctly when the persistence is halted.
13
+ */
14
+ close(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=sqlitePersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlitePersistence.d.ts","sourceRoot":"","sources":["../../../persistence/sqlite/sqlitePersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,eAAe,CAAgB;IAEvC,YAAY,EAAE,GAAE,MAAM,GAAG,MAAM,CAAC,YAAkC,EAIjE;IAED;;OAEG;IACH,OAAa,KAAK,CAChB,EAAE,GAAE,MAAM,GAAG,MAAM,CAAC,YAAkC,GACrD,OAAO,CAAC,iBAAiB,CAAC,CAI5B;IAED;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAI3B;CACF"}
@@ -0,0 +1,29 @@
1
+ import { MqttPersistence } from "../basicPersistence.js";
2
+ import { SqliteStorage } from "./sqliteStorage.js";
3
+ const SQLITE_DATABASE_URL = ":memory:";
4
+ export class SqlitePersistence extends MqttPersistence {
5
+ storageInstance;
6
+ constructor(db = SQLITE_DATABASE_URL) {
7
+ const storage = new SqliteStorage(db);
8
+ super(storage);
9
+ this.storageInstance = storage;
10
+ }
11
+ /**
12
+ * Convenient lifecycle method combining instance creation and initialization.
13
+ */
14
+ static async start(db = SQLITE_DATABASE_URL) {
15
+ const persistence = new SqlitePersistence(db);
16
+ await persistence.initialize();
17
+ return persistence;
18
+ }
19
+ /**
20
+ * Overrides close to make sure the underlying database file
21
+ * handle is cleaned up correctly when the persistence is halted.
22
+ */
23
+ async close() {
24
+ if (this.storageInstance.close) {
25
+ await this.storageInstance.close();
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=sqlitePersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlitePersistence.js","sourceRoot":"","sources":["../../../persistence/sqlite/sqlitePersistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAEvC,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IAC5C,eAAe,CAAgB;IAEvC,YAAY,EAAE,GAAiC,mBAAmB;QAChE,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,EAAE,GAAiC,mBAAmB;QAEtD,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;QAC/B,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ import type sqlite from "node:sqlite";
2
+ import type { ClientId, PacketId, Topic, TopicFilter } from "../deps.ts";
3
+ import type { ClientRegistrationResult, ClientSubscription, ExtPublishPacket, ShareName } from "../persistence.ts";
4
+ import { PacketDirection } from "../storage.ts";
5
+ import type { IStorageProvider, StoredSubscription } from "../storage.ts";
6
+ export declare class SqliteStorage implements IStorageProvider {
7
+ private db;
8
+ private statements;
9
+ constructor(db?: string | sqlite.DatabaseSync);
10
+ initialize(): Promise<void>;
11
+ close(): Promise<void>;
12
+ saveSession(clientId: ClientId, session: ClientRegistrationResult): Promise<void>;
13
+ getSession(clientId: ClientId): Promise<ClientRegistrationResult | null>;
14
+ deleteSession(clientId: ClientId): Promise<void>;
15
+ listAllSessions(): AsyncIterableIterator<{
16
+ clientId: ClientId;
17
+ session: ClientRegistrationResult;
18
+ }>;
19
+ saveSubscription(clientId: ClientId, sub: ClientSubscription): Promise<void>;
20
+ deleteSubscription(clientId: ClientId, topicFilter: TopicFilter, shareName: ShareName): Promise<void>;
21
+ listSubscriptions(clientId: ClientId): AsyncIterableIterator<ClientSubscription>;
22
+ listAllSubscriptions(): AsyncIterableIterator<StoredSubscription>;
23
+ savePendingPacket(clientId: ClientId, direction: PacketDirection, packet: ExtPublishPacket): Promise<void>;
24
+ getPendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId): Promise<ExtPublishPacket | null>;
25
+ updatePendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId, dup: boolean): Promise<boolean>;
26
+ deletePendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId): Promise<boolean>;
27
+ listPendingPackets(clientId: ClientId, direction: PacketDirection): AsyncIterableIterator<ExtPublishPacket>;
28
+ savePendingAck(clientId: ClientId, packetId: PacketId): Promise<void>;
29
+ hasPendingAck(clientId: ClientId, packetId: PacketId): Promise<boolean>;
30
+ deletePendingAck(clientId: ClientId, packetId: PacketId): Promise<boolean>;
31
+ listPendingAcks(clientId: ClientId): AsyncIterableIterator<PacketId>;
32
+ saveRetained(topic: Topic, packet: ExtPublishPacket): Promise<void>;
33
+ deleteRetained(topic: Topic): Promise<void>;
34
+ listRetainedMatches(topicFilter: TopicFilter): AsyncIterableIterator<ExtPublishPacket>;
35
+ }
36
+ //# sourceMappingURL=sqliteStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteStorage.d.ts","sourceRoot":"","sources":["../../../persistence/sqlite/sqliteStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ import { PacketDirection } from "../storage.js";
2
+ import { topicFilterToRegExp } from "../deps.js";
3
+ import { deleteClientState, initializeDatabase, prepareAllStatements, } from "./sqliteDatabase.js";
4
+ const SQLITE_DATABASE_URL = ":memory:";
5
+ function serializePacket(packet) {
6
+ const packetJson = JSON.stringify({ ...packet, payload: undefined });
7
+ const payloadBlob = packet.payload ? packet.payload : null;
8
+ return { packetJson, payloadBlob };
9
+ }
10
+ function deserializePacket(packetJson, payloadBlob) {
11
+ const packet = JSON.parse(packetJson);
12
+ if (payloadBlob) {
13
+ packet.payload = payloadBlob;
14
+ }
15
+ return packet;
16
+ }
17
+ export class SqliteStorage {
18
+ db;
19
+ statements;
20
+ constructor(db = SQLITE_DATABASE_URL) {
21
+ if (typeof db === "string") {
22
+ this.db = initializeDatabase(db);
23
+ }
24
+ else {
25
+ this.db = db;
26
+ }
27
+ this.statements = prepareAllStatements(this.db);
28
+ }
29
+ initialize() {
30
+ return Promise.resolve();
31
+ }
32
+ close() {
33
+ this.db.close();
34
+ return Promise.resolve();
35
+ }
36
+ // --- Sessions ---
37
+ saveSession(clientId, session) {
38
+ this.statements.saveSession.run(clientId, JSON.stringify(session));
39
+ return Promise.resolve();
40
+ }
41
+ getSession(clientId) {
42
+ const row = this.statements.getSession.get(clientId);
43
+ return Promise.resolve(row ? JSON.parse(row.session_data) : null);
44
+ }
45
+ deleteSession(clientId) {
46
+ deleteClientState(this.db, clientId);
47
+ return Promise.resolve();
48
+ }
49
+ async *listAllSessions() {
50
+ for (const row of this.statements.listAllSessions
51
+ .iterate()) {
52
+ yield {
53
+ clientId: row.client_id,
54
+ session: JSON.parse(row.session_data),
55
+ };
56
+ }
57
+ }
58
+ // --- Subscriptions ---
59
+ saveSubscription(clientId, sub) {
60
+ const subData = {
61
+ qos: sub.qos,
62
+ noLocal: sub.noLocal,
63
+ retainAsPublished: sub.retainAsPublished,
64
+ retainHandling: sub.retainHandling,
65
+ subscriptionIdentifier: sub.subscriptionIdentifier,
66
+ };
67
+ this.statements.saveSubscription.run(clientId, sub.topicFilter, sub.shareName, JSON.stringify(subData));
68
+ return Promise.resolve();
69
+ }
70
+ deleteSubscription(clientId, topicFilter, shareName) {
71
+ this.statements.deleteSubscription.run(clientId, topicFilter, shareName);
72
+ return Promise.resolve();
73
+ }
74
+ async *listSubscriptions(clientId) {
75
+ const rows = this.statements.listSubscriptions.all(clientId);
76
+ for (const row of rows) {
77
+ const sub = JSON.parse(row.subscription_data);
78
+ sub.topicFilter = row.topic;
79
+ sub.shareName = row.share_name;
80
+ yield sub;
81
+ }
82
+ }
83
+ async *listAllSubscriptions() {
84
+ const rows = this.statements.listAllSubscriptions.all();
85
+ for (const row of rows) {
86
+ const sub = JSON.parse(row.subscription_data);
87
+ sub.topicFilter = row.topic;
88
+ sub.shareName = row.share_name;
89
+ sub.clientId = row.client_id;
90
+ yield sub;
91
+ }
92
+ }
93
+ // --- Pending Packets (Incoming & Outgoing) ---
94
+ savePendingPacket(clientId, direction, packet) {
95
+ if (packet.id === undefined)
96
+ return Promise.resolve();
97
+ const { packetJson, payloadBlob } = serializePacket(packet);
98
+ const stmt = direction === PacketDirection.Incoming
99
+ ? this.statements.saveIncoming
100
+ : this.statements.saveOutgoing;
101
+ stmt.run(clientId, packet.id, packetJson, payloadBlob);
102
+ return Promise.resolve();
103
+ }
104
+ getPendingPacket(clientId, direction, packetId) {
105
+ const stmt = direction === PacketDirection.Incoming
106
+ ? this.statements.getIncoming
107
+ : this.statements.getOutgoing;
108
+ const row = stmt.get(clientId, packetId);
109
+ if (!row)
110
+ return Promise.resolve(null);
111
+ // Filter out expired packets
112
+ if (row.expires_at !== null && row.expires_at <= Date.now()) {
113
+ return Promise.resolve(null);
114
+ }
115
+ return Promise.resolve(deserializePacket(row.packet, row.payload));
116
+ }
117
+ updatePendingPacket(clientId, direction, packetId, dup) {
118
+ const stmt = direction === PacketDirection.Incoming
119
+ ? this.statements.updateIncomingDup
120
+ : this.statements.updateOutgoingDup;
121
+ // Pass "true" of "false" as JSON literal , passing a boolean would make it 1 or 0
122
+ const info = stmt.run(dup ? "true" : "false", clientId, packetId);
123
+ // info.changes returns number of updated records
124
+ return Promise.resolve(info.changes > 0);
125
+ }
126
+ deletePendingPacket(clientId, direction, packetId) {
127
+ const stmt = direction === PacketDirection.Incoming
128
+ ? this.statements.deleteIncoming
129
+ : this.statements.deleteOutgoing;
130
+ const info = stmt.run(clientId, packetId);
131
+ return Promise.resolve(info.changes > 0);
132
+ }
133
+ async *listPendingPackets(clientId, direction) {
134
+ const stmt = direction === PacketDirection.Incoming
135
+ ? this.statements.listIncoming
136
+ : this.statements.listOutgoing;
137
+ const rows = stmt.all(clientId);
138
+ for (const row of rows) {
139
+ yield deserializePacket(row.packet, row.payload);
140
+ }
141
+ }
142
+ // --- ACKs ---
143
+ savePendingAck(clientId, packetId) {
144
+ this.statements.saveAck.run(clientId, packetId);
145
+ return Promise.resolve();
146
+ }
147
+ hasPendingAck(clientId, packetId) {
148
+ const row = this.statements.hasAck.get(clientId, packetId);
149
+ return Promise.resolve(row !== undefined);
150
+ }
151
+ deletePendingAck(clientId, packetId) {
152
+ const info = this.statements.deleteAck.run(clientId, packetId);
153
+ return Promise.resolve(info.changes > 0);
154
+ }
155
+ async *listPendingAcks(clientId) {
156
+ const rows = this.statements.listAcks.all(clientId);
157
+ for (const row of rows) {
158
+ yield row.packet_id;
159
+ }
160
+ }
161
+ // --- Retained Messages ---
162
+ saveRetained(topic, packet) {
163
+ const { packetJson, payloadBlob } = serializePacket(packet);
164
+ this.statements.saveRetained.run(topic, packetJson, payloadBlob);
165
+ return Promise.resolve();
166
+ }
167
+ deleteRetained(topic) {
168
+ this.statements.deleteRetained.run(topic);
169
+ return Promise.resolve();
170
+ }
171
+ async *listRetainedMatches(topicFilter) {
172
+ let hasWildcards = false;
173
+ const sqlLike = topicFilter.replace(/\/#|#|\+/g, () => {
174
+ hasWildcards = true;
175
+ return "%";
176
+ });
177
+ if (!hasWildcards) {
178
+ const rows = this.statements.getRetainedExact.all(topicFilter);
179
+ for (const row of rows) {
180
+ yield deserializePacket(row.packet, row.payload);
181
+ }
182
+ }
183
+ else {
184
+ const rows = this.statements.listRetainedLike.all(sqlLike);
185
+ const regex = topicFilterToRegExp(topicFilter);
186
+ for (const row of rows) {
187
+ if (regex.test(row.topic)) {
188
+ yield deserializePacket(row.packet, row.payload);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ //# sourceMappingURL=sqliteStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqliteStorage.js","sourceRoot":"","sources":["../../../persistence/sqlite/sqliteStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { ClientId, PacketId, Topic, TopicFilter } from "./deps.ts";
2
+ import type { ClientRegistrationResult, ClientSubscription, ExtPublishPacket, ShareName } from "./persistence.ts";
3
+ export type StoredSubscription = ClientSubscription & {
4
+ clientId: ClientId;
5
+ };
6
+ export declare const PacketDirection: {
7
+ readonly Incoming: 0;
8
+ readonly Outgoing: 1;
9
+ };
10
+ export type PacketDirection = typeof PacketDirection[keyof typeof PacketDirection];
11
+ export interface IStorageProvider {
12
+ initialize(): Promise<void>;
13
+ close?(): Promise<void>;
14
+ saveSession(clientId: ClientId, session: ClientRegistrationResult): Promise<void>;
15
+ getSession(clientId: ClientId): Promise<ClientRegistrationResult | null>;
16
+ deleteSession(clientId: ClientId): Promise<void>;
17
+ listAllSessions(): AsyncIterableIterator<{
18
+ clientId: ClientId;
19
+ session: ClientRegistrationResult;
20
+ }>;
21
+ saveSubscription(clientId: ClientId, sub: ClientSubscription): Promise<void>;
22
+ deleteSubscription(clientId: ClientId, topicFilter: TopicFilter, shareName: ShareName): Promise<void>;
23
+ listSubscriptions(clientId: ClientId): AsyncIterableIterator<ClientSubscription>;
24
+ listAllSubscriptions(): AsyncIterableIterator<StoredSubscription>;
25
+ savePendingPacket(clientId: ClientId, direction: PacketDirection, packet: ExtPublishPacket): Promise<void>;
26
+ getPendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId): Promise<ExtPublishPacket | null>;
27
+ updatePendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId, dup: boolean): Promise<boolean>;
28
+ deletePendingPacket(clientId: ClientId, direction: PacketDirection, packetId: PacketId): Promise<boolean>;
29
+ listPendingPackets(clientId: ClientId, direction: PacketDirection): AsyncIterableIterator<ExtPublishPacket>;
30
+ savePendingAck(clientId: ClientId, packetId: PacketId): Promise<void>;
31
+ hasPendingAck(clientId: ClientId, packetId: PacketId): Promise<boolean>;
32
+ deletePendingAck(clientId: ClientId, packetId: PacketId): Promise<boolean>;
33
+ listPendingAcks(clientId: ClientId): AsyncIterableIterator<PacketId>;
34
+ saveRetained(topic: Topic, packet: ExtPublishPacket): Promise<void>;
35
+ deleteRetained(topic: Topic): Promise<void>;
36
+ listRetainedMatches(topicFilter: TopicFilter): AsyncIterableIterator<ExtPublishPacket>;
37
+ }
38
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../persistence/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export const PacketDirection = {
2
+ Incoming: 0,
3
+ Outgoing: 1,
4
+ };
5
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../persistence/storage.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,CAAC;CACH,CAAC"}