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,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MqttBaseClient = exports.StateId = void 0;
4
+ const mqtt_utilities_1 = require("./mqtt.utilities");
5
+ const eventemitter3_1 = require("eventemitter3");
6
+ var StateId;
7
+ (function (StateId) {
8
+ StateId[StateId["Created"] = 0] = "Created";
9
+ StateId[StateId["Connecting"] = 1] = "Connecting";
10
+ StateId[StateId["Ready"] = 2] = "Ready";
11
+ StateId[StateId["Disconnected"] = 3] = "Disconnected";
12
+ })(StateId || (exports.StateId = StateId = {}));
13
+ // TODO: errors
14
+ class MqttBaseClient extends eventemitter3_1.EventEmitter {
15
+ constructor(sate = StateId.Created) {
16
+ super();
17
+ this.sate = sate;
18
+ this.emitWarning = (e) => this.emit('warning', e);
19
+ this.emitError = (e) => this.emit('error', e);
20
+ this.emitDisconnect = (event) => this.emit('disconnect', event);
21
+ this.emitConnect = (packet) => this.emit('connect', packet);
22
+ this.emitMessage = (message) => this.emit('message', message);
23
+ }
24
+ get current() {
25
+ return this.sate;
26
+ }
27
+ get created() {
28
+ return this.current === StateId.Created;
29
+ }
30
+ get ready() {
31
+ return this.current === StateId.Ready;
32
+ }
33
+ // although it might seem weird, this is intended
34
+ get connecting() {
35
+ return this.current === StateId.Connecting;
36
+ }
37
+ // if the client is just created, it's not connected
38
+ get disconnected() {
39
+ return this.current === StateId.Disconnected || this.current === StateId.Created;
40
+ }
41
+ set connectResolver(resolver) {
42
+ this._connectResolver = this._connectResolver ?? resolver;
43
+ }
44
+ get connectOptions() {
45
+ return this._connectOptions;
46
+ }
47
+ set connectOptions(options) {
48
+ this._connectOptions = this._connectOptions ?? options;
49
+ }
50
+ expectReady() {
51
+ if (!this.ready) {
52
+ throw new Error(`Expected client to be ready but got ${this.current}`);
53
+ }
54
+ }
55
+ expectCreated() {
56
+ if (!this.created) {
57
+ throw new Error(`Expected client to be created but got ${this.current}`);
58
+ }
59
+ }
60
+ expectConnecting() {
61
+ if (!this.connecting) {
62
+ throw new Error(`Expected client to be connecting but got ${this.current}`);
63
+ }
64
+ }
65
+ hasConnectOptions() {
66
+ return !!this._connectOptions;
67
+ }
68
+ async resolveConnectOptions() {
69
+ this._connectOptions = {
70
+ ...this._connectOptions,
71
+ ...(this._connectResolver ? await (0, mqtt_utilities_1.resolve)(this._connectResolver) : {}),
72
+ };
73
+ return this._connectOptions;
74
+ }
75
+ reset() {
76
+ if (this.sate === StateId.Created || this.sate === StateId.Disconnected) {
77
+ this.sate = StateId.Created;
78
+ }
79
+ else {
80
+ throw new Error(`Invalid state: Resetting requires the client to be Disconnected or Created (current: ${this.current})`);
81
+ }
82
+ }
83
+ setConnecting() {
84
+ this.next(StateId.Connecting);
85
+ }
86
+ setReady() {
87
+ this.next(StateId.Ready);
88
+ }
89
+ _setDisconnected() {
90
+ this.next(StateId.Disconnected);
91
+ }
92
+ next(newState) {
93
+ if (newState > this.current) {
94
+ this.sate = newState;
95
+ }
96
+ else {
97
+ throw new Error(`Invalid state requested (current: ${this.current}, requested: ${newState})`);
98
+ }
99
+ }
100
+ }
101
+ exports.MqttBaseClient = MqttBaseClient;
102
+ //# sourceMappingURL=mqtt.base-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mqtt.base-client.js","sourceRoot":"","sources":["../src/mqtt.base-client.ts"],"names":[],"mappings":";;;AACA,qDAA2C;AAI3C,iDAA6C;AAE7C,IAAY,OAKX;AALD,WAAY,OAAO;IACf,2CAAO,CAAA;IACP,iDAAU,CAAA;IACV,uCAAK,CAAA;IACL,qDAAY,CAAA;AAChB,CAAC,EALW,OAAO,uBAAP,OAAO,QAKlB;AAED,eAAe;AAEf,MAAa,cAKX,SAAQ,4BAQT;IACG,YAAoB,OAAgB,OAAO,CAAC,OAAO;QAC/C,KAAK,EAAE,CAAC;QADQ,SAAI,GAAJ,IAAI,CAA2B;QAyEzC,gBAAW,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAEpD,cAAS,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,mBAAc,GAAG,CAAC,KAAsD,EAAE,EAAE,CAClF,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAEzB,gBAAW,GAAG,CAAC,MAAmC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAEpF,gBAAW,GAAG,CAAC,OAAoB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAhFhF,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,iDAAiD;IAEjD,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC;IAC/C,CAAC;IAED,oDAAoD;IACpD,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;IACrF,CAAC;IAID,IAAI,eAAe,CAAC,QAAuD;QACvE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,QAAQ,CAAC;IAC9D,CAAC;IAID,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,cAAc,CAAC,OAA0C;QACzD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,OAAO,CAAC;IAC3D,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;IACL,CAAC;IAEM,aAAa;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7E,CAAC;IACL,CAAC;IAEM,gBAAgB;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAEM,iBAAiB;QACpB,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,qBAAqB;QAC9B,IAAI,CAAC,eAAe,GAAG;YACnB,GAAG,IAAI,CAAC,eAAe;YACvB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,MAAM,IAAA,wBAAO,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;QACF,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAaS,KAAK;QACX,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC;YACtE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAChC,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CACX,wFAAwF,IAAI,CAAC,OAAO,GAAG,CAC1G,CAAC;QACN,CAAC;IACL,CAAC;IAES,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAES,QAAQ;QACd,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAES,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAEO,IAAI,CAAC,QAAiB;QAC1B,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAC,OAAO,gBAAgB,QAAQ,GAAG,CAAC,CAAC;QAClG,CAAC;IACL,CAAC;CACJ;AA/HD,wCA+HC"}
@@ -0,0 +1,75 @@
1
+ import { ExecuteDelayed, ExecutePeriodically, IncomingListenMessage, ListenOptions, ListenSubscribeOptions, MqttClientConstructorOptions, MqttSubscription, RegisterClientOptions, Resolvable, StopExecuting, TimerRef } from './mqtt.types';
2
+ import { PacketFlowData, PacketFlowFunc } from './flow';
3
+ import { MqttParseResult, MqttTransformer } from './mqtt.parser';
4
+ import { Transport } from './transport';
5
+ import { ConnectRequestOptions, ConnectResponsePacket, DefaultPacketReadResultMap, DefaultPacketWriteOptions, PacketReadResultMap, PacketWriteOptionsMap, PacketWriter, PublishRequestPacket, SubscribeReturnCode } from './packets';
6
+ import { MqttMessageOutgoing } from './mqtt.message';
7
+ import { Writable } from 'stream';
8
+ import { PacketType } from './mqtt.constants';
9
+ import { MqttBaseClient } from './mqtt.base-client';
10
+ import { HandlerFn, MqttListener, RemoveHandlerFn } from './mqtt.listener';
11
+ export declare class MqttClient<ReadMap extends PacketReadResultMap = DefaultPacketReadResultMap, WriteMap extends PacketWriteOptionsMap = DefaultPacketWriteOptions> extends MqttBaseClient<ReadMap, WriteMap> {
12
+ private mqttDebug;
13
+ private receiveDebug;
14
+ private pingDebug;
15
+ protected executePeriodically: ExecutePeriodically;
16
+ protected stopExecuting: StopExecuting;
17
+ protected executeDelayed: ExecuteDelayed;
18
+ protected flowCounter: {
19
+ next(): number;
20
+ } | {
21
+ next(): bigint;
22
+ };
23
+ get keepAlive(): number;
24
+ set keepAlive(value: number);
25
+ protected transport: Transport<unknown>;
26
+ protected transformer: MqttTransformer<ReadMap>;
27
+ protected createTransformer: () => MqttTransformer<ReadMap>;
28
+ protected pipeline?: Writable;
29
+ protected writer: PacketWriter<WriteMap>;
30
+ protected keepAliveTimer?: TimerRef;
31
+ private reconnectStrategy?;
32
+ protected activeFlows: PacketFlowData<any>[];
33
+ protected messageListener: MqttListener;
34
+ constructor(options: MqttClientConstructorOptions<ReadMap, WriteMap>);
35
+ private _connect;
36
+ connect(options?: Resolvable<RegisterClientOptions>): Promise<void>;
37
+ protected createPipeline(): void;
38
+ publish(message: MqttMessageOutgoing): Promise<MqttMessageOutgoing>;
39
+ subscribe(subscription: MqttSubscription): Promise<SubscribeReturnCode>;
40
+ unsubscribe(subscription: MqttSubscription): Promise<void>;
41
+ disconnect(force?: boolean): Promise<void>;
42
+ listenSubscribe<T = IncomingListenMessage>(topic: string, handlerFn: HandlerFn<T>): Promise<RemoveHandlerFn>;
43
+ listenSubscribe<T = IncomingListenMessage, Params extends Record<string, string> = Record<string, string>>(options: ListenSubscribeOptions<T, Params>, handlerFn: HandlerFn<T>): Promise<RemoveHandlerFn>;
44
+ listen<T>(topic: string, handlerFn: HandlerFn<T>): RemoveHandlerFn;
45
+ listen<T, Params extends Record<string, string>>(options: ListenOptions<T, Params>, handlerFn: HandlerFn<T>): RemoveHandlerFn;
46
+ startFlow<T>(flow: PacketFlowFunc<ReadMap, WriteMap, T>): Promise<T> & {
47
+ flowId: bigint | number;
48
+ };
49
+ stopFlow(flowId: bigint | number, rejection?: Error): boolean;
50
+ /**
51
+ * Run the accept and next function of all active flows
52
+ * @param packet
53
+ * @returns true if a flow has been found
54
+ */
55
+ protected continueFlows(packet: MqttParseResult<ReadMap, (typeof PacketType)[keyof typeof PacketType]>): boolean;
56
+ protected clearFinishedFlows(): void;
57
+ protected stopExecutingFlows(error: Error): void;
58
+ protected getFlowById<T = any>(id: number | bigint): PacketFlowData<T> | undefined;
59
+ protected registerClient(options: RegisterClientOptions): Promise<any>;
60
+ protected getConnectFlow(options: ConnectRequestOptions): PacketFlowFunc<ReadMap, WriteMap, unknown>;
61
+ protected updateKeepAlive(value: number): void;
62
+ protected sendData(data: Buffer): void;
63
+ protected handlePacket(packet: MqttParseResult<ReadMap, PacketType>): Promise<void>;
64
+ protected onConnAck(connAck: ConnectResponsePacket): void;
65
+ protected onPublish(publish: PublishRequestPacket): void;
66
+ protected onPingReq(): void;
67
+ protected logReceivedPacket(packet: {
68
+ type: PacketType;
69
+ data: any;
70
+ }): void;
71
+ protected reset(): void;
72
+ protected setReady(): void;
73
+ protected reconnect(): Promise<void>;
74
+ protected setDisconnected(reason?: string | Error): Promise<void>;
75
+ }
@@ -0,0 +1,423 @@
1
+ 'use strict';
2
+ Object.defineProperty(exports, '__esModule', { value: true });
3
+ exports.MqttClient = void 0;
4
+ const flow_1 = require('./flow');
5
+ const mqtt_parser_1 = require('./mqtt.parser');
6
+ const transport_1 = require('./transport');
7
+ const packets_1 = require('./packets');
8
+ const errors_1 = require('./errors');
9
+ const stream_1 = require('stream');
10
+ const mqtt_constants_1 = require('./mqtt.constants');
11
+ const mqtt_base_client_1 = require('./mqtt.base-client');
12
+ const mqtt_listener_1 = require('./mqtt.listener');
13
+ const mqtt_utilities_1 = require('./mqtt.utilities');
14
+ const debug = require('debug');
15
+ const reconnect_strategy_1 = require('./reconnect-strategy');
16
+ function tryMakeError(e) {
17
+ if (e && e instanceof Error) {
18
+ return e;
19
+ }
20
+ if (typeof e === 'string') {
21
+ return new Error(e);
22
+ }
23
+ return new Error(`unknown error (received: ${e})`);
24
+ }
25
+ class MqttClient extends mqtt_base_client_1.MqttBaseClient {
26
+ get keepAlive() {
27
+ return this.connectOptions?.keepAlive ?? 0;
28
+ }
29
+ set keepAlive(value) {
30
+ if (this.connectOptions) {
31
+ this.connectOptions.keepAlive = value;
32
+ if (value) {
33
+ this.updateKeepAlive(value);
34
+ }
35
+ }
36
+ }
37
+ constructor(options) {
38
+ super();
39
+ this.mqttDebug = debug('mqtt:client');
40
+ this.receiveDebug = this.mqttDebug.extend('packet');
41
+ this.pingDebug = this.mqttDebug.extend('ping');
42
+ // wrapper functions
43
+ this.executePeriodically = (ms, cb) => setInterval(cb, ms);
44
+ this.stopExecuting = ref => clearInterval(ref);
45
+ this.executeDelayed = (ms, cb) => setTimeout(cb, ms);
46
+ this.flowCounter = (0, mqtt_utilities_1.createFlowCounter)();
47
+ this.activeFlows = [];
48
+ this.messageListener = new mqtt_listener_1.MqttListener();
49
+ if (typeof options.autoReconnect === 'boolean') {
50
+ this.reconnectStrategy = options.autoReconnect
51
+ ? new reconnect_strategy_1.MqttsReconnectStrategyDefault()
52
+ : new reconnect_strategy_1.MqttsReconnectStrategyDefault(0);
53
+ } else {
54
+ this.reconnectStrategy = options.autoReconnect;
55
+ }
56
+ this.transport =
57
+ options.transport ??
58
+ new transport_1.TlsTransport({
59
+ host: options.host,
60
+ port: options.port,
61
+ additionalOptions: {
62
+ enableTrace: options.enableTrace,
63
+ },
64
+ });
65
+ this.createTransformer =
66
+ options.createTransformer ??
67
+ (() =>
68
+ new mqtt_parser_1.MqttTransformer({
69
+ debug: this.mqttDebug.extend('transformer'),
70
+ mapping: options.readMap ?? packets_1.DefaultPacketReadMap,
71
+ }));
72
+ this.transformer = this.createTransformer();
73
+ this.transformer.options.debug ??= this.mqttDebug.extend('transformer');
74
+ const packetLogger = this.mqttDebug.extend('write');
75
+ this.writer =
76
+ options.packetWriter ??
77
+ new packets_1.PacketWriter(
78
+ {
79
+ logPacketWrite: (0, mqtt_utilities_1.createDefaultPacketLogger)(packetLogger),
80
+ },
81
+ options.writeMap,
82
+ );
83
+ }
84
+ async _connect(options) {
85
+ this.expectCreated();
86
+ this.mqttDebug(`Connecting using transport "${this.transport.constructor.name}"`);
87
+ this.connectResolver = options;
88
+ this.setConnecting();
89
+ try {
90
+ await this.transport.connect();
91
+ } catch (e) {
92
+ const err = tryMakeError(e);
93
+ this.mqttDebug(`Transport connect error ("${this.transport.constructor.name}")`, err.message);
94
+ const shouldReconnect = this.reconnectStrategy?.check();
95
+ await this.setDisconnected(err);
96
+ if (shouldReconnect) {
97
+ return;
98
+ } else {
99
+ throw e;
100
+ }
101
+ }
102
+ this.createPipeline();
103
+ return this.registerClient(await this.resolveConnectOptions());
104
+ }
105
+ async connect(options) {
106
+ try {
107
+ await this._connect(options);
108
+ } catch (e) {
109
+ const err = tryMakeError(e);
110
+ this.mqttDebug(`Connection error`, err);
111
+ this.emitError(err);
112
+ }
113
+ }
114
+ createPipeline() {
115
+ if (!this.transport.duplex) throw new errors_1.IllegalStateError('Expected transport to expose a Duplex.');
116
+ this.pipeline = (0, stream_1.pipeline)(
117
+ this.transport.duplex,
118
+ this.transformer,
119
+ async source => {
120
+ for await (const chunk of source) {
121
+ if (!chunk.type) {
122
+ throw new Error('Chunk is not a MqttPacket');
123
+ }
124
+ await this.handlePacket(chunk);
125
+ }
126
+ return 'Source drained';
127
+ } /* bad definitions */,
128
+ err => {
129
+ if (err) this.emitError(tryMakeError(err));
130
+ if (!this.disconnected) {
131
+ (err ? this.setDisconnected(tryMakeError(err)) : this.setDisconnected('Pipeline finished')).catch(
132
+ e => this.emitWarning(e),
133
+ );
134
+ }
135
+ },
136
+ );
137
+ }
138
+ publish(message) {
139
+ return this.startFlow((0, flow_1.outgoingPublishFlow)(message));
140
+ }
141
+ subscribe(subscription) {
142
+ return this.startFlow((0, flow_1.outgoingSubscribeFlow)(subscription));
143
+ }
144
+ unsubscribe(subscription) {
145
+ return this.startFlow((0, flow_1.outgoingUnsubscribeFlow)(subscription));
146
+ }
147
+ async disconnect(force = false) {
148
+ if (!force) {
149
+ return this.startFlow((0, flow_1.outgoingDisconnectFlow)()).then(async () => {
150
+ await this.setDisconnected('Soft disconnect');
151
+ });
152
+ } else {
153
+ await this.setDisconnected('Forced disconnect');
154
+ }
155
+ }
156
+ listenSubscribe(options, handlerFn) {
157
+ const listener = typeof options === 'string' ? { topic: options } : options;
158
+ return this.subscribe({
159
+ ...listener.subscriptionInfo,
160
+ topic: listener.topic.replace(/\/:[A-Za-z-_0-9]+/g, '/+'),
161
+ }).then(() => this.listen(listener, handlerFn));
162
+ }
163
+ listen(options, handlerFn) {
164
+ const listener = typeof options === 'string' ? { topic: options } : options;
165
+ const [topicFilter, paramMatcher] = (0, mqtt_utilities_1.toMqttTopicFilter)(listener.topic);
166
+ return this.messageListener.addHandler({
167
+ topicFilter,
168
+ handle: handlerFn,
169
+ transformer: listener.transformer,
170
+ validator: listener.validator,
171
+ paramMatcher,
172
+ });
173
+ }
174
+ startFlow(flow) {
175
+ const flowId = this.flowCounter.next();
176
+ const promise = new Promise((resolve, reject) => {
177
+ const data = {
178
+ resolvers: { resolve, reject },
179
+ finished: false,
180
+ callbacks: flow(
181
+ value => {
182
+ data.finished = true;
183
+ resolve(value);
184
+ },
185
+ err => {
186
+ data.finished = true;
187
+ reject(err);
188
+ },
189
+ ),
190
+ flowId,
191
+ flowFunc: flow,
192
+ };
193
+ const first = data.callbacks.start();
194
+ if (first) this.sendData(this.writer.write(first.type, first.options));
195
+ if (!data.finished) {
196
+ this.activeFlows.push(data);
197
+ }
198
+ });
199
+ promise.flowId = flowId;
200
+ return promise;
201
+ }
202
+ stopFlow(flowId, rejection) {
203
+ const flow = this.getFlowById(flowId);
204
+ if (!flow) return false;
205
+ this.activeFlows = this.activeFlows.filter(f => f.flowId !== flowId);
206
+ flow.finished = true;
207
+ flow.resolvers.reject(rejection ?? new errors_1.FlowStoppedError());
208
+ return true;
209
+ }
210
+ /**
211
+ * Run the accept and next function of all active flows
212
+ * @param packet
213
+ * @returns true if a flow has been found
214
+ */
215
+ continueFlows(packet) {
216
+ let result = false;
217
+ for (const flow of this.activeFlows) {
218
+ if (flow.callbacks.accept?.(packet.data)) {
219
+ const next = flow.callbacks.next?.(packet.data);
220
+ if (next) {
221
+ this.sendData(this.writer.write(next.type, next.options));
222
+ }
223
+ result = true;
224
+ }
225
+ }
226
+ this.clearFinishedFlows();
227
+ return result;
228
+ }
229
+ clearFinishedFlows() {
230
+ this.activeFlows = this.activeFlows.filter(flow => !flow.finished);
231
+ }
232
+ stopExecutingFlows(error) {
233
+ for (const flow of this.activeFlows) {
234
+ flow.resolvers.reject(error);
235
+ flow.finished = true;
236
+ }
237
+ this.activeFlows = [];
238
+ }
239
+ getFlowById(id) {
240
+ return this.activeFlows.find(f => f.flowId === id);
241
+ }
242
+ registerClient(options) {
243
+ const flow = this.getConnectFlow(options);
244
+ const connectPromiseFlow = this.startFlow(flow);
245
+ if (typeof options.connectDelay !== 'undefined') {
246
+ const timerId = this.executeDelayed(options.connectDelay ?? 2000, () => {
247
+ const flow = this.getFlowById(connectPromiseFlow.flowId);
248
+ if (!flow) {
249
+ // there's no flow anymore
250
+ this.stopExecuting(timerId);
251
+ return;
252
+ }
253
+ const packet = flow.callbacks.start();
254
+ if (packet) this.sendData(this.writer.write(packet.type, packet.options));
255
+ });
256
+ connectPromiseFlow
257
+ .finally(() => this.stopExecuting(timerId))
258
+ // not sure why this is necessary, but it's there so no unhandledRejection is thrown
259
+ .catch(() => undefined);
260
+ }
261
+ options.signal?.addEventListener('abort', () => {
262
+ try {
263
+ this.stopFlow(connectPromiseFlow.flowId, new errors_1.AbortError('Connecting aborted'));
264
+ } catch (e) {
265
+ this.emitWarning(tryMakeError(e));
266
+ }
267
+ });
268
+ return connectPromiseFlow;
269
+ }
270
+ getConnectFlow(options) {
271
+ // assume the defaults are used
272
+ return (0, flow_1.outgoingConnectFlow)(options);
273
+ }
274
+ updateKeepAlive(value) {
275
+ value = Math.max(value - 0.5, 1);
276
+ if (this.keepAliveTimer) {
277
+ this.stopExecuting(this.keepAliveTimer);
278
+ }
279
+ this.mqttDebug(`Starting keep-alive-ping {delay: ${value}}`);
280
+ this.keepAliveTimer = this.executePeriodically(value * 1000, () => {
281
+ // assume the defaults are used
282
+ this.startFlow((0, flow_1.outgoingPingFlow)())
283
+ .then(() => this.pingDebug(`PingPong @ ${Date.now()}`))
284
+ .catch(e => {
285
+ this.emitWarning(e);
286
+ this.pingDebug(`PingPong failed. (${e.message})`);
287
+ });
288
+ });
289
+ }
290
+ sendData(data) {
291
+ if (!this.transport.duplex) {
292
+ this.emitError(new errors_1.IllegalStateError('Expected a duplex - was undefined'));
293
+ return;
294
+ }
295
+ this.transport.duplex.write(data);
296
+ }
297
+ async handlePacket(packet) {
298
+ this.logReceivedPacket(packet);
299
+ this.emit(mqtt_constants_1.PacketType[packet.type].toUpperCase(), packet.data);
300
+ let forceCheckFlows = false;
301
+ // The following "type assertions" are valid as clients extending MqttClient have to implement their own methods
302
+ switch (packet.type) {
303
+ case mqtt_constants_1.PacketType.ConnAck: {
304
+ this.onConnAck(packet.data);
305
+ break;
306
+ }
307
+ case mqtt_constants_1.PacketType.Publish: {
308
+ this.onPublish(packet.data);
309
+ break;
310
+ }
311
+ case mqtt_constants_1.PacketType.PingReq: {
312
+ this.onPingReq();
313
+ break;
314
+ }
315
+ case mqtt_constants_1.PacketType.Disconnect: {
316
+ this.setDisconnected('disconnect packet received').catch(e => this.emitWarning(e));
317
+ break;
318
+ }
319
+ default:
320
+ forceCheckFlows = true;
321
+ }
322
+ if (!this.continueFlows(packet) && forceCheckFlows) {
323
+ this.emitWarning(new errors_1.UnexpectedPacketError((0, mqtt_constants_1.packetTypeToString)(packet.type)));
324
+ }
325
+ }
326
+ onConnAck(connAck) {
327
+ if (connAck.isSuccess) {
328
+ this.setReady();
329
+ this.emitConnect(connAck);
330
+ if (this.connectOptions?.keepAlive) {
331
+ this.updateKeepAlive(this.connectOptions.keepAlive);
332
+ }
333
+ this.reconnectStrategy?.reset();
334
+ } else {
335
+ const error = new errors_1.ConnectError(connAck.errorName);
336
+ this.setDisconnected(error).catch(e => this.emitWarning(e));
337
+ this.emitError(error);
338
+ }
339
+ }
340
+ onPublish(publish) {
341
+ this.startFlow(
342
+ (0, flow_1.incomingPublishFlow)(
343
+ {
344
+ topic: publish.topic,
345
+ payload: publish.payload,
346
+ qosLevel: publish.qos,
347
+ retained: publish.retain,
348
+ duplicate: publish.duplicate,
349
+ },
350
+ publish.identifier ?? undefined,
351
+ ),
352
+ )
353
+ .then(async m => {
354
+ this.emitMessage(m);
355
+ await this.messageListener.handleMessage(m);
356
+ })
357
+ .catch(e => this.emitWarning(e));
358
+ }
359
+ onPingReq() {
360
+ this.startFlow((0, flow_1.incomingPingFlow)())
361
+ .then(() => this.pingDebug(`Server-PingPong @ ${Date.now()}`))
362
+ .catch(e => {
363
+ this.emitWarning(e);
364
+ this.pingDebug(`Server-PingPong failed. (${e.message})`);
365
+ });
366
+ }
367
+ logReceivedPacket(packet) {
368
+ if (packet.type !== mqtt_constants_1.PacketType.PingReq && packet.type !== mqtt_constants_1.PacketType.PingResp)
369
+ this.receiveDebug(`Received ${(0, mqtt_utilities_1.stringifyObject)(packet.data)}`);
370
+ }
371
+ reset() {
372
+ super.reset();
373
+
374
+ try {
375
+ this.stopExecutingFlows(new errors_1.AbortError('Resetting'));
376
+ } catch (e) {
377
+ this.emitWarning(tryMakeError(e));
378
+ }
379
+
380
+ if (this.keepAliveTimer) {
381
+ clearInterval(this.keepAliveTimer);
382
+ this.keepAliveTimer = undefined;
383
+ }
384
+ this.transformer.reset();
385
+ }
386
+ setReady() {
387
+ super.setReady();
388
+ this.mqttDebug('Ready!');
389
+ }
390
+ async reconnect() {
391
+ this.transport.reset();
392
+ this.transformer = this.createTransformer();
393
+ this.transformer.options.debug = this.transformer.options.debug ?? this.mqttDebug.extend('transformer');
394
+ await this.reconnectStrategy?.wait();
395
+ await this.connect();
396
+ }
397
+ async setDisconnected(reason) {
398
+ const willReconnect = this.reconnectStrategy?.check(reason) ?? false;
399
+ this.mqttDebug(`Disconnected. Will reconnect: ${willReconnect}`);
400
+ this._setDisconnected();
401
+
402
+ try {
403
+ this.stopExecutingFlows(new errors_1.AbortError('Client disconnected.'));
404
+ } catch (e) {
405
+ this.emitWarning(tryMakeError(e));
406
+ }
407
+
408
+ this.emitDisconnect({ reason, reconnect: willReconnect });
409
+ if (this.transport.active) {
410
+ await new Promise(resolve => this.transport.duplex?.end(resolve) ?? /* never */ resolve());
411
+ if (this.transport.duplex && !this.transport.duplex.writableEnded) {
412
+ this.transport.duplex.destroy(new Error('force destroy'));
413
+ }
414
+ }
415
+ this.stopExecuting(this.keepAliveTimer);
416
+ this.reset();
417
+ if (willReconnect) {
418
+ await this.reconnect();
419
+ }
420
+ }
421
+ }
422
+ exports.MqttClient = MqttClient;
423
+ //# sourceMappingURL=mqtt.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mqtt.client.js","sourceRoot":"","sources":["../src/mqtt.client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export declare enum PacketType {
2
+ Connect = 1,
3
+ ConnAck = 2,
4
+ Publish = 3,
5
+ PubAck = 4,
6
+ PubRec = 5,
7
+ PubRel = 6,
8
+ PubComp = 7,
9
+ Subscribe = 8,
10
+ SubAck = 9,
11
+ Unsubscribe = 10,
12
+ UnsubAck = 11,
13
+ PingReq = 12,
14
+ PingResp = 13,
15
+ Disconnect = 14
16
+ }
17
+ export interface EventMapping {
18
+ CONNECT: PacketType.Connect;
19
+ CONNACK: PacketType.ConnAck;
20
+ PUBLISH: PacketType.Publish;
21
+ PUBACK: PacketType.PubAck;
22
+ PUBREC: PacketType.PubRec;
23
+ PUBREL: PacketType.PubRel;
24
+ PUBCOMP: PacketType.PubComp;
25
+ SUBSCRIBE: PacketType.Subscribe;
26
+ SUBACK: PacketType.SubAck;
27
+ UNSUBSCRIBE: PacketType.Unsubscribe;
28
+ UNSUBACK: PacketType.UnsubAck;
29
+ PINGREQ: PacketType.PingReq;
30
+ PINGRESP: PacketType.PingResp;
31
+ DISCONNECT: PacketType.Disconnect;
32
+ }
33
+ export type PacketName = keyof EventMapping;
34
+ export declare function packetTypeToString(type: PacketType): PacketName;