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,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PacketType = void 0;
|
|
4
|
+
exports.packetTypeToString = packetTypeToString;
|
|
5
|
+
var PacketType;
|
|
6
|
+
(function (PacketType) {
|
|
7
|
+
PacketType[PacketType["Connect"] = 1] = "Connect";
|
|
8
|
+
PacketType[PacketType["ConnAck"] = 2] = "ConnAck";
|
|
9
|
+
PacketType[PacketType["Publish"] = 3] = "Publish";
|
|
10
|
+
PacketType[PacketType["PubAck"] = 4] = "PubAck";
|
|
11
|
+
PacketType[PacketType["PubRec"] = 5] = "PubRec";
|
|
12
|
+
PacketType[PacketType["PubRel"] = 6] = "PubRel";
|
|
13
|
+
PacketType[PacketType["PubComp"] = 7] = "PubComp";
|
|
14
|
+
PacketType[PacketType["Subscribe"] = 8] = "Subscribe";
|
|
15
|
+
PacketType[PacketType["SubAck"] = 9] = "SubAck";
|
|
16
|
+
PacketType[PacketType["Unsubscribe"] = 10] = "Unsubscribe";
|
|
17
|
+
PacketType[PacketType["UnsubAck"] = 11] = "UnsubAck";
|
|
18
|
+
PacketType[PacketType["PingReq"] = 12] = "PingReq";
|
|
19
|
+
PacketType[PacketType["PingResp"] = 13] = "PingResp";
|
|
20
|
+
PacketType[PacketType["Disconnect"] = 14] = "Disconnect";
|
|
21
|
+
})(PacketType || (exports.PacketType = PacketType = {}));
|
|
22
|
+
const reverseMapping = Object.fromEntries(Object.entries(PacketType).map(([k, v]) => [v, k]));
|
|
23
|
+
function packetTypeToString(type) {
|
|
24
|
+
return reverseMapping[type].toUpperCase();
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=mqtt.constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.constants.js","sourceRoot":"","sources":["../src/mqtt.constants.ts"],"names":[],"mappings":";;;AAsCA,gDAEC;AAxCD,IAAY,UAeX;AAfD,WAAY,UAAU;IAClB,iDAAW,CAAA;IACX,iDAAO,CAAA;IACP,iDAAO,CAAA;IACP,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,+CAAM,CAAA;IACN,iDAAO,CAAA;IACP,qDAAS,CAAA;IACT,+CAAM,CAAA;IACN,0DAAW,CAAA;IACX,oDAAQ,CAAA;IACR,kDAAO,CAAA;IACP,oDAAQ,CAAA;IACR,wDAAU,CAAA;AACd,CAAC,EAfW,UAAU,0BAAV,UAAU,QAerB;AAmBD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAI9F,SAAgB,kBAAkB,CAAC,IAAgB;IAC/C,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,WAAW,EAAgB,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { MqttMessage } from './mqtt.message';
|
|
2
|
+
import { IncomingListenMessage } from './mqtt.types';
|
|
3
|
+
export declare class MqttListener {
|
|
4
|
+
private handlers;
|
|
5
|
+
handleMessage(message: MqttMessage): Promise<void[]>;
|
|
6
|
+
addHandler<T, Params extends Record<string, string>>(handler: HandlerInfo<T, Params>): RemoveHandlerFn;
|
|
7
|
+
}
|
|
8
|
+
export type RemoveHandlerFn = () => void;
|
|
9
|
+
export type HandlerFn<T = MessageWithParams> = (message: T) => void;
|
|
10
|
+
export type ValidatorFn<Params extends Record<string, string>> = (message: MqttMessage, params: Params) => boolean;
|
|
11
|
+
export type TransformerFn<TOut, Params extends Record<string, string>> = (message: IncomingListenMessage<Params>) => TOut | Promise<TOut>;
|
|
12
|
+
export type MessageWithParams<T extends Record<string, string> = Record<string, string>> = MqttMessage & {
|
|
13
|
+
params: T;
|
|
14
|
+
};
|
|
15
|
+
export interface HandlerInfo<T, Params extends Record<string, string>> {
|
|
16
|
+
topicFilter: string;
|
|
17
|
+
paramMatcher?: string;
|
|
18
|
+
validator?: ValidatorFn<Params>;
|
|
19
|
+
transformer?: TransformerFn<T, Params>;
|
|
20
|
+
handle: HandlerFn<T>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MqttListener = void 0;
|
|
4
|
+
const mqtt_utilities_1 = require("./mqtt.utilities");
|
|
5
|
+
class MqttListener {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.handlers = [];
|
|
8
|
+
}
|
|
9
|
+
handleMessage(message) {
|
|
10
|
+
return Promise.all(this.handlers
|
|
11
|
+
.filter(h => (0, mqtt_utilities_1.matchTopic)(h.topicFilter, message.topic))
|
|
12
|
+
.map(async (handler) => {
|
|
13
|
+
const params = handler.paramMatcher ? (0, mqtt_utilities_1.extractParams)(handler.paramMatcher, message.topic) : {};
|
|
14
|
+
if (handler.validator && !handler.validator(message, params))
|
|
15
|
+
return;
|
|
16
|
+
const finalMessage = {
|
|
17
|
+
...message,
|
|
18
|
+
params,
|
|
19
|
+
};
|
|
20
|
+
handler.handle(handler.transformer ? await handler.transformer(finalMessage) : finalMessage);
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
addHandler(handler) {
|
|
24
|
+
this.handlers.push(handler);
|
|
25
|
+
return () => (this.handlers = this.handlers.filter(x => x !== handler));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.MqttListener = MqttListener;
|
|
29
|
+
//# sourceMappingURL=mqtt.listener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.listener.js","sourceRoot":"","sources":["../src/mqtt.listener.ts"],"names":[],"mappings":";;;AAEA,qDAA6D;AAE7D,MAAa,YAAY;IAAzB;QACY,aAAQ,GAAiC,EAAE,CAAC;IAuBxD,CAAC;IArBU,aAAa,CAAC,OAAoB;QACrC,OAAO,OAAO,CAAC,GAAG,CACd,IAAI,CAAC,QAAQ;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,2BAAU,EAAC,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;aACrD,GAAG,CAAC,KAAK,EAAC,OAAO,EAAC,EAAE;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAA,8BAAa,EAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;gBAAE,OAAO;YAErE,MAAM,YAAY,GAAG;gBACjB,GAAG,OAAO;gBACV,MAAM;aACT,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACjG,CAAC,CAAC,CACT,CAAC;IACN,CAAC;IAEM,UAAU,CAA2C,OAA+B;QACvF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;CACJ;AAxBD,oCAwBC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface MqttMessage {
|
|
2
|
+
topic: string;
|
|
3
|
+
payload: Buffer;
|
|
4
|
+
retained?: boolean;
|
|
5
|
+
duplicate?: boolean;
|
|
6
|
+
qosLevel?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface MqttMessageOutgoing {
|
|
9
|
+
topic: string;
|
|
10
|
+
retained?: boolean;
|
|
11
|
+
duplicate?: boolean;
|
|
12
|
+
qosLevel?: number;
|
|
13
|
+
payload: Buffer | string;
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.message.js","sourceRoot":"","sources":["../src/mqtt.message.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IdentifierPacket = void 0;
|
|
4
|
+
exports.generateIdentifier = generateIdentifier;
|
|
5
|
+
class IdentifierPacket {
|
|
6
|
+
constructor(identifier) {
|
|
7
|
+
this.identifier = identifier;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.IdentifierPacket = IdentifierPacket;
|
|
11
|
+
let _lastId = 0;
|
|
12
|
+
function generateIdentifier() {
|
|
13
|
+
return (_lastId = (_lastId + 1) & 0xffff);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mqtt.packet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.packet.js","sourceRoot":"","sources":["../src/mqtt.packet.ts"],"names":[],"mappings":";;;AAUA,gDAEC;AAZD,MAAa,gBAAgB;IACzB,YAA4B,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;CACrD;AAFD,4CAEC;AAOD,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,SAAgB,kBAAkB;IAC9B,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PacketType } from './mqtt.constants';
|
|
2
|
+
import { Transform, TransformCallback } from 'stream';
|
|
3
|
+
import { Debugger } from 'debug';
|
|
4
|
+
import { DefaultPacketReadResultMap, PacketReadMap, PacketReadResultMap } from './packets/packet-reader';
|
|
5
|
+
export interface MqttParseResult<ReadMap extends PacketReadResultMap, T extends PacketType> {
|
|
6
|
+
type: T;
|
|
7
|
+
flags: number;
|
|
8
|
+
data: ReadMap[T];
|
|
9
|
+
}
|
|
10
|
+
export interface MqttTransformerOptions<T extends PacketReadResultMap = DefaultPacketReadResultMap> {
|
|
11
|
+
debug?: Debugger;
|
|
12
|
+
mapping?: PacketReadMap<T>;
|
|
13
|
+
}
|
|
14
|
+
export declare class MqttTransformer<ReadMap extends PacketReadResultMap = DefaultPacketReadResultMap> extends Transform {
|
|
15
|
+
options: MqttTransformerOptions<ReadMap>;
|
|
16
|
+
mapping: PacketReadMap<ReadMap>;
|
|
17
|
+
private internalStream;
|
|
18
|
+
constructor(options?: MqttTransformerOptions<ReadMap>);
|
|
19
|
+
_transform(chunk: Buffer, encoding: string, callback: TransformCallback): void;
|
|
20
|
+
reset(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MqttTransformer = void 0;
|
|
4
|
+
const mqtt_constants_1 = require("./mqtt.constants");
|
|
5
|
+
const packet_stream_1 = require("./packet-stream");
|
|
6
|
+
const errors_1 = require("./errors");
|
|
7
|
+
const stream_1 = require("stream");
|
|
8
|
+
const packet_reader_1 = require("./packets/packet-reader");
|
|
9
|
+
class MqttTransformer extends stream_1.Transform {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
super({ objectMode: true });
|
|
12
|
+
this.options = options;
|
|
13
|
+
// force the type here
|
|
14
|
+
this.mapping = packet_reader_1.DefaultPacketReadMap;
|
|
15
|
+
this.internalStream = undefined;
|
|
16
|
+
this.mapping = {
|
|
17
|
+
...this.mapping,
|
|
18
|
+
...options.mapping,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
_transform(chunk, encoding, callback) {
|
|
22
|
+
if (!Buffer.isBuffer(chunk)) {
|
|
23
|
+
callback(new Error('Expected a Buffer'));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const stream = this.internalStream ? this.internalStream.write(chunk, false) : packet_stream_1.PacketStream.fromBuffer(chunk);
|
|
27
|
+
this.internalStream = undefined;
|
|
28
|
+
let startPos = 0;
|
|
29
|
+
while (stream.remainingBytes > 0) {
|
|
30
|
+
const firstByte = stream.readByte();
|
|
31
|
+
const type = (firstByte >> 4);
|
|
32
|
+
const flags = firstByte & 0x0f;
|
|
33
|
+
const packetFn = this.mapping[type];
|
|
34
|
+
if (!packetFn) {
|
|
35
|
+
callback(new errors_1.UnexpectedPacketError(`No packet found for ${type}; @${stream.position - 1} len: ${stream.length}`));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
let remainingLength = -1;
|
|
39
|
+
try {
|
|
40
|
+
remainingLength = stream.readVariableByteInteger();
|
|
41
|
+
const packet = packetFn(stream, remainingLength, flags);
|
|
42
|
+
this.push({
|
|
43
|
+
type,
|
|
44
|
+
data: packet,
|
|
45
|
+
flags,
|
|
46
|
+
});
|
|
47
|
+
stream.cut();
|
|
48
|
+
startPos = stream.position;
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
if (e instanceof errors_1.EndOfStreamError) {
|
|
52
|
+
this.options.debug?.(`EOS:\n ${remainingLength} got: ${stream.length} (+) ${chunk.byteLength};\n return: ${startPos};`);
|
|
53
|
+
stream.position = startPos;
|
|
54
|
+
this.internalStream = stream.cut();
|
|
55
|
+
callback();
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
callback(new errors_1.MalformedPacketError(`Error in parser (type: ${(0, mqtt_constants_1.packetTypeToString)(type)}): ${e instanceof Error ? e.message : e} - stream: ${stream.data.toString('base64')}`));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
callback();
|
|
65
|
+
}
|
|
66
|
+
reset() {
|
|
67
|
+
this.internalStream = undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.MqttTransformer = MqttTransformer;
|
|
71
|
+
//# sourceMappingURL=mqtt.parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.parser.js","sourceRoot":"","sources":["../src/mqtt.parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { ConnectRequestOptions } from './packets';
|
|
2
|
+
import { MqttTransformer } from './mqtt.parser';
|
|
3
|
+
import { Transport } from './transport';
|
|
4
|
+
import { XOR } from 'ts-xor';
|
|
5
|
+
import { MqttMessage } from './mqtt.message';
|
|
6
|
+
import { DefaultPacketReadResultMap, PacketReadMap, PacketReadResultMap, DefaultPacketWriteOptions, PacketWriteMap, PacketWriteOptionsMap, PacketWriter } from './packets';
|
|
7
|
+
import { TransformerFn, ValidatorFn } from './mqtt.listener';
|
|
8
|
+
import { MqttsReconnectStrategy } from './reconnect-strategy';
|
|
9
|
+
export type MqttClientConstructorOptions<ReadMap extends PacketReadResultMap = DefaultPacketReadResultMap, WriteMap extends PacketWriteOptionsMap = DefaultPacketWriteOptions> = XOR<{
|
|
10
|
+
transport: Transport<unknown>;
|
|
11
|
+
}, {
|
|
12
|
+
host: string;
|
|
13
|
+
port: number;
|
|
14
|
+
enableTrace?: boolean;
|
|
15
|
+
}> & {
|
|
16
|
+
readMap?: PacketReadMap<ReadMap>;
|
|
17
|
+
createTransformer?: () => MqttTransformer<ReadMap>;
|
|
18
|
+
writeMap?: PacketWriteMap<WriteMap>;
|
|
19
|
+
packetWriter?: PacketWriter<WriteMap>;
|
|
20
|
+
autoReconnect?: MqttsReconnectStrategy | boolean;
|
|
21
|
+
};
|
|
22
|
+
export interface MqttSubscription {
|
|
23
|
+
topic: string;
|
|
24
|
+
qosLevel?: number;
|
|
25
|
+
}
|
|
26
|
+
export type RegisterClientOptions = ConnectRequestOptions;
|
|
27
|
+
export type TimerRef = any;
|
|
28
|
+
export type ExecutePeriodically = (timeInMs: number, action: () => void) => TimerRef;
|
|
29
|
+
export type ExecuteDelayed = (timeInMs: number, action: () => void) => TimerRef;
|
|
30
|
+
export type StopExecuting = (ref: TimerRef) => void;
|
|
31
|
+
export type AsyncLike<TIn, TOut> = (data: TIn) => TOut | PromiseLike<TOut>;
|
|
32
|
+
export interface ListenerInfo<TIn, TOut> {
|
|
33
|
+
eventName: string;
|
|
34
|
+
validator: (data: TIn) => boolean | PromiseLike<boolean>;
|
|
35
|
+
transformer?: (data: TIn) => TOut | PromiseLike<TOut>;
|
|
36
|
+
onData: (data: TOut) => void | PromiseLike<void>;
|
|
37
|
+
}
|
|
38
|
+
export interface ListenOptions<TOut, Params extends Record<string, string>> {
|
|
39
|
+
topic: string;
|
|
40
|
+
validator?: ValidatorFn<Params>;
|
|
41
|
+
transformer?: TransformerFn<TOut, Params>;
|
|
42
|
+
}
|
|
43
|
+
export interface ListenSubscribeOptions<TOut, Params extends Record<string, string>> extends ListenOptions<TOut, Params> {
|
|
44
|
+
subscriptionInfo?: Partial<MqttSubscription>;
|
|
45
|
+
}
|
|
46
|
+
export interface IncomingListenMessage<T extends Record<string, string> = Record<string, string>> extends MqttMessage {
|
|
47
|
+
params?: T;
|
|
48
|
+
}
|
|
49
|
+
export type Resolvable<T extends Record<string, unknown>> = (() => Promise<T>) | (() => T) | T;
|
|
50
|
+
export interface IdentifierData {
|
|
51
|
+
identifier: number;
|
|
52
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.types.js","sourceRoot":"","sources":["../src/mqtt.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Resolvable } from './mqtt.types';
|
|
2
|
+
import { ConnectResponsePacket, PingResponsePacket, PublishAckPacket, PublishCompletePacket, PublishReceivedPacket, PublishReleasePacket, PublishRequestPacket, SubscribeResponsePacket, UnsubscribeResponsePacket } from './packets';
|
|
3
|
+
import { PacketType } from './mqtt.constants';
|
|
4
|
+
export declare function matchTopic(baseTopic: string, incomingTopic: string): boolean;
|
|
5
|
+
export declare function expectRemainingLength(length: number, expected?: number): void;
|
|
6
|
+
export declare function removeUntil(input: string, char: string): string;
|
|
7
|
+
export declare function extractParams(template: string, topic: string): Record<string, string>;
|
|
8
|
+
export interface Resolvers<T> {
|
|
9
|
+
resolve: (value: T) => void;
|
|
10
|
+
reject: (error: Error) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const nullOrUndefined: (input: unknown) => input is null | undefined;
|
|
13
|
+
export declare const isConnAck: (target: unknown) => target is ConnectResponsePacket;
|
|
14
|
+
export declare const isPublish: (target: unknown) => target is PublishRequestPacket;
|
|
15
|
+
export declare const isPubAck: (target: unknown) => target is PublishAckPacket;
|
|
16
|
+
export declare const isPubRec: (target: unknown) => target is PublishReceivedPacket;
|
|
17
|
+
export declare const isPubRel: (target: unknown) => target is PublishReleasePacket;
|
|
18
|
+
export declare const isPubComp: (target: unknown) => target is PublishCompletePacket;
|
|
19
|
+
export declare const isSubAck: (target: unknown) => target is SubscribeResponsePacket;
|
|
20
|
+
export declare const isUnsubAck: (target: unknown) => target is UnsubscribeResponsePacket;
|
|
21
|
+
export declare const isPingResp: (target: unknown) => target is PingResponsePacket;
|
|
22
|
+
export declare function resolve<T extends Record<string, unknown>>(resolvable: Resolvable<T>): Promise<T>;
|
|
23
|
+
export declare function notUndefined<T>(value: T | undefined): value is T;
|
|
24
|
+
export declare function toBuffer(value: Buffer | string): Buffer;
|
|
25
|
+
export declare function toMqttTopicFilter(paramString: string): [string, string?];
|
|
26
|
+
export declare function createDefaultPacketLogger(debug: (data: string) => void): (packetType: PacketType, packetInfo: Record<string, string | number | boolean | undefined>) => void;
|
|
27
|
+
export declare function stringifyObject(obj: Record<string, unknown>): string;
|
|
28
|
+
export declare function createFlowCounter(): {
|
|
29
|
+
next(): number;
|
|
30
|
+
} | {
|
|
31
|
+
next(): bigint;
|
|
32
|
+
};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isPingResp = exports.isUnsubAck = exports.isSubAck = exports.isPubComp = exports.isPubRel = exports.isPubRec = exports.isPubAck = exports.isPublish = exports.isConnAck = exports.nullOrUndefined = void 0;
|
|
4
|
+
exports.matchTopic = matchTopic;
|
|
5
|
+
exports.expectRemainingLength = expectRemainingLength;
|
|
6
|
+
exports.removeUntil = removeUntil;
|
|
7
|
+
exports.extractParams = extractParams;
|
|
8
|
+
exports.resolve = resolve;
|
|
9
|
+
exports.notUndefined = notUndefined;
|
|
10
|
+
exports.toBuffer = toBuffer;
|
|
11
|
+
exports.toMqttTopicFilter = toMqttTopicFilter;
|
|
12
|
+
exports.createDefaultPacketLogger = createDefaultPacketLogger;
|
|
13
|
+
exports.stringifyObject = stringifyObject;
|
|
14
|
+
exports.createFlowCounter = createFlowCounter;
|
|
15
|
+
const packets_1 = require("./packets");
|
|
16
|
+
const mqtt_constants_1 = require("./mqtt.constants");
|
|
17
|
+
function matchTopic(baseTopic, incomingTopic) {
|
|
18
|
+
if (baseTopic.length === incomingTopic.length && baseTopic === incomingTopic)
|
|
19
|
+
return true;
|
|
20
|
+
const parts = baseTopic.split('+');
|
|
21
|
+
let remaining = incomingTopic;
|
|
22
|
+
for (const part of parts) {
|
|
23
|
+
if (!remaining.startsWith(part)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
remaining = removeUntil(remaining.substring(part.length), '/');
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
function expectRemainingLength(length, expected) {
|
|
31
|
+
if (!expected) {
|
|
32
|
+
expected = 0;
|
|
33
|
+
}
|
|
34
|
+
if (length !== expected) {
|
|
35
|
+
throw new Error(`Expected remaining length to be ${expected} but got ${length}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function removeUntil(input, char) {
|
|
39
|
+
return input.substring(Math.max(input.indexOf(char), 0));
|
|
40
|
+
}
|
|
41
|
+
function extractParams(template, topic) {
|
|
42
|
+
const templateParts = template.split('/');
|
|
43
|
+
const topicParts = topic.split('/');
|
|
44
|
+
const params = {};
|
|
45
|
+
for (let i = 0; i < Math.min(templateParts.length, topicParts.length); i++) {
|
|
46
|
+
if (templateParts[i].startsWith(':')) {
|
|
47
|
+
params[templateParts[i].substring(1)] = topicParts[i];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return params;
|
|
51
|
+
}
|
|
52
|
+
const nullOrUndefined = (input) => input == undefined;
|
|
53
|
+
exports.nullOrUndefined = nullOrUndefined;
|
|
54
|
+
const isConnAck = (target) => target instanceof packets_1.ConnectResponsePacket;
|
|
55
|
+
exports.isConnAck = isConnAck;
|
|
56
|
+
const isPublish = (target) => target instanceof packets_1.PublishRequestPacket;
|
|
57
|
+
exports.isPublish = isPublish;
|
|
58
|
+
const isPubAck = (target) => target instanceof packets_1.PublishAckPacket;
|
|
59
|
+
exports.isPubAck = isPubAck;
|
|
60
|
+
const isPubRec = (target) => target instanceof packets_1.PublishReceivedPacket;
|
|
61
|
+
exports.isPubRec = isPubRec;
|
|
62
|
+
const isPubRel = (target) => target instanceof packets_1.PublishReleasePacket;
|
|
63
|
+
exports.isPubRel = isPubRel;
|
|
64
|
+
const isPubComp = (target) => target instanceof packets_1.PublishCompletePacket;
|
|
65
|
+
exports.isPubComp = isPubComp;
|
|
66
|
+
const isSubAck = (target) => target instanceof packets_1.SubscribeResponsePacket;
|
|
67
|
+
exports.isSubAck = isSubAck;
|
|
68
|
+
const isUnsubAck = (target) => target instanceof packets_1.UnsubscribeResponsePacket;
|
|
69
|
+
exports.isUnsubAck = isUnsubAck;
|
|
70
|
+
const isPingResp = (target) => target instanceof packets_1.PingResponsePacket;
|
|
71
|
+
exports.isPingResp = isPingResp;
|
|
72
|
+
async function resolve(resolvable) {
|
|
73
|
+
return typeof resolvable === 'object' ? resolvable : await resolvable();
|
|
74
|
+
}
|
|
75
|
+
function notUndefined(value) {
|
|
76
|
+
return typeof value !== 'undefined';
|
|
77
|
+
}
|
|
78
|
+
function toBuffer(value) {
|
|
79
|
+
return typeof value === 'string' ? Buffer.from(value) : value;
|
|
80
|
+
}
|
|
81
|
+
const paramRegex = /\/:[A-Za-z-_0-9]+/g;
|
|
82
|
+
function toMqttTopicFilter(paramString) {
|
|
83
|
+
if (paramString.match(paramRegex)) {
|
|
84
|
+
return [paramString.replace(paramRegex, '/+'), paramString];
|
|
85
|
+
}
|
|
86
|
+
return [paramString];
|
|
87
|
+
}
|
|
88
|
+
function createDefaultPacketLogger(debug) {
|
|
89
|
+
return (packetType, packetInfo) => {
|
|
90
|
+
if (packetType !== mqtt_constants_1.PacketType.PingReq && packetType !== mqtt_constants_1.PacketType.PingResp) {
|
|
91
|
+
debug(`Write ${(0, mqtt_constants_1.packetTypeToString)(packetType)} ${stringifyObject(packetInfo)}`);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function stringifyObject(obj) {
|
|
96
|
+
return `${obj.constructor === Object ? '' : `${obj.constructor.name} `}{${Object.entries(obj)
|
|
97
|
+
.filter(([, v]) => typeof v !== 'undefined')
|
|
98
|
+
.map(([k, v]) => `${k}: ${stringifyValue(v)}`)
|
|
99
|
+
.join(', ')}}`;
|
|
100
|
+
}
|
|
101
|
+
function stringifyValue(value) {
|
|
102
|
+
if (typeof value === 'object') {
|
|
103
|
+
if (value === null) {
|
|
104
|
+
return '<null>';
|
|
105
|
+
}
|
|
106
|
+
else if (Array.isArray(value)) {
|
|
107
|
+
return `<Array { len: ${value.length}}>`;
|
|
108
|
+
}
|
|
109
|
+
else if (Buffer.isBuffer(value)) {
|
|
110
|
+
return `<Buffer { bytes: ${value.byteLength}}>`;
|
|
111
|
+
}
|
|
112
|
+
else if (value.constructor !== Object) {
|
|
113
|
+
return `<${value.constructor.name}>`;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return '{...}';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
return typeof value === 'string' ? `"${value}"` : String(value);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function createFlowCounter() {
|
|
124
|
+
if (!globalThis.BigInt) {
|
|
125
|
+
let count = 0;
|
|
126
|
+
return {
|
|
127
|
+
next() {
|
|
128
|
+
return ++count;
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
let count = BigInt(0);
|
|
133
|
+
return {
|
|
134
|
+
next() {
|
|
135
|
+
return (count += BigInt(1));
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=mqtt.utilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mqtt.utilities.js","sourceRoot":"","sources":["../src/mqtt.utilities.ts"],"names":[],"mappings":";;;AAcA,gCAWC;AAED,sDAOC;AAED,kCAEC;AAED,sCAUC;AAqBD,0BAEC;AAED,oCAEC;AAED,4BAEC;AAGD,8CAKC;AAED,8DAMC;AAED,0CAKC;AAoBD,8CAeC;AA1ID,uCAUmB;AACnB,qDAAkE;AAElE,SAAgB,UAAU,CAAC,SAAiB,EAAE,aAAqB;IAC/D,IAAI,SAAS,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,IAAI,SAAS,KAAK,aAAa;QAAE,OAAO,IAAI,CAAC;IAC1F,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,SAAS,GAAG,aAAa,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAc,EAAE,QAAiB;IACnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,QAAQ,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,YAAY,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;AACL,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,IAAY;IACnD,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAgB,aAAa,CAAC,QAAgB,EAAE,KAAa;IACzD,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzE,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAOM,MAAM,eAAe,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,IAAI,SAAS,CAAC;AAAzD,QAAA,eAAe,mBAA0C;AAE/D,MAAM,SAAS,GAAG,CAAC,MAAe,EAAmC,EAAE,CAAC,MAAM,YAAY,+BAAqB,CAAC;AAA1G,QAAA,SAAS,aAAiG;AAChH,MAAM,SAAS,GAAG,CAAC,MAAe,EAAkC,EAAE,CAAC,MAAM,YAAY,8BAAoB,CAAC;AAAxG,QAAA,SAAS,aAA+F;AAC9G,MAAM,QAAQ,GAAG,CAAC,MAAe,EAA8B,EAAE,CAAC,MAAM,YAAY,0BAAgB,CAAC;AAA/F,QAAA,QAAQ,YAAuF;AACrG,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAmC,EAAE,CAAC,MAAM,YAAY,+BAAqB,CAAC;AAAzG,QAAA,QAAQ,YAAiG;AAC/G,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAkC,EAAE,CAAC,MAAM,YAAY,8BAAoB,CAAC;AAAvG,QAAA,QAAQ,YAA+F;AAC7G,MAAM,SAAS,GAAG,CAAC,MAAe,EAAmC,EAAE,CAAC,MAAM,YAAY,+BAAqB,CAAC;AAA1G,QAAA,SAAS,aAAiG;AAChH,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAqC,EAAE,CAC3E,MAAM,YAAY,iCAAuB,CAAC;AADjC,QAAA,QAAQ,YACyB;AACvC,MAAM,UAAU,GAAG,CAAC,MAAe,EAAuC,EAAE,CAC/E,MAAM,YAAY,mCAAyB,CAAC;AADnC,QAAA,UAAU,cACyB;AACzC,MAAM,UAAU,GAAG,CAAC,MAAe,EAAgC,EAAE,CAAC,MAAM,YAAY,4BAAkB,CAAC;AAArG,QAAA,UAAU,cAA2F;AAE3G,KAAK,UAAU,OAAO,CAAoC,UAAyB;IACtF,OAAO,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;AAC5E,CAAC;AAED,SAAgB,YAAY,CAAI,KAAoB;IAChD,OAAO,OAAO,KAAK,KAAK,WAAW,CAAC;AACxC,CAAC;AAED,SAAgB,QAAQ,CAAC,KAAsB;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,GAAG,oBAAoB,CAAC;AACxC,SAAgB,iBAAiB,CAAC,WAAmB;IACjD,IAAI,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,CAAC,WAAW,CAAC,CAAC;AACzB,CAAC;AAED,SAAgB,yBAAyB,CAAC,KAA6B;IACnE,OAAO,CAAC,UAAsB,EAAE,UAAiE,EAAE,EAAE;QACjG,IAAI,UAAU,KAAK,2BAAU,CAAC,OAAO,IAAI,UAAU,KAAK,2BAAU,CAAC,QAAQ,EAAE,CAAC;YAC1E,KAAK,CAAC,SAAS,IAAA,mCAAkB,EAAC,UAAU,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED,SAAgB,eAAe,CAAC,GAA4B;IACxD,OAAO,GAAG,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACxF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,WAAW,CAAC;SAC3C,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACvB,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACjB,OAAO,QAAQ,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,iBAAiB,KAAK,CAAC,MAAM,IAAI,CAAC;QAC7C,CAAC;aAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,oBAAoB,KAAK,CAAC,UAAU,IAAI,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;YACtC,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,OAAO,OAAO,CAAC;QACnB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;AACL,CAAC;AAED,SAAgB,iBAAiB;IAC7B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO;YACH,IAAI;gBACA,OAAO,EAAE,KAAK,CAAC;YACnB,CAAC;SACJ,CAAC;IACN,CAAC;IACD,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACtB,OAAO;QACH,IAAI;YACA,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export declare class PacketStream {
|
|
2
|
+
set position(value: number);
|
|
3
|
+
get position(): number;
|
|
4
|
+
get data(): Buffer;
|
|
5
|
+
get length(): number;
|
|
6
|
+
get remainingBytes(): number;
|
|
7
|
+
private _data;
|
|
8
|
+
private _position;
|
|
9
|
+
private constructor();
|
|
10
|
+
static fromLength(len: number): PacketStream;
|
|
11
|
+
static fromBuffer(buf: Buffer): PacketStream;
|
|
12
|
+
static fromString(data: string): PacketStream;
|
|
13
|
+
static empty(): PacketStream;
|
|
14
|
+
static fromHex(hex: string): PacketStream;
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @param {number} steps - steps to move
|
|
18
|
+
* @returns {number} Position before moving
|
|
19
|
+
*/
|
|
20
|
+
private move;
|
|
21
|
+
seek(len: number): this;
|
|
22
|
+
cut(): this;
|
|
23
|
+
write(data: Buffer, move?: boolean): this;
|
|
24
|
+
writeRawString(data: string): this;
|
|
25
|
+
writeByte(num: number): this;
|
|
26
|
+
writeWord(num: number): this;
|
|
27
|
+
writeString(str: string): this;
|
|
28
|
+
writeRawAndLength(data: Buffer): this;
|
|
29
|
+
writeVariableByteInteger(value: number): this;
|
|
30
|
+
read(len: number): Buffer;
|
|
31
|
+
readSlice(end: number): Buffer<ArrayBuffer>;
|
|
32
|
+
readByte(): number;
|
|
33
|
+
readWord(): number;
|
|
34
|
+
readString(): string;
|
|
35
|
+
readStringAsBuffer(): Buffer;
|
|
36
|
+
readVariableByteInteger(): number;
|
|
37
|
+
}
|