@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,191 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var IpServiceStatus_exports = {};
20
+ __export(IpServiceStatus_exports, {
21
+ IpServiceStatus: () => IpServiceStatus
22
+ });
23
+ module.exports = __toCommonJS(IpServiceStatus_exports);
24
+ var import_Diagnostic = require("#log/Diagnostic.js");
25
+ var import_Logger = require("#log/Logger.js");
26
+ var import_MatterError = require("#MatterError.js");
27
+ var import_ServerAddress = require("#net/ServerAddress.js");
28
+ var import_Time = require("#time/Time.js");
29
+ var import_Abort = require("#util/Abort.js");
30
+ var import_Error = require("#util/Error.js");
31
+ var import_Set = require("#util/Set.js");
32
+ var import_IpServiceResolution = require("./IpServiceResolution.js");
33
+ /**
34
+ * @license
35
+ * Copyright 2022-2026 Matter.js Authors
36
+ * SPDX-License-Identifier: Apache-2.0
37
+ */
38
+ const logger = import_Logger.Logger.get("IpServiceStatus");
39
+ class IpServiceStatus {
40
+ #service;
41
+ #isReachable = false;
42
+ #connecting = new import_Set.BasicSet();
43
+ #resolveAbort;
44
+ #resolving;
45
+ #connectionInitiatedAt;
46
+ #lastReceiptAt;
47
+ constructor(service) {
48
+ this.#service = service;
49
+ }
50
+ async close() {
51
+ this.#stopResolving();
52
+ if (this.#resolving) {
53
+ await this.#resolving;
54
+ }
55
+ }
56
+ /**
57
+ * Is the service actively connecting?
58
+ *
59
+ * This is true so long as a promise passed to {@link connecting} is unresolved.
60
+ */
61
+ get isConnecting() {
62
+ return this.#connecting.size > 0;
63
+ }
64
+ /**
65
+ * Is the service currently reachable?
66
+ *
67
+ * This value is writable. If you set {@link isReachable} to false and {@link isConnecting} is true, the service
68
+ * enters discovery mode and begins active solicitation so long as neither condition changes.
69
+ *
70
+ * The service sets {@link isReachable} to true automatically if:
71
+ *
72
+ * - It discovers a new (previously unknown) address, or
73
+ *
74
+ * - The input promise to {@link connecting} resolves to true
75
+ *
76
+ * The service sets {@link isReachable} to false automatically if the input promise to {@link connecting} resolves
77
+ * to false.
78
+ */
79
+ get isReachable() {
80
+ return this.#isReachable;
81
+ }
82
+ /**
83
+ * Are we actively performing MDNS discovery for the service?
84
+ */
85
+ get isResolving() {
86
+ return this.#resolving !== void 0;
87
+ }
88
+ set isReachable(isReachable) {
89
+ if (this.#isReachable === isReachable) {
90
+ return;
91
+ }
92
+ this.#isReachable = isReachable;
93
+ if (isReachable) {
94
+ this.#maybeStopResolving();
95
+ } else {
96
+ this.#maybeStartResolving();
97
+ }
98
+ }
99
+ get lastReceiptAt() {
100
+ return this.#lastReceiptAt;
101
+ }
102
+ set lastReceiptAt(time) {
103
+ this.#lastReceiptAt = time;
104
+ }
105
+ get connectionInitiatedAt() {
106
+ return this.#connectionInitiatedAt;
107
+ }
108
+ /**
109
+ * Register a new connection attempt.
110
+ *
111
+ * If {@link result} resolves as true the service is marked as reachable. If {@link result} resolves as false
112
+ * reachability is not modified.
113
+ *
114
+ * If {@link result} throws an error other than {@link AbortedError}, the service is marked as unreachable and if
115
+ * the error logged.
116
+ *
117
+ * {@link isConnecting} will be true until {@link result} resolves.
118
+ */
119
+ connecting(result) {
120
+ logger.debug(this.#service.via, "Connecting");
121
+ result.then(
122
+ (returned) => {
123
+ this.#connecting.delete(result);
124
+ if (!this.#connecting.size) {
125
+ this.#connectionInitiatedAt = void 0;
126
+ }
127
+ if (returned) {
128
+ this.isReachable = true;
129
+ logger.info(this.#service.via, "Connected");
130
+ } else {
131
+ logger.debug(this.#service.via, "Connect attempt aborted");
132
+ }
133
+ this.#maybeStopResolving();
134
+ },
135
+ (error) => {
136
+ this.#connecting.delete(result);
137
+ if (!(error instanceof import_MatterError.AbortedError)) {
138
+ return;
139
+ }
140
+ logger.error(this.#service.via, "Connection error:", (0, import_Error.asError)(error));
141
+ this.#isReachable = false;
142
+ this.#maybeStartResolving();
143
+ }
144
+ );
145
+ this.#connectionInitiatedAt = import_Time.Time.nowMs;
146
+ this.#connecting.add(result);
147
+ this.#maybeStartResolving();
148
+ }
149
+ #maybeStartResolving() {
150
+ if (this.#isReachable || !this.isConnecting || this.#resolveAbort) {
151
+ return;
152
+ }
153
+ const numAddresses = this.#service.addresses.size;
154
+ let why;
155
+ switch (numAddresses) {
156
+ case 0:
157
+ why = "need address";
158
+ break;
159
+ case 1:
160
+ why = "address is unreachable";
161
+ break;
162
+ default:
163
+ why = `${numAddresses} known addresses are unreachable`;
164
+ }
165
+ logger.info(this.#service.via, "Resolving", import_Diagnostic.Diagnostic.weak(`(${why})`));
166
+ this.#resolveAbort = new import_Abort.Abort();
167
+ this.#resolving = (0, import_IpServiceResolution.IpServiceResolution)(this.#service, this.#resolveAbort).finally(() => {
168
+ if (this.#resolveAbort?.aborted === false) {
169
+ const addresses = [...this.#service.addresses].map(import_ServerAddress.ServerAddress.urlFor);
170
+ logger.debug(this.#service.via, `Resolved as ${addresses.join(", ")}`);
171
+ }
172
+ this.#resolveAbort?.close();
173
+ this.#resolveAbort = void 0;
174
+ this.#resolving = void 0;
175
+ });
176
+ }
177
+ #maybeStopResolving() {
178
+ if (!this.#isReachable || this.isConnecting || !this.#resolveAbort) {
179
+ return;
180
+ }
181
+ this.#stopResolving();
182
+ }
183
+ #stopResolving() {
184
+ if (!this.#resolveAbort) {
185
+ return;
186
+ }
187
+ this.#resolveAbort();
188
+ logger.debug(this.#service.via, "Stopped resolving");
189
+ }
190
+ }
191
+ //# 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"}
@@ -15,6 +15,12 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
15
15
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
16
  var dns_sd_exports = {};
17
17
  module.exports = __toCommonJS(dns_sd_exports);
18
+ __reExport(dns_sd_exports, require("./DnssdName.js"), module.exports);
19
+ __reExport(dns_sd_exports, require("./DnssdNames.js"), module.exports);
20
+ __reExport(dns_sd_exports, require("./DnssdSolicitor.js"), module.exports);
21
+ __reExport(dns_sd_exports, require("./IpService.js"), module.exports);
22
+ __reExport(dns_sd_exports, require("./IpServiceResolution.js"), module.exports);
23
+ __reExport(dns_sd_exports, require("./IpServiceStatus.js"), module.exports);
18
24
  __reExport(dns_sd_exports, require("./MdnsSocket.js"), module.exports);
19
25
  /**
20
26
  * @license
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/net/dns-sd/index.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,2BAAc,4BANd;AAAA;AAAA;AAAA;AAAA;AAAA;",
4
+ "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,2BAAc,2BANd;AAOA,2BAAc,4BAPd;AAQA,2BAAc,gCARd;AASA,2BAAc,2BATd;AAUA,2BAAc,qCAVd;AAWA,2BAAc,iCAXd;AAYA,2BAAc,4BAZd;AAAA;AAAA;AAAA;AAAA;AAAA;",
5
5
  "names": []
6
6
  }
@@ -7,6 +7,7 @@ import { Channel, ChannelType, IpNetworkChannel } from "#net/Channel.js";
7
7
  import { ConnectionlessTransport } from "#net/ConnectionlessTransport.js";
8
8
  import { Network } from "#net/Network.js";
9
9
  import { Bytes } from "#util/Bytes.js";
10
+ import { Observable } from "#util/index.js";
10
11
  import { ServerAddress, ServerAddressUdp } from "../ServerAddress.js";
11
12
  import { UdpChannel } from "./UdpChannel.js";
12
13
  export declare class UdpInterface implements ConnectionlessTransport {
@@ -19,14 +20,15 @@ export declare class UdpInterface implements ConnectionlessTransport {
19
20
  onData(listener: (channel: Channel<Bytes>, messageBytes: Bytes) => void): ConnectionlessTransport.Listener;
20
21
  get port(): number;
21
22
  close(): Promise<void>;
22
- addMembership(address: string): import("../../index.js").MaybePromise<void>;
23
- dropMembership(address: string): import("../../index.js").MaybePromise<void>;
23
+ addMembership(address: string): import("#util/index.js").MaybePromise<void>;
24
+ dropMembership(address: string): import("#util/index.js").MaybePromise<void>;
24
25
  }
25
26
  export declare class UdpConnection implements IpNetworkChannel<Bytes> {
26
27
  #private;
27
28
  readonly isReliable = false;
28
29
  readonly supportsLargeMessages = false;
29
30
  readonly type = ChannelType.UDP;
31
+ readonly networkAddressChanged: Observable<[ServerAddressUdp], void>;
30
32
  constructor(server: UdpChannel, peerAddress: string, peerPort: number);
31
33
  get maxPayloadSize(): number;
32
34
  send(data: Bytes): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"UdpInterface.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,YAAa,YAAW,uBAAuB;;WAG3C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;gBAMpG,MAAM,EAAE,UAAU;IAI9B,SAAS,KAAK,MAAM,eAEnB;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM;IAIrC,WAAW,CAAC,OAAO,EAAE,aAAa;IAQxC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,IAAI,GAAG,uBAAuB,CAAC,QAAQ;IAM1G,IAAI,IAAI,WAEP;IAED,KAAK;IAIL,aAAa,CAAC,OAAO,EAAE,MAAM;IAI7B,cAAc,CAAC,OAAO,EAAE,MAAM;CAGjC;AAED,qBAAa,aAAc,YAAW,gBAAgB,CAAC,KAAK,CAAC;;IACzD,QAAQ,CAAC,UAAU,SAAS;IAC5B,QAAQ,CAAC,qBAAqB,SAAS;IACvC,QAAQ,CAAC,IAAI,mBAAmB;gBAKpB,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMrE,IAAI,cAAc,WAEjB;IAED,IAAI,CAAC,IAAI,EAAE,KAAK;IAIhB,IAAI,IAAI,WAEP;IAED,IAAI,cAAc,IAAI,gBAAgB,CAErC;IAEK,KAAK;CAGd"}
1
+ {"version":3,"file":"UdpInterface.d.ts","sourceRoot":"","sources":["../../../../src/net/udp/UdpInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAgB,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,qBAAa,YAAa,YAAW,uBAAuB;;WAG3C,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;gBAMpG,MAAM,EAAE,UAAU;IAI9B,SAAS,KAAK,MAAM,eAEnB;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM;IAIrC,WAAW,CAAC,OAAO,EAAE,aAAa;IAQxC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,KAAK,KAAK,IAAI,GAAG,uBAAuB,CAAC,QAAQ;IAM1G,IAAI,IAAI,WAEP;IAED,KAAK;IAIL,aAAa,CAAC,OAAO,EAAE,MAAM;IAI7B,cAAc,CAAC,OAAO,EAAE,MAAM;CAGjC;AAED,qBAAa,aAAc,YAAW,gBAAgB,CAAC,KAAK,CAAC;;IACzD,QAAQ,CAAC,UAAU,SAAS;IAC5B,QAAQ,CAAC,qBAAqB,SAAS;IACvC,QAAQ,CAAC,IAAI,mBAAmB;IAIhC,QAAQ,CAAC,qBAAqB,uCAAoC;gBAEtD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMrE,IAAI,cAAc,WAEjB;IAED,IAAI,CAAC,IAAI,EAAE,KAAK;IAIhB,IAAI,IAAI,WAEP;IAED,IAAI,cAAc,IAAI,gBAAgB,CAErC;IAEK,KAAK;CAGd"}
@@ -24,6 +24,7 @@ __export(UdpInterface_exports, {
24
24
  module.exports = __toCommonJS(UdpInterface_exports);
25
25
  var import_Channel = require("#net/Channel.js");
26
26
  var import_Network = require("#net/Network.js");
27
+ var import_util = require("#util/index.js");
27
28
  /**
28
29
  * @license
29
30
  * Copyright 2022-2026 Matter.js Authors
@@ -77,6 +78,8 @@ class UdpConnection {
77
78
  #server;
78
79
  #peerAddress;
79
80
  #peerPort;
81
+ networkAddressChanged = (0, import_util.Observable)();
82
+ // no change so will basically never emit
80
83
  constructor(server, peerAddress, peerPort) {
81
84
  this.#server = server;
82
85
  this.#peerAddress = peerAddress;
@@ -89,7 +92,7 @@ class UdpConnection {
89
92
  return this.#server.send(this.#peerAddress, this.#peerPort, data);
90
93
  }
91
94
  get name() {
92
- return `${this.type}://[${this.#peerAddress}]:${this.#peerPort}`;
95
+ return `${this.type}://${this.#peerAddress.includes(":") ? `[${this.#peerAddress}]` : this.#peerAddress}:${this.#peerPort}`;
93
96
  }
94
97
  get networkAddress() {
95
98
  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;AAAA;AAMA,qBAAuD;AAEvD,qBAAsC;AARtC;AAAA;AAAA;AAAA;AAAA;AAaO,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,4BAAa,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,2BAAY;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,OAAO,KAAK,YAAY,KAAK,KAAK,SAAS;AAAA,EAClE;AAAA,EAEA,IAAI,iBAAmC;AACnC,WAAO,EAAE,MAAM,OAAO,IAAI,KAAK,cAAc,MAAM,KAAK,UAAU;AAAA,EACtE;AAAA,EAEA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAuD;AAEvD,qBAAsC;AAEtC,kBAA2B;AAV3B;AAAA;AAAA;AAAA;AAAA;AAcO,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,4BAAa,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,2BAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,4BAAwB,wBAA+B;AAAA;AAAA,EAEhE,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
  }
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { ServerAddressUdp } from "#net/ServerAddress.js";
7
+ import { Observable } from "#util/index.js";
7
8
  export declare enum ChannelType {
8
9
  UDP = "udp",
9
10
  BLE = "ble",
@@ -26,6 +27,15 @@ export interface Channel<T> {
26
27
  }
27
28
  export interface IpNetworkChannel<T> extends Channel<T> {
28
29
  networkAddress: ServerAddressUdp;
30
+ networkAddressChanged: Observable<[ServerAddressUdp]>;
29
31
  }
32
+ /**
33
+ * Returns true (and guards types) if the channel is an IP channel
34
+ */
30
35
  export declare function isIpNetworkChannel<T>(channel?: Channel<T>): channel is IpNetworkChannel<T>;
36
+ /**
37
+ * Checks if two IPNetworkChannels are referencing the same address.
38
+ * Both the channel type (UDP/TCP) and the address (including port) need to match.
39
+ */
40
+ export declare function sameIpNetworkChannel<T>(channel1: IpNetworkChannel<T>, channel2: IpNetworkChannel<T>): boolean;
31
41
  //# sourceMappingURL=Channel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/net/Channel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,oBAAY,WAAW;IACnB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACd;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACtB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IAEvB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IAEpB,+CAA+C;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAE/B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,WAAW,CAAC;IAElB,iDAAiD;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,kCAAkC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACnD,cAAc,EAAE,gBAAgB,CAAC;CACpC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE1F"}
1
+ {"version":3,"file":"Channel.d.ts","sourceRoot":"","sources":["../../../src/net/Channel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,oBAAY,WAAW;IACnB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACd;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACtB,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IAEvB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IAEpB,+CAA+C;IAC/C,qBAAqB,EAAE,OAAO,CAAC;IAE/B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IAEb,IAAI,EAAE,WAAW,CAAC;IAElB,iDAAiD;IACjD,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B,kCAAkC;IAClC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAGD,MAAM,WAAW,gBAAgB,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;IACnD,cAAc,EAAE,gBAAgB,CAAC;IACjC,qBAAqB,EAAE,UAAU,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;CACzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE1F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,WAInG"}
@@ -13,8 +13,14 @@ var ChannelType = /* @__PURE__ */ ((ChannelType2) => {
13
13
  function isIpNetworkChannel(channel) {
14
14
  return isObject(channel?.networkAddress);
15
15
  }
16
+ function sameIpNetworkChannel(channel1, channel2) {
17
+ const { networkAddress: addr1 } = channel1;
18
+ const { networkAddress: addr2 } = channel2;
19
+ return addr1.type === addr2.type && addr1.ip === addr2.ip && addr1.port === addr2.port;
20
+ }
16
21
  export {
17
22
  ChannelType,
18
- isIpNetworkChannel
23
+ isIpNetworkChannel,
24
+ sameIpNetworkChannel
19
25
  };
20
26
  //# sourceMappingURL=Channel.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/Channel.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,gBAAgB;AAElB,IAAK,cAAL,kBAAKA,iBAAL;AACH,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,SAAM;AAHE,SAAAA;AAAA,GAAA;AAgCL,SAAS,mBAAsB,SAAsD;AACxF,SAAO,SAAU,SAA6C,cAAc;AAChF;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,gBAAgB;AAGlB,IAAK,cAAL,kBAAKA,iBAAL;AACH,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,SAAM;AACN,EAAAA,aAAA,SAAM;AAHE,SAAAA;AAAA,GAAA;AAqCL,SAAS,mBAAsB,SAAsD;AACxF,SAAO,SAAU,SAA6C,cAAc;AAChF;AAMO,SAAS,qBAAwB,UAA+B,UAA+B;AAClG,QAAM,EAAE,gBAAgB,MAAM,IAAI;AAClC,QAAM,EAAE,gBAAgB,MAAM,IAAI;AAClC,SAAO,MAAM,SAAS,MAAM,QAAQ,MAAM,OAAO,MAAM,MAAM,MAAM,SAAS,MAAM;AACtF;",
5
5
  "names": ["ChannelType"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;CAC7B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAS9C,aAAa,CACrB;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAYrD;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,cAuBnD;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAcnE;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAY7D;IAED;;;;OAIG;IACH,KAAY,mBAAmB;QAC3B,QAAQ,IAAA;QACR,eAAe,IAAA;QACf,IAAI,IAAA;QACJ,IAAI,IAAA;QACJ,MAAM,IAAI;KACb;IAED,SAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,uBAkB3D;CACJ"}
1
+ {"version":3,"file":"ServerAddress.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC5B;;OAEG;IACH,YAAY,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,GAAG,EAAE,QAAQ,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;IAEtB;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CAChB,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,iBAAiB,EAAE,MAAM,CAAC;CAC7B,GAAG,aAAa,CAAC;AAElB,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnF,wBAAgB,aAAa,CAAC,UAAU,EAAE,aAAa,GAS9C,aAAa,CACrB;AAED,yBAAiB,aAAa,CAAC;IAC3B,SAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAarD;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,cAuBnD;IAED,SAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAcnE;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAY7D;IAED;;;;OAIG;IACH,KAAY,mBAAmB;QAC3B,QAAQ,IAAA;QACR,eAAe,IAAA;QACf,IAAI,IAAA;QACJ,IAAI,IAAA;QACJ,MAAM,IAAI;KACb;IAED,SAAgB,qBAAqB,CAAC,OAAO,EAAE,aAAa,uBAkB3D;CACJ"}
@@ -21,7 +21,8 @@ function ServerAddress(definition) {
21
21
  switch (address.type) {
22
22
  case "udp":
23
23
  case "tcp":
24
- return `${address.type}://${address.ip}:${address.port}`;
24
+ const ip = address.ip;
25
+ return `${address.type}://${ip.includes(":") ? `[${ip}]` : ip}:${address.port}`;
25
26
  case "ble":
26
27
  return `ble://${address.peripheralAddress}`;
27
28
  default:
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/ServerAddress.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAwDlB,SAAS,cAAc,YAA2B;AACrD,SAAO;AAAA,IACH,KAAK;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,GAAG;AAAA,EACP;AACJ;AAAA,CAEO,CAAUA,mBAAV;AACI,WAAS,OAAO,SAAgC;AACnD,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,eAAO,GAAG,QAAQ,IAAI,MAAM,QAAQ,EAAE,IAAI,QAAQ,IAAI;AAAA,MAE1D,KAAK;AACD,eAAO,SAAS,QAAQ,iBAAiB;AAAA,MAE7C;AACI,eAAO,GAAI,QAAgB,IAAI;AAAA,IACvC;AAAA,EACJ;AAZO,EAAAA,eAAS;AAcT,WAAS,cAAc,SAAwB;AAClD,UAAM,aAAa,MAAe;AAElC,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,mBAAW,KAAK,GAAG,QAAQ,IAAI,OAAO,WAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtF;AAAA,MAEJ,KAAK;AACD,mBAAW,KAAK,UAAU,WAAW,OAAO,QAAQ,iBAAiB,CAAC;AACtE;AAAA,MAEJ;AACI,mBAAW,KAAK,GAAI,QAAgB,IAAI,KAAK;AAC7C;AAAA,IACR;AAEA,QAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,UAAU;AACrD,iBAAW,KAAK,SAAS,SAAS,OAAO,QAAQ,GAAG,CAAC;AAAA,IACzD;AAEA,WAAO,WAAW,OAAO,GAAG,UAAU;AAAA,EAC1C;AAvBO,EAAAA,eAAS;AAyBT,WAAS,QAAQ,GAAkB,GAA2B;AACjE,QAAI,EAAE,SAAS,EAAE,MAAM;AACnB,aAAO;AAAA,IACX;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AAAA,IACzC;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,sBAAsB,EAAE;AAAA,IACrC;AAEA,WAAO;AAAA,EACX;AAdO,EAAAA,eAAS;AAsBT,WAAS,SAAS,QAAsC;AAC3D,QAAI,OAAO,gBAAgB,QAAW;AAClC,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,cAAc,UAAa,OAAO,YAAY,OAAO,aAAa;AACzE,aAAO;AAAA,QACH,WAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAZO,EAAAA,eAAS;AAmBT,MAAK;AAAL,IAAKC,yBAAL;AACH,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA,YAAS,KAAT;AAAA,KALQ,sBAAAD,eAAA,wBAAAA,eAAA;AAQL,WAAS,sBAAsB,SAAwB;AAC1D,QAAI,EAAE,QAAQ,UAAU;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,IAAI,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,SAAS,GAAG,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAlBO,EAAAA,eAAS;AAAA,GAzFH;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AAwDlB,SAAS,cAAc,YAA2B;AACrD,SAAO;AAAA,IACH,KAAK;AAAA,IACL,cAAc;AAAA,IACd,WAAW;AAAA,IACX,aAAa;AAAA,IACb,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,GAAG;AAAA,EACP;AACJ;AAAA,CAEO,CAAUA,mBAAV;AACI,WAAS,OAAO,SAAgC;AACnD,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,cAAM,KAAK,QAAQ;AACnB,eAAO,GAAG,QAAQ,IAAI,MAAM,GAAG,SAAS,GAAG,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,QAAQ,IAAI;AAAA,MAEjF,KAAK;AACD,eAAO,SAAS,QAAQ,iBAAiB;AAAA,MAE7C;AACI,eAAO,GAAI,QAAgB,IAAI;AAAA,IACvC;AAAA,EACJ;AAbO,EAAAA,eAAS;AAeT,WAAS,cAAc,SAAwB;AAClD,UAAM,aAAa,MAAe;AAElC,YAAQ,QAAQ,MAAM;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACD,mBAAW,KAAK,GAAG,QAAQ,IAAI,OAAO,WAAW,OAAO,QAAQ,EAAE,GAAG,KAAK,QAAQ,IAAI;AACtF;AAAA,MAEJ,KAAK;AACD,mBAAW,KAAK,UAAU,WAAW,OAAO,QAAQ,iBAAiB,CAAC;AACtE;AAAA,MAEJ;AACI,mBAAW,KAAK,GAAI,QAAgB,IAAI,KAAK;AAC7C;AAAA,IACR;AAEA,QAAI,SAAS,WAAW,OAAO,QAAQ,QAAQ,UAAU;AACrD,iBAAW,KAAK,SAAS,SAAS,OAAO,QAAQ,GAAG,CAAC;AAAA,IACzD;AAEA,WAAO,WAAW,OAAO,GAAG,UAAU;AAAA,EAC1C;AAvBO,EAAAA,eAAS;AAyBT,WAAS,QAAQ,GAAkB,GAA2B;AACjE,QAAI,EAAE,SAAS,EAAE,MAAM;AACnB,aAAO;AAAA,IACX;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;AAAA,IACzC;AAEA,QAAI,EAAE,SAAS,SAAS,EAAE,SAAS,OAAO;AACtC,aAAO,EAAE,sBAAsB,EAAE;AAAA,IACrC;AAEA,WAAO;AAAA,EACX;AAdO,EAAAA,eAAS;AAsBT,WAAS,SAAS,QAAsC;AAC3D,QAAI,OAAO,gBAAgB,QAAW;AAClC,aAAO;AAAA,IACX;AAEA,QAAI,OAAO,cAAc,UAAa,OAAO,YAAY,OAAO,aAAa;AACzE,aAAO;AAAA,QACH,WAAW,OAAO;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAZO,EAAAA,eAAS;AAmBT,MAAK;AAAL,IAAKC,yBAAL;AACH,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA;AACA,IAAAA,0CAAA,YAAS,KAAT;AAAA,KALQ,sBAAAD,eAAA,wBAAAA,eAAA;AAQL,WAAS,sBAAsB,SAAwB;AAC1D,QAAI,EAAE,QAAQ,UAAU;AACpB,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,IAAI,GAAG;AAC7B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,WAAW,MAAM,GAAG;AAC/B,aAAO;AAAA,IACX;AAEA,QAAI,QAAQ,GAAG,SAAS,GAAG,GAAG;AAC1B,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EACX;AAlBO,EAAAA,eAAS;AAAA,GA1FH;",
5
5
  "names": ["ServerAddress", "SelectionPreference"]
6
6
  }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DnsRecord, DnsRecordType, SrvRecordValue } from "#codec/DnsCodec.js";
7
+ import type { Timestamp } from "#time/Timestamp.js";
8
+ import { AsyncObserver, BasicObservable } from "#util/Observable.js";
9
+ import { MaybePromise } from "#util/Promises.js";
10
+ /**
11
+ * Manages records associated with a single DNS-SD qname.
12
+ *
13
+ * Every DNS-SD qname of interest has a 1:1 relationship with a single instance of this class in the context of a
14
+ * {@link DnssdNames}. We therefore can use the qname or {@link DnssdName} interchangeably.
15
+ *
16
+ * An {@link DnssdName} is created when a new name is discovered or requested by another component. The name
17
+ * automatically deletes when there are no longer observers or unexpired records.
18
+ */
19
+ export declare class DnssdName extends BasicObservable<[changes: DnssdName.Changes], MaybePromise> {
20
+ #private;
21
+ readonly qname: string;
22
+ constructor(qname: string, context: DnssdName.Context);
23
+ off(observer: AsyncObserver<[]>): void;
24
+ close(): Promise<void>;
25
+ get records(): MapIterator<DnssdName.Record>;
26
+ get parameters(): Map<string, string>;
27
+ get isDiscovered(): boolean;
28
+ installRecord(record: DnsRecord<any>): false | undefined;
29
+ deleteRecord(record: DnsRecord, ifOlderThan?: Timestamp): void;
30
+ }
31
+ export declare namespace DnssdName {
32
+ interface Context {
33
+ delete(name: DnssdName): void;
34
+ registerForExpiration(record: Record): void;
35
+ unregisterForExpiration(record: Record): void;
36
+ }
37
+ interface Expiration {
38
+ expiresAt: Timestamp;
39
+ }
40
+ interface PointerRecord extends DnsRecord<string>, Expiration {
41
+ recordType: DnsRecordType.PTR;
42
+ }
43
+ interface HostRecord extends DnsRecord<string>, Expiration {
44
+ recordType: DnsRecordType.A | DnsRecordType.AAAA;
45
+ }
46
+ interface ServiceRecord extends DnsRecord<SrvRecordValue>, Expiration {
47
+ recordType: DnsRecordType.SRV;
48
+ }
49
+ type Record = PointerRecord | ServiceRecord | HostRecord;
50
+ interface Changes {
51
+ name: DnssdName;
52
+ updated?: Record[];
53
+ deleted?: Record[];
54
+ }
55
+ }
56
+ //# sourceMappingURL=DnssdName.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DnssdName.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/DnssdName.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKjD;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,eAAe,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;;IAUlF,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACtB,OAAO,EAAE,SAAS,CAAC,OAAO;IAMrB,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;IAKlC,KAAK;IASX,IAAI,OAAO,kCAEV;IAED,IAAI,UAAU,wBAKb;IAED,IAAI,YAAY,YAEf;IAED,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;IAoCpC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS;CA6F1D;AAqBD,yBAAiB,SAAS,CAAC;IACvB,UAAiB,OAAO;QACpB,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;QAC9B,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5C,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;KACjD;IAED,UAAiB,UAAU;QACvB,SAAS,EAAE,SAAS,CAAC;KACxB;IAED,UAAiB,aAAc,SAAQ,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU;QAChE,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;KACjC;IAED,UAAiB,UAAW,SAAQ,SAAS,CAAC,MAAM,CAAC,EAAE,UAAU;QAC7D,UAAU,EAAE,aAAa,CAAC,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;KACpD;IAED,UAAiB,aAAc,SAAQ,SAAS,CAAC,cAAc,CAAC,EAAE,UAAU;QACxE,UAAU,EAAE,aAAa,CAAC,GAAG,CAAC;KACjC;IAED,KAAY,MAAM,GAAG,aAAa,GAAG,aAAa,GAAG,UAAU,CAAC;IAEhE,UAAiB,OAAO;QACpB,IAAI,EAAE,SAAS,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACtB;CACJ"}
@@ -0,0 +1,173 @@
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 { Logger } from "#log/Logger.js";
8
+ import { Time } from "#time/Time.js";
9
+ import { BasicObservable } from "#util/Observable.js";
10
+ const logger = Logger.get("DnssdName");
11
+ class DnssdName extends BasicObservable {
12
+ constructor(qname, context) {
13
+ super((e) => logger.error(`Unhandled error in observer for DNS name "${qname}":`, e));
14
+ this.qname = qname;
15
+ this.#context = context;
16
+ }
17
+ #context;
18
+ #records = /* @__PURE__ */ new Map();
19
+ #recordCount = 0;
20
+ #changes;
21
+ #notified;
22
+ #maybeDeleting;
23
+ #parameters;
24
+ off(observer) {
25
+ super.off(observer);
26
+ this.#deleteIfUnused();
27
+ }
28
+ async close() {
29
+ if (this.#notified) {
30
+ await this.#notified;
31
+ }
32
+ if (this.#maybeDeleting) {
33
+ await this.#maybeDeleting;
34
+ }
35
+ }
36
+ get records() {
37
+ return this.#records.values();
38
+ }
39
+ get parameters() {
40
+ if (this.#parameters === void 0) {
41
+ this.#parameters = /* @__PURE__ */ new Map();
42
+ }
43
+ return this.#parameters;
44
+ }
45
+ get isDiscovered() {
46
+ return !!this.#recordCount;
47
+ }
48
+ installRecord(record) {
49
+ if (record.recordType === DnsRecordType.TXT) {
50
+ const entries = record.value;
51
+ for (const entry of entries) {
52
+ const pos = entry.indexOf("=");
53
+ if (pos === -1) {
54
+ this.parameters.set(entry, "");
55
+ } else {
56
+ this.parameters.set(entry.slice(0, pos), entry.slice(pos + 1));
57
+ }
58
+ }
59
+ }
60
+ const key = keyOf(record);
61
+ if (key === void 0) {
62
+ this.#deleteIfUnused();
63
+ return false;
64
+ }
65
+ const oldRecord = this.#records.get(key);
66
+ if (oldRecord) {
67
+ this.#context.unregisterForExpiration(oldRecord);
68
+ } else {
69
+ this.#recordCount++;
70
+ }
71
+ const recordWithExpire = { ...record, expiresAt: Time.nowMs + record.ttl };
72
+ this.#records.set(key, recordWithExpire);
73
+ this.#context.registerForExpiration(recordWithExpire);
74
+ this.#notify("update", key, recordWithExpire);
75
+ }
76
+ deleteRecord(record, ifOlderThan) {
77
+ const key = keyOf(record);
78
+ if (key === void 0) {
79
+ this.#deleteIfUnused();
80
+ return;
81
+ }
82
+ const recordWithExpire = this.#records?.get(key);
83
+ if (!recordWithExpire) {
84
+ this.#deleteIfUnused();
85
+ return;
86
+ }
87
+ if (ifOlderThan !== void 0 && recordWithExpire.expiresAt - recordWithExpire.ttl >= ifOlderThan) {
88
+ return;
89
+ }
90
+ this.#records.delete(key);
91
+ this.#recordCount--;
92
+ this.#context.unregisterForExpiration(recordWithExpire);
93
+ if (this.#deleteIfUnused()) {
94
+ return;
95
+ }
96
+ this.#notify("delete", key, recordWithExpire);
97
+ }
98
+ /**
99
+ * Delete if unused.
100
+ *
101
+ * This is async so we assess whether deletion is appropriate after a batch of updates.
102
+ */
103
+ #deleteIfUnused() {
104
+ if (this.isObserved || this.isDiscovered) {
105
+ return false;
106
+ }
107
+ if (this.#maybeDeleting) {
108
+ return true;
109
+ }
110
+ const maybeDelete = async () => {
111
+ this.#maybeDeleting = void 0;
112
+ if (this.isObserved || this.isDiscovered) {
113
+ return;
114
+ }
115
+ this.#context.delete(this);
116
+ };
117
+ this.#maybeDeleting = maybeDelete();
118
+ return true;
119
+ }
120
+ /**
121
+ * Notification of observers.
122
+ *
123
+ * This is async so we coalesce changes into a single notification.
124
+ */
125
+ #notify(kind, key, record) {
126
+ if (this.#changes === void 0) {
127
+ this.#changes = /* @__PURE__ */ new Map();
128
+ }
129
+ this.#changes.set(key, { kind, record });
130
+ if (this.#notified) {
131
+ return;
132
+ }
133
+ const notify = async () => {
134
+ while (this.#changes?.size) {
135
+ const changes = { name: this };
136
+ for (const { kind: kind2, record: record2 } of this.#changes.values()) {
137
+ const key2 = `${kind2}d`;
138
+ const list = changes[key2];
139
+ if (list === void 0) {
140
+ changes[key2] = [record2];
141
+ } else {
142
+ list.push(record2);
143
+ }
144
+ }
145
+ this.#changes.clear();
146
+ await this.emit(changes);
147
+ }
148
+ this.#notified = void 0;
149
+ };
150
+ this.#notified = notify();
151
+ }
152
+ }
153
+ function keyOf(record) {
154
+ switch (record.recordType) {
155
+ case DnsRecordType.A:
156
+ case DnsRecordType.AAAA:
157
+ case DnsRecordType.PTR:
158
+ if (typeof record.value === "string") {
159
+ return `${record.recordType} ${record.value}`;
160
+ }
161
+ break;
162
+ case DnsRecordType.SRV:
163
+ if (typeof record.value === "object") {
164
+ const srv = record.value;
165
+ return `${record.recordType} ${srv.target}:${srv.port}`;
166
+ }
167
+ break;
168
+ }
169
+ }
170
+ export {
171
+ DnssdName
172
+ };
173
+ //# sourceMappingURL=DnssdName.js.map