@matter/general 0.16.8-alpha.0-20260123-dff2cae52 → 0.16.8-alpha.0-20260127-65e1b40e2
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/net/ServerAddress.d.ts.map +1 -1
- package/dist/cjs/net/ServerAddress.js +2 -1
- package/dist/cjs/net/ServerAddress.js.map +1 -1
- package/dist/cjs/net/dns-sd/DnssdName.d.ts +56 -0
- package/dist/cjs/net/dns-sd/DnssdName.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/DnssdName.js +193 -0
- package/dist/cjs/net/dns-sd/DnssdName.js.map +6 -0
- package/dist/cjs/net/dns-sd/DnssdNames.d.ts +77 -0
- package/dist/cjs/net/dns-sd/DnssdNames.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/DnssdNames.js +238 -0
- package/dist/cjs/net/dns-sd/DnssdNames.js.map +6 -0
- package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts +80 -0
- package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/DnssdSolicitor.js +212 -0
- package/dist/cjs/net/dns-sd/DnssdSolicitor.js.map +6 -0
- package/dist/cjs/net/dns-sd/IpService.d.ts +73 -0
- package/dist/cjs/net/dns-sd/IpService.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/IpService.js +329 -0
- package/dist/cjs/net/dns-sd/IpService.js.map +6 -0
- package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts +16 -0
- package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/IpServiceResolution.js +162 -0
- package/dist/cjs/net/dns-sd/IpServiceResolution.js.map +6 -0
- package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts +58 -0
- package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
- package/dist/cjs/net/dns-sd/IpServiceStatus.js +191 -0
- package/dist/cjs/net/dns-sd/IpServiceStatus.js.map +6 -0
- package/dist/cjs/net/dns-sd/index.d.ts +6 -0
- package/dist/cjs/net/dns-sd/index.d.ts.map +1 -1
- package/dist/cjs/net/dns-sd/index.js +6 -0
- package/dist/cjs/net/dns-sd/index.js.map +1 -1
- package/dist/cjs/net/udp/UdpInterface.js +1 -1
- package/dist/cjs/net/udp/UdpInterface.js.map +1 -1
- package/dist/cjs/util/AsyncIterator.d.ts +21 -0
- package/dist/cjs/util/AsyncIterator.d.ts.map +1 -0
- package/dist/cjs/util/AsyncIterator.js +71 -0
- package/dist/cjs/util/AsyncIterator.js.map +6 -0
- package/dist/cjs/util/index.d.ts +1 -0
- package/dist/cjs/util/index.d.ts.map +1 -1
- package/dist/cjs/util/index.js +1 -0
- package/dist/cjs/util/index.js.map +1 -1
- package/dist/esm/net/ServerAddress.d.ts.map +1 -1
- package/dist/esm/net/ServerAddress.js +2 -1
- package/dist/esm/net/ServerAddress.js.map +1 -1
- package/dist/esm/net/dns-sd/DnssdName.d.ts +56 -0
- package/dist/esm/net/dns-sd/DnssdName.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/DnssdName.js +173 -0
- package/dist/esm/net/dns-sd/DnssdName.js.map +6 -0
- package/dist/esm/net/dns-sd/DnssdNames.d.ts +77 -0
- package/dist/esm/net/dns-sd/DnssdNames.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/DnssdNames.js +218 -0
- package/dist/esm/net/dns-sd/DnssdNames.js.map +6 -0
- package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts +80 -0
- package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/DnssdSolicitor.js +192 -0
- package/dist/esm/net/dns-sd/DnssdSolicitor.js.map +6 -0
- package/dist/esm/net/dns-sd/IpService.d.ts +73 -0
- package/dist/esm/net/dns-sd/IpService.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/IpService.js +309 -0
- package/dist/esm/net/dns-sd/IpService.js.map +6 -0
- package/dist/esm/net/dns-sd/IpServiceResolution.d.ts +16 -0
- package/dist/esm/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/IpServiceResolution.js +142 -0
- package/dist/esm/net/dns-sd/IpServiceResolution.js.map +6 -0
- package/dist/esm/net/dns-sd/IpServiceStatus.d.ts +58 -0
- package/dist/esm/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
- package/dist/esm/net/dns-sd/IpServiceStatus.js +171 -0
- package/dist/esm/net/dns-sd/IpServiceStatus.js.map +6 -0
- package/dist/esm/net/dns-sd/index.d.ts +6 -0
- package/dist/esm/net/dns-sd/index.d.ts.map +1 -1
- package/dist/esm/net/dns-sd/index.js +6 -0
- package/dist/esm/net/dns-sd/index.js.map +1 -1
- package/dist/esm/net/udp/UdpInterface.js +1 -1
- package/dist/esm/net/udp/UdpInterface.js.map +1 -1
- package/dist/esm/util/AsyncIterator.d.ts +21 -0
- package/dist/esm/util/AsyncIterator.d.ts.map +1 -0
- package/dist/esm/util/AsyncIterator.js +51 -0
- package/dist/esm/util/AsyncIterator.js.map +6 -0
- package/dist/esm/util/index.d.ts +1 -0
- package/dist/esm/util/index.d.ts.map +1 -1
- package/dist/esm/util/index.js +1 -0
- package/dist/esm/util/index.js.map +1 -1
- package/package.json +2 -2
- package/src/net/ServerAddress.ts +2 -1
- package/src/net/dns-sd/DnssdName.ts +252 -0
- package/src/net/dns-sd/DnssdNames.ts +208 -0
- package/src/net/dns-sd/DnssdSolicitor.ts +231 -0
- package/src/net/dns-sd/IpService.ts +346 -0
- package/src/net/dns-sd/IpServiceResolution.ts +134 -0
- package/src/net/dns-sd/IpServiceStatus.ts +212 -0
- package/src/net/dns-sd/index.ts +6 -0
- package/src/net/udp/UdpInterface.ts +1 -1
- package/src/util/AsyncIterator.ts +70 -0
- package/src/util/index.ts +1 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
5
|
+
var __using = (stack, value, async) => {
|
|
6
|
+
if (value != null) {
|
|
7
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
8
|
+
var dispose, inner;
|
|
9
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
10
|
+
if (dispose === void 0) {
|
|
11
|
+
dispose = value[__knownSymbol("dispose")];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
15
|
+
if (inner) dispose = function() {
|
|
16
|
+
try {
|
|
17
|
+
inner.call(this);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
stack.push([async, dispose, value]);
|
|
23
|
+
} else if (async) {
|
|
24
|
+
stack.push([async]);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
var __callDispose = (stack, error, hasError) => {
|
|
29
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
30
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
31
|
+
};
|
|
32
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
33
|
+
var next = (it) => {
|
|
34
|
+
while (it = stack.pop()) {
|
|
35
|
+
try {
|
|
36
|
+
var result = it[1] && it[1].call(it[2]);
|
|
37
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
fail(e);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (hasError) throw error;
|
|
43
|
+
};
|
|
44
|
+
return next();
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* @license
|
|
48
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
49
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
50
|
+
*/
|
|
51
|
+
import { DnsRecordType } from "#codec/DnsCodec.js";
|
|
52
|
+
import { ServerAddressSet } from "#net/ServerAddressSet.js";
|
|
53
|
+
import { Abort } from "#util/Abort.js";
|
|
54
|
+
import { isIPv4, isIPv6 } from "#util/Ip.js";
|
|
55
|
+
import { BasicMultiplex } from "#util/Multiplex.js";
|
|
56
|
+
import { ObserverGroup } from "#util/Observable.js";
|
|
57
|
+
import { BasicSet } from "#util/Set.js";
|
|
58
|
+
async function IpServiceResolution(service, abort, ipv4 = true) {
|
|
59
|
+
var _stack = [];
|
|
60
|
+
try {
|
|
61
|
+
const localAbort = __using(_stack, new Abort({ abort }));
|
|
62
|
+
const workers = __using(_stack, new BasicMultiplex(), true);
|
|
63
|
+
const observers = __using(_stack, new ObserverGroup());
|
|
64
|
+
const hosts = new BasicSet();
|
|
65
|
+
let hostResolvers;
|
|
66
|
+
observers.on(hosts.added, (name) => {
|
|
67
|
+
if ([...name.records].find(
|
|
68
|
+
(record) => record.recordType === DnsRecordType.AAAA || record.recordType === DnsRecordType.A
|
|
69
|
+
)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
if (!hostResolvers) {
|
|
73
|
+
hostResolvers = /* @__PURE__ */ new Map();
|
|
74
|
+
}
|
|
75
|
+
const hostAbort = new Abort({ abort: localAbort });
|
|
76
|
+
hostResolvers.set(name, hostAbort);
|
|
77
|
+
workers.add(
|
|
78
|
+
service.names.solicitor.discover({
|
|
79
|
+
name,
|
|
80
|
+
recordTypes: ipv4 ? [DnsRecordType.A, DnsRecordType.AAAA] : [DnsRecordType.AAAA],
|
|
81
|
+
abort: hostAbort
|
|
82
|
+
}).finally(hostAbort.close.bind(hostAbort))
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
observers.on(hosts.deleted, (name) => {
|
|
86
|
+
const abortHost = hostResolvers?.get(name);
|
|
87
|
+
if (!abortHost) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
hostResolvers?.delete(name);
|
|
91
|
+
abortHost();
|
|
92
|
+
});
|
|
93
|
+
for (const record of service.name.records) {
|
|
94
|
+
if (record.recordType !== DnsRecordType.SRV) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
hosts.add(service.names.get(record.name));
|
|
98
|
+
}
|
|
99
|
+
const existingAddresses = ServerAddressSet(service.addresses);
|
|
100
|
+
observers.on(service.changed, () => {
|
|
101
|
+
for (const address of service.addresses) {
|
|
102
|
+
if (!ipv4 && isIPv4(address.ip)) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (!existingAddresses.has(address) && (ipv4 || isIPv6(address.ip))) {
|
|
106
|
+
localAbort();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const srvs = [...service.name.records].filter((record) => record.recordType === DnsRecordType.SRV);
|
|
110
|
+
const newHostnames = new Set(srvs.map((record) => record.value.target));
|
|
111
|
+
for (const hostname of newHostnames) {
|
|
112
|
+
hosts.add(service.names.get(hostname));
|
|
113
|
+
}
|
|
114
|
+
for (const name of hosts) {
|
|
115
|
+
if (newHostnames.has(name.qname)) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
hosts.delete(name);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
workers.add(
|
|
122
|
+
service.names.solicitor.discover({
|
|
123
|
+
abort: localAbort,
|
|
124
|
+
name: service.name,
|
|
125
|
+
recordTypes: [DnsRecordType.SRV],
|
|
126
|
+
get associatedNames() {
|
|
127
|
+
return hosts;
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
);
|
|
131
|
+
await localAbort;
|
|
132
|
+
} catch (_) {
|
|
133
|
+
var _error = _, _hasError = true;
|
|
134
|
+
} finally {
|
|
135
|
+
var _promise = __callDispose(_stack, _error, _hasError);
|
|
136
|
+
_promise && await _promise;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export {
|
|
140
|
+
IpServiceResolution
|
|
141
|
+
};
|
|
142
|
+
//# sourceMappingURL=IpServiceResolution.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/net/dns-sd/IpServiceResolution.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,aAAa;AACtB,SAAS,QAAQ,cAAc;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AAazB,eAAsB,oBAAoB,SAAoB,OAAoB,OAAO,MAAM;AAC3F;AAAA;AAAA,UAAM,aAAa,oBAAI,MAAM,EAAE,MAAM,CAAC;AACtC,UAAY,UAAU,oBAAI,eAAe,GAAnB;AACtB,UAAM,YAAY,oBAAI,cAAc;AAIpC,UAAM,QAAQ,IAAI,SAAoB;AAGtC,QAAI;AAGJ,cAAU,GAAG,MAAM,OAAO,UAAQ;AAE9B,UACI,CAAC,GAAG,KAAK,OAAO,EAAE;AAAA,QACd,YAAU,OAAO,eAAe,cAAc,QAAQ,OAAO,eAAe,cAAc;AAAA,MAC9F,GACF;AACE;AAAA,MACJ;AAGA,UAAI,CAAC,eAAe;AAChB,wBAAgB,oBAAI,IAAI;AAAA,MAC5B;AACA,YAAM,YAAY,IAAI,MAAM,EAAE,OAAO,WAAW,CAAC;AACjD,oBAAc,IAAI,MAAM,SAAS;AACjC,cAAQ;AAAA,QACJ,QAAQ,MAAM,UACT,SAAS;AAAA,UACN;AAAA,UACA,aAAa,OAAO,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC,cAAc,IAAI;AAAA,UAC/E,OAAO;AAAA,QACX,CAAC,EACA,QAAQ,UAAU,MAAM,KAAK,SAAS,CAAC;AAAA,MAChD;AAAA,IACJ,CAAC;AAGD,cAAU,GAAG,MAAM,SAAS,UAAQ;AAChC,YAAM,YAAY,eAAe,IAAI,IAAI;AACzC,UAAI,CAAC,WAAW;AACZ;AAAA,MACJ;AAEA,qBAAe,OAAO,IAAI;AAC1B,gBAAU;AAAA,IACd,CAAC;AAGD,eAAW,UAAU,QAAQ,KAAK,SAAS;AACvC,UAAI,OAAO,eAAe,cAAc,KAAK;AACzC;AAAA,MACJ;AAEA,YAAM,IAAI,QAAQ,MAAM,IAAI,OAAO,IAAI,CAAC;AAAA,IAC5C;AAGA,UAAM,oBAAoB,iBAAiB,QAAQ,SAAS;AAC5D,cAAU,GAAG,QAAQ,SAAS,MAAM;AAEhC,iBAAW,WAAW,QAAQ,WAAW;AACrC,YAAI,CAAC,QAAQ,OAAO,QAAQ,EAAE,GAAG;AAE7B;AAAA,QACJ;AAEA,YAAI,CAAC,kBAAkB,IAAI,OAAO,MAAM,QAAQ,OAAO,QAAQ,EAAE,IAAI;AAEjE,qBAAW;AAAA,QACf;AAAA,MACJ;AAGA,YAAM,OAAO,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,OAAO,YAAU,OAAO,eAAe,cAAc,GAAG;AAC/F,YAAM,eAAe,IAAI,IAAI,KAAK,IAAI,YAAU,OAAO,MAAM,MAAM,CAAC;AACpE,iBAAW,YAAY,cAAc;AAEjC,cAAM,IAAI,QAAQ,MAAM,IAAI,QAAQ,CAAC;AAAA,MACzC;AACA,iBAAW,QAAQ,OAAO;AACtB,YAAI,aAAa,IAAI,KAAK,KAAK,GAAG;AAC9B;AAAA,QACJ;AAGA,cAAM,OAAO,IAAI;AAAA,MACrB;AAAA,IACJ,CAAC;AAGD,YAAQ;AAAA,MACJ,QAAQ,MAAM,UAAU,SAAS;AAAA,QAC7B,OAAO;AAAA,QACP,MAAM,QAAQ;AAAA,QACd,aAAa,CAAC,cAAc,GAAG;AAAA,QAE/B,IAAI,kBAAkB;AAClB,iBAAO;AAAA,QACX;AAAA,MACJ,CAAC;AAAA,IACL;AAGA,UAAM;AAAA,WA1GN;AAAA;AAAA;AAAA;AAAA;AAAA;AA2GJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Timestamp } from "#time/Timestamp.js";
|
|
7
|
+
import type { IpService } from "./IpService.js";
|
|
8
|
+
/**
|
|
9
|
+
* Tracks status of an {@link IpService}, logs state changes and manages service discovery.
|
|
10
|
+
*/
|
|
11
|
+
export declare class IpServiceStatus {
|
|
12
|
+
#private;
|
|
13
|
+
constructor(service: IpService);
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Is the service actively connecting?
|
|
17
|
+
*
|
|
18
|
+
* This is true so long as a promise passed to {@link connecting} is unresolved.
|
|
19
|
+
*/
|
|
20
|
+
get isConnecting(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Is the service currently reachable?
|
|
23
|
+
*
|
|
24
|
+
* This value is writable. If you set {@link isReachable} to false and {@link isConnecting} is true, the service
|
|
25
|
+
* enters discovery mode and begins active solicitation so long as neither condition changes.
|
|
26
|
+
*
|
|
27
|
+
* The service sets {@link isReachable} to true automatically if:
|
|
28
|
+
*
|
|
29
|
+
* - It discovers a new (previously unknown) address, or
|
|
30
|
+
*
|
|
31
|
+
* - The input promise to {@link connecting} resolves to true
|
|
32
|
+
*
|
|
33
|
+
* The service sets {@link isReachable} to false automatically if the input promise to {@link connecting} resolves
|
|
34
|
+
* to false.
|
|
35
|
+
*/
|
|
36
|
+
get isReachable(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Are we actively performing MDNS discovery for the service?
|
|
39
|
+
*/
|
|
40
|
+
get isResolving(): boolean;
|
|
41
|
+
set isReachable(isReachable: boolean);
|
|
42
|
+
get lastReceiptAt(): Timestamp | undefined;
|
|
43
|
+
set lastReceiptAt(time: Timestamp);
|
|
44
|
+
get connectionInitiatedAt(): Timestamp | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Register a new connection attempt.
|
|
47
|
+
*
|
|
48
|
+
* If {@link result} resolves as true the service is marked as reachable. If {@link result} resolves as false
|
|
49
|
+
* reachability is not modified.
|
|
50
|
+
*
|
|
51
|
+
* If {@link result} throws an error other than {@link AbortedError}, the service is marked as unreachable and if
|
|
52
|
+
* the error logged.
|
|
53
|
+
*
|
|
54
|
+
* {@link isConnecting} will be true until {@link result} resolves.
|
|
55
|
+
*/
|
|
56
|
+
connecting(result: PromiseLike<boolean>): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=IpServiceStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IpServiceStatus.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/IpServiceStatus.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAKhD;;GAEG;AACH,qBAAa,eAAe;;gBASZ,OAAO,EAAE,SAAS;IAIxB,KAAK;IAOX;;;;OAIG;IACH,IAAI,YAAY,YAEf;IAED;;;;;;;;;;;;;;OAcG;IACH,IAAI,WAAW,IAWc,OAAO,CATnC;IAED;;OAEG;IACH,IAAI,WAAW,YAEd;IAED,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAYnC;IAED,IAAI,aAAa,IAAI,SAAS,GAAG,SAAS,CAEzC;IAED,IAAI,aAAa,CAAC,IAAI,EAAE,SAAS,EAEhC;IAED,IAAI,qBAAqB,0BAExB;IAED;;;;;;;;;;OAUG;IACH,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC;CAgG1C"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Diagnostic } from "#log/Diagnostic.js";
|
|
7
|
+
import { Logger } from "#log/Logger.js";
|
|
8
|
+
import { AbortedError } from "#MatterError.js";
|
|
9
|
+
import { ServerAddress } from "#net/ServerAddress.js";
|
|
10
|
+
import { Time } from "#time/Time.js";
|
|
11
|
+
import { Abort } from "#util/Abort.js";
|
|
12
|
+
import { asError } from "#util/Error.js";
|
|
13
|
+
import { BasicSet } from "#util/Set.js";
|
|
14
|
+
import { IpServiceResolution } from "./IpServiceResolution.js";
|
|
15
|
+
const logger = Logger.get("IpServiceStatus");
|
|
16
|
+
class IpServiceStatus {
|
|
17
|
+
#service;
|
|
18
|
+
#isReachable = false;
|
|
19
|
+
#connecting = new BasicSet();
|
|
20
|
+
#resolveAbort;
|
|
21
|
+
#resolving;
|
|
22
|
+
#connectionInitiatedAt;
|
|
23
|
+
#lastReceiptAt;
|
|
24
|
+
constructor(service) {
|
|
25
|
+
this.#service = service;
|
|
26
|
+
}
|
|
27
|
+
async close() {
|
|
28
|
+
this.#stopResolving();
|
|
29
|
+
if (this.#resolving) {
|
|
30
|
+
await this.#resolving;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Is the service actively connecting?
|
|
35
|
+
*
|
|
36
|
+
* This is true so long as a promise passed to {@link connecting} is unresolved.
|
|
37
|
+
*/
|
|
38
|
+
get isConnecting() {
|
|
39
|
+
return this.#connecting.size > 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Is the service currently reachable?
|
|
43
|
+
*
|
|
44
|
+
* This value is writable. If you set {@link isReachable} to false and {@link isConnecting} is true, the service
|
|
45
|
+
* enters discovery mode and begins active solicitation so long as neither condition changes.
|
|
46
|
+
*
|
|
47
|
+
* The service sets {@link isReachable} to true automatically if:
|
|
48
|
+
*
|
|
49
|
+
* - It discovers a new (previously unknown) address, or
|
|
50
|
+
*
|
|
51
|
+
* - The input promise to {@link connecting} resolves to true
|
|
52
|
+
*
|
|
53
|
+
* The service sets {@link isReachable} to false automatically if the input promise to {@link connecting} resolves
|
|
54
|
+
* to false.
|
|
55
|
+
*/
|
|
56
|
+
get isReachable() {
|
|
57
|
+
return this.#isReachable;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Are we actively performing MDNS discovery for the service?
|
|
61
|
+
*/
|
|
62
|
+
get isResolving() {
|
|
63
|
+
return this.#resolving !== void 0;
|
|
64
|
+
}
|
|
65
|
+
set isReachable(isReachable) {
|
|
66
|
+
if (this.#isReachable === isReachable) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.#isReachable = isReachable;
|
|
70
|
+
if (isReachable) {
|
|
71
|
+
this.#maybeStopResolving();
|
|
72
|
+
} else {
|
|
73
|
+
this.#maybeStartResolving();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
get lastReceiptAt() {
|
|
77
|
+
return this.#lastReceiptAt;
|
|
78
|
+
}
|
|
79
|
+
set lastReceiptAt(time) {
|
|
80
|
+
this.#lastReceiptAt = time;
|
|
81
|
+
}
|
|
82
|
+
get connectionInitiatedAt() {
|
|
83
|
+
return this.#connectionInitiatedAt;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Register a new connection attempt.
|
|
87
|
+
*
|
|
88
|
+
* If {@link result} resolves as true the service is marked as reachable. If {@link result} resolves as false
|
|
89
|
+
* reachability is not modified.
|
|
90
|
+
*
|
|
91
|
+
* If {@link result} throws an error other than {@link AbortedError}, the service is marked as unreachable and if
|
|
92
|
+
* the error logged.
|
|
93
|
+
*
|
|
94
|
+
* {@link isConnecting} will be true until {@link result} resolves.
|
|
95
|
+
*/
|
|
96
|
+
connecting(result) {
|
|
97
|
+
logger.debug(this.#service.via, "Connecting");
|
|
98
|
+
result.then(
|
|
99
|
+
(returned) => {
|
|
100
|
+
this.#connecting.delete(result);
|
|
101
|
+
if (!this.#connecting.size) {
|
|
102
|
+
this.#connectionInitiatedAt = void 0;
|
|
103
|
+
}
|
|
104
|
+
if (returned) {
|
|
105
|
+
this.isReachable = true;
|
|
106
|
+
logger.info(this.#service.via, "Connected");
|
|
107
|
+
} else {
|
|
108
|
+
logger.debug(this.#service.via, "Connect attempt aborted");
|
|
109
|
+
}
|
|
110
|
+
this.#maybeStopResolving();
|
|
111
|
+
},
|
|
112
|
+
(error) => {
|
|
113
|
+
this.#connecting.delete(result);
|
|
114
|
+
if (!(error instanceof AbortedError)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
logger.error(this.#service.via, "Connection error:", asError(error));
|
|
118
|
+
this.#isReachable = false;
|
|
119
|
+
this.#maybeStartResolving();
|
|
120
|
+
}
|
|
121
|
+
);
|
|
122
|
+
this.#connectionInitiatedAt = Time.nowMs;
|
|
123
|
+
this.#connecting.add(result);
|
|
124
|
+
this.#maybeStartResolving();
|
|
125
|
+
}
|
|
126
|
+
#maybeStartResolving() {
|
|
127
|
+
if (this.#isReachable || !this.isConnecting || this.#resolveAbort) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const numAddresses = this.#service.addresses.size;
|
|
131
|
+
let why;
|
|
132
|
+
switch (numAddresses) {
|
|
133
|
+
case 0:
|
|
134
|
+
why = "need address";
|
|
135
|
+
break;
|
|
136
|
+
case 1:
|
|
137
|
+
why = "address is unreachable";
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
why = `${numAddresses} known addresses are unreachable`;
|
|
141
|
+
}
|
|
142
|
+
logger.info(this.#service.via, "Resolving", Diagnostic.weak(`(${why})`));
|
|
143
|
+
this.#resolveAbort = new Abort();
|
|
144
|
+
this.#resolving = IpServiceResolution(this.#service, this.#resolveAbort).finally(() => {
|
|
145
|
+
if (this.#resolveAbort?.aborted === false) {
|
|
146
|
+
const addresses = [...this.#service.addresses].map(ServerAddress.urlFor);
|
|
147
|
+
logger.debug(this.#service.via, `Resolved as ${addresses.join(", ")}`);
|
|
148
|
+
}
|
|
149
|
+
this.#resolveAbort?.close();
|
|
150
|
+
this.#resolveAbort = void 0;
|
|
151
|
+
this.#resolving = void 0;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
#maybeStopResolving() {
|
|
155
|
+
if (!this.#isReachable || this.isConnecting || !this.#resolveAbort) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.#stopResolving();
|
|
159
|
+
}
|
|
160
|
+
#stopResolving() {
|
|
161
|
+
if (!this.#resolveAbort) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this.#resolveAbort();
|
|
165
|
+
logger.debug(this.#service.via, "Stopped resolving");
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export {
|
|
169
|
+
IpServiceStatus
|
|
170
|
+
};
|
|
171
|
+
//# sourceMappingURL=IpServiceStatus.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/net/dns-sd/IpServiceStatus.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -3,5 +3,11 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
export * from "./DnssdName.js";
|
|
7
|
+
export * from "./DnssdNames.js";
|
|
8
|
+
export * from "./DnssdSolicitor.js";
|
|
9
|
+
export * from "./IpService.js";
|
|
10
|
+
export * from "./IpServiceResolution.js";
|
|
11
|
+
export * from "./IpServiceStatus.js";
|
|
6
12
|
export * from "./MdnsSocket.js";
|
|
7
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC"}
|
|
@@ -3,5 +3,11 @@
|
|
|
3
3
|
* Copyright 2022-2026 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
export * from "./DnssdName.js";
|
|
7
|
+
export * from "./DnssdNames.js";
|
|
8
|
+
export * from "./DnssdSolicitor.js";
|
|
9
|
+
export * from "./IpService.js";
|
|
10
|
+
export * from "./IpServiceResolution.js";
|
|
11
|
+
export * from "./IpServiceStatus.js";
|
|
6
12
|
export * from "./MdnsSocket.js";
|
|
7
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -65,7 +65,7 @@ class UdpConnection {
|
|
|
65
65
|
return this.#server.send(this.#peerAddress, this.#peerPort, data);
|
|
66
66
|
}
|
|
67
67
|
get name() {
|
|
68
|
-
return `${this.type}
|
|
68
|
+
return `${this.type}://${this.#peerAddress.includes(":") ? `[${this.#peerAddress}]` : this.#peerAddress}:${this.#peerPort}`;
|
|
69
69
|
}
|
|
70
70
|
get networkAddress() {
|
|
71
71
|
return { type: "udp", ip: this.#peerAddress, port: this.#peerPort };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/net/udp/UdpInterface.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,mBAAqC;AAEvD,SAAkB,oBAAoB;AAK/B,MAAM,aAAgD;AAAA,EAChD;AAAA,EAET,aAAa,OAAO,SAAkB,MAAuB,MAAe,MAAe,cAAuB;AAC9G,WAAO,IAAI;AAAA,MACP,MAAM,QAAQ,iBAAiB,EAAE,eAAe,MAAM,MAAM,cAAc,kBAAkB,KAAK,CAAC;AAAA,IACtG;AAAA,EACJ;AAAA,EAEA,YAAY,QAAoB;AAC5B,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,IAAc,SAAS;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAS,MAAmB,SAAiB;AACzC,WAAO,KAAK,QAAQ,SAAS,MAAM,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,YAAY,SAAwB;AACtC,QAAI,QAAQ,SAAS,OAAO;AACxB,YAAM,IAAI,aAAa,4BAA4B,QAAQ,IAAI,EAAE;AAAA,IACrE;AACA,UAAM,EAAE,IAAI,KAAK,IAAI;AACrB,WAAO,QAAQ,QAAQ,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAAoG;AACvG,WAAO,KAAK,QAAQ;AAAA,MAAO,CAAC,eAAe,UAAU,UAAU,SAC3D,SAAS,IAAI,cAAc,KAAK,SAAS,UAAU,QAAQ,GAAG,IAAI;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,QAAQ;AACJ,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiB;AAC3B,WAAO,KAAK,QAAQ,cAAc,OAAO;AAAA,EAC7C;AAAA,EAEA,eAAe,SAAiB;AAC5B,WAAO,KAAK,QAAQ,eAAe,OAAO;AAAA,EAC9C;AACJ;AAEO,MAAM,cAAiD;AAAA,EACjD,aAAa;AAAA,EACb,wBAAwB;AAAA,EACxB,OAAO,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAoB,aAAqB,UAAkB;AACnE,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,KAAK,MAAa;AACd,WAAO,KAAK,QAAQ,KAAK,KAAK,cAAc,KAAK,WAAW,IAAI;AAAA,EACpE;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,GAAG,KAAK,IAAI,
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,mBAAqC;AAEvD,SAAkB,oBAAoB;AAK/B,MAAM,aAAgD;AAAA,EAChD;AAAA,EAET,aAAa,OAAO,SAAkB,MAAuB,MAAe,MAAe,cAAuB;AAC9G,WAAO,IAAI;AAAA,MACP,MAAM,QAAQ,iBAAiB,EAAE,eAAe,MAAM,MAAM,cAAc,kBAAkB,KAAK,CAAC;AAAA,IACtG;AAAA,EACJ;AAAA,EAEA,YAAY,QAAoB;AAC5B,SAAK,UAAU;AAAA,EACnB;AAAA,EAEA,IAAc,SAAS;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,SAAS,MAAmB,SAAiB;AACzC,WAAO,KAAK,QAAQ,SAAS,MAAM,OAAO;AAAA,EAC9C;AAAA,EAEA,MAAM,YAAY,SAAwB;AACtC,QAAI,QAAQ,SAAS,OAAO;AACxB,YAAM,IAAI,aAAa,4BAA4B,QAAQ,IAAI,EAAE;AAAA,IACrE;AACA,UAAM,EAAE,IAAI,KAAK,IAAI;AACrB,WAAO,QAAQ,QAAQ,IAAI,cAAc,KAAK,SAAS,IAAI,IAAI,CAAC;AAAA,EACpE;AAAA,EAEA,OAAO,UAAoG;AACvG,WAAO,KAAK,QAAQ;AAAA,MAAO,CAAC,eAAe,UAAU,UAAU,SAC3D,SAAS,IAAI,cAAc,KAAK,SAAS,UAAU,QAAQ,GAAG,IAAI;AAAA,IACtE;AAAA,EACJ;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,QAAQ;AACJ,WAAO,KAAK,QAAQ,MAAM;AAAA,EAC9B;AAAA,EAEA,cAAc,SAAiB;AAC3B,WAAO,KAAK,QAAQ,cAAc,OAAO;AAAA,EAC7C;AAAA,EAEA,eAAe,SAAiB;AAC5B,WAAO,KAAK,QAAQ,eAAe,OAAO;AAAA,EAC9C;AACJ;AAEO,MAAM,cAAiD;AAAA,EACjD,aAAa;AAAA,EACb,wBAAwB;AAAA,EACxB,OAAO,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAoB,aAAqB,UAAkB;AACnE,SAAK,UAAU;AACf,SAAK,eAAe;AACpB,SAAK,YAAY;AAAA,EACrB;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO,KAAK,QAAQ;AAAA,EACxB;AAAA,EAEA,KAAK,MAAa;AACd,WAAO,KAAK,QAAQ,KAAK,KAAK,cAAc,KAAK,WAAW,IAAI;AAAA,EACpE;AAAA,EAEA,IAAI,OAAO;AACP,WAAO,GAAG,KAAK,IAAI,MAAM,KAAK,aAAa,SAAS,GAAG,IAAI,IAAI,KAAK,YAAY,MAAM,KAAK,YAAY,IAAI,KAAK,SAAS;AAAA,EAC7H;AAAA,EAEA,IAAI,iBAAmC;AACnC,WAAO,EAAE,MAAM,OAAO,IAAI,KAAK,cAAc,MAAM,KAAK,UAAU;AAAA,EACtE;AAAA,EAEA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Utilities for working with async iterators.
|
|
8
|
+
*/
|
|
9
|
+
export declare namespace AsyncIterator {
|
|
10
|
+
/**
|
|
11
|
+
* Merge multiple async iterators, yielding results as they become available from any iterator.
|
|
12
|
+
*
|
|
13
|
+
* Results are yielded in the order they resolve, not the order of iterators.
|
|
14
|
+
* Errors from individual iterators are collected and thrown as an aggregate error after all iterators complete.
|
|
15
|
+
*
|
|
16
|
+
* @param iterators The async iterables to merge
|
|
17
|
+
* @param errorMessage Optional message for the aggregate error if any iterators fail
|
|
18
|
+
*/
|
|
19
|
+
function merge<T>(iterators: AsyncIterable<T>[], errorMessage?: string): AsyncGenerator<T>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=AsyncIterator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncIterator.d.ts","sourceRoot":"","sources":["../../../src/util/AsyncIterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,yBAAiB,aAAa,CAAC;IAC3B;;;;;;;;OAQG;IACH,SAAuB,KAAK,CAAC,CAAC,EAC1B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC7B,YAAY,SAAuC,GACpD,cAAc,CAAC,CAAC,CAAC,CA8CnB;CACJ"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2026 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
var AsyncIterator;
|
|
7
|
+
((AsyncIterator2) => {
|
|
8
|
+
async function* merge(iterators, errorMessage = "One or more async iterators failed") {
|
|
9
|
+
const asyncIterators = iterators.map((iter) => iter[Symbol.asyncIterator]());
|
|
10
|
+
const pending = /* @__PURE__ */ new Map();
|
|
11
|
+
const errors = [];
|
|
12
|
+
for (let i = 0; i < asyncIterators.length; i++) {
|
|
13
|
+
pending.set(
|
|
14
|
+
i,
|
|
15
|
+
asyncIterators[i].next().then(
|
|
16
|
+
(result) => ({ index: i, result }),
|
|
17
|
+
(error) => {
|
|
18
|
+
errors.push(error);
|
|
19
|
+
return { index: i, result: { done: true, value: void 0 } };
|
|
20
|
+
}
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
while (pending.size > 0) {
|
|
25
|
+
const { index, result } = await Promise.race(pending.values());
|
|
26
|
+
if (result.done) {
|
|
27
|
+
pending.delete(index);
|
|
28
|
+
} else {
|
|
29
|
+
yield result.value;
|
|
30
|
+
pending.set(
|
|
31
|
+
index,
|
|
32
|
+
asyncIterators[index].next().then(
|
|
33
|
+
(result2) => ({ index, result: result2 }),
|
|
34
|
+
(error) => {
|
|
35
|
+
errors.push(error);
|
|
36
|
+
return { index, result: { done: true, value: void 0 } };
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (errors.length > 0) {
|
|
43
|
+
throw new AggregateError(errors, errorMessage);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
AsyncIterator2.merge = merge;
|
|
47
|
+
})(AsyncIterator || (AsyncIterator = {}));
|
|
48
|
+
export {
|
|
49
|
+
AsyncIterator
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=AsyncIterator.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util/AsyncIterator.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AASO,IAAU;AAAA,CAAV,CAAUA,mBAAV;AAUH,kBAAuB,MACnB,WACA,eAAe,sCACE;AACjB,UAAM,iBAAiB,UAAU,IAAI,UAAQ,KAAK,OAAO,aAAa,EAAE,CAAC;AACzE,UAAM,UAAU,oBAAI,IAAmE;AACvF,UAAM,SAAkB,CAAC;AAGzB,aAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC5C,cAAQ;AAAA,QACJ;AAAA,QACA,eAAe,CAAC,EAAE,KAAK,EAAE;AAAA,UACrB,aAAW,EAAE,OAAO,GAAG,OAAO;AAAA,UAC9B,WAAS;AAEL,mBAAO,KAAK,KAAK;AACjB,mBAAO,EAAE,OAAO,GAAG,QAAQ,EAAE,MAAM,MAAM,OAAO,OAAU,EAAuB;AAAA,UACrF;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,QAAQ,OAAO,GAAG;AAErB,YAAM,EAAE,OAAO,OAAO,IAAI,MAAM,QAAQ,KAAK,QAAQ,OAAO,CAAC;AAE7D,UAAI,OAAO,MAAM;AACb,gBAAQ,OAAO,KAAK;AAAA,MACxB,OAAO;AACH,cAAM,OAAO;AAEb,gBAAQ;AAAA,UACJ;AAAA,UACA,eAAe,KAAK,EAAE,KAAK,EAAE;AAAA,YACzB,CAAAC,aAAW,EAAE,OAAO,QAAAA,QAAO;AAAA,YAC3B,WAAS;AACL,qBAAO,KAAK,KAAK;AACjB,qBAAO,EAAE,OAAO,QAAQ,EAAE,MAAM,MAAM,OAAO,OAAU,EAAuB;AAAA,YAClF;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI,OAAO,SAAS,GAAG;AACnB,YAAM,IAAI,eAAe,QAAQ,YAAY;AAAA,IACjD;AAAA,EACJ;AAjDA,EAAAD,eAAuB;AAAA,GAVV;",
|
|
5
|
+
"names": ["AsyncIterator", "result"]
|
|
6
|
+
}
|
package/dist/esm/util/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/util/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC;AACrC,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
|
package/dist/esm/util/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/index.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/general",
|
|
3
|
-
"version": "0.16.8-alpha.0-
|
|
3
|
+
"version": "0.16.8-alpha.0-20260127-65e1b40e2",
|
|
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.8-alpha.0-
|
|
39
|
+
"@matter/testing": "0.16.8-alpha.0-20260127-65e1b40e2"
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
42
|
"dist/**/*",
|
package/src/net/ServerAddress.ts
CHANGED
|
@@ -78,7 +78,8 @@ export namespace ServerAddress {
|
|
|
78
78
|
switch (address.type) {
|
|
79
79
|
case "udp":
|
|
80
80
|
case "tcp":
|
|
81
|
-
|
|
81
|
+
const ip = address.ip;
|
|
82
|
+
return `${address.type}://${ip.includes(":") ? `[${ip}]` : ip}:${address.port}`;
|
|
82
83
|
|
|
83
84
|
case "ble":
|
|
84
85
|
return `ble://${address.peripheralAddress}`;
|