@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,238 @@
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 DnssdNames_exports = {};
65
+ __export(DnssdNames_exports, {
66
+ DnssdNames: () => DnssdNames
67
+ });
68
+ module.exports = __toCommonJS(DnssdNames_exports);
69
+ var import_Time = require("#time/Time.js");
70
+ var import_Timestamp = require("#time/Timestamp.js");
71
+ var import_TimeUnit = require("#time/TimeUnit.js");
72
+ var import_Lifetime = require("#util/Lifetime.js");
73
+ var import_Observable = require("#util/Observable.js");
74
+ var import_Scheduler = require("#util/Scheduler.js");
75
+ var import_DnssdName = require("./DnssdName.js");
76
+ var import_DnssdSolicitor = require("./DnssdSolicitor.js");
77
+ /**
78
+ * @license
79
+ * Copyright 2022-2026 Matter.js Authors
80
+ * SPDX-License-Identifier: Apache-2.0
81
+ */
82
+ class DnssdNames {
83
+ #socket;
84
+ #lifetime;
85
+ #entropy;
86
+ #filter;
87
+ #solicitor;
88
+ #observers = new import_Observable.ObserverGroup();
89
+ #names = /* @__PURE__ */ new Map();
90
+ #expiration;
91
+ #discovered = new import_Observable.Observable();
92
+ #goodbyeProtectionWindow;
93
+ #minTtl;
94
+ constructor({
95
+ socket,
96
+ lifetime = import_Lifetime.Lifetime.process,
97
+ entropy,
98
+ filter,
99
+ goodbyeProtectionWindow,
100
+ minTtl
101
+ }) {
102
+ this.#socket = socket;
103
+ this.#lifetime = lifetime.join("mdns client");
104
+ this.#entropy = entropy;
105
+ this.#filter = filter;
106
+ this.#solicitor = new import_DnssdSolicitor.QueryMulticaster(this);
107
+ this.#goodbyeProtectionWindow = goodbyeProtectionWindow ?? DnssdNames.defaults.goodbyeProtectionWindow;
108
+ this.#minTtl = minTtl ?? DnssdNames.defaults.minTtl;
109
+ this.#observers.on(this.#socket.receipt, this.#handleMessage.bind(this));
110
+ this.#expiration = new import_Scheduler.Scheduler({
111
+ name: "expiration scheduler",
112
+ lifetime: this.#lifetime,
113
+ timeOf: (a) => {
114
+ return a.expiresAt;
115
+ },
116
+ run: (record) => {
117
+ const discoveryName = this.#names.get(record.name);
118
+ if (discoveryName) {
119
+ discoveryName.deleteRecord(record);
120
+ }
121
+ }
122
+ });
123
+ }
124
+ #handleMessage(message) {
125
+ let goodbyesBefore;
126
+ for (let record of [...message.answers, ...message.additionalRecords]) {
127
+ if (this.#filter && !this.#filter(record)) {
128
+ continue;
129
+ }
130
+ const name = this.get(record.name);
131
+ if (record.ttl) {
132
+ if (record.ttl < this.#minTtl) {
133
+ record = { ...record, ttl: this.#minTtl };
134
+ }
135
+ const wasDiscovered = name.isDiscovered;
136
+ name.installRecord(record);
137
+ if (!wasDiscovered && name.isDiscovered) {
138
+ this.#discovered.emit(name);
139
+ }
140
+ } else {
141
+ if (goodbyesBefore === void 0) {
142
+ goodbyesBefore = (0, import_Timestamp.Timestamp)(import_Time.Time.nowMs - this.#goodbyeProtectionWindow);
143
+ }
144
+ name.deleteRecord(record, goodbyesBefore);
145
+ }
146
+ }
147
+ }
148
+ /**
149
+ * Test for existence of name.
150
+ */
151
+ has(name) {
152
+ name = name.toLowerCase();
153
+ return this.#names.has(name);
154
+ }
155
+ /**
156
+ * Retrieve the {@link DnssdName} for {@link name}.
157
+ *
158
+ * This will create the name if it does not exist, and if you do not add an observer then it will not automatically
159
+ * delete if there are no records. So if you may not use the record test for existence with {@link has} first.
160
+ */
161
+ get(qname) {
162
+ let name = this.maybeGet(qname);
163
+ if (name === void 0) {
164
+ name = new import_DnssdName.DnssdName(qname, this.#nameContext);
165
+ this.#names.set(qname, name);
166
+ }
167
+ return name;
168
+ }
169
+ /**
170
+ * Retrieve the {@link DnssdName} if known.
171
+ */
172
+ maybeGet(name) {
173
+ name = name.toLowerCase();
174
+ return this.#names.get(name);
175
+ }
176
+ /**
177
+ * Wait for all workers and close all names.
178
+ */
179
+ async close() {
180
+ var _stack = [];
181
+ try {
182
+ const _closing = __using(_stack, this.#lifetime.closing());
183
+ this.#observers.close();
184
+ await this.#expiration.close();
185
+ for (const name of this.#names.values()) {
186
+ await name.close();
187
+ this.#names.delete(name.qname);
188
+ }
189
+ await this.#solicitor.close();
190
+ } catch (_) {
191
+ var _error = _, _hasError = true;
192
+ } finally {
193
+ __callDispose(_stack, _error, _hasError);
194
+ }
195
+ }
196
+ get socket() {
197
+ return this.#socket;
198
+ }
199
+ /**
200
+ * Emits when a {@link DnssdName} is first discovered.
201
+ */
202
+ get discovered() {
203
+ return this.#discovered;
204
+ }
205
+ /**
206
+ * Shared solicitor.
207
+ *
208
+ * We offer solicitation in this object so there is not redundant solicitation across interested parties.
209
+ */
210
+ get solicitor() {
211
+ return this.#solicitor;
212
+ }
213
+ get entropy() {
214
+ return this.#entropy;
215
+ }
216
+ #nameContext = {
217
+ delete: (name) => {
218
+ const known = this.#names.get(name.qname);
219
+ if (known === name) {
220
+ this.#names.delete(name.qname);
221
+ }
222
+ },
223
+ registerForExpiration: (record) => {
224
+ this.#expiration.add(record);
225
+ },
226
+ unregisterForExpiration: (record) => {
227
+ this.#expiration.delete(record);
228
+ }
229
+ };
230
+ }
231
+ ((DnssdNames2) => {
232
+ DnssdNames2.defaults = {
233
+ goodbyeProtectionWindow: (0, import_TimeUnit.Seconds)(1),
234
+ minTtl: (0, import_TimeUnit.Seconds)(15)
235
+ // This is the value that Apple uses
236
+ };
237
+ })(DnssdNames || (DnssdNames = {}));
238
+ //# sourceMappingURL=DnssdNames.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/DnssdNames.ts"],
4
+ "mappings": "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",
5
+ "names": ["DnssdNames"]
6
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DnsRecordType } from "#codec/DnsCodec.js";
7
+ import { RetrySchedule } from "#net/RetrySchedule.js";
8
+ import type { DnssdName } from "./DnssdName.js";
9
+ import type { DnssdNames } from "./DnssdNames.js";
10
+ /**
11
+ * Solicits DNS-SD records for specific names.
12
+ */
13
+ export interface DnssdSolicitor {
14
+ /**
15
+ * Send a single MDNS query for a specific DNS-SD name.
16
+ *
17
+ * Multiple solicitations for the same name are coalesced into the same query using a macrotask.
18
+ */
19
+ solicit(solicitation: DnssdSolicitor.Solicitation): void;
20
+ /**
21
+ * Send MDNS queries for a specific DNS-SD name using a standard MDNS transmission schedule.
22
+ *
23
+ * The solicitor does not have a notion of "discovery complete", so this function does not return until
24
+ * {@link DnssdSolicitor.Discovery.abort} signals abort (or the solicitor is closed).
25
+ *
26
+ * Multiple simultaneous attempts to complete discovery of the same name will not result in redundant solicitations.
27
+ *
28
+ * If fields in {@link discovery} change their value is used for the next solicitation.
29
+ */
30
+ discover(discovery: DnssdSolicitor.Discovery): Promise<void>;
31
+ }
32
+ /**
33
+ * Solicit one or more record types for a name.
34
+ *
35
+ * "Soliciting" consists of broadcasting a query for a DNS-SD name. Groups multiple solicitations in the same
36
+ * macrotask into a single packet.
37
+ */
38
+ export declare namespace DnssdSolicitor {
39
+ /**
40
+ * Configures solicitation of a single name.
41
+ */
42
+ interface Solicitation {
43
+ /**
44
+ * The name to solicit.
45
+ */
46
+ name: DnssdName;
47
+ /**
48
+ * Record types to request.
49
+ */
50
+ recordTypes: DnsRecordType[];
51
+ /**
52
+ * Additional names to include as known answers.
53
+ */
54
+ associatedNames?: Iterable<DnssdName>;
55
+ }
56
+ /**
57
+ * Configures repeated solicitation.
58
+ */
59
+ interface Discovery extends Solicitation {
60
+ /**
61
+ * Terminates discovery.
62
+ */
63
+ abort: AbortSignal;
64
+ }
65
+ /**
66
+ * Default retry schedule per RFC 6762 (initial delay of 20-120ms. handled separately).
67
+ */
68
+ const DefaultRetries: RetrySchedule.Configuration;
69
+ }
70
+ /**
71
+ * Concrete implementation of {@link DnssdSolicitor} that sends DNS-SD queries via multicast.
72
+ */
73
+ export declare class QueryMulticaster implements DnssdSolicitor {
74
+ #private;
75
+ constructor(names: DnssdNames, retries?: RetrySchedule.Configuration);
76
+ solicit(solicitation: DnssdSolicitor.Solicitation): void;
77
+ discover(discovery: DnssdSolicitor.Discovery): Promise<void>;
78
+ close(): Promise<void>;
79
+ }
80
+ //# sourceMappingURL=DnssdSolicitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnssdSolicitor.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/DnssdSolicitor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAuD,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExG,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;OAIG;IACH,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,YAAY,GAAG,IAAI,CAAC;IAEzD;;;;;;;;;OASG;IACH,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE;AAED;;;;;GAKG;AACH,yBAAiB,cAAc,CAAC;IAC5B;;OAEG;IACH,UAAiB,YAAY;QACzB;;WAEG;QACH,IAAI,EAAE,SAAS,CAAC;QAEhB;;WAEG;QACH,WAAW,EAAE,aAAa,EAAE,CAAC;QAE7B;;WAEG;QACH,eAAe,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACzC;IAED;;OAEG;IACH,UAAiB,SAAU,SAAQ,YAAY;QAC3C;;WAEG;QACH,KAAK,EAAE,WAAW,CAAC;KACtB;IAED;;OAEG;IACI,MAAM,cAAc,EAAE,aAAa,CAAC,aAK1C,CAAC;CACL;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,cAAc;;gBASvC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,aAAa,CAAC,aAAa;IASpE,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,YAAY;IAoB3C,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS;IA6C5C,KAAK;CAqDd"}
@@ -0,0 +1,212 @@
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 DnssdSolicitor_exports = {};
65
+ __export(DnssdSolicitor_exports, {
66
+ DnssdSolicitor: () => DnssdSolicitor,
67
+ QueryMulticaster: () => QueryMulticaster
68
+ });
69
+ module.exports = __toCommonJS(DnssdSolicitor_exports);
70
+ var import_DnsCodec = require("#codec/DnsCodec.js");
71
+ var import_Logger = require("#log/Logger.js");
72
+ var import_RetrySchedule = require("#net/RetrySchedule.js");
73
+ var import_Time = require("#time/Time.js");
74
+ var import_TimeUnit = require("#time/TimeUnit.js");
75
+ var import_Abort = require("#util/Abort.js");
76
+ var import_Multiplex = require("#util/Multiplex.js");
77
+ var import_Observable = require("#util/Observable.js");
78
+ /**
79
+ * @license
80
+ * Copyright 2022-2026 Matter.js Authors
81
+ * SPDX-License-Identifier: Apache-2.0
82
+ */
83
+ const logger = new import_Logger.Logger("DiscoverySolicitor");
84
+ var DnssdSolicitor;
85
+ ((DnssdSolicitor2) => {
86
+ DnssdSolicitor2.DefaultRetries = {
87
+ initialInterval: (0, import_TimeUnit.Seconds)(1),
88
+ jitterFactor: 0.2,
89
+ backoffFactor: 2,
90
+ maximumInterval: (0, import_TimeUnit.Hours)(1)
91
+ };
92
+ })(DnssdSolicitor || (DnssdSolicitor = {}));
93
+ class QueryMulticaster {
94
+ #names;
95
+ #schedule;
96
+ #abort = new import_Abort.Abort();
97
+ #toSolicit = /* @__PURE__ */ new Map();
98
+ #discovering = /* @__PURE__ */ new Map();
99
+ #namesReady = new import_Observable.ObservableValue();
100
+ #workers = new import_Multiplex.BasicMultiplex();
101
+ constructor(names, retries) {
102
+ this.#names = names;
103
+ this.#schedule = new import_RetrySchedule.RetrySchedule(
104
+ names.entropy,
105
+ import_RetrySchedule.RetrySchedule.Configuration(DnssdSolicitor.DefaultRetries, retries)
106
+ );
107
+ this.#workers.add(this.#emitSolicitations());
108
+ }
109
+ solicit(solicitation) {
110
+ if (this.#abort.aborted) {
111
+ return;
112
+ }
113
+ const entry = this.#toSolicit.get(solicitation.name);
114
+ if (entry === void 0) {
115
+ this.#toSolicit.set(solicitation.name, { ...solicitation });
116
+ } else {
117
+ entry.recordTypes = [.../* @__PURE__ */ new Set([...entry.recordTypes, ...solicitation.recordTypes])];
118
+ if (solicitation.associatedNames) {
119
+ if (!entry.associatedNames) {
120
+ entry.associatedNames = solicitation.associatedNames;
121
+ } else {
122
+ entry.associatedNames = [.../* @__PURE__ */ new Set([...entry.associatedNames, ...solicitation.associatedNames])];
123
+ }
124
+ }
125
+ }
126
+ this.#namesReady.emit(true);
127
+ }
128
+ async discover(discovery) {
129
+ let active = this.#discovering.get(discovery.name);
130
+ if (active) {
131
+ active.waiting.add(discovery);
132
+ } else {
133
+ const abort = new import_Abort.Abort({ abort: this.#abort });
134
+ active = {
135
+ abort,
136
+ finished: this.#discover(discovery, abort),
137
+ waiting: /* @__PURE__ */ new Set([discovery])
138
+ };
139
+ this.#discovering.set(discovery.name, active);
140
+ }
141
+ try {
142
+ await import_Abort.Abort.race(discovery.abort, active.finished);
143
+ } finally {
144
+ active.waiting.delete(discovery);
145
+ if (active.waiting.size === 0) {
146
+ active.abort();
147
+ this.#discovering.delete(discovery.name);
148
+ }
149
+ }
150
+ }
151
+ async #discover(solicitation, abort) {
152
+ let timeout = import_TimeUnit.Millis.floor((0, import_TimeUnit.Millis)(20 + 100 * (this.#names.entropy.randomUint32 / Math.pow(2, 32))));
153
+ for (const nextTimeout of this.#schedule) {
154
+ var _stack = [];
155
+ try {
156
+ const delay = __using(_stack, new import_Abort.Abort({ abort, timeout }));
157
+ await delay;
158
+ if (abort.aborted) {
159
+ break;
160
+ }
161
+ timeout = nextTimeout;
162
+ this.solicit(solicitation);
163
+ } catch (_) {
164
+ var _error = _, _hasError = true;
165
+ } finally {
166
+ __callDispose(_stack, _error, _hasError);
167
+ }
168
+ }
169
+ }
170
+ async close() {
171
+ this.#abort();
172
+ await this.#workers;
173
+ }
174
+ async #emitSolicitations() {
175
+ while (true) {
176
+ await this.#abort.race(this.#namesReady);
177
+ if (this.#abort.aborted) {
178
+ return;
179
+ }
180
+ await this.#abort.race(import_Time.Time.sleep("discovery solicitor delay", 0));
181
+ if (this.#abort.aborted) {
182
+ return;
183
+ }
184
+ const entries = [...this.#toSolicit.values()];
185
+ this.#namesReady.value = false;
186
+ this.#toSolicit.clear();
187
+ const queries = Array();
188
+ const answers = Array();
189
+ for (const {
190
+ name: { qname: name, records },
191
+ recordTypes
192
+ } of entries) {
193
+ for (const recordType of recordTypes) {
194
+ queries.push({ name, recordClass: import_DnsCodec.DnsRecordClass.IN, recordType });
195
+ }
196
+ answers.push(...records);
197
+ }
198
+ try {
199
+ await this.#abort.race(
200
+ this.#names.socket.send({
201
+ messageType: import_DnsCodec.DnsMessageType.Query,
202
+ queries,
203
+ answers
204
+ })
205
+ );
206
+ } catch (e) {
207
+ logger.error("Unhandled error soliciting DNS-SD names:", e);
208
+ }
209
+ }
210
+ }
211
+ }
212
+ //# sourceMappingURL=DnssdSolicitor.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/DnssdSolicitor.ts"],
4
+ "mappings": "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",
5
+ "names": ["DnssdSolicitor"]
6
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ServerAddressUdp } from "#net/ServerAddress.js";
7
+ import { ServerAddressSet } from "#net/ServerAddressSet.js";
8
+ import { AsyncObservable } from "#util/Observable.js";
9
+ import { DnssdName } from "./DnssdName.js";
10
+ import { DnssdNames } from "./DnssdNames.js";
11
+ import { IpServiceStatus } from "./IpServiceStatus.js";
12
+ /**
13
+ * A service addressable by IP that updates as {@link DnssdNames} change.
14
+ */
15
+ export declare class IpService {
16
+ #private;
17
+ constructor(name: string, via: string, names: DnssdNames);
18
+ /**
19
+ * The DNS-SD name.
20
+ */
21
+ get name(): DnssdName;
22
+ /**
23
+ * Other DNS-SD names.
24
+ */
25
+ get names(): DnssdNames;
26
+ /**
27
+ * Identifier used for logging.
28
+ */
29
+ get via(): string;
30
+ /**
31
+ * Status details of the service.
32
+ */
33
+ get status(): IpServiceStatus;
34
+ /**
35
+ * Release resources.
36
+ */
37
+ close(): Promise<void>;
38
+ /**
39
+ * Known addresses.
40
+ */
41
+ get addresses(): ServerAddressSet<ServerAddressUdp>;
42
+ /**
43
+ * Values from TXT records.
44
+ */
45
+ get parameters(): Map<string, string>;
46
+ /**
47
+ * Emits when the service changes.
48
+ */
49
+ get changed(): AsyncObservable<[], void>;
50
+ map<T>(fn: (addr: ServerAddressUdp) => T): T[];
51
+ /**
52
+ * Stream address updates, starting with initial set of addresses.
53
+ *
54
+ * Outputs addresses in priority order so the stream may be used directly for establishing new connections.
55
+ *
56
+ * If no addresses are present, triggers discovery using standard MDNS backoff schedule.
57
+ */
58
+ addressChanges({ abort, order, }?: {
59
+ abort?: AbortSignal;
60
+ order?: ServerAddressSet.Comparator;
61
+ ipv4?: boolean;
62
+ }): AsyncGenerator<{
63
+ kind: "add" | "delete";
64
+ address: ServerAddressUdp;
65
+ }>;
66
+ }
67
+ export declare namespace IpService {
68
+ interface AddressChange {
69
+ kind: "add" | "delete";
70
+ address: ServerAddressUdp;
71
+ }
72
+ }
73
+ //# sourceMappingURL=IpService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IpService.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/IpService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAmB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAuC,MAAM,qBAAqB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,qBAAa,SAAS;;gBAWN,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU;IAgBxD;;OAEG;IACH,IAAI,IAAI,cAEP;IAED;;OAEG;IACH,IAAI,KAAK,eAER;IAED;;OAEG;IACH,IAAI,GAAG,WAEN;IAED;;OAEG;IACH,IAAI,MAAM,oBAET;IAED;;OAEG;IACG,KAAK;IAQX;;OAEG;IACH,IAAI,SAAS,uCAEZ;IAED;;OAEG;IACH,IAAI,UAAU,wBAEb;IAED;;OAEG;IACH,IAAI,OAAO,8BAEV;IAED,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,GAAG,CAAC,EAAE;IAI9C;;;;;;OAMG;IACI,cAAc,CAAC,EAClB,KAAK,EACL,KAA4C,GAC/C,GAAE;QACC,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,EAAE,OAAO,CAAC;KACb,GAAG,cAAc,CAAC;QAAE,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,gBAAgB,CAAA;KAAE,CAAC;CAyLjF;AAED,yBAAiB,SAAS,CAAC;IACvB,UAAiB,aAAa;QAC1B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;QACvB,OAAO,EAAE,gBAAgB,CAAC;KAC7B;CACJ"}