@seriousme/opifex 1.9.3 → 1.10.1

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 (304) 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 +126 -117
  5. package/client/client.ts +35 -15
  6. package/client/context.ts +42 -22
  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/dev_utils/dummyConn.ts +17 -2
  16. package/dist/bin/conformanceServer.js +3 -2
  17. package/dist/bin/conformanceServer.js.map +1 -1
  18. package/dist/bin/demoServer.js +3 -2
  19. package/dist/bin/demoServer.js.map +1 -1
  20. package/dist/bin/mqtt.d.ts +29 -0
  21. package/dist/bin/mqtt.d.ts.map +1 -1
  22. package/dist/bin/mqtt.js +101 -96
  23. package/dist/bin/mqtt.js.map +1 -1
  24. package/dist/client/client.d.ts +7 -4
  25. package/dist/client/client.d.ts.map +1 -1
  26. package/dist/client/client.js +17 -9
  27. package/dist/client/client.js.map +1 -1
  28. package/dist/client/context.d.ts +3 -1
  29. package/dist/client/context.d.ts.map +1 -1
  30. package/dist/client/context.js +27 -13
  31. package/dist/client/context.js.map +1 -1
  32. package/dist/client/deps.d.ts +3 -2
  33. package/dist/client/deps.d.ts.map +1 -1
  34. package/dist/client/deps.js +2 -1
  35. package/dist/client/deps.js.map +1 -1
  36. package/dist/client/handlers/handleConnack.d.ts +1 -1
  37. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  38. package/dist/client/handlers/handleConnack.js +14 -5
  39. package/dist/client/handlers/handleConnack.js.map +1 -1
  40. package/dist/client/handlers/handlePublish.d.ts +1 -1
  41. package/dist/client/handlers/handlePublish.d.ts.map +1 -1
  42. package/dist/client/handlers/handlePublish.js +2 -0
  43. package/dist/client/handlers/handlePublish.js.map +1 -1
  44. package/dist/client/handlers/handlePubrec.d.ts +1 -1
  45. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  46. package/dist/client/handlers/handlePubrec.js +1 -0
  47. package/dist/client/handlers/handlePubrec.js.map +1 -1
  48. package/dist/client/handlers/handlePubrel.d.ts +1 -1
  49. package/dist/client/handlers/handlePubrel.d.ts.map +1 -1
  50. package/dist/client/handlers/handlePubrel.js +1 -0
  51. package/dist/client/handlers/handlePubrel.js.map +1 -1
  52. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  53. package/dist/client/handlers/handleSuback.js +3 -1
  54. package/dist/client/handlers/handleSuback.js.map +1 -1
  55. package/dist/client/mod.d.ts +3 -1
  56. package/dist/client/mod.d.ts.map +1 -1
  57. package/dist/client/mod.js +2 -1
  58. package/dist/client/mod.js.map +1 -1
  59. package/dist/client/store/memoryStore.d.ts +1 -1
  60. package/dist/client/store/memoryStore.d.ts.map +1 -1
  61. package/dist/client/store/memoryStore.js.map +1 -1
  62. package/dist/mqttConn/mqttConn.d.ts +13 -8
  63. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  64. package/dist/mqttConn/mqttConn.js +27 -12
  65. package/dist/mqttConn/mqttConn.js.map +1 -1
  66. package/dist/mqttPacket/PacketType.d.ts +1 -0
  67. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  68. package/dist/mqttPacket/PacketType.js +1 -0
  69. package/dist/mqttPacket/PacketType.js.map +1 -1
  70. package/dist/mqttPacket/Properties.d.ts +157 -0
  71. package/dist/mqttPacket/Properties.d.ts.map +1 -0
  72. package/dist/mqttPacket/Properties.js +177 -0
  73. package/dist/mqttPacket/Properties.js.map +1 -0
  74. package/dist/mqttPacket/ReasonCode.d.ts +74 -0
  75. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -0
  76. package/dist/mqttPacket/ReasonCode.js +230 -0
  77. package/dist/mqttPacket/ReasonCode.js.map +1 -0
  78. package/dist/mqttPacket/RetainHandling.d.ts +12 -0
  79. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -0
  80. package/dist/mqttPacket/RetainHandling.js +12 -0
  81. package/dist/mqttPacket/RetainHandling.js.map +1 -0
  82. package/dist/mqttPacket/auth.d.ts +21 -0
  83. package/dist/mqttPacket/auth.d.ts.map +1 -0
  84. package/dist/mqttPacket/auth.js +34 -0
  85. package/dist/mqttPacket/auth.js.map +1 -0
  86. package/dist/mqttPacket/connack.d.ts +15 -7
  87. package/dist/mqttPacket/connack.d.ts.map +1 -1
  88. package/dist/mqttPacket/connack.js +43 -15
  89. package/dist/mqttPacket/connack.js.map +1 -1
  90. package/dist/mqttPacket/connect.d.ts +27 -8
  91. package/dist/mqttPacket/connect.d.ts.map +1 -1
  92. package/dist/mqttPacket/connect.js +106 -30
  93. package/dist/mqttPacket/connect.js.map +1 -1
  94. package/dist/mqttPacket/decoder.d.ts +42 -3
  95. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  96. package/dist/mqttPacket/decoder.js +135 -4
  97. package/dist/mqttPacket/decoder.js.map +1 -1
  98. package/dist/mqttPacket/disconnect.d.ts +13 -7
  99. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  100. package/dist/mqttPacket/disconnect.js +45 -6
  101. package/dist/mqttPacket/disconnect.js.map +1 -1
  102. package/dist/mqttPacket/encoder.d.ts +57 -8
  103. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  104. package/dist/mqttPacket/encoder.js +185 -13
  105. package/dist/mqttPacket/encoder.js.map +1 -1
  106. package/dist/mqttPacket/length.d.ts.map +1 -1
  107. package/dist/mqttPacket/length.js +3 -2
  108. package/dist/mqttPacket/length.js.map +1 -1
  109. package/dist/mqttPacket/mod.d.ts +56 -91
  110. package/dist/mqttPacket/mod.d.ts.map +1 -1
  111. package/dist/mqttPacket/mod.js +22 -22
  112. package/dist/mqttPacket/mod.js.map +1 -1
  113. package/dist/mqttPacket/pingreq.d.ts +4 -6
  114. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  115. package/dist/mqttPacket/pingreq.js +5 -4
  116. package/dist/mqttPacket/pingreq.js.map +1 -1
  117. package/dist/mqttPacket/pingres.d.ts +4 -6
  118. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  119. package/dist/mqttPacket/pingres.js +7 -5
  120. package/dist/mqttPacket/pingres.js.map +1 -1
  121. package/dist/mqttPacket/protocolLevels.d.ts +11 -0
  122. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -0
  123. package/dist/mqttPacket/protocolLevels.js +11 -0
  124. package/dist/mqttPacket/protocolLevels.js.map +1 -0
  125. package/dist/mqttPacket/pubblishAcks.d.ts +35 -0
  126. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -0
  127. package/dist/mqttPacket/pubblishAcks.js +56 -0
  128. package/dist/mqttPacket/pubblishAcks.js.map +1 -0
  129. package/dist/mqttPacket/publish.d.ts +19 -8
  130. package/dist/mqttPacket/publish.d.ts.map +1 -1
  131. package/dist/mqttPacket/publish.js +26 -7
  132. package/dist/mqttPacket/publish.js.map +1 -1
  133. package/dist/mqttPacket/suback.d.ts +14 -7
  134. package/dist/mqttPacket/suback.d.ts.map +1 -1
  135. package/dist/mqttPacket/suback.js +41 -20
  136. package/dist/mqttPacket/suback.js.map +1 -1
  137. package/dist/mqttPacket/subscribe.d.ts +24 -9
  138. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  139. package/dist/mqttPacket/subscribe.js +71 -15
  140. package/dist/mqttPacket/subscribe.js.map +1 -1
  141. package/dist/mqttPacket/types.d.ts +33 -0
  142. package/dist/mqttPacket/types.d.ts.map +1 -1
  143. package/dist/mqttPacket/unsuback.d.ts +14 -7
  144. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  145. package/dist/mqttPacket/unsuback.js +29 -6
  146. package/dist/mqttPacket/unsuback.js.map +1 -1
  147. package/dist/mqttPacket/unsubscribe.d.ts +14 -7
  148. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  149. package/dist/mqttPacket/unsubscribe.js +24 -8
  150. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  151. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  152. package/dist/node/wrapNodeSocket.js.map +1 -1
  153. package/dist/persistence/deps.d.ts +1 -1
  154. package/dist/persistence/deps.d.ts.map +1 -1
  155. package/dist/persistence/deps.js +1 -1
  156. package/dist/persistence/deps.js.map +1 -1
  157. package/dist/server/context.d.ts +3 -1
  158. package/dist/server/context.d.ts.map +1 -1
  159. package/dist/server/context.js +8 -2
  160. package/dist/server/context.js.map +1 -1
  161. package/dist/server/deps.d.ts +2 -2
  162. package/dist/server/deps.d.ts.map +1 -1
  163. package/dist/server/deps.js +1 -1
  164. package/dist/server/deps.js.map +1 -1
  165. package/dist/server/handlers/handleConnect.d.ts +1 -1
  166. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  167. package/dist/server/handlers/handleConnect.js +9 -1
  168. package/dist/server/handlers/handleConnect.js.map +1 -1
  169. package/dist/server/handlers/handlePacket.d.ts +1 -1
  170. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  171. package/dist/server/handlers/handlePacket.js +1 -1
  172. package/dist/server/handlers/handlePacket.js.map +1 -1
  173. package/dist/server/handlers/handlePingreq.d.ts.map +1 -1
  174. package/dist/server/handlers/handlePingreq.js +1 -0
  175. package/dist/server/handlers/handlePingreq.js.map +1 -1
  176. package/dist/server/handlers/handlePublish.d.ts +2 -2
  177. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  178. package/dist/server/handlers/handlePublish.js +2 -0
  179. package/dist/server/handlers/handlePublish.js.map +1 -1
  180. package/dist/server/handlers/handlePubrec.d.ts +1 -1
  181. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  182. package/dist/server/handlers/handlePubrec.js +1 -0
  183. package/dist/server/handlers/handlePubrec.js.map +1 -1
  184. package/dist/server/handlers/handlePubrel.d.ts +1 -1
  185. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  186. package/dist/server/handlers/handlePubrel.js +1 -0
  187. package/dist/server/handlers/handlePubrel.js.map +1 -1
  188. package/dist/server/handlers/handleSubscribe.d.ts +1 -1
  189. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  190. package/dist/server/handlers/handleSubscribe.js +2 -1
  191. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  192. package/dist/server/handlers/handleUnsubscribe.d.ts +1 -1
  193. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  194. package/dist/server/handlers/handleUnsubscribe.js +1 -0
  195. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  196. package/dist/server/server.d.ts +2 -2
  197. package/dist/server/server.d.ts.map +1 -1
  198. package/dist/server/server.js +5 -3
  199. package/dist/server/server.js.map +1 -1
  200. package/dist/socket/socket.d.ts.map +1 -1
  201. package/dist/socket/socket.js +6 -1
  202. package/dist/socket/socket.js.map +1 -1
  203. package/dist/utils/assert.d.ts +0 -3
  204. package/dist/utils/assert.d.ts.map +1 -1
  205. package/dist/utils/assert.js +0 -7
  206. package/dist/utils/assert.js.map +1 -1
  207. package/dist/utils/mod.d.ts +0 -3
  208. package/dist/utils/mod.d.ts.map +1 -1
  209. package/dist/utils/mod.js +0 -2
  210. package/dist/utils/mod.js.map +1 -1
  211. package/mqttConn/mqttConn.test.ts +27 -12
  212. package/mqttConn/mqttConn.ts +45 -14
  213. package/mqttPacket/PacketType.ts +1 -0
  214. package/mqttPacket/Properties.ts +276 -0
  215. package/mqttPacket/ReasonCode.test.ts +22 -0
  216. package/mqttPacket/ReasonCode.ts +256 -0
  217. package/mqttPacket/RetainHandling.ts +11 -0
  218. package/mqttPacket/auth.test.ts +112 -0
  219. package/mqttPacket/auth.ts +72 -0
  220. package/mqttPacket/connack.test.ts +84 -64
  221. package/mqttPacket/connack.ts +84 -20
  222. package/mqttPacket/connect.test.ts +497 -18
  223. package/mqttPacket/connect.ts +167 -36
  224. package/mqttPacket/decoder.test.ts +33 -16
  225. package/mqttPacket/decoder.ts +173 -5
  226. package/mqttPacket/disconnect.test.ts +97 -18
  227. package/mqttPacket/disconnect.ts +82 -10
  228. package/mqttPacket/encoder.test.ts +32 -8
  229. package/mqttPacket/encoder.ts +236 -11
  230. package/mqttPacket/length.ts +3 -2
  231. package/mqttPacket/mod.ts +75 -32
  232. package/mqttPacket/pingreq.test.ts +52 -4
  233. package/mqttPacket/pingreq.ts +20 -7
  234. package/mqttPacket/pingres.test.ts +52 -4
  235. package/mqttPacket/pingres.ts +22 -8
  236. package/mqttPacket/properties.test.ts +193 -0
  237. package/mqttPacket/protocolLevels.ts +13 -0
  238. package/mqttPacket/pubblishAcks.ts +117 -0
  239. package/mqttPacket/publish.test.ts +212 -133
  240. package/mqttPacket/publish.ts +69 -14
  241. package/mqttPacket/publishAcks.test.ts +128 -0
  242. package/mqttPacket/suback.test.ts +71 -27
  243. package/mqttPacket/suback.ts +78 -26
  244. package/mqttPacket/subscribe.test.ts +132 -43
  245. package/mqttPacket/subscribe.ts +125 -22
  246. package/mqttPacket/types.ts +40 -0
  247. package/mqttPacket/unsuback.test.ts +80 -30
  248. package/mqttPacket/unsuback.ts +65 -10
  249. package/mqttPacket/unsubscribe.test.ts +59 -34
  250. package/mqttPacket/unsubscribe.ts +61 -14
  251. package/node/wrapNodeSocket.ts +2 -1
  252. package/package.json +2 -2
  253. package/persistence/deps.ts +1 -1
  254. package/persistence/memory/memoryPersistence.test.ts +5 -1
  255. package/server/context.ts +23 -10
  256. package/server/deps.ts +2 -0
  257. package/server/handlers/handleConnect.ts +12 -9
  258. package/server/handlers/handlePacket.ts +10 -11
  259. package/server/handlers/handlePingreq.ts +1 -0
  260. package/server/handlers/handlePublish.ts +6 -2
  261. package/server/handlers/handlePubrec.ts +3 -1
  262. package/server/handlers/handlePubrel.ts +3 -1
  263. package/server/handlers/handleSubscribe.ts +3 -6
  264. package/server/handlers/handleUnsubscribe.ts +3 -1
  265. package/server/server.ts +8 -12
  266. package/server/test/handleConnect.test.ts +2 -1
  267. package/server/test/test-handlers.ts +2 -1
  268. package/socket/socket.ts +5 -1
  269. package/utils/assert.ts +0 -18
  270. package/utils/mod.ts +0 -3
  271. package/dist/mqttPacket/puback.d.ts +0 -16
  272. package/dist/mqttPacket/puback.d.ts.map +0 -1
  273. package/dist/mqttPacket/puback.js +0 -21
  274. package/dist/mqttPacket/puback.js.map +0 -1
  275. package/dist/mqttPacket/pubcomp.d.ts +0 -17
  276. package/dist/mqttPacket/pubcomp.d.ts.map +0 -1
  277. package/dist/mqttPacket/pubcomp.js +0 -21
  278. package/dist/mqttPacket/pubcomp.js.map +0 -1
  279. package/dist/mqttPacket/pubrec.d.ts +0 -17
  280. package/dist/mqttPacket/pubrec.d.ts.map +0 -1
  281. package/dist/mqttPacket/pubrec.js +0 -21
  282. package/dist/mqttPacket/pubrec.js.map +0 -1
  283. package/dist/mqttPacket/pubrel.d.ts +0 -17
  284. package/dist/mqttPacket/pubrel.d.ts.map +0 -1
  285. package/dist/mqttPacket/pubrel.js +0 -21
  286. package/dist/mqttPacket/pubrel.js.map +0 -1
  287. package/dist/utils/args.d.ts +0 -28
  288. package/dist/utils/args.d.ts.map +0 -1
  289. package/dist/utils/args.js +0 -76
  290. package/dist/utils/args.js.map +0 -1
  291. package/dist/utils/platform.d.ts +0 -5
  292. package/dist/utils/platform.d.ts.map +0 -1
  293. package/dist/utils/platform.js +0 -8
  294. package/dist/utils/platform.js.map +0 -1
  295. package/mqttPacket/puback.test.ts +0 -55
  296. package/mqttPacket/puback.ts +0 -34
  297. package/mqttPacket/pubcomp.test.ts +0 -55
  298. package/mqttPacket/pubcomp.ts +0 -35
  299. package/mqttPacket/pubrec.test.ts +0 -55
  300. package/mqttPacket/pubrec.ts +0 -35
  301. package/mqttPacket/pubrel.test.ts +0 -55
  302. package/mqttPacket/pubrel.ts +0 -35
  303. package/utils/args.ts +0 -103
  304. package/utils/platform.ts +0 -8
package/client/context.ts CHANGED
@@ -1,20 +1,25 @@
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";
@@ -24,6 +29,7 @@ import { ConnectionState } from "./ConnectionState.ts";
24
29
  export class Context {
25
30
  mqttConn?: MqttConn;
26
31
  connectionState: TConnectionState;
32
+ protocolLevel: ProtocolLevel;
27
33
  pingTimer?: Timer;
28
34
  unresolvedConnect?: Deferred<TAuthenticationResult>;
29
35
  unresolvedPublish: Map<PacketId, Deferred<void>>;
@@ -35,6 +41,7 @@ export class Context {
35
41
  constructor(store: MemoryStore) {
36
42
  this.store = store;
37
43
  this.connectionState = ConnectionState.offline;
44
+ this.protocolLevel = MQTTLevel.unknown;
38
45
  this.incoming = new AsyncQueue();
39
46
  this.unresolvedPublish = new Map();
40
47
  this.unresolvedSubscribe = new Map();
@@ -43,6 +50,10 @@ export class Context {
43
50
 
44
51
  async connect(packet: ConnectPacket) {
45
52
  this.connectionState = ConnectionState.connecting;
53
+ if (packet.protocolLevel === MQTTLevel.unknown) {
54
+ packet.protocolLevel = MQTTLevel.v4;
55
+ }
56
+ this.protocolLevel = packet.protocolLevel;
46
57
  await this.mqttConn?.send(packet);
47
58
  const keepAlive = packet.keepAlive || 0;
48
59
  if (keepAlive > 0) {
@@ -60,8 +71,12 @@ export class Context {
60
71
  }
61
72
  if (this.mqttConn) {
62
73
  this.connectionState = ConnectionState.disconnecting;
63
- await this.mqttConn.send({ type: PacketType.disconnect });
74
+ await this.mqttConn.send({
75
+ type: PacketType.disconnect,
76
+ protocolLevel: this.protocolLevel,
77
+ });
64
78
  this.mqttConn.close();
79
+ this.protocolLevel = MQTTLevel.unknown;
65
80
  }
66
81
  }
67
82
 
@@ -73,6 +88,7 @@ export class Context {
73
88
  ) {
74
89
  await this.mqttConn?.send(packet);
75
90
  this.pingTimer?.reset();
91
+ await nextTick(); // Yield to allow other tasks to run
76
92
  return;
77
93
  }
78
94
  logger.debug("not connected");
@@ -80,7 +96,10 @@ export class Context {
80
96
  }
81
97
 
82
98
  sendPing() {
83
- this.send({ type: PacketType.pingreq });
99
+ this.send({
100
+ type: PacketType.pingreq,
101
+ protocolLevel: this.protocolLevel,
102
+ });
84
103
  }
85
104
 
86
105
  async handleConnection(
@@ -91,16 +110,17 @@ export class Context {
91
110
  if (this.mqttConn === undefined) {
92
111
  return true;
93
112
  }
94
- logger.debug("Send connect packet");
95
- await this.connect(connectPacket);
113
+
96
114
  try {
115
+ logger.debug("Send connect packet", connectPacket);
116
+ await this.connect(connectPacket);
97
117
  logger.debug("Accepting packets");
98
118
  for await (const packet of this.mqttConn) {
99
119
  handlePacket(this, packet);
100
120
  }
101
121
  logger.debug("No more packets");
102
122
  } catch (err) {
103
- logger.debug(err);
123
+ logger.debug(`error ${err}`);
104
124
  if (this.mqttConn.isClosed) {
105
125
  this.mqttConn.close();
106
126
  }
@@ -121,11 +141,11 @@ export class Context {
121
141
  this.incoming.push(packet);
122
142
  }
123
143
 
124
- publish(packet: PublishPacket): Promise<void> {
144
+ async publish(packet: PublishPacket): Promise<void> {
125
145
  const qos = packet.qos || 0;
126
146
  if (qos === 0) {
127
147
  packet.id = 0;
128
- this.send(packet);
148
+ await this.send(packet);
129
149
  // return empty promise
130
150
  return Promise.resolve();
131
151
  }
@@ -133,25 +153,25 @@ export class Context {
133
153
  this.store.pendingOutgoing.set(packet.id, packet);
134
154
  const deferred = new Deferred<void>();
135
155
  this.unresolvedPublish.set(packet.id, deferred);
136
- this.send(packet);
156
+ await this.send(packet);
137
157
  return deferred.promise;
138
158
  }
139
159
 
140
- subscribe(packet: SubscribePacket): Promise<ReturnCodes> {
160
+ async subscribe(packet: SubscribePacket): Promise<ReturnCodes> {
141
161
  packet.id = this.store.nextId();
142
162
  this.store.pendingOutgoing.set(packet.id, packet);
143
163
  const deferred = new Deferred<ReturnCodes>();
144
164
  this.unresolvedSubscribe.set(packet.id, deferred);
145
- this.send(packet);
165
+ await this.send(packet);
146
166
  return deferred.promise;
147
167
  }
148
168
 
149
- unsubscribe(packet: UnsubscribePacket): Promise<void> {
169
+ async unsubscribe(packet: UnsubscribePacket): Promise<void> {
150
170
  packet.id = this.store.nextId();
151
171
  this.store.pendingOutgoing.set(packet.id, packet);
152
172
  const deferred = new Deferred<void>();
153
173
  this.unresolvedUnSubscribe.set(packet.id, deferred);
154
- this.send(packet);
174
+ await this.send(packet);
155
175
  return deferred.promise;
156
176
  }
157
177
 
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,
@@ -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":"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"}
@@ -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"}