@seriousme/opifex 1.9.4 → 1.11.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 (331) hide show
  1. package/README.md +37 -26
  2. package/bin/conformanceServer.ts +3 -2
  3. package/bin/demoServer.ts +3 -2
  4. package/bin/mqtt.ts +127 -118
  5. package/client/client.ts +61 -21
  6. package/client/context.ts +71 -30
  7. package/client/deps.ts +5 -0
  8. package/client/handlers/handleConnack.ts +17 -5
  9. package/client/handlers/handlePublish.ts +4 -1
  10. package/client/handlers/handlePubrec.ts +3 -1
  11. package/client/handlers/handlePubrel.ts +3 -1
  12. package/client/handlers/handleSuback.ts +3 -1
  13. package/client/mod.ts +8 -1
  14. package/client/store/memoryStore.ts +2 -1
  15. package/deno/tcpClient.ts +1 -1
  16. package/dev_utils/dummyConn.ts +17 -2
  17. package/dist/bin/conformanceServer.js +3 -2
  18. package/dist/bin/conformanceServer.js.map +1 -1
  19. package/dist/bin/demoServer.js +3 -2
  20. package/dist/bin/demoServer.js.map +1 -1
  21. package/dist/bin/mqtt.d.ts +29 -0
  22. package/dist/bin/mqtt.d.ts.map +1 -1
  23. package/dist/bin/mqtt.js +102 -97
  24. package/dist/bin/mqtt.js.map +1 -1
  25. package/dist/client/client.d.ts +16 -5
  26. package/dist/client/client.d.ts.map +1 -1
  27. package/dist/client/client.js +36 -15
  28. package/dist/client/client.js.map +1 -1
  29. package/dist/client/context.d.ts +8 -3
  30. package/dist/client/context.d.ts.map +1 -1
  31. package/dist/client/context.js +51 -21
  32. package/dist/client/context.js.map +1 -1
  33. package/dist/client/deps.d.ts +3 -2
  34. package/dist/client/deps.d.ts.map +1 -1
  35. package/dist/client/deps.js +2 -1
  36. package/dist/client/deps.js.map +1 -1
  37. package/dist/client/handlers/handleConnack.d.ts +1 -1
  38. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  39. package/dist/client/handlers/handleConnack.js +14 -5
  40. package/dist/client/handlers/handleConnack.js.map +1 -1
  41. package/dist/client/handlers/handlePublish.d.ts +1 -1
  42. package/dist/client/handlers/handlePublish.d.ts.map +1 -1
  43. package/dist/client/handlers/handlePublish.js +2 -0
  44. package/dist/client/handlers/handlePublish.js.map +1 -1
  45. package/dist/client/handlers/handlePubrec.d.ts +1 -1
  46. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  47. package/dist/client/handlers/handlePubrec.js +1 -0
  48. package/dist/client/handlers/handlePubrec.js.map +1 -1
  49. package/dist/client/handlers/handlePubrel.d.ts +1 -1
  50. package/dist/client/handlers/handlePubrel.d.ts.map +1 -1
  51. package/dist/client/handlers/handlePubrel.js +1 -0
  52. package/dist/client/handlers/handlePubrel.js.map +1 -1
  53. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  54. package/dist/client/handlers/handleSuback.js +3 -1
  55. package/dist/client/handlers/handleSuback.js.map +1 -1
  56. package/dist/client/mod.d.ts +3 -1
  57. package/dist/client/mod.d.ts.map +1 -1
  58. package/dist/client/mod.js +2 -1
  59. package/dist/client/mod.js.map +1 -1
  60. package/dist/client/store/memoryStore.d.ts +1 -1
  61. package/dist/client/store/memoryStore.d.ts.map +1 -1
  62. package/dist/client/store/memoryStore.js.map +1 -1
  63. package/dist/mqttConn/mqttConn.d.ts +13 -8
  64. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  65. package/dist/mqttConn/mqttConn.js +27 -12
  66. package/dist/mqttConn/mqttConn.js.map +1 -1
  67. package/dist/mqttPacket/PacketType.d.ts +1 -0
  68. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  69. package/dist/mqttPacket/PacketType.js +1 -0
  70. package/dist/mqttPacket/PacketType.js.map +1 -1
  71. package/dist/mqttPacket/Properties.d.ts +157 -0
  72. package/dist/mqttPacket/Properties.d.ts.map +1 -0
  73. package/dist/mqttPacket/Properties.js +177 -0
  74. package/dist/mqttPacket/Properties.js.map +1 -0
  75. package/dist/mqttPacket/ReasonCode.d.ts +74 -0
  76. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -0
  77. package/dist/mqttPacket/ReasonCode.js +230 -0
  78. package/dist/mqttPacket/ReasonCode.js.map +1 -0
  79. package/dist/mqttPacket/RetainHandling.d.ts +12 -0
  80. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -0
  81. package/dist/mqttPacket/RetainHandling.js +12 -0
  82. package/dist/mqttPacket/RetainHandling.js.map +1 -0
  83. package/dist/mqttPacket/auth.d.ts +21 -0
  84. package/dist/mqttPacket/auth.d.ts.map +1 -0
  85. package/dist/mqttPacket/auth.js +34 -0
  86. package/dist/mqttPacket/auth.js.map +1 -0
  87. package/dist/mqttPacket/connack.d.ts +19 -11
  88. package/dist/mqttPacket/connack.d.ts.map +1 -1
  89. package/dist/mqttPacket/connack.js +43 -15
  90. package/dist/mqttPacket/connack.js.map +1 -1
  91. package/dist/mqttPacket/connect.d.ts +30 -11
  92. package/dist/mqttPacket/connect.d.ts.map +1 -1
  93. package/dist/mqttPacket/connect.js +106 -30
  94. package/dist/mqttPacket/connect.js.map +1 -1
  95. package/dist/mqttPacket/decoder.d.ts +42 -3
  96. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  97. package/dist/mqttPacket/decoder.js +135 -4
  98. package/dist/mqttPacket/decoder.js.map +1 -1
  99. package/dist/mqttPacket/disconnect.d.ts +15 -9
  100. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  101. package/dist/mqttPacket/disconnect.js +45 -6
  102. package/dist/mqttPacket/disconnect.js.map +1 -1
  103. package/dist/mqttPacket/encoder.d.ts +57 -8
  104. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  105. package/dist/mqttPacket/encoder.js +185 -13
  106. package/dist/mqttPacket/encoder.js.map +1 -1
  107. package/dist/mqttPacket/length.d.ts.map +1 -1
  108. package/dist/mqttPacket/length.js +3 -2
  109. package/dist/mqttPacket/length.js.map +1 -1
  110. package/dist/mqttPacket/mod.d.ts +57 -91
  111. package/dist/mqttPacket/mod.d.ts.map +1 -1
  112. package/dist/mqttPacket/mod.js +23 -29
  113. package/dist/mqttPacket/mod.js.map +1 -1
  114. package/dist/mqttPacket/pingreq.d.ts +4 -6
  115. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  116. package/dist/mqttPacket/pingreq.js +5 -4
  117. package/dist/mqttPacket/pingreq.js.map +1 -1
  118. package/dist/mqttPacket/pingres.d.ts +4 -6
  119. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  120. package/dist/mqttPacket/pingres.js +7 -5
  121. package/dist/mqttPacket/pingres.js.map +1 -1
  122. package/dist/mqttPacket/protocolLevels.d.ts +12 -0
  123. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -0
  124. package/dist/mqttPacket/protocolLevels.js +11 -0
  125. package/dist/mqttPacket/protocolLevels.js.map +1 -0
  126. package/dist/mqttPacket/pubblishAcks.d.ts +42 -0
  127. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -0
  128. package/dist/mqttPacket/pubblishAcks.js +56 -0
  129. package/dist/mqttPacket/pubblishAcks.js.map +1 -0
  130. package/dist/mqttPacket/publish.d.ts +19 -8
  131. package/dist/mqttPacket/publish.d.ts.map +1 -1
  132. package/dist/mqttPacket/publish.js +26 -7
  133. package/dist/mqttPacket/publish.js.map +1 -1
  134. package/dist/mqttPacket/suback.d.ts +18 -11
  135. package/dist/mqttPacket/suback.d.ts.map +1 -1
  136. package/dist/mqttPacket/suback.js +41 -20
  137. package/dist/mqttPacket/suback.js.map +1 -1
  138. package/dist/mqttPacket/subscribe.d.ts +27 -12
  139. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  140. package/dist/mqttPacket/subscribe.js +71 -15
  141. package/dist/mqttPacket/subscribe.js.map +1 -1
  142. package/dist/mqttPacket/types.d.ts +36 -0
  143. package/dist/mqttPacket/types.d.ts.map +1 -1
  144. package/dist/mqttPacket/unsuback.d.ts +17 -10
  145. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  146. package/dist/mqttPacket/unsuback.js +29 -6
  147. package/dist/mqttPacket/unsuback.js.map +1 -1
  148. package/dist/mqttPacket/unsubscribe.d.ts +17 -10
  149. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  150. package/dist/mqttPacket/unsubscribe.js +24 -8
  151. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  152. package/dist/mqttPacket/validators.d.ts +15 -0
  153. package/dist/mqttPacket/validators.d.ts.map +1 -1
  154. package/dist/mqttPacket/validators.js +15 -0
  155. package/dist/mqttPacket/validators.js.map +1 -1
  156. package/dist/node/tcpClient.js +1 -1
  157. package/dist/node/tcpClient.js.map +1 -1
  158. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  159. package/dist/node/wrapNodeSocket.js.map +1 -1
  160. package/dist/persistence/deps.d.ts +1 -1
  161. package/dist/persistence/deps.d.ts.map +1 -1
  162. package/dist/persistence/deps.js +1 -1
  163. package/dist/persistence/deps.js.map +1 -1
  164. package/dist/persistence/memory/memoryPersistence.js +1 -1
  165. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  166. package/dist/server/context.d.ts +3 -1
  167. package/dist/server/context.d.ts.map +1 -1
  168. package/dist/server/context.js +8 -2
  169. package/dist/server/context.js.map +1 -1
  170. package/dist/server/deps.d.ts +2 -2
  171. package/dist/server/deps.d.ts.map +1 -1
  172. package/dist/server/deps.js +1 -1
  173. package/dist/server/deps.js.map +1 -1
  174. package/dist/server/handlers/handleConnect.d.ts +1 -1
  175. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  176. package/dist/server/handlers/handleConnect.js +9 -1
  177. package/dist/server/handlers/handleConnect.js.map +1 -1
  178. package/dist/server/handlers/handlePacket.d.ts +1 -1
  179. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  180. package/dist/server/handlers/handlePacket.js +1 -1
  181. package/dist/server/handlers/handlePacket.js.map +1 -1
  182. package/dist/server/handlers/handlePingreq.d.ts.map +1 -1
  183. package/dist/server/handlers/handlePingreq.js +1 -0
  184. package/dist/server/handlers/handlePingreq.js.map +1 -1
  185. package/dist/server/handlers/handlePublish.d.ts +2 -2
  186. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  187. package/dist/server/handlers/handlePublish.js +2 -0
  188. package/dist/server/handlers/handlePublish.js.map +1 -1
  189. package/dist/server/handlers/handlePubrec.d.ts +1 -1
  190. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  191. package/dist/server/handlers/handlePubrec.js +1 -0
  192. package/dist/server/handlers/handlePubrec.js.map +1 -1
  193. package/dist/server/handlers/handlePubrel.d.ts +1 -1
  194. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  195. package/dist/server/handlers/handlePubrel.js +1 -0
  196. package/dist/server/handlers/handlePubrel.js.map +1 -1
  197. package/dist/server/handlers/handleSubscribe.d.ts +1 -1
  198. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  199. package/dist/server/handlers/handleSubscribe.js +2 -1
  200. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  201. package/dist/server/handlers/handleUnsubscribe.d.ts +1 -1
  202. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  203. package/dist/server/handlers/handleUnsubscribe.js +1 -0
  204. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  205. package/dist/server/server.d.ts +2 -2
  206. package/dist/server/server.d.ts.map +1 -1
  207. package/dist/server/server.js +5 -3
  208. package/dist/server/server.js.map +1 -1
  209. package/dist/socket/socket.d.ts.map +1 -1
  210. package/dist/socket/socket.js +6 -1
  211. package/dist/socket/socket.js.map +1 -1
  212. package/dist/utils/assert.d.ts +0 -3
  213. package/dist/utils/assert.d.ts.map +1 -1
  214. package/dist/utils/assert.js +0 -7
  215. package/dist/utils/assert.js.map +1 -1
  216. package/dist/utils/asyncQueue.d.ts +1 -3
  217. package/dist/utils/asyncQueue.d.ts.map +1 -1
  218. package/dist/utils/asyncQueue.js +16 -21
  219. package/dist/utils/asyncQueue.js.map +1 -1
  220. package/dist/utils/logger.d.ts +5 -15
  221. package/dist/utils/logger.d.ts.map +1 -1
  222. package/dist/utils/logger.js +7 -8
  223. package/dist/utils/logger.js.map +1 -1
  224. package/dist/utils/mod.d.ts +0 -3
  225. package/dist/utils/mod.d.ts.map +1 -1
  226. package/dist/utils/mod.js +0 -2
  227. package/dist/utils/mod.js.map +1 -1
  228. package/dist/utils/utils.d.ts +2 -0
  229. package/dist/utils/utils.d.ts.map +1 -0
  230. package/dist/utils/utils.js +6 -0
  231. package/dist/utils/utils.js.map +1 -0
  232. package/mqttConn/mqttConn.test.ts +27 -12
  233. package/mqttConn/mqttConn.ts +45 -14
  234. package/mqttPacket/PacketType.ts +1 -0
  235. package/mqttPacket/Properties.ts +276 -0
  236. package/mqttPacket/ReasonCode.test.ts +22 -0
  237. package/mqttPacket/ReasonCode.ts +256 -0
  238. package/mqttPacket/RetainHandling.ts +11 -0
  239. package/mqttPacket/auth.test.ts +112 -0
  240. package/mqttPacket/auth.ts +71 -0
  241. package/mqttPacket/connack.test.ts +84 -64
  242. package/mqttPacket/connack.ts +88 -24
  243. package/mqttPacket/connect.test.ts +497 -18
  244. package/mqttPacket/connect.ts +170 -39
  245. package/mqttPacket/decoder.test.ts +33 -16
  246. package/mqttPacket/decoder.ts +173 -5
  247. package/mqttPacket/disconnect.test.ts +97 -18
  248. package/mqttPacket/disconnect.ts +84 -12
  249. package/mqttPacket/encoder.test.ts +32 -8
  250. package/mqttPacket/encoder.ts +236 -11
  251. package/mqttPacket/length.ts +3 -2
  252. package/mqttPacket/mod.ts +76 -39
  253. package/mqttPacket/pingreq.test.ts +52 -4
  254. package/mqttPacket/pingreq.ts +20 -7
  255. package/mqttPacket/pingres.test.ts +52 -4
  256. package/mqttPacket/pingres.ts +22 -8
  257. package/mqttPacket/properties.test.ts +193 -0
  258. package/mqttPacket/protocolLevels.ts +13 -0
  259. package/mqttPacket/pubblishAcks.ts +123 -0
  260. package/mqttPacket/publish.test.ts +212 -133
  261. package/mqttPacket/publish.ts +69 -14
  262. package/mqttPacket/publishAcks.test.ts +128 -0
  263. package/mqttPacket/suback.test.ts +71 -27
  264. package/mqttPacket/suback.ts +82 -30
  265. package/mqttPacket/subscribe.test.ts +132 -43
  266. package/mqttPacket/subscribe.ts +128 -25
  267. package/mqttPacket/types.ts +43 -0
  268. package/mqttPacket/unsuback.test.ts +80 -30
  269. package/mqttPacket/unsuback.ts +68 -13
  270. package/mqttPacket/unsubscribe.test.ts +59 -34
  271. package/mqttPacket/unsubscribe.ts +64 -17
  272. package/mqttPacket/validators.ts +15 -0
  273. package/node/tcpClient.ts +1 -1
  274. package/node/wrapNodeSocket.ts +2 -1
  275. package/package.json +2 -2
  276. package/persistence/deps.ts +1 -1
  277. package/persistence/memory/memoryPersistence.test.ts +5 -1
  278. package/persistence/memory/memoryPersistence.ts +1 -1
  279. package/server/context.ts +23 -10
  280. package/server/deps.ts +2 -0
  281. package/server/handlers/handleConnect.ts +12 -9
  282. package/server/handlers/handlePacket.ts +10 -11
  283. package/server/handlers/handlePingreq.ts +1 -0
  284. package/server/handlers/handlePublish.ts +6 -2
  285. package/server/handlers/handlePubrec.ts +3 -1
  286. package/server/handlers/handlePubrel.ts +3 -1
  287. package/server/handlers/handleSubscribe.ts +3 -6
  288. package/server/handlers/handleUnsubscribe.ts +3 -1
  289. package/server/server.ts +8 -12
  290. package/server/test/handleConnect.test.ts +2 -1
  291. package/server/test/test-handlers.ts +2 -1
  292. package/socket/socket.ts +5 -1
  293. package/utils/assert.ts +0 -18
  294. package/utils/asyncQueue.ts +17 -21
  295. package/utils/logger.ts +12 -11
  296. package/utils/mod.ts +0 -3
  297. package/utils/utils.ts +6 -0
  298. package/dist/mqttPacket/puback.d.ts +0 -16
  299. package/dist/mqttPacket/puback.d.ts.map +0 -1
  300. package/dist/mqttPacket/puback.js +0 -21
  301. package/dist/mqttPacket/puback.js.map +0 -1
  302. package/dist/mqttPacket/pubcomp.d.ts +0 -17
  303. package/dist/mqttPacket/pubcomp.d.ts.map +0 -1
  304. package/dist/mqttPacket/pubcomp.js +0 -21
  305. package/dist/mqttPacket/pubcomp.js.map +0 -1
  306. package/dist/mqttPacket/pubrec.d.ts +0 -17
  307. package/dist/mqttPacket/pubrec.d.ts.map +0 -1
  308. package/dist/mqttPacket/pubrec.js +0 -21
  309. package/dist/mqttPacket/pubrec.js.map +0 -1
  310. package/dist/mqttPacket/pubrel.d.ts +0 -17
  311. package/dist/mqttPacket/pubrel.d.ts.map +0 -1
  312. package/dist/mqttPacket/pubrel.js +0 -21
  313. package/dist/mqttPacket/pubrel.js.map +0 -1
  314. package/dist/utils/args.d.ts +0 -28
  315. package/dist/utils/args.d.ts.map +0 -1
  316. package/dist/utils/args.js +0 -76
  317. package/dist/utils/args.js.map +0 -1
  318. package/dist/utils/platform.d.ts +0 -5
  319. package/dist/utils/platform.d.ts.map +0 -1
  320. package/dist/utils/platform.js +0 -8
  321. package/dist/utils/platform.js.map +0 -1
  322. package/mqttPacket/puback.test.ts +0 -55
  323. package/mqttPacket/puback.ts +0 -34
  324. package/mqttPacket/pubcomp.test.ts +0 -55
  325. package/mqttPacket/pubcomp.ts +0 -35
  326. package/mqttPacket/pubrec.test.ts +0 -55
  327. package/mqttPacket/pubrec.ts +0 -35
  328. package/mqttPacket/pubrel.test.ts +0 -55
  329. package/mqttPacket/pubrel.ts +0 -35
  330. package/utils/args.ts +0 -103
  331. package/utils/platform.ts +0 -8
package/client/context.ts CHANGED
@@ -1,29 +1,37 @@
1
1
  import {
2
- type AnyPacket,
3
2
  AsyncQueue,
4
- type ConnectPacket,
5
3
  Deferred,
6
4
  logger,
7
- type MemoryStore,
8
5
  MqttConn,
9
- type PacketId,
6
+ MQTTLevel,
7
+ nextTick,
10
8
  PacketType,
11
- type PublishPacket,
12
- type ReturnCodes,
13
- type SockConn,
14
- type SubscribePacket,
15
- type TAuthenticationResult,
16
9
  Timer,
17
- type UnsubscribePacket,
10
+ } from "./deps.ts";
11
+ import type {
12
+ AnyPacket,
13
+ ConnectPacket,
14
+ MemoryStore,
15
+ PacketId,
16
+ ProtocolLevel,
17
+ PublishPacket,
18
+ ReturnCodes,
19
+ SockConn,
20
+ SubscribePacket,
21
+ TAuthenticationResult,
22
+ UnsubscribePacket,
18
23
  } from "./deps.ts";
19
24
 
20
25
  import { handlePacket } from "./handlers/handlePacket.ts";
21
26
  import type { TConnectionState } from "./ConnectionState.ts";
22
27
  import { ConnectionState } from "./ConnectionState.ts";
28
+ import type { Client } from "./client.ts";
29
+ import { assert } from "../utils/assert.ts";
23
30
 
24
31
  export class Context {
25
32
  mqttConn?: MqttConn;
26
- connectionState: TConnectionState;
33
+ #connectionState: TConnectionState;
34
+ protocolLevel: ProtocolLevel;
27
35
  pingTimer?: Timer;
28
36
  unresolvedConnect?: Deferred<TAuthenticationResult>;
29
37
  unresolvedPublish: Map<PacketId, Deferred<void>>;
@@ -31,18 +39,41 @@ export class Context {
31
39
  unresolvedUnSubscribe: Map<PacketId, Deferred<void>>;
32
40
  store: MemoryStore;
33
41
  incoming: AsyncQueue<PublishPacket>;
42
+ #client: Client;
34
43
 
35
- constructor(store: MemoryStore) {
44
+ constructor(store: MemoryStore, client: Client) {
45
+ this.#client = client;
36
46
  this.store = store;
37
- this.connectionState = ConnectionState.offline;
47
+ this.#connectionState = ConnectionState.offline;
48
+ this.protocolLevel = MQTTLevel.unknown;
38
49
  this.incoming = new AsyncQueue();
39
50
  this.unresolvedPublish = new Map();
40
51
  this.unresolvedSubscribe = new Map();
41
52
  this.unresolvedUnSubscribe = new Map();
42
53
  }
43
54
 
55
+ get connectionState(): TConnectionState {
56
+ return this.#connectionState;
57
+ }
58
+
59
+ set connectionState(state: TConnectionState) {
60
+ this.#connectionState = state;
61
+ switch (state) {
62
+ case "connected":
63
+ queueMicrotask(this.#client.onConnected);
64
+ break;
65
+ case "disconnected":
66
+ queueMicrotask(this.#client.onDisconnected);
67
+ break;
68
+ }
69
+ }
70
+
44
71
  async connect(packet: ConnectPacket) {
45
72
  this.connectionState = ConnectionState.connecting;
73
+ if (packet.protocolLevel === MQTTLevel.unknown) {
74
+ packet.protocolLevel = MQTTLevel.v4;
75
+ }
76
+ this.protocolLevel = packet.protocolLevel;
46
77
  await this.mqttConn?.send(packet);
47
78
  const keepAlive = packet.keepAlive || 0;
48
79
  if (keepAlive > 0) {
@@ -60,8 +91,12 @@ export class Context {
60
91
  }
61
92
  if (this.mqttConn) {
62
93
  this.connectionState = ConnectionState.disconnecting;
63
- await this.mqttConn.send({ type: PacketType.disconnect });
94
+ await this.mqttConn.send({
95
+ type: PacketType.disconnect,
96
+ protocolLevel: this.protocolLevel,
97
+ });
64
98
  this.mqttConn.close();
99
+ this.protocolLevel = MQTTLevel.unknown;
65
100
  }
66
101
  }
67
102
 
@@ -73,6 +108,7 @@ export class Context {
73
108
  ) {
74
109
  await this.mqttConn?.send(packet);
75
110
  this.pingTimer?.reset();
111
+ await nextTick(); // Yield to allow other tasks to run
76
112
  return;
77
113
  }
78
114
  logger.debug("not connected");
@@ -80,7 +116,10 @@ export class Context {
80
116
  }
81
117
 
82
118
  sendPing() {
83
- this.send({ type: PacketType.pingreq });
119
+ this.send({
120
+ type: PacketType.pingreq,
121
+ protocolLevel: this.protocolLevel,
122
+ });
84
123
  }
85
124
 
86
125
  async handleConnection(
@@ -88,20 +127,22 @@ export class Context {
88
127
  connectPacket: ConnectPacket,
89
128
  ): Promise<boolean> {
90
129
  this.mqttConn = new MqttConn({ conn });
91
- if (this.mqttConn === undefined) {
92
- return true;
93
- }
94
- logger.debug("Send connect packet");
95
- await this.connect(connectPacket);
96
130
  try {
131
+ logger.debug("Send connect packet", connectPacket);
132
+ await this.connect(connectPacket);
97
133
  logger.debug("Accepting packets");
98
134
  for await (const packet of this.mqttConn) {
99
- handlePacket(this, packet);
135
+ await handlePacket(this, packet);
100
136
  }
101
137
  logger.debug("No more packets");
102
138
  } catch (err) {
103
- logger.debug(err);
104
- if (this.mqttConn.isClosed) {
139
+ assert(
140
+ err instanceof Error,
141
+ `Caught something that is not an instance of Error: ${err}`,
142
+ );
143
+ queueMicrotask(() => this.#client.onError(err));
144
+ logger.debug(`error ${err}`);
145
+ if (!this.mqttConn.isClosed) {
105
146
  this.mqttConn.close();
106
147
  }
107
148
  }
@@ -121,11 +162,11 @@ export class Context {
121
162
  this.incoming.push(packet);
122
163
  }
123
164
 
124
- publish(packet: PublishPacket): Promise<void> {
165
+ async publish(packet: PublishPacket): Promise<void> {
125
166
  const qos = packet.qos || 0;
126
167
  if (qos === 0) {
127
168
  packet.id = 0;
128
- this.send(packet);
169
+ await this.send(packet);
129
170
  // return empty promise
130
171
  return Promise.resolve();
131
172
  }
@@ -133,25 +174,25 @@ export class Context {
133
174
  this.store.pendingOutgoing.set(packet.id, packet);
134
175
  const deferred = new Deferred<void>();
135
176
  this.unresolvedPublish.set(packet.id, deferred);
136
- this.send(packet);
177
+ await this.send(packet);
137
178
  return deferred.promise;
138
179
  }
139
180
 
140
- subscribe(packet: SubscribePacket): Promise<ReturnCodes> {
181
+ async subscribe(packet: SubscribePacket): Promise<ReturnCodes> {
141
182
  packet.id = this.store.nextId();
142
183
  this.store.pendingOutgoing.set(packet.id, packet);
143
184
  const deferred = new Deferred<ReturnCodes>();
144
185
  this.unresolvedSubscribe.set(packet.id, deferred);
145
- this.send(packet);
186
+ await this.send(packet);
146
187
  return deferred.promise;
147
188
  }
148
189
 
149
- unsubscribe(packet: UnsubscribePacket): Promise<void> {
190
+ async unsubscribe(packet: UnsubscribePacket): Promise<void> {
150
191
  packet.id = this.store.nextId();
151
192
  this.store.pendingOutgoing.set(packet.id, packet);
152
193
  const deferred = new Deferred<void>();
153
194
  this.unresolvedUnSubscribe.set(packet.id, deferred);
154
- this.send(packet);
195
+ await this.send(packet);
155
196
  return deferred.promise;
156
197
  }
157
198
 
package/client/deps.ts CHANGED
@@ -6,6 +6,7 @@ export type {
6
6
  Dup,
7
7
  PacketId,
8
8
  Payload,
9
+ ProtocolLevel,
9
10
  PubackPacket,
10
11
  PubcompPacket,
11
12
  PublishPacket,
@@ -16,6 +17,7 @@ export type {
16
17
  SubscribePacket,
17
18
  TAuthenticationResult,
18
19
  Topic,
20
+ TReasonCode,
19
21
  UnsubackPacket,
20
22
  UnsubscribePacket,
21
23
  } from "../mqttPacket/mod.ts";
@@ -25,8 +27,10 @@ export {
25
27
  AuthenticationResultByNumber,
26
28
  decodePayload,
27
29
  encode,
30
+ MQTTLevel,
28
31
  PacketNameByType,
29
32
  PacketType,
33
+ ReasonCodeByNumber,
30
34
  } from "../mqttPacket/mod.ts";
31
35
 
32
36
  export { MqttConn } from "../mqttConn/mqttConn.ts";
@@ -34,3 +38,4 @@ export type { SockConn } from "../socket/socket.ts";
34
38
  export { Timer } from "../timer/timer.ts";
35
39
  export { AsyncQueue, Deferred, logger } from "../utils/mod.ts";
36
40
  export { MemoryStore } from "./store/memoryStore.ts";
41
+ export { nextTick } from "../utils/mod.ts";
@@ -1,6 +1,7 @@
1
1
  import type { Context } from "../context.ts";
2
2
  import { ConnectionState } from "../ConnectionState.ts";
3
- import { AuthenticationResultByNumber, type ConnackPacket } from "../deps.ts";
3
+ import { AuthenticationResultByNumber, ReasonCodeByNumber } from "../deps.ts";
4
+ import type { ConnackPacket, TReasonCode } from "../deps.ts";
4
5
 
5
6
  /**
6
7
  * Handles the CONNACK packet received from the MQTT broker
@@ -9,18 +10,29 @@ import { AuthenticationResultByNumber, type ConnackPacket } from "../deps.ts";
9
10
  * @returns Promise that resolves when handling is complete
10
11
  */
11
12
  export async function handleConnack(packet: ConnackPacket, ctx: Context) {
12
- if (packet.returnCode === 0) {
13
+ const result = packet.protocolLevel === 5
14
+ ? packet.reasonCode
15
+ : packet.returnCode;
16
+ if (result === 0) {
13
17
  ctx.connectionState = ConnectionState.connected;
18
+ if (ctx.mqttConn) {
19
+ ctx.mqttConn.codecOpts.protocolLevel = ctx.protocolLevel;
20
+ }
14
21
  ctx.pingTimer?.reset();
15
- ctx.unresolvedConnect?.resolve(packet.returnCode);
22
+ ctx.unresolvedConnect?.resolve(result);
16
23
  // start transmitting packets that were queued before
17
24
  for await (const packet of ctx.store.pendingOutgoingPackets()) {
18
- ctx.send(packet);
25
+ await ctx.send(packet);
19
26
  }
20
27
  return;
21
28
  }
29
+
30
+ const errMsg = packet.protocolLevel === 5
31
+ ? ReasonCodeByNumber[result as TReasonCode]
32
+ : AuthenticationResultByNumber[result];
33
+
22
34
  const err = new Error(
23
- `Connect failed: ${AuthenticationResultByNumber[packet.returnCode]}`,
35
+ `Connect failed: ${errMsg}`,
24
36
  );
25
37
  ctx.connectionState = ConnectionState.disconnecting;
26
38
  ctx.pingTimer?.clear();
@@ -1,5 +1,6 @@
1
1
  import type { Context } from "../context.ts";
2
- import { PacketType, type PublishPacket } from "../deps.ts";
2
+ import { PacketType } from "../deps.ts";
3
+ import type { PublishPacket } from "../deps.ts";
3
4
 
4
5
  /**
5
6
  * Handles incoming MQTT publish packets based on their QoS level
@@ -20,6 +21,7 @@ export async function handlePublish(ctx: Context, packet: PublishPacket) {
20
21
  ctx.receivePublish(packet);
21
22
  await ctx.send({
22
23
  type: PacketType.puback,
24
+ protocolLevel: ctx.protocolLevel,
23
25
  id: packet.id,
24
26
  });
25
27
  return;
@@ -29,6 +31,7 @@ export async function handlePublish(ctx: Context, packet: PublishPacket) {
29
31
  ctx.store.pendingIncoming.set(packet.id, packet);
30
32
  await ctx.send({
31
33
  type: PacketType.pubrec,
34
+ protocolLevel: ctx.protocolLevel,
32
35
  id: packet.id,
33
36
  });
34
37
  }
@@ -1,5 +1,6 @@
1
1
  import type { Context } from "../context.ts";
2
- import { PacketType, type PubrecPacket, type PubrelPacket } from "../deps.ts";
2
+ import { PacketType } from "../deps.ts";
3
+ import type { PubrecPacket, PubrelPacket } from "../deps.ts";
3
4
 
4
5
  /**
5
6
  * Handles PUBREC (Publish Received) packets for QoS 2 message flow
@@ -21,6 +22,7 @@ export async function handlePubrec(
21
22
  const id = packet.id;
22
23
  const ack: PubrelPacket = {
23
24
  type: PacketType.pubrel,
25
+ protocolLevel: ctx.protocolLevel,
24
26
  id,
25
27
  };
26
28
  if (ctx.store.pendingOutgoing.has(id)) {
@@ -1,5 +1,6 @@
1
1
  import type { Context } from "../context.ts";
2
- import { PacketType, type PubrelPacket } from "../deps.ts";
2
+ import { PacketType } from "../deps.ts";
3
+ import type { PubrelPacket } from "../deps.ts";
3
4
 
4
5
  /**
5
6
  * Handles a PUBREL packet in the MQTT QoS 2 flow
@@ -29,6 +30,7 @@ export async function handlePubrel(
29
30
  ctx.store.pendingIncoming.delete(id);
30
31
  await ctx.send({
31
32
  type: PacketType.pubcomp,
33
+ protocolLevel: ctx.protocolLevel,
32
34
  id,
33
35
  });
34
36
  }
@@ -13,5 +13,7 @@ import type { SubackPacket } from "../deps.ts";
13
13
  export function handleSuback(ctx: Context, packet: SubackPacket): void {
14
14
  const id = packet.id;
15
15
  ctx.store.pendingOutgoing.delete(id);
16
- ctx.receiveSuback(id, packet.returnCodes);
16
+ if (packet.protocolLevel !== 5) {
17
+ ctx.receiveSuback(id, packet.returnCodes);
18
+ }
17
19
  }
package/client/mod.ts CHANGED
@@ -2,7 +2,14 @@
2
2
  * This module provides an MQTT Client interface see the /bin folder for examples
3
3
  * @module
4
4
  */
5
- export { Client, DEFAULT_URL } from "./client.ts";
5
+ export {
6
+ Client,
7
+ DEFAULT_KEEPALIVE,
8
+ DEFAULT_PROTOCOLLEVEL,
9
+ DEFAULT_URL,
10
+ } from "./client.ts";
11
+ export { MQTTLevel } from "./deps.ts";
12
+ export type { ProtocolLevel } from "./deps.ts";
6
13
  export type {
7
14
  ConnectParameters,
8
15
  PublishParameters,
@@ -2,7 +2,8 @@
2
2
  * @module memoryStore
3
3
  */
4
4
 
5
- import { assert, type PacketId } from "./deps.ts";
5
+ import { assert } from "./deps.ts";
6
+ import type { PacketId } from "./deps.ts";
6
7
 
7
8
  import {
8
9
  type IStore,
package/deno/tcpClient.ts CHANGED
@@ -70,6 +70,6 @@ export class TcpClient extends Client {
70
70
  if (protocol === "mqtt:") {
71
71
  return this.connectMQTT(hostname, port);
72
72
  }
73
- throw `Unsupported protocol: ${protocol}`;
73
+ throw new Error(`Unsupported protocol: ${protocol}`);
74
74
  }
75
75
  }
@@ -43,6 +43,21 @@ class Uint8QueuedWriter implements WritableStreamDefaultWriter {
43
43
  }
44
44
  }
45
45
 
46
+ function readableByteStreamFromArray(readerBuffs: Array<Uint8Array>) {
47
+ let i = 0;
48
+ return new ReadableStream({
49
+ type: "bytes",
50
+ pull(controller) {
51
+ if (i === readerBuffs.length) {
52
+ controller.close();
53
+ controller.byobRequest?.respond(0);
54
+ return;
55
+ }
56
+ controller.enqueue(readerBuffs[i++]);
57
+ },
58
+ });
59
+ }
60
+
46
61
  function ReadableStreamFrom(
47
62
  iterable: AsyncIterable<Uint8Array>,
48
63
  ): ReadableStream {
@@ -58,6 +73,7 @@ function ReadableStreamFrom(
58
73
 
59
74
  if (next.done) {
60
75
  controller.close();
76
+ controller.byobRequest?.respond(0);
61
77
  return;
62
78
  }
63
79
  controller.enqueue(next.value);
@@ -70,8 +86,7 @@ export function makeDummySockConn(
70
86
  writerBuf: Uint8Array,
71
87
  close = () => {},
72
88
  ) {
73
- const readBlob = new Blob(readerBuffs);
74
- const readable = readBlob.stream();
89
+ const readable = readableByteStreamFromArray(readerBuffs);
75
90
  const writable = new WritableStream(new Uint8Writer(writerBuf));
76
91
  return {
77
92
  readable,
@@ -4,9 +4,10 @@
4
4
  * MQTT Server implementation with authentication and authorization
5
5
  * @module mqttServer
6
6
  */
7
+ import { parseArgs } from "node:util";
7
8
  import { TcpServer } from "../node/tcpServer.js";
8
9
  import { AuthenticationResult } from "../server/mod.js";
9
- import { getArgs, logger, LogLevel, parseArgs } from "../utils/mod.js";
10
+ import { logger, LogLevel } from "../utils/mod.js";
10
11
  /**
11
12
  * UTF-8 decoder for parsing passwords
12
13
  */
@@ -79,7 +80,7 @@ function isAuthorizedToSubscribe(ctx, topic) {
79
80
  /**
80
81
  * Parse command line arguments and start server
81
82
  */
82
- const { _: [portNum] } = parseArgs(getArgs());
83
+ const { positionals: [portNum] } = parseArgs({ allowPositionals: true });
83
84
  const port = Number(portNum ?? 1883);
84
85
  const hostname = "::";
85
86
  logger.level(LogLevel.info);
@@ -1 +1 @@
1
- {"version":3,"file":"conformanceServer.js","sourceRoot":"","sources":["../../bin/conformanceServer.ts"],"names":[],"mappings":";AACA,iFAAiF;AAEjF;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,IAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,QAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CACT,uCAAuC,QAAQ,oBAAoB,QAAQ,mBAAmB,GAAG,GAAG,CACrG,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,yBAAyB;QACzB,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,wDAAwD;IACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,CAAC;IACD,qDAAqD;IACrD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,oBAAoB,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,oBAAoB,CAAC,aAAa,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,KAAY;IACvD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,0BAA0B,KAAK,GAAG,CAC3F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,GAAY,EAAE,KAAY;IACzD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,4BAA4B,KAAK,GAAG,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClD,QAAQ,EAAE;QACR,eAAe;QACf,qBAAqB;QACrB,uBAAuB;KACxB;CACF,CAAC,CAAC;AACH,SAAS,CAAC,KAAK,EAAE,CAAC;AAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"conformanceServer.js","sourceRoot":"","sources":["../../bin/conformanceServer.ts"],"names":[],"mappings":";AACA,iFAAiF;AAEjF;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,aAAa,GAAG,IAAI,CAAC;AAE3B;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,IAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,QAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CACT,uCAAuC,QAAQ,oBAAoB,QAAQ,mBAAmB,GAAG,GAAG,CACrG,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,yBAAyB;QACzB,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,wDAAwD;IACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,CAAC;IACD,qDAAqD;IACrD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,oBAAoB,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,oBAAoB,CAAC,aAAa,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,KAAY;IACvD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,0BAA0B,KAAK,GAAG,CAC3F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,GAAY,EAAE,KAAY;IACzD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,4BAA4B,KAAK,GAAG,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClD,QAAQ,EAAE;QACR,eAAe;QACf,qBAAqB;QACrB,uBAAuB;KACxB;CACF,CAAC,CAAC;AACH,SAAS,CAAC,KAAK,EAAE,CAAC;AAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC"}
@@ -3,9 +3,10 @@
3
3
  * MQTT Server implementation with authentication and authorization
4
4
  * @module mqttServer
5
5
  */
6
+ import { parseArgs } from "node:util";
6
7
  import { TcpServer } from "../node/tcpServer.js";
7
8
  import { AuthenticationResult } from "../server/mod.js";
8
- import { getArgs, logger, LogLevel, parseArgs } from "../utils/mod.js";
9
+ import { logger, LogLevel } from "../utils/mod.js";
9
10
  /**
10
11
  * UTF-8 decoder for parsing passwords
11
12
  */
@@ -78,7 +79,7 @@ function isAuthorizedToSubscribe(ctx, topic) {
78
79
  /**
79
80
  * Parse command line arguments and start server
80
81
  */
81
- const { _: [portNum] } = parseArgs(getArgs());
82
+ const { positionals: [portNum] } = parseArgs({ allowPositionals: true });
82
83
  const port = Number(portNum ?? 1883);
83
84
  const hostname = "::";
84
85
  logger.level(LogLevel.info);
@@ -1 +1 @@
1
- {"version":3,"file":"demoServer.js","sourceRoot":"","sources":["../../bin/demoServer.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,IAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,QAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CACT,uCAAuC,QAAQ,oBAAoB,QAAQ,mBAAmB,GAAG,GAAG,CACrG,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,yBAAyB;QACzB,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,wDAAwD;IACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,CAAC;IACD,qDAAqD;IACrD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,oBAAoB,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,oBAAoB,CAAC,aAAa,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,KAAY;IACvD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,0BAA0B,KAAK,GAAG,CAC3F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,GAAY,EAAE,KAAY;IACzD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,4BAA4B,KAAK,GAAG,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClD,QAAQ,EAAE;QACR,eAAe;QACf,qBAAqB;QACrB,uBAAuB;KACxB;CACF,CAAC,CAAC;AACH,SAAS,CAAC,KAAK,EAAE,CAAC;AAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"demoServer.js","sourceRoot":"","sources":["../../bin/demoServer.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/C,SAAS,CAAC,GAAG,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAE/C;;;GAGG;AACH,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,IAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,QAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,IAAI,CACT,uCAAuC,QAAQ,oBAAoB,QAAQ,mBAAmB,GAAG,GAAG,CACrG,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,yBAAyB;QACzB,OAAO,oBAAoB,CAAC,EAAE,CAAC;IACjC,CAAC;IACD,wDAAwD;IACxD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC,qBAAqB,CAAC;IACpD,CAAC;IACD,qDAAqD;IACrD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,oBAAoB,CAAC,EAAE,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,oBAAoB,CAAC,aAAa,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,KAAY;IACvD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,0BAA0B,KAAK,GAAG,CAC3F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,GAAY,EAAE,KAAY;IACzD,MAAM,CAAC,KAAK,CACV,qCAAqC,GAAG,CAAC,KAAK,EAAE,QAAQ,4BAA4B,KAAK,GAAG,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;AACzE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;AACrC,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAClD,QAAQ,EAAE;QACR,eAAe;QACf,qBAAqB;QACrB,uBAAuB;KACxB;CACF,CAAC,CAAC;AACH,SAAS,CAAC,KAAK,EAAE,CAAC;AAClB,MAAM,CAAC,IAAI,CAAC,0BAA0B,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC"}
@@ -1,3 +1,32 @@
1
1
  #!/usr/bin/env -S node --experimental-strip-types
2
+ /**
3
+ * @fileoverview MQTT command line interface that provides publish and subscribe functionality
4
+ * @module mqtt-cli
5
+ *
6
+ * @description
7
+ * This module implements a command line interface for MQTT operations:
8
+ * - Publish messages to an MQTT broker
9
+ * - Subscribe to topics on an MQTT broker
10
+ *
11
+ * Features:
12
+ * - TLS support with custom certificates
13
+ * - Authentication with username/password
14
+ * - Configurable QoS levels (0-2)
15
+ * - Message retention
16
+ * - Session persistence
17
+ * - Custom client IDs
18
+ *
19
+ * @example
20
+ * # Publish a message
21
+ * mqtt publish -t topic -m message
22
+ *
23
+ * # Subscribe to a topic
24
+ * mqtt subscribe -t topic
25
+ *
26
+ * @requires node:util
27
+ * @requires ../client/mod.ts
28
+ * @requires ../node/tcpClient.ts
29
+ * @requires ../utils/mod.ts
30
+ */
2
31
  export {};
3
32
  //# sourceMappingURL=mqtt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mqtt.d.ts","sourceRoot":"","sources":["../../bin/mqtt.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"mqtt.d.ts","sourceRoot":"","sources":["../../bin/mqtt.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}