matter-server 0.5.9 → 0.5.10
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.
- package/dist/esm/MatterServer.js +31 -8
- package/dist/esm/MatterServer.js.map +1 -1
- package/package.json +5 -5
- package/src/MatterServer.ts +34 -8
package/dist/esm/MatterServer.js
CHANGED
|
@@ -149,21 +149,44 @@ async function start() {
|
|
|
149
149
|
await server.start();
|
|
150
150
|
}
|
|
151
151
|
async function stop() {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
152
|
+
try {
|
|
153
|
+
await server?.stop();
|
|
154
|
+
} catch (err) {
|
|
155
|
+
console.error(`Failed to stop server: ${err}`);
|
|
156
|
+
}
|
|
157
|
+
try {
|
|
158
|
+
await controller?.stop();
|
|
159
|
+
} catch (err) {
|
|
160
|
+
console.error(`Failed to stop controller: ${err}`);
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
if (legacyDataWriter?.hasPendingWork()) {
|
|
164
|
+
logger.info("Flushing pending legacy data writes...");
|
|
165
|
+
await legacyDataWriter.flush();
|
|
166
|
+
}
|
|
167
|
+
} catch (err) {
|
|
168
|
+
console.error(`Failed to flush legacy data: ${err}`);
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
await config?.close();
|
|
172
|
+
} catch (err) {
|
|
173
|
+
console.error(`Failed to close config storage: ${err}`);
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
await env.runtime.close();
|
|
177
|
+
} catch (err) {
|
|
178
|
+
console.error(`Failed to close runtime: ${err}`);
|
|
157
179
|
}
|
|
158
|
-
await config?.close();
|
|
159
180
|
try {
|
|
160
181
|
await fileLoggerClose?.();
|
|
161
182
|
} catch (err) {
|
|
162
183
|
console.error(`Failed to flush log file on shutdown: ${err}`);
|
|
163
184
|
}
|
|
164
|
-
process.exit(0);
|
|
165
185
|
}
|
|
166
|
-
start().catch((err) =>
|
|
186
|
+
start().catch(async (err) => {
|
|
187
|
+
console.error(err);
|
|
188
|
+
await config?.close();
|
|
189
|
+
});
|
|
167
190
|
process.on("SIGINT", () => void stop().catch((err) => console.error(err)));
|
|
168
191
|
process.on("SIGTERM", () => void stop().catch((err) => console.error(err)));
|
|
169
192
|
//# sourceMappingURL=MatterServer.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/MatterServer.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "matter-server",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "WebSocket Matter server based on matter.js",
|
|
6
6
|
"bugs": {
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@matter/main": "0.17.0-alpha.0-20260326-42b6f59b7",
|
|
27
|
-
"@matter-server/ws-controller": "0.5.
|
|
28
|
-
"@matter-server/dashboard": "0.5.
|
|
29
|
-
"@matter-server/custom-clusters": "0.5.
|
|
27
|
+
"@matter-server/ws-controller": "0.5.10",
|
|
28
|
+
"@matter-server/dashboard": "0.5.10",
|
|
29
|
+
"@matter-server/custom-clusters": "0.5.10",
|
|
30
30
|
"commander": "^14.0.3",
|
|
31
31
|
"express": "^5.2.1"
|
|
32
32
|
},
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@types/node": "^25.5.0",
|
|
36
36
|
"@matter/nodejs": "0.17.0-alpha.0-20260326-42b6f59b7",
|
|
37
37
|
"@matter/testing": "0.17.0-alpha.0-20260326-42b6f59b7",
|
|
38
|
-
"@matter-server/ws-client": "0.5.
|
|
38
|
+
"@matter-server/ws-client": "0.5.10"
|
|
39
39
|
},
|
|
40
40
|
"files": [
|
|
41
41
|
"dist/**/*",
|
package/src/MatterServer.ts
CHANGED
|
@@ -190,23 +190,49 @@ async function start() {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
async function stop() {
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
try {
|
|
194
|
+
await server?.stop();
|
|
195
|
+
} catch (err) {
|
|
196
|
+
console.error(`Failed to stop server: ${err}`);
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
await controller?.stop();
|
|
200
|
+
} catch (err) {
|
|
201
|
+
console.error(`Failed to stop controller: ${err}`);
|
|
202
|
+
}
|
|
195
203
|
// Flush any pending legacy data writes before closing
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
204
|
+
try {
|
|
205
|
+
if (legacyDataWriter?.hasPendingWork()) {
|
|
206
|
+
logger.info("Flushing pending legacy data writes...");
|
|
207
|
+
await legacyDataWriter.flush();
|
|
208
|
+
}
|
|
209
|
+
} catch (err) {
|
|
210
|
+
console.error(`Failed to flush legacy data: ${err}`);
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
await config?.close();
|
|
214
|
+
} catch (err) {
|
|
215
|
+
console.error(`Failed to close config storage: ${err}`);
|
|
216
|
+
}
|
|
217
|
+
// Wait for the Environment runtime to fully shut down (flushes all storage,
|
|
218
|
+
// completes async worker cleanup). Without this, controller storage like
|
|
219
|
+
// "server-1-fff1" may not be flushed before the process exits.
|
|
220
|
+
try {
|
|
221
|
+
await env.runtime.close();
|
|
222
|
+
} catch (err) {
|
|
223
|
+
console.error(`Failed to close runtime: ${err}`);
|
|
199
224
|
}
|
|
200
|
-
await config?.close();
|
|
201
225
|
try {
|
|
202
226
|
await fileLoggerClose?.();
|
|
203
227
|
} catch (err) {
|
|
204
228
|
console.error(`Failed to flush log file on shutdown: ${err}`);
|
|
205
229
|
}
|
|
206
|
-
process.exit(0);
|
|
207
230
|
}
|
|
208
231
|
|
|
209
|
-
start().catch(err =>
|
|
232
|
+
start().catch(async err => {
|
|
233
|
+
console.error(err);
|
|
234
|
+
await config?.close();
|
|
235
|
+
});
|
|
210
236
|
|
|
211
237
|
process.on("SIGINT", () => void stop().catch(err => console.error(err)));
|
|
212
238
|
process.on("SIGTERM", () => void stop().catch(err => console.error(err)));
|