@seriousme/opifex 1.9.4 → 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 -29
  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 -39
  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
@@ -1,5 +1,10 @@
1
1
  import { invalidTopic, invalidTopicFilter } from "./validators.js";
2
+ import { isValidReasonCode } from "./ReasonCode.js";
3
+ import { propertyByNumber, PropertyByPropertySetType, propertyKind, propertyToId, propertyToKind, } from "./Properties.js";
2
4
  const utf8Decoder = new TextDecoder("utf-8");
5
+ const userPropID = propertyToId.userProperty;
6
+ const subIdentID = propertyToId.subscriptionIdentifier;
7
+ const subIdentsID = propertyToId.subscriptionIdentifiers;
3
8
  /**
4
9
  * Checks if a specific bit flag is set in a byte using a bitmask
5
10
  * @param byte - The byte to check
@@ -42,6 +47,7 @@ export class DecoderError extends Error {
42
47
  * Decoder class for parsing MQTT packets
43
48
  */
44
49
  export class Decoder {
50
+ packetType;
45
51
  buf;
46
52
  pos;
47
53
  len;
@@ -50,7 +56,8 @@ export class Decoder {
50
56
  * @param buf - The buffer to decode
51
57
  * @param pos - Starting position in the buffer (default: 0)
52
58
  */
53
- constructor(buf, pos = 0) {
59
+ constructor(packetType, buf, pos = 0) {
60
+ this.packetType = packetType;
54
61
  this.buf = buf;
55
62
  this.pos = pos;
56
63
  this.len = buf.length;
@@ -82,6 +89,35 @@ export class Decoder {
82
89
  const lsb = this.getByte();
83
90
  return (msb << 8) | lsb;
84
91
  }
92
+ /**
93
+ * Gets a 4 byte integer from the buffer (for v5)
94
+ * @returns The 32 bit integer value
95
+ */
96
+ getInt32() {
97
+ const msb = this.getInt16();
98
+ const lsb = this.getInt16();
99
+ return (msb << 16) | lsb;
100
+ }
101
+ /**
102
+ * Gets a variable byte integer from the buffer (for v5)
103
+ * its like the length decoder in length.ts but this one works directly on the buffer
104
+ * @returns The decoded variable byte integer
105
+ * @throws {DecoderError} If malformed variable byte integer
106
+ */
107
+ getVariableByteInteger() {
108
+ let num = 0;
109
+ let multiplier = 1;
110
+ let byte;
111
+ do {
112
+ byte = this.getByte();
113
+ num += (byte & 127) * multiplier;
114
+ if (multiplier > 128 * 128 * 128) {
115
+ throw new DecoderError("Malformed Variable Byte Integer");
116
+ }
117
+ multiplier *= 128;
118
+ } while ((byte & 128) !== 0);
119
+ return num;
120
+ }
85
121
  /**
86
122
  * Gets a byte array from the buffer
87
123
  * @returns A subarray of the buffer
@@ -98,17 +134,26 @@ export class Decoder {
98
134
  * Gets a UTF-8 string from the buffer
99
135
  * @returns The decoded UTF-8 string
100
136
  */
101
- getUtf8String() {
137
+ getUTF8String() {
102
138
  const str = utf8Decoder.decode(this.getByteArray());
103
139
  return str;
104
140
  }
141
+ /**
142
+ * Gets a UTF-8 string pair from the buffer (for v5)
143
+ * @returns The decoded UTF-8 pair as [name,value]
144
+ */
145
+ getUTF8StringPair() {
146
+ const name = utf8Decoder.decode(this.getByteArray());
147
+ const value = utf8Decoder.decode(this.getByteArray());
148
+ return [name, value];
149
+ }
105
150
  /**
106
151
  * Gets a topic from the buffer
107
152
  * @returns The decoded topic
108
153
  * @throws {DecoderError} If topic is invalid
109
154
  */
110
155
  getTopic() {
111
- const topic = this.getUtf8String();
156
+ const topic = this.getUTF8String();
112
157
  if (invalidTopic(topic)) {
113
158
  throw new DecoderError("Topic must contain valid UTF-8 and contain more than 1 byte and no wildcards");
114
159
  }
@@ -120,7 +165,7 @@ export class Decoder {
120
165
  * @throws {DecoderError} If topic filter is invalid
121
166
  */
122
167
  getTopicFilter() {
123
- const topicFilter = this.getUtf8String();
168
+ const topicFilter = this.getUTF8String();
124
169
  if (invalidTopicFilter(topicFilter)) {
125
170
  throw new DecoderError("Topicfilter must contain valid UTF-8 and contain more than 1 byte and valid wildcards");
126
171
  }
@@ -136,6 +181,92 @@ export class Decoder {
136
181
  this.pos = end;
137
182
  return this.buf.subarray(start, end);
138
183
  }
184
+ /**
185
+ * Gets a single property
186
+ * @param id
187
+ * @returns
188
+ */
189
+ getProperty(id) {
190
+ switch (propertyToKind[id]) {
191
+ case propertyKind.boolean:
192
+ return !!this.getByte();
193
+ case propertyKind.byte:
194
+ return this.getByte();
195
+ case propertyKind.int16:
196
+ return this.getInt16();
197
+ case propertyKind.int32:
198
+ return this.getInt32();
199
+ case propertyKind.varInt:
200
+ return this.getVariableByteInteger();
201
+ case propertyKind.byteArray:
202
+ return this.getByteArray();
203
+ case propertyKind.utf8string:
204
+ return this.getUTF8String();
205
+ }
206
+ // deno-coverage-ignore
207
+ throw new DecoderError("Invalid property kind");
208
+ }
209
+ /**
210
+ * Gets all properties from the buffer
211
+ * and validates if they are allowed for this type of packet
212
+ * @param propertySetType
213
+ * @returns
214
+ * @throws {DecoderError} If properties are invalid
215
+ */
216
+ getProperties(propertySetType) {
217
+ const allowedProps = PropertyByPropertySetType[propertySetType];
218
+ const properties = {};
219
+ const propLength = this.getVariableByteInteger();
220
+ const endPos = this.pos + propLength;
221
+ const userProps = [];
222
+ const subIdents = [];
223
+ while (this.pos < endPos) {
224
+ const id = this.getVariableByteInteger();
225
+ const label = propertyByNumber[id];
226
+ if (id === subIdentID && allowedProps.includes(subIdentsID)) {
227
+ subIdents.push(this.getVariableByteInteger());
228
+ continue;
229
+ }
230
+ if (!allowedProps.includes(id)) {
231
+ throw new DecoderError(`Property type ${label ? label : id} not allowed at byte ${this.pos}`);
232
+ }
233
+ if (id === userPropID) {
234
+ const stringPair = this.getUTF8StringPair();
235
+ userProps.push(stringPair);
236
+ continue;
237
+ }
238
+ const value = this.getProperty(id);
239
+ // deno-lint-ignore no-explicit-any
240
+ if (properties[label] !== undefined) {
241
+ throw new DecoderError(`Property ${label} only allowed once`);
242
+ }
243
+ else {
244
+ // deno-lint-ignore no-explicit-any
245
+ properties[label] = value;
246
+ }
247
+ }
248
+ if (userProps.length > 0) {
249
+ // deno-lint-ignore no-explicit-any
250
+ properties.userProperty = userProps;
251
+ }
252
+ if (subIdents.length > 0) {
253
+ // deno-lint-ignore no-explicit-any
254
+ properties.subscriptionIdentifiers = subIdents;
255
+ }
256
+ return properties;
257
+ }
258
+ /**
259
+ * Gets a reason code from the buffer
260
+ * @returns The decoded reason code
261
+ * @throws {DecoderError} If reason code is invalid
262
+ */
263
+ getReasonCode() {
264
+ const reasonCode = this.getByte();
265
+ if (!isValidReasonCode(this.packetType, reasonCode)) {
266
+ throw new DecoderError("Invalid reason code");
267
+ }
268
+ return reasonCode;
269
+ }
139
270
  /**
140
271
  * Checks if decoder has reached the end of the buffer
141
272
  * @returns True if at end, false otherwise
@@ -1 +1 @@
1
- {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../mqttPacket/decoder.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,22 @@
1
- import type { TPacketType } from "./types.ts";
1
+ import type { CodecOpts, ProtocolLevelNoV5, TPacketType, TReasonCode } from "./types.ts";
2
+ import type { DisconnectProperties } from "./Properties.ts";
2
3
  /**
3
4
  * DisconnectPacket is the final control packet sent from the client to the server.
4
5
  * It indicates that the client is disconnecting cleanly.
5
6
  */
6
- export type DisconnectPacket = {
7
+ export type DisconnectPacketv4 = {
7
8
  type: TPacketType;
9
+ protocolLevel: ProtocolLevelNoV5;
8
10
  };
11
+ export type DisconnectPacketv5 = {
12
+ type: TPacketType;
13
+ protocolLevel: 5;
14
+ reasonCode: TReasonCode;
15
+ properties?: DisconnectProperties;
16
+ };
17
+ export type DisconnectPacket = DisconnectPacketv4 | DisconnectPacketv5;
9
18
  export declare const disconnect: {
10
- encode(_packet: DisconnectPacket): {
11
- flags: number;
12
- bytes: number[];
13
- };
14
- decode(buffer: Uint8Array, _flags: number): DisconnectPacket;
19
+ encode(_packet: DisconnectPacket, _codecOpts: CodecOpts): Uint8Array;
20
+ decode(buffer: Uint8Array, _flags: number, codecOpts: CodecOpts, packetType: TPacketType): DisconnectPacket;
15
21
  };
16
22
  //# sourceMappingURL=disconnect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAAC;CAa9D,CAAC"}
1
+ {"version":3,"file":"disconnect.d.ts","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,aAAa,EAAE,CAAC,CAAC;IACjB,UAAU,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAIvE,eAAO,MAAM,UAAU,EAAE;IACvB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,SAAS,GAAG,UAAU,CAAC;IACrE,MAAM,CACJ,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,WAAW,GACtB,gBAAgB,CAAC;CA4DrB,CAAC"}
@@ -1,14 +1,53 @@
1
1
  import { PacketType } from "./PacketType.js";
2
- import { isEmptyBuf } from "./decoder.js";
2
+ import { Decoder, hasEmptyFlags, isEmptyBuf } from "./decoder.js";
3
+ import { Encoder } from "./encoder.js";
4
+ import { ReasonCode } from "./ReasonCode.js";
5
+ const DISCONNECT_PACKET = new Uint8Array([PacketType.disconnect << 4, 0]);
3
6
  export const disconnect = {
4
- encode(_packet) {
5
- const flags = 0;
6
- return { flags, bytes: [] };
7
+ encode(packet, codecOpts) {
8
+ if (packet.protocolLevel !== 5) {
9
+ return DISCONNECT_PACKET;
10
+ }
11
+ const reasonCode = packet.reasonCode || ReasonCode.normalDisconnection;
12
+ const encoder = new Encoder(packet.type);
13
+ // see MQTT v5 3.14.2.1
14
+ // if remaining length is less than 1 the value of 0x00 (normal disconnect) is used.
15
+ if (reasonCode === ReasonCode.normalDisconnection &&
16
+ Object.keys(packet.properties || {}).length === 0) {
17
+ return encoder.done(0);
18
+ }
19
+ encoder
20
+ .setReasonCode(reasonCode);
21
+ if (packet.properties) {
22
+ encoder.setProperties(packet.properties, packet.type, codecOpts.maxOutgoingPacketSize);
23
+ }
24
+ return encoder.done(0);
7
25
  },
8
- decode(buffer, _flags) {
9
- isEmptyBuf(buffer);
26
+ decode(buffer, flags, codecOpts, packetType) {
27
+ hasEmptyFlags(flags);
28
+ if (codecOpts.protocolLevel !== 5) {
29
+ isEmptyBuf(buffer);
30
+ return {
31
+ type: PacketType.disconnect,
32
+ protocolLevel: codecOpts.protocolLevel,
33
+ };
34
+ }
35
+ const decoder = new Decoder(packetType, buffer);
36
+ if (decoder.atEnd()) {
37
+ return {
38
+ type: PacketType.disconnect,
39
+ protocolLevel: 5,
40
+ reasonCode: 0,
41
+ };
42
+ }
43
+ const reasonCode = decoder.getReasonCode();
44
+ const properties = decoder.getProperties(PacketType.disconnect);
45
+ decoder.done();
10
46
  return {
11
47
  type: PacketType.disconnect,
48
+ protocolLevel: 5,
49
+ reasonCode,
50
+ properties,
12
51
  };
13
52
  },
14
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,MAAM,CAAC,MAAM,UAAU,GAGnB;IACF,MAAM,CAAC,OAAyB;QAC9B,MAAM,KAAK,GAAG,CAAC,CAAC;QAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,CAAC,MAAkB,EAAE,MAAc;QACvC,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,UAAU;SAC5B,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"disconnect.js","sourceRoot":"","sources":["../../mqttPacket/disconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQlE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAoB7C,MAAM,iBAAiB,GAAG,IAAI,UAAU,CAAC,CAAC,UAAU,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,UAAU,GAQnB;IACF,MAAM,CAAC,MAAwB,EAAE,SAAoB;QACnD,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,iBAAiB,CAAC;QAC3B,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,mBAAmB,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzC,uBAAuB;QACvB,oFAAoF;QACpF,IACE,UAAU,KAAK,UAAU,CAAC,mBAAmB;YAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EACjD,CAAC;YACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO;aACJ,aAAa,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,aAAa,CACnB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,SAAS,CAAC,qBAAqB,CAChC,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,CACJ,MAAkB,EAClB,KAAa,EACb,SAAS,EACT,UAAuB;QAEvB,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,SAAS,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,MAAM,CAAC,CAAC;YACnB,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,UAAU;gBAC3B,aAAa,EAAE,SAAS,CAAC,aAAa;aACvC,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACpB,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,UAAU;gBAC3B,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO;YACL,IAAI,EAAE,UAAU,CAAC,UAAU;YAC3B,aAAa,EAAE,CAAC;YAChB,UAAU;YACV,UAAU;SACX,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -1,20 +1,31 @@
1
- import type { Topic, TopicFilter } from "./types.ts";
1
+ import type { Topic, TopicFilter, TPacketType, TReasonCode, UTF8StringPair } from "./types.ts";
2
+ import type { PropsByPacketSetType, TPropertySetType } from "./Properties.ts";
2
3
  /**
3
4
  * Custom error class for encoding operations
4
5
  */
5
6
  export declare class EncoderError extends Error {
6
7
  constructor(message: string);
7
8
  }
8
- /**
9
- * Encoder class for MQTT packet encoding
10
- */
11
9
  export declare class Encoder {
12
- /** Internal buffer to store encoded bytes */
13
- private buffer;
10
+ /** Internal bufferlist to store items */
11
+ private buffers;
12
+ /** Number of bytes in the buffer */
13
+ private numBytes;
14
+ /** Packet type */
15
+ private packetType;
16
+ /** marker to rewind to */
17
+ private marker;
14
18
  /**
15
19
  * Creates a new Encoder instance
16
20
  */
17
- constructor();
21
+ constructor(packetType: TPacketType);
22
+ encodedSize(): number;
23
+ setMarker(): void;
24
+ rewindToMarker(): void;
25
+ /**
26
+ * @param value
27
+ */
28
+ addArray(value: number[] | Uint8Array): this;
18
29
  /**
19
30
  * Adds a single byte to the buffer
20
31
  * @param value - Byte value to add (0-255)
@@ -27,6 +38,18 @@ export declare class Encoder {
27
38
  * @returns The encoder instance for chaining
28
39
  */
29
40
  setInt16(value: number): this;
41
+ /**
42
+ * adds a 4 byte integer from the buffer (for v5)
43
+ * @param value - 32-bit integer to encode and add
44
+ * @returns The encoder instance for chaining
45
+ */
46
+ setInt32(value: number): this;
47
+ /**
48
+ * adds a variable byte integer to the buffer (for v5)
49
+ * @param value - integer to encode and add
50
+ * @returns The encoder instance for chaining
51
+ */
52
+ setVariableByteInteger(value: number): this;
30
53
  /**
31
54
  * Adds a byte array to the buffer with length prefix
32
55
  * @param value - Byte array to add
@@ -40,6 +63,12 @@ export declare class Encoder {
40
63
  * @returns The encoder instance for chaining
41
64
  */
42
65
  setUtf8String(value: string): this;
66
+ /**
67
+ * Adds a UTF-8 string pair from the buffer (for v5)
68
+ * @param stringPair - UTF8StringPair
69
+ * @returns The encoder instance for chaining
70
+ */
71
+ setUtf8StringPair([name, value]: UTF8StringPair): this;
43
72
  /**
44
73
  * Adds an MQTT topic string to the buffer
45
74
  * @param value - Topic string to add
@@ -60,10 +89,30 @@ export declare class Encoder {
60
89
  * @returns The encoder instance for chaining
61
90
  */
62
91
  setRemainder(value: Uint8Array | number[]): this;
92
+ /**
93
+ * add lenght and buffers from this
94
+ * @param encoder - the encoder to add it to
95
+ */
96
+ addToEncoder(encoder: Encoder): void;
97
+ /**
98
+ * Encode a single property
99
+ * @param id - the id of the property
100
+ * @param value the value of the property
101
+ * @returns
102
+ */
103
+ private setProperty;
104
+ /**
105
+ * Encode a set of properties respecting potential size limits
106
+ * @param props - the properties to encode
107
+ * @param propertySetType - the type of packet to encode for
108
+ * @param maximumPacketSize - the maximum packet size to be consumed by properties
109
+ */
110
+ setProperties<T extends TPropertySetType>(props: PropsByPacketSetType[T], propertySetType: TPropertySetType, maximumPacketSize: number): void;
111
+ setReasonCode(reasonCode: TReasonCode): this;
63
112
  /**
64
113
  * Returns the final encoded buffer
65
114
  * @returns Array containing all encoded bytes
66
115
  */
67
- done(): number[];
116
+ done(flags: number): Uint8Array;
68
117
  }
69
118
  //# sourceMappingURL=encoder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../mqttPacket/encoder.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGrD;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,OAAO;IAClB,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAW;IAEzB;;OAEG;;IAKH;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASrC;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU5B;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUxC;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,IAAI;IAKhD;;;OAGG;IACH,IAAI,IAAI,MAAM,EAAE;CAGjB"}
1
+ {"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../mqttPacket/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAEV,oBAAoB,EAEpB,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAezB;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAMD,qBAAa,OAAO;IAClB,yCAAyC;IACzC,OAAO,CAAC,OAAO,CAAa;IAE5B,oCAAoC;IACpC,OAAO,CAAC,QAAQ,CAAS;IAEzB,kBAAkB;IAClB,OAAO,CAAC,UAAU,CAAc;IAEhC,0BAA0B;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB;;OAEG;gBACS,UAAU,EAAE,WAAW;IAOnC,WAAW;IAIX,SAAS;IAIT,cAAc;IAMd;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI;IAM5C;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM5B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7B;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IASrC;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC;;;;OAIG;IACH,iBAAiB,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI;IAMtD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAU5B;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAUxC;;;;OAIG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,IAAI;IAKhD;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO;IAO7B;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAwDnB;;;;;OAKG;IACH,aAAa,CAAC,CAAC,SAAS,gBAAgB,EACtC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAC9B,eAAe,EAAE,gBAAgB,EACjC,iBAAiB,EAAE,MAAM;IA0B3B,aAAa,CAAC,UAAU,EAAE,WAAW;IAUrC;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;CAehC"}