@seriousme/opifex 1.7.0 → 1.7.1
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/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 +36 -0
- package/dist/mqttConn/mqttConn.d.ts.map +1 -0
- package/dist/mqttConn/mqttConn.js +105 -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 +24 -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/package.json +2 -3
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import type { PubackPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles PUBACK (Publish Acknowledgment) packets in MQTT protocol
|
|
5
|
+
* @param ctx - The connection context containing the client's state and configuration
|
|
6
|
+
* @param packet - The PUBACK packet received from the client
|
|
7
|
+
* @description
|
|
8
|
+
* PUBACK packets are sent in response to PUBLISH packets with QoS level 1.
|
|
9
|
+
* This function removes the original PUBLISH packet from the pending outgoing messages store
|
|
10
|
+
* once acknowledgment is received.
|
|
11
|
+
*/
|
|
12
|
+
export declare function handlePuback(ctx: Context, packet: PubackPacket): void;
|
|
13
|
+
//# sourceMappingURL=handlePuback.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePuback.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePuback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,QAM9D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles PUBACK (Publish Acknowledgment) packets in MQTT protocol
|
|
3
|
+
* @param ctx - The connection context containing the client's state and configuration
|
|
4
|
+
* @param packet - The PUBACK packet received from the client
|
|
5
|
+
* @description
|
|
6
|
+
* PUBACK packets are sent in response to PUBLISH packets with QoS level 1.
|
|
7
|
+
* This function removes the original PUBLISH packet from the pending outgoing messages store
|
|
8
|
+
* once acknowledgment is received.
|
|
9
|
+
*/
|
|
10
|
+
export function handlePuback(ctx, packet) {
|
|
11
|
+
// qos 1 only
|
|
12
|
+
const id = packet.id;
|
|
13
|
+
if (ctx.store?.pendingOutgoing.has(id)) {
|
|
14
|
+
ctx.store.pendingOutgoing.delete(id);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=handlePuback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePuback.js","sourceRoot":"","sources":["../../../server/handlers/handlePuback.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY,EAAE,MAAoB;IAC7D,aAAa;IACb,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import type { PubcompPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles PUBCOMP packets which are the response to PUBREL packets in QoS 2 flow
|
|
5
|
+
* @param ctx - The connection context containing the client state and configuration
|
|
6
|
+
* @param packet - The PUBCOMP packet received from the client
|
|
7
|
+
* @description
|
|
8
|
+
* This is the fourth and final packet of the QoS 2 protocol exchange.
|
|
9
|
+
* When received, it removes the message from the pendingAckOutgoing store.
|
|
10
|
+
*/
|
|
11
|
+
export declare function handlePubcomp(ctx: Context, packet: PubcompPacket): void;
|
|
12
|
+
//# sourceMappingURL=handlePubcomp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubcomp.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubcomp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAKvE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles PUBCOMP packets which are the response to PUBREL packets in QoS 2 flow
|
|
3
|
+
* @param ctx - The connection context containing the client state and configuration
|
|
4
|
+
* @param packet - The PUBCOMP packet received from the client
|
|
5
|
+
* @description
|
|
6
|
+
* This is the fourth and final packet of the QoS 2 protocol exchange.
|
|
7
|
+
* When received, it removes the message from the pendingAckOutgoing store.
|
|
8
|
+
*/
|
|
9
|
+
export function handlePubcomp(ctx, packet) {
|
|
10
|
+
const id = packet.id;
|
|
11
|
+
if (ctx.store?.pendingAckOutgoing.has(id)) {
|
|
12
|
+
ctx.store.pendingAckOutgoing.delete(id);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=handlePubcomp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubcomp.js","sourceRoot":"","sources":["../../../server/handlers/handlePubcomp.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,MAAqB;IAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Context } from "../context.ts";
|
|
2
|
+
import { type PublishPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles MQTT PUBLISH packets
|
|
5
|
+
* @param ctx - The connection context
|
|
6
|
+
* @param packet - The PUBLISH packet to process
|
|
7
|
+
* @returns Promise that resolves when packet is processed
|
|
8
|
+
* @throws Error if packet processing fails
|
|
9
|
+
*/
|
|
10
|
+
export declare function handlePublish(ctx: Context, packet: PublishPacket): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=handlePublish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePublish.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAa,MAAM,eAAe,CAAC;AACxD,OAAO,EAAc,KAAK,aAAa,EAAc,MAAM,YAAY,CAAC;AAkBxE;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { SysPrefix } from "../context.js";
|
|
2
|
+
import { PacketType } from "../deps.js";
|
|
3
|
+
/**
|
|
4
|
+
* Checks if a client is authorized to publish to a given topic
|
|
5
|
+
* @param ctx - The connection context
|
|
6
|
+
* @param topic - The topic to check authorization for
|
|
7
|
+
* @returns boolean indicating if client is authorized to publish
|
|
8
|
+
*/
|
|
9
|
+
function authorizedToPublish(ctx, topic) {
|
|
10
|
+
if (topic.startsWith(SysPrefix)) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (ctx.handlers.isAuthorizedToPublish) {
|
|
14
|
+
return ctx.handlers.isAuthorizedToPublish(ctx, topic);
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handles MQTT PUBLISH packets
|
|
20
|
+
* @param ctx - The connection context
|
|
21
|
+
* @param packet - The PUBLISH packet to process
|
|
22
|
+
* @returns Promise that resolves when packet is processed
|
|
23
|
+
* @throws Error if packet processing fails
|
|
24
|
+
*/
|
|
25
|
+
export async function handlePublish(ctx, packet) {
|
|
26
|
+
if (!authorizedToPublish(ctx, packet.topic)) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const qos = packet.qos || 0;
|
|
30
|
+
if (qos === 0) {
|
|
31
|
+
ctx.persistence.publish(packet.topic, packet);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (packet.id !== undefined) {
|
|
35
|
+
// qos 1
|
|
36
|
+
if (qos === 1) {
|
|
37
|
+
const id = packet.id; // retain the id
|
|
38
|
+
ctx.persistence.publish(packet.topic, packet);
|
|
39
|
+
await ctx.send({
|
|
40
|
+
type: PacketType.puback,
|
|
41
|
+
id,
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
// qos 2
|
|
46
|
+
if (ctx.store) {
|
|
47
|
+
ctx.store.pendingIncoming.set(packet.id, packet);
|
|
48
|
+
await ctx.send({
|
|
49
|
+
type: PacketType.pubrec,
|
|
50
|
+
id: packet.id,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=handlePublish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePublish.js","sourceRoot":"","sources":["../../../server/handlers/handlePublish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAkC,MAAM,YAAY,CAAC;AAExE;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,GAAY,EAAE,KAAY;IACrD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAY,EACZ,MAAqB;IAErB,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC5B,QAAQ;QACR,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,gBAAgB;YACtC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,GAAG,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,MAAM;gBACvB,EAAE;aACH,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QACD,QAAQ;QACR,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,GAAG,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,MAAM;gBACvB,EAAE,EAAE,MAAM,CAAC,EAAE;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { type PubrecPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles PUBREC (QoS 2 Publish Received) packets
|
|
5
|
+
* @param ctx - The connection context
|
|
6
|
+
* @param packet - The PUBREC packet received from the client
|
|
7
|
+
* @returns Promise that resolves when handling is complete
|
|
8
|
+
* @description
|
|
9
|
+
* For QoS 2 message flow:
|
|
10
|
+
* 1. Discards the original publish message
|
|
11
|
+
* 2. Stores that PUBREC was received for the packet ID
|
|
12
|
+
* 3. Sends PUBREL packet in response
|
|
13
|
+
*/
|
|
14
|
+
export declare function handlePubrec(ctx: Context, packet: PubrecPacket): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=handlePubrec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubrec.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { PacketType } from "../deps.js";
|
|
2
|
+
/**
|
|
3
|
+
* Handles PUBREC (QoS 2 Publish Received) packets
|
|
4
|
+
* @param ctx - The connection context
|
|
5
|
+
* @param packet - The PUBREC packet received from the client
|
|
6
|
+
* @returns Promise that resolves when handling is complete
|
|
7
|
+
* @description
|
|
8
|
+
* For QoS 2 message flow:
|
|
9
|
+
* 1. Discards the original publish message
|
|
10
|
+
* 2. Stores that PUBREC was received for the packet ID
|
|
11
|
+
* 3. Sends PUBREL packet in response
|
|
12
|
+
*/
|
|
13
|
+
export async function handlePubrec(ctx, packet) {
|
|
14
|
+
const id = packet.id;
|
|
15
|
+
if (ctx.store?.pendingOutgoing.has(id)) {
|
|
16
|
+
ctx.store.pendingOutgoing.delete(id);
|
|
17
|
+
ctx.store.pendingAckOutgoing.add(id);
|
|
18
|
+
await ctx.send({
|
|
19
|
+
type: PacketType.pubrel,
|
|
20
|
+
id,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=handlePubrec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubrec.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,GAAG,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,EAAE;SACH,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { type PubrelPacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles PUBREL (QoS 2 publish release) packets
|
|
5
|
+
*
|
|
6
|
+
* @param ctx - The connection context
|
|
7
|
+
* @param packet - The PUBREL packet received from the client
|
|
8
|
+
* @returns Promise that resolves when handling is complete
|
|
9
|
+
* @description
|
|
10
|
+
* For QoS 2 message delivery:
|
|
11
|
+
* 1. Initiates onward delivery of the Application Message
|
|
12
|
+
* 2. Discards the stored message
|
|
13
|
+
* 3. Sends PUBCOMP packet with the Packet Identifier
|
|
14
|
+
*/
|
|
15
|
+
export declare function handlePubrel(ctx: Context, packet: PubrelPacket): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=handlePubrel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubrel.d.ts","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { PacketType } from "../deps.js";
|
|
2
|
+
/**
|
|
3
|
+
* Handles PUBREL (QoS 2 publish release) packets
|
|
4
|
+
*
|
|
5
|
+
* @param ctx - The connection context
|
|
6
|
+
* @param packet - The PUBREL packet received from the client
|
|
7
|
+
* @returns Promise that resolves when handling is complete
|
|
8
|
+
* @description
|
|
9
|
+
* For QoS 2 message delivery:
|
|
10
|
+
* 1. Initiates onward delivery of the Application Message
|
|
11
|
+
* 2. Discards the stored message
|
|
12
|
+
* 3. Sends PUBCOMP packet with the Packet Identifier
|
|
13
|
+
*/
|
|
14
|
+
export async function handlePubrel(ctx, packet) {
|
|
15
|
+
const id = packet.id;
|
|
16
|
+
if (ctx.store?.pendingIncoming.has(id)) {
|
|
17
|
+
const storedPacket = ctx.store.pendingIncoming.get(id);
|
|
18
|
+
if (storedPacket) {
|
|
19
|
+
ctx.persistence.publish(storedPacket.topic, storedPacket);
|
|
20
|
+
ctx.store.pendingIncoming.delete(id);
|
|
21
|
+
await ctx.send({
|
|
22
|
+
type: PacketType.pubcomp,
|
|
23
|
+
id,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=handlePubrel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlePubrel.js","sourceRoot":"","sources":["../../../server/handlers/handlePubrel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAE3D;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAY,EACZ,MAAoB;IAEpB,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IACrB,IAAI,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,UAAU,CAAC,OAAO;gBACxB,EAAE;aACH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { type SubscribePacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* @function handleSubscribe
|
|
5
|
+
* @description Processes an MQTT SUBSCRIBE packet
|
|
6
|
+
* @param {Context} ctx - The connection context
|
|
7
|
+
* @param {SubscribePacket} packet - The SUBSCRIBE packet received from the client
|
|
8
|
+
* @returns {Promise<void>}
|
|
9
|
+
* @throws {Error} If subscription processing fails
|
|
10
|
+
* @remarks The order of return codes in the SUBACK Packet MUST match the order of Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1]
|
|
11
|
+
*/
|
|
12
|
+
export declare function handleSubscribe(ctx: Context, packet: SubscribePacket): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=handleSubscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleSubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAEL,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AAqBpB;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PacketType, } from "../deps.js";
|
|
2
|
+
/**
|
|
3
|
+
* @constant {number} SubscriptionFailure
|
|
4
|
+
* @description Code indicating a failed subscription attempt
|
|
5
|
+
*/
|
|
6
|
+
const SubscriptionFailure = 0x80;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a client is authorized to subscribe to a topic
|
|
9
|
+
* @param ctx - The connection context
|
|
10
|
+
* @param topicFilter - The topic filter to check authorization for
|
|
11
|
+
* @returns True if authorized, false otherwise
|
|
12
|
+
*/
|
|
13
|
+
function authorizedToSubscribe(ctx, topicFilter) {
|
|
14
|
+
if (ctx.handlers.isAuthorizedToSubscribe) {
|
|
15
|
+
return ctx.handlers.isAuthorizedToSubscribe(ctx, topicFilter);
|
|
16
|
+
}
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @function handleSubscribe
|
|
21
|
+
* @description Processes an MQTT SUBSCRIBE packet
|
|
22
|
+
* @param {Context} ctx - The connection context
|
|
23
|
+
* @param {SubscribePacket} packet - The SUBSCRIBE packet received from the client
|
|
24
|
+
* @returns {Promise<void>}
|
|
25
|
+
* @throws {Error} If subscription processing fails
|
|
26
|
+
* @remarks The order of return codes in the SUBACK Packet MUST match the order of Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1]
|
|
27
|
+
*/
|
|
28
|
+
export async function handleSubscribe(ctx, packet) {
|
|
29
|
+
/*
|
|
30
|
+
* The order of return codes in the SUBACK Packet MUST match the order of
|
|
31
|
+
* Topic Filters in the SUBSCRIBE Packet [MQTT-3.9.3-1].
|
|
32
|
+
*/
|
|
33
|
+
const validSubscriptions = [];
|
|
34
|
+
const returnCodes = packet.subscriptions.map((sub) => {
|
|
35
|
+
if (ctx.store) {
|
|
36
|
+
if (!authorizedToSubscribe(ctx, sub.topicFilter)) {
|
|
37
|
+
return SubscriptionFailure;
|
|
38
|
+
}
|
|
39
|
+
ctx.persistence.subscribe(ctx.store, sub.topicFilter, sub.qos);
|
|
40
|
+
validSubscriptions.push(sub);
|
|
41
|
+
return sub.qos;
|
|
42
|
+
}
|
|
43
|
+
return SubscriptionFailure;
|
|
44
|
+
});
|
|
45
|
+
await ctx.send({
|
|
46
|
+
type: PacketType.suback,
|
|
47
|
+
id: packet.id,
|
|
48
|
+
returnCodes: returnCodes,
|
|
49
|
+
});
|
|
50
|
+
/*
|
|
51
|
+
* send any retained messages that match these subscriptions
|
|
52
|
+
*/
|
|
53
|
+
if (ctx.store) {
|
|
54
|
+
ctx.persistence.handleRetained(ctx.store.clientId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=handleSubscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleSubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleSubscribe.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,GAIX,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY,EAAE,WAAkB;IAC7D,IAAI,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACzC,OAAO,GAAG,CAAC,QAAQ,CAAC,uBAAuB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAY,EACZ,MAAuB;IAEvB;;;OAGG;IACH,MAAM,kBAAkB,GAAmB,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACnD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YACD,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/D,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,MAAM;QACvB,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;IAEH;;OAEG;IACH,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Context } from "../context.ts";
|
|
2
|
+
import { type UnsubscribePacket } from "../deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Handles MQTT unsubscribe packets by removing subscriptions and sending acknowledgement
|
|
5
|
+
* @param ctx - The connection context containing client information and methods
|
|
6
|
+
* @param packet - The MQTT unsubscribe packet containing topics to unsubscribe from
|
|
7
|
+
* @returns Promise that resolves when unsubscribe is complete and acknowledged
|
|
8
|
+
*/
|
|
9
|
+
export declare function handleUnsubscribe(ctx: Context, packet: UnsubscribePacket): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=handleUnsubscribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleUnsubscribe.d.ts","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAc,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PacketType } from "../deps.js";
|
|
2
|
+
/**
|
|
3
|
+
* Handles MQTT unsubscribe packets by removing subscriptions and sending acknowledgement
|
|
4
|
+
* @param ctx - The connection context containing client information and methods
|
|
5
|
+
* @param packet - The MQTT unsubscribe packet containing topics to unsubscribe from
|
|
6
|
+
* @returns Promise that resolves when unsubscribe is complete and acknowledged
|
|
7
|
+
*/
|
|
8
|
+
export async function handleUnsubscribe(ctx, packet) {
|
|
9
|
+
for (const topic of packet.topicFilters) {
|
|
10
|
+
if (ctx.store) {
|
|
11
|
+
ctx.persistence.unsubscribe(ctx.store, topic);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
await ctx.send({
|
|
15
|
+
type: PacketType.unsuback,
|
|
16
|
+
id: packet.id,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=handleUnsubscribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handleUnsubscribe.js","sourceRoot":"","sources":["../../../server/handlers/handleUnsubscribe.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA0B,MAAM,YAAY,CAAC;AAEhE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAY,EACZ,MAAyB;IAEzB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,GAAG,CAAC,IAAI,CAAC;QACb,IAAI,EAAE,UAAU,CAAC,QAAQ;QACzB,EAAE,EAAE,MAAM,CAAC,EAAE;KACd,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides an MQTT Server interface see the /bin folder for examples
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
export { AuthenticationResult } from "./deps.ts";
|
|
6
|
+
export type { IPersistence, SockConn, TAuthenticationResult, Topic, } from "./deps.ts";
|
|
7
|
+
export { MqttServer } from "./server.ts";
|
|
8
|
+
export type { MqttServerOptions } from "./server.ts";
|
|
9
|
+
export { Context } from "./context.ts";
|
|
10
|
+
export type { Handlers } from "./context.ts";
|
|
11
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,qBAAqB,EACrB,KAAK,GACN,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module provides an MQTT Server interface see the /bin folder for examples
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
export { AuthenticationResult } from "./deps.js";
|
|
6
|
+
export { MqttServer } from "./server.js";
|
|
7
|
+
export { Context } from "./context.js";
|
|
8
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../server/mod.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAOjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Handlers } from "./context.ts";
|
|
2
|
+
import { type IPersistence, type SockConn } from "./deps.ts";
|
|
3
|
+
/**
|
|
4
|
+
* The options to configure the MqttServer
|
|
5
|
+
*/
|
|
6
|
+
export type MqttServerOptions = {
|
|
7
|
+
persistence?: IPersistence;
|
|
8
|
+
handlers?: Handlers;
|
|
9
|
+
};
|
|
10
|
+
/** The MqttServer class provides a MQTT server with configurable persistence and
|
|
11
|
+
* authentication/authorization handlers.
|
|
12
|
+
*
|
|
13
|
+
* The default handlers are:
|
|
14
|
+
* - isAuthenticated: always returns ok
|
|
15
|
+
* - isAuthorizedToPublish: always returns true
|
|
16
|
+
* - isAuthorizedToSubscribe: always returns true
|
|
17
|
+
*
|
|
18
|
+
* To customize the handlers, pass in a Handlers object.
|
|
19
|
+
* To customize the persistence, pass in a Persistence object.
|
|
20
|
+
*/
|
|
21
|
+
export declare class MqttServer {
|
|
22
|
+
handlers: Handlers;
|
|
23
|
+
persistence: IPersistence;
|
|
24
|
+
constructor({ persistence, handlers, }: MqttServerOptions);
|
|
25
|
+
serve(conn: SockConn): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAEL,KAAK,YAAY,EAGjB,KAAK,QAAQ,EAEd,MAAM,WAAW,CAAC;AAanB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AAEH,qBAAa,UAAU;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,YAAY,CAAC;gBACd,EACV,WAAW,EACX,QAAQ,GACT,EAAE,iBAAiB;IAWd,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAe3C"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Context } from "./context.js";
|
|
2
|
+
import { AuthenticationResult, logger, MemoryPersistence, } from "./deps.js";
|
|
3
|
+
import { handlePacket } from "./handlers/handlePacket.js";
|
|
4
|
+
const defaultIsAuthenticated = (_ctx, _clientId, _username, _password) => AuthenticationResult.ok;
|
|
5
|
+
const defaultIsAuthorized = (_ctx, _topic) => true;
|
|
6
|
+
/** The MqttServer class provides a MQTT server with configurable persistence and
|
|
7
|
+
* authentication/authorization handlers.
|
|
8
|
+
*
|
|
9
|
+
* The default handlers are:
|
|
10
|
+
* - isAuthenticated: always returns ok
|
|
11
|
+
* - isAuthorizedToPublish: always returns true
|
|
12
|
+
* - isAuthorizedToSubscribe: always returns true
|
|
13
|
+
*
|
|
14
|
+
* To customize the handlers, pass in a Handlers object.
|
|
15
|
+
* To customize the persistence, pass in a Persistence object.
|
|
16
|
+
*/
|
|
17
|
+
export class MqttServer {
|
|
18
|
+
handlers;
|
|
19
|
+
persistence;
|
|
20
|
+
constructor({ persistence, handlers, }) {
|
|
21
|
+
this.persistence = persistence || new MemoryPersistence();
|
|
22
|
+
this.handlers = {
|
|
23
|
+
isAuthenticated: handlers?.isAuthenticated || defaultIsAuthenticated,
|
|
24
|
+
isAuthorizedToPublish: handlers?.isAuthorizedToPublish ||
|
|
25
|
+
defaultIsAuthorized,
|
|
26
|
+
isAuthorizedToSubscribe: handlers?.isAuthorizedToSubscribe ||
|
|
27
|
+
defaultIsAuthorized,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async serve(conn) {
|
|
31
|
+
const ctx = new Context(this.persistence, conn, this.handlers);
|
|
32
|
+
if (conn.remoteAddr?.transport === "tcp") {
|
|
33
|
+
logger.debug(`socket connected from ${conn.remoteAddr.hostname}`);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
for await (const packet of ctx.mqttConn) {
|
|
37
|
+
handlePacket(ctx, packet);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
logger.debug(`Error while serving:${err}`);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
ctx.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../server/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,oBAAoB,EAEpB,MAAM,EACN,iBAAiB,GAGlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,MAAM,sBAAsB,GAAG,CAC7B,IAAa,EACb,SAAiB,EACjB,SAAiB,EACjB,SAAqB,EACrB,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;AAE7B,MAAM,mBAAmB,GAAG,CAAC,IAAa,EAAE,MAAa,EAAE,EAAE,CAAC,IAAI,CAAC;AAUnE;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,UAAU;IACrB,QAAQ,CAAW;IACnB,WAAW,CAAe;IAC1B,YAAY,EACV,WAAW,EACX,QAAQ,GACU;QAClB,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,iBAAiB,EAAE,CAAC;QAC1D,IAAI,CAAC,QAAQ,GAAG;YACd,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,sBAAsB;YACpE,qBAAqB,EAAE,QAAQ,EAAE,qBAAqB;gBACpD,mBAAmB;YACrB,uBAAuB,EAAE,QAAQ,EAAE,uBAAuB;gBACxD,mBAAmB;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,UAAU,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;YACzC,MAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;gBAAS,CAAC;YACT,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export type SockAddr = NetAddr | UnixAddr | undefined;
|
|
2
|
+
export interface NetAddr {
|
|
3
|
+
transport?: "tcp" | "udp";
|
|
4
|
+
hostname: string;
|
|
5
|
+
port: number;
|
|
6
|
+
}
|
|
7
|
+
export interface UnixAddr {
|
|
8
|
+
transport: "unix" | "unixpacket";
|
|
9
|
+
path: string;
|
|
10
|
+
}
|
|
11
|
+
export type SockConn = {
|
|
12
|
+
readable: ReadableStream<Uint8Array>;
|
|
13
|
+
writable: WritableStream<Uint8Array>;
|
|
14
|
+
close: () => void;
|
|
15
|
+
localAddr?: SockAddr;
|
|
16
|
+
remoteAddr?: SockAddr;
|
|
17
|
+
};
|
|
18
|
+
export declare class Conn {
|
|
19
|
+
reader: ReadableStreamBYOBReader;
|
|
20
|
+
writer: WritableStreamDefaultWriter<Uint8Array>;
|
|
21
|
+
closed: boolean;
|
|
22
|
+
remoteAddr: SockAddr | undefined;
|
|
23
|
+
closer: () => void;
|
|
24
|
+
constructor(sockConn: SockConn);
|
|
25
|
+
read(buff: Uint8Array): Promise<number | null>;
|
|
26
|
+
write(data: Uint8Array): Promise<number>;
|
|
27
|
+
close(): void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AACtD,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,GAAG,YAAY,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAC;CACvB,CAAC;AAEF,qBAAa,IAAI;IACf,MAAM,EAAE,wBAAwB,CAAC;IACjC,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAChD,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,SAAS,CAAC;IACjC,MAAM,EAAE,MAAM,IAAI,CAAC;gBAEP,QAAQ,EAAE,QAAQ;IASxB,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IASpD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQxC,KAAK;CAMN"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export class Conn {
|
|
2
|
+
reader;
|
|
3
|
+
writer;
|
|
4
|
+
closed;
|
|
5
|
+
remoteAddr;
|
|
6
|
+
closer;
|
|
7
|
+
constructor(sockConn) {
|
|
8
|
+
this.closed = false;
|
|
9
|
+
this.reader = sockConn.readable.getReader({ mode: "byob" });
|
|
10
|
+
this.writer = sockConn.writable.getWriter();
|
|
11
|
+
// this.writer.closed.then(() => this.closed = true);
|
|
12
|
+
this.closer = sockConn.close.bind(sockConn);
|
|
13
|
+
this.remoteAddr = sockConn.remoteAddr;
|
|
14
|
+
}
|
|
15
|
+
async read(buff) {
|
|
16
|
+
const buff2 = new Uint8Array(buff.length);
|
|
17
|
+
const result = await this.reader.read(buff2);
|
|
18
|
+
if (!result.done) {
|
|
19
|
+
buff.set(result.value);
|
|
20
|
+
}
|
|
21
|
+
return result.value?.byteLength || null;
|
|
22
|
+
}
|
|
23
|
+
write(data) {
|
|
24
|
+
if (this.closed) {
|
|
25
|
+
return Promise.reject();
|
|
26
|
+
}
|
|
27
|
+
this.writer.write(data);
|
|
28
|
+
return new Promise((resolve) => resolve(data.length));
|
|
29
|
+
}
|
|
30
|
+
close() {
|
|
31
|
+
if (!this.closed) {
|
|
32
|
+
this.closed = true;
|
|
33
|
+
this.closer();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../socket/socket.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,IAAI;IACf,MAAM,CAA2B;IACjC,MAAM,CAA0C;IAChD,MAAM,CAAU;IAChB,UAAU,CAAuB;IACjC,MAAM,CAAa;IAEnB,YAAY,QAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC5C,qDAAqD;QACrD,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAgB;QACzB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class Timer {
|
|
2
|
+
readonly delay: number;
|
|
3
|
+
private action;
|
|
4
|
+
private timer?;
|
|
5
|
+
private end;
|
|
6
|
+
private running;
|
|
7
|
+
constructor(action: Function, delay: number, wait?: boolean);
|
|
8
|
+
private startTimer;
|
|
9
|
+
private ring;
|
|
10
|
+
reset(): void;
|
|
11
|
+
clear(): void;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=timer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer.d.ts","sourceRoot":"","sources":["../../timer/timer.ts"],"names":[],"mappings":"AAAA,qBAAa,KAAK;IAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,KAAK,CAAC,CAAgC;IAC9C,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,OAAO,CAAS;gBAGZ,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,UAAQ;IAQzD,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,IAAI;IAWZ,KAAK,IAAI,IAAI;IAOb,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class Timer {
|
|
2
|
+
delay; // delay in microseconds
|
|
3
|
+
// deno-lint-ignore ban-types
|
|
4
|
+
action; // function to perform when timer expires
|
|
5
|
+
timer;
|
|
6
|
+
end = 0;
|
|
7
|
+
running = false;
|
|
8
|
+
// deno-lint-ignore ban-types
|
|
9
|
+
constructor(action, delay, wait = false) {
|
|
10
|
+
this.delay = delay;
|
|
11
|
+
this.action = action;
|
|
12
|
+
if (!wait) {
|
|
13
|
+
this.reset();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
startTimer(delay) {
|
|
17
|
+
this.running = true;
|
|
18
|
+
this.timer = setTimeout(() => this.ring(), delay);
|
|
19
|
+
}
|
|
20
|
+
ring() {
|
|
21
|
+
const timeLeft = this.end - Date.now();
|
|
22
|
+
// check if delay has passed, else execute action
|
|
23
|
+
if (timeLeft > 0) {
|
|
24
|
+
this.startTimer(timeLeft);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
this.running = false;
|
|
28
|
+
this.action();
|
|
29
|
+
}
|
|
30
|
+
reset() {
|
|
31
|
+
this.end = Date.now() + this.delay;
|
|
32
|
+
if (!this.running) {
|
|
33
|
+
this.startTimer(this.delay);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
clear() {
|
|
37
|
+
clearTimeout(this.timer);
|
|
38
|
+
this.running = false;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=timer.js.map
|