@matter/general 0.13.0-alpha.0-20250324-d7b7d9731 → 0.13.0-alpha.0-20250327-8b06e5a79

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.
@@ -8,6 +8,8 @@ import { MaybePromise } from "../util/Promises.js";
8
8
  import { UdpChannel, UdpChannelOptions } from "./UdpChannel.js";
9
9
  export declare class NetworkError extends MatterError {
10
10
  }
11
+ export declare class NoAddressAvailableError extends NetworkError {
12
+ }
11
13
  /**
12
14
  * @see {@link MatterSpecification.v11.Core} § 11.11.4.4
13
15
  * Duplicated from the GeneralDiagnostics cluster to avoid circular dependencies.
@@ -1 +1 @@
1
- {"version":3,"file":"Network.d.ts","sourceRoot":"","sources":["../../../src/net/Network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD;;;GAGG;AACH,oBAAY,aAAa;IACrB;;OAEG;IACH,WAAW,IAAI;IAEf;;OAEG;IACH,IAAI,IAAI;IAER;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,MAAM,IAAI;CACb;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAElF,8BAAsB,OAAO;IAEzB,MAAM,CAAC,GAAG,EAAE,MAAM,OAAO,CAEvB;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpE,KAAK;CAGd"}
1
+ {"version":3,"file":"Network.d.ts","sourceRoot":"","sources":["../../../src/net/Network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD,qBAAa,uBAAwB,SAAQ,YAAY;CAAG;AAE5D;;;GAGG;AACH,oBAAY,aAAa;IACrB;;OAEG;IACH,WAAW,IAAI;IAEf;;OAEG;IACH,IAAI,IAAI;IAER;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,MAAM,IAAI;CACb;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAElF,8BAAsB,OAAO;IAEzB,MAAM,CAAC,GAAG,EAAE,MAAM,OAAO,CAEvB;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpE,KAAK;CAGd"}
@@ -20,7 +20,8 @@ var Network_exports = {};
20
20
  __export(Network_exports, {
21
21
  InterfaceType: () => InterfaceType,
22
22
  Network: () => Network,
23
- NetworkError: () => NetworkError
23
+ NetworkError: () => NetworkError,
24
+ NoAddressAvailableError: () => NoAddressAvailableError
24
25
  });
25
26
  module.exports = __toCommonJS(Network_exports);
26
27
  var import_MatterError = require("../MatterError.js");
@@ -31,6 +32,8 @@ var import_MatterError = require("../MatterError.js");
31
32
  */
32
33
  class NetworkError extends import_MatterError.MatterError {
33
34
  }
35
+ class NoAddressAvailableError extends NetworkError {
36
+ }
34
37
  var InterfaceType = /* @__PURE__ */ ((InterfaceType2) => {
35
38
  InterfaceType2[InterfaceType2["Unspecified"] = 0] = "Unspecified";
36
39
  InterfaceType2[InterfaceType2["WiFi"] = 1] = "WiFi";
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/Network.ts"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,yBAA6C;AAN7C;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,qBAAqB,+BAAY;AAAC;AAMxC,IAAK,gBAAL,kBAAKA,mBAAL;AAIH,EAAAA,8BAAA,iBAAc,KAAd;AAKA,EAAAA,8BAAA,UAAO,KAAP;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,YAAS,KAAT;AAxBQ,SAAAA;AAAA,GAAA;AAwCL,MAAe,QAAQ;AAAA;AAAA,EAE1B,OAAO,MAAqB,MAAM;AAC9B,UAAM,IAAI,mCAAgB,wBAAwB;AAAA,EACtD;AAAA,EAMA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,yBAA6C;AAN7C;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,qBAAqB,+BAAY;AAAC;AAExC,MAAM,gCAAgC,aAAa;AAAC;AAMpD,IAAK,gBAAL,kBAAKA,mBAAL;AAIH,EAAAA,8BAAA,iBAAc,KAAd;AAKA,EAAAA,8BAAA,UAAO,KAAP;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,YAAS,KAAT;AAxBQ,SAAAA;AAAA,GAAA;AAwCL,MAAe,QAAQ;AAAA;AAAA,EAE1B,OAAO,MAAqB,MAAM;AAC9B,UAAM,IAAI,mCAAgB,wBAAwB;AAAA,EACtD;AAAA,EAMA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
5
5
  "names": ["InterfaceType"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../src/net/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAuCvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;WA5CpB,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAwB5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAStF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C/D,sBAAsB;IAQ9B,KAAK;CAKd"}
1
+ {"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../src/net/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,OAAO,EAA2B,MAAM,cAAc,CAAC;AAKhE,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAqDvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;WA1DpB,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAsC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAStF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C/D,sBAAsB;IAQ9B,KAAK;CAKd"}
@@ -26,6 +26,7 @@ var import_Logger = require("../log/Logger.js");
26
26
  var import_Cache = require("../util/Cache.js");
27
27
  var import_Error = require("../util/Error.js");
28
28
  var import_Ip = require("../util/Ip.js");
29
+ var import_Network = require("./Network.js");
29
30
  /**
30
31
  * @license
31
32
  * Copyright 2022-2025 Matter.js Authors
@@ -49,25 +50,40 @@ class UdpMulticastServer {
49
50
  listeningPort,
50
51
  network
51
52
  }) {
52
- return new UdpMulticastServer(
53
- network,
54
- broadcastAddressIpv4,
55
- broadcastAddressIpv6,
56
- listeningPort,
57
- broadcastAddressIpv4 === void 0 ? void 0 : await network.createUdpChannel({
58
- type: "udp4",
59
- netInterface,
60
- listeningPort,
61
- membershipAddresses: [broadcastAddressIpv4]
62
- }),
63
- await network.createUdpChannel({
64
- type: "udp6",
65
- netInterface,
53
+ let ipv4UdpChannel = void 0;
54
+ if (broadcastAddressIpv4 !== void 0) {
55
+ try {
56
+ ipv4UdpChannel = await network.createUdpChannel({
57
+ type: "udp4",
58
+ netInterface,
59
+ listeningPort,
60
+ membershipAddresses: [broadcastAddressIpv4]
61
+ });
62
+ } catch (error) {
63
+ import_Network.NoAddressAvailableError.accept(error);
64
+ logger.info(`IPv4 UDP channel not created because IPv4 is not available: ${(0, import_Error.asError)(error).message}`);
65
+ }
66
+ }
67
+ try {
68
+ return new UdpMulticastServer(
69
+ network,
70
+ broadcastAddressIpv4,
71
+ broadcastAddressIpv6,
66
72
  listeningPort,
67
- membershipAddresses: [broadcastAddressIpv6]
68
- }),
69
- netInterface
70
- );
73
+ ipv4UdpChannel,
74
+ await network.createUdpChannel({
75
+ type: "udp6",
76
+ netInterface,
77
+ listeningPort,
78
+ membershipAddresses: [broadcastAddressIpv6]
79
+ }),
80
+ netInterface
81
+ );
82
+ } catch (error) {
83
+ import_Network.NoAddressAvailableError.accept(error);
84
+ logger.info(`IPv6 UDP interface not created because IPv6 is not available, but required my Matter.`);
85
+ throw error;
86
+ }
71
87
  }
72
88
  broadcastChannels = new import_Cache.Cache(
73
89
  "UDP broadcast channel",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/UdpMulticastServer.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["netInterface"]
6
6
  }
@@ -144,16 +144,16 @@ export declare const Transaction: {
144
144
  */
145
145
  act<T>(via: string, actor: (transaction: Transaction) => MaybePromise<T>): MaybePromise<T>;
146
146
  ReadOnly: {
147
- "__#14705@#participants": Set<Participant>;
148
- "__#14705@#roles": Map<{}, Participant>;
149
- "__#14705@#resources": Set<Resource>;
150
- "__#14705@#status": Status;
151
- "__#14705@#waitingOn"?: Iterable<Transaction>;
152
- "__#14705@#via": string;
153
- "__#14705@#shared"?: import("../index.js").Observable<[]>;
154
- "__#14705@#closed"?: import("../index.js").Observable<[]>;
155
- "__#14705@#isAsync": boolean;
156
- "__#14705@#reportingLocks": boolean;
147
+ "__#14950@#participants": Set<Participant>;
148
+ "__#14950@#roles": Map<{}, Participant>;
149
+ "__#14950@#resources": Set<Resource>;
150
+ "__#14950@#status": Status;
151
+ "__#14950@#waitingOn"?: Iterable<Transaction>;
152
+ "__#14950@#via": string;
153
+ "__#14950@#shared"?: import("../index.js").Observable<[]>;
154
+ "__#14950@#closed"?: import("../index.js").Observable<[]>;
155
+ "__#14950@#isAsync": boolean;
156
+ "__#14950@#reportingLocks": boolean;
157
157
  close(): void;
158
158
  readonly via: string;
159
159
  readonly status: Status;
@@ -175,15 +175,15 @@ export declare const Transaction: {
175
175
  waitFor(others: Set<Transaction>): Promise<void>;
176
176
  toString(): string;
177
177
  treatAsSlow(): void;
178
- "__#14705@#finalize"(status: Status, why: string, finalizer: () => MaybePromise): Promise<void> | undefined;
179
- "__#14705@#executePreCommit"(): MaybePromise<void>;
180
- "__#14705@#executeCommit"(): MaybePromise;
181
- "__#14705@#executeCommit1"(): MaybePromise;
182
- "__#14705@#executeCommit2"(): Promise<void> | undefined;
183
- "__#14705@#executePostCommit"(participants: Participant[]): MaybePromise;
184
- "__#14705@#executeRollback"(): Promise<void> | undefined;
185
- "__#14705@#locksChanged"(resources: Set<Resource>, how?: string): void;
186
- "__#14705@#assertAvailable"(): void;
178
+ "__#14950@#finalize"(status: Status, why: string, finalizer: () => MaybePromise): Promise<void> | undefined;
179
+ "__#14950@#executePreCommit"(): MaybePromise<void>;
180
+ "__#14950@#executeCommit"(): MaybePromise;
181
+ "__#14950@#executeCommit1"(): MaybePromise;
182
+ "__#14950@#executeCommit2"(): Promise<void> | undefined;
183
+ "__#14950@#executePostCommit"(participants: Participant[]): MaybePromise;
184
+ "__#14950@#executeRollback"(): Promise<void> | undefined;
185
+ "__#14950@#locksChanged"(resources: Set<Resource>, how?: string): void;
186
+ "__#14950@#assertAvailable"(): void;
187
187
  };
188
188
  Status: typeof Status;
189
189
  Resource: typeof Resource;
@@ -8,6 +8,8 @@ import { MaybePromise } from "../util/Promises.js";
8
8
  import { UdpChannel, UdpChannelOptions } from "./UdpChannel.js";
9
9
  export declare class NetworkError extends MatterError {
10
10
  }
11
+ export declare class NoAddressAvailableError extends NetworkError {
12
+ }
11
13
  /**
12
14
  * @see {@link MatterSpecification.v11.Core} § 11.11.4.4
13
15
  * Duplicated from the GeneralDiagnostics cluster to avoid circular dependencies.
@@ -1 +1 @@
1
- {"version":3,"file":"Network.d.ts","sourceRoot":"","sources":["../../../src/net/Network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD;;;GAGG;AACH,oBAAY,aAAa;IACrB;;OAEG;IACH,WAAW,IAAI;IAEf;;OAEG;IACH,IAAI,IAAI;IAER;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,MAAM,IAAI;CACb;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAElF,8BAAsB,OAAO;IAEzB,MAAM,CAAC,GAAG,EAAE,MAAM,OAAO,CAEvB;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpE,KAAK;CAGd"}
1
+ {"version":3,"file":"Network.d.ts","sourceRoot":"","sources":["../../../src/net/Network.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAEhD,qBAAa,uBAAwB,SAAQ,YAAY;CAAG;AAE5D;;;GAGG;AACH,oBAAY,aAAa;IACrB;;OAEG;IACH,WAAW,IAAI;IAEf;;OAEG;IACH,IAAI,IAAI;IAER;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,QAAQ,IAAI;IAEZ;;OAEG;IACH,MAAM,IAAI;CACb;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,aAAa,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG,uBAAuB,CAAC;AAElF,8BAAsB,OAAO;IAEzB,MAAM,CAAC,GAAG,EAAE,MAAM,OAAO,CAEvB;IAEF,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC/F,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpE,KAAK;CAGd"}
@@ -6,6 +6,8 @@
6
6
  import { MatterError, NoProviderError } from "../MatterError.js";
7
7
  class NetworkError extends MatterError {
8
8
  }
9
+ class NoAddressAvailableError extends NetworkError {
10
+ }
9
11
  var InterfaceType = /* @__PURE__ */ ((InterfaceType2) => {
10
12
  InterfaceType2[InterfaceType2["Unspecified"] = 0] = "Unspecified";
11
13
  InterfaceType2[InterfaceType2["WiFi"] = 1] = "WiFi";
@@ -25,6 +27,7 @@ class Network {
25
27
  export {
26
28
  InterfaceType,
27
29
  Network,
28
- NetworkError
30
+ NetworkError,
31
+ NoAddressAvailableError
29
32
  };
30
33
  //# sourceMappingURL=Network.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/Network.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,aAAa,uBAAuB;AAItC,MAAM,qBAAqB,YAAY;AAAC;AAMxC,IAAK,gBAAL,kBAAKA,mBAAL;AAIH,EAAAA,8BAAA,iBAAc,KAAd;AAKA,EAAAA,8BAAA,UAAO,KAAP;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,YAAS,KAAT;AAxBQ,SAAAA;AAAA,GAAA;AAwCL,MAAe,QAAQ;AAAA;AAAA,EAE1B,OAAO,MAAqB,MAAM;AAC9B,UAAM,IAAI,gBAAgB,wBAAwB;AAAA,EACtD;AAAA,EAMA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,aAAa,uBAAuB;AAItC,MAAM,qBAAqB,YAAY;AAAC;AAExC,MAAM,gCAAgC,aAAa;AAAC;AAMpD,IAAK,gBAAL,kBAAKA,mBAAL;AAIH,EAAAA,8BAAA,iBAAc,KAAd;AAKA,EAAAA,8BAAA,UAAO,KAAP;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,cAAW,KAAX;AAKA,EAAAA,8BAAA,YAAS,KAAT;AAxBQ,SAAAA;AAAA,GAAA;AAwCL,MAAe,QAAQ;AAAA;AAAA,EAE1B,OAAO,MAAqB,MAAM;AAC9B,UAAM,IAAI,gBAAgB,wBAAwB;AAAA,EACtD;AAAA,EAMA,MAAM,QAAQ;AAAA,EAEd;AACJ;",
5
5
  "names": ["InterfaceType"]
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../src/net/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAKvC,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAuCvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;WA5CpB,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAwB5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAStF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C/D,sBAAsB;IAQ9B,KAAK;CAKd"}
1
+ {"version":3,"file":"UdpMulticastServer.d.ts","sourceRoot":"","sources":["../../../src/net/UdpMulticastServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,OAAO,EAA2B,MAAM,cAAc,CAAC;AAKhE,MAAM,WAAW,yBAAyB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAqDvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;WA1DpB,MAAM,CAAC,EAChB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,OAAO,GACV,EAAE,yBAAyB;IAsC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAKhC;IAEF,OAAO;IAUP,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI;IAStF,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;YA+C/D,sBAAsB;IAQ9B,KAAK;CAKd"}
@@ -8,6 +8,7 @@ import { Logger } from "../log/Logger.js";
8
8
  import { Cache } from "../util/Cache.js";
9
9
  import { asError } from "../util/Error.js";
10
10
  import { isIPv4 } from "../util/Ip.js";
11
+ import { NoAddressAvailableError } from "./Network.js";
11
12
  const logger = Logger.get("UdpMulticastServer");
12
13
  class UdpMulticastServer {
13
14
  constructor(network, broadcastAddressIpv4, broadcastAddressIpv6, broadcastPort, serverIpv4, serverIpv6, netInterface) {
@@ -26,25 +27,40 @@ class UdpMulticastServer {
26
27
  listeningPort,
27
28
  network
28
29
  }) {
29
- return new UdpMulticastServer(
30
- network,
31
- broadcastAddressIpv4,
32
- broadcastAddressIpv6,
33
- listeningPort,
34
- broadcastAddressIpv4 === void 0 ? void 0 : await network.createUdpChannel({
35
- type: "udp4",
36
- netInterface,
37
- listeningPort,
38
- membershipAddresses: [broadcastAddressIpv4]
39
- }),
40
- await network.createUdpChannel({
41
- type: "udp6",
42
- netInterface,
30
+ let ipv4UdpChannel = void 0;
31
+ if (broadcastAddressIpv4 !== void 0) {
32
+ try {
33
+ ipv4UdpChannel = await network.createUdpChannel({
34
+ type: "udp4",
35
+ netInterface,
36
+ listeningPort,
37
+ membershipAddresses: [broadcastAddressIpv4]
38
+ });
39
+ } catch (error) {
40
+ NoAddressAvailableError.accept(error);
41
+ logger.info(`IPv4 UDP channel not created because IPv4 is not available: ${asError(error).message}`);
42
+ }
43
+ }
44
+ try {
45
+ return new UdpMulticastServer(
46
+ network,
47
+ broadcastAddressIpv4,
48
+ broadcastAddressIpv6,
43
49
  listeningPort,
44
- membershipAddresses: [broadcastAddressIpv6]
45
- }),
46
- netInterface
47
- );
50
+ ipv4UdpChannel,
51
+ await network.createUdpChannel({
52
+ type: "udp6",
53
+ netInterface,
54
+ listeningPort,
55
+ membershipAddresses: [broadcastAddressIpv6]
56
+ }),
57
+ netInterface
58
+ );
59
+ } catch (error) {
60
+ NoAddressAvailableError.accept(error);
61
+ logger.info(`IPv6 UDP interface not created because IPv6 is not available, but required my Matter.`);
62
+ throw error;
63
+ }
48
64
  }
49
65
  broadcastChannels = new Cache(
50
66
  "UDP broadcast channel",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/UdpMulticastServer.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["netInterface"]
6
6
  }
@@ -144,16 +144,16 @@ export declare const Transaction: {
144
144
  */
145
145
  act<T>(via: string, actor: (transaction: Transaction) => MaybePromise<T>): MaybePromise<T>;
146
146
  ReadOnly: {
147
- "__#14705@#participants": Set<Participant>;
148
- "__#14705@#roles": Map<{}, Participant>;
149
- "__#14705@#resources": Set<Resource>;
150
- "__#14705@#status": Status;
151
- "__#14705@#waitingOn"?: Iterable<Transaction>;
152
- "__#14705@#via": string;
153
- "__#14705@#shared"?: import("../index.js").Observable<[]>;
154
- "__#14705@#closed"?: import("../index.js").Observable<[]>;
155
- "__#14705@#isAsync": boolean;
156
- "__#14705@#reportingLocks": boolean;
147
+ "__#14950@#participants": Set<Participant>;
148
+ "__#14950@#roles": Map<{}, Participant>;
149
+ "__#14950@#resources": Set<Resource>;
150
+ "__#14950@#status": Status;
151
+ "__#14950@#waitingOn"?: Iterable<Transaction>;
152
+ "__#14950@#via": string;
153
+ "__#14950@#shared"?: import("../index.js").Observable<[]>;
154
+ "__#14950@#closed"?: import("../index.js").Observable<[]>;
155
+ "__#14950@#isAsync": boolean;
156
+ "__#14950@#reportingLocks": boolean;
157
157
  close(): void;
158
158
  readonly via: string;
159
159
  readonly status: Status;
@@ -175,15 +175,15 @@ export declare const Transaction: {
175
175
  waitFor(others: Set<Transaction>): Promise<void>;
176
176
  toString(): string;
177
177
  treatAsSlow(): void;
178
- "__#14705@#finalize"(status: Status, why: string, finalizer: () => MaybePromise): Promise<void> | undefined;
179
- "__#14705@#executePreCommit"(): MaybePromise<void>;
180
- "__#14705@#executeCommit"(): MaybePromise;
181
- "__#14705@#executeCommit1"(): MaybePromise;
182
- "__#14705@#executeCommit2"(): Promise<void> | undefined;
183
- "__#14705@#executePostCommit"(participants: Participant[]): MaybePromise;
184
- "__#14705@#executeRollback"(): Promise<void> | undefined;
185
- "__#14705@#locksChanged"(resources: Set<Resource>, how?: string): void;
186
- "__#14705@#assertAvailable"(): void;
178
+ "__#14950@#finalize"(status: Status, why: string, finalizer: () => MaybePromise): Promise<void> | undefined;
179
+ "__#14950@#executePreCommit"(): MaybePromise<void>;
180
+ "__#14950@#executeCommit"(): MaybePromise;
181
+ "__#14950@#executeCommit1"(): MaybePromise;
182
+ "__#14950@#executeCommit2"(): Promise<void> | undefined;
183
+ "__#14950@#executePostCommit"(participants: Participant[]): MaybePromise;
184
+ "__#14950@#executeRollback"(): Promise<void> | undefined;
185
+ "__#14950@#locksChanged"(resources: Set<Resource>, how?: string): void;
186
+ "__#14950@#assertAvailable"(): void;
187
187
  };
188
188
  Status: typeof Status;
189
189
  Resource: typeof Resource;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.13.0-alpha.0-20250324-d7b7d9731",
3
+ "version": "0.13.0-alpha.0-20250327-8b06e5a79",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^1.8.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.13.0-alpha.0-20250324-d7b7d9731"
39
+ "@matter/testing": "0.13.0-alpha.0-20250327-8b06e5a79"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -10,6 +10,8 @@ import { UdpChannel, UdpChannelOptions } from "./UdpChannel.js";
10
10
 
11
11
  export class NetworkError extends MatterError {}
12
12
 
13
+ export class NoAddressAvailableError extends NetworkError {}
14
+
13
15
  /**
14
16
  * @see {@link MatterSpecification.v11.Core} § 11.11.4.4
15
17
  * Duplicated from the GeneralDiagnostics cluster to avoid circular dependencies.
@@ -9,7 +9,7 @@ import { Logger } from "../log/Logger.js";
9
9
  import { Cache } from "../util/Cache.js";
10
10
  import { asError } from "../util/Error.js";
11
11
  import { isIPv4 } from "../util/Ip.js";
12
- import { Network } from "./Network.js";
12
+ import { Network, NoAddressAvailableError } from "./Network.js";
13
13
  import { UdpChannel } from "./UdpChannel.js";
14
14
 
15
15
  const logger = Logger.get("UdpMulticastServer");
@@ -30,27 +30,41 @@ export class UdpMulticastServer {
30
30
  listeningPort,
31
31
  network,
32
32
  }: UdpMulticastServerOptions) {
33
- return new UdpMulticastServer(
34
- network,
35
- broadcastAddressIpv4,
36
- broadcastAddressIpv6,
37
- listeningPort,
38
- broadcastAddressIpv4 === undefined
39
- ? undefined
40
- : await network.createUdpChannel({
41
- type: "udp4",
42
- netInterface,
43
- listeningPort,
44
- membershipAddresses: [broadcastAddressIpv4],
45
- }),
46
- await network.createUdpChannel({
47
- type: "udp6",
48
- netInterface,
33
+ let ipv4UdpChannel: UdpChannel | undefined = undefined;
34
+ if (broadcastAddressIpv4 !== undefined) {
35
+ try {
36
+ ipv4UdpChannel = await network.createUdpChannel({
37
+ type: "udp4",
38
+ netInterface,
39
+ listeningPort,
40
+ membershipAddresses: [broadcastAddressIpv4],
41
+ });
42
+ } catch (error) {
43
+ NoAddressAvailableError.accept(error);
44
+ logger.info(`IPv4 UDP channel not created because IPv4 is not available: ${asError(error).message}`);
45
+ }
46
+ }
47
+
48
+ try {
49
+ return new UdpMulticastServer(
50
+ network,
51
+ broadcastAddressIpv4,
52
+ broadcastAddressIpv6,
49
53
  listeningPort,
50
- membershipAddresses: [broadcastAddressIpv6],
51
- }),
52
- netInterface,
53
- );
54
+ ipv4UdpChannel,
55
+ await network.createUdpChannel({
56
+ type: "udp6",
57
+ netInterface,
58
+ listeningPort,
59
+ membershipAddresses: [broadcastAddressIpv6],
60
+ }),
61
+ netInterface,
62
+ );
63
+ } catch (error) {
64
+ NoAddressAvailableError.accept(error);
65
+ logger.info(`IPv6 UDP interface not created because IPv6 is not available, but required my Matter.`);
66
+ throw error;
67
+ }
54
68
  }
55
69
 
56
70
  private readonly broadcastChannels = new Cache<Promise<UdpChannel>>(