@matter/general 0.16.8-alpha.0-20260125-38e62bc3e → 0.16.8-alpha.0-20260127-de48449ad

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.
Files changed (89) hide show
  1. package/dist/cjs/net/Channel.d.ts +10 -0
  2. package/dist/cjs/net/Channel.d.ts.map +1 -1
  3. package/dist/cjs/net/Channel.js +7 -1
  4. package/dist/cjs/net/Channel.js.map +1 -1
  5. package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
  6. package/dist/cjs/net/ServerAddress.js +2 -1
  7. package/dist/cjs/net/ServerAddress.js.map +1 -1
  8. package/dist/cjs/net/dns-sd/DnssdName.d.ts +56 -0
  9. package/dist/cjs/net/dns-sd/DnssdName.d.ts.map +1 -0
  10. package/dist/cjs/net/dns-sd/DnssdName.js +193 -0
  11. package/dist/cjs/net/dns-sd/DnssdName.js.map +6 -0
  12. package/dist/cjs/net/dns-sd/DnssdNames.d.ts +77 -0
  13. package/dist/cjs/net/dns-sd/DnssdNames.d.ts.map +1 -0
  14. package/dist/cjs/net/dns-sd/DnssdNames.js +238 -0
  15. package/dist/cjs/net/dns-sd/DnssdNames.js.map +6 -0
  16. package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts +80 -0
  17. package/dist/cjs/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
  18. package/dist/cjs/net/dns-sd/DnssdSolicitor.js +212 -0
  19. package/dist/cjs/net/dns-sd/DnssdSolicitor.js.map +6 -0
  20. package/dist/cjs/net/dns-sd/IpService.d.ts +73 -0
  21. package/dist/cjs/net/dns-sd/IpService.d.ts.map +1 -0
  22. package/dist/cjs/net/dns-sd/IpService.js +329 -0
  23. package/dist/cjs/net/dns-sd/IpService.js.map +6 -0
  24. package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts +16 -0
  25. package/dist/cjs/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
  26. package/dist/cjs/net/dns-sd/IpServiceResolution.js +162 -0
  27. package/dist/cjs/net/dns-sd/IpServiceResolution.js.map +6 -0
  28. package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts +58 -0
  29. package/dist/cjs/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
  30. package/dist/cjs/net/dns-sd/IpServiceStatus.js +191 -0
  31. package/dist/cjs/net/dns-sd/IpServiceStatus.js.map +6 -0
  32. package/dist/cjs/net/dns-sd/index.d.ts +6 -0
  33. package/dist/cjs/net/dns-sd/index.d.ts.map +1 -1
  34. package/dist/cjs/net/dns-sd/index.js +6 -0
  35. package/dist/cjs/net/dns-sd/index.js.map +1 -1
  36. package/dist/cjs/net/udp/UdpInterface.d.ts +4 -2
  37. package/dist/cjs/net/udp/UdpInterface.d.ts.map +1 -1
  38. package/dist/cjs/net/udp/UdpInterface.js +4 -1
  39. package/dist/cjs/net/udp/UdpInterface.js.map +1 -1
  40. package/dist/esm/net/Channel.d.ts +10 -0
  41. package/dist/esm/net/Channel.d.ts.map +1 -1
  42. package/dist/esm/net/Channel.js +7 -1
  43. package/dist/esm/net/Channel.js.map +1 -1
  44. package/dist/esm/net/ServerAddress.d.ts.map +1 -1
  45. package/dist/esm/net/ServerAddress.js +2 -1
  46. package/dist/esm/net/ServerAddress.js.map +1 -1
  47. package/dist/esm/net/dns-sd/DnssdName.d.ts +56 -0
  48. package/dist/esm/net/dns-sd/DnssdName.d.ts.map +1 -0
  49. package/dist/esm/net/dns-sd/DnssdName.js +173 -0
  50. package/dist/esm/net/dns-sd/DnssdName.js.map +6 -0
  51. package/dist/esm/net/dns-sd/DnssdNames.d.ts +77 -0
  52. package/dist/esm/net/dns-sd/DnssdNames.d.ts.map +1 -0
  53. package/dist/esm/net/dns-sd/DnssdNames.js +218 -0
  54. package/dist/esm/net/dns-sd/DnssdNames.js.map +6 -0
  55. package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts +80 -0
  56. package/dist/esm/net/dns-sd/DnssdSolicitor.d.ts.map +1 -0
  57. package/dist/esm/net/dns-sd/DnssdSolicitor.js +192 -0
  58. package/dist/esm/net/dns-sd/DnssdSolicitor.js.map +6 -0
  59. package/dist/esm/net/dns-sd/IpService.d.ts +73 -0
  60. package/dist/esm/net/dns-sd/IpService.d.ts.map +1 -0
  61. package/dist/esm/net/dns-sd/IpService.js +309 -0
  62. package/dist/esm/net/dns-sd/IpService.js.map +6 -0
  63. package/dist/esm/net/dns-sd/IpServiceResolution.d.ts +16 -0
  64. package/dist/esm/net/dns-sd/IpServiceResolution.d.ts.map +1 -0
  65. package/dist/esm/net/dns-sd/IpServiceResolution.js +142 -0
  66. package/dist/esm/net/dns-sd/IpServiceResolution.js.map +6 -0
  67. package/dist/esm/net/dns-sd/IpServiceStatus.d.ts +58 -0
  68. package/dist/esm/net/dns-sd/IpServiceStatus.d.ts.map +1 -0
  69. package/dist/esm/net/dns-sd/IpServiceStatus.js +171 -0
  70. package/dist/esm/net/dns-sd/IpServiceStatus.js.map +6 -0
  71. package/dist/esm/net/dns-sd/index.d.ts +6 -0
  72. package/dist/esm/net/dns-sd/index.d.ts.map +1 -1
  73. package/dist/esm/net/dns-sd/index.js +6 -0
  74. package/dist/esm/net/dns-sd/index.js.map +1 -1
  75. package/dist/esm/net/udp/UdpInterface.d.ts +4 -2
  76. package/dist/esm/net/udp/UdpInterface.d.ts.map +1 -1
  77. package/dist/esm/net/udp/UdpInterface.js +4 -1
  78. package/dist/esm/net/udp/UdpInterface.js.map +1 -1
  79. package/package.json +2 -2
  80. package/src/net/Channel.ts +16 -0
  81. package/src/net/ServerAddress.ts +2 -1
  82. package/src/net/dns-sd/DnssdName.ts +252 -0
  83. package/src/net/dns-sd/DnssdNames.ts +208 -0
  84. package/src/net/dns-sd/DnssdSolicitor.ts +231 -0
  85. package/src/net/dns-sd/IpService.ts +346 -0
  86. package/src/net/dns-sd/IpServiceResolution.ts +134 -0
  87. package/src/net/dns-sd/IpServiceStatus.ts +212 -0
  88. package/src/net/dns-sd/index.ts +6 -0
  89. package/src/net/udp/UdpInterface.ts +3 -1
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var __using = (stack, value, async) => {
24
+ if (value != null) {
25
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
26
+ var dispose, inner;
27
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
28
+ if (dispose === void 0) {
29
+ dispose = value[__knownSymbol("dispose")];
30
+ if (async) inner = dispose;
31
+ }
32
+ if (typeof dispose !== "function") __typeError("Object not disposable");
33
+ if (inner) dispose = function() {
34
+ try {
35
+ inner.call(this);
36
+ } catch (e) {
37
+ return Promise.reject(e);
38
+ }
39
+ };
40
+ stack.push([async, dispose, value]);
41
+ } else if (async) {
42
+ stack.push([async]);
43
+ }
44
+ return value;
45
+ };
46
+ var __callDispose = (stack, error, hasError) => {
47
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
48
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
49
+ };
50
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
51
+ var next = (it) => {
52
+ while (it = stack.pop()) {
53
+ try {
54
+ var result = it[1] && it[1].call(it[2]);
55
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (hasError) throw error;
61
+ };
62
+ return next();
63
+ };
64
+ var IpService_exports = {};
65
+ __export(IpService_exports, {
66
+ IpService: () => IpService
67
+ });
68
+ module.exports = __toCommonJS(IpService_exports);
69
+ var import_DnsCodec = require("#codec/DnsCodec.js");
70
+ var import_Diagnostic = require("#log/Diagnostic.js");
71
+ var import_ServerAddressSet = require("#net/ServerAddressSet.js");
72
+ var import_Time = require("#time/Time.js");
73
+ var import_Abort = require("#util/Abort.js");
74
+ var import_Observable = require("#util/Observable.js");
75
+ var import_IpServiceStatus = require("./IpServiceStatus.js");
76
+ /**
77
+ * @license
78
+ * Copyright 2022-2026 Matter.js Authors
79
+ * SPDX-License-Identifier: Apache-2.0
80
+ */
81
+ class IpService {
82
+ #name;
83
+ #via;
84
+ #names;
85
+ #observers = new import_Observable.ObserverGroup(this);
86
+ #services = /* @__PURE__ */ new Map();
87
+ #changed = new import_Observable.AsyncObservable();
88
+ #addresses = (0, import_ServerAddressSet.ServerAddressSet)();
89
+ #status = new import_IpServiceStatus.IpServiceStatus(this);
90
+ #notified;
91
+ constructor(name, via, names) {
92
+ this.#name = names.get(name);
93
+ this.#names = names;
94
+ this.#via = import_Diagnostic.Diagnostic.via(via);
95
+ this.#observers.on(this.#name, this.#onServiceChanged);
96
+ for (const record of this.#name.records) {
97
+ const service = serviceOf(record);
98
+ if (!service) {
99
+ continue;
100
+ }
101
+ this.#updateService(record.ttl, service);
102
+ }
103
+ }
104
+ /**
105
+ * The DNS-SD name.
106
+ */
107
+ get name() {
108
+ return this.#name;
109
+ }
110
+ /**
111
+ * Other DNS-SD names.
112
+ */
113
+ get names() {
114
+ return this.#names;
115
+ }
116
+ /**
117
+ * Identifier used for logging.
118
+ */
119
+ get via() {
120
+ return this.#via;
121
+ }
122
+ /**
123
+ * Status details of the service.
124
+ */
125
+ get status() {
126
+ return this.#status;
127
+ }
128
+ /**
129
+ * Release resources.
130
+ */
131
+ async close() {
132
+ this.#observers.close();
133
+ await this.#status.close();
134
+ if (this.#notified) {
135
+ await this.#notified;
136
+ }
137
+ }
138
+ /**
139
+ * Known addresses.
140
+ */
141
+ get addresses() {
142
+ return this.#addresses;
143
+ }
144
+ /**
145
+ * Values from TXT records.
146
+ */
147
+ get parameters() {
148
+ return this.#name.parameters;
149
+ }
150
+ /**
151
+ * Emits when the service changes.
152
+ */
153
+ get changed() {
154
+ return this.#changed;
155
+ }
156
+ map(fn) {
157
+ return [...this.addresses].map(fn);
158
+ }
159
+ /**
160
+ * Stream address updates, starting with initial set of addresses.
161
+ *
162
+ * Outputs addresses in priority order so the stream may be used directly for establishing new connections.
163
+ *
164
+ * If no addresses are present, triggers discovery using standard MDNS backoff schedule.
165
+ */
166
+ async *addressChanges({
167
+ abort,
168
+ order = import_ServerAddressSet.ServerAddressSet.compareDesirability
169
+ } = {}) {
170
+ var _stack = [];
171
+ try {
172
+ let knownAddresses = /* @__PURE__ */ new Set();
173
+ const dirty = new import_Observable.AsyncObservableValue();
174
+ const _changed = __using(_stack, this.changed.use(() => dirty.emit(true)));
175
+ loop: while (true) {
176
+ dirty.emit(false);
177
+ const addresses = (0, import_ServerAddressSet.ServerAddressSet)(this.addresses, order);
178
+ let changes = new Array();
179
+ const oldKnownAddresses = knownAddresses;
180
+ knownAddresses = /* @__PURE__ */ new Set();
181
+ for (const address of addresses) {
182
+ knownAddresses.add(address);
183
+ if (oldKnownAddresses.has(address)) {
184
+ oldKnownAddresses.delete(address);
185
+ continue;
186
+ }
187
+ changes.push({ kind: "add", address });
188
+ }
189
+ if (oldKnownAddresses.size) {
190
+ const deletedAddresses = [...oldKnownAddresses.values()];
191
+ const deletes = deletedAddresses.map((address) => ({ kind: "delete", address }));
192
+ changes = [...deletes, ...changes];
193
+ }
194
+ for (const change of changes) {
195
+ yield change;
196
+ if (import_Abort.Abort.is(abort)) {
197
+ return;
198
+ }
199
+ if (dirty.value) {
200
+ continue loop;
201
+ }
202
+ }
203
+ await import_Abort.Abort.race(abort, dirty);
204
+ if (import_Abort.Abort.is(abort)) {
205
+ return;
206
+ }
207
+ }
208
+ } catch (_) {
209
+ var _error = _, _hasError = true;
210
+ } finally {
211
+ __callDispose(_stack, _error, _hasError);
212
+ }
213
+ }
214
+ #onServiceChanged = async ({ updated, deleted }) => {
215
+ if (updated) {
216
+ for (const record of updated) {
217
+ const service = serviceOf(record);
218
+ if (service) {
219
+ this.#updateService(record.ttl, service);
220
+ }
221
+ }
222
+ }
223
+ if (deleted) {
224
+ for (const record of deleted) {
225
+ const service = serviceOf(record);
226
+ if (service) {
227
+ this.#deleteService(service);
228
+ }
229
+ }
230
+ }
231
+ };
232
+ #updateService(ttl, { target, port, priority, weight }) {
233
+ const key = hostKeyOf(target, port);
234
+ let service = this.#services.get(key);
235
+ if (service) {
236
+ service.discoveredAt = import_Time.Time.nowMs;
237
+ service.ttl = ttl;
238
+ service.port = port;
239
+ service.priority = priority;
240
+ service.weight = weight;
241
+ return;
242
+ }
243
+ service = {
244
+ name: this.#names.get(target),
245
+ discoveredAt: import_Time.Time.nowMs,
246
+ ttl,
247
+ port,
248
+ priority,
249
+ weight,
250
+ onChange: (changes) => this.#onAddressChanged(service, changes)
251
+ };
252
+ this.#observers.on(service.name, service.onChange);
253
+ this.#onAddressChanged(service, { name: service.name, updated: [...service.name.records] });
254
+ this.#services.set(key, service);
255
+ }
256
+ #deleteService({ target, port }) {
257
+ const key = hostKeyOf(target, port);
258
+ const service = this.#services.get(key);
259
+ if (!service) {
260
+ return;
261
+ }
262
+ this.#services.delete(key);
263
+ this.#observers.off(service.name, service.onChange);
264
+ this.#onAddressChanged(service, { name: service.name, deleted: [...service.name.records] });
265
+ return;
266
+ }
267
+ #onAddressChanged = (service, { updated, deleted }) => {
268
+ if (updated) {
269
+ for (const record of updated) {
270
+ const addr = addressOf(record);
271
+ if (addr) {
272
+ this.#updateAddress(service, addr);
273
+ }
274
+ }
275
+ }
276
+ if (deleted) {
277
+ for (const record of deleted) {
278
+ const addr = addressOf(record);
279
+ if (addr) {
280
+ this.#deleteAddress(service, addr);
281
+ }
282
+ }
283
+ }
284
+ };
285
+ #updateAddress(service, ip) {
286
+ const address = { type: "udp", ip, port: service.port };
287
+ if (this.#addresses.has(address)) {
288
+ return;
289
+ }
290
+ this.#addresses.add(address);
291
+ this.#status.isReachable = true;
292
+ this.#notify();
293
+ }
294
+ #deleteAddress(service, ip) {
295
+ const address = { type: "udp", ip, port: service.port };
296
+ if (!this.#addresses.has(address)) {
297
+ return;
298
+ }
299
+ this.#addresses.delete(address);
300
+ this.#notify();
301
+ }
302
+ #notify = () => {
303
+ if (this.#notified) {
304
+ return;
305
+ }
306
+ this.#notified = this.#emitNotification();
307
+ };
308
+ async #emitNotification() {
309
+ await import_Time.Time.sleep("discovery service coalescence", 0);
310
+ this.#notified = void 0;
311
+ await this.changed.emit();
312
+ }
313
+ }
314
+ function serviceOf(record) {
315
+ if (record.recordType !== import_DnsCodec.DnsRecordType.SRV) {
316
+ return;
317
+ }
318
+ return record.value;
319
+ }
320
+ function hostKeyOf(name, port) {
321
+ return `${name}:${port}`;
322
+ }
323
+ function addressOf(record) {
324
+ if (record.recordType !== import_DnsCodec.DnsRecordType.A && record.recordType !== import_DnsCodec.DnsRecordType.AAAA) {
325
+ return;
326
+ }
327
+ return record.value;
328
+ }
329
+ //# sourceMappingURL=IpService.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/IpService.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { IpService } from "./IpService.js";
7
+ /**
8
+ * Discovers new IP addresses for an {@link IpService}.
9
+ *
10
+ * This primarily involves sending queries for SRV records using {@link DnssdSolicitor#discover}. We also query for
11
+ * A and AAAA records for any SRV target hostnames for which we do not know IP addresses.
12
+ *
13
+ * Runs until aborted or we discover a new IP address (we ignore existing addresses).
14
+ */
15
+ export declare function IpServiceResolution(service: IpService, abort: AbortSignal, ipv4?: boolean): Promise<void>;
16
+ //# sourceMappingURL=IpServiceResolution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpServiceResolution.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/IpServiceResolution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,UAAO,iBA4G5F"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+ var __using = (stack, value, async) => {
24
+ if (value != null) {
25
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
26
+ var dispose, inner;
27
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
28
+ if (dispose === void 0) {
29
+ dispose = value[__knownSymbol("dispose")];
30
+ if (async) inner = dispose;
31
+ }
32
+ if (typeof dispose !== "function") __typeError("Object not disposable");
33
+ if (inner) dispose = function() {
34
+ try {
35
+ inner.call(this);
36
+ } catch (e) {
37
+ return Promise.reject(e);
38
+ }
39
+ };
40
+ stack.push([async, dispose, value]);
41
+ } else if (async) {
42
+ stack.push([async]);
43
+ }
44
+ return value;
45
+ };
46
+ var __callDispose = (stack, error, hasError) => {
47
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
48
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
49
+ };
50
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
51
+ var next = (it) => {
52
+ while (it = stack.pop()) {
53
+ try {
54
+ var result = it[1] && it[1].call(it[2]);
55
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
56
+ } catch (e) {
57
+ fail(e);
58
+ }
59
+ }
60
+ if (hasError) throw error;
61
+ };
62
+ return next();
63
+ };
64
+ var IpServiceResolution_exports = {};
65
+ __export(IpServiceResolution_exports, {
66
+ IpServiceResolution: () => IpServiceResolution
67
+ });
68
+ module.exports = __toCommonJS(IpServiceResolution_exports);
69
+ var import_DnsCodec = require("#codec/DnsCodec.js");
70
+ var import_ServerAddressSet = require("#net/ServerAddressSet.js");
71
+ var import_Abort = require("#util/Abort.js");
72
+ var import_Ip = require("#util/Ip.js");
73
+ var import_Multiplex = require("#util/Multiplex.js");
74
+ var import_Observable = require("#util/Observable.js");
75
+ var import_Set = require("#util/Set.js");
76
+ /**
77
+ * @license
78
+ * Copyright 2022-2026 Matter.js Authors
79
+ * SPDX-License-Identifier: Apache-2.0
80
+ */
81
+ async function IpServiceResolution(service, abort, ipv4 = true) {
82
+ var _stack = [];
83
+ try {
84
+ const localAbort = __using(_stack, new import_Abort.Abort({ abort }));
85
+ const workers = __using(_stack, new import_Multiplex.BasicMultiplex(), true);
86
+ const observers = __using(_stack, new import_Observable.ObserverGroup());
87
+ const hosts = new import_Set.BasicSet();
88
+ let hostResolvers;
89
+ observers.on(hosts.added, (name) => {
90
+ if ([...name.records].find(
91
+ (record) => record.recordType === import_DnsCodec.DnsRecordType.AAAA || record.recordType === import_DnsCodec.DnsRecordType.A
92
+ )) {
93
+ return;
94
+ }
95
+ if (!hostResolvers) {
96
+ hostResolvers = /* @__PURE__ */ new Map();
97
+ }
98
+ const hostAbort = new import_Abort.Abort({ abort: localAbort });
99
+ hostResolvers.set(name, hostAbort);
100
+ workers.add(
101
+ service.names.solicitor.discover({
102
+ name,
103
+ recordTypes: ipv4 ? [import_DnsCodec.DnsRecordType.A, import_DnsCodec.DnsRecordType.AAAA] : [import_DnsCodec.DnsRecordType.AAAA],
104
+ abort: hostAbort
105
+ }).finally(hostAbort.close.bind(hostAbort))
106
+ );
107
+ });
108
+ observers.on(hosts.deleted, (name) => {
109
+ const abortHost = hostResolvers?.get(name);
110
+ if (!abortHost) {
111
+ return;
112
+ }
113
+ hostResolvers?.delete(name);
114
+ abortHost();
115
+ });
116
+ for (const record of service.name.records) {
117
+ if (record.recordType !== import_DnsCodec.DnsRecordType.SRV) {
118
+ continue;
119
+ }
120
+ hosts.add(service.names.get(record.name));
121
+ }
122
+ const existingAddresses = (0, import_ServerAddressSet.ServerAddressSet)(service.addresses);
123
+ observers.on(service.changed, () => {
124
+ for (const address of service.addresses) {
125
+ if (!ipv4 && (0, import_Ip.isIPv4)(address.ip)) {
126
+ continue;
127
+ }
128
+ if (!existingAddresses.has(address) && (ipv4 || (0, import_Ip.isIPv6)(address.ip))) {
129
+ localAbort();
130
+ }
131
+ }
132
+ const srvs = [...service.name.records].filter((record) => record.recordType === import_DnsCodec.DnsRecordType.SRV);
133
+ const newHostnames = new Set(srvs.map((record) => record.value.target));
134
+ for (const hostname of newHostnames) {
135
+ hosts.add(service.names.get(hostname));
136
+ }
137
+ for (const name of hosts) {
138
+ if (newHostnames.has(name.qname)) {
139
+ continue;
140
+ }
141
+ hosts.delete(name);
142
+ }
143
+ });
144
+ workers.add(
145
+ service.names.solicitor.discover({
146
+ abort: localAbort,
147
+ name: service.name,
148
+ recordTypes: [import_DnsCodec.DnsRecordType.SRV],
149
+ get associatedNames() {
150
+ return hosts;
151
+ }
152
+ })
153
+ );
154
+ await localAbort;
155
+ } catch (_) {
156
+ var _error = _, _hasError = true;
157
+ } finally {
158
+ var _promise = __callDispose(_stack, _error, _hasError);
159
+ _promise && await _promise;
160
+ }
161
+ }
162
+ //# 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,sBAA8B;AAC9B,8BAAiC;AACjC,mBAAsB;AACtB,gBAA+B;AAC/B,uBAA+B;AAC/B,wBAA8B;AAC9B,iBAAyB;AAZzB;AAAA;AAAA;AAAA;AAAA;AAyBA,eAAsB,oBAAoB,SAAoB,OAAoB,OAAO,MAAM;AAC3F;AAAA;AAAA,UAAM,aAAa,oBAAI,mBAAM,EAAE,MAAM,CAAC;AACtC,UAAY,UAAU,oBAAI,gCAAe,GAAnB;AACtB,UAAM,YAAY,oBAAI,gCAAc;AAIpC,UAAM,QAAQ,IAAI,oBAAoB;AAGtC,QAAI;AAGJ,cAAU,GAAG,MAAM,OAAO,UAAQ;AAE9B,UACI,CAAC,GAAG,KAAK,OAAO,EAAE;AAAA,QACd,YAAU,OAAO,eAAe,8BAAc,QAAQ,OAAO,eAAe,8BAAc;AAAA,MAC9F,GACF;AACE;AAAA,MACJ;AAGA,UAAI,CAAC,eAAe;AAChB,wBAAgB,oBAAI,IAAI;AAAA,MAC5B;AACA,YAAM,YAAY,IAAI,mBAAM,EAAE,OAAO,WAAW,CAAC;AACjD,oBAAc,IAAI,MAAM,SAAS;AACjC,cAAQ;AAAA,QACJ,QAAQ,MAAM,UACT,SAAS;AAAA,UACN;AAAA,UACA,aAAa,OAAO,CAAC,8BAAc,GAAG,8BAAc,IAAI,IAAI,CAAC,8BAAc,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,8BAAc,KAAK;AACzC;AAAA,MACJ;AAEA,YAAM,IAAI,QAAQ,MAAM,IAAI,OAAO,IAAI,CAAC;AAAA,IAC5C;AAGA,UAAM,wBAAoB,0CAAiB,QAAQ,SAAS;AAC5D,cAAU,GAAG,QAAQ,SAAS,MAAM;AAEhC,iBAAW,WAAW,QAAQ,WAAW;AACrC,YAAI,CAAC,YAAQ,kBAAO,QAAQ,EAAE,GAAG;AAE7B;AAAA,QACJ;AAEA,YAAI,CAAC,kBAAkB,IAAI,OAAO,MAAM,YAAQ,kBAAO,QAAQ,EAAE,IAAI;AAEjE,qBAAW;AAAA,QACf;AAAA,MACJ;AAGA,YAAM,OAAO,CAAC,GAAG,QAAQ,KAAK,OAAO,EAAE,OAAO,YAAU,OAAO,eAAe,8BAAc,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,8BAAc,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"}