@seriousme/opifex 1.7.0 → 1.8.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/README.md +17 -2
- package/dist/bin/conformanceServer.d.ts +3 -0
- package/dist/bin/conformanceServer.d.ts.map +1 -0
- package/dist/bin/conformanceServer.js +98 -0
- package/dist/bin/conformanceServer.js.map +1 -0
- package/dist/bin/demoServer.d.ts +3 -0
- package/dist/bin/demoServer.d.ts.map +1 -0
- package/dist/bin/demoServer.js +97 -0
- package/dist/bin/demoServer.js.map +1 -0
- package/dist/bin/mqtt.d.ts +3 -0
- package/dist/bin/mqtt.d.ts.map +1 -0
- package/dist/bin/mqtt.js +257 -0
- package/dist/bin/mqtt.js.map +1 -0
- package/dist/client/ConnectionState.d.ts +21 -0
- package/dist/client/ConnectionState.d.ts.map +1 -0
- package/dist/client/ConnectionState.js +17 -0
- package/dist/client/ConnectionState.js.map +1 -0
- package/dist/client/client.d.ts +94 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +188 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/context.d.ts +29 -0
- package/dist/client/context.d.ts.map +1 -0
- package/dist/client/context.js +153 -0
- package/dist/client/context.js.map +1 -0
- package/dist/client/deps.d.ts +8 -0
- package/dist/client/deps.d.ts.map +1 -0
- package/dist/client/deps.js +6 -0
- package/dist/client/deps.js.map +1 -0
- package/dist/client/handlers/handleConnack.d.ts +10 -0
- package/dist/client/handlers/handleConnack.d.ts.map +1 -0
- package/dist/client/handlers/handleConnack.js +25 -0
- package/dist/client/handlers/handleConnack.js.map +1 -0
- package/dist/client/handlers/handlePacket.d.ts +11 -0
- package/dist/client/handlers/handlePacket.d.ts.map +1 -0
- package/dist/client/handlers/handlePacket.js +58 -0
- package/dist/client/handlers/handlePacket.js.map +1 -0
- package/dist/client/handlers/handlePuback.d.ts +12 -0
- package/dist/client/handlers/handlePuback.d.ts.map +1 -0
- package/dist/client/handlers/handlePuback.js +14 -0
- package/dist/client/handlers/handlePuback.js.map +1 -0
- package/dist/client/handlers/handlePubcomp.d.ts +13 -0
- package/dist/client/handlers/handlePubcomp.d.ts.map +1 -0
- package/dist/client/handlers/handlePubcomp.js +17 -0
- package/dist/client/handlers/handlePubcomp.js.map +1 -0
- package/dist/client/handlers/handlePublish.d.ts +10 -0
- package/dist/client/handlers/handlePublish.d.ts.map +1 -0
- package/dist/client/handlers/handlePublish.js +34 -0
- package/dist/client/handlers/handlePublish.js.map +1 -0
- package/dist/client/handlers/handlePubrec.d.ts +17 -0
- package/dist/client/handlers/handlePubrec.d.ts.map +1 -0
- package/dist/client/handlers/handlePubrec.js +27 -0
- package/dist/client/handlers/handlePubrec.js.map +1 -0
- package/dist/client/handlers/handlePubrel.d.ts +20 -0
- package/dist/client/handlers/handlePubrel.d.ts.map +1 -0
- package/dist/client/handlers/handlePubrel.js +32 -0
- package/dist/client/handlers/handlePubrel.js.map +1 -0
- package/dist/client/handlers/handleSuback.d.ts +13 -0
- package/dist/client/handlers/handleSuback.d.ts.map +1 -0
- package/dist/client/handlers/handleSuback.js +15 -0
- package/dist/client/handlers/handleSuback.js.map +1 -0
- package/dist/client/handlers/handleUnsuback.d.ts +14 -0
- package/dist/client/handlers/handleUnsuback.d.ts.map +1 -0
- package/dist/client/handlers/handleUnsuback.js +16 -0
- package/dist/client/handlers/handleUnsuback.js.map +1 -0
- package/dist/client/mod.d.ts +7 -0
- package/dist/client/mod.d.ts.map +1 -0
- package/dist/client/mod.js +6 -0
- package/dist/client/mod.js.map +1 -0
- package/dist/client/store/deps.d.ts +3 -0
- package/dist/client/store/deps.d.ts.map +1 -0
- package/dist/client/store/deps.js +2 -0
- package/dist/client/store/deps.js.map +1 -0
- package/dist/client/store/memoryStore.d.ts +34 -0
- package/dist/client/store/memoryStore.d.ts.map +1 -0
- package/dist/client/store/memoryStore.js +59 -0
- package/dist/client/store/memoryStore.js.map +1 -0
- package/dist/client/store/store.d.ts +46 -0
- package/dist/client/store/store.d.ts.map +1 -0
- package/dist/client/store/store.js +5 -0
- package/dist/client/store/store.js.map +1 -0
- package/dist/mqttConn/mqttConn.d.ts +79 -0
- package/dist/mqttConn/mqttConn.d.ts.map +1 -0
- package/dist/mqttConn/mqttConn.js +151 -0
- package/dist/mqttConn/mqttConn.js.map +1 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts +16 -0
- package/dist/mqttPacket/AuthenticationResult.d.ts.map +1 -0
- package/dist/mqttPacket/AuthenticationResult.js +17 -0
- package/dist/mqttPacket/AuthenticationResult.js.map +1 -0
- package/dist/mqttPacket/BitMask.d.ts +11 -0
- package/dist/mqttPacket/BitMask.d.ts.map +1 -0
- package/dist/mqttPacket/BitMask.js +11 -0
- package/dist/mqttPacket/BitMask.js.map +1 -0
- package/dist/mqttPacket/PacketType.d.ts +19 -0
- package/dist/mqttPacket/PacketType.d.ts.map +1 -0
- package/dist/mqttPacket/PacketType.js +19 -0
- package/dist/mqttPacket/PacketType.js.map +1 -0
- package/dist/mqttPacket/connack.d.ts +18 -0
- package/dist/mqttPacket/connack.d.ts.map +1 -0
- package/dist/mqttPacket/connack.js +28 -0
- package/dist/mqttPacket/connack.js.map +1 -0
- package/dist/mqttPacket/connect.d.ts +28 -0
- package/dist/mqttPacket/connect.d.ts.map +1 -0
- package/dist/mqttPacket/connect.js +116 -0
- package/dist/mqttPacket/connect.js.map +1 -0
- package/dist/mqttPacket/decoder.d.ts +24 -0
- package/dist/mqttPacket/decoder.d.ts.map +1 -0
- package/dist/mqttPacket/decoder.js +90 -0
- package/dist/mqttPacket/decoder.js.map +1 -0
- package/dist/mqttPacket/disconnect.d.ts +16 -0
- package/dist/mqttPacket/disconnect.d.ts.map +1 -0
- package/dist/mqttPacket/disconnect.js +15 -0
- package/dist/mqttPacket/disconnect.js.map +1 -0
- package/dist/mqttPacket/encoder.d.ts +17 -0
- package/dist/mqttPacket/encoder.d.ts.map +1 -0
- package/dist/mqttPacket/encoder.js +57 -0
- package/dist/mqttPacket/encoder.js.map +1 -0
- package/dist/mqttPacket/length.d.ts +12 -0
- package/dist/mqttPacket/length.d.ts.map +1 -0
- package/dist/mqttPacket/length.js +44 -0
- package/dist/mqttPacket/length.js.map +1 -0
- package/dist/mqttPacket/mod.d.ts +122 -0
- package/dist/mqttPacket/mod.d.ts.map +1 -0
- package/dist/mqttPacket/mod.js +77 -0
- package/dist/mqttPacket/mod.js.map +1 -0
- package/dist/mqttPacket/pingreq.d.ts +15 -0
- package/dist/mqttPacket/pingreq.d.ts.map +1 -0
- package/dist/mqttPacket/pingreq.js +16 -0
- package/dist/mqttPacket/pingreq.js.map +1 -0
- package/dist/mqttPacket/pingres.d.ts +16 -0
- package/dist/mqttPacket/pingres.d.ts.map +1 -0
- package/dist/mqttPacket/pingres.js +15 -0
- package/dist/mqttPacket/pingres.js.map +1 -0
- package/dist/mqttPacket/puback.d.ts +16 -0
- package/dist/mqttPacket/puback.d.ts.map +1 -0
- package/dist/mqttPacket/puback.js +21 -0
- package/dist/mqttPacket/puback.js.map +1 -0
- package/dist/mqttPacket/pubcomp.d.ts +17 -0
- package/dist/mqttPacket/pubcomp.d.ts.map +1 -0
- package/dist/mqttPacket/pubcomp.js +21 -0
- package/dist/mqttPacket/pubcomp.js.map +1 -0
- package/dist/mqttPacket/publish.d.ts +22 -0
- package/dist/mqttPacket/publish.d.ts.map +1 -0
- package/dist/mqttPacket/publish.js +52 -0
- package/dist/mqttPacket/publish.js.map +1 -0
- package/dist/mqttPacket/pubrec.d.ts +17 -0
- package/dist/mqttPacket/pubrec.d.ts.map +1 -0
- package/dist/mqttPacket/pubrec.js +21 -0
- package/dist/mqttPacket/pubrec.js.map +1 -0
- package/dist/mqttPacket/pubrel.d.ts +17 -0
- package/dist/mqttPacket/pubrel.d.ts.map +1 -0
- package/dist/mqttPacket/pubrel.js +21 -0
- package/dist/mqttPacket/pubrel.js.map +1 -0
- package/dist/mqttPacket/suback.d.ts +18 -0
- package/dist/mqttPacket/suback.d.ts.map +1 -0
- package/dist/mqttPacket/suback.js +30 -0
- package/dist/mqttPacket/suback.js.map +1 -0
- package/dist/mqttPacket/subscribe.d.ts +24 -0
- package/dist/mqttPacket/subscribe.d.ts.map +1 -0
- package/dist/mqttPacket/subscribe.js +53 -0
- package/dist/mqttPacket/subscribe.js.map +1 -0
- package/dist/mqttPacket/types.d.ts +48 -0
- package/dist/mqttPacket/types.d.ts.map +1 -0
- package/dist/mqttPacket/types.js +2 -0
- package/dist/mqttPacket/types.js.map +1 -0
- package/dist/mqttPacket/unsuback.d.ts +17 -0
- package/dist/mqttPacket/unsuback.d.ts.map +1 -0
- package/dist/mqttPacket/unsuback.js +21 -0
- package/dist/mqttPacket/unsuback.js.map +1 -0
- package/dist/mqttPacket/unsubscribe.d.ts +17 -0
- package/dist/mqttPacket/unsubscribe.d.ts.map +1 -0
- package/dist/mqttPacket/unsubscribe.js +37 -0
- package/dist/mqttPacket/unsubscribe.js.map +1 -0
- package/dist/mqttPacket/validators.d.ts +5 -0
- package/dist/mqttPacket/validators.d.ts.map +1 -0
- package/dist/mqttPacket/validators.js +16 -0
- package/dist/mqttPacket/validators.js.map +1 -0
- package/dist/node/tcpClient.d.ts +18 -0
- package/dist/node/tcpClient.d.ts.map +1 -0
- package/dist/node/tcpClient.js +82 -0
- package/dist/node/tcpClient.js.map +1 -0
- package/dist/node/tcpServer.d.ts +17 -0
- package/dist/node/tcpServer.d.ts.map +1 -0
- package/dist/node/tcpServer.js +51 -0
- package/dist/node/tcpServer.js.map +1 -0
- package/dist/node/wrapNodeSocket.d.ts +12 -0
- package/dist/node/wrapNodeSocket.d.ts.map +1 -0
- package/dist/node/wrapNodeSocket.js +57 -0
- package/dist/node/wrapNodeSocket.js.map +1 -0
- package/dist/persistence/deps.d.ts +5 -0
- package/dist/persistence/deps.d.ts.map +1 -0
- package/dist/persistence/deps.js +4 -0
- package/dist/persistence/deps.js.map +1 -0
- package/dist/persistence/memory/memoryPersistence.d.ts +28 -0
- package/dist/persistence/memory/memoryPersistence.d.ts.map +1 -0
- package/dist/persistence/memory/memoryPersistence.js +119 -0
- package/dist/persistence/memory/memoryPersistence.js.map +1 -0
- package/dist/persistence/persistence.d.ts +81 -0
- package/dist/persistence/persistence.d.ts.map +1 -0
- package/dist/persistence/persistence.js +2 -0
- package/dist/persistence/persistence.js.map +1 -0
- package/dist/persistence/store.d.ts +13 -0
- package/dist/persistence/store.d.ts.map +1 -0
- package/dist/persistence/store.js +2 -0
- package/dist/persistence/store.js.map +1 -0
- package/dist/server/context.d.ts +45 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +101 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/deps.d.ts +10 -0
- package/dist/server/deps.d.ts.map +1 -0
- package/dist/server/deps.js +6 -0
- package/dist/server/deps.js.map +1 -0
- package/dist/server/handlers/handleConnect.d.ts +9 -0
- package/dist/server/handlers/handleConnect.d.ts.map +1 -0
- package/dist/server/handlers/handleConnect.js +81 -0
- package/dist/server/handlers/handleConnect.js.map +1 -0
- package/dist/server/handlers/handleDisconnect.d.ts +8 -0
- package/dist/server/handlers/handleDisconnect.d.ts.map +1 -0
- package/dist/server/handlers/handleDisconnect.js +10 -0
- package/dist/server/handlers/handleDisconnect.js.map +1 -0
- package/dist/server/handlers/handlePacket.d.ts +11 -0
- package/dist/server/handlers/handlePacket.d.ts.map +1 -0
- package/dist/server/handlers/handlePacket.js +66 -0
- package/dist/server/handlers/handlePacket.js.map +1 -0
- package/dist/server/handlers/handlePingreq.d.ts +8 -0
- package/dist/server/handlers/handlePingreq.d.ts.map +1 -0
- package/dist/server/handlers/handlePingreq.js +12 -0
- package/dist/server/handlers/handlePingreq.js.map +1 -0
- package/dist/server/handlers/handlePuback.d.ts +13 -0
- package/dist/server/handlers/handlePuback.d.ts.map +1 -0
- package/dist/server/handlers/handlePuback.js +17 -0
- package/dist/server/handlers/handlePuback.js.map +1 -0
- package/dist/server/handlers/handlePubcomp.d.ts +12 -0
- package/dist/server/handlers/handlePubcomp.d.ts.map +1 -0
- package/dist/server/handlers/handlePubcomp.js +15 -0
- package/dist/server/handlers/handlePubcomp.js.map +1 -0
- package/dist/server/handlers/handlePublish.d.ts +11 -0
- package/dist/server/handlers/handlePublish.d.ts.map +1 -0
- package/dist/server/handlers/handlePublish.js +55 -0
- package/dist/server/handlers/handlePublish.js.map +1 -0
- package/dist/server/handlers/handlePubrec.d.ts +15 -0
- package/dist/server/handlers/handlePubrec.d.ts.map +1 -0
- package/dist/server/handlers/handlePubrec.js +24 -0
- package/dist/server/handlers/handlePubrec.js.map +1 -0
- package/dist/server/handlers/handlePubrel.d.ts +16 -0
- package/dist/server/handlers/handlePubrel.d.ts.map +1 -0
- package/dist/server/handlers/handlePubrel.js +28 -0
- package/dist/server/handlers/handlePubrel.js.map +1 -0
- package/dist/server/handlers/handleSubscribe.d.ts +13 -0
- package/dist/server/handlers/handleSubscribe.d.ts.map +1 -0
- package/dist/server/handlers/handleSubscribe.js +57 -0
- package/dist/server/handlers/handleSubscribe.js.map +1 -0
- package/dist/server/handlers/handleUnsubscribe.d.ts +10 -0
- package/dist/server/handlers/handleUnsubscribe.d.ts.map +1 -0
- package/dist/server/handlers/handleUnsubscribe.js +19 -0
- package/dist/server/handlers/handleUnsubscribe.js.map +1 -0
- package/dist/server/mod.d.ts +11 -0
- package/dist/server/mod.d.ts.map +1 -0
- package/dist/server/mod.js +8 -0
- package/dist/server/mod.js.map +1 -0
- package/dist/server/server.d.ts +27 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +48 -0
- package/dist/server/server.js.map +1 -0
- package/dist/socket/socket.d.ts +29 -0
- package/dist/socket/socket.d.ts.map +1 -0
- package/dist/socket/socket.js +37 -0
- package/dist/socket/socket.js.map +1 -0
- package/dist/timer/timer.d.ts +13 -0
- package/dist/timer/timer.d.ts.map +1 -0
- package/dist/timer/timer.js +41 -0
- package/dist/timer/timer.js.map +1 -0
- package/dist/trie/trie.d.ts +21 -0
- package/dist/trie/trie.d.ts.map +1 -0
- package/dist/trie/trie.js +96 -0
- package/dist/trie/trie.js.map +1 -0
- package/dist/utils/args.d.ts +28 -0
- package/dist/utils/args.d.ts.map +1 -0
- package/dist/utils/args.js +76 -0
- package/dist/utils/args.js.map +1 -0
- package/dist/utils/assert.d.ts +10 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +21 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/asyncQueue.d.ts +28 -0
- package/dist/utils/asyncQueue.d.ts.map +1 -0
- package/dist/utils/asyncQueue.js +70 -0
- package/dist/utils/asyncQueue.js.map +1 -0
- package/dist/utils/deferred.d.ts +10 -0
- package/dist/utils/deferred.d.ts.map +1 -0
- package/dist/utils/deferred.js +15 -0
- package/dist/utils/deferred.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +59 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mod.d.ts +13 -0
- package/dist/utils/mod.d.ts.map +1 -0
- package/dist/utils/mod.js +12 -0
- package/dist/utils/mod.js.map +1 -0
- package/dist/utils/nextTick.d.ts +17 -0
- package/dist/utils/nextTick.d.ts.map +1 -0
- package/dist/utils/nextTick.js +19 -0
- package/dist/utils/nextTick.js.map +1 -0
- package/dist/utils/platform.d.ts +5 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +8 -0
- package/dist/utils/platform.js.map +1 -0
- package/examples/tcpServer.test.ts +149 -0
- package/mqttConn/mqttConn.ts +58 -2
- package/package.json +14 -10
- package/persistence/persistence.ts +66 -2
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type ConnectPacket, type PublishPacket, type SockConn, type SubscribePacket, type TAuthenticationResult } from "./deps.ts";
|
|
2
|
+
type ConnectOptions = Omit<ConnectPacket, "type" | "protocolName" | "protocolLevel">;
|
|
3
|
+
/** ConnectParameters define how to connect */
|
|
4
|
+
export type ConnectParameters = {
|
|
5
|
+
url?: URL;
|
|
6
|
+
caCerts?: string[];
|
|
7
|
+
cert?: string;
|
|
8
|
+
key?: string;
|
|
9
|
+
numberOfRetries?: number;
|
|
10
|
+
options?: ConnectOptions;
|
|
11
|
+
};
|
|
12
|
+
/** PublishParameters define how a message should be published */
|
|
13
|
+
export type PublishParameters = Omit<PublishPacket, "type" | "id">;
|
|
14
|
+
/** SubscribeParameters define how to subscribe to a topic */
|
|
15
|
+
export type SubscribeParameters = Omit<SubscribePacket, "type" | "id">;
|
|
16
|
+
/** the default MQTT URL to connect to */
|
|
17
|
+
export declare const DEFAULT_URL = "mqtt://localhost:1883/";
|
|
18
|
+
/**
|
|
19
|
+
* The Client class provides an MQTT Client that can be used to connect to
|
|
20
|
+
* a MQTT broker and publish/subscribe messages.
|
|
21
|
+
*
|
|
22
|
+
* The Client class is not meant to be used directly, but
|
|
23
|
+
* instead should be subclassed and the subclass should
|
|
24
|
+
* override the createConn() method to provide a
|
|
25
|
+
* connection type that is supported by the subclass.
|
|
26
|
+
*/
|
|
27
|
+
export declare class Client {
|
|
28
|
+
protected clientIdPrefix: string;
|
|
29
|
+
protected numberOfRetries: number;
|
|
30
|
+
protected url: URL;
|
|
31
|
+
protected keepAlive: number;
|
|
32
|
+
protected autoReconnect: boolean;
|
|
33
|
+
private caCerts?;
|
|
34
|
+
private cert?;
|
|
35
|
+
private key?;
|
|
36
|
+
private clientId;
|
|
37
|
+
private ctx;
|
|
38
|
+
private connectPacket?;
|
|
39
|
+
/**
|
|
40
|
+
* Creates a new MQTT client instance
|
|
41
|
+
*/
|
|
42
|
+
constructor();
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new connection to the MQTT broker
|
|
45
|
+
* @param protocol - The protocol to use (mqtt, mqtts, etc)
|
|
46
|
+
* @param _hostname - The hostname to connect to
|
|
47
|
+
* @param _port - The port to connect to
|
|
48
|
+
* @param _caCerts - Optional CA certificates
|
|
49
|
+
* @param _cert - Optional client certificate
|
|
50
|
+
* @param _key - Optional client key
|
|
51
|
+
* @returns Promise resolving to a SockConn connection
|
|
52
|
+
*/
|
|
53
|
+
protected createConn(protocol: string, _hostname: string, _port?: number, _caCerts?: string[], _cert?: string, _key?: string): Promise<SockConn>;
|
|
54
|
+
/**
|
|
55
|
+
* Handles the connection process including retries and reconnection
|
|
56
|
+
* @returns Promise that resolves when connection is established or fails
|
|
57
|
+
*/
|
|
58
|
+
private doConnect;
|
|
59
|
+
/**
|
|
60
|
+
* Connects to the MQTT broker
|
|
61
|
+
* @param params - Connection parameters
|
|
62
|
+
* @returns Promise resolving to authentication result
|
|
63
|
+
*/
|
|
64
|
+
connect(params?: ConnectParameters): Promise<TAuthenticationResult>;
|
|
65
|
+
/**
|
|
66
|
+
* Disconnects from the MQTT broker
|
|
67
|
+
* @returns Promise that resolves when disconnected
|
|
68
|
+
*/
|
|
69
|
+
disconnect(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Publishes a message to the MQTT broker
|
|
72
|
+
* @param params - Publish parameters including topic and payload
|
|
73
|
+
* @returns Promise that resolves when published
|
|
74
|
+
*/
|
|
75
|
+
publish(params: PublishParameters): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* Subscribes to topics on the MQTT broker
|
|
78
|
+
* @param params - Subscribe parameters including topics
|
|
79
|
+
* @returns Promise that resolves when subscribed
|
|
80
|
+
*/
|
|
81
|
+
subscribe(params: SubscribeParameters): Promise<void>;
|
|
82
|
+
/**
|
|
83
|
+
* Gets an async iterator for received messages
|
|
84
|
+
* @returns AsyncGenerator yielding received publish packets
|
|
85
|
+
*/
|
|
86
|
+
messages(): AsyncGenerator<PublishPacket, void, unknown>;
|
|
87
|
+
/**
|
|
88
|
+
* Closes the message stream
|
|
89
|
+
* @param reason - Optional reason for closing
|
|
90
|
+
*/
|
|
91
|
+
closeMessages(reason?: string): void;
|
|
92
|
+
}
|
|
93
|
+
export {};
|
|
94
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAKlB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAanB,KAAK,cAAc,GAAG,IAAI,CACxB,aAAa,EACb,MAAM,GAAG,cAAc,GAAG,eAAe,CAC1C,CAAC;AAEF,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,iEAAiE;AACjE,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AACnE,6DAA6D;AAC7D,MAAM,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAqBvE,0CAA0C;AAC1C,eAAO,MAAM,WAAW,2BAA2B,CAAC;AAKpD;;;;;;;;GAQG;AACH,qBAAa,MAAM;IACjB,SAAS,CAAC,cAAc,SAAmB;IAC3C,SAAS,CAAC,eAAe,SAAmB;IAC5C,SAAS,CAAC,GAAG,EAAE,GAAG,CAAwB;IAC1C,SAAS,CAAC,SAAS,SAAqB;IACxC,SAAS,CAAC,aAAa,UAAQ;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAW;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,GAAG,CAAC,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC;;OAEG;;IAMH;;;;;;;;;OASG;IACH,SAAS,CAAC,UAAU,CAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,CAAC;IAMpB;;;OAGG;YACW,SAAS;IA6CvB;;;;OAIG;IACH,OAAO,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuBvE;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvD;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAS3D;;;OAGG;IACI,QAAQ,IAAI,cAAc,CAAC,aAAa,EAAE,IAAI,EAAE,OAAO,CAAC;IAI/D;;;OAGG;IACH,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM;CAG9B"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { Deferred, logger, MemoryStore, PacketType, } from "./deps.js";
|
|
2
|
+
import { Context } from "./context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Generates a random client ID with the given prefix
|
|
5
|
+
* @param prefix - The prefix to use for the client ID
|
|
6
|
+
* @returns A string containing the prefix followed by a random number
|
|
7
|
+
*/
|
|
8
|
+
function generateClientId(prefix) {
|
|
9
|
+
return `${prefix}-${Math.random().toString().slice(-10)}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Implements exponential backoff sleep with optional randomization
|
|
13
|
+
* based on https://dthain.blogspot.com/2009/02/exponential-backoff-in-distributed.html
|
|
14
|
+
* @param random - Whether to add randomization to the delay
|
|
15
|
+
* @param attempt - The attempt number (used to calculate delay)
|
|
16
|
+
* @returns Promise that resolves after the calculated delay
|
|
17
|
+
*/
|
|
18
|
+
function backOffSleep(random, attempt) {
|
|
19
|
+
const factor = 1.5;
|
|
20
|
+
const min = 1000;
|
|
21
|
+
const max = 5000;
|
|
22
|
+
const randomness = 1 + (random ? Math.random() : 0);
|
|
23
|
+
const delay = Math.floor(Math.min(randomness * min * (factor ** attempt), max));
|
|
24
|
+
logger.debug({ delay });
|
|
25
|
+
return new Promise((resolve) => setTimeout(resolve, delay));
|
|
26
|
+
}
|
|
27
|
+
/** the default MQTT URL to connect to */
|
|
28
|
+
export const DEFAULT_URL = "mqtt://localhost:1883/";
|
|
29
|
+
const DEFAULT_KEEPALIVE = 60; // 60 seconds
|
|
30
|
+
const DEFAULT_RETRIES = 3; // on first connect
|
|
31
|
+
const CLIENTID_PREFIX = "opifex"; // on first connect
|
|
32
|
+
/**
|
|
33
|
+
* The Client class provides an MQTT Client that can be used to connect to
|
|
34
|
+
* a MQTT broker and publish/subscribe messages.
|
|
35
|
+
*
|
|
36
|
+
* The Client class is not meant to be used directly, but
|
|
37
|
+
* instead should be subclassed and the subclass should
|
|
38
|
+
* override the createConn() method to provide a
|
|
39
|
+
* connection type that is supported by the subclass.
|
|
40
|
+
*/
|
|
41
|
+
export class Client {
|
|
42
|
+
clientIdPrefix = CLIENTID_PREFIX;
|
|
43
|
+
numberOfRetries = DEFAULT_RETRIES;
|
|
44
|
+
url = new URL(DEFAULT_URL);
|
|
45
|
+
keepAlive = DEFAULT_KEEPALIVE;
|
|
46
|
+
autoReconnect = true;
|
|
47
|
+
caCerts;
|
|
48
|
+
cert;
|
|
49
|
+
key;
|
|
50
|
+
clientId;
|
|
51
|
+
ctx = new Context(new MemoryStore());
|
|
52
|
+
connectPacket;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a new MQTT client instance
|
|
55
|
+
*/
|
|
56
|
+
constructor() {
|
|
57
|
+
this.clientId = generateClientId(this.clientIdPrefix);
|
|
58
|
+
this.numberOfRetries = DEFAULT_RETRIES;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Creates a new connection to the MQTT broker
|
|
62
|
+
* @param protocol - The protocol to use (mqtt, mqtts, etc)
|
|
63
|
+
* @param _hostname - The hostname to connect to
|
|
64
|
+
* @param _port - The port to connect to
|
|
65
|
+
* @param _caCerts - Optional CA certificates
|
|
66
|
+
* @param _cert - Optional client certificate
|
|
67
|
+
* @param _key - Optional client key
|
|
68
|
+
* @returns Promise resolving to a SockConn connection
|
|
69
|
+
*/
|
|
70
|
+
createConn(protocol, _hostname, _port, _caCerts, _cert, _key) {
|
|
71
|
+
// if you need to support alternative connection types just
|
|
72
|
+
// overload this method in your subclass
|
|
73
|
+
throw `Unsupported protocol: ${protocol}`;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Handles the connection process including retries and reconnection
|
|
77
|
+
* @returns Promise that resolves when connection is established or fails
|
|
78
|
+
*/
|
|
79
|
+
async doConnect() {
|
|
80
|
+
if (!this.connectPacket) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
let isReconnect = false;
|
|
84
|
+
let attempt = 1;
|
|
85
|
+
let lastMessage = new Error();
|
|
86
|
+
let tryConnect = true;
|
|
87
|
+
while (tryConnect) {
|
|
88
|
+
logger.debug(`${isReconnect ? "re" : ""}connecting`);
|
|
89
|
+
try {
|
|
90
|
+
const conn = await this.createConn(this.url.protocol, this.url.hostname, Number(this.url.port) ?? undefined, this.caCerts, this.cert, this.key);
|
|
91
|
+
// if we get this far we have a connection
|
|
92
|
+
tryConnect =
|
|
93
|
+
(await this.ctx.handleConnection(conn, this.connectPacket)) &&
|
|
94
|
+
this.autoReconnect;
|
|
95
|
+
logger.debug({ tryConnect });
|
|
96
|
+
isReconnect = true;
|
|
97
|
+
this.connectPacket.clean = false;
|
|
98
|
+
this.ctx.close();
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (err instanceof Error) {
|
|
102
|
+
lastMessage = err;
|
|
103
|
+
}
|
|
104
|
+
logger.debug(lastMessage);
|
|
105
|
+
if (!isReconnect && attempt > this.numberOfRetries) {
|
|
106
|
+
tryConnect = false;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
await backOffSleep(true, attempt++);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (isReconnect === false) {
|
|
114
|
+
this.ctx.unresolvedConnect?.reject(lastMessage);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Connects to the MQTT broker
|
|
119
|
+
* @param params - Connection parameters
|
|
120
|
+
* @returns Promise resolving to authentication result
|
|
121
|
+
*/
|
|
122
|
+
connect(params = {}) {
|
|
123
|
+
this.url = params?.url || this.url;
|
|
124
|
+
this.numberOfRetries = params.numberOfRetries || this.numberOfRetries;
|
|
125
|
+
this.caCerts = params?.caCerts;
|
|
126
|
+
this.cert = params?.cert;
|
|
127
|
+
this.key = params?.key;
|
|
128
|
+
const options = Object.assign({
|
|
129
|
+
keepAlive: this.keepAlive,
|
|
130
|
+
clientId: this.clientId,
|
|
131
|
+
}, params?.options);
|
|
132
|
+
this.connectPacket = {
|
|
133
|
+
type: PacketType.connect,
|
|
134
|
+
...options,
|
|
135
|
+
};
|
|
136
|
+
const deferred = new Deferred();
|
|
137
|
+
this.ctx.unresolvedConnect = deferred;
|
|
138
|
+
this.doConnect();
|
|
139
|
+
return deferred.promise;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Disconnects from the MQTT broker
|
|
143
|
+
* @returns Promise that resolves when disconnected
|
|
144
|
+
*/
|
|
145
|
+
async disconnect() {
|
|
146
|
+
await this.ctx.disconnect();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Publishes a message to the MQTT broker
|
|
150
|
+
* @param params - Publish parameters including topic and payload
|
|
151
|
+
* @returns Promise that resolves when published
|
|
152
|
+
*/
|
|
153
|
+
async publish(params) {
|
|
154
|
+
const packet = {
|
|
155
|
+
type: PacketType.publish,
|
|
156
|
+
...params,
|
|
157
|
+
};
|
|
158
|
+
await this.ctx.publish(packet);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Subscribes to topics on the MQTT broker
|
|
162
|
+
* @param params - Subscribe parameters including topics
|
|
163
|
+
* @returns Promise that resolves when subscribed
|
|
164
|
+
*/
|
|
165
|
+
async subscribe(params) {
|
|
166
|
+
const packet = {
|
|
167
|
+
type: PacketType.subscribe,
|
|
168
|
+
id: 0, //placeholder
|
|
169
|
+
...params,
|
|
170
|
+
};
|
|
171
|
+
await this.ctx.subscribe(packet);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets an async iterator for received messages
|
|
175
|
+
* @returns AsyncGenerator yielding received publish packets
|
|
176
|
+
*/
|
|
177
|
+
async *messages() {
|
|
178
|
+
yield* this.ctx.incoming;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Closes the message stream
|
|
182
|
+
* @param reason - Optional reason for closing
|
|
183
|
+
*/
|
|
184
|
+
closeMessages(reason) {
|
|
185
|
+
this.ctx.incoming.close(reason);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../client/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type AnyPacket, AsyncQueue, type ConnectPacket, Deferred, type MemoryStore, MqttConn, type PacketId, type PublishPacket, type ReturnCodes, type SockConn, type SubscribePacket, type TAuthenticationResult, Timer, type UnsubscribePacket } from "./deps.ts";
|
|
2
|
+
import type { TConnectionState } from "./ConnectionState.ts";
|
|
3
|
+
export declare class Context {
|
|
4
|
+
mqttConn?: MqttConn;
|
|
5
|
+
connectionState: TConnectionState;
|
|
6
|
+
pingTimer?: Timer;
|
|
7
|
+
unresolvedConnect?: Deferred<TAuthenticationResult>;
|
|
8
|
+
unresolvedPublish: Map<PacketId, Deferred<void>>;
|
|
9
|
+
unresolvedSubscribe: Map<PacketId, Deferred<ReturnCodes>>;
|
|
10
|
+
unresolvedUnSubscribe: Map<PacketId, Deferred<void>>;
|
|
11
|
+
store: MemoryStore;
|
|
12
|
+
incoming: AsyncQueue<PublishPacket>;
|
|
13
|
+
constructor(store: MemoryStore);
|
|
14
|
+
connect(packet: ConnectPacket): Promise<void>;
|
|
15
|
+
disconnect(): Promise<void>;
|
|
16
|
+
send(packet: AnyPacket): Promise<void>;
|
|
17
|
+
sendPing(): void;
|
|
18
|
+
handleConnection(conn: SockConn, connectPacket: ConnectPacket): Promise<boolean>;
|
|
19
|
+
close(): void;
|
|
20
|
+
receivePublish(packet: PublishPacket): void;
|
|
21
|
+
publish(packet: PublishPacket): Promise<void>;
|
|
22
|
+
subscribe(packet: SubscribePacket): Promise<ReturnCodes>;
|
|
23
|
+
unsubscribe(packet: UnsubscribePacket): Promise<void>;
|
|
24
|
+
receivePuback(id: PacketId): boolean;
|
|
25
|
+
receivePubcomp(id: PacketId): boolean;
|
|
26
|
+
receiveSuback(id: PacketId, returnCodes: ReturnCodes): boolean;
|
|
27
|
+
receiveUnsuback(id: PacketId): boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../client/context.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,UAAU,EACV,KAAK,aAAa,EAClB,QAAQ,EAER,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,QAAQ,EAEb,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,EACL,KAAK,iBAAiB,EACvB,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,qBAAa,OAAO;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,eAAe,EAAE,gBAAgB,CAAC;IAClC,SAAS,CAAC,EAAE,KAAK,CAAC;IAClB,iBAAiB,CAAC,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACpD,iBAAiB,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,mBAAmB,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1D,qBAAqB,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;gBAExB,KAAK,EAAE,WAAW;IASxB,OAAO,CAAC,MAAM,EAAE,aAAa;IAa7B,UAAU;IAWV,IAAI,CAAC,MAAM,EAAE,SAAS;IAc5B,QAAQ;IAIF,gBAAgB,CACpB,IAAI,EAAE,QAAQ,EACd,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,OAAO,CAAC;IAyBnB,KAAK;IAML,cAAc,CAAC,MAAM,EAAE,aAAa;IAIpC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7C,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC;IASxD,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD,aAAa,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;IAYpC,cAAc,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;IAIrC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO;IAW9D,eAAe,CAAC,EAAE,EAAE,QAAQ,GAAG,OAAO;CAUvC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { AsyncQueue, Deferred, logger, MqttConn, PacketType, Timer, } from "./deps.js";
|
|
2
|
+
import { handlePacket } from "./handlers/handlePacket.js";
|
|
3
|
+
import { ConnectionState } from "./ConnectionState.js";
|
|
4
|
+
export class Context {
|
|
5
|
+
mqttConn;
|
|
6
|
+
connectionState;
|
|
7
|
+
pingTimer;
|
|
8
|
+
unresolvedConnect;
|
|
9
|
+
unresolvedPublish;
|
|
10
|
+
unresolvedSubscribe;
|
|
11
|
+
unresolvedUnSubscribe;
|
|
12
|
+
store;
|
|
13
|
+
incoming;
|
|
14
|
+
constructor(store) {
|
|
15
|
+
this.store = store;
|
|
16
|
+
this.connectionState = ConnectionState.offline;
|
|
17
|
+
this.incoming = new AsyncQueue();
|
|
18
|
+
this.unresolvedPublish = new Map();
|
|
19
|
+
this.unresolvedSubscribe = new Map();
|
|
20
|
+
this.unresolvedUnSubscribe = new Map();
|
|
21
|
+
}
|
|
22
|
+
async connect(packet) {
|
|
23
|
+
this.connectionState = ConnectionState.connecting;
|
|
24
|
+
await this.mqttConn?.send(packet);
|
|
25
|
+
const keepAlive = packet.keepAlive || 0;
|
|
26
|
+
if (keepAlive > 0) {
|
|
27
|
+
this.pingTimer = new Timer(this.sendPing.bind(this), keepAlive * 1000, true);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async disconnect() {
|
|
31
|
+
if (this.connectionState !== ConnectionState.connected) {
|
|
32
|
+
throw "Not connected";
|
|
33
|
+
}
|
|
34
|
+
if (this.mqttConn) {
|
|
35
|
+
this.connectionState = ConnectionState.disconnecting;
|
|
36
|
+
await this.mqttConn.send({ type: PacketType.disconnect });
|
|
37
|
+
this.mqttConn.close();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async send(packet) {
|
|
41
|
+
logger.debug({ send: packet });
|
|
42
|
+
if (this.connectionState === ConnectionState.connected &&
|
|
43
|
+
!this.mqttConn?.isClosed) {
|
|
44
|
+
await this.mqttConn?.send(packet);
|
|
45
|
+
this.pingTimer?.reset();
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
logger.debug("not connected");
|
|
49
|
+
this.pingTimer?.clear();
|
|
50
|
+
}
|
|
51
|
+
sendPing() {
|
|
52
|
+
this.send({ type: PacketType.pingreq });
|
|
53
|
+
}
|
|
54
|
+
async handleConnection(conn, connectPacket) {
|
|
55
|
+
this.mqttConn = new MqttConn({ conn });
|
|
56
|
+
if (this.mqttConn === undefined) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
logger.debug("Send connect packet");
|
|
60
|
+
await this.connect(connectPacket);
|
|
61
|
+
try {
|
|
62
|
+
logger.debug("Accepting packets");
|
|
63
|
+
for await (const packet of this.mqttConn) {
|
|
64
|
+
handlePacket(this, packet);
|
|
65
|
+
}
|
|
66
|
+
logger.debug("No more packets");
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
logger.debug(err);
|
|
70
|
+
if (this.mqttConn.isClosed) {
|
|
71
|
+
this.mqttConn.close();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (this.connectionState === ConnectionState.disconnecting) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
close() {
|
|
80
|
+
logger.debug("closing connection");
|
|
81
|
+
this.connectionState = ConnectionState.disconnected;
|
|
82
|
+
this.pingTimer?.clear();
|
|
83
|
+
}
|
|
84
|
+
receivePublish(packet) {
|
|
85
|
+
this.incoming.push(packet);
|
|
86
|
+
}
|
|
87
|
+
publish(packet) {
|
|
88
|
+
const qos = packet.qos || 0;
|
|
89
|
+
if (qos === 0) {
|
|
90
|
+
packet.id = 0;
|
|
91
|
+
this.send(packet);
|
|
92
|
+
// return empty promise
|
|
93
|
+
return Promise.resolve();
|
|
94
|
+
}
|
|
95
|
+
packet.id = this.store.nextId();
|
|
96
|
+
this.store.pendingOutgoing.set(packet.id, packet);
|
|
97
|
+
const deferred = new Deferred();
|
|
98
|
+
this.unresolvedPublish.set(packet.id, deferred);
|
|
99
|
+
this.send(packet);
|
|
100
|
+
return deferred.promise;
|
|
101
|
+
}
|
|
102
|
+
subscribe(packet) {
|
|
103
|
+
packet.id = this.store.nextId();
|
|
104
|
+
this.store.pendingOutgoing.set(packet.id, packet);
|
|
105
|
+
const deferred = new Deferred();
|
|
106
|
+
this.unresolvedSubscribe.set(packet.id, deferred);
|
|
107
|
+
this.send(packet);
|
|
108
|
+
return deferred.promise;
|
|
109
|
+
}
|
|
110
|
+
unsubscribe(packet) {
|
|
111
|
+
packet.id = this.store.nextId();
|
|
112
|
+
this.store.pendingOutgoing.set(packet.id, packet);
|
|
113
|
+
const deferred = new Deferred();
|
|
114
|
+
this.unresolvedUnSubscribe.set(packet.id, deferred);
|
|
115
|
+
this.send(packet);
|
|
116
|
+
return deferred.promise;
|
|
117
|
+
}
|
|
118
|
+
receivePuback(id) {
|
|
119
|
+
const unresolvedMap = this.unresolvedPublish;
|
|
120
|
+
if (unresolvedMap.has(id)) {
|
|
121
|
+
const deferred = unresolvedMap.get(id);
|
|
122
|
+
unresolvedMap.delete(id);
|
|
123
|
+
deferred?.resolve();
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
return false;
|
|
127
|
+
}
|
|
128
|
+
// just an alias to clarify protocol flow
|
|
129
|
+
receivePubcomp(id) {
|
|
130
|
+
return this.receivePuback(id);
|
|
131
|
+
}
|
|
132
|
+
receiveSuback(id, returnCodes) {
|
|
133
|
+
const unresolvedMap = this.unresolvedSubscribe;
|
|
134
|
+
if (unresolvedMap.has(id)) {
|
|
135
|
+
const deferred = unresolvedMap.get(id);
|
|
136
|
+
unresolvedMap.delete(id);
|
|
137
|
+
deferred?.resolve(returnCodes);
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
receiveUnsuback(id) {
|
|
143
|
+
const unresolvedMap = this.unresolvedUnSubscribe;
|
|
144
|
+
if (unresolvedMap.has(id)) {
|
|
145
|
+
const deferred = unresolvedMap.get(id);
|
|
146
|
+
unresolvedMap.delete(id);
|
|
147
|
+
deferred?.resolve();
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../client/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { AnyPacket, ConnackPacket, ConnectPacket, DisconnectPacket, Dup, PacketId, Payload, PubackPacket, PubcompPacket, PublishPacket, PubrecPacket, PubrelPacket, ReturnCodes, SubackPacket, SubscribePacket, TAuthenticationResult, Topic, UnsubackPacket, UnsubscribePacket, } from "../mqttPacket/mod.ts";
|
|
2
|
+
export { AuthenticationResult, AuthenticationResultByNumber, decodePayload, encode, PacketNameByType, PacketType, } from "../mqttPacket/mod.ts";
|
|
3
|
+
export { MqttConn } from "../mqttConn/mqttConn.ts";
|
|
4
|
+
export type { SockConn } from "../socket/socket.ts";
|
|
5
|
+
export { Timer } from "../timer/timer.ts";
|
|
6
|
+
export { AsyncQueue, Deferred, logger } from "../utils/mod.ts";
|
|
7
|
+
export { MemoryStore } from "./store/memoryStore.ts";
|
|
8
|
+
//# sourceMappingURL=deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../client/deps.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,KAAK,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,aAAa,EACb,MAAM,EACN,gBAAgB,EAChB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { AuthenticationResult, AuthenticationResultByNumber, decodePayload, encode, PacketNameByType, PacketType, } from "../mqttPacket/mod.js";
|
|
2
|
+
export { MqttConn } from "../mqttConn/mqttConn.js";
|
|
3
|
+
export { Timer } from "../timer/timer.js";
|
|
4
|
+
export { AsyncQueue, Deferred, logger } from "../utils/mod.js";
|
|
5
|
+
export { MemoryStore } from "./store/memoryStore.js";
|
|
6
|
+
//# sourceMappingURL=deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../client/deps.ts"],"names":[],"mappings":"AAsBA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,aAAa,EACb,MAAM,EACN,gBAAgB,EAChB,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { type ConnackPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles the CONNACK packet received from the MQTT broker
|
|
5
|
+
* @param packet - The CONNACK packet containing the connection acknowledgment
|
|
6
|
+
* @param ctx - The connection context
|
|
7
|
+
* @returns Promise that resolves when handling is complete
|
|
8
|
+
*/
|
|
9
|
+
export declare function handleConnack(packet: ConnackPacket, ctx: Context): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=handleConnack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleConnack.d.ts","sourceRoot":"","sources":["../../../client/handlers/handleConnack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAgC,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,OAAO,iBAiBtE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ConnectionState } from "../ConnectionState.js";
|
|
2
|
+
import { AuthenticationResultByNumber } from "../deps.js";
|
|
3
|
+
/**
|
|
4
|
+
* Handles the CONNACK packet received from the MQTT broker
|
|
5
|
+
* @param packet - The CONNACK packet containing the connection acknowledgment
|
|
6
|
+
* @param ctx - The connection context
|
|
7
|
+
* @returns Promise that resolves when handling is complete
|
|
8
|
+
*/
|
|
9
|
+
export async function handleConnack(packet, ctx) {
|
|
10
|
+
if (packet.returnCode === 0) {
|
|
11
|
+
ctx.connectionState = ConnectionState.connected;
|
|
12
|
+
ctx.pingTimer?.reset();
|
|
13
|
+
ctx.unresolvedConnect?.resolve(packet.returnCode);
|
|
14
|
+
// start transmitting packets that were queued before
|
|
15
|
+
for await (const packet of ctx.store.pendingOutgoingPackets()) {
|
|
16
|
+
ctx.send(packet);
|
|
17
|
+
}
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const err = new Error(`Connect failed: ${AuthenticationResultByNumber[packet.returnCode]}`);
|
|
21
|
+
ctx.connectionState = ConnectionState.disconnecting;
|
|
22
|
+
ctx.pingTimer?.clear();
|
|
23
|
+
ctx.unresolvedConnect?.reject(err);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=handleConnack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleConnack.js","sourceRoot":"","sources":["../../../client/handlers/handleConnack.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,4BAA4B,EAAsB,MAAM,YAAY,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAqB,EAAE,GAAY;IACrE,IAAI,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC;QAChD,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;QACvB,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAClD,qDAAqD;QACrD,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QACD,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,KAAK,CACnB,mBAAmB,4BAA4B,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CACrE,CAAC;IACF,GAAG,CAAC,eAAe,GAAG,eAAe,CAAC,aAAa,CAAC;IACpD,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC;IACvB,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import type { AnyPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles incoming MQTT packets based on the connection state and packet type
|
|
5
|
+
* @param ctx - The MQTT client context containing connection state and other information
|
|
6
|
+
* @param packet - The MQTT packet to handle
|
|
7
|
+
* @throws Error if an unexpected packet is received before connection is established
|
|
8
|
+
* @throws Error if an unexpected packet type is received after connection
|
|
9
|
+
*/
|
|
10
|
+
export declare function handlePacket(ctx: Context, packet: AnyPacket): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=handlePacket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePacket.d.ts","sourceRoot":"","sources":["../../../client/handlers/handlePacket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAW7C,OAAO,KAAK,EACV,SAAS,EASV,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { ConnectionState } from "../ConnectionState.js";
|
|
2
|
+
import { handleConnack } from "./handleConnack.js";
|
|
3
|
+
import { handlePublish } from "./handlePublish.js";
|
|
4
|
+
import { handlePuback } from "./handlePuback.js";
|
|
5
|
+
import { handlePubrec } from "./handlePubrec.js";
|
|
6
|
+
import { handlePubrel } from "./handlePubrel.js";
|
|
7
|
+
import { handlePubcomp } from "./handlePubcomp.js";
|
|
8
|
+
import { handleSuback } from "./handleSuback.js";
|
|
9
|
+
import { handleUnsuback } from "./handleUnsuback.js";
|
|
10
|
+
import { logger, PacketNameByType, PacketType } from "../deps.js";
|
|
11
|
+
/**
|
|
12
|
+
* Handles incoming MQTT packets based on the connection state and packet type
|
|
13
|
+
* @param ctx - The MQTT client context containing connection state and other information
|
|
14
|
+
* @param packet - The MQTT packet to handle
|
|
15
|
+
* @throws Error if an unexpected packet is received before connection is established
|
|
16
|
+
* @throws Error if an unexpected packet type is received after connection
|
|
17
|
+
*/
|
|
18
|
+
export async function handlePacket(ctx, packet) {
|
|
19
|
+
logger.debug({ received: PacketNameByType[packet.type], packet });
|
|
20
|
+
if (ctx.connectionState !== ConnectionState.connected) {
|
|
21
|
+
if (packet.type === PacketType.connack) {
|
|
22
|
+
handleConnack(packet, ctx);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
throw new Error(`Received ${PacketNameByType[packet.type]} packet before connect`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
switch (packet.type) {
|
|
30
|
+
case PacketType.pingres:
|
|
31
|
+
break;
|
|
32
|
+
case PacketType.publish:
|
|
33
|
+
await handlePublish(ctx, packet);
|
|
34
|
+
break;
|
|
35
|
+
case PacketType.puback:
|
|
36
|
+
await handlePuback(ctx, packet);
|
|
37
|
+
break;
|
|
38
|
+
case PacketType.pubrel:
|
|
39
|
+
await handlePubrel(ctx, packet);
|
|
40
|
+
break;
|
|
41
|
+
case PacketType.pubrec:
|
|
42
|
+
await handlePubrec(ctx, packet);
|
|
43
|
+
break;
|
|
44
|
+
case PacketType.pubcomp:
|
|
45
|
+
await handlePubcomp(ctx, packet);
|
|
46
|
+
break;
|
|
47
|
+
case PacketType.suback:
|
|
48
|
+
await handleSuback(ctx, packet);
|
|
49
|
+
break;
|
|
50
|
+
case PacketType.unsuback:
|
|
51
|
+
handleUnsuback(ctx, packet);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
throw new Error(`Received unexpected ${PacketNameByType[packet.type]} packet after connect`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=handlePacket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePacket.js","sourceRoot":"","sources":["../../../client/handlers/handlePacket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAalE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAiB;IAEjB,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAClE,IAAI,GAAG,CAAC,eAAe,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;QACtD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,EAAE,CAAC;YACvC,aAAa,CAAC,MAAuB,EAAE,GAAG,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,YAAY,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,UAAU,CAAC,OAAO;gBACrB,MAAM;YACR,KAAK,UAAU,CAAC,OAAO;gBACrB,MAAM,aAAa,CAAC,GAAG,EAAE,MAAuB,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,UAAU,CAAC,MAAM;gBACpB,MAAM,YAAY,CAAC,GAAG,EAAE,MAAsB,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU,CAAC,MAAM;gBACpB,MAAM,YAAY,CAAC,GAAG,EAAE,MAAsB,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU,CAAC,MAAM;gBACpB,MAAM,YAAY,CAAC,GAAG,EAAE,MAAsB,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU,CAAC,OAAO;gBACrB,MAAM,aAAa,CAAC,GAAG,EAAE,MAAuB,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,UAAU,CAAC,MAAM;gBACpB,MAAM,YAAY,CAAC,GAAG,EAAE,MAAsB,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,UAAU,CAAC,QAAQ;gBACtB,cAAc,CAAC,GAAG,EAAE,MAAwB,CAAC,CAAC;gBAC9C,MAAM;YAER;gBACE,MAAM,IAAI,KAAK,CACb,uBACE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAC9B,uBAAuB,CACxB,CAAC;QACN,CAAC;IACH,CAAC;AACH,CAAC"}
|