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.
- package/README.md +14 -0
- package/dist/errors/abort.error.d.ts +3 -0
- package/dist/errors/abort.error.js +8 -0
- package/dist/errors/abort.error.js.map +1 -0
- package/dist/errors/connect.error.d.ts +5 -0
- package/dist/errors/connect.error.js +12 -0
- package/dist/errors/connect.error.js.map +1 -0
- package/dist/errors/end-of-stream.error.d.ts +3 -0
- package/dist/errors/end-of-stream.error.js +8 -0
- package/dist/errors/end-of-stream.error.js.map +1 -0
- package/dist/errors/flow-stopped.error.d.ts +3 -0
- package/dist/errors/flow-stopped.error.js +8 -0
- package/dist/errors/flow-stopped.error.js.map +1 -0
- package/dist/errors/illegal-state.error.d.ts +3 -0
- package/dist/errors/illegal-state.error.js +8 -0
- package/dist/errors/illegal-state.error.js.map +1 -0
- package/dist/errors/index.d.ts +8 -0
- package/dist/errors/index.js +25 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/malformed-packet.error.d.ts +3 -0
- package/dist/errors/malformed-packet.error.js +8 -0
- package/dist/errors/malformed-packet.error.js.map +1 -0
- package/dist/errors/subscribe.error.d.ts +3 -0
- package/dist/errors/subscribe.error.js +8 -0
- package/dist/errors/subscribe.error.js.map +1 -0
- package/dist/errors/unexpected-packet.error.d.ts +3 -0
- package/dist/errors/unexpected-packet.error.js +8 -0
- package/dist/errors/unexpected-packet.error.js.map +1 -0
- package/dist/flow/incoming.flows.d.ts +6 -0
- package/dist/flow/incoming.flows.js +39 -0
- package/dist/flow/incoming.flows.js.map +1 -0
- package/dist/flow/index.d.ts +3 -0
- package/dist/flow/index.js +20 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/outgoing.flows.d.ts +12 -0
- package/dist/flow/outgoing.flows.js +115 -0
- package/dist/flow/outgoing.flows.js.map +1 -0
- package/dist/flow/packet-flow.d.ts +17 -0
- package/dist/flow/packet-flow.js +3 -0
- package/dist/flow/packet-flow.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/mqtt.base-client.d.ts +54 -0
- package/dist/mqtt.base-client.js +102 -0
- package/dist/mqtt.base-client.js.map +1 -0
- package/dist/mqtt.client.d.ts +75 -0
- package/dist/mqtt.client.js +423 -0
- package/dist/mqtt.client.js.map +1 -0
- package/dist/mqtt.constants.d.ts +34 -0
- package/dist/mqtt.constants.js +26 -0
- package/dist/mqtt.constants.js.map +1 -0
- package/dist/mqtt.listener.d.ts +21 -0
- package/dist/mqtt.listener.js +29 -0
- package/dist/mqtt.listener.js.map +1 -0
- package/dist/mqtt.message.d.ts +14 -0
- package/dist/mqtt.message.js +3 -0
- package/dist/mqtt.message.js.map +1 -0
- package/dist/mqtt.packet.d.ts +9 -0
- package/dist/mqtt.packet.js +15 -0
- package/dist/mqtt.packet.js.map +1 -0
- package/dist/mqtt.parser.d.ts +21 -0
- package/dist/mqtt.parser.js +71 -0
- package/dist/mqtt.parser.js.map +1 -0
- package/dist/mqtt.types.d.ts +52 -0
- package/dist/mqtt.types.js +3 -0
- package/dist/mqtt.types.js.map +1 -0
- package/dist/mqtt.utilities.d.ts +32 -0
- package/dist/mqtt.utilities.js +139 -0
- package/dist/mqtt.utilities.js.map +1 -0
- package/dist/packet-stream.d.ts +37 -0
- package/dist/packet-stream.js +150 -0
- package/dist/packet-stream.js.map +1 -0
- package/dist/packets/connect.request.packet.d.ts +22 -0
- package/dist/packets/connect.request.packet.js +41 -0
- package/dist/packets/connect.request.packet.js.map +1 -0
- package/dist/packets/connect.response.packet.d.ts +18 -0
- package/dist/packets/connect.response.packet.js +43 -0
- package/dist/packets/connect.response.packet.js.map +1 -0
- package/dist/packets/disconnect.request.packet.d.ts +2 -0
- package/dist/packets/disconnect.request.packet.js +7 -0
- package/dist/packets/disconnect.request.packet.js.map +1 -0
- package/dist/packets/index.d.ts +16 -0
- package/dist/packets/index.js +33 -0
- package/dist/packets/index.js.map +1 -0
- package/dist/packets/packet-reader.d.ts +31 -0
- package/dist/packets/packet-reader.js +27 -0
- package/dist/packets/packet-reader.js.map +1 -0
- package/dist/packets/packet-writer.d.ts +48 -0
- package/dist/packets/packet-writer.js +58 -0
- package/dist/packets/packet-writer.js.map +1 -0
- package/dist/packets/ping.request.packet.d.ts +5 -0
- package/dist/packets/ping.request.packet.js +17 -0
- package/dist/packets/ping.request.packet.js.map +1 -0
- package/dist/packets/ping.response.packet.d.ts +5 -0
- package/dist/packets/ping.response.packet.js +17 -0
- package/dist/packets/ping.response.packet.js.map +1 -0
- package/dist/packets/publish.ack.packet.d.ts +8 -0
- package/dist/packets/publish.ack.packet.js +19 -0
- package/dist/packets/publish.ack.packet.js.map +1 -0
- package/dist/packets/publish.complete.packet.d.ts +8 -0
- package/dist/packets/publish.complete.packet.js +19 -0
- package/dist/packets/publish.complete.packet.js.map +1 -0
- package/dist/packets/publish.received.packet.d.ts +8 -0
- package/dist/packets/publish.received.packet.js +19 -0
- package/dist/packets/publish.received.packet.js.map +1 -0
- package/dist/packets/publish.release.packet.d.ts +8 -0
- package/dist/packets/publish.release.packet.js +19 -0
- package/dist/packets/publish.release.packet.js.map +1 -0
- package/dist/packets/publish.request.packet.d.ts +21 -0
- package/dist/packets/publish.request.packet.js +55 -0
- package/dist/packets/publish.request.packet.js.map +1 -0
- package/dist/packets/subscribe.request.packet.d.ts +10 -0
- package/dist/packets/subscribe.request.packet.js +15 -0
- package/dist/packets/subscribe.request.packet.js.map +1 -0
- package/dist/packets/subscribe.response.packet.d.ts +14 -0
- package/dist/packets/subscribe.response.packet.js +35 -0
- package/dist/packets/subscribe.response.packet.js.map +1 -0
- package/dist/packets/unsubscribe.request.packet.d.ts +7 -0
- package/dist/packets/unsubscribe.request.packet.js +13 -0
- package/dist/packets/unsubscribe.request.packet.js.map +1 -0
- package/dist/packets/unsubscribe.response.packet.d.ts +5 -0
- package/dist/packets/unsubscribe.response.packet.js +14 -0
- package/dist/packets/unsubscribe.response.packet.js.map +1 -0
- package/dist/reconnect-strategy/index.d.ts +2 -0
- package/dist/reconnect-strategy/index.js +19 -0
- package/dist/reconnect-strategy/index.js.map +1 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.d.ts +14 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.d.ts +24 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.js +56 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.default.js.map +1 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.js +3 -0
- package/dist/reconnect-strategy/mqtts.reconnect-strategy.js.map +1 -0
- package/dist/transport/index.d.ts +5 -0
- package/dist/transport/index.js +22 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/socks-tls.transport.d.ts +13 -0
- package/dist/transport/socks-tls.transport.js +56 -0
- package/dist/transport/socks-tls.transport.js.map +1 -0
- package/dist/transport/tcp.transport.d.ts +12 -0
- package/dist/transport/tcp.transport.js +26 -0
- package/dist/transport/tcp.transport.js.map +1 -0
- package/dist/transport/tls.transport.d.ts +13 -0
- package/dist/transport/tls.transport.js +46 -0
- package/dist/transport/tls.transport.js.map +1 -0
- package/dist/transport/transport.d.ts +19 -0
- package/dist/transport/transport.js +16 -0
- package/dist/transport/transport.js.map +1 -0
- package/dist/transport/websocket.transport.d.ts +15 -0
- package/dist/transport/websocket.transport.js +40 -0
- package/dist/transport/websocket.transport.js.map +1 -0
- 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 @@
|
|
|
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,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"}
|