@matter/nodejs 0.14.0 → 0.14.1-alpha.0-20250606-a9bcd03f9

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.
@@ -63,7 +63,7 @@ class NodeJsCrypto extends import_general.Crypto {
63
63
  try {
64
64
  cipher.final();
65
65
  } catch (e) {
66
- throw new import_general.CryptoDecryptError(`${import_general.CRYPTO_ENCRYPT_ALGORITHM} decription failed: ${(0, import_general.asError)(e).message}`);
66
+ throw new import_general.CryptoDecryptError(`${import_general.CRYPTO_ENCRYPT_ALGORITHM} decryption failed: ${(0, import_general.asError)(e).message}`);
67
67
  }
68
68
  return new Uint8Array(result);
69
69
  }
@@ -3,16 +3,15 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ChannelType, UdpChannel, UdpChannelOptions } from "#general";
6
+ import { ChannelType, UdpChannel, UdpChannelOptions, UdpSocketType } from "#general";
7
7
  import * as dgram from "node:dgram";
8
8
  export declare class NodeJsUdpChannel implements UdpChannel {
9
9
  #private;
10
- private readonly type;
11
- private readonly socket;
12
- private readonly netInterface?;
13
- static create({ listeningPort, type, listeningAddress, netInterface, membershipAddresses, }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
10
+ static create({ listeningPort, type, listeningAddress, netInterface }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
14
11
  readonly maxPayloadSize: number;
15
- constructor(type: "udp4" | "udp6", socket: dgram.Socket, netInterface?: string | undefined);
12
+ constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
13
+ addMembership(membershipAddress: string): void;
14
+ dropMembership(membershipAddress: string): void;
16
15
  onData(listener: (netInterface: string | undefined, peerAddress: string, peerPort: number, data: Uint8Array) => void): {
17
16
  close: () => Promise<void>;
18
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,WAAW,EAWX,UAAU,EACV,iBAAiB,EACpB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqCpC,qBAAa,gBAAiB,YAAW,UAAU;;IAsE3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;WAvErB,MAAM,CAAC,EAChB,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACtB,EAAE,iBAAiB;IAmDpB,QAAQ,CAAC,cAAc,SAAwB;gBAY1B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,YAAA;IAG1C,MAAM,CACF,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAqC3G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAsCjD,KAAK;IAUX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
1
+ {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,WAAW,EAWX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqCpC,qBAAa,gBAAiB,YAAW,UAAU;;WAKlC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAmC9F,QAAQ,CAAC,cAAc,SAAwB;gBAWnC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAM5E,aAAa,CAAC,iBAAiB,EAAE,MAAM;IAkBvC,cAAc,CAAC,iBAAiB,EAAE,MAAM;IAkBxC,MAAM,CACF,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAqC3G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAsCjD,KAAK;IAUX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
@@ -70,18 +70,10 @@ function createDgramSocket(host, port, options) {
70
70
  });
71
71
  }
72
72
  class NodeJsUdpChannel {
73
- constructor(type, socket, netInterface) {
74
- this.type = type;
75
- this.socket = socket;
76
- this.netInterface = netInterface;
77
- }
78
- static async create({
79
- listeningPort,
80
- type,
81
- listeningAddress,
82
- netInterface,
83
- membershipAddresses
84
- }) {
73
+ #type;
74
+ #socket;
75
+ #netInterface;
76
+ static async create({ listeningPort, type, listeningAddress, netInterface }) {
85
77
  const socketOptions = { type, reuseAddr: true };
86
78
  if (type === "udp6") {
87
79
  socketOptions.ipv6Only = true;
@@ -113,20 +105,6 @@ class NodeJsUdpChannel {
113
105
  );
114
106
  socket.setMulticastInterface(multicastInterface);
115
107
  }
116
- if (membershipAddresses !== void 0) {
117
- const multicastInterfaces = import_NodeJsNetwork.NodeJsNetwork.getMembershipMulticastInterfaces(netInterface, type === "udp4");
118
- for (const address of membershipAddresses) {
119
- for (const multicastInterface of multicastInterfaces) {
120
- try {
121
- socket.addMembership(address, multicastInterface);
122
- } catch (error) {
123
- logger.warn(
124
- `Error adding membership for address ${address}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
125
- );
126
- }
127
- }
128
- }
129
- }
130
108
  return new NodeJsUdpChannel(type, socket, netInterfaceZone);
131
109
  }
132
110
  maxPayloadSize = import_general.MAX_UDP_MESSAGE_SIZE;
@@ -140,15 +118,50 @@ class NodeJsUdpChannel {
140
118
  () => this.#rejectDanglingSends()
141
119
  );
142
120
  #sendsInProgress = /* @__PURE__ */ new Map();
121
+ constructor(type, socket, netInterface) {
122
+ this.#type = type;
123
+ this.#socket = socket;
124
+ this.#netInterface = netInterface;
125
+ }
126
+ addMembership(membershipAddress) {
127
+ const multicastInterfaces = import_NodeJsNetwork.NodeJsNetwork.getMembershipMulticastInterfaces(
128
+ this.#netInterface,
129
+ this.#type === "udp4"
130
+ );
131
+ for (const multicastInterface of multicastInterfaces) {
132
+ try {
133
+ this.#socket.addMembership(membershipAddress, multicastInterface);
134
+ } catch (error) {
135
+ logger.warn(
136
+ `Error adding membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
137
+ );
138
+ }
139
+ }
140
+ }
141
+ dropMembership(membershipAddress) {
142
+ const multicastInterfaces = import_NodeJsNetwork.NodeJsNetwork.getMembershipMulticastInterfaces(
143
+ this.#netInterface,
144
+ this.#type === "udp4"
145
+ );
146
+ for (const multicastInterface of multicastInterfaces) {
147
+ try {
148
+ this.#socket.dropMembership(membershipAddress, multicastInterface);
149
+ } catch (error) {
150
+ logger.warn(
151
+ `Error removing membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
152
+ );
153
+ }
154
+ }
155
+ }
143
156
  onData(listener) {
144
157
  const messageListener = (data, { address, port }) => {
145
- const netInterface = this.netInterface ?? import_NodeJsNetwork.NodeJsNetwork.getNetInterfaceForIp(address);
158
+ const netInterface = this.#netInterface ?? import_NodeJsNetwork.NodeJsNetwork.getNetInterfaceForIp(address);
146
159
  listener(netInterface, address, port, data);
147
160
  };
148
- this.socket.on("message", messageListener);
161
+ this.#socket.on("message", messageListener);
149
162
  return {
150
163
  close: async () => {
151
- this.socket.removeListener("message", messageListener);
164
+ this.#socket.removeListener("message", messageListener);
152
165
  }
153
166
  };
154
167
  }
@@ -196,7 +209,7 @@ class NodeJsUdpChannel {
196
209
  this.#sendTimer.start();
197
210
  }
198
211
  try {
199
- this.socket.send(data, port, host, (error) => rejectOrResolve(error));
212
+ this.#socket.send(data, port, host, (error) => rejectOrResolve(error));
200
213
  } catch (error) {
201
214
  rejectOrResolve((0, import_general.repackErrorAs)(error, import_general.NetworkError));
202
215
  }
@@ -204,7 +217,7 @@ class NodeJsUdpChannel {
204
217
  }
205
218
  async close() {
206
219
  try {
207
- this.socket.close();
220
+ this.#socket.close();
208
221
  } catch (error) {
209
222
  if (!(error instanceof Error) || error.message !== "Not running") {
210
223
  logger.debug("Error on closing socket", error);
@@ -212,7 +225,7 @@ class NodeJsUdpChannel {
212
225
  }
213
226
  }
214
227
  get port() {
215
- return this.socket.address().port;
228
+ return this.#socket.address().port;
216
229
  }
217
230
  supports(type, address) {
218
231
  if (type !== import_general.ChannelType.UDP) {
@@ -221,7 +234,7 @@ class NodeJsUdpChannel {
221
234
  if (address === void 0) {
222
235
  return true;
223
236
  }
224
- if (this.type === "udp4") {
237
+ if (this.#type === "udp4") {
225
238
  return (0, import_general.isIPv4)(address);
226
239
  }
227
240
  return (0, import_general.isIPv6)(address);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/NodeJsUdpChannel.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["error"]
6
6
  }
@@ -43,7 +43,7 @@ class NodeJsCrypto extends Crypto {
43
43
  try {
44
44
  cipher.final();
45
45
  } catch (e) {
46
- throw new CryptoDecryptError(`${CRYPTO_ENCRYPT_ALGORITHM} decription failed: ${asError(e).message}`);
46
+ throw new CryptoDecryptError(`${CRYPTO_ENCRYPT_ALGORITHM} decryption failed: ${asError(e).message}`);
47
47
  }
48
48
  return new Uint8Array(result);
49
49
  }
@@ -3,16 +3,15 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { ChannelType, UdpChannel, UdpChannelOptions } from "#general";
6
+ import { ChannelType, UdpChannel, UdpChannelOptions, UdpSocketType } from "#general";
7
7
  import * as dgram from "node:dgram";
8
8
  export declare class NodeJsUdpChannel implements UdpChannel {
9
9
  #private;
10
- private readonly type;
11
- private readonly socket;
12
- private readonly netInterface?;
13
- static create({ listeningPort, type, listeningAddress, netInterface, membershipAddresses, }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
10
+ static create({ listeningPort, type, listeningAddress, netInterface }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
14
11
  readonly maxPayloadSize: number;
15
- constructor(type: "udp4" | "udp6", socket: dgram.Socket, netInterface?: string | undefined);
12
+ constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
13
+ addMembership(membershipAddress: string): void;
14
+ dropMembership(membershipAddress: string): void;
16
15
  onData(listener: (netInterface: string | undefined, peerAddress: string, peerPort: number, data: Uint8Array) => void): {
17
16
  close: () => Promise<void>;
18
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,WAAW,EAWX,UAAU,EACV,iBAAiB,EACpB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqCpC,qBAAa,gBAAiB,YAAW,UAAU;;IAsE3C,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;WAvErB,MAAM,CAAC,EAChB,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACtB,EAAE,iBAAiB;IAmDpB,QAAQ,CAAC,cAAc,SAAwB;gBAY1B,IAAI,EAAE,MAAM,GAAG,MAAM,EACrB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,YAAA;IAG1C,MAAM,CACF,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAqC3G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAsCjD,KAAK;IAUX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
1
+ {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,WAAW,EAWX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqCpC,qBAAa,gBAAiB,YAAW,UAAU;;WAKlC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAmC9F,QAAQ,CAAC,cAAc,SAAwB;gBAWnC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAM5E,aAAa,CAAC,iBAAiB,EAAE,MAAM;IAkBvC,cAAc,CAAC,iBAAiB,EAAE,MAAM;IAkBxC,MAAM,CACF,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;;;IAqC3G,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU;IAsCjD,KAAK;IAUX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
@@ -49,18 +49,10 @@ function createDgramSocket(host, port, options) {
49
49
  });
50
50
  }
51
51
  class NodeJsUdpChannel {
52
- constructor(type, socket, netInterface) {
53
- this.type = type;
54
- this.socket = socket;
55
- this.netInterface = netInterface;
56
- }
57
- static async create({
58
- listeningPort,
59
- type,
60
- listeningAddress,
61
- netInterface,
62
- membershipAddresses
63
- }) {
52
+ #type;
53
+ #socket;
54
+ #netInterface;
55
+ static async create({ listeningPort, type, listeningAddress, netInterface }) {
64
56
  const socketOptions = { type, reuseAddr: true };
65
57
  if (type === "udp6") {
66
58
  socketOptions.ipv6Only = true;
@@ -92,20 +84,6 @@ class NodeJsUdpChannel {
92
84
  );
93
85
  socket.setMulticastInterface(multicastInterface);
94
86
  }
95
- if (membershipAddresses !== void 0) {
96
- const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(netInterface, type === "udp4");
97
- for (const address of membershipAddresses) {
98
- for (const multicastInterface of multicastInterfaces) {
99
- try {
100
- socket.addMembership(address, multicastInterface);
101
- } catch (error) {
102
- logger.warn(
103
- `Error adding membership for address ${address}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
104
- );
105
- }
106
- }
107
- }
108
- }
109
87
  return new NodeJsUdpChannel(type, socket, netInterfaceZone);
110
88
  }
111
89
  maxPayloadSize = MAX_UDP_MESSAGE_SIZE;
@@ -119,15 +97,50 @@ class NodeJsUdpChannel {
119
97
  () => this.#rejectDanglingSends()
120
98
  );
121
99
  #sendsInProgress = /* @__PURE__ */ new Map();
100
+ constructor(type, socket, netInterface) {
101
+ this.#type = type;
102
+ this.#socket = socket;
103
+ this.#netInterface = netInterface;
104
+ }
105
+ addMembership(membershipAddress) {
106
+ const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(
107
+ this.#netInterface,
108
+ this.#type === "udp4"
109
+ );
110
+ for (const multicastInterface of multicastInterfaces) {
111
+ try {
112
+ this.#socket.addMembership(membershipAddress, multicastInterface);
113
+ } catch (error) {
114
+ logger.warn(
115
+ `Error adding membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
116
+ );
117
+ }
118
+ }
119
+ }
120
+ dropMembership(membershipAddress) {
121
+ const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(
122
+ this.#netInterface,
123
+ this.#type === "udp4"
124
+ );
125
+ for (const multicastInterface of multicastInterfaces) {
126
+ try {
127
+ this.#socket.dropMembership(membershipAddress, multicastInterface);
128
+ } catch (error) {
129
+ logger.warn(
130
+ `Error removing membership for address ${membershipAddress}${multicastInterface ? ` with interface ${multicastInterface}` : ""}: ${error}`
131
+ );
132
+ }
133
+ }
134
+ }
122
135
  onData(listener) {
123
136
  const messageListener = (data, { address, port }) => {
124
- const netInterface = this.netInterface ?? NodeJsNetwork.getNetInterfaceForIp(address);
137
+ const netInterface = this.#netInterface ?? NodeJsNetwork.getNetInterfaceForIp(address);
125
138
  listener(netInterface, address, port, data);
126
139
  };
127
- this.socket.on("message", messageListener);
140
+ this.#socket.on("message", messageListener);
128
141
  return {
129
142
  close: async () => {
130
- this.socket.removeListener("message", messageListener);
143
+ this.#socket.removeListener("message", messageListener);
131
144
  }
132
145
  };
133
146
  }
@@ -175,7 +188,7 @@ class NodeJsUdpChannel {
175
188
  this.#sendTimer.start();
176
189
  }
177
190
  try {
178
- this.socket.send(data, port, host, (error) => rejectOrResolve(error));
191
+ this.#socket.send(data, port, host, (error) => rejectOrResolve(error));
179
192
  } catch (error) {
180
193
  rejectOrResolve(repackErrorAs(error, NetworkError));
181
194
  }
@@ -183,7 +196,7 @@ class NodeJsUdpChannel {
183
196
  }
184
197
  async close() {
185
198
  try {
186
- this.socket.close();
199
+ this.#socket.close();
187
200
  } catch (error) {
188
201
  if (!(error instanceof Error) || error.message !== "Not running") {
189
202
  logger.debug("Error on closing socket", error);
@@ -191,7 +204,7 @@ class NodeJsUdpChannel {
191
204
  }
192
205
  }
193
206
  get port() {
194
- return this.socket.address().port;
207
+ return this.#socket.address().port;
195
208
  }
196
209
  supports(type, address) {
197
210
  if (type !== ChannelType.UDP) {
@@ -200,7 +213,7 @@ class NodeJsUdpChannel {
200
213
  if (address === void 0) {
201
214
  return true;
202
215
  }
203
- if (this.type === "udp4") {
216
+ if (this.#type === "udp4") {
204
217
  return isIPv4(address);
205
218
  }
206
219
  return isIPv6(address);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/NodeJsUdpChannel.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["error"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/nodejs",
3
- "version": "0.14.0",
3
+ "version": "0.14.1-alpha.0-20250606-a9bcd03f9",
4
4
  "description": "Node.js platform support for matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -44,17 +44,17 @@
44
44
  "#*": "./src/*"
45
45
  },
46
46
  "dependencies": {
47
- "@matter/general": "0.14.0",
48
- "@matter/node": "0.14.0",
49
- "@matter/protocol": "0.14.0",
50
- "@matter/types": "0.14.0"
47
+ "@matter/general": "0.14.1-alpha.0-20250606-a9bcd03f9",
48
+ "@matter/node": "0.14.1-alpha.0-20250606-a9bcd03f9",
49
+ "@matter/protocol": "0.14.1-alpha.0-20250606-a9bcd03f9",
50
+ "@matter/types": "0.14.1-alpha.0-20250606-a9bcd03f9"
51
51
  },
52
52
  "devDependencies": {
53
- "@matter/model": "0.14.0",
54
- "@matter/protocol": "0.14.0",
55
- "@matter/tools": "0.14.0",
56
- "@matter/testing": "0.14.0",
57
- "@project-chip/matter.js": "0.14.0",
53
+ "@matter/model": "0.14.1-alpha.0-20250606-a9bcd03f9",
54
+ "@matter/protocol": "0.14.1-alpha.0-20250606-a9bcd03f9",
55
+ "@matter/tools": "0.14.1-alpha.0-20250606-a9bcd03f9",
56
+ "@matter/testing": "0.14.1-alpha.0-20250606-a9bcd03f9",
57
+ "@project-chip/matter.js": "0.14.1-alpha.0-20250606-a9bcd03f9",
58
58
  "@types/bytebuffer": "^5.0.49"
59
59
  },
60
60
  "files": [
@@ -47,7 +47,7 @@ export class NodeJsCrypto extends Crypto {
47
47
  try {
48
48
  cipher.final();
49
49
  } catch (e) {
50
- throw new CryptoDecryptError(`${CRYPTO_ENCRYPT_ALGORITHM} decription failed: ${asError(e).message}`);
50
+ throw new CryptoDecryptError(`${CRYPTO_ENCRYPT_ALGORITHM} decryption failed: ${asError(e).message}`);
51
51
  }
52
52
  return new Uint8Array(result);
53
53
  }
@@ -18,6 +18,7 @@ import {
18
18
  Time,
19
19
  UdpChannel,
20
20
  UdpChannelOptions,
21
+ UdpSocketType,
21
22
  } from "#general";
22
23
  import { RetransmissionLimitReachedError } from "#protocol";
23
24
  import * as dgram from "node:dgram";
@@ -58,13 +59,11 @@ function createDgramSocket(host: string | undefined, port: number | undefined, o
58
59
  }
59
60
 
60
61
  export class NodeJsUdpChannel implements UdpChannel {
61
- static async create({
62
- listeningPort,
63
- type,
64
- listeningAddress,
65
- netInterface,
66
- membershipAddresses,
67
- }: UdpChannelOptions) {
62
+ readonly #type: UdpSocketType;
63
+ readonly #socket: dgram.Socket;
64
+ readonly #netInterface: string | undefined;
65
+
66
+ static async create({ listeningPort, type, listeningAddress, netInterface }: UdpChannelOptions) {
68
67
  const socketOptions: dgram.SocketOptions = { type, reuseAddr: true };
69
68
  if (type === "udp6") {
70
69
  socketOptions.ipv6Only = true;
@@ -96,22 +95,6 @@ export class NodeJsUdpChannel implements UdpChannel {
96
95
  );
97
96
  socket.setMulticastInterface(multicastInterface);
98
97
  }
99
- if (membershipAddresses !== undefined) {
100
- const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(netInterface, type === "udp4");
101
- for (const address of membershipAddresses) {
102
- for (const multicastInterface of multicastInterfaces) {
103
- try {
104
- socket.addMembership(address, multicastInterface);
105
- } catch (error) {
106
- logger.warn(
107
- `Error adding membership for address ${address}${
108
- multicastInterface ? ` with interface ${multicastInterface}` : ""
109
- }: ${error}`,
110
- );
111
- }
112
- }
113
- }
114
- }
115
98
  return new NodeJsUdpChannel(type, socket, netInterfaceZone);
116
99
  }
117
100
 
@@ -126,24 +109,60 @@ export class NodeJsUdpChannel implements UdpChannel {
126
109
  );
127
110
  readonly #sendsInProgress = new Map<Promise<void>, { sendMs: number; rejecter: (reason?: any) => void }>();
128
111
 
129
- constructor(
130
- private readonly type: "udp4" | "udp6",
131
- private readonly socket: dgram.Socket,
132
- private readonly netInterface?: string,
133
- ) {}
112
+ constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string) {
113
+ this.#type = type;
114
+ this.#socket = socket;
115
+ this.#netInterface = netInterface;
116
+ }
117
+
118
+ addMembership(membershipAddress: string) {
119
+ const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(
120
+ this.#netInterface,
121
+ this.#type === "udp4",
122
+ );
123
+ for (const multicastInterface of multicastInterfaces) {
124
+ try {
125
+ this.#socket.addMembership(membershipAddress, multicastInterface);
126
+ } catch (error) {
127
+ logger.warn(
128
+ `Error adding membership for address ${membershipAddress}${
129
+ multicastInterface ? ` with interface ${multicastInterface}` : ""
130
+ }: ${error}`,
131
+ );
132
+ }
133
+ }
134
+ }
135
+
136
+ dropMembership(membershipAddress: string) {
137
+ const multicastInterfaces = NodeJsNetwork.getMembershipMulticastInterfaces(
138
+ this.#netInterface,
139
+ this.#type === "udp4",
140
+ );
141
+ for (const multicastInterface of multicastInterfaces) {
142
+ try {
143
+ this.#socket.dropMembership(membershipAddress, multicastInterface);
144
+ } catch (error) {
145
+ logger.warn(
146
+ `Error removing membership for address ${membershipAddress}${
147
+ multicastInterface ? ` with interface ${multicastInterface}` : ""
148
+ }: ${error}`,
149
+ );
150
+ }
151
+ }
152
+ }
134
153
 
135
154
  onData(
136
155
  listener: (netInterface: string | undefined, peerAddress: string, peerPort: number, data: Uint8Array) => void,
137
156
  ) {
138
157
  const messageListener = (data: Uint8Array, { address, port }: dgram.RemoteInfo) => {
139
- const netInterface = this.netInterface ?? NodeJsNetwork.getNetInterfaceForIp(address);
158
+ const netInterface = this.#netInterface ?? NodeJsNetwork.getNetInterfaceForIp(address);
140
159
  listener(netInterface, address, port, data);
141
160
  };
142
161
 
143
- this.socket.on("message", messageListener);
162
+ this.#socket.on("message", messageListener);
144
163
  return {
145
164
  close: async () => {
146
- this.socket.removeListener("message", messageListener);
165
+ this.#socket.removeListener("message", messageListener);
147
166
  },
148
167
  };
149
168
  }
@@ -200,7 +219,7 @@ export class NodeJsUdpChannel implements UdpChannel {
200
219
  this.#sendTimer.start();
201
220
  }
202
221
  try {
203
- this.socket.send(data, port, host, error => rejectOrResolve(error));
222
+ this.#socket.send(data, port, host, error => rejectOrResolve(error));
204
223
  } catch (error) {
205
224
  rejectOrResolve(repackErrorAs(error, NetworkError));
206
225
  }
@@ -210,7 +229,7 @@ export class NodeJsUdpChannel implements UdpChannel {
210
229
 
211
230
  async close() {
212
231
  try {
213
- this.socket.close();
232
+ this.#socket.close();
214
233
  } catch (error) {
215
234
  if (!(error instanceof Error) || error.message !== "Not running") {
216
235
  logger.debug("Error on closing socket", error);
@@ -219,7 +238,7 @@ export class NodeJsUdpChannel implements UdpChannel {
219
238
  }
220
239
 
221
240
  get port() {
222
- return this.socket.address().port;
241
+ return this.#socket.address().port;
223
242
  }
224
243
 
225
244
  supports(type: ChannelType, address?: string) {
@@ -233,7 +252,7 @@ export class NodeJsUdpChannel implements UdpChannel {
233
252
 
234
253
  // TODO - we currently only discriminate based on protocol type. We should also determine whether the address subnet is correct
235
254
 
236
- if (this.type === "udp4") {
255
+ if (this.#type === "udp4") {
237
256
  return isIPv4(address);
238
257
  }
239
258