@matter/nodejs 0.16.0-alpha.0-20251203-aaf94bca8 → 0.16.0-alpha.0-20251207-37e501b18

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.
@@ -3,13 +3,13 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Bytes, ChannelType, UdpChannel, UdpChannelOptions, UdpSocketType } from "#general";
6
+ import { Bytes, ChannelType, Lifetime, 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
- static create({ listeningPort, type, listeningAddress, netInterface, reuseAddress }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
10
+ static create({ lifetime: lifetimeOwner, listeningPort, type, listeningAddress, netInterface, reuseAddress, }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
11
11
  readonly maxPayloadSize: number;
12
- constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
12
+ constructor(lifetime: Lifetime, type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
13
13
  addMembership(membershipAddress: string): void;
14
14
  dropMembership(membershipAddress: string): void;
15
15
  onData(listener: (netInterface: string | undefined, peerAddress: string, peerPort: number, data: Bytes) => void): {
@@ -1 +1 @@
1
- {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,KAAK,EACL,WAAW,EAcX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqDpC,qBAAa,gBAAiB,YAAW,UAAU;;WAKlC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAuD5G,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,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;;;IAoCzG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IAsC5C,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,EAGH,KAAK,EACL,WAAW,EAMX,QAAQ,EASR,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqDpC,qBAAa,gBAAiB,YAAW,UAAU;;WAMlC,MAAM,CAAC,EAChB,QAAQ,EAAE,aAAa,EACvB,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACf,EAAE,iBAAiB;IAgEpB,QAAQ,CAAC,cAAc,SAAwB;gBAWnC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAOhG,aAAa,CAAC,iBAAiB,EAAE,MAAM;IAkBvC,cAAc,CAAC,iBAAiB,EAAE,MAAM;IAkBxC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;;;IAoCzG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IAsC5C,KAAK;IAWX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
9
+ var __typeError = (msg) => {
10
+ throw TypeError(msg);
11
+ };
8
12
  var __export = (target, all) => {
9
13
  for (var name in all)
10
14
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -26,6 +30,47 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
30
  mod
27
31
  ));
28
32
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
+ var __using = (stack, value, async) => {
34
+ if (value != null) {
35
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
36
+ var dispose, inner;
37
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
38
+ if (dispose === void 0) {
39
+ dispose = value[__knownSymbol("dispose")];
40
+ if (async) inner = dispose;
41
+ }
42
+ if (typeof dispose !== "function") __typeError("Object not disposable");
43
+ if (inner) dispose = function() {
44
+ try {
45
+ inner.call(this);
46
+ } catch (e) {
47
+ return Promise.reject(e);
48
+ }
49
+ };
50
+ stack.push([async, dispose, value]);
51
+ } else if (async) {
52
+ stack.push([async]);
53
+ }
54
+ return value;
55
+ };
56
+ var __callDispose = (stack, error, hasError) => {
57
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
58
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
59
+ };
60
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
61
+ var next = (it) => {
62
+ while (it = stack.pop()) {
63
+ try {
64
+ var result = it[1] && it[1].call(it[2]);
65
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
66
+ } catch (e) {
67
+ fail(e);
68
+ }
69
+ }
70
+ if (hasError) throw error;
71
+ };
72
+ return next();
73
+ };
29
74
  var NodeJsUdpChannel_exports = {};
30
75
  __export(NodeJsUdpChannel_exports, {
31
76
  NodeJsUdpChannel: () => NodeJsUdpChannel
@@ -83,57 +128,86 @@ function createDgramSocket(host, port, options) {
83
128
  });
84
129
  }
85
130
  class NodeJsUdpChannel {
131
+ #lifetime;
86
132
  #type;
87
133
  #socket;
88
134
  #netInterface;
89
- static async create({ listeningPort, type, listeningAddress, netInterface, reuseAddress }) {
90
- let dgramType;
91
- switch (type) {
92
- case "udp":
93
- case "udp6":
94
- dgramType = "udp6";
95
- break;
96
- case "udp4":
97
- dgramType = "udp4";
98
- break;
99
- default:
100
- throw new import_general.ImplementationError(`Unrecognized UDP socket type ${type}`);
101
- }
102
- const socketOptions = { type: dgramType };
103
- if (type === "udp6") {
104
- socketOptions.ipv6Only = true;
105
- }
106
- if (reuseAddress) {
107
- socketOptions.reuseAddr = true;
108
- }
109
- const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
110
- socket.setBroadcast(true);
111
- let netInterfaceZone;
112
- if (netInterface !== void 0) {
113
- netInterfaceZone = import_NodeJsNetwork.NodeJsNetwork.getNetInterfaceZoneIpv6(netInterface);
114
- let multicastInterface;
115
- if (type === "udp4") {
116
- multicastInterface = import_NodeJsNetwork.NodeJsNetwork.getMulticastInterfaceIpv4(netInterface);
117
- if (multicastInterface === void 0) {
118
- throw new import_general.NoAddressAvailableError(`No IPv4 addresses on interface "${netInterface}"`);
135
+ static async create({
136
+ lifetime: lifetimeOwner,
137
+ listeningPort,
138
+ type,
139
+ listeningAddress,
140
+ netInterface,
141
+ reuseAddress
142
+ }) {
143
+ var _stack2 = [];
144
+ try {
145
+ const name = `${listeningAddress?.includes(":") ? `[${listeningAddress}]` : listeningAddress ?? "*"}:${listeningPort}`;
146
+ const lifetime = __using(_stack2, (lifetimeOwner ?? import_general.Lifetime.process).join("socket", import_general.Diagnostic.strong(name)));
147
+ lifetime.details.intf = netInterface;
148
+ let dgramType;
149
+ switch (type) {
150
+ case "udp":
151
+ case "udp6":
152
+ dgramType = "udp6";
153
+ break;
154
+ case "udp4":
155
+ dgramType = "udp4";
156
+ break;
157
+ default:
158
+ throw new import_general.ImplementationError(`Unrecognized UDP socket type ${type}`);
159
+ }
160
+ const socketOptions = { type: dgramType };
161
+ if (type === "udp6") {
162
+ socketOptions.ipv6Only = true;
163
+ }
164
+ if (reuseAddress) {
165
+ socketOptions.reuseAddr = true;
166
+ }
167
+ let socket;
168
+ {
169
+ var _stack = [];
170
+ try {
171
+ const _creating = __using(_stack, lifetime.join("creating"));
172
+ socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
173
+ } catch (_) {
174
+ var _error = _, _hasError = true;
175
+ } finally {
176
+ __callDispose(_stack, _error, _hasError);
119
177
  }
120
- } else {
121
- if (netInterfaceZone === void 0) {
122
- throw new import_general.NoAddressAvailableError(`No IPv6 addresses on interface "${netInterface}"`);
178
+ }
179
+ socket.setBroadcast(true);
180
+ let netInterfaceZone;
181
+ if (netInterface !== void 0) {
182
+ netInterfaceZone = import_NodeJsNetwork.NodeJsNetwork.getNetInterfaceZoneIpv6(netInterface);
183
+ let multicastInterface;
184
+ if (type === "udp4") {
185
+ multicastInterface = import_NodeJsNetwork.NodeJsNetwork.getMulticastInterfaceIpv4(netInterface);
186
+ if (multicastInterface === void 0) {
187
+ throw new import_general.NoAddressAvailableError(`No IPv4 addresses on interface "${netInterface}"`);
188
+ }
189
+ } else {
190
+ if (netInterfaceZone === void 0) {
191
+ throw new import_general.NoAddressAvailableError(`No IPv6 addresses on interface "${netInterface}"`);
192
+ }
193
+ multicastInterface = `::%${netInterfaceZone}`;
123
194
  }
124
- multicastInterface = `::%${netInterfaceZone}`;
195
+ logger.debug(
196
+ "Initialize multicast",
197
+ import_general.Diagnostic.dict({
198
+ address: `${multicastInterface}:${listeningPort}`,
199
+ interface: netInterface,
200
+ type
201
+ })
202
+ );
203
+ socket.setMulticastInterface(multicastInterface);
125
204
  }
126
- logger.debug(
127
- "Initialize multicast",
128
- import_general.Diagnostic.dict({
129
- address: `${multicastInterface}:${listeningPort}`,
130
- interface: netInterface,
131
- type
132
- })
133
- );
134
- socket.setMulticastInterface(multicastInterface);
205
+ return new NodeJsUdpChannel(lifetime, type, socket, netInterfaceZone);
206
+ } catch (_2) {
207
+ var _error2 = _2, _hasError2 = true;
208
+ } finally {
209
+ __callDispose(_stack2, _error2, _hasError2);
135
210
  }
136
- return new NodeJsUdpChannel(type, socket, netInterfaceZone);
137
211
  }
138
212
  maxPayloadSize = import_general.MAX_UDP_MESSAGE_SIZE;
139
213
  /**
@@ -146,7 +220,8 @@ class NodeJsUdpChannel {
146
220
  () => this.#rejectDanglingSends()
147
221
  );
148
222
  #sendsInProgress = /* @__PURE__ */ new Map();
149
- constructor(type, socket, netInterface) {
223
+ constructor(lifetime, type, socket, netInterface) {
224
+ this.#lifetime = lifetime;
150
225
  this.#type = type;
151
226
  this.#socket = socket;
152
227
  this.#netInterface = netInterface;
@@ -244,12 +319,20 @@ class NodeJsUdpChannel {
244
319
  return promise;
245
320
  }
246
321
  async close() {
322
+ var _stack = [];
247
323
  try {
248
- this.#socket.close();
249
- } catch (error) {
250
- if (!(error instanceof Error) || error.message !== "Not running") {
251
- logger.debug("Error on closing socket", error);
324
+ const _closing = __using(_stack, this.#lifetime.closing());
325
+ try {
326
+ await new Promise((resolve) => this.#socket.close(resolve));
327
+ } catch (error) {
328
+ if (!(error instanceof Error) || error.message !== "Not running") {
329
+ logger.debug("Error on closing socket", error);
330
+ }
252
331
  }
332
+ } catch (_) {
333
+ var _error = _, _hasError = true;
334
+ } finally {
335
+ __callDispose(_stack, _error, _hasError);
253
336
  }
254
337
  }
255
338
  get port() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/NodeJsUdpChannel.ts"],
4
- "mappings": "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",
5
- "names": ["error"]
4
+ "mappings": "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",
5
+ "names": ["error", "_stack", "_", "_error", "_hasError"]
6
6
  }
@@ -3,13 +3,13 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { Bytes, ChannelType, UdpChannel, UdpChannelOptions, UdpSocketType } from "#general";
6
+ import { Bytes, ChannelType, Lifetime, 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
- static create({ listeningPort, type, listeningAddress, netInterface, reuseAddress }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
10
+ static create({ lifetime: lifetimeOwner, listeningPort, type, listeningAddress, netInterface, reuseAddress, }: UdpChannelOptions): Promise<NodeJsUdpChannel>;
11
11
  readonly maxPayloadSize: number;
12
- constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
12
+ constructor(lifetime: Lifetime, type: UdpSocketType, socket: dgram.Socket, netInterface?: string);
13
13
  addMembership(membershipAddress: string): void;
14
14
  dropMembership(membershipAddress: string): void;
15
15
  onData(listener: (netInterface: string | undefined, peerAddress: string, peerPort: number, data: Bytes) => void): {
@@ -1 +1 @@
1
- {"version":3,"file":"NodeJsUdpChannel.d.ts","sourceRoot":"","sources":["../../../src/net/NodeJsUdpChannel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGH,KAAK,EACL,WAAW,EAcX,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqDpC,qBAAa,gBAAiB,YAAW,UAAU;;WAKlC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,iBAAiB;IAuD5G,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,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;;;IAoCzG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IAsC5C,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,EAGH,KAAK,EACL,WAAW,EAMX,QAAQ,EASR,UAAU,EACV,iBAAiB,EACjB,aAAa,EAChB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAqDpC,qBAAa,gBAAiB,YAAW,UAAU;;WAMlC,MAAM,CAAC,EAChB,QAAQ,EAAE,aAAa,EACvB,aAAa,EACb,IAAI,EACJ,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACf,EAAE,iBAAiB;IAgEpB,QAAQ,CAAC,cAAc,SAAwB;gBAWnC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAOhG,aAAa,CAAC,iBAAiB,EAAE,MAAM;IAkBvC,cAAc,CAAC,iBAAiB,EAAE,MAAM;IAkBxC,MAAM,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,KAAK,IAAI;;;IAoCzG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK;IAsC5C,KAAK;IAWX,IAAI,IAAI,WAEP;IAED,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM;CAiB/C"}
@@ -1,3 +1,48 @@
1
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
2
+ var __typeError = (msg) => {
3
+ throw TypeError(msg);
4
+ };
5
+ var __using = (stack, value, async) => {
6
+ if (value != null) {
7
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
8
+ var dispose, inner;
9
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
10
+ if (dispose === void 0) {
11
+ dispose = value[__knownSymbol("dispose")];
12
+ if (async) inner = dispose;
13
+ }
14
+ if (typeof dispose !== "function") __typeError("Object not disposable");
15
+ if (inner) dispose = function() {
16
+ try {
17
+ inner.call(this);
18
+ } catch (e) {
19
+ return Promise.reject(e);
20
+ }
21
+ };
22
+ stack.push([async, dispose, value]);
23
+ } else if (async) {
24
+ stack.push([async]);
25
+ }
26
+ return value;
27
+ };
28
+ var __callDispose = (stack, error, hasError) => {
29
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
30
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
31
+ };
32
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
33
+ var next = (it) => {
34
+ while (it = stack.pop()) {
35
+ try {
36
+ var result = it[1] && it[1].call(it[2]);
37
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
38
+ } catch (e) {
39
+ fail(e);
40
+ }
41
+ }
42
+ if (hasError) throw error;
43
+ };
44
+ return next();
45
+ };
1
46
  /**
2
47
  * @license
3
48
  * Copyright 2022-2025 Matter.js Authors
@@ -13,6 +58,7 @@ import {
13
58
  ImplementationError,
14
59
  isIPv4,
15
60
  isIPv6,
61
+ Lifetime,
16
62
  Logger,
17
63
  MAX_UDP_MESSAGE_SIZE,
18
64
  Millis,
@@ -68,57 +114,86 @@ function createDgramSocket(host, port, options) {
68
114
  });
69
115
  }
70
116
  class NodeJsUdpChannel {
117
+ #lifetime;
71
118
  #type;
72
119
  #socket;
73
120
  #netInterface;
74
- static async create({ listeningPort, type, listeningAddress, netInterface, reuseAddress }) {
75
- let dgramType;
76
- switch (type) {
77
- case "udp":
78
- case "udp6":
79
- dgramType = "udp6";
80
- break;
81
- case "udp4":
82
- dgramType = "udp4";
83
- break;
84
- default:
85
- throw new ImplementationError(`Unrecognized UDP socket type ${type}`);
86
- }
87
- const socketOptions = { type: dgramType };
88
- if (type === "udp6") {
89
- socketOptions.ipv6Only = true;
90
- }
91
- if (reuseAddress) {
92
- socketOptions.reuseAddr = true;
93
- }
94
- const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
95
- socket.setBroadcast(true);
96
- let netInterfaceZone;
97
- if (netInterface !== void 0) {
98
- netInterfaceZone = NodeJsNetwork.getNetInterfaceZoneIpv6(netInterface);
99
- let multicastInterface;
100
- if (type === "udp4") {
101
- multicastInterface = NodeJsNetwork.getMulticastInterfaceIpv4(netInterface);
102
- if (multicastInterface === void 0) {
103
- throw new NoAddressAvailableError(`No IPv4 addresses on interface "${netInterface}"`);
121
+ static async create({
122
+ lifetime: lifetimeOwner,
123
+ listeningPort,
124
+ type,
125
+ listeningAddress,
126
+ netInterface,
127
+ reuseAddress
128
+ }) {
129
+ var _stack2 = [];
130
+ try {
131
+ const name = `${listeningAddress?.includes(":") ? `[${listeningAddress}]` : listeningAddress ?? "*"}:${listeningPort}`;
132
+ const lifetime = __using(_stack2, (lifetimeOwner ?? Lifetime.process).join("socket", Diagnostic.strong(name)));
133
+ lifetime.details.intf = netInterface;
134
+ let dgramType;
135
+ switch (type) {
136
+ case "udp":
137
+ case "udp6":
138
+ dgramType = "udp6";
139
+ break;
140
+ case "udp4":
141
+ dgramType = "udp4";
142
+ break;
143
+ default:
144
+ throw new ImplementationError(`Unrecognized UDP socket type ${type}`);
145
+ }
146
+ const socketOptions = { type: dgramType };
147
+ if (type === "udp6") {
148
+ socketOptions.ipv6Only = true;
149
+ }
150
+ if (reuseAddress) {
151
+ socketOptions.reuseAddr = true;
152
+ }
153
+ let socket;
154
+ {
155
+ var _stack = [];
156
+ try {
157
+ const _creating = __using(_stack, lifetime.join("creating"));
158
+ socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
159
+ } catch (_) {
160
+ var _error = _, _hasError = true;
161
+ } finally {
162
+ __callDispose(_stack, _error, _hasError);
104
163
  }
105
- } else {
106
- if (netInterfaceZone === void 0) {
107
- throw new NoAddressAvailableError(`No IPv6 addresses on interface "${netInterface}"`);
164
+ }
165
+ socket.setBroadcast(true);
166
+ let netInterfaceZone;
167
+ if (netInterface !== void 0) {
168
+ netInterfaceZone = NodeJsNetwork.getNetInterfaceZoneIpv6(netInterface);
169
+ let multicastInterface;
170
+ if (type === "udp4") {
171
+ multicastInterface = NodeJsNetwork.getMulticastInterfaceIpv4(netInterface);
172
+ if (multicastInterface === void 0) {
173
+ throw new NoAddressAvailableError(`No IPv4 addresses on interface "${netInterface}"`);
174
+ }
175
+ } else {
176
+ if (netInterfaceZone === void 0) {
177
+ throw new NoAddressAvailableError(`No IPv6 addresses on interface "${netInterface}"`);
178
+ }
179
+ multicastInterface = `::%${netInterfaceZone}`;
108
180
  }
109
- multicastInterface = `::%${netInterfaceZone}`;
181
+ logger.debug(
182
+ "Initialize multicast",
183
+ Diagnostic.dict({
184
+ address: `${multicastInterface}:${listeningPort}`,
185
+ interface: netInterface,
186
+ type
187
+ })
188
+ );
189
+ socket.setMulticastInterface(multicastInterface);
110
190
  }
111
- logger.debug(
112
- "Initialize multicast",
113
- Diagnostic.dict({
114
- address: `${multicastInterface}:${listeningPort}`,
115
- interface: netInterface,
116
- type
117
- })
118
- );
119
- socket.setMulticastInterface(multicastInterface);
191
+ return new NodeJsUdpChannel(lifetime, type, socket, netInterfaceZone);
192
+ } catch (_2) {
193
+ var _error2 = _2, _hasError2 = true;
194
+ } finally {
195
+ __callDispose(_stack2, _error2, _hasError2);
120
196
  }
121
- return new NodeJsUdpChannel(type, socket, netInterfaceZone);
122
197
  }
123
198
  maxPayloadSize = MAX_UDP_MESSAGE_SIZE;
124
199
  /**
@@ -131,7 +206,8 @@ class NodeJsUdpChannel {
131
206
  () => this.#rejectDanglingSends()
132
207
  );
133
208
  #sendsInProgress = /* @__PURE__ */ new Map();
134
- constructor(type, socket, netInterface) {
209
+ constructor(lifetime, type, socket, netInterface) {
210
+ this.#lifetime = lifetime;
135
211
  this.#type = type;
136
212
  this.#socket = socket;
137
213
  this.#netInterface = netInterface;
@@ -229,12 +305,20 @@ class NodeJsUdpChannel {
229
305
  return promise;
230
306
  }
231
307
  async close() {
308
+ var _stack = [];
232
309
  try {
233
- this.#socket.close();
234
- } catch (error) {
235
- if (!(error instanceof Error) || error.message !== "Not running") {
236
- logger.debug("Error on closing socket", error);
310
+ const _closing = __using(_stack, this.#lifetime.closing());
311
+ try {
312
+ await new Promise((resolve) => this.#socket.close(resolve));
313
+ } catch (error) {
314
+ if (!(error instanceof Error) || error.message !== "Not running") {
315
+ logger.debug("Error on closing socket", error);
316
+ }
237
317
  }
318
+ } catch (_) {
319
+ var _error = _, _hasError = true;
320
+ } finally {
321
+ __callDispose(_stack, _error, _hasError);
238
322
  }
239
323
  }
240
324
  get port() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/net/NodeJsUdpChannel.ts"],
4
- "mappings": "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",
5
- "names": ["error"]
4
+ "mappings": "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",
5
+ "names": ["error", "_stack", "_", "_error", "_hasError"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/nodejs",
3
- "version": "0.16.0-alpha.0-20251203-aaf94bca8",
3
+ "version": "0.16.0-alpha.0-20251207-37e501b18",
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.16.0-alpha.0-20251203-aaf94bca8",
48
- "@matter/node": "0.16.0-alpha.0-20251203-aaf94bca8",
49
- "@matter/protocol": "0.16.0-alpha.0-20251203-aaf94bca8",
50
- "@matter/types": "0.16.0-alpha.0-20251203-aaf94bca8"
47
+ "@matter/general": "0.16.0-alpha.0-20251207-37e501b18",
48
+ "@matter/node": "0.16.0-alpha.0-20251207-37e501b18",
49
+ "@matter/protocol": "0.16.0-alpha.0-20251207-37e501b18",
50
+ "@matter/types": "0.16.0-alpha.0-20251207-37e501b18"
51
51
  },
52
52
  "devDependencies": {
53
- "@matter/model": "0.16.0-alpha.0-20251203-aaf94bca8",
54
- "@matter/protocol": "0.16.0-alpha.0-20251203-aaf94bca8",
55
- "@matter/testing": "0.16.0-alpha.0-20251203-aaf94bca8",
56
- "@matter/tools": "0.16.0-alpha.0-20251203-aaf94bca8",
57
- "@project-chip/matter.js": "0.16.0-alpha.0-20251203-aaf94bca8",
53
+ "@matter/model": "0.16.0-alpha.0-20251207-37e501b18",
54
+ "@matter/protocol": "0.16.0-alpha.0-20251207-37e501b18",
55
+ "@matter/testing": "0.16.0-alpha.0-20251207-37e501b18",
56
+ "@matter/tools": "0.16.0-alpha.0-20251207-37e501b18",
57
+ "@project-chip/matter.js": "0.16.0-alpha.0-20251207-37e501b18",
58
58
  "@types/bytebuffer": "^5.0.49"
59
59
  },
60
60
  "files": [
@@ -14,6 +14,7 @@ import {
14
14
  ImplementationError,
15
15
  isIPv4,
16
16
  isIPv6,
17
+ Lifetime,
17
18
  Logger,
18
19
  MAX_UDP_MESSAGE_SIZE,
19
20
  Millis,
@@ -81,11 +82,23 @@ function createDgramSocket(host: string | undefined, port: number | undefined, o
81
82
  }
82
83
 
83
84
  export class NodeJsUdpChannel implements UdpChannel {
85
+ readonly #lifetime: Lifetime;
84
86
  readonly #type: UdpSocketType;
85
87
  readonly #socket: dgram.Socket;
86
88
  readonly #netInterface: string | undefined;
87
89
 
88
- static async create({ listeningPort, type, listeningAddress, netInterface, reuseAddress }: UdpChannelOptions) {
90
+ static async create({
91
+ lifetime: lifetimeOwner,
92
+ listeningPort,
93
+ type,
94
+ listeningAddress,
95
+ netInterface,
96
+ reuseAddress,
97
+ }: UdpChannelOptions) {
98
+ const name = `${listeningAddress?.includes(":") ? `[${listeningAddress}]` : (listeningAddress ?? "*")}:${listeningPort}`;
99
+ using lifetime = (lifetimeOwner ?? Lifetime.process).join("socket", Diagnostic.strong(name));
100
+ lifetime.details.intf = netInterface;
101
+
89
102
  let dgramType: "udp4" | "udp6";
90
103
  switch (type) {
91
104
  case "udp":
@@ -110,7 +123,12 @@ export class NodeJsUdpChannel implements UdpChannel {
110
123
  socketOptions.reuseAddr = true;
111
124
  }
112
125
 
113
- const socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
126
+ let socket;
127
+ {
128
+ using _creating = lifetime.join("creating");
129
+ socket = await createDgramSocket(listeningAddress, listeningPort, socketOptions);
130
+ }
131
+
114
132
  socket.setBroadcast(true);
115
133
  let netInterfaceZone: string | undefined;
116
134
  if (netInterface !== undefined) {
@@ -137,7 +155,7 @@ export class NodeJsUdpChannel implements UdpChannel {
137
155
  );
138
156
  socket.setMulticastInterface(multicastInterface);
139
157
  }
140
- return new NodeJsUdpChannel(type, socket, netInterfaceZone);
158
+ return new NodeJsUdpChannel(lifetime, type, socket, netInterfaceZone);
141
159
  }
142
160
 
143
161
  readonly maxPayloadSize = MAX_UDP_MESSAGE_SIZE;
@@ -151,7 +169,8 @@ export class NodeJsUdpChannel implements UdpChannel {
151
169
  );
152
170
  readonly #sendsInProgress = new Map<Promise<void>, { sendMs: number; rejecter: (reason?: any) => void }>();
153
171
 
154
- constructor(type: UdpSocketType, socket: dgram.Socket, netInterface?: string) {
172
+ constructor(lifetime: Lifetime, type: UdpSocketType, socket: dgram.Socket, netInterface?: string) {
173
+ this.#lifetime = lifetime;
155
174
  this.#type = type;
156
175
  this.#socket = socket;
157
176
  this.#netInterface = netInterface;
@@ -268,8 +287,9 @@ export class NodeJsUdpChannel implements UdpChannel {
268
287
  }
269
288
 
270
289
  async close() {
290
+ using _closing = this.#lifetime.closing();
271
291
  try {
272
- this.#socket.close();
292
+ await new Promise<void>(resolve => this.#socket.close(resolve));
273
293
  } catch (error) {
274
294
  if (!(error instanceof Error) || error.message !== "Not running") {
275
295
  logger.debug("Error on closing socket", error);