@matter/general 0.16.0-alpha.0-20250816-d22ad240d → 0.16.0-alpha.0-20250819-0a388db8b
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/cjs/codec/DnsCodec.d.ts +8 -6
- package/dist/cjs/codec/DnsCodec.d.ts.map +1 -1
- package/dist/cjs/codec/DnsCodec.js +10 -7
- package/dist/cjs/codec/DnsCodec.js.map +1 -1
- package/dist/cjs/crypto/Crypto.d.ts +32 -36
- package/dist/cjs/crypto/Crypto.d.ts.map +1 -1
- package/dist/cjs/environment/Environment.d.ts.map +1 -1
- package/dist/cjs/environment/Environment.js +2 -1
- package/dist/cjs/environment/Environment.js.map +1 -1
- package/dist/cjs/log/Diagnostic.d.ts +4 -6
- package/dist/cjs/log/Diagnostic.d.ts.map +1 -1
- package/dist/cjs/log/Diagnostic.js +6 -26
- package/dist/cjs/log/Diagnostic.js.map +1 -1
- package/dist/cjs/log/Logger.js +1 -1
- package/dist/cjs/log/Logger.js.map +1 -1
- package/dist/cjs/net/RetrySchedule.d.ts +10 -11
- package/dist/cjs/net/RetrySchedule.d.ts.map +1 -1
- package/dist/cjs/net/RetrySchedule.js +8 -7
- package/dist/cjs/net/RetrySchedule.js.map +1 -1
- package/dist/cjs/net/ServerAddress.d.ts +15 -4
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.js +33 -3
- package/dist/cjs/net/ServerAddress.js.map +2 -2
- package/dist/cjs/net/UdpMulticastServer.d.ts.map +1 -1
- package/dist/cjs/net/UdpMulticastServer.js +2 -1
- package/dist/cjs/net/UdpMulticastServer.js.map +1 -1
- package/dist/cjs/net/mock/MockRouter.d.ts +2 -1
- package/dist/cjs/net/mock/MockRouter.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockRouter.js.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts +2 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.js.map +1 -1
- package/dist/cjs/net/mock/NetworkSimulator.d.ts +2 -1
- package/dist/cjs/net/mock/NetworkSimulator.d.ts.map +1 -1
- package/dist/cjs/net/mock/NetworkSimulator.js.map +1 -1
- package/dist/cjs/storage/Storage.d.ts +2 -1
- package/dist/cjs/storage/Storage.d.ts.map +1 -1
- package/dist/cjs/storage/Storage.js.map +1 -1
- package/dist/cjs/storage/StorageBackendMemory.d.ts +2 -1
- package/dist/cjs/storage/StorageBackendMemory.d.ts.map +1 -1
- package/dist/cjs/storage/StorageBackendMemory.js +1 -1
- package/dist/cjs/storage/StorageBackendMemory.js.map +1 -1
- package/dist/cjs/storage/StorageContext.d.ts +2 -1
- package/dist/cjs/storage/StorageContext.d.ts.map +1 -1
- package/dist/cjs/storage/StorageContext.js.map +1 -1
- package/dist/cjs/storage/StringifyTools.d.ts +2 -1
- package/dist/cjs/storage/StringifyTools.d.ts.map +1 -1
- package/dist/cjs/storage/StringifyTools.js +3 -0
- package/dist/cjs/storage/StringifyTools.js.map +1 -1
- package/dist/cjs/time/Duration.d.ts +47 -0
- package/dist/cjs/time/Duration.d.ts.map +1 -0
- package/dist/cjs/time/Duration.js +145 -0
- package/dist/cjs/time/Duration.js.map +6 -0
- package/dist/cjs/time/Time.d.ts +21 -19
- package/dist/cjs/time/Time.d.ts.map +1 -1
- package/dist/cjs/time/Time.js +44 -33
- package/dist/cjs/time/Time.js.map +1 -1
- package/dist/cjs/time/TimeUnit.d.ts +87 -0
- package/dist/cjs/time/TimeUnit.d.ts.map +1 -0
- package/dist/cjs/time/TimeUnit.js +88 -0
- package/dist/cjs/time/TimeUnit.js.map +6 -0
- package/dist/cjs/time/Timespan.d.ts +26 -0
- package/dist/cjs/time/Timespan.d.ts.map +1 -0
- package/dist/cjs/time/Timespan.js +52 -0
- package/dist/cjs/time/Timespan.js.map +6 -0
- package/dist/cjs/time/Timestamp.d.ts +47 -0
- package/dist/cjs/time/Timestamp.d.ts.map +1 -0
- package/dist/cjs/time/Timestamp.js +78 -0
- package/dist/cjs/time/Timestamp.js.map +6 -0
- package/dist/cjs/time/index.d.ts +4 -0
- package/dist/cjs/time/index.d.ts.map +1 -1
- package/dist/cjs/time/index.js +4 -0
- package/dist/cjs/time/index.js.map +1 -1
- package/dist/cjs/transaction/Status.d.ts +1 -1
- package/dist/cjs/transaction/Status.d.ts.map +1 -1
- package/dist/cjs/transaction/Status.js +2 -1
- package/dist/cjs/transaction/Status.js.map +1 -1
- package/dist/cjs/transaction/Tx.d.ts.map +1 -1
- package/dist/cjs/transaction/Tx.js +10 -8
- package/dist/cjs/transaction/Tx.js.map +1 -1
- package/dist/cjs/util/Cache.d.ts +5 -4
- package/dist/cjs/util/Cache.d.ts.map +1 -1
- package/dist/cjs/util/Cache.js +11 -11
- package/dist/cjs/util/Cache.js.map +1 -1
- package/dist/cjs/util/DataReadQueue.d.ts +2 -1
- package/dist/cjs/util/DataReadQueue.d.ts.map +1 -1
- package/dist/cjs/util/DataReadQueue.js +9 -3
- package/dist/cjs/util/DataReadQueue.js.map +1 -1
- package/dist/cjs/util/DeepEqual.d.ts +13 -1
- package/dist/cjs/util/DeepEqual.d.ts.map +1 -1
- package/dist/cjs/util/DeepEqual.js +24 -5
- package/dist/cjs/util/DeepEqual.js.map +2 -2
- package/dist/cjs/util/Observable.d.ts +4 -3
- package/dist/cjs/util/Observable.d.ts.map +1 -1
- package/dist/cjs/util/Observable.js +16 -15
- package/dist/cjs/util/Observable.js.map +1 -1
- package/dist/cjs/util/PromiseQueue.d.ts +2 -1
- package/dist/cjs/util/PromiseQueue.d.ts.map +1 -1
- package/dist/cjs/util/PromiseQueue.js +2 -1
- package/dist/cjs/util/PromiseQueue.js.map +1 -1
- package/dist/cjs/util/Promises.d.ts +3 -2
- package/dist/cjs/util/Promises.d.ts.map +1 -1
- package/dist/cjs/util/Promises.js +4 -4
- package/dist/cjs/util/Promises.js.map +1 -1
- package/dist/esm/codec/DnsCodec.d.ts +8 -6
- package/dist/esm/codec/DnsCodec.d.ts.map +1 -1
- package/dist/esm/codec/DnsCodec.js +10 -7
- package/dist/esm/codec/DnsCodec.js.map +1 -1
- package/dist/esm/crypto/Crypto.d.ts +32 -36
- package/dist/esm/crypto/Crypto.d.ts.map +1 -1
- package/dist/esm/environment/Environment.d.ts.map +1 -1
- package/dist/esm/environment/Environment.js +2 -1
- package/dist/esm/environment/Environment.js.map +1 -1
- package/dist/esm/log/Diagnostic.d.ts +4 -6
- package/dist/esm/log/Diagnostic.d.ts.map +1 -1
- package/dist/esm/log/Diagnostic.js +6 -26
- package/dist/esm/log/Diagnostic.js.map +1 -1
- package/dist/esm/log/Logger.js +1 -1
- package/dist/esm/log/Logger.js.map +1 -1
- package/dist/esm/net/RetrySchedule.d.ts +10 -11
- package/dist/esm/net/RetrySchedule.d.ts.map +1 -1
- package/dist/esm/net/RetrySchedule.js +8 -7
- package/dist/esm/net/RetrySchedule.js.map +1 -1
- package/dist/esm/net/ServerAddress.d.ts +15 -4
- package/dist/esm/net/ServerAddress.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.js +33 -3
- package/dist/esm/net/ServerAddress.js.map +2 -2
- package/dist/esm/net/UdpMulticastServer.d.ts.map +1 -1
- package/dist/esm/net/UdpMulticastServer.js +2 -1
- package/dist/esm/net/UdpMulticastServer.js.map +1 -1
- package/dist/esm/net/mock/MockRouter.d.ts +2 -1
- package/dist/esm/net/mock/MockRouter.d.ts.map +1 -1
- package/dist/esm/net/mock/MockRouter.js.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts +2 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.js.map +1 -1
- package/dist/esm/net/mock/NetworkSimulator.d.ts +2 -1
- package/dist/esm/net/mock/NetworkSimulator.d.ts.map +1 -1
- package/dist/esm/net/mock/NetworkSimulator.js.map +1 -1
- package/dist/esm/storage/Storage.d.ts +2 -1
- package/dist/esm/storage/Storage.d.ts.map +1 -1
- package/dist/esm/storage/Storage.js.map +1 -1
- package/dist/esm/storage/StorageBackendMemory.d.ts +2 -1
- package/dist/esm/storage/StorageBackendMemory.d.ts.map +1 -1
- package/dist/esm/storage/StorageBackendMemory.js +1 -1
- package/dist/esm/storage/StorageBackendMemory.js.map +1 -1
- package/dist/esm/storage/StorageContext.d.ts +2 -1
- package/dist/esm/storage/StorageContext.d.ts.map +1 -1
- package/dist/esm/storage/StorageContext.js.map +1 -1
- package/dist/esm/storage/StringifyTools.d.ts +2 -1
- package/dist/esm/storage/StringifyTools.d.ts.map +1 -1
- package/dist/esm/storage/StringifyTools.js +3 -0
- package/dist/esm/storage/StringifyTools.js.map +1 -1
- package/dist/esm/time/Duration.d.ts +47 -0
- package/dist/esm/time/Duration.d.ts.map +1 -0
- package/dist/esm/time/Duration.js +125 -0
- package/dist/esm/time/Duration.js.map +6 -0
- package/dist/esm/time/Time.d.ts +21 -19
- package/dist/esm/time/Time.d.ts.map +1 -1
- package/dist/esm/time/Time.js +44 -33
- package/dist/esm/time/Time.js.map +1 -1
- package/dist/esm/time/TimeUnit.d.ts +87 -0
- package/dist/esm/time/TimeUnit.d.ts.map +1 -0
- package/dist/esm/time/TimeUnit.js +68 -0
- package/dist/esm/time/TimeUnit.js.map +6 -0
- package/dist/esm/time/Timespan.d.ts +26 -0
- package/dist/esm/time/Timespan.d.ts.map +1 -0
- package/dist/esm/time/Timespan.js +32 -0
- package/dist/esm/time/Timespan.js.map +6 -0
- package/dist/esm/time/Timestamp.d.ts +47 -0
- package/dist/esm/time/Timestamp.d.ts.map +1 -0
- package/dist/esm/time/Timestamp.js +58 -0
- package/dist/esm/time/Timestamp.js.map +6 -0
- package/dist/esm/time/index.d.ts +4 -0
- package/dist/esm/time/index.d.ts.map +1 -1
- package/dist/esm/time/index.js +4 -0
- package/dist/esm/time/index.js.map +1 -1
- package/dist/esm/transaction/Status.d.ts +1 -1
- package/dist/esm/transaction/Status.d.ts.map +1 -1
- package/dist/esm/transaction/Status.js +2 -1
- package/dist/esm/transaction/Status.js.map +1 -1
- package/dist/esm/transaction/Tx.d.ts.map +1 -1
- package/dist/esm/transaction/Tx.js +10 -8
- package/dist/esm/transaction/Tx.js.map +1 -1
- package/dist/esm/util/Cache.d.ts +5 -4
- package/dist/esm/util/Cache.d.ts.map +1 -1
- package/dist/esm/util/Cache.js +11 -11
- package/dist/esm/util/Cache.js.map +1 -1
- package/dist/esm/util/DataReadQueue.d.ts +2 -1
- package/dist/esm/util/DataReadQueue.d.ts.map +1 -1
- package/dist/esm/util/DataReadQueue.js +9 -3
- package/dist/esm/util/DataReadQueue.js.map +1 -1
- package/dist/esm/util/DeepEqual.d.ts +13 -1
- package/dist/esm/util/DeepEqual.d.ts.map +1 -1
- package/dist/esm/util/DeepEqual.js +24 -5
- package/dist/esm/util/DeepEqual.js.map +2 -2
- package/dist/esm/util/Observable.d.ts +4 -3
- package/dist/esm/util/Observable.d.ts.map +1 -1
- package/dist/esm/util/Observable.js +16 -15
- package/dist/esm/util/Observable.js.map +1 -1
- package/dist/esm/util/PromiseQueue.d.ts +2 -1
- package/dist/esm/util/PromiseQueue.d.ts.map +1 -1
- package/dist/esm/util/PromiseQueue.js +2 -1
- package/dist/esm/util/PromiseQueue.js.map +1 -1
- package/dist/esm/util/Promises.d.ts +3 -2
- package/dist/esm/util/Promises.d.ts.map +1 -1
- package/dist/esm/util/Promises.js +4 -4
- package/dist/esm/util/Promises.js.map +1 -1
- package/package.json +3 -3
- package/src/codec/DnsCodec.ts +27 -8
- package/src/environment/Environment.ts +2 -1
- package/src/log/Diagnostic.ts +9 -37
- package/src/log/Logger.ts +1 -1
- package/src/net/RetrySchedule.ts +14 -14
- package/src/net/ServerAddress.ts +44 -5
- package/src/net/UdpMulticastServer.ts +2 -1
- package/src/net/mock/MockRouter.ts +2 -1
- package/src/net/mock/MockUdpChannel.ts +2 -1
- package/src/net/mock/NetworkSimulator.ts +2 -1
- package/src/storage/Storage.ts +2 -5
- package/src/storage/StorageBackendMemory.ts +2 -2
- package/src/storage/StorageContext.ts +2 -1
- package/src/storage/StringifyTools.ts +5 -0
- package/src/time/Duration.ts +181 -0
- package/src/time/Time.ts +50 -39
- package/src/time/TimeUnit.ts +159 -0
- package/src/time/Timespan.ts +52 -0
- package/src/time/Timestamp.ts +94 -0
- package/src/time/index.ts +4 -0
- package/src/transaction/Status.ts +2 -1
- package/src/transaction/Tx.ts +9 -7
- package/src/util/Cache.ts +11 -10
- package/src/util/DataReadQueue.ts +9 -3
- package/src/util/DeepEqual.ts +38 -13
- package/src/util/Observable.ts +19 -17
- package/src/util/PromiseQueue.ts +4 -2
- package/src/util/Promises.ts +6 -5
|
@@ -3,12 +3,13 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Duration } from "#time/Duration.js";
|
|
6
7
|
/**
|
|
7
8
|
* A queue that processes promises with a given concurrency and delays after each promise if desired.
|
|
8
9
|
*/
|
|
9
10
|
export declare class PromiseQueue {
|
|
10
11
|
#private;
|
|
11
|
-
constructor(concurrency?: number, delay?:
|
|
12
|
+
constructor(concurrency?: number, delay?: Duration);
|
|
12
13
|
/**
|
|
13
14
|
* Add a promise to the queue. It returns a promise that can be awaited.
|
|
14
15
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromiseQueue.d.ts","sourceRoot":"","sources":["../../../src/util/PromiseQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"PromiseQueue.d.ts","sourceRoot":"","sources":["../../../src/util/PromiseQueue.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ7C;;GAEG;AACH,qBAAa,YAAY;;gBAMT,WAAW,SAAI,EAAE,KAAK,WAAU;IAK5C;;OAEG;IACH,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsD9C;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAS5B,+CAA+C;IAC/C,IAAI,KAAK,WAER;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAGhB"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Time } from "#time/Time.js";
|
|
7
|
+
import { Instant } from "#time/TimeUnit.js";
|
|
7
8
|
import { Logger } from "../log/Logger.js";
|
|
8
9
|
import { createPromise } from "./Promises.js";
|
|
9
10
|
const logger = Logger.get("PromiseQueue");
|
|
@@ -12,7 +13,7 @@ class PromiseQueue {
|
|
|
12
13
|
#queue = new Array();
|
|
13
14
|
#concurrency;
|
|
14
15
|
#runningCount = 0;
|
|
15
|
-
constructor(concurrency = 1, delay =
|
|
16
|
+
constructor(concurrency = 1, delay = Instant) {
|
|
16
17
|
this.#concurrency = concurrency;
|
|
17
18
|
this.#delay = delay;
|
|
18
19
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/PromiseQueue.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B,MAAM,SAAS,OAAO,IAAI,cAAc;AAKjC,MAAM,aAAa;AAAA,EACb;AAAA,EACA,SAAS,IAAI,MAAsE;AAAA,EACnF;AAAA,EACT,gBAAgB;AAAA,EAEhB,YAAY,cAAc,GAAG,QAAQ,SAAS;AAC1C,SAAK,eAAe;AACpB,SAAK,SAAS;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAO,UAAwC;AAC3C,UAAM,EAAE,SAAS,UAAU,SAAS,IAAI,cAAiB;AAEzD,WAAO,MAAM,iCAAiC,KAAK,OAAO,SAAS,CAAC;AACpE,SAAK,OAAO,KAAK;AAAA,MACb,MAAM,MAAM,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ;AAAA,MACpD;AAAA,IACJ,CAAC;AACD,SAAK,KAAK;AACV,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAa;AACT,QAAI,KAAK,iBAAiB,KAAK,gBAAgB,KAAK,OAAO,WAAW,GAAG;AACrE;AAAA,IACJ;AAEA,WAAO;AAAA,MACH;AAAA,MACA,KAAK,OAAO;AAAA,MACZ;AAAA,MACA,KAAK;AAAA,IACT;AACA,UAAM,EAAE,KAAK,IAAI,KAAK,OAAO,MAAM,KAAK,CAAC;AACzC,QAAI,SAAS,QAAW;AACpB,WAAK;AACL,WAAK,EACA,MAAM,WAAS;AACZ,cAAM;AAAA,MACV,CAAC,EACA,QAAQ,MAAM;AACX,eAAO,MAAM,wCAAwC,KAAK,gBAAgB,CAAC;AAC3E,YAAI,KAAK,SAAS,GAAG;AAEjB,eAAK,MAAM,eAAe,KAAK,MAAM,EAChC,KAAK,MAAM,KAAK,SAAS,CAAC,EAC1B,MAAM,WAAS;AACZ,kBAAM;AAAA,UACV,CAAC;AAAA,QACT,OAAO;AACH,eAAK,SAAS;AAAA,QAClB;AAAA,MACJ,CAAC;AAAA,IACT;AAAA,EACJ;AAAA,EAEA,WAAiB;AACb,SAAK;AACL,SAAK,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAuB;AACzB,QAAI,QAAQ;AACR,iBAAW,EAAE,SAAS,KAAK,KAAK,QAAQ;AACpC,iBAAS;AAAA,MACb;AAAA,IACJ;AACA,SAAK,OAAO,SAAS;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,QAAQ;AACR,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACV,SAAK,MAAM,KAAK;AAAA,EACpB;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Copyright 2022-2025 Matter.js Authors
|
|
6
6
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
*/
|
|
8
|
+
import { Duration } from "#time/Duration.js";
|
|
8
9
|
import { TimeoutError } from "../MatterError.js";
|
|
9
10
|
/**
|
|
10
11
|
* Obtain a promise with functions to resolve and reject.
|
|
@@ -29,11 +30,11 @@ export declare class PromiseTimeoutError extends TimeoutError {
|
|
|
29
30
|
*
|
|
30
31
|
* By default, rejects with {@link PromiseTimeoutError} on timeout but you can override by supplying {@link cancel}.
|
|
31
32
|
*
|
|
32
|
-
* @param
|
|
33
|
+
* @param timeout the timeout in milliseconds
|
|
33
34
|
* @param promise a promise that resolves or rejects when the timed task completes
|
|
34
35
|
* @param cancel invoked on timeout (default implementation throws {@link PromiseTimeoutError})
|
|
35
36
|
*/
|
|
36
|
-
export declare function withTimeout<T>(
|
|
37
|
+
export declare function withTimeout<T>(timeout: Duration, promise: Promise<T>, cancel?: AbortController | (() => void)): Promise<T>;
|
|
37
38
|
/**
|
|
38
39
|
* Return type for functions that are optionally asynchronous.
|
|
39
40
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Promises.d.ts","sourceRoot":"","sources":["../../../src/util/Promises.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"Promises.d.ts","sourceRoot":"","sources":["../../../src/util/Promises.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGhE;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,KAAK;IAChC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;CACpC,CAiBA;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAsBvF;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,YAAY;CAAG;AAExD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,CAAC,EAC/B,OAAO,EAAE,QAAQ,EACjB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,EAAE,eAAe,GAAG,CAAC,MAAM,IAAI,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC,CAmDZ;AAED;;;;GAIG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAE5D,eAAO,MAAM,YAAY;IACrB;;OAEG;OACA,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC;IAUtD;;;OAGG;SACE,CAAC,EAAE,EAAE,UAAU,EAAE,oBACR,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,YACzC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,WACxC,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,GACnD,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;IAsCxB;;OAEG;UACG,CAAC,EAAE,OAAO,oBACF,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,eACtC,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI;IAKhE;;OAEG;YACK,CAAC,YACK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC,CAAC,cACvC,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAC9C,YAAY,CAAC,CAAC,CAAC;;CA4DrB,CAAC"}
|
|
@@ -45,7 +45,7 @@ function anyPromise(promises) {
|
|
|
45
45
|
}
|
|
46
46
|
class PromiseTimeoutError extends TimeoutError {
|
|
47
47
|
}
|
|
48
|
-
async function withTimeout(
|
|
48
|
+
async function withTimeout(timeout, promise, cancel) {
|
|
49
49
|
let cancelFn;
|
|
50
50
|
if (typeof cancel === "function") {
|
|
51
51
|
cancelFn = cancel;
|
|
@@ -57,8 +57,8 @@ async function withTimeout(timeoutMs, promise, cancel) {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
let cancelTimer;
|
|
60
|
-
const
|
|
61
|
-
const timer = Time.getTimer("promise-timeout",
|
|
60
|
+
const timedOut = new Promise((resolve, reject) => {
|
|
61
|
+
const timer = Time.getTimer("promise-timeout", timeout, () => {
|
|
62
62
|
try {
|
|
63
63
|
cancelFn();
|
|
64
64
|
} catch (e) {
|
|
@@ -83,7 +83,7 @@ async function withTimeout(timeoutMs, promise, cancel) {
|
|
|
83
83
|
throw e;
|
|
84
84
|
}
|
|
85
85
|
);
|
|
86
|
-
await Promise.all([
|
|
86
|
+
await Promise.all([timedOut, producer]);
|
|
87
87
|
return result;
|
|
88
88
|
}
|
|
89
89
|
const MaybePromise = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/Promises.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.16.0-alpha.0-
|
|
3
|
+
"version": "0.16.0-alpha.0-20250819-0a388db8b",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"embed-examples": "embedme **/README.md"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@noble/curves": "^1.9.
|
|
36
|
+
"@noble/curves": "^1.9.7"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
39
|
+
"@matter/testing": "0.16.0-alpha.0-20250819-0a388db8b"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
package/src/codec/DnsCodec.ts
CHANGED
|
@@ -4,19 +4,28 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Duration } from "#time/Duration.js";
|
|
8
|
+
import { Seconds } from "#time/TimeUnit.js";
|
|
7
9
|
import { InternalError, NotImplementedError, UnexpectedDataError } from "../MatterError.js";
|
|
8
10
|
import { Bytes, Endian } from "../util/Bytes.js";
|
|
9
11
|
import { DataReader } from "../util/DataReader.js";
|
|
10
12
|
import { DataWriter } from "../util/DataWriter.js";
|
|
11
13
|
import { ipv4BytesToString, ipv4ToBytes, ipv6BytesToString, ipv6ToBytes, isIPv4, isIPv6 } from "../util/Ip.js";
|
|
12
14
|
|
|
15
|
+
export const DEFAULT_MDNS_TTL = Seconds(120);
|
|
16
|
+
|
|
13
17
|
/**
|
|
14
18
|
* The maximum MDNS message size to usually fit into one UDP network MTU packet. Data are split into multiple messages
|
|
15
19
|
* when needed.
|
|
16
20
|
*/
|
|
17
21
|
export const MAX_MDNS_MESSAGE_SIZE = 1232; // 1280bytes (IPv6 packet size) - 8bytes (UDP header) - 40bytes (IPv6 IP header, IPv4 is only 20bytes)
|
|
18
22
|
|
|
19
|
-
export const PtrRecord = (
|
|
23
|
+
export const PtrRecord = (
|
|
24
|
+
name: string,
|
|
25
|
+
ptr: string,
|
|
26
|
+
ttl = DEFAULT_MDNS_TTL,
|
|
27
|
+
flushCache = false,
|
|
28
|
+
): DnsRecord<string> => ({
|
|
20
29
|
name,
|
|
21
30
|
value: ptr,
|
|
22
31
|
ttl,
|
|
@@ -24,7 +33,7 @@ export const PtrRecord = (name: string, ptr: string, ttl = 120, flushCache = fal
|
|
|
24
33
|
recordClass: DnsRecordClass.IN,
|
|
25
34
|
flushCache,
|
|
26
35
|
});
|
|
27
|
-
export const ARecord = (name: string, ip: string, ttl =
|
|
36
|
+
export const ARecord = (name: string, ip: string, ttl = DEFAULT_MDNS_TTL, flushCache = false): DnsRecord<string> => ({
|
|
28
37
|
name,
|
|
29
38
|
value: ip,
|
|
30
39
|
ttl,
|
|
@@ -32,7 +41,12 @@ export const ARecord = (name: string, ip: string, ttl = 120, flushCache = false)
|
|
|
32
41
|
recordClass: DnsRecordClass.IN,
|
|
33
42
|
flushCache,
|
|
34
43
|
});
|
|
35
|
-
export const AAAARecord = (
|
|
44
|
+
export const AAAARecord = (
|
|
45
|
+
name: string,
|
|
46
|
+
ip: string,
|
|
47
|
+
ttl = DEFAULT_MDNS_TTL,
|
|
48
|
+
flushCache = false,
|
|
49
|
+
): DnsRecord<string> => ({
|
|
36
50
|
name,
|
|
37
51
|
value: ip,
|
|
38
52
|
ttl,
|
|
@@ -40,7 +54,12 @@ export const AAAARecord = (name: string, ip: string, ttl = 120, flushCache = fal
|
|
|
40
54
|
recordClass: DnsRecordClass.IN,
|
|
41
55
|
flushCache,
|
|
42
56
|
});
|
|
43
|
-
export const TxtRecord = (
|
|
57
|
+
export const TxtRecord = (
|
|
58
|
+
name: string,
|
|
59
|
+
entries: string[],
|
|
60
|
+
ttl = DEFAULT_MDNS_TTL,
|
|
61
|
+
flushCache = false,
|
|
62
|
+
): DnsRecord<string[]> => ({
|
|
44
63
|
name,
|
|
45
64
|
value: entries,
|
|
46
65
|
ttl,
|
|
@@ -51,7 +70,7 @@ export const TxtRecord = (name: string, entries: string[], ttl = 120, flushCache
|
|
|
51
70
|
export const SrvRecord = (
|
|
52
71
|
name: string,
|
|
53
72
|
srv: SrvRecordValue,
|
|
54
|
-
ttl =
|
|
73
|
+
ttl = DEFAULT_MDNS_TTL,
|
|
55
74
|
flushCache = false,
|
|
56
75
|
): DnsRecord<SrvRecordValue> => ({
|
|
57
76
|
name,
|
|
@@ -81,7 +100,7 @@ export type DnsRecord<T = unknown> = {
|
|
|
81
100
|
recordType: DnsRecordType;
|
|
82
101
|
recordClass: DnsRecordClass;
|
|
83
102
|
flushCache?: boolean;
|
|
84
|
-
ttl:
|
|
103
|
+
ttl: Duration;
|
|
85
104
|
value: T;
|
|
86
105
|
};
|
|
87
106
|
|
|
@@ -168,7 +187,7 @@ export class DnsCodec {
|
|
|
168
187
|
const classInt = reader.readUInt16();
|
|
169
188
|
const flushCache = (classInt & 0x8000) !== 0;
|
|
170
189
|
const recordClass = classInt & 0x7fff;
|
|
171
|
-
const ttl = reader.readUInt32();
|
|
190
|
+
const ttl = Seconds(reader.readUInt32());
|
|
172
191
|
const valueLength = reader.readUInt16();
|
|
173
192
|
const valueBytes = reader.readByteArray(valueLength);
|
|
174
193
|
const value = this.decodeRecordValue(valueBytes, recordType, message);
|
|
@@ -298,7 +317,7 @@ export class DnsCodec {
|
|
|
298
317
|
writer.writeByteArray(this.encodeQName(name));
|
|
299
318
|
writer.writeUInt16(recordType);
|
|
300
319
|
writer.writeUInt16(recordClass | (flushCache ? 0x8000 : 0));
|
|
301
|
-
writer.writeUInt32(ttl);
|
|
320
|
+
writer.writeUInt32(Seconds.of(ttl));
|
|
302
321
|
const encodedValue = this.encodeRecordValue(value, recordType);
|
|
303
322
|
writer.writeUInt16(encodedValue.byteLength);
|
|
304
323
|
writer.writeByteArray(encodedValue);
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Instant } from "#time/TimeUnit.js";
|
|
7
8
|
import { MaybePromise } from "#util/Promises.js";
|
|
8
9
|
import { DiagnosticSource } from "../log/DiagnosticSource.js";
|
|
9
10
|
import { Logger } from "../log/Logger.js";
|
|
@@ -227,7 +228,7 @@ export class Environment {
|
|
|
227
228
|
* Display tasks that supply diagnostics.
|
|
228
229
|
*/
|
|
229
230
|
diagnose() {
|
|
230
|
-
Time.getTimer("Diagnostics",
|
|
231
|
+
Time.getTimer("Diagnostics", Instant, () => {
|
|
231
232
|
try {
|
|
232
233
|
logger.notice("Diagnostics follow", DiagnosticSource);
|
|
233
234
|
} catch (e) {
|
package/src/log/Diagnostic.ts
CHANGED
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Duration } from "#time/Duration.js";
|
|
8
|
+
import { Time } from "#time/Time.js";
|
|
9
|
+
import { Timestamp } from "#time/Timestamp.js";
|
|
10
|
+
import { Millis } from "#time/TimeUnit.js";
|
|
7
11
|
import { Bytes } from "#util/Bytes.js";
|
|
8
12
|
import type { Lifecycle } from "../util/Lifecycle.js";
|
|
9
13
|
import { LogLevel } from "./LogLevel.js";
|
|
@@ -302,56 +306,24 @@ export namespace Diagnostic {
|
|
|
302
306
|
}
|
|
303
307
|
|
|
304
308
|
export interface Elapsed {
|
|
305
|
-
readonly startedAt:
|
|
306
|
-
readonly time:
|
|
309
|
+
readonly startedAt: Timestamp;
|
|
310
|
+
readonly time: Duration;
|
|
307
311
|
toString(): string;
|
|
308
312
|
}
|
|
309
313
|
|
|
310
|
-
/**
|
|
311
|
-
* Convert an interval to text.
|
|
312
|
-
*/
|
|
313
|
-
export function interval(ms: number) {
|
|
314
|
-
if (ms < 0) {
|
|
315
|
-
return `${(ms * 1000).toPrecision(3)}μs`;
|
|
316
|
-
} else if (ms < 1000) {
|
|
317
|
-
return `${ms.toPrecision(3)}ms`;
|
|
318
|
-
} else if (ms < 60000) {
|
|
319
|
-
return `${(ms / 1000).toPrecision(3)}s`;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
let days;
|
|
323
|
-
if (ms > 86_400_000) {
|
|
324
|
-
days = `${Math.floor(ms / 86_400_000)}d `;
|
|
325
|
-
ms %= 86_400_000;
|
|
326
|
-
} else {
|
|
327
|
-
days = "";
|
|
328
|
-
}
|
|
329
|
-
const hours = Math.floor(ms / 3_600_000)
|
|
330
|
-
.toString()
|
|
331
|
-
.padStart(2, "0");
|
|
332
|
-
ms %= 3_600_000;
|
|
333
|
-
const minutes = Math.floor(ms / 60_000)
|
|
334
|
-
.toString()
|
|
335
|
-
.padStart(2, "0");
|
|
336
|
-
ms %= 60_000;
|
|
337
|
-
const seconds = Math.floor(ms).toString().padStart(2, "0");
|
|
338
|
-
|
|
339
|
-
return `${days}${hours}:${minutes}:${seconds}`;
|
|
340
|
-
}
|
|
341
|
-
|
|
342
314
|
/**
|
|
343
315
|
* Create a diagnostic that renders as elapsed time since creation.
|
|
344
316
|
*/
|
|
345
317
|
export function elapsed(): Elapsed {
|
|
346
318
|
return {
|
|
347
|
-
startedAt:
|
|
319
|
+
startedAt: Time.nowUs,
|
|
348
320
|
|
|
349
321
|
get time() {
|
|
350
|
-
return
|
|
322
|
+
return Millis(Time.nowUs - this.startedAt);
|
|
351
323
|
},
|
|
352
324
|
|
|
353
325
|
toString() {
|
|
354
|
-
return
|
|
326
|
+
return Duration.format(this.time);
|
|
355
327
|
},
|
|
356
328
|
};
|
|
357
329
|
}
|
package/src/log/Logger.ts
CHANGED
package/src/net/RetrySchedule.ts
CHANGED
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Crypto } from "#crypto/Crypto.js";
|
|
8
|
+
import { Duration } from "#time/Duration.js";
|
|
9
|
+
import { Instant, Millis, Seconds } from "#time/TimeUnit.js";
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
12
|
* An iterable of retry values based on a scheduling configuration.
|
|
@@ -29,31 +31,31 @@ export class RetrySchedule {
|
|
|
29
31
|
maximumInterval,
|
|
30
32
|
maximumCount,
|
|
31
33
|
jitterFactor = 0,
|
|
32
|
-
initialInterval =
|
|
34
|
+
initialInterval = Seconds.one,
|
|
33
35
|
backoffFactor = 2,
|
|
34
36
|
} = this.config;
|
|
35
37
|
|
|
36
38
|
let count = 0;
|
|
37
39
|
let baseInterval = initialInterval;
|
|
38
|
-
let timeSoFar =
|
|
40
|
+
let timeSoFar = Instant;
|
|
39
41
|
|
|
40
42
|
while ((timeout === undefined || timeSoFar < timeout) && (maximumCount === undefined || maximumCount > count)) {
|
|
41
43
|
count++;
|
|
42
44
|
const maxJitter = jitterFactor * baseInterval;
|
|
43
|
-
const jitter =
|
|
44
|
-
let interval = baseInterval + jitter;
|
|
45
|
+
const jitter = Millis.floor(Millis((maxJitter * this.#crypto.randomUint32) / Math.pow(2, 32)));
|
|
46
|
+
let interval = Millis(baseInterval + jitter);
|
|
45
47
|
|
|
46
48
|
if (timeout !== undefined && timeSoFar + interval > timeout) {
|
|
47
|
-
interval = timeout - timeSoFar;
|
|
49
|
+
interval = Millis(timeout - timeSoFar);
|
|
48
50
|
}
|
|
49
51
|
if (maximumInterval !== undefined && interval > maximumInterval) {
|
|
50
52
|
interval = maximumInterval;
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
yield interval;
|
|
54
|
-
timeSoFar
|
|
56
|
+
timeSoFar = Millis(timeSoFar + interval);
|
|
55
57
|
|
|
56
|
-
baseInterval
|
|
58
|
+
baseInterval = Millis(baseInterval * backoffFactor);
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
}
|
|
@@ -61,16 +63,14 @@ export class RetrySchedule {
|
|
|
61
63
|
export namespace RetrySchedule {
|
|
62
64
|
/**
|
|
63
65
|
* Configuration parameters for retry schedule.
|
|
64
|
-
*
|
|
65
|
-
* All intervals are in milliseconds.
|
|
66
66
|
*/
|
|
67
67
|
export interface Configuration {
|
|
68
68
|
/**
|
|
69
|
-
* Overall timeout
|
|
69
|
+
* Overall timeout.
|
|
70
70
|
*
|
|
71
71
|
* Leave undefined to allow indefinite transmission.
|
|
72
72
|
*/
|
|
73
|
-
readonly timeout?:
|
|
73
|
+
readonly timeout?: Duration;
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Maximum number of occurrences (including first).
|
|
@@ -82,9 +82,9 @@ export namespace RetrySchedule {
|
|
|
82
82
|
/**
|
|
83
83
|
* Interval between first request and final interval.
|
|
84
84
|
*
|
|
85
|
-
* Defaults to
|
|
85
|
+
* Defaults to 1s.
|
|
86
86
|
*/
|
|
87
|
-
readonly initialInterval?:
|
|
87
|
+
readonly initialInterval?: Duration;
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
90
|
* Multiplier for subsequent retries.
|
|
@@ -98,7 +98,7 @@ export namespace RetrySchedule {
|
|
|
98
98
|
*
|
|
99
99
|
* Leave undefined for interval to allow interval to grow continuously.
|
|
100
100
|
*/
|
|
101
|
-
readonly maximumInterval?:
|
|
101
|
+
readonly maximumInterval?: Duration;
|
|
102
102
|
|
|
103
103
|
/**
|
|
104
104
|
* Multiplier for retry jitter.
|
package/src/net/ServerAddress.ts
CHANGED
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Diagnostic } from "#log/Diagnostic.js";
|
|
8
|
+
import { Duration } from "#time/Duration.js";
|
|
9
|
+
import { Timestamp } from "#time/Timestamp.js";
|
|
10
|
+
import { Seconds } from "#time/TimeUnit.js";
|
|
11
|
+
|
|
7
12
|
export type ServerAddressIp = {
|
|
8
13
|
type: "udp";
|
|
9
14
|
ip: string;
|
|
@@ -17,14 +22,48 @@ export type ServerAddressBle = {
|
|
|
17
22
|
|
|
18
23
|
export interface Lifespan {
|
|
19
24
|
/** Beginning of lifespan (system time in milliseconds) */
|
|
20
|
-
discoveredAt:
|
|
25
|
+
discoveredAt: Timestamp;
|
|
21
26
|
|
|
22
|
-
/** Length of lifespan, if known (
|
|
23
|
-
ttl:
|
|
27
|
+
/** Length of lifespan, if known (seconds) */
|
|
28
|
+
ttl: Duration;
|
|
24
29
|
}
|
|
25
30
|
|
|
26
31
|
export type ServerAddress = (ServerAddressIp | ServerAddressBle) & Partial<Lifespan>;
|
|
27
32
|
|
|
28
|
-
export function
|
|
29
|
-
return
|
|
33
|
+
export function ServerAddress(definition: ServerAddress.Definition) {
|
|
34
|
+
return {
|
|
35
|
+
discoveredAt: undefined,
|
|
36
|
+
...definition,
|
|
37
|
+
ttl: Seconds(definition.ttl),
|
|
38
|
+
} as ServerAddress;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export namespace ServerAddress {
|
|
42
|
+
export function urlFor(address: ServerAddress): string {
|
|
43
|
+
return address.type === "udp" ? `udp://[${address.ip}]:${address.port}` : `ble://${address.peripheralAddress}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function diagnosticFor(address: ServerAddress) {
|
|
47
|
+
const diagnostic = Array<unknown>();
|
|
48
|
+
|
|
49
|
+
if (address.type === "udp") {
|
|
50
|
+
diagnostic.push("udp://", Diagnostic.strong(address.ip), ":", address.port);
|
|
51
|
+
} else {
|
|
52
|
+
diagnostic.push("ble://", Diagnostic.strong(address.peripheralAddress));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if ("ttl" in address && typeof address.ttl === "number") {
|
|
56
|
+
diagnostic.push(" ttl ", Duration.format(address.ttl));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return Diagnostic.squash(...diagnostic);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function definitionOf(address: ServerAddress): Definition {
|
|
63
|
+
return address;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface Definition extends Omit<ServerAddress, "ttl"> {
|
|
67
|
+
ttl?: Duration;
|
|
68
|
+
}
|
|
30
69
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { MatterAggregateError } from "#MatterError.js";
|
|
8
|
+
import { Minutes } from "#time/TimeUnit.js";
|
|
8
9
|
import { Bytes } from "#util/Bytes.js";
|
|
9
10
|
import { Logger } from "../log/Logger.js";
|
|
10
11
|
import { Cache } from "../util/Cache.js";
|
|
@@ -72,7 +73,7 @@ export class UdpMulticastServer {
|
|
|
72
73
|
private readonly broadcastChannels = new Cache<Promise<UdpChannel>>(
|
|
73
74
|
"UDP broadcast channel",
|
|
74
75
|
(netInterface, iPv4) => this.createBroadcastChannel(netInterface, iPv4),
|
|
75
|
-
5
|
|
76
|
+
Minutes(5),
|
|
76
77
|
async (_netInterface, channel) => (await channel).close(),
|
|
77
78
|
);
|
|
78
79
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Logger } from "#log/Logger.js";
|
|
8
|
+
import { Bytes } from "#util/Bytes.js";
|
|
8
9
|
|
|
9
10
|
const logger = Logger.get("MockRouter");
|
|
10
11
|
|
|
@@ -39,7 +40,7 @@ export namespace MockRouter {
|
|
|
39
40
|
sourcePort: number;
|
|
40
41
|
destAddress: string;
|
|
41
42
|
destPort: number;
|
|
42
|
-
payload:
|
|
43
|
+
payload: Bytes;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
export interface Route {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { ChannelType } from "#net/Channel.js";
|
|
8
|
+
import { Bytes } from "#util/Bytes.js";
|
|
8
9
|
import { NetworkError } from "../Network.js";
|
|
9
10
|
import { MAX_UDP_MESSAGE_SIZE, UdpChannel, UdpChannelOptions } from "../UdpChannel.js";
|
|
10
11
|
import { MockNetwork } from "./MockNetwork.js";
|
|
@@ -62,7 +63,7 @@ export class MockUdpChannel implements UdpChannel {
|
|
|
62
63
|
};
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
async send(host: string, port: number, payload:
|
|
66
|
+
async send(host: string, port: number, payload: Bytes) {
|
|
66
67
|
this.#host.simulator.router({
|
|
67
68
|
kind: "udp",
|
|
68
69
|
sourceAddress: this.#sendFrom,
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { Bytes } from "#util/Bytes.js";
|
|
7
8
|
import { MockNetwork } from "./MockNetwork.js";
|
|
8
9
|
import { MockRouter } from "./MockRouter.js";
|
|
9
10
|
|
|
@@ -20,5 +21,5 @@ export class NetworkSimulator {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
export namespace NetworkSimulator {
|
|
23
|
-
export type Listener = (netInterface: string, peerAddress: string, peerPort: number, data:
|
|
24
|
+
export type Listener = (netInterface: string, peerAddress: string, peerPort: number, data: Bytes) => void;
|
|
24
25
|
}
|
package/src/storage/Storage.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Bytes } from "#util/Bytes.js";
|
|
6
7
|
import { ImplementationError, MatterError } from "../MatterError.js";
|
|
7
8
|
import { MaybePromise } from "../util/Promises.js";
|
|
8
9
|
import { SupportedStorageTypes } from "./StringifyTools.js";
|
|
@@ -39,11 +40,7 @@ export abstract class Storage {
|
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
abstract openBlob(contexts: string[], key: string): MaybePromise<Blob>;
|
|
42
|
-
abstract writeBlobFromStream(
|
|
43
|
-
contexts: string[],
|
|
44
|
-
key: string,
|
|
45
|
-
stream: ReadableStream<BufferSource>,
|
|
46
|
-
): MaybePromise<void>;
|
|
43
|
+
abstract writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Bytes>): MaybePromise<void>;
|
|
47
44
|
}
|
|
48
45
|
|
|
49
46
|
/**
|
|
@@ -70,12 +70,12 @@ export class StorageBackendMemory extends Storage implements CloneableStorage {
|
|
|
70
70
|
return new Blob([]);
|
|
71
71
|
}
|
|
72
72
|
if (!Bytes.isBytes(value)) {
|
|
73
|
-
throw new StorageError("Value must be
|
|
73
|
+
throw new StorageError("Value must be Bytes to read as blob stream.");
|
|
74
74
|
}
|
|
75
75
|
return new Blob([Bytes.exclusive(value)]);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
async writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<
|
|
78
|
+
async writeBlobFromStream(contexts: string[], key: string, stream: ReadableStream<Bytes>): Promise<void> {
|
|
79
79
|
this.#assertInitialized();
|
|
80
80
|
const reader = stream.getReader();
|
|
81
81
|
const chunks: Uint8Array[] = [];
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { MatterAggregateError } from "#MatterError.js";
|
|
8
|
+
import { Bytes } from "#util/Bytes.js";
|
|
8
9
|
import { MaybePromise } from "../util/Promises.js";
|
|
9
10
|
import { Storage, StorageError } from "./Storage.js";
|
|
10
11
|
import { SupportedStorageTypes } from "./StringifyTools.js";
|
|
@@ -111,7 +112,7 @@ export class StorageContext implements StorageContextFactory {
|
|
|
111
112
|
return this.storage.openBlob(this.thisContexts, key);
|
|
112
113
|
}
|
|
113
114
|
|
|
114
|
-
writeBlobFromStream(key: string, stream: ReadableStream<
|
|
115
|
+
writeBlobFromStream(key: string, stream: ReadableStream<Bytes>) {
|
|
115
116
|
return this.storage.writeBlobFromStream(this.thisContexts, key, stream);
|
|
116
117
|
}
|
|
117
118
|
}
|