@matter/general 0.16.0-alpha.0-20250930-05e6cc3f8 → 0.16.0-alpha.0-20251003-dc6d5523d
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/MatterError.d.ts +2 -2
- package/dist/cjs/MatterError.d.ts.map +1 -1
- package/dist/cjs/MatterError.js +0 -1
- package/dist/cjs/MatterError.js.map +1 -1
- package/dist/cjs/crypto/Crypto.d.ts +1 -1
- package/dist/cjs/crypto/Crypto.d.ts.map +1 -1
- package/dist/cjs/crypto/Crypto.js.map +1 -1
- package/dist/cjs/crypto/NodeJsStyleCrypto.d.ts +2 -1
- package/dist/cjs/crypto/NodeJsStyleCrypto.d.ts.map +1 -1
- package/dist/cjs/crypto/NodeJsStyleCrypto.js +19 -1
- package/dist/cjs/crypto/NodeJsStyleCrypto.js.map +1 -1
- package/dist/cjs/crypto/StandardCrypto.d.ts +1 -1
- package/dist/cjs/crypto/StandardCrypto.d.ts.map +1 -1
- package/dist/cjs/crypto/StandardCrypto.js +3 -0
- package/dist/cjs/crypto/StandardCrypto.js.map +1 -1
- package/dist/cjs/environment/Environment.d.ts +12 -0
- package/dist/cjs/environment/Environment.d.ts.map +1 -1
- package/dist/cjs/environment/Environment.js +48 -7
- package/dist/cjs/environment/Environment.js.map +1 -1
- package/dist/cjs/environment/Environmental.d.ts +1 -1
- package/dist/cjs/environment/Environmental.d.ts.map +1 -1
- package/dist/cjs/environment/RuntimeService.d.ts +9 -2
- package/dist/cjs/environment/RuntimeService.d.ts.map +1 -1
- package/dist/cjs/environment/RuntimeService.js +10 -1
- package/dist/cjs/environment/RuntimeService.js.map +1 -1
- package/dist/cjs/net/AppAddress.d.ts +46 -0
- package/dist/cjs/net/AppAddress.d.ts.map +1 -0
- package/dist/cjs/net/AppAddress.js +117 -0
- package/dist/cjs/net/AppAddress.js.map +6 -0
- package/dist/cjs/net/Channel.d.ts +2 -2
- package/dist/cjs/net/Channel.d.ts.map +1 -1
- package/dist/cjs/net/{TransportInterface.d.ts → ConnectionlessTransport.d.ts} +9 -8
- package/dist/cjs/net/ConnectionlessTransport.d.ts.map +1 -0
- package/dist/cjs/net/{TransportInterface.js → ConnectionlessTransport.js} +9 -8
- package/dist/cjs/net/ConnectionlessTransport.js.map +6 -0
- package/dist/cjs/net/Network.d.ts +2 -2
- package/dist/cjs/net/Network.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.d.ts +7 -2
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.js +20 -5
- package/dist/cjs/net/ServerAddress.js.map +1 -1
- package/dist/cjs/net/index.d.ts +3 -5
- package/dist/cjs/net/index.d.ts.map +1 -1
- package/dist/cjs/net/index.js +3 -5
- package/dist/cjs/net/index.js.map +1 -1
- package/dist/cjs/net/mock/MockNetwork.d.ts +1 -1
- package/dist/cjs/net/mock/MockNetwork.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/cjs/net/mock/MockUdpChannel.js +1 -1
- package/dist/{esm/net → cjs/net/udp}/UdpChannel.d.ts +3 -3
- package/dist/cjs/net/udp/UdpChannel.d.ts.map +1 -0
- package/dist/cjs/net/{UdpChannel.js.map → udp/UdpChannel.js.map} +1 -1
- package/dist/{esm/net → cjs/net/udp}/UdpInterface.d.ts +9 -10
- package/dist/cjs/net/udp/UdpInterface.d.ts.map +1 -0
- package/dist/cjs/net/{UdpInterface.js → udp/UdpInterface.js} +2 -2
- package/dist/cjs/net/{UdpInterface.js.map → udp/UdpInterface.js.map} +2 -2
- package/dist/{esm/net → cjs/net/udp}/UdpMulticastServer.d.ts +1 -1
- package/dist/cjs/net/udp/UdpMulticastServer.d.ts.map +1 -0
- package/dist/cjs/net/{UdpMulticastServer.js → udp/UdpMulticastServer.js} +5 -5
- package/dist/cjs/net/{UdpMulticastServer.js.map → udp/UdpMulticastServer.js.map} +1 -1
- package/dist/cjs/net/udp/index.d.ts +9 -0
- package/dist/cjs/net/udp/index.d.ts.map +1 -0
- package/dist/cjs/net/udp/index.js +26 -0
- package/dist/cjs/net/udp/index.js.map +6 -0
- package/dist/cjs/time/Duration.d.ts.map +1 -1
- package/dist/cjs/time/Duration.js +4 -1
- package/dist/cjs/time/Duration.js.map +1 -1
- package/dist/esm/MatterError.d.ts +2 -2
- package/dist/esm/MatterError.d.ts.map +1 -1
- package/dist/esm/MatterError.js +0 -1
- package/dist/esm/MatterError.js.map +1 -1
- package/dist/esm/crypto/Crypto.d.ts +1 -1
- package/dist/esm/crypto/Crypto.d.ts.map +1 -1
- package/dist/esm/crypto/Crypto.js.map +1 -1
- package/dist/esm/crypto/NodeJsStyleCrypto.d.ts +2 -1
- package/dist/esm/crypto/NodeJsStyleCrypto.d.ts.map +1 -1
- package/dist/esm/crypto/NodeJsStyleCrypto.js +19 -1
- package/dist/esm/crypto/NodeJsStyleCrypto.js.map +1 -1
- package/dist/esm/crypto/StandardCrypto.d.ts +1 -1
- package/dist/esm/crypto/StandardCrypto.d.ts.map +1 -1
- package/dist/esm/crypto/StandardCrypto.js +4 -1
- package/dist/esm/crypto/StandardCrypto.js.map +1 -1
- package/dist/esm/environment/Environment.d.ts +12 -0
- package/dist/esm/environment/Environment.d.ts.map +1 -1
- package/dist/esm/environment/Environment.js +48 -7
- package/dist/esm/environment/Environment.js.map +1 -1
- package/dist/esm/environment/Environmental.d.ts +1 -1
- package/dist/esm/environment/Environmental.d.ts.map +1 -1
- package/dist/esm/environment/RuntimeService.d.ts +9 -2
- package/dist/esm/environment/RuntimeService.d.ts.map +1 -1
- package/dist/esm/environment/RuntimeService.js +10 -1
- package/dist/esm/environment/RuntimeService.js.map +1 -1
- package/dist/esm/net/AppAddress.d.ts +46 -0
- package/dist/esm/net/AppAddress.d.ts.map +1 -0
- package/dist/esm/net/AppAddress.js +97 -0
- package/dist/esm/net/AppAddress.js.map +6 -0
- package/dist/esm/net/Channel.d.ts +2 -2
- package/dist/esm/net/Channel.d.ts.map +1 -1
- package/dist/esm/net/{TransportInterface.d.ts → ConnectionlessTransport.d.ts} +9 -8
- package/dist/esm/net/ConnectionlessTransport.d.ts.map +1 -0
- package/dist/esm/net/{TransportInterface.js → ConnectionlessTransport.js} +6 -5
- package/dist/esm/net/ConnectionlessTransport.js.map +6 -0
- package/dist/esm/net/Network.d.ts +2 -2
- package/dist/esm/net/Network.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.d.ts +7 -2
- package/dist/esm/net/ServerAddress.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.js +20 -5
- package/dist/esm/net/ServerAddress.js.map +1 -1
- package/dist/esm/net/index.d.ts +3 -5
- package/dist/esm/net/index.d.ts.map +1 -1
- package/dist/esm/net/index.js +3 -5
- package/dist/esm/net/index.js.map +1 -1
- package/dist/esm/net/mock/MockNetwork.d.ts +1 -1
- package/dist/esm/net/mock/MockNetwork.d.ts.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts +1 -1
- package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -1
- package/dist/esm/net/mock/MockUdpChannel.js +1 -1
- package/dist/{cjs/net → esm/net/udp}/UdpChannel.d.ts +3 -3
- package/dist/esm/net/udp/UdpChannel.d.ts.map +1 -0
- package/dist/esm/net/{UdpChannel.js.map → udp/UdpChannel.js.map} +1 -1
- package/dist/{cjs/net → esm/net/udp}/UdpInterface.d.ts +9 -10
- package/dist/esm/net/udp/UdpInterface.d.ts.map +1 -0
- package/dist/esm/net/{UdpInterface.js → udp/UdpInterface.js} +2 -2
- package/dist/esm/net/{UdpInterface.js.map → udp/UdpInterface.js.map} +2 -2
- package/dist/{cjs/net → esm/net/udp}/UdpMulticastServer.d.ts +1 -1
- package/dist/esm/net/udp/UdpMulticastServer.d.ts.map +1 -0
- package/dist/esm/net/{UdpMulticastServer.js → udp/UdpMulticastServer.js} +5 -5
- package/dist/esm/net/{UdpMulticastServer.js.map → udp/UdpMulticastServer.js.map} +1 -1
- package/dist/esm/net/udp/index.d.ts +9 -0
- package/dist/esm/net/udp/index.d.ts.map +1 -0
- package/dist/esm/net/udp/index.js +9 -0
- package/dist/esm/net/udp/index.js.map +6 -0
- package/dist/esm/time/Duration.d.ts.map +1 -1
- package/dist/esm/time/Duration.js +4 -1
- package/dist/esm/time/Duration.js.map +1 -1
- package/package.json +2 -2
- package/src/MatterError.ts +6 -3
- package/src/crypto/Crypto.ts +3 -1
- package/src/crypto/NodeJsStyleCrypto.ts +24 -2
- package/src/crypto/StandardCrypto.ts +5 -2
- package/src/environment/Environment.ts +66 -8
- package/src/environment/Environmental.ts +1 -1
- package/src/environment/RuntimeService.ts +21 -2
- package/src/net/AppAddress.ts +136 -0
- package/src/net/Channel.ts +2 -2
- package/src/net/{TransportInterface.ts → ConnectionlessTransport.ts} +12 -8
- package/src/net/Network.ts +2 -2
- package/src/net/ServerAddress.ts +32 -7
- package/src/net/index.ts +3 -5
- package/src/net/mock/MockNetwork.ts +1 -1
- package/src/net/mock/MockUdpChannel.ts +1 -1
- package/src/net/{UdpChannel.ts → udp/UdpChannel.ts} +3 -3
- package/src/net/{UdpInterface.ts → udp/UdpInterface.ts} +7 -8
- package/src/net/{UdpMulticastServer.ts → udp/UdpMulticastServer.ts} +5 -5
- package/src/net/udp/index.ts +9 -0
- package/src/time/Duration.ts +8 -1
- package/dist/cjs/net/NetInterface.d.ts +0 -25
- package/dist/cjs/net/NetInterface.d.ts.map +0 -1
- package/dist/cjs/net/NetInterface.js +0 -42
- package/dist/cjs/net/NetInterface.js.map +0 -6
- package/dist/cjs/net/TransportInterface.d.ts.map +0 -1
- package/dist/cjs/net/TransportInterface.js.map +0 -6
- package/dist/cjs/net/UdpChannel.d.ts.map +0 -1
- package/dist/cjs/net/UdpInterface.d.ts.map +0 -1
- package/dist/cjs/net/UdpMulticastServer.d.ts.map +0 -1
- package/dist/esm/net/NetInterface.d.ts +0 -25
- package/dist/esm/net/NetInterface.d.ts.map +0 -1
- package/dist/esm/net/NetInterface.js +0 -22
- package/dist/esm/net/NetInterface.js.map +0 -6
- package/dist/esm/net/TransportInterface.d.ts.map +0 -1
- package/dist/esm/net/TransportInterface.js.map +0 -6
- package/dist/esm/net/UdpChannel.d.ts.map +0 -1
- package/dist/esm/net/UdpInterface.d.ts.map +0 -1
- package/dist/esm/net/UdpMulticastServer.d.ts.map +0 -1
- package/src/net/NetInterface.ts +0 -34
- /package/dist/cjs/net/{UdpChannel.js → udp/UdpChannel.js} +0 -0
- /package/dist/esm/net/{UdpChannel.js → udp/UdpChannel.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAKvC,OAAO,EAAE,OAAO,EAA2B,MAAM,eAAe,CAAC;AAKjE,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAsDvB,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS;WA3DhC,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAuC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,IAAI,YAAY,YAEf;IAED,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAiBjF,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C1D,sBAAsB;IAQ9B,KAAK;CAKd"}
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { MatterAggregateError } from "#MatterError.js";
|
|
7
7
|
import { Minutes } from "#time/TimeUnit.js";
|
|
8
|
-
import { Logger } from "
|
|
9
|
-
import { Cache } from "
|
|
10
|
-
import { asError } from "
|
|
11
|
-
import { isIPv4 } from "
|
|
12
|
-
import { NoAddressAvailableError } from "
|
|
8
|
+
import { Logger } from "../../log/Logger.js";
|
|
9
|
+
import { Cache } from "../../util/Cache.js";
|
|
10
|
+
import { asError } from "../../util/Error.js";
|
|
11
|
+
import { isIPv4 } from "../../util/Ip.js";
|
|
12
|
+
import { NoAddressAvailableError } from "../Network.js";
|
|
13
13
|
const logger = Logger.get("UdpMulticastServer");
|
|
14
14
|
class UdpMulticastServer {
|
|
15
15
|
constructor(network, broadcastAddressIpv4, broadcastAddressIpv6, broadcastPort, serverIpv4, serverIpv6, netInterface) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["
|
|
3
|
+
"sources": ["../../../../src/net/udp/UdpMulticastServer.ts"],
|
|
4
4
|
"mappings": "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",
|
|
5
5
|
"names": ["netInterface"]
|
|
6
6
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../../../src/time/Duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAazE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;CAAG;AAE/D,yBAAiB,QAAQ,CAAC;IACtB;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,GAAG,SAAS,EACjD,QAAQ,EAAE,CAAC,GACZ,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"Duration.d.ts","sourceRoot":"","sources":["../../../src/time/Duration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,QAAQ,CAazE;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;CAAG;AAE/D,yBAAiB,QAAQ,CAAC;IACtB;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,YAK3C;IAED;;OAEG;IACH,SAAgB,MAAM,CAAC,CAAC,SAAS,QAAQ,GAAG,SAAS,EACjD,QAAQ,EAAE,CAAC,GACZ,CAAC,SAAS,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAsDnD;IAED;;OAEG;IACH,SAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GA8CX,QAAQ,CAC9B;CACJ"}
|
|
@@ -34,6 +34,9 @@ class DurationFormatError extends UnexpectedDataError {
|
|
|
34
34
|
}
|
|
35
35
|
Duration2.min = min;
|
|
36
36
|
function format(duration) {
|
|
37
|
+
if (duration === void 0) {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
37
40
|
let ms = duration;
|
|
38
41
|
if (typeof ms !== "number" || !Number.isFinite(ms)) {
|
|
39
42
|
return "invalid";
|
|
@@ -116,7 +119,7 @@ class DurationFormatError extends UnexpectedDataError {
|
|
|
116
119
|
Duration2.parse = parse;
|
|
117
120
|
})(Duration || (Duration = {}));
|
|
118
121
|
function toPrecision(number, precision) {
|
|
119
|
-
return number.toPrecision(precision).replace(
|
|
122
|
+
return number.toPrecision(precision).replace(/(\.\d*?[1-9])0+$/, "$1").replace(/\.0+$/, "");
|
|
120
123
|
}
|
|
121
124
|
export {
|
|
122
125
|
Duration,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/time/Duration.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,2BAA2B;AAoB7B,SAAS,SAAsC,QAAqB;AACvE,MAAI,OAAO,WAAW,UAAU;AAC5B,WAAO,SAAS,MAAM,MAAM;AAAA,EAChC;AAEA,MAAI,OAAO,WAAW,UAAU;AAC5B,QAAI,CAAC,OAAO,SAAS,MAAM,GAAG;AAC1B,YAAM,IAAI,oBAAoB,oCAAoC;AAAA,IACtE;AACA,WAAO;AAAA,EACX;AAEA,QAAM,IAAI,oBAAoB,4CAA4C,OAAO,MAAM,GAAG;AAC9F;AAKO,MAAM,4BAA4B,oBAAoB;AAAC;AAAA,CAEvD,CAAUA,cAAV;AAII,WAAS,IAAI,GAAa,GAAa;AAC1C,QAAI,IAAI,GAAG;AACP,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AALO,EAAAA,UAAS;AAUT,WAAS,IAAI,GAAa,GAAa;AAC1C,QAAI,IAAI,GAAG;AACP,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AALO,EAAAA,UAAS;AAUT,WAAS,OACZ,UACiD;AACjD,QAAI,KAAK;AAET,QAAI,OAAO,OAAO,YAAY,CAAC,OAAO,SAAS,EAAE,GAAG;AAChD,aAAO;AAAA,IACX;AAEA,YAAQ,IAAI;AAAA,MACR,KAAK;AACD,eAAO;AAAA,MAEX,KAAK;AACD,eAAO;AAAA,MAEX,KAAK;AACD,eAAO;AAAA,IACf;AAEA,QAAI,KAAK,GAAG;AACR,aAAO,GAAG,YAAY,KAAK,KAAM,CAAC,CAAC;AAAA,IACvC,WAAW,KAAK,KAAM;AAClB,aAAO,GAAG,YAAY,IAAI,CAAC,CAAC;AAAA,IAChC,WAAW,KAAK,KAAO;AACnB,aAAO,GAAG,YAAY,KAAK,KAAM,CAAC,CAAC;AAAA,IACvC;AAEA,UAAM,QAAQ,MAAc;AAE5B,QAAI,KAAK,OAAY;AACjB,YAAM,KAAK,GAAG,KAAK,MAAM,KAAK,KAAU,CAAC,GAAG;AAC5C,YAAM;AAAA,IACV;AAEA,UAAM,QAAQ,KAAK,MAAM,KAAK,IAAS;AACvC,QAAI,OAAO;AACP,YAAM,KAAK,GAAG,KAAK,GAAG;AAAA,IAC1B;AACA,UAAM;AAEN,UAAM,UAAU,KAAK,MAAM,KAAK,GAAM;AACtC,QAAI,SAAS;AACT,YAAM,KAAK,GAAG,OAAO,GAAG;AAAA,IAC5B;AACA,UAAM;AAEN,UAAM,UAAU,KAAK,MAAM,KAAK,GAAK;AACrC,QAAI,SAAS;AACT,YAAM,KAAK,GAAG,OAAO,GAAG;AAAA,IAC5B;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACzB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["Duration"]
|
|
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-20251003-dc6d5523d",
|
|
4
4
|
"description": "Non-Matter support for Matter.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@noble/curves": "^2.0.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@matter/testing": "0.16.0-alpha.0-
|
|
39
|
+
"@matter/testing": "0.16.0-alpha.0-20251003-dc6d5523d"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
package/src/MatterError.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { MaybePromise } from "#util/Promises.js";
|
|
7
8
|
import { decamelize } from "#util/String.js";
|
|
8
9
|
import { errorOf } from "./util/Error.js";
|
|
9
10
|
|
|
@@ -232,16 +233,18 @@ export class MatterAggregateError extends AggregateError {
|
|
|
232
233
|
/**
|
|
233
234
|
* Wait for all promises to settle and throw an error if any of them reject as MatterAggregateError
|
|
234
235
|
* (or extended class). Promise results are not returned.
|
|
235
|
-
* TODO: Enhance the types between call and result to be better unwrapped
|
|
236
236
|
*/
|
|
237
|
-
static async allSettled
|
|
237
|
+
static async allSettled<T = unknown>(
|
|
238
|
+
promises: Iterable<MaybePromise<T>>,
|
|
239
|
+
message = "Errors happened",
|
|
240
|
+
): Promise<T[]> {
|
|
238
241
|
const results = await Promise.allSettled(promises);
|
|
239
242
|
const errors = results.filter(result => result.status === "rejected").map(result => result.reason);
|
|
240
243
|
|
|
241
244
|
if (errors.length) {
|
|
242
245
|
throw new this(errors, message);
|
|
243
246
|
}
|
|
244
|
-
return (results as PromiseFulfilledResult<
|
|
247
|
+
return (results as PromiseFulfilledResult<T>[]).map(result => result.value);
|
|
245
248
|
}
|
|
246
249
|
}
|
|
247
250
|
|
package/src/crypto/Crypto.ts
CHANGED
|
@@ -65,7 +65,9 @@ export abstract class Crypto {
|
|
|
65
65
|
/**
|
|
66
66
|
* Compute the SHA-256 hash of a buffer.
|
|
67
67
|
*/
|
|
68
|
-
abstract computeSha256(
|
|
68
|
+
abstract computeSha256(
|
|
69
|
+
data: Bytes | Bytes[] | ReadableStreamDefaultReader<Bytes> | AsyncIterator<Bytes>,
|
|
70
|
+
): MaybePromise<Bytes>;
|
|
69
71
|
|
|
70
72
|
/**
|
|
71
73
|
* Create a key from a secret using PBKDF2.
|
|
@@ -4,8 +4,10 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { ImplementationError } from "#MatterError.js";
|
|
7
8
|
import { Bytes } from "#util/Bytes.js";
|
|
8
9
|
import { asError } from "#util/Error.js";
|
|
10
|
+
import { MaybePromise } from "#util/Promises.js";
|
|
9
11
|
import { Identity } from "#util/Type.js";
|
|
10
12
|
import {
|
|
11
13
|
Crypto,
|
|
@@ -104,12 +106,32 @@ export class NodeJsStyleCrypto extends Crypto {
|
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
|
|
107
|
-
|
|
109
|
+
async #hashAsyncIteratorData(hasher: NodeJsCryptoApi.Hash, iteratorFunc: () => Promise<IteratorResult<Bytes>>) {
|
|
110
|
+
while (true) {
|
|
111
|
+
const { value, done } = await iteratorFunc();
|
|
112
|
+
if (value === undefined || done) break;
|
|
113
|
+
hasher.update(Bytes.of(value));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
computeSha256(
|
|
118
|
+
data: Bytes | Bytes[] | ReadableStreamDefaultReader<Bytes> | AsyncIterator<Bytes>,
|
|
119
|
+
): MaybePromise<Bytes> {
|
|
108
120
|
const hasher = this.#crypto.createHash(CRYPTO_HASH_ALGORITHM);
|
|
109
121
|
if (Array.isArray(data)) {
|
|
110
122
|
data.forEach(chunk => hasher.update(Bytes.of(chunk)));
|
|
111
|
-
} else {
|
|
123
|
+
} else if (Bytes.isBytes(data)) {
|
|
112
124
|
hasher.update(Bytes.of(data));
|
|
125
|
+
} else {
|
|
126
|
+
let iteratorFunc: () => Promise<IteratorResult<Bytes>>;
|
|
127
|
+
if ("read" in data && typeof data.read === "function") {
|
|
128
|
+
iteratorFunc = data.read.bind(data);
|
|
129
|
+
} else if ("next" in data && typeof data.next === "function") {
|
|
130
|
+
iteratorFunc = data.next.bind(data);
|
|
131
|
+
} else {
|
|
132
|
+
throw new ImplementationError("Invalid data type for computeSha256");
|
|
133
|
+
}
|
|
134
|
+
return this.#hashAsyncIteratorData(hasher, iteratorFunc).then(() => Bytes.of(hasher.digest()));
|
|
113
135
|
}
|
|
114
136
|
return Bytes.of(hasher.digest());
|
|
115
137
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { DerBigUint, DerCodec, DerError } from "#codec/DerCodec.js";
|
|
9
9
|
import { Environment } from "#environment/Environment.js";
|
|
10
|
-
import { ImplementationError } from "#MatterError.js";
|
|
10
|
+
import { ImplementationError, NotImplementedError } from "#MatterError.js";
|
|
11
11
|
import { Bytes } from "#util/Bytes.js";
|
|
12
12
|
import { MaybePromise } from "#util/Promises.js";
|
|
13
13
|
import { describeList } from "#util/String.js";
|
|
@@ -96,10 +96,13 @@ export class StandardCrypto extends Crypto {
|
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
computeSha256(buffer: Bytes | Bytes[]) {
|
|
99
|
+
computeSha256(buffer: Bytes | Bytes[] | ReadableStreamDefaultReader<Bytes> | AsyncIterator<Bytes>) {
|
|
100
100
|
if (Array.isArray(buffer)) {
|
|
101
101
|
buffer = Bytes.concat(...buffer);
|
|
102
102
|
}
|
|
103
|
+
if (!Bytes.isBytes(buffer)) {
|
|
104
|
+
throw new NotImplementedError("Streamed SHA-256 computation is not supported in StandardCrypto");
|
|
105
|
+
}
|
|
103
106
|
return this.#subtle.digest("SHA-256", Bytes.exclusive(buffer));
|
|
104
107
|
}
|
|
105
108
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { InternalError } from "#MatterError.js";
|
|
7
8
|
import { Instant } from "#time/TimeUnit.js";
|
|
8
9
|
import { MaybePromise } from "#util/Promises.js";
|
|
9
10
|
import { DiagnosticSource } from "../log/DiagnosticSource.js";
|
|
@@ -57,20 +58,39 @@ export class Environment {
|
|
|
57
58
|
return mine !== undefined || (this.#parent?.has(type) ?? false);
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Determine if an environmental services is owned by this environment (not an ancestor).
|
|
63
|
+
*/
|
|
64
|
+
owns(type: abstract new (...args: any[]) => any): boolean {
|
|
65
|
+
return !!this.#services?.get(type);
|
|
66
|
+
}
|
|
67
|
+
|
|
60
68
|
/**
|
|
61
69
|
* Access an environmental service.
|
|
62
70
|
*/
|
|
63
71
|
get<T extends object>(type: abstract new (...args: any[]) => T): T {
|
|
64
|
-
|
|
72
|
+
const mine = this.#services?.get(type);
|
|
65
73
|
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
74
|
+
if (mine !== undefined && mine !== null) {
|
|
75
|
+
return mine as T;
|
|
68
76
|
}
|
|
69
77
|
|
|
70
|
-
|
|
78
|
+
// When null then we do not have it and also do not want to inherit from parent
|
|
79
|
+
if (mine === undefined) {
|
|
80
|
+
let instance = this.#parent?.maybeGet(type);
|
|
81
|
+
if (instance !== undefined && instance !== null) {
|
|
82
|
+
// Parent has it, use it
|
|
83
|
+
return instance;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ... otherwise try to create it
|
|
71
87
|
if ((type as Environmental.Factory<T>)[Environmental.create]) {
|
|
72
|
-
|
|
73
|
-
|
|
88
|
+
instance = (type as any)[Environmental.create](this) as T;
|
|
89
|
+
if (!(instance instanceof type)) {
|
|
90
|
+
throw new InternalError(`Service creation did not produce instance of ${type.name}`);
|
|
91
|
+
}
|
|
92
|
+
this.set(type, instance);
|
|
93
|
+
return instance;
|
|
74
94
|
}
|
|
75
95
|
}
|
|
76
96
|
|
|
@@ -113,8 +133,17 @@ export class Environment {
|
|
|
113
133
|
* @param type the class of the service to block
|
|
114
134
|
*/
|
|
115
135
|
block(type: abstract new (...args: any[]) => any) {
|
|
116
|
-
|
|
117
|
-
|
|
136
|
+
const instance = this.#services?.get(type);
|
|
137
|
+
|
|
138
|
+
if (instance !== undefined && instance !== null) {
|
|
139
|
+
this.#services?.delete(type);
|
|
140
|
+
|
|
141
|
+
this.#deleted.emit(type, instance);
|
|
142
|
+
|
|
143
|
+
const serviceEvents = this.#serviceEvents.get(type);
|
|
144
|
+
if (serviceEvents) {
|
|
145
|
+
serviceEvents.deleted.emit(instance);
|
|
146
|
+
}
|
|
118
147
|
}
|
|
119
148
|
|
|
120
149
|
this.#services?.set(type, null);
|
|
@@ -205,6 +234,35 @@ export class Environment {
|
|
|
205
234
|
return events as Environmental.ServiceEvents<T>;
|
|
206
235
|
}
|
|
207
236
|
|
|
237
|
+
/**
|
|
238
|
+
* Apply functions to a specific service type automatically.
|
|
239
|
+
*
|
|
240
|
+
* The environment invokes {@link added} immediately if the service is currently present. It then invokes
|
|
241
|
+
* {@link added} in the future if the service is added or replaced and/or {@link deleted} if the service is replaced
|
|
242
|
+
* or deleted.
|
|
243
|
+
*/
|
|
244
|
+
applyTo<T extends Environmental.Factory<any>>(
|
|
245
|
+
type: T,
|
|
246
|
+
added?: (env: Environment, service: T) => MaybePromise<void>,
|
|
247
|
+
deleted?: (env: Environment, service: T) => MaybePromise<void>,
|
|
248
|
+
) {
|
|
249
|
+
const events = this.eventsFor(type);
|
|
250
|
+
|
|
251
|
+
if (added) {
|
|
252
|
+
const existing = this.maybeGet(type);
|
|
253
|
+
|
|
254
|
+
if (existing) {
|
|
255
|
+
added(this, existing);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
events.added.on(service => this.runtime.add(() => added(this, service)));
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (deleted) {
|
|
262
|
+
events.deleted.on(service => this.runtime.add(() => deleted(this, service)));
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
208
266
|
/**
|
|
209
267
|
* The default environment.
|
|
210
268
|
*
|
|
@@ -27,7 +27,7 @@ export namespace Environmental {
|
|
|
27
27
|
*
|
|
28
28
|
* A "factory" is just a class with a static {@link create} method that performs instantiation.
|
|
29
29
|
*/
|
|
30
|
-
export interface Factory<T extends object> {
|
|
30
|
+
export interface Factory<T extends object = object> {
|
|
31
31
|
new (...args: any[]): T;
|
|
32
32
|
|
|
33
33
|
/**
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { asError } from "#util/Error.js";
|
|
7
8
|
import { Diagnostic } from "../log/Diagnostic.js";
|
|
8
9
|
import { DiagnosticSource } from "../log/DiagnosticSource.js";
|
|
9
10
|
import { Logger } from "../log/Logger.js";
|
|
@@ -36,7 +37,7 @@ export class RuntimeService implements Multiplex {
|
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
/**
|
|
39
|
-
* Add a {@link Worker}.
|
|
40
|
+
* Add a {@link Worker}, either directly or by invoking an {@link Initiator}.
|
|
40
41
|
*
|
|
41
42
|
* The runtime considers itself "active" if there are one or more workers installed.
|
|
42
43
|
*
|
|
@@ -46,11 +47,20 @@ export class RuntimeService implements Multiplex {
|
|
|
46
47
|
* Once added, the {@link worker} is owned by the RuntimeService until closed, resolved or removed via
|
|
47
48
|
* {@link delete}.
|
|
48
49
|
*/
|
|
49
|
-
add(worker: RuntimeService.
|
|
50
|
+
add(worker: RuntimeService.NewWorker) {
|
|
50
51
|
if (!worker) {
|
|
51
52
|
return;
|
|
52
53
|
}
|
|
53
54
|
|
|
55
|
+
if (typeof worker === "function") {
|
|
56
|
+
try {
|
|
57
|
+
this.add(worker(this.#env));
|
|
58
|
+
} catch (e) {
|
|
59
|
+
this.#crash(asError(e));
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
54
64
|
if (this.#workers.has(worker)) {
|
|
55
65
|
return;
|
|
56
66
|
}
|
|
@@ -303,4 +313,13 @@ export namespace RuntimeService {
|
|
|
303
313
|
*/
|
|
304
314
|
[label]?: unknown;
|
|
305
315
|
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* A function that initiates work.
|
|
319
|
+
*/
|
|
320
|
+
export interface Initiator {
|
|
321
|
+
(env: Environment): NewWorker;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export type NewWorker = Worker | Initiator | void;
|
|
306
325
|
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { Diagnostic } from "#log/Diagnostic.js";
|
|
8
|
+
import { NetworkError } from "./Network.js";
|
|
9
|
+
|
|
10
|
+
export class InvalidAppAddress extends NetworkError {}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* An application network address.
|
|
14
|
+
*
|
|
15
|
+
* This is an OSI layer 7 address representable as an object or URL.
|
|
16
|
+
*/
|
|
17
|
+
export class AppAddress extends URL {
|
|
18
|
+
constructor(definition: AppAddress.Definition) {
|
|
19
|
+
if (typeof definition === "object" && !(definition instanceof URL)) {
|
|
20
|
+
let protocol = definition.appProtocol;
|
|
21
|
+
let host;
|
|
22
|
+
if (definition.tls) {
|
|
23
|
+
protocol += "s";
|
|
24
|
+
}
|
|
25
|
+
if (definition.transport.kind === "unix") {
|
|
26
|
+
protocol += "+unix";
|
|
27
|
+
host = encodeURIComponent(definition.transport.path);
|
|
28
|
+
} else {
|
|
29
|
+
host = definition.transport.host;
|
|
30
|
+
if (definition.transport.port) {
|
|
31
|
+
host = `${host}:${definition.transport.port}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const path = definition.path ?? "/";
|
|
35
|
+
definition = `${protocol}://${host}${path}`;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
super(definition);
|
|
39
|
+
} catch (e) {
|
|
40
|
+
if (e instanceof SyntaxError) {
|
|
41
|
+
throw new InvalidAppAddress(`Invalid app address:${e.message}`);
|
|
42
|
+
}
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
get [Diagnostic.value]() {
|
|
48
|
+
return this.toString();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
get appProtocol() {
|
|
52
|
+
return this.protocol.replace(/[:+].*$/, "");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
get isTls() {
|
|
56
|
+
switch (this.appProtocol) {
|
|
57
|
+
case "https":
|
|
58
|
+
case "mqtts":
|
|
59
|
+
case "wss":
|
|
60
|
+
return true;
|
|
61
|
+
|
|
62
|
+
case "mqtt":
|
|
63
|
+
// MQTT over WebSockets over TLS
|
|
64
|
+
return this.protocolModifiers.includes("wss");
|
|
65
|
+
}
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
get protocolModifiers() {
|
|
70
|
+
const segments = this.protocol.replace(/:$/, "").split("+");
|
|
71
|
+
segments.shift();
|
|
72
|
+
return segments;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
get transport(): AppAddress.TransportAddress {
|
|
76
|
+
if (this.protocolModifiers.includes("unix")) {
|
|
77
|
+
return {
|
|
78
|
+
kind: "unix",
|
|
79
|
+
path: decodeURIComponent(this.hostname),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
kind: "ip",
|
|
85
|
+
host: this.hostname,
|
|
86
|
+
port: this.portNum,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
get portNum() {
|
|
91
|
+
if (this.port !== "") {
|
|
92
|
+
return Number(this.port);
|
|
93
|
+
}
|
|
94
|
+
return 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
get isWildcardHost() {
|
|
98
|
+
return this.host === "0.0.0.0" || this.host === "::";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
get isWildcardPort() {
|
|
102
|
+
return this.port === "0";
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static for(definition: AppAddress.Definition) {
|
|
106
|
+
if (definition instanceof AppAddress) {
|
|
107
|
+
return definition;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return new AppAddress(definition);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export namespace AppAddress {
|
|
115
|
+
export type Definition = Object | URL | string;
|
|
116
|
+
|
|
117
|
+
export type TransportAddress = IpTransportAddress | UnixSocketTransportAddress;
|
|
118
|
+
|
|
119
|
+
export interface IpTransportAddress {
|
|
120
|
+
kind: "ip";
|
|
121
|
+
host: string;
|
|
122
|
+
port: number;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export interface UnixSocketTransportAddress {
|
|
126
|
+
kind: "unix";
|
|
127
|
+
path: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface Object {
|
|
131
|
+
appProtocol: string;
|
|
132
|
+
transport: TransportAddress;
|
|
133
|
+
tls?: boolean;
|
|
134
|
+
path?: string;
|
|
135
|
+
}
|
|
136
|
+
}
|
package/src/net/Channel.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { ServerAddressUdp } from "#net/ServerAddress.js";
|
|
7
7
|
import { isObject } from "#util/Type.js";
|
|
8
8
|
|
|
9
9
|
export enum ChannelType {
|
|
@@ -32,7 +32,7 @@ export interface Channel<T> {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export interface IpNetworkChannel<T> extends Channel<T> {
|
|
35
|
-
networkAddress:
|
|
35
|
+
networkAddress: ServerAddressUdp;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export function isIpNetworkChannel<T>(channel: Channel<T>): channel is IpNetworkChannel<T> {
|
|
@@ -9,18 +9,19 @@ import { Environmental } from "#environment/Environmental.js";
|
|
|
9
9
|
import { Bytes } from "#util/Bytes.js";
|
|
10
10
|
import { BasicSet } from "#util/Set.js";
|
|
11
11
|
import { Channel, ChannelType } from "./Channel.js";
|
|
12
|
+
import { ServerAddress } from "./ServerAddress.js";
|
|
12
13
|
|
|
13
14
|
/**
|
|
14
|
-
* A
|
|
15
|
-
* It cannot open new connections.
|
|
15
|
+
* A local network endpoint associated with a specific {@link ServerAddress} for a connectionless protocol.
|
|
16
16
|
*/
|
|
17
|
-
export interface
|
|
18
|
-
onData(listener: (socket: Channel<Bytes>, data: Bytes) => void):
|
|
17
|
+
export interface ConnectionlessTransport {
|
|
18
|
+
onData(listener: (socket: Channel<Bytes>, data: Bytes) => void): ConnectionlessTransport.Listener;
|
|
19
19
|
close(): Promise<void>;
|
|
20
20
|
supports(type: ChannelType, address?: string): boolean;
|
|
21
|
+
openChannel(address: ServerAddress): Promise<Channel<Bytes>>;
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
export namespace
|
|
24
|
+
export namespace ConnectionlessTransport {
|
|
24
25
|
export interface Listener {
|
|
25
26
|
close(): Promise<void>;
|
|
26
27
|
}
|
|
@@ -29,14 +30,16 @@ export namespace TransportInterface {
|
|
|
29
30
|
/**
|
|
30
31
|
* A collection of {@link TransportInterfaces} managed as a unit.
|
|
31
32
|
*/
|
|
32
|
-
export class
|
|
33
|
+
export class ConnectionlessTransportSet<
|
|
34
|
+
T extends ConnectionlessTransport = ConnectionlessTransport,
|
|
35
|
+
> extends BasicSet<T> {
|
|
33
36
|
constructor(...initialInterfaces: T[]) {
|
|
34
37
|
super(...initialInterfaces);
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
static [Environmental.create](env: Environment) {
|
|
38
|
-
const instance = new
|
|
39
|
-
env.set(
|
|
41
|
+
const instance = new ConnectionlessTransportSet();
|
|
42
|
+
env.set(ConnectionlessTransportSet, instance);
|
|
40
43
|
return instance;
|
|
41
44
|
}
|
|
42
45
|
|
|
@@ -47,6 +50,7 @@ export class TransportInterfaceSet<T extends TransportInterface = TransportInter
|
|
|
47
50
|
for (const transportInterface of this) {
|
|
48
51
|
await transportInterface.close();
|
|
49
52
|
}
|
|
53
|
+
this.clear();
|
|
50
54
|
}
|
|
51
55
|
|
|
52
56
|
/**
|
package/src/net/Network.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { MatterError } from "../MatterError.js";
|
|
8
|
-
import { MaybePromise } from "../util/Promises.js";
|
|
9
|
-
import { UdpChannel, UdpChannelOptions } from "./UdpChannel.js";
|
|
8
|
+
import type { MaybePromise } from "../util/Promises.js";
|
|
9
|
+
import type { UdpChannel, UdpChannelOptions } from "./udp/UdpChannel.js";
|
|
10
10
|
|
|
11
11
|
export class NetworkError extends MatterError {}
|
|
12
12
|
|