@matter/general 0.16.1 → 0.16.2-alpha.0-20260114-d3127faee

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 (98) hide show
  1. package/dist/cjs/net/ServerAddress.d.ts +52 -14
  2. package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
  3. package/dist/cjs/net/ServerAddress.js +41 -6
  4. package/dist/cjs/net/ServerAddress.js.map +2 -2
  5. package/dist/cjs/net/ServerAddressSet.d.ts +65 -0
  6. package/dist/cjs/net/ServerAddressSet.d.ts.map +1 -0
  7. package/dist/cjs/net/ServerAddressSet.js +144 -0
  8. package/dist/cjs/net/ServerAddressSet.js.map +6 -0
  9. package/dist/cjs/net/dns-sd/MdnsSocket.d.ts +40 -0
  10. package/dist/cjs/net/dns-sd/MdnsSocket.d.ts.map +1 -0
  11. package/dist/cjs/net/dns-sd/MdnsSocket.js +164 -0
  12. package/dist/cjs/net/dns-sd/MdnsSocket.js.map +6 -0
  13. package/dist/cjs/net/dns-sd/index.d.ts +7 -0
  14. package/dist/cjs/net/dns-sd/index.d.ts.map +1 -0
  15. package/dist/cjs/net/dns-sd/index.js +24 -0
  16. package/dist/cjs/net/dns-sd/index.js.map +6 -0
  17. package/dist/cjs/net/index.d.ts +2 -0
  18. package/dist/cjs/net/index.d.ts.map +1 -1
  19. package/dist/cjs/net/index.js +2 -0
  20. package/dist/cjs/net/index.js.map +1 -1
  21. package/dist/cjs/util/Abort.d.ts +9 -0
  22. package/dist/cjs/util/Abort.d.ts.map +1 -1
  23. package/dist/cjs/util/Abort.js +20 -0
  24. package/dist/cjs/util/Abort.js.map +1 -1
  25. package/dist/cjs/util/Heap.d.ts +84 -0
  26. package/dist/cjs/util/Heap.d.ts.map +1 -0
  27. package/dist/cjs/util/Heap.js +286 -0
  28. package/dist/cjs/util/Heap.js.map +6 -0
  29. package/dist/cjs/util/Observable.d.ts +29 -6
  30. package/dist/cjs/util/Observable.d.ts.map +1 -1
  31. package/dist/cjs/util/Observable.js +40 -6
  32. package/dist/cjs/util/Observable.js.map +1 -1
  33. package/dist/cjs/util/Promises.d.ts +3 -0
  34. package/dist/cjs/util/Promises.d.ts.map +1 -1
  35. package/dist/cjs/util/Promises.js +33 -3
  36. package/dist/cjs/util/Promises.js.map +2 -2
  37. package/dist/cjs/util/Set.d.ts.map +1 -1
  38. package/dist/cjs/util/Set.js +14 -8
  39. package/dist/cjs/util/Set.js.map +1 -1
  40. package/dist/cjs/util/index.d.ts +1 -0
  41. package/dist/cjs/util/index.d.ts.map +1 -1
  42. package/dist/cjs/util/index.js +1 -0
  43. package/dist/cjs/util/index.js.map +1 -1
  44. package/dist/esm/net/ServerAddress.d.ts +52 -14
  45. package/dist/esm/net/ServerAddress.d.ts.map +1 -1
  46. package/dist/esm/net/ServerAddress.js +41 -6
  47. package/dist/esm/net/ServerAddress.js.map +2 -2
  48. package/dist/esm/net/ServerAddressSet.d.ts +65 -0
  49. package/dist/esm/net/ServerAddressSet.d.ts.map +1 -0
  50. package/dist/esm/net/ServerAddressSet.js +124 -0
  51. package/dist/esm/net/ServerAddressSet.js.map +6 -0
  52. package/dist/esm/net/dns-sd/MdnsSocket.d.ts +40 -0
  53. package/dist/esm/net/dns-sd/MdnsSocket.d.ts.map +1 -0
  54. package/dist/esm/net/dns-sd/MdnsSocket.js +149 -0
  55. package/dist/esm/net/dns-sd/MdnsSocket.js.map +6 -0
  56. package/dist/esm/net/dns-sd/index.d.ts +7 -0
  57. package/dist/esm/net/dns-sd/index.d.ts.map +1 -0
  58. package/dist/esm/net/dns-sd/index.js +7 -0
  59. package/dist/esm/net/dns-sd/index.js.map +6 -0
  60. package/dist/esm/net/index.d.ts +2 -0
  61. package/dist/esm/net/index.d.ts.map +1 -1
  62. package/dist/esm/net/index.js +2 -0
  63. package/dist/esm/net/index.js.map +1 -1
  64. package/dist/esm/util/Abort.d.ts +9 -0
  65. package/dist/esm/util/Abort.d.ts.map +1 -1
  66. package/dist/esm/util/Abort.js +20 -0
  67. package/dist/esm/util/Abort.js.map +1 -1
  68. package/dist/esm/util/Heap.d.ts +84 -0
  69. package/dist/esm/util/Heap.d.ts.map +1 -0
  70. package/dist/esm/util/Heap.js +266 -0
  71. package/dist/esm/util/Heap.js.map +6 -0
  72. package/dist/esm/util/Observable.d.ts +29 -6
  73. package/dist/esm/util/Observable.d.ts.map +1 -1
  74. package/dist/esm/util/Observable.js +40 -6
  75. package/dist/esm/util/Observable.js.map +1 -1
  76. package/dist/esm/util/Promises.d.ts +3 -0
  77. package/dist/esm/util/Promises.d.ts.map +1 -1
  78. package/dist/esm/util/Promises.js +33 -3
  79. package/dist/esm/util/Promises.js.map +2 -2
  80. package/dist/esm/util/Set.d.ts.map +1 -1
  81. package/dist/esm/util/Set.js +14 -8
  82. package/dist/esm/util/Set.js.map +1 -1
  83. package/dist/esm/util/index.d.ts +1 -0
  84. package/dist/esm/util/index.d.ts.map +1 -1
  85. package/dist/esm/util/index.js +1 -0
  86. package/dist/esm/util/index.js.map +1 -1
  87. package/package.json +2 -2
  88. package/src/net/ServerAddress.ts +93 -19
  89. package/src/net/ServerAddressSet.ts +225 -0
  90. package/src/net/dns-sd/MdnsSocket.ts +203 -0
  91. package/src/net/dns-sd/index.ts +7 -0
  92. package/src/net/index.ts +2 -0
  93. package/src/util/Abort.ts +25 -0
  94. package/src/util/Heap.ts +332 -0
  95. package/src/util/Observable.ts +74 -10
  96. package/src/util/Promises.ts +61 -4
  97. package/src/util/Set.ts +15 -8
  98. package/src/util/index.ts +1 -0
@@ -5,12 +5,15 @@
5
5
  */
6
6
  import { Diagnostic } from "#log/Diagnostic.js";
7
7
  import { Duration } from "#time/Duration.js";
8
- import { Seconds } from "#time/TimeUnit.js";
9
8
  function ServerAddress(definition) {
10
9
  return {
10
+ ttl: void 0,
11
11
  discoveredAt: void 0,
12
- ...definition,
13
- ttl: Seconds(definition.ttl)
12
+ healthyAt: void 0,
13
+ unhealthyAt: void 0,
14
+ priority: void 0,
15
+ weight: void 0,
16
+ ...definition
14
17
  };
15
18
  }
16
19
  ((ServerAddress2) => {
@@ -59,10 +62,42 @@ function ServerAddress(definition) {
59
62
  return false;
60
63
  }
61
64
  ServerAddress2.isEqual = isEqual;
62
- function definitionOf(address) {
63
- return address;
65
+ function healthOf(health) {
66
+ if (health.unhealthyAt === void 0) {
67
+ return health;
68
+ }
69
+ if (health.healthyAt !== void 0 && health.healthyAt > health.unhealthyAt) {
70
+ return {
71
+ healthyAt: health.healthyAt
72
+ };
73
+ }
74
+ return health;
75
+ }
76
+ ServerAddress2.healthOf = healthOf;
77
+ let SelectionPreference;
78
+ ((SelectionPreference2) => {
79
+ SelectionPreference2[SelectionPreference2["IPV6_ULA"] = 0] = "IPV6_ULA";
80
+ SelectionPreference2[SelectionPreference2["IPV6_LINK_LOCAL"] = 1] = "IPV6_LINK_LOCAL";
81
+ SelectionPreference2[SelectionPreference2["IPV6"] = 2] = "IPV6";
82
+ SelectionPreference2[SelectionPreference2["IPV4"] = 3] = "IPV4";
83
+ SelectionPreference2[SelectionPreference2["NOT_IP"] = 3] = "NOT_IP";
84
+ })(SelectionPreference = ServerAddress2.SelectionPreference || (ServerAddress2.SelectionPreference = {}));
85
+ function selectionPreferenceOf(address) {
86
+ if (!("ip" in address)) {
87
+ return 3 /* NOT_IP */;
88
+ }
89
+ if (address.ip.startsWith("fd")) {
90
+ return 0 /* IPV6_ULA */;
91
+ }
92
+ if (address.ip.startsWith("fe00")) {
93
+ return 1 /* IPV6_LINK_LOCAL */;
94
+ }
95
+ if (address.ip.includes(":")) {
96
+ return 2 /* IPV6 */;
97
+ }
98
+ return 3 /* IPV4 */;
64
99
  }
65
- ServerAddress2.definitionOf = definitionOf;
100
+ ServerAddress2.selectionPreferenceOf = selectionPreferenceOf;
66
101
  })(ServerAddress || (ServerAddress = {}));
67
102
  export {
68
103
  ServerAddress
@@ -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;AAEzB,SAAS,eAAe;AA6BjB,SAAS,cAAc,YAAsC;AAChE,SAAO;AAAA,IACH,cAAc;AAAA,IACd,GAAG;AAAA,IACH,KAAK,QAAQ,WAAW,GAAG;AAAA,EAC/B;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;AAgBT,WAAS,aAAa,SAAoC;AAC7D,WAAO;AAAA,EACX;AAFO,EAAAA,eAAS;AAAA,GAxDH;",
5
- "names": ["ServerAddress"]
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;",
5
+ "names": ["ServerAddress", "SelectionPreference"]
6
6
  }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { AddressStatus, ServerAddress } from "./ServerAddress.js";
7
+ /**
8
+ * A set of server addresses ordered by a comparator.
9
+ */
10
+ export interface ServerAddressSet<T extends ServerAddress> {
11
+ /**
12
+ * Add an address.
13
+ *
14
+ * If the address alreay exists, returns the existing address to facilitate comparison by value. If not, returns
15
+ * the input address.
16
+ */
17
+ add(address: T): T;
18
+ /**
19
+ * Delete an address.
20
+ */
21
+ delete(address: T): boolean;
22
+ /**
23
+ * Replace the stored addresses.
24
+ */
25
+ replace(newAddresses: Iterable<T>): void;
26
+ /**
27
+ * Test for existence of address.
28
+ */
29
+ has(address: T): boolean;
30
+ /**
31
+ * The number of addresses.
32
+ */
33
+ size: number;
34
+ /**
35
+ * Iterate.
36
+ *
37
+ * If you replace addresses during iteration only addresses not already produced will be covered by remaining
38
+ * iterations.
39
+ */
40
+ [Symbol.iterator](): Iterator<T>;
41
+ }
42
+ /**
43
+ * Create a new {@link ServerAddressSet}.
44
+ */
45
+ export declare function ServerAddressSet<T extends ServerAddress>(initial?: Iterable<T>, comparator?: typeof ServerAddressSet.compareDesirability): ServerAddressSet<T>;
46
+ export declare namespace ServerAddressSet {
47
+ interface Comparator<T extends ServerAddress = ServerAddress> {
48
+ (addr1: T, addr2: T): number;
49
+ }
50
+ /**
51
+ * Update a list of addresses with health information from another list.
52
+ */
53
+ function copyHealth<T extends ServerAddress>(targetAddresses: Iterable<T>, sourceAddresses: Iterable<T>): T[];
54
+ /**
55
+ * Compare the "desirability" of two addresses for communication.
56
+ */
57
+ function compareDesirability(a: ServerAddress, b: ServerAddress): number;
58
+ /**
59
+ * Compare the health of two addresses.
60
+ *
61
+ * Returns a negative number if a is healthier, positive if b is healthier and 0 if assessment is neutral.
62
+ */
63
+ function compareHealth(a: AddressStatus, b: AddressStatus): number;
64
+ }
65
+ //# sourceMappingURL=ServerAddressSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServerAddressSet.d.ts","sourceRoot":"","sources":["../../../src/net/ServerAddressSet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,aAAa;IACrD;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAEzC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;IAEzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;OAKG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EACpD,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EACrB,UAAU,8CAAuC,uBA+EpD;AAED,yBAAiB,gBAAgB,CAAC;IAC9B,UAAiB,UAAU,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;QAC/D,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;KAChC;IAED;;OAEG;IACH,SAAgB,UAAU,CAAC,CAAC,SAAS,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,OAgB7G;IAED;;OAEG;IACH,SAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,UAmBrE;IAED;;;;OAIG;IACH,SAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,UAiC/D;CACJ"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ServerAddress } from "./ServerAddress.js";
7
+ function ServerAddressSet(initial, comparator = ServerAddressSet.compareDesirability) {
8
+ let version = 0;
9
+ let addresses;
10
+ const set = {
11
+ add(address) {
12
+ version++;
13
+ const key = ServerAddress.urlFor(address);
14
+ const existing = addresses?.get(key);
15
+ if (existing) {
16
+ return existing;
17
+ }
18
+ if (!addresses) {
19
+ addresses = /* @__PURE__ */ new Map();
20
+ }
21
+ addresses.set(key, address);
22
+ return address;
23
+ },
24
+ delete(address) {
25
+ version++;
26
+ return addresses?.delete(ServerAddress.urlFor(address)) ?? false;
27
+ },
28
+ has(address) {
29
+ return addresses?.has(ServerAddress.urlFor(address)) ?? false;
30
+ },
31
+ replace(newAddresses) {
32
+ version++;
33
+ const oldAddresses = addresses;
34
+ addresses = /* @__PURE__ */ new Map();
35
+ for (const address of newAddresses) {
36
+ const key = ServerAddress.urlFor(address);
37
+ addresses.set(key, oldAddresses?.get(key) ?? address);
38
+ }
39
+ },
40
+ get size() {
41
+ return addresses?.size ?? 0;
42
+ },
43
+ *[Symbol.iterator]() {
44
+ const tried = /* @__PURE__ */ new Set();
45
+ all: while (true) {
46
+ const currentVersion = version;
47
+ const ordered = addresses ? [...addresses.entries()].map(([, address]) => address).sort(comparator) : [];
48
+ for (const address of ordered) {
49
+ const key = ServerAddress.urlFor(address);
50
+ if (tried.has(key)) {
51
+ continue;
52
+ }
53
+ yield address;
54
+ if (currentVersion !== version) {
55
+ continue all;
56
+ }
57
+ }
58
+ break;
59
+ }
60
+ }
61
+ };
62
+ if (initial) {
63
+ set.replace(initial);
64
+ }
65
+ return set;
66
+ }
67
+ ((ServerAddressSet2) => {
68
+ function copyHealth(targetAddresses, sourceAddresses) {
69
+ const output = [...targetAddresses];
70
+ nextTarget: for (let i = 0; i < output.length; i++) {
71
+ const target = output[i];
72
+ for (const source of sourceAddresses) {
73
+ if (ServerAddress.isEqual(target, source)) {
74
+ if (source.healthyAt !== void 0 || source.unhealthyAt !== void 0) {
75
+ output[i] = { ...target, healthyAt: source.healthyAt, unhealthyAt: source.unhealthyAt };
76
+ }
77
+ continue nextTarget;
78
+ }
79
+ }
80
+ }
81
+ return output;
82
+ }
83
+ ServerAddressSet2.copyHealth = copyHealth;
84
+ function compareDesirability(a, b) {
85
+ const value = ServerAddress.selectionPreferenceOf(a) - ServerAddress.selectionPreferenceOf(b);
86
+ if (value) {
87
+ return value;
88
+ }
89
+ const relativeHealth = compareHealth(a, b);
90
+ if (relativeHealth) {
91
+ return relativeHealth;
92
+ }
93
+ if (a.priority !== void 0 && b.priority !== void 0) {
94
+ return b.priority - a.priority;
95
+ }
96
+ return 0;
97
+ }
98
+ ServerAddressSet2.compareDesirability = compareDesirability;
99
+ function compareHealth(a, b) {
100
+ const ha = ServerAddress.healthOf(a);
101
+ const hb = ServerAddress.healthOf(b);
102
+ if (ha.unhealthyAt) {
103
+ if (hb.unhealthyAt) {
104
+ return ha.unhealthyAt - hb.unhealthyAt;
105
+ }
106
+ return 1;
107
+ }
108
+ if (hb.unhealthyAt) {
109
+ return -1;
110
+ }
111
+ if (ha.healthyAt) {
112
+ if (hb.healthyAt) {
113
+ return hb.healthyAt - ha.healthyAt;
114
+ }
115
+ return -1;
116
+ }
117
+ return 0;
118
+ }
119
+ ServerAddressSet2.compareHealth = compareHealth;
120
+ })(ServerAddressSet || (ServerAddressSet = {}));
121
+ export {
122
+ ServerAddressSet
123
+ };
124
+ //# sourceMappingURL=ServerAddressSet.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/net/ServerAddressSet.ts"],
4
+ "mappings": "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",
5
+ "names": ["ServerAddressSet"]
6
+ }
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { DnsMessage, DnsMessageType } from "#codec/DnsCodec.js";
7
+ import { Network } from "#net/Network.js";
8
+ import { UdpMulticastServer } from "#net/udp/UdpMulticastServer.js";
9
+ import { Lifetime } from "#util/Lifetime.js";
10
+ import { AsyncObservable } from "#util/Observable.js";
11
+ /**
12
+ * Manages the UDP socket for other components that implement MDNS logic.
13
+ */
14
+ export declare class MdnsSocket {
15
+ #private;
16
+ static create(network: Network, options?: {
17
+ enableIpv4?: boolean;
18
+ netInterface?: string;
19
+ lifetime?: Lifetime.Owner;
20
+ }): Promise<MdnsSocket>;
21
+ constructor(socket: UdpMulticastServer);
22
+ get network(): Network;
23
+ get supportsIpv4(): boolean;
24
+ get netInterface(): string | undefined;
25
+ get receipt(): AsyncObservable<[message: MdnsSocket.Message], void>;
26
+ send(message: Partial<DnsMessage> & {
27
+ messageType: DnsMessageType;
28
+ }, intf?: string, unicastDest?: string): Promise<void>;
29
+ close(): Promise<void>;
30
+ }
31
+ export declare namespace MdnsSocket {
32
+ interface Message extends DnsMessage {
33
+ sourceIp: string;
34
+ sourceIntf: string;
35
+ }
36
+ const BROADCAST_IPV4 = "224.0.0.251";
37
+ const BROADCAST_IPV6 = "ff02::fb";
38
+ const BROADCAST_PORT = 5353;
39
+ }
40
+ //# sourceMappingURL=MdnsSocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MdnsSocket.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/MdnsSocket.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,UAAU,EAEV,cAAc,EAGjB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAmB,MAAM,qBAAqB,CAAC;AAKvE;;GAEG;AACH,qBAAa,UAAU;;WASN,MAAM,CACf,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAA;KAAE;gBAgB5E,MAAM,EAAE,kBAAkB;IAKtC,IAAI,OAAO,YAEV;IAED,IAAI,YAAY,YAEf;IAED,IAAI,YAAY,uBAEf;IAED,IAAI,OAAO,yDAEV;IAEK,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;QAAE,WAAW,EAAE,cAAc,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IA+ExG,KAAK;CAmCd;AAED,yBAAiB,UAAU,CAAC;IACxB,UAAiB,OAAQ,SAAQ,UAAU;QACvC,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB;IAEM,MAAM,cAAc,gBAAgB,CAAC;IACrC,MAAM,cAAc,aAAa,CAAC;IAClC,MAAM,cAAc,OAAO,CAAC;CACtC"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import {
7
+ DnsCodec,
8
+ DnsMessageType,
9
+ DnsMessageTypeFlag,
10
+ MAX_MDNS_MESSAGE_SIZE
11
+ } from "#codec/DnsCodec.js";
12
+ import { Diagnostic } from "#log/Diagnostic.js";
13
+ import { Logger } from "#log/Logger.js";
14
+ import { MatterAggregateError } from "#MatterError.js";
15
+ import { UdpMulticastServer } from "#net/udp/UdpMulticastServer.js";
16
+ import { BasicObservable } from "#util/Observable.js";
17
+ import { MaybePromise } from "#util/Promises.js";
18
+ const logger = Logger.get("MdnsListener");
19
+ class MdnsSocket {
20
+ #socket;
21
+ #handlers;
22
+ #isClosed = false;
23
+ #receipt = new BasicObservable(
24
+ (error) => logger.error("Unhandled error in MDNS listener", error),
25
+ true
26
+ );
27
+ static async create(network, options) {
28
+ const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
29
+ const socket = new MdnsSocket(
30
+ await UdpMulticastServer.create({
31
+ lifetime,
32
+ network,
33
+ netInterface,
34
+ broadcastAddressIpv4: enableIpv4 ? MdnsSocket.BROADCAST_IPV4 : void 0,
35
+ broadcastAddressIpv6: MdnsSocket.BROADCAST_IPV6,
36
+ listeningPort: MdnsSocket.BROADCAST_PORT
37
+ })
38
+ );
39
+ return socket;
40
+ }
41
+ constructor(socket) {
42
+ this.#socket = socket;
43
+ socket.onMessage(this.#handleMessage.bind(this));
44
+ }
45
+ get network() {
46
+ return this.#socket.network;
47
+ }
48
+ get supportsIpv4() {
49
+ return this.#socket.supportsIpv4;
50
+ }
51
+ get netInterface() {
52
+ return this.#socket.netInterface;
53
+ }
54
+ get receipt() {
55
+ return this.#receipt;
56
+ }
57
+ async send(message, intf, unicastDest) {
58
+ const { messageType } = message;
59
+ const truncatedMessageType = DnsMessageType.isQuery(messageType) ? messageType | DnsMessageTypeFlag.TC : messageType;
60
+ const chunk = {
61
+ transactionId: 0,
62
+ queries: [],
63
+ authorities: [],
64
+ ...message,
65
+ answers: [],
66
+ additionalRecords: []
67
+ };
68
+ let encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
69
+ let chunkSize = encodedChunkWithoutAnswers.byteLength;
70
+ for (const answer of message.answers ?? []) {
71
+ const answerEncoded = DnsCodec.encodeRecord(answer);
72
+ if (chunkSize + answerEncoded.byteLength > MAX_MDNS_MESSAGE_SIZE) {
73
+ if (chunk.answers.length === 0) {
74
+ logger.warn(
75
+ `MDNS message with ${Diagnostic.json(
76
+ chunk.queries
77
+ )} is too big to fit into a single MDNS message. Send anyway, but please report!`
78
+ );
79
+ }
80
+ await this.#send(
81
+ {
82
+ ...chunk,
83
+ messageType: truncatedMessageType
84
+ },
85
+ intf,
86
+ unicastDest
87
+ );
88
+ if (chunk.queries.length) {
89
+ chunk.queries.length = 0;
90
+ encodedChunkWithoutAnswers = DnsCodec.encode(chunk);
91
+ }
92
+ chunk.answers.length = 0;
93
+ chunkSize = encodedChunkWithoutAnswers.byteLength + answerEncoded.byteLength;
94
+ } else {
95
+ chunkSize += answerEncoded.byteLength;
96
+ }
97
+ chunk.answers.push(answerEncoded);
98
+ }
99
+ const additionalRecords = message.additionalRecords ?? [];
100
+ for (const additionalRecord of additionalRecords) {
101
+ const additionalRecordEncoded = DnsCodec.encodeRecord(additionalRecord);
102
+ chunkSize += additionalRecordEncoded.byteLength;
103
+ if (chunkSize > MAX_MDNS_MESSAGE_SIZE) {
104
+ break;
105
+ }
106
+ chunk.additionalRecords.push(additionalRecordEncoded);
107
+ }
108
+ await this.#send(chunk, intf, unicastDest);
109
+ }
110
+ async #send(message, intf, unicastDest) {
111
+ await this.#socket.send(DnsCodec.encode(message), intf, unicastDest);
112
+ }
113
+ async close() {
114
+ this.#isClosed = true;
115
+ await this.#socket.close();
116
+ if (this.#handlers) {
117
+ await MatterAggregateError.allSettled(this.#handlers);
118
+ }
119
+ }
120
+ #handleMessage(bytes, sourceIp, sourceIntf) {
121
+ if (this.#isClosed) {
122
+ return;
123
+ }
124
+ const parsed = DnsCodec.decode(bytes);
125
+ if (parsed === void 0) {
126
+ return;
127
+ }
128
+ let promise = this.#receipt.emit({
129
+ ...parsed,
130
+ sourceIp,
131
+ sourceIntf
132
+ });
133
+ if (MaybePromise.is(promise)) {
134
+ if (this.#handlers === void 0) {
135
+ this.#handlers = /* @__PURE__ */ new Set();
136
+ }
137
+ promise = Promise.resolve(promise).finally(() => this.#handlers?.delete(promise));
138
+ }
139
+ }
140
+ }
141
+ ((MdnsSocket2) => {
142
+ MdnsSocket2.BROADCAST_IPV4 = "224.0.0.251";
143
+ MdnsSocket2.BROADCAST_IPV6 = "ff02::fb";
144
+ MdnsSocket2.BROADCAST_PORT = 5353;
145
+ })(MdnsSocket || (MdnsSocket = {}));
146
+ export {
147
+ MdnsSocket
148
+ };
149
+ //# sourceMappingURL=MdnsSocket.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/MdnsSocket.ts"],
4
+ "mappings": "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",
5
+ "names": ["MdnsSocket"]
6
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./MdnsSocket.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/net/dns-sd/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./MdnsSocket.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/net/dns-sd/index.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;",
5
+ "names": []
6
+ }
@@ -6,11 +6,13 @@
6
6
  export * from "./AppAddress.js";
7
7
  export * from "./Channel.js";
8
8
  export * from "./ConnectionlessTransport.js";
9
+ export * from "./dns-sd/index.js";
9
10
  export * from "./http/index.js";
10
11
  export * from "./mock/index.js";
11
12
  export * from "./mqtt/index.js";
12
13
  export * from "./Network.js";
13
14
  export * from "./RetrySchedule.js";
14
15
  export * from "./ServerAddress.js";
16
+ export * from "./ServerAddressSet.js";
15
17
  export * from "./udp/index.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/net/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/net/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC"}
@@ -6,11 +6,13 @@
6
6
  export * from "./AppAddress.js";
7
7
  export * from "./Channel.js";
8
8
  export * from "./ConnectionlessTransport.js";
9
+ export * from "./dns-sd/index.js";
9
10
  export * from "./http/index.js";
10
11
  export * from "./mock/index.js";
11
12
  export * from "./mqtt/index.js";
12
13
  export * from "./Network.js";
13
14
  export * from "./RetrySchedule.js";
14
15
  export * from "./ServerAddress.js";
16
+ export * from "./ServerAddressSet.js";
15
17
  export * from "./udp/index.js";
16
18
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/index.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
5
5
  "names": []
6
6
  }
@@ -28,6 +28,10 @@ export declare class Abort extends Callable<[reason?: Error]> implements AbortCo
28
28
  * If aborted returns undefined.
29
29
  */
30
30
  race<T>(...promises: Array<T | PromiseLike<T>>): Promise<Awaited<T> | void>;
31
+ /**
32
+ * Race with throw on abort.
33
+ */
34
+ attempt<T>(...promises: Array<T | PromiseLike<T>>): Promise<T>;
31
35
  /**
32
36
  * Free resources.
33
37
  *
@@ -36,6 +40,7 @@ export declare class Abort extends Callable<[reason?: Error]> implements AbortCo
36
40
  */
37
41
  close(): void;
38
42
  [Symbol.dispose](): void;
43
+ if(condition?: unknown, reason?: Error): void;
39
44
  get aborted(): boolean;
40
45
  set onabort(onabort: ((this: AbortSignal, ev: Event) => any) | null);
41
46
  get onabort(): ((this: AbortSignal, ev: Event) => any) | null;
@@ -91,6 +96,10 @@ export declare namespace Abort {
91
96
  * abort reason.
92
97
  */
93
98
  function race<T>(signal: Signal | undefined, ...promises: Array<T | PromiseLike<T>>): Promise<Awaited<T> | void>;
99
+ /**
100
+ * Race with throw on abort.
101
+ */
102
+ function attempt<T>(signal: Signal | undefined, ...promises: Array<T | PromiseLike<T>>): Promise<T>;
94
103
  /**
95
104
  * Perform abortable sleep.
96
105
  */
@@ -1 +1 @@
1
- {"version":3,"file":"Abort.d.ts","sourceRoot":"","sources":["../../../src/util/Abort.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Abort.d.ts","sourceRoot":"","sources":["../../../src/util/Abort.ts"],"names":[],"mappings":"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"}
@@ -64,6 +64,12 @@ class Abort extends Callable {
64
64
  async race(...promises) {
65
65
  return Abort.race(this, ...promises);
66
66
  }
67
+ /**
68
+ * Race with throw on abort.
69
+ */
70
+ async attempt(...promises) {
71
+ return Abort.attempt(this, ...promises);
72
+ }
67
73
  /**
68
74
  * Free resources.
69
75
  *
@@ -81,6 +87,11 @@ class Abort extends Callable {
81
87
  [Symbol.dispose]() {
82
88
  this.close();
83
89
  }
90
+ if(condition, reason) {
91
+ if (condition) {
92
+ this.abort(reason);
93
+ }
94
+ }
84
95
  get aborted() {
85
96
  return this.signal.aborted;
86
97
  }
@@ -143,6 +154,15 @@ class Abort extends Callable {
143
154
  return SafePromise.race(promises);
144
155
  }
145
156
  Abort2.race = race;
157
+ async function attempt(signal, ...promises) {
158
+ if (signal && "signal" in signal) {
159
+ signal = signal.signal;
160
+ }
161
+ const result = await race(signal, ...promises);
162
+ signal?.throwIfAborted();
163
+ return result;
164
+ }
165
+ Abort2.attempt = attempt;
146
166
  function sleep(description, abort, duration) {
147
167
  let timer;
148
168
  const rested = new Promise((resolve) => {