@seriousme/opifex 1.9.4 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (331) hide show
  1. package/README.md +37 -26
  2. package/bin/conformanceServer.ts +3 -2
  3. package/bin/demoServer.ts +3 -2
  4. package/bin/mqtt.ts +127 -118
  5. package/client/client.ts +61 -21
  6. package/client/context.ts +71 -30
  7. package/client/deps.ts +5 -0
  8. package/client/handlers/handleConnack.ts +17 -5
  9. package/client/handlers/handlePublish.ts +4 -1
  10. package/client/handlers/handlePubrec.ts +3 -1
  11. package/client/handlers/handlePubrel.ts +3 -1
  12. package/client/handlers/handleSuback.ts +3 -1
  13. package/client/mod.ts +8 -1
  14. package/client/store/memoryStore.ts +2 -1
  15. package/deno/tcpClient.ts +1 -1
  16. package/dev_utils/dummyConn.ts +17 -2
  17. package/dist/bin/conformanceServer.js +3 -2
  18. package/dist/bin/conformanceServer.js.map +1 -1
  19. package/dist/bin/demoServer.js +3 -2
  20. package/dist/bin/demoServer.js.map +1 -1
  21. package/dist/bin/mqtt.d.ts +29 -0
  22. package/dist/bin/mqtt.d.ts.map +1 -1
  23. package/dist/bin/mqtt.js +102 -97
  24. package/dist/bin/mqtt.js.map +1 -1
  25. package/dist/client/client.d.ts +16 -5
  26. package/dist/client/client.d.ts.map +1 -1
  27. package/dist/client/client.js +36 -15
  28. package/dist/client/client.js.map +1 -1
  29. package/dist/client/context.d.ts +8 -3
  30. package/dist/client/context.d.ts.map +1 -1
  31. package/dist/client/context.js +51 -21
  32. package/dist/client/context.js.map +1 -1
  33. package/dist/client/deps.d.ts +3 -2
  34. package/dist/client/deps.d.ts.map +1 -1
  35. package/dist/client/deps.js +2 -1
  36. package/dist/client/deps.js.map +1 -1
  37. package/dist/client/handlers/handleConnack.d.ts +1 -1
  38. package/dist/client/handlers/handleConnack.d.ts.map +1 -1
  39. package/dist/client/handlers/handleConnack.js +14 -5
  40. package/dist/client/handlers/handleConnack.js.map +1 -1
  41. package/dist/client/handlers/handlePublish.d.ts +1 -1
  42. package/dist/client/handlers/handlePublish.d.ts.map +1 -1
  43. package/dist/client/handlers/handlePublish.js +2 -0
  44. package/dist/client/handlers/handlePublish.js.map +1 -1
  45. package/dist/client/handlers/handlePubrec.d.ts +1 -1
  46. package/dist/client/handlers/handlePubrec.d.ts.map +1 -1
  47. package/dist/client/handlers/handlePubrec.js +1 -0
  48. package/dist/client/handlers/handlePubrec.js.map +1 -1
  49. package/dist/client/handlers/handlePubrel.d.ts +1 -1
  50. package/dist/client/handlers/handlePubrel.d.ts.map +1 -1
  51. package/dist/client/handlers/handlePubrel.js +1 -0
  52. package/dist/client/handlers/handlePubrel.js.map +1 -1
  53. package/dist/client/handlers/handleSuback.d.ts.map +1 -1
  54. package/dist/client/handlers/handleSuback.js +3 -1
  55. package/dist/client/handlers/handleSuback.js.map +1 -1
  56. package/dist/client/mod.d.ts +3 -1
  57. package/dist/client/mod.d.ts.map +1 -1
  58. package/dist/client/mod.js +2 -1
  59. package/dist/client/mod.js.map +1 -1
  60. package/dist/client/store/memoryStore.d.ts +1 -1
  61. package/dist/client/store/memoryStore.d.ts.map +1 -1
  62. package/dist/client/store/memoryStore.js.map +1 -1
  63. package/dist/mqttConn/mqttConn.d.ts +13 -8
  64. package/dist/mqttConn/mqttConn.d.ts.map +1 -1
  65. package/dist/mqttConn/mqttConn.js +27 -12
  66. package/dist/mqttConn/mqttConn.js.map +1 -1
  67. package/dist/mqttPacket/PacketType.d.ts +1 -0
  68. package/dist/mqttPacket/PacketType.d.ts.map +1 -1
  69. package/dist/mqttPacket/PacketType.js +1 -0
  70. package/dist/mqttPacket/PacketType.js.map +1 -1
  71. package/dist/mqttPacket/Properties.d.ts +157 -0
  72. package/dist/mqttPacket/Properties.d.ts.map +1 -0
  73. package/dist/mqttPacket/Properties.js +177 -0
  74. package/dist/mqttPacket/Properties.js.map +1 -0
  75. package/dist/mqttPacket/ReasonCode.d.ts +74 -0
  76. package/dist/mqttPacket/ReasonCode.d.ts.map +1 -0
  77. package/dist/mqttPacket/ReasonCode.js +230 -0
  78. package/dist/mqttPacket/ReasonCode.js.map +1 -0
  79. package/dist/mqttPacket/RetainHandling.d.ts +12 -0
  80. package/dist/mqttPacket/RetainHandling.d.ts.map +1 -0
  81. package/dist/mqttPacket/RetainHandling.js +12 -0
  82. package/dist/mqttPacket/RetainHandling.js.map +1 -0
  83. package/dist/mqttPacket/auth.d.ts +21 -0
  84. package/dist/mqttPacket/auth.d.ts.map +1 -0
  85. package/dist/mqttPacket/auth.js +34 -0
  86. package/dist/mqttPacket/auth.js.map +1 -0
  87. package/dist/mqttPacket/connack.d.ts +19 -11
  88. package/dist/mqttPacket/connack.d.ts.map +1 -1
  89. package/dist/mqttPacket/connack.js +43 -15
  90. package/dist/mqttPacket/connack.js.map +1 -1
  91. package/dist/mqttPacket/connect.d.ts +30 -11
  92. package/dist/mqttPacket/connect.d.ts.map +1 -1
  93. package/dist/mqttPacket/connect.js +106 -30
  94. package/dist/mqttPacket/connect.js.map +1 -1
  95. package/dist/mqttPacket/decoder.d.ts +42 -3
  96. package/dist/mqttPacket/decoder.d.ts.map +1 -1
  97. package/dist/mqttPacket/decoder.js +135 -4
  98. package/dist/mqttPacket/decoder.js.map +1 -1
  99. package/dist/mqttPacket/disconnect.d.ts +15 -9
  100. package/dist/mqttPacket/disconnect.d.ts.map +1 -1
  101. package/dist/mqttPacket/disconnect.js +45 -6
  102. package/dist/mqttPacket/disconnect.js.map +1 -1
  103. package/dist/mqttPacket/encoder.d.ts +57 -8
  104. package/dist/mqttPacket/encoder.d.ts.map +1 -1
  105. package/dist/mqttPacket/encoder.js +185 -13
  106. package/dist/mqttPacket/encoder.js.map +1 -1
  107. package/dist/mqttPacket/length.d.ts.map +1 -1
  108. package/dist/mqttPacket/length.js +3 -2
  109. package/dist/mqttPacket/length.js.map +1 -1
  110. package/dist/mqttPacket/mod.d.ts +57 -91
  111. package/dist/mqttPacket/mod.d.ts.map +1 -1
  112. package/dist/mqttPacket/mod.js +23 -29
  113. package/dist/mqttPacket/mod.js.map +1 -1
  114. package/dist/mqttPacket/pingreq.d.ts +4 -6
  115. package/dist/mqttPacket/pingreq.d.ts.map +1 -1
  116. package/dist/mqttPacket/pingreq.js +5 -4
  117. package/dist/mqttPacket/pingreq.js.map +1 -1
  118. package/dist/mqttPacket/pingres.d.ts +4 -6
  119. package/dist/mqttPacket/pingres.d.ts.map +1 -1
  120. package/dist/mqttPacket/pingres.js +7 -5
  121. package/dist/mqttPacket/pingres.js.map +1 -1
  122. package/dist/mqttPacket/protocolLevels.d.ts +12 -0
  123. package/dist/mqttPacket/protocolLevels.d.ts.map +1 -0
  124. package/dist/mqttPacket/protocolLevels.js +11 -0
  125. package/dist/mqttPacket/protocolLevels.js.map +1 -0
  126. package/dist/mqttPacket/pubblishAcks.d.ts +42 -0
  127. package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -0
  128. package/dist/mqttPacket/pubblishAcks.js +56 -0
  129. package/dist/mqttPacket/pubblishAcks.js.map +1 -0
  130. package/dist/mqttPacket/publish.d.ts +19 -8
  131. package/dist/mqttPacket/publish.d.ts.map +1 -1
  132. package/dist/mqttPacket/publish.js +26 -7
  133. package/dist/mqttPacket/publish.js.map +1 -1
  134. package/dist/mqttPacket/suback.d.ts +18 -11
  135. package/dist/mqttPacket/suback.d.ts.map +1 -1
  136. package/dist/mqttPacket/suback.js +41 -20
  137. package/dist/mqttPacket/suback.js.map +1 -1
  138. package/dist/mqttPacket/subscribe.d.ts +27 -12
  139. package/dist/mqttPacket/subscribe.d.ts.map +1 -1
  140. package/dist/mqttPacket/subscribe.js +71 -15
  141. package/dist/mqttPacket/subscribe.js.map +1 -1
  142. package/dist/mqttPacket/types.d.ts +36 -0
  143. package/dist/mqttPacket/types.d.ts.map +1 -1
  144. package/dist/mqttPacket/unsuback.d.ts +17 -10
  145. package/dist/mqttPacket/unsuback.d.ts.map +1 -1
  146. package/dist/mqttPacket/unsuback.js +29 -6
  147. package/dist/mqttPacket/unsuback.js.map +1 -1
  148. package/dist/mqttPacket/unsubscribe.d.ts +17 -10
  149. package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
  150. package/dist/mqttPacket/unsubscribe.js +24 -8
  151. package/dist/mqttPacket/unsubscribe.js.map +1 -1
  152. package/dist/mqttPacket/validators.d.ts +15 -0
  153. package/dist/mqttPacket/validators.d.ts.map +1 -1
  154. package/dist/mqttPacket/validators.js +15 -0
  155. package/dist/mqttPacket/validators.js.map +1 -1
  156. package/dist/node/tcpClient.js +1 -1
  157. package/dist/node/tcpClient.js.map +1 -1
  158. package/dist/node/wrapNodeSocket.d.ts.map +1 -1
  159. package/dist/node/wrapNodeSocket.js.map +1 -1
  160. package/dist/persistence/deps.d.ts +1 -1
  161. package/dist/persistence/deps.d.ts.map +1 -1
  162. package/dist/persistence/deps.js +1 -1
  163. package/dist/persistence/deps.js.map +1 -1
  164. package/dist/persistence/memory/memoryPersistence.js +1 -1
  165. package/dist/persistence/memory/memoryPersistence.js.map +1 -1
  166. package/dist/server/context.d.ts +3 -1
  167. package/dist/server/context.d.ts.map +1 -1
  168. package/dist/server/context.js +8 -2
  169. package/dist/server/context.js.map +1 -1
  170. package/dist/server/deps.d.ts +2 -2
  171. package/dist/server/deps.d.ts.map +1 -1
  172. package/dist/server/deps.js +1 -1
  173. package/dist/server/deps.js.map +1 -1
  174. package/dist/server/handlers/handleConnect.d.ts +1 -1
  175. package/dist/server/handlers/handleConnect.d.ts.map +1 -1
  176. package/dist/server/handlers/handleConnect.js +9 -1
  177. package/dist/server/handlers/handleConnect.js.map +1 -1
  178. package/dist/server/handlers/handlePacket.d.ts +1 -1
  179. package/dist/server/handlers/handlePacket.d.ts.map +1 -1
  180. package/dist/server/handlers/handlePacket.js +1 -1
  181. package/dist/server/handlers/handlePacket.js.map +1 -1
  182. package/dist/server/handlers/handlePingreq.d.ts.map +1 -1
  183. package/dist/server/handlers/handlePingreq.js +1 -0
  184. package/dist/server/handlers/handlePingreq.js.map +1 -1
  185. package/dist/server/handlers/handlePublish.d.ts +2 -2
  186. package/dist/server/handlers/handlePublish.d.ts.map +1 -1
  187. package/dist/server/handlers/handlePublish.js +2 -0
  188. package/dist/server/handlers/handlePublish.js.map +1 -1
  189. package/dist/server/handlers/handlePubrec.d.ts +1 -1
  190. package/dist/server/handlers/handlePubrec.d.ts.map +1 -1
  191. package/dist/server/handlers/handlePubrec.js +1 -0
  192. package/dist/server/handlers/handlePubrec.js.map +1 -1
  193. package/dist/server/handlers/handlePubrel.d.ts +1 -1
  194. package/dist/server/handlers/handlePubrel.d.ts.map +1 -1
  195. package/dist/server/handlers/handlePubrel.js +1 -0
  196. package/dist/server/handlers/handlePubrel.js.map +1 -1
  197. package/dist/server/handlers/handleSubscribe.d.ts +1 -1
  198. package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
  199. package/dist/server/handlers/handleSubscribe.js +2 -1
  200. package/dist/server/handlers/handleSubscribe.js.map +1 -1
  201. package/dist/server/handlers/handleUnsubscribe.d.ts +1 -1
  202. package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
  203. package/dist/server/handlers/handleUnsubscribe.js +1 -0
  204. package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
  205. package/dist/server/server.d.ts +2 -2
  206. package/dist/server/server.d.ts.map +1 -1
  207. package/dist/server/server.js +5 -3
  208. package/dist/server/server.js.map +1 -1
  209. package/dist/socket/socket.d.ts.map +1 -1
  210. package/dist/socket/socket.js +6 -1
  211. package/dist/socket/socket.js.map +1 -1
  212. package/dist/utils/assert.d.ts +0 -3
  213. package/dist/utils/assert.d.ts.map +1 -1
  214. package/dist/utils/assert.js +0 -7
  215. package/dist/utils/assert.js.map +1 -1
  216. package/dist/utils/asyncQueue.d.ts +1 -3
  217. package/dist/utils/asyncQueue.d.ts.map +1 -1
  218. package/dist/utils/asyncQueue.js +16 -21
  219. package/dist/utils/asyncQueue.js.map +1 -1
  220. package/dist/utils/logger.d.ts +5 -15
  221. package/dist/utils/logger.d.ts.map +1 -1
  222. package/dist/utils/logger.js +7 -8
  223. package/dist/utils/logger.js.map +1 -1
  224. package/dist/utils/mod.d.ts +0 -3
  225. package/dist/utils/mod.d.ts.map +1 -1
  226. package/dist/utils/mod.js +0 -2
  227. package/dist/utils/mod.js.map +1 -1
  228. package/dist/utils/utils.d.ts +2 -0
  229. package/dist/utils/utils.d.ts.map +1 -0
  230. package/dist/utils/utils.js +6 -0
  231. package/dist/utils/utils.js.map +1 -0
  232. package/mqttConn/mqttConn.test.ts +27 -12
  233. package/mqttConn/mqttConn.ts +45 -14
  234. package/mqttPacket/PacketType.ts +1 -0
  235. package/mqttPacket/Properties.ts +276 -0
  236. package/mqttPacket/ReasonCode.test.ts +22 -0
  237. package/mqttPacket/ReasonCode.ts +256 -0
  238. package/mqttPacket/RetainHandling.ts +11 -0
  239. package/mqttPacket/auth.test.ts +112 -0
  240. package/mqttPacket/auth.ts +71 -0
  241. package/mqttPacket/connack.test.ts +84 -64
  242. package/mqttPacket/connack.ts +88 -24
  243. package/mqttPacket/connect.test.ts +497 -18
  244. package/mqttPacket/connect.ts +170 -39
  245. package/mqttPacket/decoder.test.ts +33 -16
  246. package/mqttPacket/decoder.ts +173 -5
  247. package/mqttPacket/disconnect.test.ts +97 -18
  248. package/mqttPacket/disconnect.ts +84 -12
  249. package/mqttPacket/encoder.test.ts +32 -8
  250. package/mqttPacket/encoder.ts +236 -11
  251. package/mqttPacket/length.ts +3 -2
  252. package/mqttPacket/mod.ts +76 -39
  253. package/mqttPacket/pingreq.test.ts +52 -4
  254. package/mqttPacket/pingreq.ts +20 -7
  255. package/mqttPacket/pingres.test.ts +52 -4
  256. package/mqttPacket/pingres.ts +22 -8
  257. package/mqttPacket/properties.test.ts +193 -0
  258. package/mqttPacket/protocolLevels.ts +13 -0
  259. package/mqttPacket/pubblishAcks.ts +123 -0
  260. package/mqttPacket/publish.test.ts +212 -133
  261. package/mqttPacket/publish.ts +69 -14
  262. package/mqttPacket/publishAcks.test.ts +128 -0
  263. package/mqttPacket/suback.test.ts +71 -27
  264. package/mqttPacket/suback.ts +82 -30
  265. package/mqttPacket/subscribe.test.ts +132 -43
  266. package/mqttPacket/subscribe.ts +128 -25
  267. package/mqttPacket/types.ts +43 -0
  268. package/mqttPacket/unsuback.test.ts +80 -30
  269. package/mqttPacket/unsuback.ts +68 -13
  270. package/mqttPacket/unsubscribe.test.ts +59 -34
  271. package/mqttPacket/unsubscribe.ts +64 -17
  272. package/mqttPacket/validators.ts +15 -0
  273. package/node/tcpClient.ts +1 -1
  274. package/node/wrapNodeSocket.ts +2 -1
  275. package/package.json +2 -2
  276. package/persistence/deps.ts +1 -1
  277. package/persistence/memory/memoryPersistence.test.ts +5 -1
  278. package/persistence/memory/memoryPersistence.ts +1 -1
  279. package/server/context.ts +23 -10
  280. package/server/deps.ts +2 -0
  281. package/server/handlers/handleConnect.ts +12 -9
  282. package/server/handlers/handlePacket.ts +10 -11
  283. package/server/handlers/handlePingreq.ts +1 -0
  284. package/server/handlers/handlePublish.ts +6 -2
  285. package/server/handlers/handlePubrec.ts +3 -1
  286. package/server/handlers/handlePubrel.ts +3 -1
  287. package/server/handlers/handleSubscribe.ts +3 -6
  288. package/server/handlers/handleUnsubscribe.ts +3 -1
  289. package/server/server.ts +8 -12
  290. package/server/test/handleConnect.test.ts +2 -1
  291. package/server/test/test-handlers.ts +2 -1
  292. package/socket/socket.ts +5 -1
  293. package/utils/assert.ts +0 -18
  294. package/utils/asyncQueue.ts +17 -21
  295. package/utils/logger.ts +12 -11
  296. package/utils/mod.ts +0 -3
  297. package/utils/utils.ts +6 -0
  298. package/dist/mqttPacket/puback.d.ts +0 -16
  299. package/dist/mqttPacket/puback.d.ts.map +0 -1
  300. package/dist/mqttPacket/puback.js +0 -21
  301. package/dist/mqttPacket/puback.js.map +0 -1
  302. package/dist/mqttPacket/pubcomp.d.ts +0 -17
  303. package/dist/mqttPacket/pubcomp.d.ts.map +0 -1
  304. package/dist/mqttPacket/pubcomp.js +0 -21
  305. package/dist/mqttPacket/pubcomp.js.map +0 -1
  306. package/dist/mqttPacket/pubrec.d.ts +0 -17
  307. package/dist/mqttPacket/pubrec.d.ts.map +0 -1
  308. package/dist/mqttPacket/pubrec.js +0 -21
  309. package/dist/mqttPacket/pubrec.js.map +0 -1
  310. package/dist/mqttPacket/pubrel.d.ts +0 -17
  311. package/dist/mqttPacket/pubrel.d.ts.map +0 -1
  312. package/dist/mqttPacket/pubrel.js +0 -21
  313. package/dist/mqttPacket/pubrel.js.map +0 -1
  314. package/dist/utils/args.d.ts +0 -28
  315. package/dist/utils/args.d.ts.map +0 -1
  316. package/dist/utils/args.js +0 -76
  317. package/dist/utils/args.js.map +0 -1
  318. package/dist/utils/platform.d.ts +0 -5
  319. package/dist/utils/platform.d.ts.map +0 -1
  320. package/dist/utils/platform.js +0 -8
  321. package/dist/utils/platform.js.map +0 -1
  322. package/mqttPacket/puback.test.ts +0 -55
  323. package/mqttPacket/puback.ts +0 -34
  324. package/mqttPacket/pubcomp.test.ts +0 -55
  325. package/mqttPacket/pubcomp.ts +0 -35
  326. package/mqttPacket/pubrec.test.ts +0 -55
  327. package/mqttPacket/pubrec.ts +0 -35
  328. package/mqttPacket/pubrel.test.ts +0 -55
  329. package/mqttPacket/pubrel.ts +0 -35
  330. package/utils/args.ts +0 -103
  331. package/utils/platform.ts +0 -8
package/mqttPacket/mod.ts CHANGED
@@ -7,39 +7,64 @@
7
7
 
8
8
  import type {
9
9
  ClientId,
10
+ CodecOpts,
10
11
  Dup,
11
12
  PacketId,
12
13
  Payload,
14
+ ProtocolLevel,
13
15
  QoS,
14
16
  ReturnCodes,
15
17
  TAuthenticationResult,
16
18
  Topic,
17
19
  TopicFilter,
18
20
  TPacketType,
21
+ TReasonCode,
22
+ TRetainHandling,
23
+ UTF8StringPair,
19
24
  } from "./types.ts";
25
+
26
+ export { MQTTLevel } from "./protocolLevels.ts";
27
+ export { RetainHandling } from "./RetainHandling.ts";
28
+ export { ReasonCode, ReasonCodeByNumber } from "./ReasonCode.ts";
20
29
  import { PacketNameByType, PacketType } from "./PacketType.ts";
21
30
  import { invalidTopic, invalidTopicFilter, invalidUTF8 } from "./validators.ts";
22
31
  import { decodeLength, encodeLength } from "./length.ts";
23
- import { connect, type ConnectPacket } from "./connect.ts";
24
- import { connack, type ConnackPacket } from "./connack.ts";
32
+ import { connect } from "./connect.ts";
33
+ import { connack } from "./connack.ts";
25
34
  import {
26
35
  AuthenticationResult,
27
36
  AuthenticationResultByNumber,
28
37
  } from "./AuthenticationResult.ts";
29
- import { publish, type PublishPacket } from "./publish.ts";
30
- import { puback, type PubackPacket } from "./puback.ts";
31
- import { pubrec, type PubrecPacket } from "./pubrec.ts";
32
- import { pubrel, type PubrelPacket } from "./pubrel.ts";
33
- import { pubcomp, type PubcompPacket } from "./pubcomp.ts";
34
- import { subscribe, type SubscribePacket } from "./subscribe.ts";
35
- import { suback, type SubackPacket } from "./suback.ts";
36
- import { unsubscribe, type UnsubscribePacket } from "./unsubscribe.ts";
37
- import { unsuback, type UnsubackPacket } from "./unsuback.ts";
38
- import { pingreq, type PingreqPacket } from "./pingreq.ts";
39
- import { pingres, type PingresPacket } from "./pingres.ts";
40
- import { disconnect, type DisconnectPacket } from "./disconnect.ts";
38
+ import { publish } from "./publish.ts";
39
+ import { anyAck } from "./pubblishAcks.ts";
40
+ import { subscribe } from "./subscribe.ts";
41
+ import { suback } from "./suback.ts";
42
+ import { unsubscribe } from "./unsubscribe.ts";
43
+ import { unsuback } from "./unsuback.ts";
44
+ import { pingreq } from "./pingreq.ts";
45
+ import { pingres } from "./pingres.ts";
46
+ import { disconnect } from "./disconnect.ts";
47
+ import { auth } from "./auth.ts";
41
48
  import { DecoderError } from "./decoder.ts";
42
49
 
50
+ import type { ConnectPacket } from "./connect.ts";
51
+ import type { ConnackPacket } from "./connack.ts";
52
+ import type { PublishPacket } from "./publish.ts";
53
+ import type {
54
+ PubackPacket,
55
+ PubcompPacket,
56
+ PubrecPacket,
57
+ PubrelPacket,
58
+ } from "./pubblishAcks.ts";
59
+ import type { SubscribePacket } from "./subscribe.ts";
60
+ import type { SubackPacket } from "./suback.ts";
61
+ import type { UnsubscribePacket } from "./unsubscribe.ts";
62
+ import type { UnsubackPacket } from "./unsuback.ts";
63
+ import type { PingreqPacket } from "./pingreq.ts";
64
+ import type { PingresPacket } from "./pingres.ts";
65
+ import type { DisconnectPacket } from "./disconnect.ts";
66
+ import type { AuthPacket } from "./auth.ts";
67
+
43
68
  /**
44
69
  * this can be any possible MQTT packet
45
70
  */
@@ -57,10 +82,13 @@ export type AnyPacket =
57
82
  | UnsubackPacket
58
83
  | PingreqPacket
59
84
  | PingresPacket
60
- | DisconnectPacket;
85
+ | DisconnectPacket
86
+ | AuthPacket;
61
87
 
62
88
  export type {
89
+ AuthPacket,
63
90
  ClientId,
91
+ CodecOpts,
64
92
  ConnackPacket,
65
93
  ConnectPacket,
66
94
  DisconnectPacket,
@@ -69,6 +97,7 @@ export type {
69
97
  Payload,
70
98
  PingreqPacket,
71
99
  PingresPacket,
100
+ ProtocolLevel,
72
101
  PubackPacket,
73
102
  PubcompPacket,
74
103
  PublishPacket,
@@ -82,8 +111,11 @@ export type {
82
111
  Topic,
83
112
  TopicFilter,
84
113
  TPacketType,
114
+ TReasonCode,
115
+ TRetainHandling,
85
116
  UnsubackPacket,
86
117
  UnsubscribePacket,
118
+ UTF8StringPair,
87
119
  };
88
120
 
89
121
  export type { Subscription } from "./subscribe.ts";
@@ -109,10 +141,10 @@ export const packetsByType = [
109
141
  connect, // 1
110
142
  connack, // 2
111
143
  publish, // 3
112
- puback, // 4
113
- pubrec, // 5
114
- pubrel, // 6
115
- pubcomp, // 7
144
+ anyAck, // 4 puback
145
+ anyAck, // 5 pubrec
146
+ anyAck, // 6 pubrel
147
+ anyAck, // 7 pubcomp
116
148
  subscribe, // 8
117
149
  suback, // 9
118
150
  unsubscribe, // 10
@@ -120,36 +152,29 @@ export const packetsByType = [
120
152
  pingreq, // 12
121
153
  pingres, // 13
122
154
  disconnect, // 14
155
+ auth, // 15
123
156
  ] as const;
124
157
 
125
158
  /**
126
159
  * @function encode
127
160
  * @description Encodes an MQTT packet object into a binary Uint8Array format
128
161
  * @param {AnyPacket} packet - The MQTT packet object to encode
162
+ * @param {CodecOpts} codecOpts - options to use during encoding
129
163
  * @returns {Uint8Array} The encoded packet as a binary buffer
130
164
  * @throws {Error} If packet encoding fails
131
165
  */
132
- export function encode(packet: AnyPacket): Uint8Array {
166
+ export function encode(
167
+ packet: AnyPacket,
168
+ codecOpts: CodecOpts,
169
+ ): Uint8Array {
133
170
  const packetType: number = packet.type;
134
171
  // deno-lint-ignore no-explicit-any
135
172
  const pkt: any = packet;
136
- const encoded = packetsByType[packetType]?.encode(pkt);
173
+ const encoded = packetsByType[packetType]?.encode(pkt, codecOpts);
137
174
  if (!encoded) {
138
175
  throw Error("Packet encoding failed");
139
176
  }
140
- const { flags, bytes } = encoded;
141
- const encodedLength = encodeLength(bytes.length);
142
- const buflenght = 1 + encodedLength.length + bytes.length;
143
- const buffer = new Uint8Array(buflenght);
144
- let offset = 0;
145
- buffer[offset++] = (packetType << 4) | flags;
146
- for (let i = 0; i < encodedLength.length; i++) {
147
- buffer[offset++] = encodedLength[i];
148
- }
149
- for (let i = 0; i < bytes.length; i++) {
150
- buffer[offset++] = bytes[i];
151
- }
152
- return buffer;
177
+ return encoded;
153
178
  }
154
179
 
155
180
  /**
@@ -157,38 +182,50 @@ export function encode(packet: AnyPacket): Uint8Array {
157
182
  * @description Decodes a packet payload from binary format into an MQTT packet object
158
183
  * @param {number} firstByte - The first byte of the MQTT packet containing type and flags
159
184
  * @param {Uint8Array} buffer - The binary buffer containing the packet payload
185
+ * @param {CodecOpts} codecOpts - options to use during encoding
160
186
  * @returns {AnyPacket} The decoded MQTT packet object
161
- * @throws {Error} If packet decoding fails
187
+ * @throws {DecoderError} If packet decoding fails
162
188
  */
163
189
 
164
190
  export function decodePayload(
165
191
  firstByte: number,
166
192
  buffer: Uint8Array,
193
+ codecOpts: CodecOpts,
167
194
  ): AnyPacket {
168
195
  const packetType = firstByte >> 4;
169
196
  const flags = firstByte & 0x0f;
170
- const packet = packetsByType[packetType]?.decode(buffer, flags);
197
+ const packet = packetsByType[packetType]?.decode(
198
+ buffer,
199
+ flags,
200
+ codecOpts,
201
+ packetType as TPacketType,
202
+ );
171
203
  if (packet !== undefined) {
172
204
  return packet;
173
205
  }
174
- throw new Error("packet decoding failed");
206
+ throw new DecoderError("packet decoding failed");
175
207
  }
176
208
 
177
209
  /**
178
210
  * @function decode
179
211
  * @description Decodes a complete MQTT packet from binary format into a packet object
212
+ *
180
213
  * @param {Uint8Array} buffer - The binary buffer containing the complete MQTT packet
214
+ * @param {CodecOpts} codecOpts - the options for the decoder
181
215
  * @returns {AnyPacket} The decoded MQTT packet object
182
216
  * @throws {DecoderError} If packet decoding fails due to invalid format or insufficient data
183
217
  */
184
- export function decode(buffer: Uint8Array): AnyPacket {
218
+ export function decode(
219
+ buffer: Uint8Array,
220
+ codecOpts: CodecOpts,
221
+ ): AnyPacket {
185
222
  if (buffer.length < 2) {
186
223
  throw new DecoderError("Packet decoding failed");
187
224
  }
188
225
  const { length, numLengthBytes } = decodeLength(buffer, 1);
189
226
  const start = numLengthBytes + 1;
190
227
  const end = start + length;
191
- return decodePayload(buffer[0], buffer.subarray(start, end));
228
+ return decodePayload(buffer[0], buffer.subarray(start, end), codecOpts);
192
229
  }
193
230
 
194
231
  export { getLengthDecoder } from "../mqttPacket/length.ts";
@@ -2,13 +2,58 @@ import { PacketType } from "./PacketType.ts";
2
2
  import assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
4
 
5
- import { decode, encode } from "./mod.ts";
5
+ import { decode, encode, MQTTLevel } from "./mod.ts";
6
+ import type { CodecOpts } from "./mod.ts";
6
7
 
7
- test("encode Pingreq", () => {
8
+ const codecOptsV4: CodecOpts = {
9
+ protocolLevel: MQTTLevel.v4,
10
+ maxIncomingPacketSize: 0xffff,
11
+ maxOutgoingPacketSize: 0xffff,
12
+ };
13
+
14
+ const codecOptsV5: CodecOpts = {
15
+ protocolLevel: MQTTLevel.v5,
16
+ maxIncomingPacketSize: 0xffff,
17
+ maxOutgoingPacketSize: 0xffff,
18
+ };
19
+
20
+ test("encode Pingreq v4", () => {
21
+ assert.deepStrictEqual(
22
+ encode({
23
+ type: PacketType.pingreq,
24
+ protocolLevel: MQTTLevel.v4,
25
+ }, codecOptsV4),
26
+ Uint8Array.from([
27
+ // fixedHeader
28
+ 192, // packetType + flags
29
+ 0, // remainingLength
30
+ ]),
31
+ );
32
+ });
33
+
34
+ test("decode Pingreq v4", () => {
35
+ assert.deepStrictEqual(
36
+ decode(
37
+ Uint8Array.from([
38
+ // fixedHeader
39
+ 192, // packetType + flags
40
+ 0, // remainingLength
41
+ ]),
42
+ codecOptsV4,
43
+ ),
44
+ {
45
+ type: PacketType.pingreq,
46
+ protocolLevel: MQTTLevel.v4,
47
+ },
48
+ );
49
+ });
50
+
51
+ test("encode Pingreq v5", () => {
8
52
  assert.deepStrictEqual(
9
53
  encode({
10
54
  type: PacketType.pingreq,
11
- }),
55
+ protocolLevel: MQTTLevel.v5,
56
+ }, codecOptsV5),
12
57
  Uint8Array.from([
13
58
  // fixedHeader
14
59
  192, // packetType + flags
@@ -17,7 +62,7 @@ test("encode Pingreq", () => {
17
62
  );
18
63
  });
19
64
 
20
- test("decode Pingreq", () => {
65
+ test("decode Pingreq v5", () => {
21
66
  assert.deepStrictEqual(
22
67
  decode(
23
68
  Uint8Array.from([
@@ -25,9 +70,11 @@ test("decode Pingreq", () => {
25
70
  192, // packetType + flags
26
71
  0, // remainingLength
27
72
  ]),
73
+ codecOptsV5,
28
74
  ),
29
75
  {
30
76
  type: PacketType.pingreq,
77
+ protocolLevel: MQTTLevel.v5,
31
78
  },
32
79
  );
33
80
  });
@@ -43,6 +90,7 @@ test("decode invalid Pingreq", () => {
43
90
  0,
44
91
  0,
45
92
  ]),
93
+ codecOptsV4,
46
94
  ),
47
95
  Error,
48
96
  "too long",
@@ -1,28 +1,41 @@
1
1
  import { PacketType } from "./PacketType.ts";
2
2
  import { hasEmptyFlags, isEmptyBuf } from "./decoder.ts";
3
- import type { TPacketType } from "./types.ts";
3
+ import type { CodecOpts, ProtocolLevel, TPacketType } from "./types.ts";
4
4
 
5
5
  /**
6
6
  * PingreqPacket is a packet that is sent to the server to keep the connection alive
7
7
  */
8
8
  export type PingreqPacket = {
9
9
  type: TPacketType;
10
+ protocolLevel: ProtocolLevel;
10
11
  };
11
12
 
13
+ const PINGRES_PACKET = new Uint8Array([PacketType.pingreq << 4, 0]);
14
+
12
15
  export const pingreq: {
13
- encode(_packet: PingreqPacket): { flags: number; bytes: number[] };
14
- decode(buffer: Uint8Array, flags: number): PingreqPacket;
16
+ encode(_packet: PingreqPacket, _codecOpts: CodecOpts): Uint8Array;
17
+ decode(
18
+ buffer: Uint8Array,
19
+ flags: number,
20
+ codecOpts: CodecOpts,
21
+ _packetType: TPacketType,
22
+ ): PingreqPacket;
15
23
  } = {
16
- encode(_packet: PingreqPacket): { flags: number; bytes: number[] } {
17
- const flags = 0;
18
- return { flags, bytes: [] };
24
+ encode(_packet: PingreqPacket, _codecOpts: CodecOpts): Uint8Array {
25
+ return PINGRES_PACKET;
19
26
  },
20
27
 
21
- decode(buffer: Uint8Array, flags: number): PingreqPacket {
28
+ decode(
29
+ buffer: Uint8Array,
30
+ flags: number,
31
+ codecOpts: CodecOpts,
32
+ _packetType: TPacketType,
33
+ ): PingreqPacket {
22
34
  hasEmptyFlags(flags);
23
35
  isEmptyBuf(buffer);
24
36
  return {
25
37
  type: PacketType.pingreq,
38
+ protocolLevel: codecOpts.protocolLevel,
26
39
  };
27
40
  },
28
41
  };
@@ -2,13 +2,58 @@ import { PacketType } from "./PacketType.ts";
2
2
  import assert from "node:assert/strict";
3
3
  import { test } from "node:test";
4
4
 
5
- import { decode, encode } from "./mod.ts";
5
+ import { decode, encode, MQTTLevel } from "./mod.ts";
6
+ import type { CodecOpts } from "./mod.ts";
6
7
 
7
- test("encode Pingres", () => {
8
+ const codecOptsV4: CodecOpts = {
9
+ protocolLevel: MQTTLevel.v4,
10
+ maxIncomingPacketSize: 0xffff,
11
+ maxOutgoingPacketSize: 0xffff,
12
+ };
13
+
14
+ const codecOptsV5: CodecOpts = {
15
+ protocolLevel: MQTTLevel.v5,
16
+ maxIncomingPacketSize: 0xffff,
17
+ maxOutgoingPacketSize: 0xffff,
18
+ };
19
+
20
+ test("encode Pingres V4", () => {
21
+ assert.deepStrictEqual(
22
+ encode({
23
+ type: PacketType.pingres,
24
+ protocolLevel: MQTTLevel.v4,
25
+ }, codecOptsV4),
26
+ Uint8Array.from([
27
+ // fixedHeader
28
+ 208, // packetType + flags
29
+ 0, // remainingLength
30
+ ]),
31
+ );
32
+ });
33
+
34
+ test("decode Pingres V4", () => {
35
+ assert.deepStrictEqual(
36
+ decode(
37
+ Uint8Array.from([
38
+ // fixedHeader
39
+ 208, // packetType + flags
40
+ 0, // remainingLength
41
+ ]),
42
+ codecOptsV4,
43
+ ),
44
+ {
45
+ type: PacketType.pingres,
46
+ protocolLevel: MQTTLevel.v4,
47
+ },
48
+ );
49
+ });
50
+
51
+ test("encode Pingres V5", () => {
8
52
  assert.deepStrictEqual(
9
53
  encode({
10
54
  type: PacketType.pingres,
11
- }),
55
+ protocolLevel: MQTTLevel.v5,
56
+ }, codecOptsV5),
12
57
  Uint8Array.from([
13
58
  // fixedHeader
14
59
  208, // packetType + flags
@@ -17,7 +62,7 @@ test("encode Pingres", () => {
17
62
  );
18
63
  });
19
64
 
20
- test("decode Pingres", () => {
65
+ test("decode Pingres V5", () => {
21
66
  assert.deepStrictEqual(
22
67
  decode(
23
68
  Uint8Array.from([
@@ -25,9 +70,11 @@ test("decode Pingres", () => {
25
70
  208, // packetType + flags
26
71
  0, // remainingLength
27
72
  ]),
73
+ codecOptsV5,
28
74
  ),
29
75
  {
30
76
  type: PacketType.pingres,
77
+ protocolLevel: MQTTLevel.v5,
31
78
  },
32
79
  );
33
80
  });
@@ -43,6 +90,7 @@ test("decode invalid Pingres", () => {
43
90
  0,
44
91
  0,
45
92
  ]),
93
+ codecOptsV4,
46
94
  ),
47
95
  Error,
48
96
  "too long",
@@ -1,6 +1,6 @@
1
1
  import { PacketType } from "./PacketType.ts";
2
- import { isEmptyBuf } from "./decoder.ts";
3
- import type { TPacketType } from "./types.ts";
2
+ import { hasEmptyFlags, isEmptyBuf } from "./decoder.ts";
3
+ import type { CodecOpts, ProtocolLevel, TPacketType } from "./types.ts";
4
4
 
5
5
  /**
6
6
  * PingresPacket is an empty packet that is sent by the server in response to a PingreqPacket.
@@ -8,21 +8,35 @@ import type { TPacketType } from "./types.ts";
8
8
  */
9
9
  export type PingresPacket = {
10
10
  type: TPacketType;
11
+ protocolLevel: ProtocolLevel;
11
12
  };
12
13
 
14
+ const PINGRES_PACKET = new Uint8Array([PacketType.pingres << 4, 0]);
15
+
13
16
  export const pingres: {
14
- encode(_packet: PingresPacket): { flags: number; bytes: number[] };
15
- decode(buffer: Uint8Array): PingresPacket;
17
+ encode(packet: PingresPacket, _codecOpts: CodecOpts): Uint8Array;
18
+ decode(
19
+ buffer: Uint8Array,
20
+ flags: number,
21
+ codecOpts: CodecOpts,
22
+ _packetType: TPacketType,
23
+ ): PingresPacket;
16
24
  } = {
17
- encode(_packet: PingresPacket): { flags: number; bytes: number[] } {
18
- const flags = 0;
19
- return { flags, bytes: [] };
25
+ encode(_packet: PingresPacket, _codecOpts: CodecOpts): Uint8Array {
26
+ return PINGRES_PACKET;
20
27
  },
21
28
 
22
- decode(buffer: Uint8Array): PingresPacket {
29
+ decode(
30
+ buffer: Uint8Array,
31
+ flags: number,
32
+ codecOpts: CodecOpts,
33
+ _packetType: TPacketType,
34
+ ): PingresPacket {
35
+ hasEmptyFlags(flags);
23
36
  isEmptyBuf(buffer);
24
37
  return {
25
38
  type: PacketType.pingres,
39
+ protocolLevel: codecOpts.protocolLevel,
26
40
  };
27
41
  },
28
42
  };