abmqtt-dist 0.0.4

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 (152) hide show
  1. package/README.md +14 -0
  2. package/dist/errors/abort.error.d.ts +3 -0
  3. package/dist/errors/abort.error.js +8 -0
  4. package/dist/errors/abort.error.js.map +1 -0
  5. package/dist/errors/connect.error.d.ts +5 -0
  6. package/dist/errors/connect.error.js +12 -0
  7. package/dist/errors/connect.error.js.map +1 -0
  8. package/dist/errors/end-of-stream.error.d.ts +3 -0
  9. package/dist/errors/end-of-stream.error.js +8 -0
  10. package/dist/errors/end-of-stream.error.js.map +1 -0
  11. package/dist/errors/flow-stopped.error.d.ts +3 -0
  12. package/dist/errors/flow-stopped.error.js +8 -0
  13. package/dist/errors/flow-stopped.error.js.map +1 -0
  14. package/dist/errors/illegal-state.error.d.ts +3 -0
  15. package/dist/errors/illegal-state.error.js +8 -0
  16. package/dist/errors/illegal-state.error.js.map +1 -0
  17. package/dist/errors/index.d.ts +8 -0
  18. package/dist/errors/index.js +25 -0
  19. package/dist/errors/index.js.map +1 -0
  20. package/dist/errors/malformed-packet.error.d.ts +3 -0
  21. package/dist/errors/malformed-packet.error.js +8 -0
  22. package/dist/errors/malformed-packet.error.js.map +1 -0
  23. package/dist/errors/subscribe.error.d.ts +3 -0
  24. package/dist/errors/subscribe.error.js +8 -0
  25. package/dist/errors/subscribe.error.js.map +1 -0
  26. package/dist/errors/unexpected-packet.error.d.ts +3 -0
  27. package/dist/errors/unexpected-packet.error.js +8 -0
  28. package/dist/errors/unexpected-packet.error.js.map +1 -0
  29. package/dist/flow/incoming.flows.d.ts +6 -0
  30. package/dist/flow/incoming.flows.js +39 -0
  31. package/dist/flow/incoming.flows.js.map +1 -0
  32. package/dist/flow/index.d.ts +3 -0
  33. package/dist/flow/index.js +20 -0
  34. package/dist/flow/index.js.map +1 -0
  35. package/dist/flow/outgoing.flows.d.ts +12 -0
  36. package/dist/flow/outgoing.flows.js +115 -0
  37. package/dist/flow/outgoing.flows.js.map +1 -0
  38. package/dist/flow/packet-flow.d.ts +17 -0
  39. package/dist/flow/packet-flow.js +3 -0
  40. package/dist/flow/packet-flow.js.map +1 -0
  41. package/dist/index.d.ts +13 -0
  42. package/dist/index.js +30 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/mqtt.base-client.d.ts +54 -0
  45. package/dist/mqtt.base-client.js +102 -0
  46. package/dist/mqtt.base-client.js.map +1 -0
  47. package/dist/mqtt.client.d.ts +75 -0
  48. package/dist/mqtt.client.js +423 -0
  49. package/dist/mqtt.client.js.map +1 -0
  50. package/dist/mqtt.constants.d.ts +34 -0
  51. package/dist/mqtt.constants.js +26 -0
  52. package/dist/mqtt.constants.js.map +1 -0
  53. package/dist/mqtt.listener.d.ts +21 -0
  54. package/dist/mqtt.listener.js +29 -0
  55. package/dist/mqtt.listener.js.map +1 -0
  56. package/dist/mqtt.message.d.ts +14 -0
  57. package/dist/mqtt.message.js +3 -0
  58. package/dist/mqtt.message.js.map +1 -0
  59. package/dist/mqtt.packet.d.ts +9 -0
  60. package/dist/mqtt.packet.js +15 -0
  61. package/dist/mqtt.packet.js.map +1 -0
  62. package/dist/mqtt.parser.d.ts +21 -0
  63. package/dist/mqtt.parser.js +71 -0
  64. package/dist/mqtt.parser.js.map +1 -0
  65. package/dist/mqtt.types.d.ts +52 -0
  66. package/dist/mqtt.types.js +3 -0
  67. package/dist/mqtt.types.js.map +1 -0
  68. package/dist/mqtt.utilities.d.ts +32 -0
  69. package/dist/mqtt.utilities.js +139 -0
  70. package/dist/mqtt.utilities.js.map +1 -0
  71. package/dist/packet-stream.d.ts +37 -0
  72. package/dist/packet-stream.js +150 -0
  73. package/dist/packet-stream.js.map +1 -0
  74. package/dist/packets/connect.request.packet.d.ts +22 -0
  75. package/dist/packets/connect.request.packet.js +41 -0
  76. package/dist/packets/connect.request.packet.js.map +1 -0
  77. package/dist/packets/connect.response.packet.d.ts +18 -0
  78. package/dist/packets/connect.response.packet.js +43 -0
  79. package/dist/packets/connect.response.packet.js.map +1 -0
  80. package/dist/packets/disconnect.request.packet.d.ts +2 -0
  81. package/dist/packets/disconnect.request.packet.js +7 -0
  82. package/dist/packets/disconnect.request.packet.js.map +1 -0
  83. package/dist/packets/index.d.ts +16 -0
  84. package/dist/packets/index.js +33 -0
  85. package/dist/packets/index.js.map +1 -0
  86. package/dist/packets/packet-reader.d.ts +31 -0
  87. package/dist/packets/packet-reader.js +27 -0
  88. package/dist/packets/packet-reader.js.map +1 -0
  89. package/dist/packets/packet-writer.d.ts +48 -0
  90. package/dist/packets/packet-writer.js +58 -0
  91. package/dist/packets/packet-writer.js.map +1 -0
  92. package/dist/packets/ping.request.packet.d.ts +5 -0
  93. package/dist/packets/ping.request.packet.js +17 -0
  94. package/dist/packets/ping.request.packet.js.map +1 -0
  95. package/dist/packets/ping.response.packet.d.ts +5 -0
  96. package/dist/packets/ping.response.packet.js +17 -0
  97. package/dist/packets/ping.response.packet.js.map +1 -0
  98. package/dist/packets/publish.ack.packet.d.ts +8 -0
  99. package/dist/packets/publish.ack.packet.js +19 -0
  100. package/dist/packets/publish.ack.packet.js.map +1 -0
  101. package/dist/packets/publish.complete.packet.d.ts +8 -0
  102. package/dist/packets/publish.complete.packet.js +19 -0
  103. package/dist/packets/publish.complete.packet.js.map +1 -0
  104. package/dist/packets/publish.received.packet.d.ts +8 -0
  105. package/dist/packets/publish.received.packet.js +19 -0
  106. package/dist/packets/publish.received.packet.js.map +1 -0
  107. package/dist/packets/publish.release.packet.d.ts +8 -0
  108. package/dist/packets/publish.release.packet.js +19 -0
  109. package/dist/packets/publish.release.packet.js.map +1 -0
  110. package/dist/packets/publish.request.packet.d.ts +21 -0
  111. package/dist/packets/publish.request.packet.js +55 -0
  112. package/dist/packets/publish.request.packet.js.map +1 -0
  113. package/dist/packets/subscribe.request.packet.d.ts +10 -0
  114. package/dist/packets/subscribe.request.packet.js +15 -0
  115. package/dist/packets/subscribe.request.packet.js.map +1 -0
  116. package/dist/packets/subscribe.response.packet.d.ts +14 -0
  117. package/dist/packets/subscribe.response.packet.js +35 -0
  118. package/dist/packets/subscribe.response.packet.js.map +1 -0
  119. package/dist/packets/unsubscribe.request.packet.d.ts +7 -0
  120. package/dist/packets/unsubscribe.request.packet.js +13 -0
  121. package/dist/packets/unsubscribe.request.packet.js.map +1 -0
  122. package/dist/packets/unsubscribe.response.packet.d.ts +5 -0
  123. package/dist/packets/unsubscribe.response.packet.js +14 -0
  124. package/dist/packets/unsubscribe.response.packet.js.map +1 -0
  125. package/dist/reconnect-strategy/index.d.ts +2 -0
  126. package/dist/reconnect-strategy/index.js +19 -0
  127. package/dist/reconnect-strategy/index.js.map +1 -0
  128. package/dist/reconnect-strategy/mqtts.reconnect-strategy.d.ts +14 -0
  129. package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.d.ts +24 -0
  130. package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.js +56 -0
  131. package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.js.map +1 -0
  132. package/dist/reconnect-strategy/mqtts.reconnect-strategy.js +3 -0
  133. package/dist/reconnect-strategy/mqtts.reconnect-strategy.js.map +1 -0
  134. package/dist/transport/index.d.ts +5 -0
  135. package/dist/transport/index.js +22 -0
  136. package/dist/transport/index.js.map +1 -0
  137. package/dist/transport/socks-tls.transport.d.ts +13 -0
  138. package/dist/transport/socks-tls.transport.js +56 -0
  139. package/dist/transport/socks-tls.transport.js.map +1 -0
  140. package/dist/transport/tcp.transport.d.ts +12 -0
  141. package/dist/transport/tcp.transport.js +26 -0
  142. package/dist/transport/tcp.transport.js.map +1 -0
  143. package/dist/transport/tls.transport.d.ts +13 -0
  144. package/dist/transport/tls.transport.js +46 -0
  145. package/dist/transport/tls.transport.js.map +1 -0
  146. package/dist/transport/transport.d.ts +19 -0
  147. package/dist/transport/transport.js +16 -0
  148. package/dist/transport/transport.js.map +1 -0
  149. package/dist/transport/websocket.transport.d.ts +15 -0
  150. package/dist/transport/websocket.transport.js +40 -0
  151. package/dist/transport/websocket.transport.js.map +1 -0
  152. package/package.json +74 -0
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PacketStream = void 0;
4
+ /*
5
+
6
+ Based on: https://github.com/binsoul/net-mqtt/blob/master/src/PacketStream.php
7
+ Last revision: 10-Sep-19
8
+
9
+ */
10
+ const errors_1 = require("./errors");
11
+ class PacketStream {
12
+ set position(value) {
13
+ this._position = value;
14
+ }
15
+ get position() {
16
+ return this._position;
17
+ }
18
+ get data() {
19
+ return this._data;
20
+ }
21
+ get length() {
22
+ return this._data ? this._data.length : 0;
23
+ }
24
+ get remainingBytes() {
25
+ return this.length - this.position;
26
+ }
27
+ constructor(data, length, buffer) {
28
+ this._position = 0;
29
+ this._data = data ? Buffer.from(data) : length ? Buffer.alloc(length) : buffer ? buffer : Buffer.from([]);
30
+ this.position = 0;
31
+ }
32
+ static fromLength(len) {
33
+ return new PacketStream(undefined, len, undefined);
34
+ }
35
+ static fromBuffer(buf) {
36
+ return new PacketStream(undefined, undefined, buf);
37
+ }
38
+ static fromString(data) {
39
+ return new PacketStream(data, undefined, undefined);
40
+ }
41
+ static empty() {
42
+ return new PacketStream(undefined, undefined, undefined);
43
+ }
44
+ static fromHex(hex) {
45
+ return PacketStream.fromBuffer(Buffer.from(hex, 'hex'));
46
+ }
47
+ /**
48
+ *
49
+ * @param {number} steps - steps to move
50
+ * @returns {number} Position before moving
51
+ */
52
+ move(steps = 1) {
53
+ this._position += steps;
54
+ if (this._position > this.length)
55
+ throw new errors_1.EndOfStreamError('Reached end of stream');
56
+ return this._position - steps;
57
+ }
58
+ // General
59
+ seek(len) {
60
+ this.move(len);
61
+ return this;
62
+ }
63
+ cut() {
64
+ this._data = this._data.slice(this._position) || undefined;
65
+ this._position = 0;
66
+ return this;
67
+ }
68
+ // Write
69
+ write(data, move = true) {
70
+ if (this._data)
71
+ this._data = Buffer.concat([this._data, data]);
72
+ else
73
+ this._data = data;
74
+ if (move)
75
+ this.move(data.length);
76
+ return this;
77
+ }
78
+ writeRawString(data) {
79
+ return this.write(Buffer.from(data));
80
+ }
81
+ writeByte(num) {
82
+ this.write(Buffer.from([num]));
83
+ return this;
84
+ }
85
+ writeWord(num) {
86
+ return this.write(Buffer.from([(num & 0xff00) >> 8, num & 0xff]));
87
+ }
88
+ writeString(str) {
89
+ this.writeWord(Buffer.byteLength(str));
90
+ return this.writeRawString(str);
91
+ }
92
+ writeRawAndLength(data) {
93
+ this.writeWord(data.byteLength);
94
+ return this.write(data);
95
+ }
96
+ writeVariableByteInteger(value) {
97
+ let digit = 0;
98
+ do {
99
+ digit = value % 128 | 0;
100
+ value = (value / 128) | 0;
101
+ if (value > 0)
102
+ digit = digit | 0x80;
103
+ this.writeByte(digit);
104
+ } while (value > 0);
105
+ return this;
106
+ }
107
+ // Read
108
+ read(len) {
109
+ if (this.position > this.length || len > this.length - this.position) {
110
+ throw new errors_1.EndOfStreamError(`End of stream reached when trying to read ${len} bytes. content length=${this.length}, position=${this.position}`);
111
+ }
112
+ const buf = this._data.slice(this._position, this.position + len);
113
+ this.move(len);
114
+ return buf;
115
+ }
116
+ readSlice(end) {
117
+ const buf = this._data.slice(this._position, end);
118
+ this.move(buf.length);
119
+ return buf;
120
+ }
121
+ readByte() {
122
+ return this._data.readUInt8(this.move(1));
123
+ }
124
+ readWord() {
125
+ return this._data.readUInt16BE(this.move(2));
126
+ }
127
+ readString() {
128
+ const len = this.readWord();
129
+ return this.read(len).toString('utf8');
130
+ }
131
+ readStringAsBuffer() {
132
+ return this.read(this.readWord());
133
+ }
134
+ readVariableByteInteger() {
135
+ let value = 0;
136
+ let multiplier = 1;
137
+ let encodedByte;
138
+ do {
139
+ encodedByte = this.readByte();
140
+ value += (encodedByte & 0x7f) * multiplier;
141
+ if (multiplier > 128 * 128 * 128) {
142
+ throw new Error(`Invalid variable byte integer ${this.position}/${this.length}; currentValue: ${value}`);
143
+ }
144
+ multiplier *= 0x80;
145
+ } while ((encodedByte & 0x80) !== 0);
146
+ return value;
147
+ }
148
+ }
149
+ exports.PacketStream = PacketStream;
150
+ //# sourceMappingURL=packet-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-stream.js","sourceRoot":"","sources":["../src/packet-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { PacketWriteResult } from '../mqtt.packet';
2
+ import { PacketStream } from '../packet-stream';
3
+ export type ConnectRequestOptions = Partial<RequiredConnectRequestOptions>;
4
+ export interface RequiredConnectRequestOptions {
5
+ protocolLevel: number;
6
+ protocolName: string;
7
+ clientId: string;
8
+ keepAlive: number;
9
+ will?: {
10
+ topic: string;
11
+ message: Buffer | string;
12
+ retained?: boolean;
13
+ qosLevel?: number;
14
+ };
15
+ username?: string;
16
+ password?: Buffer | string;
17
+ clean: boolean;
18
+ connectDelay?: number;
19
+ signal?: AbortSignal;
20
+ }
21
+ export declare function writeConnectPacket(stream: PacketStream, options: RequiredConnectRequestOptions): PacketWriteResult;
22
+ export declare function makeFlags(options: ConnectRequestOptions): number;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeConnectPacket = writeConnectPacket;
4
+ exports.makeFlags = makeFlags;
5
+ const errors_1 = require("../errors");
6
+ const mqtt_utilities_1 = require("../mqtt.utilities");
7
+ function writeConnectPacket(stream, options) {
8
+ // Variable Header
9
+ stream
10
+ .writeString(options.protocolName)
11
+ .writeByte(options.protocolLevel)
12
+ .writeByte(makeFlags(options))
13
+ .writeWord(options.keepAlive);
14
+ // Payload
15
+ stream.writeString(options.clientId);
16
+ options.will && stream.writeString(options.will.topic).writeRawAndLength((0, mqtt_utilities_1.toBuffer)(options.will.message));
17
+ options.username && stream.writeString(options.username);
18
+ options.password && stream.writeRawAndLength((0, mqtt_utilities_1.toBuffer)(options.password));
19
+ return {};
20
+ }
21
+ function makeFlags(options) {
22
+ if (!options)
23
+ return 0;
24
+ if ((0, mqtt_utilities_1.notUndefined)(options.password) && !(0, mqtt_utilities_1.notUndefined)(options.username))
25
+ throw new errors_1.MalformedPacketError('MQTT-3.1.2-22 If the User Name Flag is set to 0, the Password Flag MUST be set to 0');
26
+ let flags = 0;
27
+ if ((0, mqtt_utilities_1.notUndefined)(options.username))
28
+ flags |= 0x1 << 7;
29
+ if ((0, mqtt_utilities_1.notUndefined)(options.password))
30
+ flags |= 0x1 << 6;
31
+ if ((0, mqtt_utilities_1.notUndefined)(options.will)) {
32
+ if (options.will.retained)
33
+ flags |= 0x1 << 5;
34
+ flags |= ((options.will.qosLevel ?? 0) & 0x03) << 3;
35
+ flags |= 0x1 << 2;
36
+ }
37
+ if (options.clean)
38
+ flags |= 0x1 << 1;
39
+ return flags;
40
+ }
41
+ //# sourceMappingURL=connect.request.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.request.packet.js","sourceRoot":"","sources":["../../src/packets/connect.request.packet.ts"],"names":[],"mappings":";;AAyBA,gDAeC;AAED,8BAmBC;AA3DD,sCAAiD;AACjD,sDAA2D;AAsB3D,SAAgB,kBAAkB,CAAC,MAAoB,EAAE,OAAsC;IAC3F,kBAAkB;IAClB,MAAM;SACD,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC;SACjC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;SAChC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC7B,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAElC,UAAU;IACV,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAA,yBAAQ,EAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACzG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAA,yBAAQ,EAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEzE,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAgB,SAAS,CAAC,OAA8B;IACpD,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,IAAA,6BAAY,EAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,6BAAY,EAAC,OAAO,CAAC,QAAQ,CAAC;QACjE,MAAM,IAAI,6BAAoB,CAC1B,qFAAqF,CACxF,CAAC;IAEN,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,IAAA,6BAAY,EAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,IAAA,6BAAY,EAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IACtD,IAAI,IAAA,6BAAY,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ;YAAE,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;QAE7C,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,CAAC,KAAK;QAAE,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;IAErC,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { PacketStream } from '../packet-stream';
2
+ export declare class ConnectResponsePacket {
3
+ ackFlags: number;
4
+ returnCode: ConnectReturnCode;
5
+ get sessionPresent(): boolean;
6
+ get isSuccess(): boolean;
7
+ get errorName(): keyof typeof ConnectReturnCode | string;
8
+ constructor(ackFlags: number, returnCode: ConnectReturnCode);
9
+ }
10
+ export declare function readConnectResponsePacket(stream: PacketStream, remaining: number): ConnectResponsePacket;
11
+ export declare enum ConnectReturnCode {
12
+ Accepted = 0,
13
+ UnacceptableProtocolVersion = 1,
14
+ IdentifierRejected = 2,
15
+ ServerUnavailable = 3,
16
+ BadUsernameOrPassword = 4,
17
+ NotAuthorized = 5
18
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConnectReturnCode = exports.ConnectResponsePacket = void 0;
4
+ exports.readConnectResponsePacket = readConnectResponsePacket;
5
+ const mqtt_utilities_1 = require("../mqtt.utilities");
6
+ class ConnectResponsePacket {
7
+ get sessionPresent() {
8
+ return !!(this.ackFlags & 0x1);
9
+ }
10
+ get isSuccess() {
11
+ return this.returnCode === ConnectReturnCode.Accepted;
12
+ }
13
+ get errorName() {
14
+ return Object.entries(ConnectReturnCode).find(([, v]) => v === this.returnCode)?.[0] ?? 'Unknown';
15
+ }
16
+ constructor(ackFlags, returnCode) {
17
+ this.ackFlags = ackFlags;
18
+ this.returnCode = returnCode;
19
+ }
20
+ }
21
+ exports.ConnectResponsePacket = ConnectResponsePacket;
22
+ function readConnectResponsePacket(stream, remaining) {
23
+ (0, mqtt_utilities_1.expectRemainingLength)(remaining, 2);
24
+ const ack = stream.readByte();
25
+ const returnCode = stream.readByte();
26
+ if (ack > 1) {
27
+ throw new Error('Invalid ack');
28
+ }
29
+ else if (returnCode > 5) {
30
+ throw new Error('Invalid return code');
31
+ }
32
+ return new ConnectResponsePacket(ack, returnCode);
33
+ }
34
+ var ConnectReturnCode;
35
+ (function (ConnectReturnCode) {
36
+ ConnectReturnCode[ConnectReturnCode["Accepted"] = 0] = "Accepted";
37
+ ConnectReturnCode[ConnectReturnCode["UnacceptableProtocolVersion"] = 1] = "UnacceptableProtocolVersion";
38
+ ConnectReturnCode[ConnectReturnCode["IdentifierRejected"] = 2] = "IdentifierRejected";
39
+ ConnectReturnCode[ConnectReturnCode["ServerUnavailable"] = 3] = "ServerUnavailable";
40
+ ConnectReturnCode[ConnectReturnCode["BadUsernameOrPassword"] = 4] = "BadUsernameOrPassword";
41
+ ConnectReturnCode[ConnectReturnCode["NotAuthorized"] = 5] = "NotAuthorized";
42
+ })(ConnectReturnCode || (exports.ConnectReturnCode = ConnectReturnCode = {}));
43
+ //# sourceMappingURL=connect.response.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect.response.packet.js","sourceRoot":"","sources":["../../src/packets/connect.response.packet.ts"],"names":[],"mappings":";;;AAmBA,8DAUC;AA5BD,sDAA0D;AAE1D,MAAa,qBAAqB;IAC9B,IAAI,cAAc;QACd,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,UAAU,KAAK,iBAAiB,CAAC,QAAQ,CAAC;IAC1D,CAAC;IACD,IAAI,SAAS;QACT,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;IACtG,CAAC;IACD,YACW,QAAgB,EAChB,UAA6B;QAD7B,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAAmB;IACrC,CAAC;CACP;AAdD,sDAcC;AAED,SAAgB,yBAAyB,CAAC,MAAoB,EAAE,SAAiB;IAC7E,IAAA,sCAAqB,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IACrC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,qBAAqB,CAAC,GAAG,EAAE,UAA+B,CAAC,CAAC;AAC3E,CAAC;AAED,IAAY,iBAOX;AAPD,WAAY,iBAAiB;IACzB,iEAAQ,CAAA;IACR,uGAA2B,CAAA;IAC3B,qFAAkB,CAAA;IAClB,mFAAiB,CAAA;IACjB,2FAAqB,CAAA;IACrB,2EAAa,CAAA;AACjB,CAAC,EAPW,iBAAiB,iCAAjB,iBAAiB,QAO5B"}
@@ -0,0 +1,2 @@
1
+ import { PacketWriteResult } from '../mqtt.packet';
2
+ export declare function writeDisconnectRequestPacket(): PacketWriteResult;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeDisconnectRequestPacket = writeDisconnectRequestPacket;
4
+ function writeDisconnectRequestPacket() {
5
+ return {};
6
+ }
7
+ //# sourceMappingURL=disconnect.request.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect.request.packet.js","sourceRoot":"","sources":["../../src/packets/disconnect.request.packet.ts"],"names":[],"mappings":";;AAEA,oEAEC;AAFD,SAAgB,4BAA4B;IACxC,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * from './connect.request.packet';
2
+ export * from './connect.response.packet';
3
+ export * from './disconnect.request.packet';
4
+ export * from './ping.request.packet';
5
+ export * from './ping.response.packet';
6
+ export * from './publish.ack.packet';
7
+ export * from './publish.complete.packet';
8
+ export * from './publish.received.packet';
9
+ export * from './publish.release.packet';
10
+ export * from './publish.request.packet';
11
+ export * from './subscribe.request.packet';
12
+ export * from './subscribe.response.packet';
13
+ export * from './unsubscribe.request.packet';
14
+ export * from './unsubscribe.response.packet';
15
+ export * from './packet-reader';
16
+ export * from './packet-writer';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./connect.request.packet"), exports);
18
+ __exportStar(require("./connect.response.packet"), exports);
19
+ __exportStar(require("./disconnect.request.packet"), exports);
20
+ __exportStar(require("./ping.request.packet"), exports);
21
+ __exportStar(require("./ping.response.packet"), exports);
22
+ __exportStar(require("./publish.ack.packet"), exports);
23
+ __exportStar(require("./publish.complete.packet"), exports);
24
+ __exportStar(require("./publish.received.packet"), exports);
25
+ __exportStar(require("./publish.release.packet"), exports);
26
+ __exportStar(require("./publish.request.packet"), exports);
27
+ __exportStar(require("./subscribe.request.packet"), exports);
28
+ __exportStar(require("./subscribe.response.packet"), exports);
29
+ __exportStar(require("./unsubscribe.request.packet"), exports);
30
+ __exportStar(require("./unsubscribe.response.packet"), exports);
31
+ __exportStar(require("./packet-reader"), exports);
32
+ __exportStar(require("./packet-writer"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/packets/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,4DAA0C;AAC1C,8DAA4C;AAC5C,wDAAsC;AACtC,yDAAuC;AACvC,uDAAqC;AACrC,4DAA0C;AAC1C,4DAA0C;AAC1C,2DAAyC;AACzC,2DAAyC;AACzC,6DAA2C;AAC3C,8DAA4C;AAC5C,+DAA6C;AAC7C,gEAA8C;AAC9C,kDAAgC;AAChC,kDAAgC"}
@@ -0,0 +1,31 @@
1
+ import { PacketType } from '../mqtt.constants';
2
+ import { PacketStream } from '../packet-stream';
3
+ import { ConnectResponsePacket } from './connect.response.packet';
4
+ import { PublishRequestPacket } from './publish.request.packet';
5
+ import { PublishAckPacket } from './publish.ack.packet';
6
+ import { PublishReleasePacket } from './publish.release.packet';
7
+ import { PublishReceivedPacket } from './publish.received.packet';
8
+ import { PublishCompletePacket } from './publish.complete.packet';
9
+ import { SubscribeResponsePacket } from './subscribe.response.packet';
10
+ import { UnsubscribeResponsePacket } from './unsubscribe.response.packet';
11
+ import { PingResponsePacket } from './ping.response.packet';
12
+ import { PingRequestPacket } from './ping.request.packet';
13
+ export type PacketReadResultMap = {
14
+ [x in PacketType]: unknown;
15
+ };
16
+ export type PacketReadMap<Results extends PacketReadResultMap> = {
17
+ [P in PacketType]?: (stream: PacketStream, remainingLength: number, flags: number) => Results[P];
18
+ };
19
+ export interface DefaultPacketReadResultMap extends PacketReadResultMap {
20
+ [PacketType.ConnAck]: ConnectResponsePacket;
21
+ [PacketType.Publish]: PublishRequestPacket;
22
+ [PacketType.PubAck]: PublishAckPacket;
23
+ [PacketType.PubRel]: PublishReleasePacket;
24
+ [PacketType.PubRec]: PublishReceivedPacket;
25
+ [PacketType.PubComp]: PublishCompletePacket;
26
+ [PacketType.SubAck]: SubscribeResponsePacket;
27
+ [PacketType.UnsubAck]: UnsubscribeResponsePacket;
28
+ [PacketType.PingResp]: PingResponsePacket;
29
+ [PacketType.PingReq]: PingRequestPacket;
30
+ }
31
+ export declare const DefaultPacketReadMap: PacketReadMap<DefaultPacketReadResultMap>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultPacketReadMap = void 0;
4
+ const mqtt_constants_1 = require("../mqtt.constants");
5
+ const connect_response_packet_1 = require("./connect.response.packet");
6
+ const publish_request_packet_1 = require("./publish.request.packet");
7
+ const publish_ack_packet_1 = require("./publish.ack.packet");
8
+ const publish_release_packet_1 = require("./publish.release.packet");
9
+ const publish_received_packet_1 = require("./publish.received.packet");
10
+ const publish_complete_packet_1 = require("./publish.complete.packet");
11
+ const subscribe_response_packet_1 = require("./subscribe.response.packet");
12
+ const unsubscribe_response_packet_1 = require("./unsubscribe.response.packet");
13
+ const ping_response_packet_1 = require("./ping.response.packet");
14
+ const ping_request_packet_1 = require("./ping.request.packet");
15
+ exports.DefaultPacketReadMap = {
16
+ [mqtt_constants_1.PacketType.ConnAck]: connect_response_packet_1.readConnectResponsePacket,
17
+ [mqtt_constants_1.PacketType.Publish]: publish_request_packet_1.readPublishRequestPacket,
18
+ [mqtt_constants_1.PacketType.PubAck]: publish_ack_packet_1.readPublishAckPacket,
19
+ [mqtt_constants_1.PacketType.PubRel]: publish_release_packet_1.readPublishReleasePacket,
20
+ [mqtt_constants_1.PacketType.PubRec]: publish_received_packet_1.readPublishReceivedPacket,
21
+ [mqtt_constants_1.PacketType.PubComp]: publish_complete_packet_1.readPublishCompletePacket,
22
+ [mqtt_constants_1.PacketType.SubAck]: subscribe_response_packet_1.readSubscribeResponsePacket,
23
+ [mqtt_constants_1.PacketType.UnsubAck]: unsubscribe_response_packet_1.readUnsubscribePacket,
24
+ [mqtt_constants_1.PacketType.PingReq]: ping_request_packet_1.readPingRequestPacket,
25
+ [mqtt_constants_1.PacketType.PingResp]: ping_response_packet_1.readPingResponsePacket,
26
+ };
27
+ //# sourceMappingURL=packet-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-reader.js","sourceRoot":"","sources":["../../src/packets/packet-reader.ts"],"names":[],"mappings":";;;AAAA,sDAA+C;AAE/C,uEAA6F;AAC7F,qEAA0F;AAC1F,6DAA8E;AAC9E,qEAA0F;AAC1F,uEAA6F;AAC7F,uEAA6F;AAC7F,2EAAmG;AACnG,+EAAiG;AACjG,iEAAoF;AACpF,+DAAiF;AAoBpE,QAAA,oBAAoB,GAA8C;IAC3E,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,mDAAyB;IAC/C,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,iDAAwB;IAC9C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,yCAAoB;IACzC,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,iDAAwB;IAC7C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,mDAAyB;IAC9C,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,mDAAyB;IAC/C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,uDAA2B;IAChD,CAAC,2BAAU,CAAC,QAAQ,CAAC,EAAE,mDAAqB;IAC5C,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,2CAAqB;IAC3C,CAAC,2BAAU,CAAC,QAAQ,CAAC,EAAE,6CAAsB;CAChD,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { PacketType } from '../mqtt.constants';
2
+ import { RequiredConnectRequestOptions } from './connect.request.packet';
3
+ import { PacketStream } from '../packet-stream';
4
+ import { PacketWriteResult } from '../mqtt.packet';
5
+ import { PublishPacketOptions } from './publish.request.packet';
6
+ import { PublishAckPacketOptions } from './publish.ack.packet';
7
+ import { PublishReceivedPacketOptions } from './publish.received.packet';
8
+ import { PublishReleasedPacketOptions } from './publish.release.packet';
9
+ import { PublishCompletePacketOptions } from './publish.complete.packet';
10
+ import { SubscribePacketOptions } from './subscribe.request.packet';
11
+ import { UnsubscribePacketOptions } from './unsubscribe.request.packet';
12
+ export interface PacketLogger {
13
+ logPacketWrite: (packetType: PacketType, packetInfo: Record<string, string | number | boolean | undefined>) => void;
14
+ }
15
+ export declare class PacketWriter<WriteOptions extends PacketWriteOptionsMap = DefaultPacketWriteOptions> {
16
+ protected logger: PacketLogger;
17
+ protected writeMap: PacketWriteMap<WriteOptions>;
18
+ constructor(logger: PacketLogger, writeMap?: PacketWriteMap<WriteOptions>);
19
+ write<T extends PacketType>(type: T, options?: WriteOptions[T]): Buffer;
20
+ }
21
+ export declare function defaultWrite<T extends PacketType>(type: T, options?: DefaultPacketWriteOptions[T]): WriteData<DefaultPacketWriteOptions, T>;
22
+ export interface WriteData<WriteMap extends PacketWriteOptionsMap, T extends PacketType> {
23
+ type: T;
24
+ options?: WriteMap[T];
25
+ }
26
+ export declare const DefaultPacketWriteMap: PacketWriteMap<DefaultPacketWriteOptions>;
27
+ export type PacketWriteMap<Options extends PacketWriteOptionsMap> = {
28
+ [P in PacketType]?: (stream: PacketStream, options: Options[P]) => PacketWriteResult;
29
+ };
30
+ export type PacketWriteOptionsMap = {
31
+ [x in PacketType]: any;
32
+ };
33
+ export type DefaultPacketWriteOptions = {
34
+ [PacketType.Connect]: RequiredConnectRequestOptions;
35
+ [PacketType.ConnAck]: undefined;
36
+ [PacketType.Publish]: PublishPacketOptions;
37
+ [PacketType.PubAck]: PublishAckPacketOptions;
38
+ [PacketType.PubRec]: PublishReceivedPacketOptions;
39
+ [PacketType.PubRel]: PublishReleasedPacketOptions;
40
+ [PacketType.PubComp]: PublishCompletePacketOptions;
41
+ [PacketType.Subscribe]: SubscribePacketOptions;
42
+ [PacketType.SubAck]: undefined;
43
+ [PacketType.Unsubscribe]: UnsubscribePacketOptions;
44
+ [PacketType.UnsubAck]: undefined;
45
+ [PacketType.PingReq]: undefined;
46
+ [PacketType.PingResp]: undefined;
47
+ [PacketType.Disconnect]: undefined;
48
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultPacketWriteMap = exports.PacketWriter = void 0;
4
+ exports.defaultWrite = defaultWrite;
5
+ const mqtt_constants_1 = require("../mqtt.constants");
6
+ const connect_request_packet_1 = require("./connect.request.packet");
7
+ const packet_stream_1 = require("../packet-stream");
8
+ const publish_request_packet_1 = require("./publish.request.packet");
9
+ const publish_ack_packet_1 = require("./publish.ack.packet");
10
+ const publish_received_packet_1 = require("./publish.received.packet");
11
+ const publish_release_packet_1 = require("./publish.release.packet");
12
+ const publish_complete_packet_1 = require("./publish.complete.packet");
13
+ const subscribe_request_packet_1 = require("./subscribe.request.packet");
14
+ const unsubscribe_request_packet_1 = require("./unsubscribe.request.packet");
15
+ const ping_request_packet_1 = require("./ping.request.packet");
16
+ const ping_response_packet_1 = require("./ping.response.packet");
17
+ class PacketWriter {
18
+ constructor(logger, writeMap = exports.DefaultPacketWriteMap) {
19
+ this.logger = logger;
20
+ this.writeMap = writeMap;
21
+ }
22
+ write(type, options) {
23
+ const packetStream = packet_stream_1.PacketStream.empty();
24
+ const fn = this.writeMap[type];
25
+ if (!fn) {
26
+ throw new Error('No packet function found');
27
+ }
28
+ const result = fn(packetStream, options);
29
+ if (result.flags && (result.flags < 0 || result.flags > 0xf)) {
30
+ throw new Error('Invalid flags');
31
+ }
32
+ this.logger.logPacketWrite(type, { ...options, flags: result.flags ?? 0, identifier: result.identifier });
33
+ const finalStream = packet_stream_1.PacketStream.empty();
34
+ finalStream.writeByte((type << 4) | (result.flags ?? 0));
35
+ //if (packetStream.length === 0) return finalStream.data;
36
+ return finalStream.writeVariableByteInteger(packetStream.length).write(packetStream.data).data;
37
+ }
38
+ }
39
+ exports.PacketWriter = PacketWriter;
40
+ function defaultWrite(type, options) {
41
+ return {
42
+ type,
43
+ options,
44
+ };
45
+ }
46
+ exports.DefaultPacketWriteMap = {
47
+ [mqtt_constants_1.PacketType.Connect]: connect_request_packet_1.writeConnectPacket,
48
+ [mqtt_constants_1.PacketType.Publish]: publish_request_packet_1.writePublishRequestPacket,
49
+ [mqtt_constants_1.PacketType.PubAck]: publish_ack_packet_1.writePublishAckPacket,
50
+ [mqtt_constants_1.PacketType.PubRec]: publish_received_packet_1.writePublishReceivedPacket,
51
+ [mqtt_constants_1.PacketType.PubRel]: publish_release_packet_1.writePublishReleasePacket,
52
+ [mqtt_constants_1.PacketType.PubComp]: publish_complete_packet_1.writePublishCompletePacket,
53
+ [mqtt_constants_1.PacketType.Subscribe]: subscribe_request_packet_1.writeSubscribePacket,
54
+ [mqtt_constants_1.PacketType.Unsubscribe]: unsubscribe_request_packet_1.writeUnsubscribePacket,
55
+ [mqtt_constants_1.PacketType.PingReq]: ping_request_packet_1.writePingRequestPacket,
56
+ [mqtt_constants_1.PacketType.PingResp]: ping_response_packet_1.writePingResponsePacket,
57
+ };
58
+ //# sourceMappingURL=packet-writer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-writer.js","sourceRoot":"","sources":["../../src/packets/packet-writer.ts"],"names":[],"mappings":";;;AA6CA,oCAQC;AArDD,sDAA+C;AAC/C,qEAA6F;AAC7F,oDAAgD;AAEhD,qEAA2F;AAC3F,6DAAsF;AACtF,uEAAqG;AACrG,qEAAmG;AACnG,uEAAqG;AACrG,yEAA0F;AAC1F,6EAAgG;AAChG,+DAA+D;AAC/D,iEAAiE;AAMjE,MAAa,YAAY;IACrB,YACc,MAAoB,EACpB,WAAyC,6BAAqB;QAD9D,WAAM,GAAN,MAAM,CAAc;QACpB,aAAQ,GAAR,QAAQ,CAAsD;IACzE,CAAC;IAEJ,KAAK,CAAuB,IAAO,EAAE,OAAyB;QAC1D,MAAM,YAAY,GAAG,4BAAY,CAAC,KAAK,EAAE,CAAC;QAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAE1G,MAAM,WAAW,GAAG,4BAAY,CAAC,KAAK,EAAE,CAAC;QACzC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,yDAAyD;QAEzD,OAAO,WAAW,CAAC,wBAAwB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IACnG,CAAC;CACJ;AAzBD,oCAyBC;AAED,SAAgB,YAAY,CACxB,IAAO,EACP,OAAsC;IAEtC,OAAO;QACH,IAAI;QACJ,OAAO;KACV,CAAC;AACN,CAAC;AAOY,QAAA,qBAAqB,GAA8C;IAC5E,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,2CAAkB;IACxC,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,kDAAyB;IAC/C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,0CAAqB;IAC1C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,oDAA0B;IAC/C,CAAC,2BAAU,CAAC,MAAM,CAAC,EAAE,kDAAyB;IAC9C,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,oDAA0B;IAChD,CAAC,2BAAU,CAAC,SAAS,CAAC,EAAE,+CAAoB;IAC5C,CAAC,2BAAU,CAAC,WAAW,CAAC,EAAE,mDAAsB;IAChD,CAAC,2BAAU,CAAC,OAAO,CAAC,EAAE,4CAAsB;IAC5C,CAAC,2BAAU,CAAC,QAAQ,CAAC,EAAE,8CAAuB;CACjD,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { PacketWriteResult } from '../mqtt.packet';
2
+ export declare class PingRequestPacket {
3
+ }
4
+ export declare function writePingRequestPacket(): PacketWriteResult;
5
+ export declare function readPingRequestPacket(_: unknown, remaining: number): PingRequestPacket;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PingRequestPacket = void 0;
4
+ exports.writePingRequestPacket = writePingRequestPacket;
5
+ exports.readPingRequestPacket = readPingRequestPacket;
6
+ const mqtt_utilities_1 = require("../mqtt.utilities");
7
+ class PingRequestPacket {
8
+ }
9
+ exports.PingRequestPacket = PingRequestPacket;
10
+ function writePingRequestPacket() {
11
+ return {};
12
+ }
13
+ function readPingRequestPacket(_, remaining) {
14
+ (0, mqtt_utilities_1.expectRemainingLength)(remaining, 0);
15
+ return new PingRequestPacket();
16
+ }
17
+ //# sourceMappingURL=ping.request.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.request.packet.js","sourceRoot":"","sources":["../../src/packets/ping.request.packet.ts"],"names":[],"mappings":";;;AAKA,wDAEC;AAED,sDAGC;AAXD,sDAA0D;AAE1D,MAAa,iBAAiB;CAAG;AAAjC,8CAAiC;AAEjC,SAAgB,sBAAsB;IAClC,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,CAAU,EAAE,SAAiB;IAC/D,IAAA,sCAAqB,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { PacketWriteResult } from '../mqtt.packet';
2
+ export declare class PingResponsePacket {
3
+ }
4
+ export declare function readPingResponsePacket(_: unknown, remaining: number): PingResponsePacket;
5
+ export declare function writePingResponsePacket(): PacketWriteResult;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PingResponsePacket = void 0;
4
+ exports.readPingResponsePacket = readPingResponsePacket;
5
+ exports.writePingResponsePacket = writePingResponsePacket;
6
+ const mqtt_utilities_1 = require("../mqtt.utilities");
7
+ class PingResponsePacket {
8
+ }
9
+ exports.PingResponsePacket = PingResponsePacket;
10
+ function readPingResponsePacket(_, remaining) {
11
+ (0, mqtt_utilities_1.expectRemainingLength)(remaining, 0);
12
+ return new PingResponsePacket();
13
+ }
14
+ function writePingResponsePacket() {
15
+ return {};
16
+ }
17
+ //# sourceMappingURL=ping.response.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.response.packet.js","sourceRoot":"","sources":["../../src/packets/ping.response.packet.ts"],"names":[],"mappings":";;;AAKA,wDAGC;AAED,0DAEC;AAZD,sDAA0D;AAG1D,MAAa,kBAAkB;CAAG;AAAlC,gDAAkC;AAElC,SAAgB,sBAAsB,CAAC,CAAU,EAAE,SAAiB;IAChE,IAAA,sCAAqB,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AACpC,CAAC;AAED,SAAgB,uBAAuB;IACnC,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { IdentifierPacket, PacketWriteResult } from '../mqtt.packet';
2
+ import { PacketStream } from '../packet-stream';
3
+ import { IdentifierData } from '../mqtt.types';
4
+ export declare class PublishAckPacket extends IdentifierPacket {
5
+ }
6
+ export declare function writePublishAckPacket(stream: PacketStream, options: PublishAckPacketOptions): PacketWriteResult;
7
+ export declare function readPublishAckPacket(stream: PacketStream, remaining: number): PublishAckPacket;
8
+ export type PublishAckPacketOptions = IdentifierData;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PublishAckPacket = void 0;
4
+ exports.writePublishAckPacket = writePublishAckPacket;
5
+ exports.readPublishAckPacket = readPublishAckPacket;
6
+ const mqtt_packet_1 = require("../mqtt.packet");
7
+ const mqtt_utilities_1 = require("../mqtt.utilities");
8
+ class PublishAckPacket extends mqtt_packet_1.IdentifierPacket {
9
+ }
10
+ exports.PublishAckPacket = PublishAckPacket;
11
+ function writePublishAckPacket(stream, options) {
12
+ stream.writeWord(options.identifier);
13
+ return { identifier: options.identifier };
14
+ }
15
+ function readPublishAckPacket(stream, remaining) {
16
+ (0, mqtt_utilities_1.expectRemainingLength)(remaining, 2);
17
+ return new PublishAckPacket(stream.readWord());
18
+ }
19
+ //# sourceMappingURL=publish.ack.packet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.ack.packet.js","sourceRoot":"","sources":["../../src/packets/publish.ack.packet.ts"],"names":[],"mappings":";;;AAOA,sDAGC;AAED,oDAGC;AAfD,gDAAqE;AAGrE,sDAA0D;AAE1D,MAAa,gBAAiB,SAAQ,8BAAgB;CAAG;AAAzD,4CAAyD;AAEzD,SAAgB,qBAAqB,CAAC,MAAoB,EAAE,OAAgC;IACxF,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;AAC9C,CAAC;AAED,SAAgB,oBAAoB,CAAC,MAAoB,EAAE,SAAiB;IACxE,IAAA,sCAAqB,EAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,CAAC"}