@matter-server/ws-client 0.2.7-alpha.0-20260118-45c7af0 → 0.2.7-alpha.0-20260119-49e7237

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/README.md CHANGED
@@ -85,6 +85,7 @@ new MatterClient(url: string, wsFactory?: WebSocketFactory)
85
85
  - `serverInfo`: Server information (fabric ID, SDK version, etc.)
86
86
  - `serverBaseAddress`: The base address extracted from the URL
87
87
  - `isProduction`: Whether connected to a production server (for UI purposes)
88
+ - `commandTimeout`: Default timeout for commands in milliseconds (default: 5 minutes). Set to `0` to disable timeouts.
88
89
 
89
90
  #### Methods
90
91
 
@@ -114,6 +115,90 @@ new MatterClient(url: string, wsFactory?: WebSocketFactory)
114
115
  - `server_info_updated`: Fired when server info changes
115
116
  - `connection_lost`: Fired when connection is lost
116
117
 
118
+ ### Server Info
119
+
120
+ The `serverInfo` property contains information about the connected Matter server:
121
+
122
+ ```typescript
123
+ interface ServerInfoMessage {
124
+ fabric_id: bigint; // The fabric ID
125
+ compressed_fabric_id: bigint; // Compressed fabric ID (global ID)
126
+ fabric_index?: number; // The fabric index (OHF Matter Server only)
127
+ schema_version: number; // API schema version
128
+ min_supported_schema_version: number;
129
+ sdk_version: string; // Server SDK version string
130
+ wifi_credentials_set: boolean; // Whether WiFi credentials are configured
131
+ thread_credentials_set: boolean; // Whether Thread dataset is configured
132
+ bluetooth_enabled: boolean; // Whether BLE commissioning is available
133
+ }
134
+ ```
135
+
136
+ **Note:** The `fabric_index` field is specific to OHF Matter Server and is not available in Python Matter Server. When connecting to Python Matter Server, this field will be undefined.
137
+
138
+ ### Command Timeouts
139
+
140
+ All commands have a default timeout of 5 minutes (300,000ms) to prevent promises from hanging indefinitely if the server doesn't respond. You can configure this behavior globally or per-call:
141
+
142
+ ```typescript
143
+ import { MatterClient, CommandTimeoutError, DEFAULT_COMMAND_TIMEOUT } from "@matter-server/ws-client";
144
+
145
+ const client = new MatterClient("ws://localhost:5580/ws");
146
+
147
+ // Check the default timeout (5 minutes)
148
+ console.log(DEFAULT_COMMAND_TIMEOUT); // 300000
149
+
150
+ // Change the default timeout for all commands (e.g., 1 minute)
151
+ client.commandTimeout = 60000;
152
+
153
+ // Disable timeouts entirely (not recommended)
154
+ client.commandTimeout = 0;
155
+
156
+ // Override timeout for a specific call (e.g., 30 seconds for a quick command)
157
+ await client.deviceCommand(nodeId, 1, 6, "toggle", {}, 30000);
158
+
159
+ // Use a longer timeout for operations that take time (e.g., 10 minutes for commissioning)
160
+ await client.commissionWithCode("MT:Y3.5UNQO100KA0648G00", false, 600000);
161
+
162
+ // Handle timeout errors
163
+ try {
164
+ await client.deviceCommand(nodeId, 1, 6, "toggle");
165
+ } catch (err) {
166
+ if (err instanceof CommandTimeoutError) {
167
+ console.log(`Command '${err.command}' timed out after ${err.timeoutMs}ms`);
168
+ }
169
+ }
170
+ ```
171
+
172
+ All client methods accept an optional `timeout` parameter as their last argument to override the default timeout for that specific call.
173
+
174
+ ### Connection Handling
175
+
176
+ When the WebSocket connection is closed (either by calling `disconnect()` or due to connection loss), all pending commands are automatically rejected with a `ConnectionClosedError`:
177
+
178
+ ```typescript
179
+ import { MatterClient, ConnectionClosedError } from "@matter-server/ws-client";
180
+
181
+ const client = new MatterClient("ws://localhost:5580/ws");
182
+ await client.connect();
183
+
184
+ // Start a long-running command
185
+ const commandPromise = client.commissionWithCode("MT:Y3.5UNQO100KA0648G00", false);
186
+
187
+ // If the connection is lost or disconnected while the command is pending:
188
+ try {
189
+ await commandPromise;
190
+ } catch (err) {
191
+ if (err instanceof ConnectionClosedError) {
192
+ console.log("Connection was closed while command was pending");
193
+ }
194
+ }
195
+
196
+ // Listen for connection loss events
197
+ client.addEventListener("connection_lost", () => {
198
+ console.log("Connection to server was lost");
199
+ });
200
+ ```
201
+
117
202
  ### Other Exports
118
203
 
119
204
  ```typescript
@@ -126,6 +211,11 @@ import {
126
211
  // Exceptions
127
212
  MatterError,
128
213
  InvalidServerVersion,
214
+ CommandTimeoutError,
215
+ ConnectionClosedError,
216
+
217
+ // Constants
218
+ DEFAULT_COMMAND_TIMEOUT,
129
219
 
130
220
  // Types
131
221
  ServerInfoMessage,
@@ -6,6 +6,8 @@
6
6
  import { Connection, WebSocketFactory } from "./connection.js";
7
7
  import { AccessControlEntry, APICommands, BindingTarget, CommissionableNodeData, CommissioningParameters, EventMessage, LogLevelResponse, LogLevelString, MatterFabricData, MatterSoftwareVersion, NodePingResult } from "./models/model.js";
8
8
  import { MatterNode } from "./models/node.js";
9
+ /** Default timeout for WebSocket commands in milliseconds (5 minutes) */
10
+ export declare const DEFAULT_COMMAND_TIMEOUT: number;
9
11
  export declare class MatterClient {
10
12
  url: string;
11
13
  connection: Connection;
@@ -13,6 +15,8 @@ export declare class MatterClient {
13
15
  serverBaseAddress: string;
14
16
  /** Whether this client is connected to a production server (optional, for UI purposes) */
15
17
  isProduction: boolean;
18
+ /** Default timeout for commands in milliseconds. Set to 0 to disable timeouts. */
19
+ commandTimeout: number;
16
20
  private result_futures;
17
21
  private msgId;
18
22
  private eventListeners;
@@ -26,44 +30,70 @@ export declare class MatterClient {
26
30
  constructor(url: string, wsFactory?: WebSocketFactory);
27
31
  get serverInfo(): import("./models/model.js").ServerInfoMessage;
28
32
  addEventListener(event: string, listener: () => void): () => void;
29
- commissionWithCode(code: string, networkOnly?: boolean): Promise<MatterNode>;
30
- setWifiCredentials(ssid: string, credentials: string): Promise<void>;
31
- setThreadOperationalDataset(dataset: string): Promise<void>;
32
- openCommissioningWindow(nodeId: number | bigint, timeout?: number, iteration?: number, option?: number, discriminator?: number): Promise<CommissioningParameters>;
33
- discoverCommissionableNodes(): Promise<CommissionableNodeData[]>;
34
- getMatterFabrics(nodeId: number | bigint): Promise<MatterFabricData[]>;
35
- removeMatterFabric(nodeId: number | bigint, fabricIndex: number): Promise<void>;
36
- pingNode(nodeId: number | bigint, attempts?: number): Promise<NodePingResult>;
37
- getNodeIPAddresses(nodeId: number | bigint, preferCache?: boolean, scoped?: boolean): Promise<string[]>;
38
- removeNode(nodeId: number | bigint): Promise<void>;
39
- interviewNode(nodeId: number | bigint): Promise<void>;
40
- importTestNode(dump: string): Promise<void>;
41
- readAttribute(nodeId: number | bigint, attributePath: string | string[]): Promise<Record<string, unknown>>;
42
- writeAttribute(nodeId: number | bigint, attributePath: string, value: unknown): Promise<unknown>;
43
- checkNodeUpdate(nodeId: number | bigint): Promise<MatterSoftwareVersion | null>;
44
- updateNode(nodeId: number | bigint, softwareVersion: number | string): Promise<void>;
45
- setACLEntry(nodeId: number | bigint, entry: AccessControlEntry[]): Promise<import("./models/model.js").AttributeWriteResult[] | null>;
46
- setNodeBinding(nodeId: number | bigint, endpoint: number, bindings: BindingTarget[]): Promise<import("./models/model.js").AttributeWriteResult[] | null>;
47
- deviceCommand(nodeId: number | bigint, endpointId: number, clusterId: number, commandName: string, payload?: Record<string, unknown>): Promise<unknown>;
48
- getNodes(onlyAvailable?: boolean): Promise<MatterNode[]>;
49
- getNode(nodeId: number | bigint): Promise<MatterNode>;
50
- getVendorNames(filterVendors?: number[]): Promise<Record<string, string>>;
51
- fetchServerInfo(): Promise<import("./models/model.js").ServerInfoMessage>;
52
- setDefaultFabricLabel(label: string | null): Promise<void>;
33
+ commissionWithCode(code: string, networkOnly?: boolean, timeout?: number): Promise<MatterNode>;
34
+ setWifiCredentials(ssid: string, credentials: string, timeout?: number): Promise<void>;
35
+ setThreadOperationalDataset(dataset: string, timeout?: number): Promise<void>;
36
+ openCommissioningWindow(nodeId: number | bigint, windowTimeout?: number, iteration?: number, option?: number, discriminator?: number, timeout?: number): Promise<CommissioningParameters>;
37
+ discoverCommissionableNodes(timeout?: number): Promise<CommissionableNodeData[]>;
38
+ getMatterFabrics(nodeId: number | bigint, timeout?: number): Promise<MatterFabricData[]>;
39
+ removeMatterFabric(nodeId: number | bigint, fabricIndex: number, timeout?: number): Promise<void>;
40
+ pingNode(nodeId: number | bigint, attempts?: number, timeout?: number): Promise<NodePingResult>;
41
+ getNodeIPAddresses(nodeId: number | bigint, preferCache?: boolean, scoped?: boolean, timeout?: number): Promise<string[]>;
42
+ removeNode(nodeId: number | bigint, timeout?: number): Promise<void>;
43
+ interviewNode(nodeId: number | bigint, timeout?: number): Promise<void>;
44
+ importTestNode(dump: string, timeout?: number): Promise<void>;
45
+ readAttribute(nodeId: number | bigint, attributePath: string | string[], timeout?: number): Promise<Record<string, unknown>>;
46
+ writeAttribute(nodeId: number | bigint, attributePath: string, value: unknown, timeout?: number): Promise<unknown>;
47
+ checkNodeUpdate(nodeId: number | bigint, timeout?: number): Promise<MatterSoftwareVersion | null>;
48
+ updateNode(nodeId: number | bigint, softwareVersion: number | string, timeout?: number): Promise<void>;
49
+ setACLEntry(nodeId: number | bigint, entry: AccessControlEntry[], timeout?: number): Promise<import("./models/model.js").AttributeWriteResult[] | null>;
50
+ setNodeBinding(nodeId: number | bigint, endpoint: number, bindings: BindingTarget[], timeout?: number): Promise<import("./models/model.js").AttributeWriteResult[] | null>;
51
+ deviceCommand(nodeId: number | bigint, endpointId: number, clusterId: number, commandName: string, payload?: Record<string, unknown>, timeout?: number): Promise<unknown>;
52
+ getNodes(onlyAvailable?: boolean, timeout?: number): Promise<MatterNode[]>;
53
+ getNode(nodeId: number | bigint, timeout?: number): Promise<MatterNode>;
54
+ getVendorNames(filterVendors?: number[], timeout?: number): Promise<Record<string, string>>;
55
+ fetchServerInfo(timeout?: number): Promise<import("./models/model.js").ServerInfoMessage>;
56
+ setDefaultFabricLabel(label: string | null, timeout?: number): Promise<void>;
53
57
  /**
54
58
  * Get the current log levels for console and file logging.
59
+ * @param timeout Optional command timeout in milliseconds
55
60
  * @returns The current log level configuration
56
61
  */
57
- getLogLevel(): Promise<LogLevelResponse>;
62
+ getLogLevel(timeout?: number): Promise<LogLevelResponse>;
58
63
  /**
59
64
  * Set the log level for console and/or file logging.
60
65
  * Changes are temporary and will be reset when the server restarts.
61
66
  * @param consoleLoglevel Console log level to set (optional)
62
67
  * @param fileLoglevel File log level to set, only applied if file logging is enabled (optional)
68
+ * @param timeout Optional command timeout in milliseconds
63
69
  * @returns The log level configuration after the change
64
70
  */
65
- setLogLevel(consoleLoglevel?: LogLevelString, fileLoglevel?: LogLevelString): Promise<LogLevelResponse>;
66
- sendCommand<T extends keyof APICommands>(command: T, require_schema: number | undefined, args: APICommands[T]["requestArgs"]): Promise<APICommands[T]["response"]>;
71
+ setLogLevel(consoleLoglevel?: LogLevelString, fileLoglevel?: LogLevelString, timeout?: number): Promise<LogLevelResponse>;
72
+ /**
73
+ * Send a command to the Matter server.
74
+ * @param command The command name
75
+ * @param require_schema Minimum schema version required (0 for any version)
76
+ * @param args Command arguments
77
+ * @param timeout Optional timeout in milliseconds. Defaults to `commandTimeout`. Set to 0 to disable.
78
+ * @returns Promise that resolves with the command result
79
+ * @throws Error if the command times out or fails
80
+ */
81
+ sendCommand<T extends keyof APICommands>(command: T, require_schema: number | undefined, args: APICommands[T]["requestArgs"], timeout?: number): Promise<APICommands[T]["response"]>;
82
+ /**
83
+ * Safely resolve a pending command, ensuring it's only resolved once.
84
+ * Clears timeout and removes from pending futures before resolving.
85
+ */
86
+ private _resolvePendingCommand;
87
+ /**
88
+ * Safely reject a pending command, ensuring it's only rejected once.
89
+ * Clears timeout and removes from pending futures before rejecting.
90
+ */
91
+ private _rejectPendingCommand;
92
+ /**
93
+ * Reject all pending commands with a ConnectionClosedError.
94
+ * Called when the connection is closed or lost.
95
+ */
96
+ private _rejectAllPendingCommands;
67
97
  connect(): Promise<void>;
68
98
  disconnect(clearStorage?: boolean): void;
69
99
  startListening(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}