@seriousme/opifex 2.0.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/ConnectionState.ts +1 -1
- package/client/client.ts +40 -9
- package/client/context.ts +11 -13
- package/client/deps.ts +8 -5
- package/client/handlers/handleConnack.ts +2 -2
- package/client/mod.ts +13 -2
- package/client/store/memoryStore.ts +11 -10
- package/client/store/store.ts +1 -1
- package/deno/tcpClient.ts +21 -8
- package/deno/tcpServer.ts +21 -4
- package/deno/tlsServer.ts +20 -4
- package/deno/wsServer.ts +23 -0
- package/dist/client/ConnectionState.d.ts +1 -1
- package/dist/client/ConnectionState.d.ts.map +1 -1
- package/dist/client/client.d.ts +38 -9
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +23 -0
- package/dist/client/client.js.map +1 -1
- package/dist/client/context.d.ts +8 -8
- package/dist/client/context.d.ts.map +1 -1
- package/dist/client/context.js.map +1 -1
- package/dist/client/deps.d.ts +3 -3
- package/dist/client/deps.d.ts.map +1 -1
- package/dist/client/deps.js.map +1 -1
- package/dist/client/handlers/handleConnack.d.ts.map +1 -1
- package/dist/client/handlers/handleConnack.js.map +1 -1
- package/dist/client/mod.d.ts +3 -2
- package/dist/client/mod.d.ts.map +1 -1
- package/dist/client/mod.js +1 -1
- package/dist/client/mod.js.map +1 -1
- package/dist/client/store/memoryStore.d.ts +3 -3
- package/dist/client/store/memoryStore.d.ts.map +1 -1
- package/dist/client/store/memoryStore.js +2 -2
- package/dist/client/store/memoryStore.js.map +1 -1
- package/dist/client/store/store.d.ts +1 -1
- package/dist/client/store/store.d.ts.map +1 -1
- package/dist/examples/authHandler.test.js +3 -3
- package/dist/examples/authHandler.test.js.map +1 -1
- package/dist/mqttConn/mqttConn.d.ts +2 -17
- package/dist/mqttConn/mqttConn.d.ts.map +1 -1
- package/dist/mqttConn/mqttConn.js +1 -1
- package/dist/mqttConn/mqttConn.js.map +1 -1
- package/dist/mqttPacket/AuthenticationResult.d.ts +4 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -1
- package/dist/mqttPacket/AuthenticationResult.js.map +1 -1
- package/dist/mqttPacket/PacketType.d.ts +4 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -1
- package/dist/mqttPacket/Properties.d.ts +2 -2
- package/dist/mqttPacket/Properties.d.ts.map +1 -1
- package/dist/mqttPacket/ReasonCode.d.ts +3 -5
- package/dist/mqttPacket/ReasonCode.d.ts.map +1 -1
- package/dist/mqttPacket/ReasonCode.js.map +1 -1
- package/dist/mqttPacket/RetainHandling.d.ts +4 -0
- package/dist/mqttPacket/RetainHandling.d.ts.map +1 -1
- package/dist/mqttPacket/auth.d.ts +6 -5
- package/dist/mqttPacket/auth.d.ts.map +1 -1
- package/dist/mqttPacket/auth.js +2 -2
- package/dist/mqttPacket/auth.js.map +1 -1
- package/dist/mqttPacket/codec.d.ts.map +1 -1
- package/dist/mqttPacket/codec.js.map +1 -1
- package/dist/mqttPacket/connack.d.ts +9 -7
- package/dist/mqttPacket/connack.d.ts.map +1 -1
- package/dist/mqttPacket/connack.js +2 -2
- package/dist/mqttPacket/connack.js.map +1 -1
- package/dist/mqttPacket/connect.d.ts +5 -4
- package/dist/mqttPacket/connect.d.ts.map +1 -1
- package/dist/mqttPacket/connect.js.map +1 -1
- package/dist/mqttPacket/decoder.d.ts +6 -4
- package/dist/mqttPacket/decoder.d.ts.map +1 -1
- package/dist/mqttPacket/decoder.js +1 -1
- package/dist/mqttPacket/decoder.js.map +1 -1
- package/dist/mqttPacket/disconnect.d.ts +7 -5
- package/dist/mqttPacket/disconnect.d.ts.map +1 -1
- package/dist/mqttPacket/disconnect.js +2 -2
- package/dist/mqttPacket/disconnect.js.map +1 -1
- package/dist/mqttPacket/encoder.d.ts +7 -5
- package/dist/mqttPacket/encoder.d.ts.map +1 -1
- package/dist/mqttPacket/encoder.js +1 -1
- package/dist/mqttPacket/encoder.js.map +1 -1
- package/dist/mqttPacket/mod.d.ts +1 -1
- package/dist/mqttPacket/mod.d.ts.map +1 -1
- package/dist/mqttPacket/pingreq.d.ts +4 -3
- package/dist/mqttPacket/pingreq.d.ts.map +1 -1
- package/dist/mqttPacket/pingreq.js.map +1 -1
- package/dist/mqttPacket/pingres.d.ts +4 -3
- package/dist/mqttPacket/pingres.d.ts.map +1 -1
- package/dist/mqttPacket/pingres.js.map +1 -1
- package/dist/mqttPacket/pubblishAcks.d.ts +7 -7
- package/dist/mqttPacket/pubblishAcks.d.ts.map +1 -1
- package/dist/mqttPacket/pubblishAcks.js +2 -2
- package/dist/mqttPacket/pubblishAcks.js.map +1 -1
- package/dist/mqttPacket/publish.d.ts +5 -4
- package/dist/mqttPacket/publish.d.ts.map +1 -1
- package/dist/mqttPacket/publish.js.map +1 -1
- package/dist/mqttPacket/suback.d.ts +7 -5
- package/dist/mqttPacket/suback.d.ts.map +1 -1
- package/dist/mqttPacket/suback.js +2 -2
- package/dist/mqttPacket/suback.js.map +1 -1
- package/dist/mqttPacket/subscribe.d.ts +7 -5
- package/dist/mqttPacket/subscribe.d.ts.map +1 -1
- package/dist/mqttPacket/subscribe.js.map +1 -1
- package/dist/mqttPacket/types.d.ts +1 -21
- package/dist/mqttPacket/types.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.d.ts +7 -5
- package/dist/mqttPacket/unsuback.d.ts.map +1 -1
- package/dist/mqttPacket/unsuback.js +1 -1
- package/dist/mqttPacket/unsuback.js.map +1 -1
- package/dist/mqttPacket/unsubscribe.d.ts +5 -4
- package/dist/mqttPacket/unsubscribe.d.ts.map +1 -1
- package/dist/mqttPacket/unsubscribe.js.map +1 -1
- package/dist/node/tcpClient.d.ts +21 -1
- package/dist/node/tcpClient.d.ts.map +1 -1
- package/dist/node/tcpClient.js +18 -4
- package/dist/node/tcpClient.js.map +1 -1
- package/dist/node/tcpServer.d.ts +18 -0
- package/dist/node/tcpServer.d.ts.map +1 -1
- package/dist/node/tcpServer.js +17 -2
- package/dist/node/tcpServer.js.map +1 -1
- package/dist/node/tlsServer.d.ts +18 -0
- package/dist/node/tlsServer.d.ts.map +1 -1
- package/dist/node/tlsServer.js +17 -2
- package/dist/node/tlsServer.js.map +1 -1
- package/dist/persistence/basicPersistence.d.ts +4 -4
- package/dist/persistence/basicPersistence.d.ts.map +1 -1
- package/dist/persistence/basicPersistence.js.map +1 -1
- package/dist/persistence/deps.d.ts +1 -1
- package/dist/persistence/deps.d.ts.map +1 -1
- package/dist/persistence/memory/memoryStorage.d.ts +3 -3
- package/dist/persistence/memory/memoryStorage.d.ts.map +1 -1
- package/dist/persistence/mod.d.ts +1 -1
- package/dist/persistence/mod.d.ts.map +1 -1
- package/dist/persistence/persistence.d.ts +3 -3
- package/dist/persistence/persistence.d.ts.map +1 -1
- package/dist/persistence/sqlite/sqliteStorage.d.ts +2 -2
- package/dist/persistence/sqlite/sqliteStorage.d.ts.map +1 -1
- package/dist/persistence/storage.d.ts +1 -1
- package/dist/persistence/storage.d.ts.map +1 -1
- package/dist/server/context.d.ts +4 -4
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/deps.d.ts +2 -2
- package/dist/server/deps.d.ts.map +1 -1
- package/dist/server/deps.js.map +1 -1
- package/dist/server/handlers/completeConnect.d.ts +3 -2
- package/dist/server/handlers/completeConnect.d.ts.map +1 -1
- package/dist/server/handlers/completeConnect.js.map +1 -1
- package/dist/server/handlers/handlePublish.d.ts.map +1 -1
- package/dist/server/handlers/handlePublish.js.map +1 -1
- package/dist/server/handlers/handleSubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleSubscribe.js.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -1
- package/dist/server/handlers/handleUnsubscribe.js.map +1 -1
- package/dist/server/mod.d.ts +1 -1
- package/dist/server/mod.d.ts.map +1 -1
- package/dist/server/server.d.ts +3 -3
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js.map +1 -1
- package/dist/socket/socket.d.ts +4 -0
- package/dist/socket/socket.d.ts.map +1 -1
- package/dist/socket/socket.js.map +1 -1
- package/dist/utils/logger.d.ts +3 -3
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/web/wsClient.d.ts +7 -0
- package/dist/web/wsClient.d.ts.map +1 -1
- package/dist/web/wsClient.js +12 -1
- package/dist/web/wsClient.js.map +1 -1
- package/examples/authHandler.test.ts +3 -3
- package/mqttConn/mqttConn.ts +2 -18
- package/mqttPacket/AuthenticationResult.ts +6 -0
- package/mqttPacket/PacketType.ts +5 -0
- package/mqttPacket/Properties.ts +2 -2
- package/mqttPacket/ReasonCode.ts +6 -8
- package/mqttPacket/RetainHandling.ts +5 -0
- package/mqttPacket/auth.ts +7 -7
- package/mqttPacket/codec.ts +3 -2
- package/mqttPacket/connack.ts +11 -10
- package/mqttPacket/connect.ts +4 -11
- package/mqttPacket/decoder.ts +9 -11
- package/mqttPacket/disconnect.ts +7 -7
- package/mqttPacket/encoder.test.ts +2 -2
- package/mqttPacket/encoder.ts +9 -7
- package/mqttPacket/mod.ts +0 -4
- package/mqttPacket/pingreq.ts +3 -3
- package/mqttPacket/pingres.ts +3 -3
- package/mqttPacket/pubblishAcks.ts +9 -9
- package/mqttPacket/publish.ts +4 -11
- package/mqttPacket/publishAcks.test.ts +3 -3
- package/mqttPacket/suback.ts +8 -13
- package/mqttPacket/subscribe.ts +6 -12
- package/mqttPacket/types.ts +1 -26
- package/mqttPacket/unsuback.ts +8 -7
- package/mqttPacket/unsubscribe.ts +4 -10
- package/node/tcpClient.ts +21 -6
- package/node/tcpServer.ts +23 -6
- package/node/tlsServer.ts +23 -7
- package/package.json +1 -1
- package/persistence/basicPersistence.ts +5 -5
- package/persistence/deps.ts +1 -1
- package/persistence/memory/memoryStorage.ts +3 -3
- package/persistence/mod.ts +1 -1
- package/persistence/persistence.testing.ts +4 -4
- package/persistence/persistence.ts +3 -3
- package/persistence/sqlite/sqliteStorage.ts +2 -2
- package/persistence/storage.ts +1 -1
- package/server/context.ts +5 -5
- package/server/deps.ts +1 -2
- package/server/handlers/completeConnect.ts +2 -2
- package/server/handlers/handlePublish.ts +3 -4
- package/server/handlers/handleSubscribe.ts +3 -4
- package/server/handlers/handleUnsubscribe.ts +2 -2
- package/server/mod.ts +1 -1
- package/server/server.ts +3 -3
- package/socket/socket.ts +4 -0
- package/tools/benchmarks/receiver.ts +2 -2
- package/tools/benchmarks/sender.ts +2 -2
- package/utils/logger.ts +3 -3
- package/web/wsClient.ts +13 -1
package/client/client.ts
CHANGED
|
@@ -8,19 +8,20 @@ import {
|
|
|
8
8
|
} from "./deps.ts";
|
|
9
9
|
|
|
10
10
|
import type {
|
|
11
|
+
AuthenticationResult,
|
|
11
12
|
ConnectPacket,
|
|
12
|
-
|
|
13
|
+
ProtocolLevel,
|
|
13
14
|
PublishPacket,
|
|
14
15
|
SockConn,
|
|
16
|
+
Store,
|
|
15
17
|
SubscribePacket,
|
|
16
|
-
TAuthenticationResult,
|
|
17
18
|
} from "./deps.ts";
|
|
18
19
|
|
|
19
20
|
import { noop } from "../utils/mod.ts";
|
|
20
21
|
|
|
21
22
|
import { Context } from "./context.ts";
|
|
22
23
|
import type { AuthenticatedResult } from "./context.ts";
|
|
23
|
-
import type {
|
|
24
|
+
import type { ConnectionState } from "./ConnectionState.ts";
|
|
24
25
|
import { BufferedAsyncIterable } from "./deps.ts";
|
|
25
26
|
|
|
26
27
|
/**
|
|
@@ -32,18 +33,25 @@ function generateClientId(prefix: string): string {
|
|
|
32
33
|
return `${prefix}-${Math.random().toString().slice(-10)}`;
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
type
|
|
36
|
+
/** All properties of a connect packet, except for type and protocol name */
|
|
37
|
+
export type ConnectOptions = Omit<
|
|
36
38
|
ConnectPacket,
|
|
37
39
|
"type" | "protocolName"
|
|
38
40
|
>;
|
|
39
41
|
|
|
40
42
|
/** ConnectParameters define how to connect */
|
|
41
43
|
export type ConnectParameters = {
|
|
44
|
+
/** the URL to connect to */
|
|
42
45
|
url?: URL | undefined;
|
|
46
|
+
/** any CA Certs to trust */
|
|
43
47
|
caCerts?: string[] | undefined;
|
|
48
|
+
/** the clients certificate */
|
|
44
49
|
cert?: string | undefined;
|
|
50
|
+
/** the clients private key*/
|
|
45
51
|
key?: string | undefined;
|
|
52
|
+
/** number of retries before stopping connection attempts */
|
|
46
53
|
numberOfRetries?: number | undefined;
|
|
54
|
+
/** connect options */
|
|
47
55
|
options?: ConnectOptions | undefined;
|
|
48
56
|
};
|
|
49
57
|
|
|
@@ -80,7 +88,7 @@ function backOffSleep(random: boolean, attempt: number): Promise<void> {
|
|
|
80
88
|
/** the default MQTT URL to connect to */
|
|
81
89
|
export const DEFAULT_URL = "mqtt://localhost:1883/";
|
|
82
90
|
/** the default protocol level to connect with*/
|
|
83
|
-
export const DEFAULT_PROTOCOLLEVEL = MQTTLevel.v4;
|
|
91
|
+
export const DEFAULT_PROTOCOLLEVEL = MQTTLevel.v4 as ProtocolLevel;
|
|
84
92
|
/** the default keepalive time */
|
|
85
93
|
export const DEFAULT_KEEPALIVE = 60; // 60 seconds
|
|
86
94
|
const DEFAULT_RETRIES = 3; // on first connect
|
|
@@ -119,21 +127,36 @@ export class Client {
|
|
|
119
127
|
reasonString: "No authentication method configured",
|
|
120
128
|
};
|
|
121
129
|
};
|
|
130
|
+
/** callback for errors */
|
|
122
131
|
public onError: (err: Error) => void = noop;
|
|
132
|
+
/** callback for publish packets */
|
|
123
133
|
public onPacket: (pkt: PublishPacket) => void | Promise<void> = noop;
|
|
134
|
+
/** callback once connected */
|
|
124
135
|
public onConnected: () => void = noop;
|
|
136
|
+
/** callback once disconnected */
|
|
125
137
|
public onDisconnected: () => void = noop;
|
|
138
|
+
/** callback when reconnecting */
|
|
126
139
|
public onReconnecting: () => void = noop;
|
|
127
140
|
|
|
141
|
+
/** clientId prefix used when automatically generating a client Id */
|
|
128
142
|
protected clientIdPrefix = CLIENTID_PREFIX;
|
|
143
|
+
/** number of times to retry connect */
|
|
129
144
|
protected numberOfRetries = DEFAULT_RETRIES;
|
|
145
|
+
/** the URL to connect to */
|
|
130
146
|
protected connectUrl: URL = new URL(DEFAULT_URL);
|
|
147
|
+
/** the keepAlive value in number of seconds */
|
|
131
148
|
protected keepAlive = DEFAULT_KEEPALIVE;
|
|
149
|
+
/** the requested protocol level */
|
|
132
150
|
protected protocolLevel = DEFAULT_PROTOCOLLEVEL;
|
|
151
|
+
/** try auto reconnect if connection is lost */
|
|
133
152
|
protected autoReconnect = true;
|
|
153
|
+
/** any CA Certs to trust */
|
|
134
154
|
protected caCerts?: string[] | undefined;
|
|
155
|
+
/** the clients certificate */
|
|
135
156
|
protected cert?: string | undefined;
|
|
157
|
+
/** the clients private key*/
|
|
136
158
|
protected key?: string | undefined;
|
|
159
|
+
/** the MQTT clientId */
|
|
137
160
|
protected clientId: string;
|
|
138
161
|
private ctx: Context;
|
|
139
162
|
private connectPacket?: ConnectPacket;
|
|
@@ -141,17 +164,25 @@ export class Client {
|
|
|
141
164
|
/**
|
|
142
165
|
* Creates a new MQTT client instance
|
|
143
166
|
*/
|
|
144
|
-
constructor(store?:
|
|
167
|
+
constructor(store?: Store) {
|
|
145
168
|
const cStore = store ? store : new MemoryStore();
|
|
146
169
|
this.ctx = new Context(cStore, this);
|
|
147
170
|
this.clientId = generateClientId(this.clientIdPrefix);
|
|
148
171
|
this.numberOfRetries = DEFAULT_RETRIES;
|
|
149
172
|
}
|
|
150
173
|
|
|
151
|
-
|
|
174
|
+
/**
|
|
175
|
+
* Current connection state
|
|
176
|
+
* @returns connectionState as ConnectionState
|
|
177
|
+
*/
|
|
178
|
+
public get connectionState(): ConnectionState {
|
|
152
179
|
return this.ctx.connectionState;
|
|
153
180
|
}
|
|
154
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Current configured connection URL
|
|
184
|
+
* @returns URL object
|
|
185
|
+
*/
|
|
155
186
|
public get url(): URL {
|
|
156
187
|
return this.connectUrl;
|
|
157
188
|
}
|
|
@@ -222,7 +253,7 @@ export class Client {
|
|
|
222
253
|
* @param params - Connection parameters
|
|
223
254
|
* @returns Promise resolving to authentication result
|
|
224
255
|
*/
|
|
225
|
-
connect(params: ConnectParameters = {}): Promise<
|
|
256
|
+
connect(params: ConnectParameters = {}): Promise<AuthenticationResult> {
|
|
226
257
|
this.connectUrl = params?.url || this.connectUrl;
|
|
227
258
|
this.numberOfRetries = params.numberOfRetries || this.numberOfRetries;
|
|
228
259
|
this.caCerts = params?.caCerts;
|
|
@@ -240,7 +271,7 @@ export class Client {
|
|
|
240
271
|
type: PacketType.connect,
|
|
241
272
|
...options,
|
|
242
273
|
};
|
|
243
|
-
const deferred = new Deferred<
|
|
274
|
+
const deferred = new Deferred<AuthenticationResult>();
|
|
244
275
|
this.ctx.unresolvedConnect = deferred;
|
|
245
276
|
this.doConnect();
|
|
246
277
|
return deferred.promise;
|
package/client/context.ts
CHANGED
|
@@ -8,22 +8,20 @@ import {
|
|
|
8
8
|
} from "./deps.ts";
|
|
9
9
|
import type {
|
|
10
10
|
AnyPacket,
|
|
11
|
+
AuthenticationResult,
|
|
11
12
|
ConnectPacket,
|
|
12
|
-
IStore,
|
|
13
13
|
PacketId,
|
|
14
14
|
ProtocolLevel,
|
|
15
15
|
PublishPacket,
|
|
16
|
+
ReasonCode,
|
|
16
17
|
ReturnCodes,
|
|
17
18
|
SockConn,
|
|
19
|
+
Store,
|
|
18
20
|
SubscribePacket,
|
|
19
|
-
TAuthenticationResult,
|
|
20
|
-
TPacketType,
|
|
21
|
-
TReasonCode,
|
|
22
21
|
UnsubscribePacket,
|
|
23
22
|
} from "./deps.ts";
|
|
24
23
|
|
|
25
24
|
import { handlePacket } from "./handlers/handlePacket.ts";
|
|
26
|
-
import type { TConnectionState } from "./ConnectionState.ts";
|
|
27
25
|
import { ConnectionState } from "./ConnectionState.ts";
|
|
28
26
|
import type { Client } from "./client.ts";
|
|
29
27
|
import { assert } from "../utils/assert.ts";
|
|
@@ -31,7 +29,7 @@ import { assert } from "../utils/assert.ts";
|
|
|
31
29
|
/**
|
|
32
30
|
* packets not allowed during authentication
|
|
33
31
|
*/
|
|
34
|
-
function blockedDuringAuthentication(pktType:
|
|
32
|
+
function blockedDuringAuthentication(pktType: PacketType) {
|
|
35
33
|
return (
|
|
36
34
|
pktType === PacketType.publish ||
|
|
37
35
|
pktType === PacketType.subscribe ||
|
|
@@ -41,24 +39,24 @@ function blockedDuringAuthentication(pktType: TPacketType) {
|
|
|
41
39
|
|
|
42
40
|
/** Possible results from authHandler */
|
|
43
41
|
export type AuthenticatedResult = {
|
|
44
|
-
reasonCode:
|
|
42
|
+
reasonCode: ReasonCode;
|
|
45
43
|
reasonString?: string;
|
|
46
44
|
authData?: Uint8Array;
|
|
47
45
|
};
|
|
48
46
|
|
|
49
47
|
export class Context {
|
|
50
48
|
mqttConn?: MqttConn;
|
|
51
|
-
#connectionState:
|
|
49
|
+
#connectionState: ConnectionState;
|
|
52
50
|
protocolLevel: ProtocolLevel;
|
|
53
51
|
pingTimer?: Timer;
|
|
54
|
-
unresolvedConnect?: Deferred<
|
|
52
|
+
unresolvedConnect?: Deferred<AuthenticationResult>;
|
|
55
53
|
unresolvedPublish: Map<PacketId, Deferred<void>>;
|
|
56
54
|
unresolvedSubscribe: Map<PacketId, Deferred<ReturnCodes>>;
|
|
57
55
|
unresolvedUnSubscribe: Map<PacketId, Deferred<void>>;
|
|
58
|
-
store:
|
|
56
|
+
store: Store;
|
|
59
57
|
#client: Client;
|
|
60
58
|
|
|
61
|
-
constructor(store:
|
|
59
|
+
constructor(store: Store, client: Client) {
|
|
62
60
|
this.#client = client;
|
|
63
61
|
this.store = store;
|
|
64
62
|
this.#connectionState = ConnectionState.offline;
|
|
@@ -68,11 +66,11 @@ export class Context {
|
|
|
68
66
|
this.unresolvedUnSubscribe = new Map();
|
|
69
67
|
}
|
|
70
68
|
|
|
71
|
-
get connectionState():
|
|
69
|
+
get connectionState(): ConnectionState {
|
|
72
70
|
return this.#connectionState;
|
|
73
71
|
}
|
|
74
72
|
|
|
75
|
-
set connectionState(state:
|
|
73
|
+
set connectionState(state: ConnectionState) {
|
|
76
74
|
this.#connectionState = state;
|
|
77
75
|
switch (state) {
|
|
78
76
|
case "connected":
|
package/client/deps.ts
CHANGED
|
@@ -17,10 +17,7 @@ export type {
|
|
|
17
17
|
ReturnCodes,
|
|
18
18
|
SubackPacket,
|
|
19
19
|
SubscribePacket,
|
|
20
|
-
TAuthenticationResult,
|
|
21
20
|
Topic,
|
|
22
|
-
TPacketType,
|
|
23
|
-
TReasonCode,
|
|
24
21
|
UnsubackPacket,
|
|
25
22
|
UnsubscribePacket,
|
|
26
23
|
} from "../mqttPacket/mod.ts";
|
|
@@ -38,8 +35,14 @@ export {
|
|
|
38
35
|
} from "../mqttPacket/mod.ts";
|
|
39
36
|
|
|
40
37
|
export { MqttConn } from "../mqttConn/mqttConn.ts";
|
|
41
|
-
export type {
|
|
38
|
+
export type {
|
|
39
|
+
NetAddr,
|
|
40
|
+
SockAddr,
|
|
41
|
+
SockConn,
|
|
42
|
+
UnixAddr,
|
|
43
|
+
VsockAddr,
|
|
44
|
+
} from "../socket/socket.ts";
|
|
42
45
|
export { Timer } from "../timer/timer.ts";
|
|
43
46
|
export { BufferedAsyncIterable, Deferred, logger } from "../utils/mod.ts";
|
|
44
47
|
export { MemoryStore } from "./store/memoryStore.ts";
|
|
45
|
-
export type {
|
|
48
|
+
export type { Store } from "./store/store.ts";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Context } from "../context.ts";
|
|
2
2
|
import { ConnectionState } from "../ConnectionState.ts";
|
|
3
3
|
import { AuthenticationResultByNumber, ReasonCodeByNumber } from "../deps.ts";
|
|
4
|
-
import type { ConnackPacket,
|
|
4
|
+
import type { ConnackPacket, ReasonCode } from "../deps.ts";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Handles the CONNACK packet received from the MQTT broker
|
|
@@ -38,7 +38,7 @@ export async function handleConnack(ctx: Context, packet: ConnackPacket) {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
const errMsg = packet.protocolLevel === 5
|
|
41
|
-
? ReasonCodeByNumber[result as
|
|
41
|
+
? ReasonCodeByNumber[result as ReasonCode]
|
|
42
42
|
: AuthenticationResultByNumber[result];
|
|
43
43
|
|
|
44
44
|
const err = new Error(
|
package/client/mod.ts
CHANGED
|
@@ -8,10 +8,21 @@ export {
|
|
|
8
8
|
DEFAULT_PROTOCOLLEVEL,
|
|
9
9
|
DEFAULT_URL,
|
|
10
10
|
} from "./client.ts";
|
|
11
|
-
export { MQTTLevel, ReasonCode } from "./deps.ts";
|
|
12
|
-
export type {
|
|
11
|
+
export { logger, MQTTLevel, ReasonCode } from "./deps.ts";
|
|
12
|
+
export type {
|
|
13
|
+
AuthenticationResult,
|
|
14
|
+
NetAddr,
|
|
15
|
+
ProtocolLevel,
|
|
16
|
+
QoS,
|
|
17
|
+
SockAddr,
|
|
18
|
+
SockConn,
|
|
19
|
+
UnixAddr,
|
|
20
|
+
VsockAddr,
|
|
21
|
+
} from "./deps.ts";
|
|
13
22
|
export type {
|
|
14
23
|
ConnectParameters,
|
|
15
24
|
PublishParameters,
|
|
16
25
|
SubscribeParameters,
|
|
17
26
|
} from "./client.ts";
|
|
27
|
+
|
|
28
|
+
export type { ConnectionState } from "./ConnectionState.ts";
|
|
@@ -5,20 +5,21 @@
|
|
|
5
5
|
import { assert } from "./deps.ts";
|
|
6
6
|
import type { PacketId } from "./deps.ts";
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
import { MAX_PACKET_ID } from "./store.ts";
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
PacketStore,
|
|
12
|
+
PendingAckOutgoing,
|
|
13
|
+
pendingIncoming,
|
|
14
|
+
PendingOutgoing,
|
|
15
|
+
PendingOutgoingPackets,
|
|
16
|
+
Store,
|
|
16
17
|
} from "./store.ts";
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
|
-
* In-memory implementation of the
|
|
20
|
+
* In-memory implementation of the Store interface for managing MQTT packet storage
|
|
20
21
|
*/
|
|
21
|
-
export class MemoryStore implements
|
|
22
|
+
export class MemoryStore implements Store {
|
|
22
23
|
/** Current packet ID counter */
|
|
23
24
|
private packetId: PacketId;
|
|
24
25
|
|
package/client/store/store.ts
CHANGED
|
@@ -46,7 +46,7 @@ export type PendingOutgoingPackets = PendingAckOutgoing | PendingOutgoing;
|
|
|
46
46
|
/**
|
|
47
47
|
* Interface defining the storage requirements for MQTT packet state management
|
|
48
48
|
*/
|
|
49
|
-
export interface
|
|
49
|
+
export interface Store {
|
|
50
50
|
/** Store for incoming packets pending processing */
|
|
51
51
|
pendingIncoming: PacketStore<pendingIncoming>;
|
|
52
52
|
|
package/deno/tcpClient.ts
CHANGED
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
* it extends the platform agnostic Client class
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
import { logger } from "../client/
|
|
8
|
-
import type { SockConn } from "../client/
|
|
6
|
+
|
|
7
|
+
import { Client, logger } from "../client/mod.ts";
|
|
8
|
+
import type { SockConn } from "../client/mod.ts";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Fetches data from a file and returns it as a string
|
|
12
|
+
*
|
|
12
13
|
* @param filename
|
|
13
14
|
* @returns Promise
|
|
14
15
|
*
|
|
15
|
-
* Fetches data from a file and returns it as a string
|
|
16
16
|
* @example
|
|
17
17
|
* const data = await getFileData("data.txt");
|
|
18
18
|
*/
|
|
@@ -29,12 +29,16 @@ export async function getFileData(
|
|
|
29
29
|
return data;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
*
|
|
32
|
+
/**
|
|
33
|
+
* TcpClient extends the Client class to provide TCP based clients
|
|
34
34
|
* it is used by the MQTTclient to connect to the broker
|
|
35
35
|
* see mqtt.ts in the /bin folder as an example
|
|
36
36
|
*/
|
|
37
37
|
export class TcpClient extends Client {
|
|
38
|
+
/** Connect using MQTT over TCP
|
|
39
|
+
* @param hostname the name of the host to connect to
|
|
40
|
+
* @param port the port number
|
|
41
|
+
*/
|
|
38
42
|
protected async connectMQTT(
|
|
39
43
|
hostname: string,
|
|
40
44
|
port = 1883,
|
|
@@ -43,6 +47,15 @@ export class TcpClient extends Client {
|
|
|
43
47
|
return await Deno.connect({ hostname, port });
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Connect using MQTT over TLS
|
|
52
|
+
* @param hostname the name of the host to connect to
|
|
53
|
+
* @param port the port number
|
|
54
|
+
* @param caCerts the CA certificates to trust
|
|
55
|
+
* @param cert the clients certificate
|
|
56
|
+
* @param key the clients private key
|
|
57
|
+
* @returns a Deno.TlsConn object
|
|
58
|
+
*/
|
|
46
59
|
protected async connectMQTTS(
|
|
47
60
|
hostname: string,
|
|
48
61
|
port = 8883,
|
|
@@ -61,7 +74,7 @@ export class TcpClient extends Client {
|
|
|
61
74
|
return await Deno.connectTls(connectOpts);
|
|
62
75
|
}
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
/** createConn is used by the base client class */
|
|
65
78
|
protected override createConn(): Promise<SockConn> {
|
|
66
79
|
const { protocol, hostname, port: portStr } = this.connectUrl;
|
|
67
80
|
const port = Number(portStr);
|
package/deno/tcpServer.ts
CHANGED
|
@@ -7,12 +7,16 @@
|
|
|
7
7
|
import { MqttServer } from "../server/mod.ts";
|
|
8
8
|
import type { MqttServerOptions } from "../server/mod.ts";
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
* TCP server that wraps a MqttServer, see
|
|
10
|
+
/**
|
|
11
|
+
* TCP server that wraps a MqttServer, see the /examples folder
|
|
12
12
|
*/
|
|
13
13
|
export class TcpServer {
|
|
14
14
|
private listener: Deno.Listener<Deno.Conn>;
|
|
15
15
|
private mqttServer: MqttServer;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Create a new TCP server
|
|
19
|
+
*/
|
|
16
20
|
constructor(
|
|
17
21
|
serverOptions: Deno.TcpListenOptions,
|
|
18
22
|
mqttOptions: MqttServerOptions,
|
|
@@ -21,16 +25,26 @@ export class TcpServer {
|
|
|
21
25
|
this.mqttServer = new MqttServer(mqttOptions);
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Start listening
|
|
30
|
+
*/
|
|
31
|
+
async start(): Promise<void> {
|
|
25
32
|
for await (const conn of this.listener) {
|
|
26
33
|
this.mqttServer.serve(conn);
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
|
-
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Stop listening
|
|
39
|
+
*/
|
|
40
|
+
stop(): void {
|
|
30
41
|
this.mqttServer.close(true);
|
|
31
42
|
this.listener.close();
|
|
32
43
|
}
|
|
33
44
|
|
|
45
|
+
/**
|
|
46
|
+
* The port number the server is listening on
|
|
47
|
+
*/
|
|
34
48
|
get port(): number | undefined {
|
|
35
49
|
// deno-coverage-ignore-start
|
|
36
50
|
if (this.listener.addr.transport === "tcp") {
|
|
@@ -40,6 +54,9 @@ export class TcpServer {
|
|
|
40
54
|
// deno-coverage-ignore-stop
|
|
41
55
|
}
|
|
42
56
|
|
|
57
|
+
/**
|
|
58
|
+
* The address the server is listening on
|
|
59
|
+
*/
|
|
43
60
|
get address(): string | undefined {
|
|
44
61
|
// deno-coverage-ignore-start
|
|
45
62
|
if (this.listener.addr.transport === "tcp") {
|
package/deno/tlsServer.ts
CHANGED
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
import { MqttServer } from "../server/mod.ts";
|
|
8
8
|
import type { MqttServerOptions } from "../server/mod.ts";
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
*
|
|
10
|
+
/**
|
|
11
|
+
* TLS server that wraps a MqttServer, see the /examples folder
|
|
12
12
|
*/
|
|
13
13
|
export class TlsServer {
|
|
14
14
|
private listener: Deno.TlsListener;
|
|
15
15
|
private mqttServer: MqttServer;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new TLS server
|
|
18
|
+
*/
|
|
16
19
|
constructor(
|
|
17
20
|
serverOptions: Deno.ListenTlsOptions & Deno.TlsCertifiedKeyPem,
|
|
18
21
|
mqttOptions: MqttServerOptions,
|
|
@@ -21,20 +24,33 @@ export class TlsServer {
|
|
|
21
24
|
this.mqttServer = new MqttServer(mqttOptions);
|
|
22
25
|
}
|
|
23
26
|
|
|
24
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Start listening
|
|
29
|
+
*/
|
|
30
|
+
async start(): Promise<void> {
|
|
25
31
|
for await (const conn of this.listener) {
|
|
26
32
|
this.mqttServer.serve(conn);
|
|
27
33
|
}
|
|
28
34
|
}
|
|
29
|
-
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Stop listening
|
|
38
|
+
*/
|
|
39
|
+
stop(): void {
|
|
30
40
|
this.mqttServer.close();
|
|
31
41
|
this.listener.close();
|
|
32
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* The port number the server is listening on
|
|
45
|
+
*/
|
|
33
46
|
// deno-coverage-ignore-start
|
|
34
47
|
get port(): number | undefined {
|
|
35
48
|
return this.listener.addr.port;
|
|
36
49
|
}
|
|
37
50
|
|
|
51
|
+
/**
|
|
52
|
+
* The address the server is listening on
|
|
53
|
+
*/
|
|
38
54
|
get address(): string | undefined {
|
|
39
55
|
return this.listener.addr.hostname;
|
|
40
56
|
}
|
package/deno/wsServer.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* this a Deno specific implementation of a WebSocket server
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
1
5
|
import { MqttServer } from "../server/mod.ts";
|
|
2
6
|
import type { MqttServerOptions } from "../server/mod.ts";
|
|
3
7
|
import { logger } from "../utils/logger.ts";
|
|
4
8
|
import { wrapWebSocket } from "../web/wrapWebSocket.ts";
|
|
5
9
|
import type { HostnamePort } from "../web/wrapWebSocket.ts";
|
|
6
10
|
|
|
11
|
+
/**
|
|
12
|
+
* WebSocket server that wraps a MqttServer, see the /examples folder
|
|
13
|
+
*/
|
|
7
14
|
export class WsServer {
|
|
8
15
|
private server?: Deno.HttpServer;
|
|
9
16
|
private mqttServer: MqttServer;
|
|
@@ -12,6 +19,9 @@ export class WsServer {
|
|
|
12
19
|
hostname?: string;
|
|
13
20
|
};
|
|
14
21
|
|
|
22
|
+
/**
|
|
23
|
+
* Create a new WebSocket server
|
|
24
|
+
*/
|
|
15
25
|
constructor(
|
|
16
26
|
serverOptions: Deno.ServeOptions & { port: number; hostname?: string },
|
|
17
27
|
mqttOptions: MqttServerOptions,
|
|
@@ -19,6 +29,7 @@ export class WsServer {
|
|
|
19
29
|
this.listenOptions = serverOptions;
|
|
20
30
|
this.mqttServer = new MqttServer(mqttOptions);
|
|
21
31
|
}
|
|
32
|
+
|
|
22
33
|
private async handleWsClient(socket: WebSocket, remoteAddr: HostnamePort) {
|
|
23
34
|
const conn = await wrapWebSocket(socket, remoteAddr);
|
|
24
35
|
logger.debug("created conn");
|
|
@@ -26,6 +37,9 @@ export class WsServer {
|
|
|
26
37
|
logger.debug("serving mqtt");
|
|
27
38
|
}
|
|
28
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Start listening
|
|
42
|
+
*/
|
|
29
43
|
async start(): Promise<void> {
|
|
30
44
|
this.server = Deno.serve(this.listenOptions, (req, info) => {
|
|
31
45
|
const { hostname, port } = info.remoteAddr;
|
|
@@ -46,6 +60,9 @@ export class WsServer {
|
|
|
46
60
|
await this.server.finished;
|
|
47
61
|
}
|
|
48
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Stop listening
|
|
65
|
+
*/
|
|
49
66
|
stop(): void {
|
|
50
67
|
this.mqttServer.close(true);
|
|
51
68
|
if (this.server) {
|
|
@@ -53,6 +70,9 @@ export class WsServer {
|
|
|
53
70
|
}
|
|
54
71
|
}
|
|
55
72
|
|
|
73
|
+
/**
|
|
74
|
+
* The port number the server is listening on
|
|
75
|
+
*/
|
|
56
76
|
get port(): number | undefined {
|
|
57
77
|
// deno-coverage-ignore-start
|
|
58
78
|
if (this.server?.addr.transport === "tcp") {
|
|
@@ -62,6 +82,9 @@ export class WsServer {
|
|
|
62
82
|
// deno-coverage-ignore-stop
|
|
63
83
|
}
|
|
64
84
|
|
|
85
|
+
/**
|
|
86
|
+
* The address the server is listening on
|
|
87
|
+
*/
|
|
65
88
|
get address(): string | undefined {
|
|
66
89
|
// deno-coverage-ignore-start
|
|
67
90
|
if (this.server?.addr.transport === "tcp") {
|
|
@@ -19,5 +19,5 @@ export declare const ConnectionState: {
|
|
|
19
19
|
/**
|
|
20
20
|
* @description Type representing the possible values of ConnectionState
|
|
21
21
|
*/
|
|
22
|
-
export type
|
|
22
|
+
export type ConnectionState = (typeof ConnectionState)[keyof typeof ConnectionState];
|
|
23
23
|
//# sourceMappingURL=ConnectionState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionState.d.ts","sourceRoot":"","sources":["../../client/ConnectionState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,sDAAsD;aACtD,OAAO,EAAE,SAAS;IAClB,4DAA4D;aAC5D,UAAU,EAAE,YAAY;IACxB,sCAAsC;aACtC,SAAS,EAAE,WAAW;IACtB,gDAAgD;aAChD,aAAa,EAAE,eAAe;IAC9B,mCAAmC;aACnC,YAAY,EAAE,cAAc;IAC5B,2CAA2C;aAC3C,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"ConnectionState.d.ts","sourceRoot":"","sources":["../../client/ConnectionState.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,eAAe;IAC1B,sDAAsD;aACtD,OAAO,EAAE,SAAS;IAClB,4DAA4D;aAC5D,UAAU,EAAE,YAAY;IACxB,sCAAsC;aACtC,SAAS,EAAE,WAAW;IACtB,gDAAgD;aAChD,aAAa,EAAE,eAAe;IAC9B,mCAAmC;aACnC,YAAY,EAAE,cAAc;IAC5B,2CAA2C;aAC3C,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC"}
|