@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
@@ -1,30 +1,51 @@
1
1
  import { PacketType } from "./PacketType.js";
2
2
  import { Encoder } from "./encoder.js";
3
- import { Decoder } from "./decoder.js";
3
+ import { Decoder, DecoderError } from "./decoder.js";
4
+ const validReturnCodes = [0x00, 0x01, 0x02, 0x80];
4
5
  export const suback = {
5
- encode(packet) {
6
+ encode(packet, codecOpts) {
6
7
  const flags = 0;
7
- const encoder = new Encoder();
8
+ const encoder = new Encoder(packet.type);
8
9
  encoder.setInt16(packet.id);
9
- encoder.setRemainder(packet.returnCodes);
10
- return {
11
- flags,
12
- bytes: encoder.done(),
13
- };
10
+ if (packet.protocolLevel !== 5) {
11
+ for (const code of packet.returnCodes) {
12
+ if (!validReturnCodes.includes(code)) {
13
+ throw new Error("Invalid return code");
14
+ }
15
+ }
16
+ encoder.setRemainder(packet.returnCodes);
17
+ return encoder.done(flags);
18
+ }
19
+ encoder.setProperties(packet.properties || {}, packet.type, codecOpts.maxOutgoingPacketSize);
20
+ for (const code of packet.reasonCodes) {
21
+ encoder.setReasonCode(code);
22
+ }
23
+ return encoder.done(flags);
14
24
  },
15
- decode(buffer) {
16
- const decoder = new Decoder(buffer);
17
- const id = decoder.getInt16();
18
- const payload = decoder.getRemainder();
19
- const returnCodes = [];
20
- for (const code of payload) {
21
- returnCodes.push(code);
25
+ decode(buffer, _flags, codecOpts, packetType) {
26
+ const packet = {};
27
+ const decoder = new Decoder(packetType, buffer);
28
+ packet.type = PacketType.suback;
29
+ packet.id = decoder.getInt16();
30
+ packet.protocolLevel = codecOpts.protocolLevel;
31
+ if (packet.protocolLevel !== 5) {
32
+ const payload = decoder.getRemainder();
33
+ packet.returnCodes = [];
34
+ for (const code of payload) {
35
+ if (!validReturnCodes.includes(code)) {
36
+ throw new DecoderError("Invalid return code");
37
+ }
38
+ packet.returnCodes.push(code);
39
+ }
40
+ return packet;
41
+ }
42
+ packet.properties = decoder.getProperties(PacketType.suback);
43
+ packet.reasonCodes = [];
44
+ while (!decoder.atEnd()) {
45
+ const code = decoder.getReasonCode();
46
+ packet.reasonCodes.push(code);
22
47
  }
23
- return {
24
- type: PacketType.suback,
25
- id,
26
- returnCodes,
27
- };
48
+ return packet;
28
49
  },
29
50
  };
30
51
  //# sourceMappingURL=suback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"suback.js","sourceRoot":"","sources":["../../mqttPacket/suback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAYvC,MAAM,CAAC,MAAM,MAAM,GAGf;IACF,MAAM,CAAC,MAAoB;QACzB,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEzC,OAAO;YACL,KAAK;YACL,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAkB;QACvB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,WAAW,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QAED,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,EAAE;YACF,WAAW;SACZ,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"suback.js","sourceRoot":"","sources":["../../mqttPacket/suback.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAuBlD,MAAM,CAAC,MAAM,MAAM,GAQf;IACF,MAAM,CAAC,MAAoB,EAAE,SAAoB;QAC/C,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACtC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,UAAU,IAAI,EAAE,EACvB,MAAM,CAAC,IAAI,EACX,SAAS,CAAC,qBAAqB,CAChC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACtC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CACJ,MAAkB,EAClB,MAAc,EACd,SAAoB,EACpB,UAAuB;QAEvB,MAAM,MAAM,GAAG,EAAkB,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC;QAChC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,CAAC;QAE/C,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;YACxB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACrC,MAAM,IAAI,YAAY,CAAC,qBAAqB,CAAC,CAAC;gBAChD,CAAC;gBACD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC"}
@@ -1,24 +1,39 @@
1
- import type { PacketId, QoS, TopicFilter, TPacketType } from "./types.ts";
2
- /**
3
- * SubscribePacket is sent from client to server to subscribe to topics
4
- */
5
- export type SubscribePacket = {
1
+ import type { CodecOpts, PacketId, ProtocolLevelNoV5, QoS, TopicFilter, TPacketType, TRetainHandling } from "./types.ts";
2
+ import type { SubscribeProperties } from "./Properties.ts";
3
+ export type SubscribePacketV4 = {
4
+ type: TPacketType;
5
+ protocolLevel: ProtocolLevelNoV5;
6
+ id: PacketId;
7
+ subscriptions: Array<SubscriptionV4>;
8
+ };
9
+ export type SubscribePacketV5 = {
6
10
  type: TPacketType;
11
+ protocolLevel: 5;
7
12
  id: PacketId;
8
- subscriptions: Subscription[];
13
+ properties?: SubscribeProperties;
14
+ subscriptions: Array<SubscriptionV5>;
9
15
  };
16
+ /**
17
+ * SubscribePacket is sent from client to server to subscribe to topics
18
+ */
19
+ export type SubscribePacket = SubscribePacketV4 | SubscribePacketV5;
10
20
  /**
11
21
  * The topic to subscribe to and the associated QoS
12
22
  */
13
- export type Subscription = {
23
+ export type SubscriptionV4 = {
24
+ topicFilter: TopicFilter;
25
+ qos: QoS;
26
+ };
27
+ export type SubscriptionV5 = {
14
28
  topicFilter: TopicFilter;
15
29
  qos: QoS;
30
+ noLocal?: boolean;
31
+ retainAsPublished?: boolean;
32
+ retainHandling?: TRetainHandling;
16
33
  };
34
+ export type Subscription = SubscriptionV4 | SubscriptionV5;
17
35
  export declare const subscribe: {
18
- encode(packet: SubscribePacket): {
19
- flags: number;
20
- bytes: number[];
21
- };
22
- decode(buffer: Uint8Array, flags: number): SubscribePacket;
36
+ encode(packet: SubscribePacket, codecOpts: CodecOpts): Uint8Array;
37
+ decode(buffer: Uint8Array, flags: number, codecOpts: CodecOpts, packetType: TPacketType): SubscribePacket;
23
38
  };
24
39
  //# sourceMappingURL=subscribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../mqttPacket/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM1E;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,QAAQ,CAAC;IACb,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE;IACtB,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACpE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,eAAe,CAAC;CAoD5D,CAAC"}
1
+ {"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["../../mqttPacket/subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,GAAG,EACH,WAAW,EACX,WAAW,EACX,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAM3D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;IACjC,EAAE,EAAE,QAAQ,CAAC;IACb,aAAa,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,aAAa,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CACtC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AACpE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG,cAAc,CAAC;AAE3D,eAAO,MAAM,SAAS,EAAE;IACtB,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClE,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACtB,eAAe,CAAC;CAyHpB,CAAC"}
@@ -3,50 +3,106 @@ import { BitMask } from "./BitMask.js";
3
3
  import { Encoder } from "./encoder.js";
4
4
  import { booleanFlag, Decoder, DecoderError } from "./decoder.js";
5
5
  export const subscribe = {
6
- encode(packet) {
6
+ encode(packet, codecOpts) {
7
7
  // Bits 3,2,1 and 0 of the fixed header of the SUBSCRIBE Control Packet are reserved and
8
8
  // MUST be set to 0,0,1 and 0 respectively. The Server MUST treat any other value as
9
9
  // malformed and close the Network Connection [MQTT-3.8.1-1].
10
10
  const flags = 0b0010;
11
- const encoder = new Encoder();
11
+ const encoder = new Encoder(packet.type);
12
12
  encoder.setInt16(packet.id);
13
+ if (packet.protocolLevel === 5) {
14
+ encoder.setProperties(packet.properties || {}, packet.type, codecOpts.maxOutgoingPacketSize);
15
+ }
13
16
  for (const sub of packet.subscriptions) {
14
- encoder.setTopic(sub.topicFilter);
15
- encoder.setByte(sub.qos);
17
+ encoder.setTopicFilter(sub.topicFilter);
18
+ if (packet.protocolLevel === 5) {
19
+ const { qos, noLocal = false, retainAsPublished = false, retainHandling = 0, } = sub;
20
+ const option = (qos & 1 ? BitMask.bit0 : 0) +
21
+ (qos & 2 ? BitMask.bit1 : 0) +
22
+ (noLocal ? BitMask.bit2 : 0) +
23
+ (retainAsPublished ? BitMask.bit3 : 0) +
24
+ (retainHandling & 1 ? BitMask.bit4 : 0) +
25
+ (retainHandling & 2 ? BitMask.bit5 : 0);
26
+ encoder.setByte(option);
27
+ }
28
+ else {
29
+ encoder.setByte(sub.qos);
30
+ }
16
31
  }
17
- return { flags, bytes: encoder.done() };
32
+ return encoder.done(flags);
18
33
  },
19
- decode(buffer, flags) {
34
+ decode(buffer, flags, codecOpts, packetType) {
20
35
  // Bits 3,2,1 and 0 of the fixed header of the SUBSCRIBE Control Packet are reserved and
21
36
  // MUST be set to 0,0,1 and 0 respectively. The Server MUST treat any other value as
22
37
  // malformed and close the Network Connection [MQTT-3.8.1-1].
23
- if (!booleanFlag(flags, BitMask.bit1)) {
38
+ if (flags !== 0b0010) {
24
39
  throw new DecoderError("Invalid header");
25
40
  }
26
- const decoder = new Decoder(buffer);
41
+ const decoder = new Decoder(packetType, buffer);
27
42
  const id = decoder.getInt16();
43
+ let properties = {};
44
+ if (codecOpts.protocolLevel === 5) {
45
+ properties = decoder.getProperties(PacketType.subscribe);
46
+ }
28
47
  const subscriptions = [];
29
- // The payload of a SUBSCRIBE packet MUST contain at least one Topic Filter / QoS pair.
48
+ // The payload of a SUBSCRIBE packet MUST contain at least one Topic Filter / Option pair.
30
49
  // A SUBSCRIBE packet with no payload is a protocol violation [MQTT-3.8.3-3].
31
50
  do {
32
51
  const topicFilter = decoder.getTopicFilter();
33
- const qos = decoder.getByte();
52
+ const option = decoder.getByte();
53
+ const qos = option & 0b11;
34
54
  if (qos !== 0 && qos !== 1 && qos !== 2) {
35
55
  throw new DecoderError("Invalid qos");
36
56
  }
37
57
  if (qos > 0 && id === 0) {
38
58
  throw new DecoderError("Invalid packet identifier");
39
59
  }
40
- subscriptions.push({
41
- topicFilter: topicFilter,
42
- qos,
43
- });
60
+ if (codecOpts.protocolLevel !== 5) {
61
+ if (option !== qos) {
62
+ throw new DecoderError("Invalid qos");
63
+ }
64
+ subscriptions.push({
65
+ topicFilter: topicFilter,
66
+ qos,
67
+ });
68
+ }
69
+ else {
70
+ // Bits 6 and 7 of the Subscription Options byte are reserved for future use.
71
+ // The Server MUST treat a SUBSCRIBE packet as malformed if any of
72
+ // Reserved bits in the Payload are non-zero [MQTT-3.8.3-5].
73
+ if (option > 0b111111) {
74
+ throw new DecoderError("Invalid subscription options");
75
+ }
76
+ const noLocal = booleanFlag(option, BitMask.bit2);
77
+ const retainAsPublished = booleanFlag(option, BitMask.bit3);
78
+ const retainHandling = (option & 0b110000) >> 4;
79
+ if (retainHandling !== 0 && retainHandling !== 1 && retainHandling !== 2) {
80
+ throw new DecoderError("Invalid retain handling");
81
+ }
82
+ subscriptions.push({
83
+ topicFilter: topicFilter,
84
+ qos,
85
+ noLocal,
86
+ retainAsPublished,
87
+ retainHandling,
88
+ });
89
+ }
44
90
  } while (!decoder.atEnd());
45
91
  decoder.done();
92
+ if (codecOpts.protocolLevel !== 5) {
93
+ return {
94
+ type: PacketType.subscribe,
95
+ protocolLevel: codecOpts.protocolLevel,
96
+ id,
97
+ subscriptions: subscriptions,
98
+ };
99
+ }
46
100
  return {
47
101
  type: PacketType.subscribe,
102
+ protocolLevel: 5,
48
103
  id,
49
- subscriptions,
104
+ properties,
105
+ subscriptions: subscriptions,
50
106
  };
51
107
  },
52
108
  };
@@ -1 +1 @@
1
- {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../mqttPacket/subscribe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmBlE,MAAM,CAAC,MAAM,SAAS,GAGlB;IACF,MAAM,CAAC,MAAuB;QAC5B,wFAAwF;QACxF,oFAAoF;QACpF,6DAA6D;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAClC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAkB,EAAE,KAAa;QACtC,wFAAwF;QACxF,oFAAoF;QACpF,6DAA6D;QAC7D,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,aAAa,GAAmB,EAAE,CAAC;QACzC,uFAAuF;QACvF,6EAA6E;QAC7E,GAAG,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC;YACtD,CAAC;YACD,aAAa,CAAC,IAAI,CAAC;gBACjB,WAAW,EAAE,WAAW;gBACxB,GAAG;aACJ,CAAC,CAAC;QACL,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,SAAS;YAC1B,EAAE;YACF,aAAa;SACd,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"subscribe.js","sourceRoot":"","sources":["../../mqttPacket/subscribe.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import type { BitMask } from "./BitMask.ts";
2
2
  import type { PacketType } from "./PacketType.ts";
3
+ import type { RetainHandling } from "./RetainHandling.ts";
3
4
  import type { AuthenticationResult } from "./AuthenticationResult.ts";
5
+ import type { ReasonCode } from "./ReasonCode.ts";
4
6
  /**
5
7
  * Type to limit bit mask to valid values
6
8
  */
@@ -13,6 +15,18 @@ export type TPacketType = typeof PacketType[keyof typeof PacketType];
13
15
  * Type to limit authentication result to valid values
14
16
  */
15
17
  export type TAuthenticationResult = typeof AuthenticationResult[keyof typeof AuthenticationResult];
18
+ /**
19
+ * Type to limit reason code to valid values
20
+ */
21
+ export type TReasonCode = typeof ReasonCode[keyof typeof ReasonCode];
22
+ /**
23
+ * Protocol version
24
+ * 3.1 = 3
25
+ * 3.1.1 = 4
26
+ * 5.0 = 5
27
+ */
28
+ export type ProtocolLevel = 3 | 4 | 5 | undefined;
29
+ export type ProtocolLevelNoV5 = Exclude<ProtocolLevel, 5>;
16
30
  /**
17
31
  * Quality of Service level
18
32
  */
@@ -45,4 +59,26 @@ export type ReturnCodes = number[];
45
59
  * Client identifier that uniquely identifies a client
46
60
  */
47
61
  export type ClientId = string;
62
+ /**
63
+ * helper type to limit retain handling values
64
+ */
65
+ export type TRetainHandling = typeof RetainHandling[keyof typeof RetainHandling];
66
+ /**
67
+ * UTF8 string pair (for v5)
68
+ */
69
+ export type UTF8StringPair = [string, string];
70
+ /**
71
+ * Options for the codec
72
+ */
73
+ export type CodecOpts = {
74
+ protocolLevel: ProtocolLevel;
75
+ maxIncomingPacketSize: number;
76
+ maxOutgoingPacketSize: number;
77
+ };
78
+ /**
79
+ * Typescript helper to create an inverted record type
80
+ */
81
+ export type InvertRecord<R extends Record<string, number>> = {
82
+ [K in keyof R as R[K]]: K;
83
+ };
48
84
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../mqttPacket/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAC5D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC/B,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../mqttPacket/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,OAAO,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC;AAC5D;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAC/B,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,UAAU,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAClD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5B;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,UAAU,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC;AAE3B;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,GAAG,GAAG,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,eAAe,GACzB,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;CAC1B,CAAC"}
@@ -1,17 +1,24 @@
1
- import type { PacketId, TPacketType } from "./types.ts";
1
+ import type { CodecOpts, PacketId, ProtocolLevelNoV5, TPacketType, TReasonCode } from "./types.ts";
2
+ import type { UnsubackProperties } from "./Properties.ts";
3
+ export type UnsubackPacketV4 = {
4
+ type: TPacketType;
5
+ protocolLevel: ProtocolLevelNoV5;
6
+ id: PacketId;
7
+ };
8
+ export type UnsubackPacketV5 = {
9
+ type: TPacketType;
10
+ protocolLevel: 5;
11
+ id: PacketId;
12
+ properties: UnsubackProperties;
13
+ reasonCodes: Array<TReasonCode>;
14
+ };
2
15
  /**
3
16
  * UnsubackPacket is sent by the server to the client to confirm receipt
4
17
  * of an UnsubscribePacket.
5
18
  */
6
- export type UnsubackPacket = {
7
- type: TPacketType;
8
- id: PacketId;
9
- };
19
+ export type UnsubackPacket = UnsubackPacketV4 | UnsubackPacketV5;
10
20
  export declare const unsuback: {
11
- encode(packet: UnsubackPacket): {
12
- flags: number;
13
- bytes: number[];
14
- };
15
- decode(buffer: Uint8Array): UnsubackPacket;
21
+ encode(packet: UnsubackPacket, codecOpts: CodecOpts): Uint8Array;
22
+ decode(buffer: Uint8Array, flags: number, codecOpts: CodecOpts, packetType: TPacketType): UnsubackPacket;
16
23
  };
17
24
  //# sourceMappingURL=unsuback.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsuback.d.ts","sourceRoot":"","sources":["../../mqttPacket/unsuback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKxD;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE;IACrB,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACnE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAAC;CAkB5C,CAAC"}
1
+ {"version":3,"file":"unsuback.d.ts","sourceRoot":"","sources":["../../mqttPacket/unsuback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;IACjC,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEjE,eAAO,MAAM,QAAQ,EAAE;IACrB,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IACjE,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACtB,cAAc,CAAC;CAkDnB,CAAC"}
@@ -1,19 +1,42 @@
1
1
  import { PacketType } from "./PacketType.js";
2
- import { Decoder } from "./decoder.js";
2
+ import { Decoder, hasEmptyFlags } from "./decoder.js";
3
3
  import { Encoder } from "./encoder.js";
4
4
  export const unsuback = {
5
- encode(packet) {
5
+ encode(packet, codecOpts) {
6
6
  const flags = 0;
7
- const encoder = new Encoder();
7
+ const encoder = new Encoder(packet.type);
8
8
  encoder.setInt16(packet.id);
9
- return { flags, bytes: encoder.done() };
9
+ if (packet.protocolLevel === 5) {
10
+ encoder.setProperties(packet.properties || {}, PacketType.unsuback, codecOpts.maxOutgoingPacketSize);
11
+ for (const reasonCode of packet.reasonCodes) {
12
+ encoder.setByte(reasonCode);
13
+ }
14
+ }
15
+ return encoder.done(flags);
10
16
  },
11
- decode(buffer) {
12
- const decoder = new Decoder(buffer);
17
+ decode(buffer, flags, codecOpts, packetType) {
18
+ hasEmptyFlags(flags);
19
+ const decoder = new Decoder(packetType, buffer);
13
20
  const id = decoder.getInt16();
21
+ if (codecOpts.protocolLevel === 5) {
22
+ const properties = decoder.getProperties(PacketType.unsuback);
23
+ const reasonCodes = [];
24
+ while (!decoder.atEnd()) {
25
+ const reasonCode = decoder.getReasonCode();
26
+ reasonCodes.push(reasonCode);
27
+ }
28
+ return {
29
+ type: PacketType.unsuback,
30
+ protocolLevel: 5,
31
+ id,
32
+ properties,
33
+ reasonCodes: reasonCodes,
34
+ };
35
+ }
14
36
  decoder.done();
15
37
  return {
16
38
  type: PacketType.unsuback,
39
+ protocolLevel: codecOpts.protocolLevel,
17
40
  id,
18
41
  };
19
42
  },
@@ -1 +1 @@
1
- {"version":3,"file":"unsuback.js","sourceRoot":"","sources":["../../mqttPacket/unsuback.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAWvC,MAAM,CAAC,MAAM,QAAQ,GAGjB;IACF,MAAM,CAAC,MAAsB;QAC3B,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAkB;QACvB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,QAAQ;YACzB,EAAE;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"unsuback.js","sourceRoot":"","sources":["../../mqttPacket/unsuback.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsBvC,MAAM,CAAC,MAAM,QAAQ,GAQjB;IACF,MAAM,CAAC,MAAsB,EAAE,SAAoB;QACjD,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,UAAU,IAAI,EAAE,EACvB,UAAU,CAAC,QAAQ,EACnB,SAAS,CAAC,qBAAqB,CAChC,CAAC;YACF,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5C,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CACJ,MAAkB,EAClB,KAAa,EACb,SAAoB,EACpB,UAAuB;QAEvB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC3C,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,QAAQ;gBACzB,aAAa,EAAE,CAAC;gBAChB,EAAE;gBACF,UAAU;gBACV,WAAW,EAAE,WAAiC;aAC/C,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,QAAQ;YACzB,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,EAAE;SACH,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,17 +1,24 @@
1
- import type { PacketId, TopicFilter, TPacketType } from "./types.ts";
2
- /**
3
- * UnsubscribePacket is sent from client to server to unsubscribe from topics
4
- */
5
- export type UnsubscribePacket = {
1
+ import type { CodecOpts, PacketId, ProtocolLevelNoV5, TopicFilter, TPacketType } from "./types.ts";
2
+ import type { UnsubscribeProperties } from "./Properties.ts";
3
+ export type UnsubscribePacketV4 = {
4
+ type: TPacketType;
5
+ protocolLevel: ProtocolLevelNoV5;
6
+ id: PacketId;
7
+ topicFilters: TopicFilter[];
8
+ };
9
+ export type UnsubscribePacketV5 = {
6
10
  type: TPacketType;
11
+ protocolLevel: 5;
7
12
  id: PacketId;
13
+ properties?: UnsubscribeProperties;
8
14
  topicFilters: TopicFilter[];
9
15
  };
16
+ /**
17
+ * UnsubscribePacket is sent from client to server to unsubscribe from topics
18
+ */
19
+ export type UnsubscribePacket = UnsubscribePacketV4 | UnsubscribePacketV5;
10
20
  export declare const unsubscribe: {
11
- encode(packet: UnsubscribePacket): {
12
- flags: number;
13
- bytes: number[];
14
- };
15
- decode(buffer: Uint8Array, flags: number): UnsubscribePacket;
21
+ encode(packet: UnsubscribePacket, codecOpts: CodecOpts): Uint8Array;
22
+ decode(buffer: Uint8Array, flags: number, codecOpts: CodecOpts, packetType: TPacketType): UnsubscribePacket;
16
23
  };
17
24
  //# sourceMappingURL=unsubscribe.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../../mqttPacket/unsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAS,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAM5E;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,QAAQ,CAAC;IACb,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IACxB,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAC;CAoC9D,CAAC"}
1
+ {"version":3,"file":"unsubscribe.d.ts","sourceRoot":"","sources":["../../mqttPacket/unsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,iBAAiB,EAEjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAK7D,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;IACjC,EAAE,EAAE,QAAQ,CAAC;IACb,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAE1E,eAAO,MAAM,WAAW,EAAE;IACxB,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IACpE,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACtB,iBAAiB,CAAC;CA4DtB,CAAC"}
@@ -1,35 +1,51 @@
1
1
  import { PacketType } from "./PacketType.js";
2
- import { BitMask } from "./BitMask.js";
3
2
  import { Encoder } from "./encoder.js";
4
- import { booleanFlag, Decoder, DecoderError } from "./decoder.js";
3
+ import { Decoder, DecoderError } from "./decoder.js";
5
4
  export const unsubscribe = {
6
- encode(packet) {
5
+ encode(packet, codecOpts) {
7
6
  // Bits 3,2,1 and 0 of the fixed header of the UNSUBSCRIBE Control Packet are reserved and
8
7
  // MUST be set to 0,0,1 and 0 respectively. The Server MUST treat any other value as
9
8
  // malformed and close the Network Connection [MQTT-3.10.1-1].
10
9
  const flags = 0b0010;
11
- const encoder = new Encoder();
10
+ const encoder = new Encoder(packet.type);
12
11
  encoder.setInt16(packet.id);
12
+ if (packet.protocolLevel === 5) {
13
+ encoder.setProperties(packet.properties || {}, PacketType.unsubscribe, codecOpts.maxOutgoingPacketSize);
14
+ }
13
15
  for (const topicFilter of packet.topicFilters) {
14
16
  encoder.setTopicFilter(topicFilter);
15
17
  }
16
- return { flags, bytes: encoder.done() };
18
+ return encoder.done(flags);
17
19
  },
18
- decode(buffer, flags) {
19
- if (!booleanFlag(flags, BitMask.bit1)) {
20
+ decode(buffer, flags, codecOpts, packetType) {
21
+ if (flags !== 0b0010) {
20
22
  throw new DecoderError("Invalid header");
21
23
  }
22
- const decoder = new Decoder(buffer);
24
+ const decoder = new Decoder(packetType, buffer);
23
25
  const id = decoder.getInt16();
26
+ let properties = {};
27
+ if (codecOpts.protocolLevel === 5) {
28
+ properties = decoder.getProperties(PacketType.unsubscribe);
29
+ }
24
30
  const topicFilters = [];
25
31
  do {
26
32
  const topicFilter = decoder.getTopicFilter();
27
33
  topicFilters.push(topicFilter);
28
34
  } while (!decoder.atEnd());
29
35
  decoder.done();
36
+ if (codecOpts.protocolLevel !== 5) {
37
+ return {
38
+ type: PacketType.unsubscribe,
39
+ protocolLevel: codecOpts.protocolLevel,
40
+ id,
41
+ topicFilters,
42
+ };
43
+ }
30
44
  return {
31
45
  type: PacketType.unsubscribe,
46
+ protocolLevel: 5,
32
47
  id,
48
+ properties,
33
49
  topicFilters,
34
50
  };
35
51
  },
@@ -1 +1 @@
1
- {"version":3,"file":"unsubscribe.js","sourceRoot":"","sources":["../../mqttPacket/unsubscribe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAWlE,MAAM,CAAC,MAAM,WAAW,GAGpB;IACF,MAAM,CAAC,MAAyB;QAC9B,0FAA0F;QAC1F,oFAAoF;QACpF,8DAA8D;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,MAAkB,EAAE,KAAa;QACtC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,YAAY,GAAY,EAAE,CAAC;QACjC,GAAG,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,WAAW;YAC5B,EAAE;YACF,YAAY;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"unsubscribe.js","sourceRoot":"","sources":["../../mqttPacket/unsubscribe.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAsBrD,MAAM,CAAC,MAAM,WAAW,GAQpB;IACF,MAAM,CAAC,MAAyB,EAAE,SAAoB;QACpD,0FAA0F;QAC1F,oFAAoF;QACpF,8DAA8D;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC;QAErB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,UAAU,IAAI,EAAE,EACvB,UAAU,CAAC,WAAW,EACtB,SAAS,CAAC,qBAAqB,CAChC,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YAC9C,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,CACJ,MAAkB,EAClB,KAAa,EACb,SAAoB,EACpB,UAAuB;QAEvB,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,YAAY,GAAY,EAAE,CAAC;QACjC,GAAG,CAAC;YACF,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,WAAW;gBAC5B,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,EAAE;gBACF,YAAY;aACb,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,WAAW;YAC5B,aAAa,EAAE,CAAC;YAChB,EAAE;YACF,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,5 +1,20 @@
1
1
  import type { Topic, TopicFilter } from "./types.ts";
2
+ /**
3
+ * check for invalid UTF-8 characters
4
+ * @param value string to test
5
+ * @returns true if the string contains invalid UTF-8 characters
6
+ */
2
7
  export declare function invalidUTF8(value: string): boolean;
8
+ /**
9
+ * check for invalid topic characters
10
+ * @param value
11
+ * @returns true if the topic is invalid
12
+ */
3
13
  export declare function invalidTopic(value: Topic): boolean;
14
+ /**
15
+ * check for invalid topic filter characters
16
+ * @param value topic filter to test
17
+ * @returns true if the topic filter is invalid
18
+ */
4
19
  export declare function invalidTopicFilter(value: TopicFilter): boolean;
5
20
  //# sourceMappingURL=validators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../mqttPacket/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AASrD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAElD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D"}
1
+ {"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../mqttPacket/validators.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AASrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAElD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D"}
@@ -4,12 +4,27 @@ const invalidUTF8regEx = new RegExp(/\x00|\uFFFD/);
4
4
  const invalidTopicRegEx = new RegExp(/^$|\+|#|\x00|\uFFFD/);
5
5
  // deno-lint-ignore no-control-regex
6
6
  const invalidTopicFilterRegEx = new RegExp(/^$|#.|[^\/]\+|\+[^\/]|\x00|\uFFFD/);
7
+ /**
8
+ * check for invalid UTF-8 characters
9
+ * @param value string to test
10
+ * @returns true if the string contains invalid UTF-8 characters
11
+ */
7
12
  export function invalidUTF8(value) {
8
13
  return invalidUTF8regEx.test(value);
9
14
  }
15
+ /**
16
+ * check for invalid topic characters
17
+ * @param value
18
+ * @returns true if the topic is invalid
19
+ */
10
20
  export function invalidTopic(value) {
11
21
  return invalidTopicRegEx.test(value);
12
22
  }
23
+ /**
24
+ * check for invalid topic filter characters
25
+ * @param value topic filter to test
26
+ * @returns true if the topic filter is invalid
27
+ */
13
28
  export function invalidTopicFilter(value) {
14
29
  return invalidTopicFilterRegEx.test(value);
15
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../mqttPacket/validators.ts"],"names":[],"mappings":"AAEA,oCAAoC;AACpC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AACnD,oCAAoC;AACpC,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC5D,oCAAoC;AACpC,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,mCAAmC,CAAC,CAAC;AAEhF,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../mqttPacket/validators.ts"],"names":[],"mappings":"AAEA,oCAAoC;AACpC,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,aAAa,CAAC,CAAC;AACnD,oCAAoC;AACpC,MAAM,iBAAiB,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAC5D,oCAAoC;AACpC,MAAM,uBAAuB,GAAG,IAAI,MAAM,CAAC,mCAAmC,CAAC,CAAC;AAEhF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY;IACvC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAkB;IACnD,OAAO,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC"}
@@ -76,7 +76,7 @@ export class TcpClient extends Client {
76
76
  if (protocol === "mqtt:") {
77
77
  return this.connectMQTT(hostname, port);
78
78
  }
79
- throw `Unsupported protocol: ${protocol}`;
79
+ throw new Error(`Unsupported protocol: ${protocol}`);
80
80
  }
81
81
  }
82
82
  //# sourceMappingURL=tcpClient.js.map