@matter/protocol 0.16.0-alpha.0-20251016-b56cf5683 → 0.16.0-alpha.0-20251020-3f6e46245
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/cjs/action/client/ClientInteraction.d.ts +10 -5
- package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/cjs/action/client/ClientInteraction.js +129 -18
- package/dist/cjs/action/client/ClientInteraction.js.map +1 -1
- package/dist/cjs/action/request/Invoke.d.ts +36 -8
- package/dist/cjs/action/request/Invoke.d.ts.map +1 -1
- package/dist/cjs/action/request/Invoke.js +80 -15
- package/dist/cjs/action/request/Invoke.js.map +1 -1
- package/dist/cjs/action/request/Read.d.ts +1 -1
- package/dist/cjs/action/request/Read.d.ts.map +1 -1
- package/dist/cjs/action/request/Read.js +10 -2
- package/dist/cjs/action/request/Read.js.map +1 -1
- package/dist/cjs/action/request/Specifier.d.ts +16 -1
- package/dist/cjs/action/request/Specifier.d.ts.map +1 -1
- package/dist/cjs/action/request/Specifier.js +56 -1
- package/dist/cjs/action/request/Specifier.js.map +1 -1
- package/dist/cjs/action/request/Write.d.ts +5 -3
- package/dist/cjs/action/request/Write.d.ts.map +1 -1
- package/dist/cjs/action/request/Write.js +52 -12
- package/dist/cjs/action/request/Write.js.map +1 -1
- package/dist/cjs/action/response/InvokeResult.d.ts +6 -0
- package/dist/cjs/action/response/InvokeResult.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeContext.d.ts +2 -1
- package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeContext.js +10 -5
- package/dist/cjs/common/FailsafeContext.js.map +1 -1
- package/dist/cjs/common/FailsafeTimer.d.ts +2 -0
- package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/cjs/common/FailsafeTimer.js +9 -0
- package/dist/cjs/common/FailsafeTimer.js.map +1 -1
- package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionClient.js +91 -74
- package/dist/cjs/interaction/InteractionClient.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +3 -2
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +10 -3
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/cjs/protocol/ExchangeManager.js +20 -17
- package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
- package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageChannel.js +1 -1
- package/dist/cjs/protocol/MessageChannel.js.map +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts +1 -0
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +14 -4
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/cjs/protocol/ProtocolHandler.d.ts +7 -2
- package/dist/cjs/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.d.ts +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.d.ts.map +1 -1
- package/dist/cjs/securechannel/SecureChannelProtocol.js +5 -4
- package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/cjs/session/GroupSession.d.ts +8 -1
- package/dist/cjs/session/GroupSession.d.ts.map +1 -1
- package/dist/cjs/session/GroupSession.js +10 -0
- package/dist/cjs/session/GroupSession.js.map +1 -1
- package/dist/cjs/session/NodeSession.d.ts +4 -1
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +17 -0
- package/dist/cjs/session/NodeSession.js.map +2 -2
- package/dist/cjs/session/SecureSession.d.ts +2 -0
- package/dist/cjs/session/SecureSession.d.ts.map +1 -1
- package/dist/cjs/session/SecureSession.js.map +1 -1
- package/dist/cjs/session/Session.d.ts +1 -0
- package/dist/cjs/session/Session.d.ts.map +1 -1
- package/dist/cjs/session/Session.js +4 -0
- package/dist/cjs/session/Session.js.map +1 -1
- package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseClient.js +3 -15
- package/dist/cjs/session/case/CaseClient.js.map +1 -1
- package/dist/cjs/session/case/CaseMessenger.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseMessenger.js.map +1 -1
- package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
- package/dist/cjs/session/case/CaseServer.js +10 -18
- package/dist/cjs/session/case/CaseServer.js.map +1 -1
- package/dist/cjs/session/index.d.ts +1 -0
- package/dist/cjs/session/index.d.ts.map +1 -1
- package/dist/cjs/session/index.js +1 -0
- package/dist/cjs/session/index.js.map +1 -1
- package/dist/cjs/session/pase/PaseClient.js +1 -1
- package/dist/cjs/session/pase/PaseClient.js.map +1 -1
- package/dist/cjs/session/pase/PaseMessenger.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseMessenger.js.map +1 -1
- package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/cjs/session/pase/PaseServer.js +2 -2
- package/dist/cjs/session/pase/PaseServer.js.map +1 -1
- package/dist/esm/action/client/ClientInteraction.d.ts +10 -5
- package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
- package/dist/esm/action/client/ClientInteraction.js +140 -20
- package/dist/esm/action/client/ClientInteraction.js.map +1 -1
- package/dist/esm/action/request/Invoke.d.ts +36 -8
- package/dist/esm/action/request/Invoke.d.ts.map +1 -1
- package/dist/esm/action/request/Invoke.js +81 -16
- package/dist/esm/action/request/Invoke.js.map +1 -1
- package/dist/esm/action/request/Read.d.ts +1 -1
- package/dist/esm/action/request/Read.d.ts.map +1 -1
- package/dist/esm/action/request/Read.js +12 -4
- package/dist/esm/action/request/Read.js.map +1 -1
- package/dist/esm/action/request/Specifier.d.ts +16 -1
- package/dist/esm/action/request/Specifier.d.ts.map +1 -1
- package/dist/esm/action/request/Specifier.js +56 -1
- package/dist/esm/action/request/Specifier.js.map +1 -1
- package/dist/esm/action/request/Write.d.ts +5 -3
- package/dist/esm/action/request/Write.d.ts.map +1 -1
- package/dist/esm/action/request/Write.js +53 -13
- package/dist/esm/action/request/Write.js.map +1 -1
- package/dist/esm/action/response/InvokeResult.d.ts +6 -0
- package/dist/esm/action/response/InvokeResult.d.ts.map +1 -1
- package/dist/esm/common/FailsafeContext.d.ts +2 -1
- package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
- package/dist/esm/common/FailsafeContext.js +10 -5
- package/dist/esm/common/FailsafeContext.js.map +1 -1
- package/dist/esm/common/FailsafeTimer.d.ts +2 -0
- package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
- package/dist/esm/common/FailsafeTimer.js +9 -0
- package/dist/esm/common/FailsafeTimer.js.map +1 -1
- package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionClient.js +92 -74
- package/dist/esm/interaction/InteractionClient.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +3 -2
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +10 -3
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
- package/dist/esm/protocol/ExchangeManager.js +20 -17
- package/dist/esm/protocol/ExchangeManager.js.map +1 -1
- package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
- package/dist/esm/protocol/MessageChannel.js +2 -2
- package/dist/esm/protocol/MessageChannel.js.map +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts +1 -0
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +14 -4
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/protocol/ProtocolHandler.d.ts +7 -2
- package/dist/esm/protocol/ProtocolHandler.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.d.ts +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.d.ts.map +1 -1
- package/dist/esm/securechannel/SecureChannelProtocol.js +5 -4
- package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
- package/dist/esm/session/GroupSession.d.ts +8 -1
- package/dist/esm/session/GroupSession.d.ts.map +1 -1
- package/dist/esm/session/GroupSession.js +11 -1
- package/dist/esm/session/GroupSession.js.map +1 -1
- package/dist/esm/session/NodeSession.d.ts +4 -1
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +17 -0
- package/dist/esm/session/NodeSession.js.map +2 -2
- package/dist/esm/session/SecureSession.d.ts +2 -0
- package/dist/esm/session/SecureSession.d.ts.map +1 -1
- package/dist/esm/session/SecureSession.js.map +1 -1
- package/dist/esm/session/Session.d.ts +1 -0
- package/dist/esm/session/Session.d.ts.map +1 -1
- package/dist/esm/session/Session.js +4 -0
- package/dist/esm/session/Session.js.map +1 -1
- package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
- package/dist/esm/session/case/CaseClient.js +5 -17
- package/dist/esm/session/case/CaseClient.js.map +1 -1
- package/dist/esm/session/case/CaseMessenger.d.ts.map +1 -1
- package/dist/esm/session/case/CaseMessenger.js.map +1 -1
- package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
- package/dist/esm/session/case/CaseServer.js +12 -20
- package/dist/esm/session/case/CaseServer.js.map +1 -1
- package/dist/esm/session/index.d.ts +1 -0
- package/dist/esm/session/index.d.ts.map +1 -1
- package/dist/esm/session/index.js +1 -0
- package/dist/esm/session/index.js.map +1 -1
- package/dist/esm/session/pase/PaseClient.js +1 -1
- package/dist/esm/session/pase/PaseClient.js.map +1 -1
- package/dist/esm/session/pase/PaseMessenger.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseMessenger.js.map +1 -1
- package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
- package/dist/esm/session/pase/PaseServer.js +3 -2
- package/dist/esm/session/pase/PaseServer.js.map +1 -1
- package/package.json +6 -6
- package/src/action/client/ClientInteraction.ts +181 -27
- package/src/action/request/Invoke.ts +149 -27
- package/src/action/request/Read.ts +27 -7
- package/src/action/request/Specifier.ts +80 -1
- package/src/action/request/Write.ts +71 -19
- package/src/action/response/InvokeResult.ts +8 -0
- package/src/common/FailsafeContext.ts +15 -6
- package/src/common/FailsafeTimer.ts +11 -0
- package/src/interaction/InteractionClient.ts +135 -96
- package/src/interaction/InteractionMessenger.ts +15 -3
- package/src/protocol/ExchangeManager.ts +27 -29
- package/src/protocol/MessageChannel.ts +2 -2
- package/src/protocol/MessageExchange.ts +18 -4
- package/src/protocol/ProtocolHandler.ts +7 -2
- package/src/securechannel/SecureChannelProtocol.ts +8 -5
- package/src/session/GroupSession.ts +12 -1
- package/src/session/NodeSession.ts +26 -0
- package/src/session/SecureSession.ts +2 -0
- package/src/session/Session.ts +5 -0
- package/src/session/case/CaseClient.ts +3 -23
- package/src/session/case/CaseMessenger.ts +2 -0
- package/src/session/case/CaseServer.ts +15 -20
- package/src/session/index.ts +1 -0
- package/src/session/pase/PaseClient.ts +1 -1
- package/src/session/pase/PaseMessenger.ts +2 -0
- package/src/session/pase/PaseServer.ts +3 -2
|
@@ -3,14 +3,28 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { resolvePathForSpecifier } from "#action/index.js";
|
|
7
|
+
import { Invoke } from "#action/request/Invoke.js";
|
|
8
|
+
import {
|
|
9
|
+
BasicSet,
|
|
10
|
+
Diagnostic,
|
|
11
|
+
Duration,
|
|
12
|
+
Environmental,
|
|
13
|
+
ImplementationError,
|
|
14
|
+
isObject,
|
|
15
|
+
Logger,
|
|
16
|
+
Seconds
|
|
17
|
+
} from "#general";
|
|
7
18
|
import { InteractionClientMessenger, MessageType } from "#interaction/InteractionMessenger.js";
|
|
8
19
|
import { InteractionQueue } from "#peer/InteractionQueue.js";
|
|
9
20
|
import { ExchangeProvider } from "#protocol/ExchangeProvider.js";
|
|
10
|
-
import { TlvSubscribeResponse } from "#types";
|
|
21
|
+
import { Status, TlvNoResponse, TlvSubscribeResponse } from "#types";
|
|
11
22
|
import { ClientSubscriptions } from "./ClientSubscriptions.js";
|
|
12
23
|
import { InputChunk } from "./InputChunk.js";
|
|
24
|
+
const logger = Logger.get("ClientInteraction");
|
|
13
25
|
const DEFAULT_MIN_INTERVAL_FLOOR = Seconds(1);
|
|
26
|
+
const DEFAULT_TIMED_REQUEST_TIMEOUT = Seconds(10);
|
|
27
|
+
const DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE = Seconds(30);
|
|
14
28
|
class ClientInteraction {
|
|
15
29
|
#exchanges;
|
|
16
30
|
#subscriptions;
|
|
@@ -44,34 +58,71 @@ class ClientInteraction {
|
|
|
44
58
|
return instance;
|
|
45
59
|
}
|
|
46
60
|
async *read(request, _session) {
|
|
61
|
+
const readPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
|
|
62
|
+
if (readPathsCount > 9) {
|
|
63
|
+
logger.debug(
|
|
64
|
+
"Read interactions with more then 9 paths might be not allowed by the device. Consider splitting then into several read requests."
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
this.#begin(request);
|
|
68
|
+
let messenger;
|
|
47
69
|
try {
|
|
48
|
-
this.#
|
|
49
|
-
|
|
70
|
+
messenger = await InteractionClientMessenger.create(this.#exchanges);
|
|
71
|
+
logger.debug("Read \xBB", messenger.exchange.via, request);
|
|
50
72
|
await messenger.sendReadRequest(request);
|
|
73
|
+
let attributeReportCount = 0;
|
|
74
|
+
let eventReportCount = 0;
|
|
51
75
|
for await (const report of messenger.readDataReports()) {
|
|
76
|
+
attributeReportCount += report.attributeReports?.length ?? 0;
|
|
77
|
+
eventReportCount += report.eventReports?.length ?? 0;
|
|
52
78
|
yield InputChunk(report);
|
|
53
79
|
}
|
|
80
|
+
logger.debug(
|
|
81
|
+
"Read \xAB",
|
|
82
|
+
messenger.exchange.via,
|
|
83
|
+
Diagnostic.weak(
|
|
84
|
+
attributeReportCount + eventReportCount === 0 ? "(empty)" : Diagnostic.dict({ attributes: attributeReportCount, events: eventReportCount })
|
|
85
|
+
)
|
|
86
|
+
);
|
|
54
87
|
} finally {
|
|
88
|
+
await messenger?.close();
|
|
55
89
|
this.#end(request);
|
|
56
90
|
}
|
|
57
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Write chosen attributes remotely to the node.
|
|
94
|
+
* The returned attribute write status information is returned. No error is thrown for individual attribute write
|
|
95
|
+
* failures.
|
|
96
|
+
*/
|
|
58
97
|
async write(request, _session) {
|
|
98
|
+
this.#begin(request);
|
|
59
99
|
let messenger;
|
|
60
100
|
try {
|
|
61
|
-
this.#begin(request);
|
|
62
101
|
messenger = await InteractionClientMessenger.create(this.#exchanges);
|
|
102
|
+
if (request.timedRequest) {
|
|
103
|
+
await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
|
|
104
|
+
}
|
|
105
|
+
logger.info("Write \xBB", messenger.exchange.via, request);
|
|
63
106
|
const response = await messenger.sendWriteCommand(request);
|
|
64
107
|
if (request.suppressResponse) {
|
|
65
108
|
return void 0;
|
|
66
109
|
}
|
|
67
110
|
if (!response || !response.writeResponses?.length) {
|
|
68
|
-
return
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
let successCount = 0;
|
|
114
|
+
let failureCount = 0;
|
|
115
|
+
const result = response.writeResponses.map(
|
|
116
|
+
({
|
|
117
|
+
path: { nodeId, endpointId, clusterId, attributeId, listIndex },
|
|
118
|
+
status: { status, clusterStatus }
|
|
119
|
+
}) => {
|
|
120
|
+
if (status === Status.Success) {
|
|
121
|
+
successCount++;
|
|
122
|
+
} else {
|
|
123
|
+
failureCount++;
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
75
126
|
kind: "attr-status",
|
|
76
127
|
path: {
|
|
77
128
|
nodeId,
|
|
@@ -82,20 +133,41 @@ class ClientInteraction {
|
|
|
82
133
|
},
|
|
83
134
|
status,
|
|
84
135
|
clusterStatus
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
logger.info(
|
|
140
|
+
"Write \xAB",
|
|
141
|
+
messenger.exchange.via,
|
|
142
|
+
Diagnostic.weak(
|
|
143
|
+
successCount + failureCount === 0 ? "(empty)" : Diagnostic.dict({ success: successCount, failure: failureCount })
|
|
144
|
+
)
|
|
145
|
+
);
|
|
146
|
+
return result;
|
|
88
147
|
} finally {
|
|
89
148
|
await messenger?.close();
|
|
90
149
|
this.#end(request);
|
|
91
150
|
}
|
|
92
151
|
}
|
|
93
152
|
async *invoke(request, _session) {
|
|
153
|
+
this.#begin(request);
|
|
94
154
|
let messenger;
|
|
95
155
|
try {
|
|
96
|
-
this.#begin(request);
|
|
97
156
|
messenger = await InteractionClientMessenger.create(this.#exchanges);
|
|
98
|
-
|
|
157
|
+
if (request.timedRequest) {
|
|
158
|
+
await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
|
|
159
|
+
}
|
|
160
|
+
logger.info(
|
|
161
|
+
"Invoke \xBB",
|
|
162
|
+
messenger.exchange.via,
|
|
163
|
+
Diagnostic.asFlags({ suppressResponse: request.suppressResponse, timed: request.timedRequest }),
|
|
164
|
+
request
|
|
165
|
+
);
|
|
166
|
+
const { expectedProcessingTime, useExtendedFailSafeMessageResponseTimeout } = request;
|
|
167
|
+
const result = await messenger.sendInvokeCommand(
|
|
168
|
+
request,
|
|
169
|
+
expectedProcessingTime ?? (useExtendedFailSafeMessageResponseTimeout ? DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE : void 0)
|
|
170
|
+
);
|
|
99
171
|
if (!request.suppressResponse) {
|
|
100
172
|
if (result && result.invokeResponses?.length) {
|
|
101
173
|
const chunk = result.invokeResponses.map((response) => {
|
|
@@ -105,6 +177,25 @@ class ClientInteraction {
|
|
|
105
177
|
commandRef,
|
|
106
178
|
commandFields
|
|
107
179
|
} = response.command;
|
|
180
|
+
const cmd = request.commands.get(commandRef);
|
|
181
|
+
if (!cmd) {
|
|
182
|
+
throw new ImplementationError(
|
|
183
|
+
`No response schema found for commandRef ${commandRef} (endpoint ${endpointId}, cluster ${clusterId}, command ${commandId})`
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
const responseSchema = Invoke.commandOf(cmd).responseSchema;
|
|
187
|
+
if (commandFields === void 0 && responseSchema !== TlvNoResponse) {
|
|
188
|
+
throw new ImplementationError(
|
|
189
|
+
`No command fields found for commandRef ${commandRef} (endpoint ${endpointId}, cluster ${clusterId}, command ${commandId})`
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
const data = commandFields === void 0 ? void 0 : responseSchema.decodeTlv(commandFields);
|
|
193
|
+
logger.info(
|
|
194
|
+
"Invoke \xAB",
|
|
195
|
+
messenger.exchange.via,
|
|
196
|
+
Diagnostic.strong(resolvePathForSpecifier(cmd)),
|
|
197
|
+
isObject(data) ? Diagnostic.dict(data) : Diagnostic.weak("(no payload)")
|
|
198
|
+
);
|
|
108
199
|
const res = {
|
|
109
200
|
kind: "cmd-response",
|
|
110
201
|
path: {
|
|
@@ -113,8 +204,7 @@ class ClientInteraction {
|
|
|
113
204
|
commandId
|
|
114
205
|
},
|
|
115
206
|
commandRef,
|
|
116
|
-
data
|
|
117
|
-
// TODO add decoding
|
|
207
|
+
data
|
|
118
208
|
};
|
|
119
209
|
return res;
|
|
120
210
|
} else if (response.status !== void 0) {
|
|
@@ -150,10 +240,32 @@ class ClientInteraction {
|
|
|
150
240
|
}
|
|
151
241
|
}
|
|
152
242
|
async subscribe(request, _session) {
|
|
243
|
+
const subscriptionPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
|
|
244
|
+
if (subscriptionPathsCount > 3) {
|
|
245
|
+
logger.debug("Subscribe interactions with more then 3 paths might be not allowed by the device.");
|
|
246
|
+
}
|
|
247
|
+
if (!request.keepSubscriptions) {
|
|
248
|
+
for (const subscription of this.#subscriptions) {
|
|
249
|
+
logger.debug(
|
|
250
|
+
`Removing subscription with ID ${subscription.subscriptionId} because new subscription replaces it`
|
|
251
|
+
);
|
|
252
|
+
subscription.close();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
this.#begin(request);
|
|
153
256
|
let messenger;
|
|
154
257
|
try {
|
|
155
|
-
this.#begin(request);
|
|
156
258
|
messenger = await InteractionClientMessenger.create(this.#exchanges);
|
|
259
|
+
logger.info(
|
|
260
|
+
"Subscribe \xBB",
|
|
261
|
+
messenger.exchange.via,
|
|
262
|
+
Diagnostic.asFlags({ keepSubscriptions: request.keepSubscriptions }),
|
|
263
|
+
Diagnostic.dict({
|
|
264
|
+
min: Duration.format(request.minIntervalFloor),
|
|
265
|
+
max: Duration.format(request.maxIntervalCeiling)
|
|
266
|
+
}),
|
|
267
|
+
request
|
|
268
|
+
);
|
|
157
269
|
await messenger.sendSubscribeRequest({
|
|
158
270
|
minIntervalFloorSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
|
|
159
271
|
maxIntervalCeilingSeconds: Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
|
|
@@ -163,6 +275,14 @@ class ClientInteraction {
|
|
|
163
275
|
await this.#handleSubscriptionResponse(request, readChunks(messenger));
|
|
164
276
|
const responseMessage = await messenger.nextMessage(MessageType.SubscribeResponse);
|
|
165
277
|
const response = TlvSubscribeResponse.decode(responseMessage.payload);
|
|
278
|
+
logger.info(
|
|
279
|
+
"Subscription successful \xAB",
|
|
280
|
+
messenger.exchange.via,
|
|
281
|
+
Diagnostic.dict({
|
|
282
|
+
subId: response.subscriptionId,
|
|
283
|
+
interval: Duration.format(Seconds(response.maxInterval))
|
|
284
|
+
})
|
|
285
|
+
);
|
|
166
286
|
return this.#subscriptions.add(request, response);
|
|
167
287
|
} finally {
|
|
168
288
|
await messenger?.close();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/action/client/ClientInteraction.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -3,37 +3,65 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Duration } from "#general";
|
|
6
7
|
import { ClusterType, CommandData, InvokeRequest, TlvSchema, TypeFromSchema } from "#types";
|
|
7
8
|
import { Specifier } from "./Specifier.js";
|
|
9
|
+
export interface InvokeCommandData extends CommandData {
|
|
10
|
+
timed?: boolean;
|
|
11
|
+
}
|
|
8
12
|
export interface Invoke extends InvokeRequest {
|
|
9
13
|
/** Timeout only relevant for Client Interactions */
|
|
10
|
-
timeout?:
|
|
14
|
+
timeout?: Duration;
|
|
15
|
+
expectedProcessingTime?: Duration;
|
|
16
|
+
useExtendedFailSafeMessageResponseTimeout?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ClientInvoke extends Invoke {
|
|
19
|
+
commands: Map<number | undefined, Invoke.CommandRequest<any>>;
|
|
11
20
|
}
|
|
12
21
|
/**
|
|
13
22
|
* Request invocation of one or more commands.
|
|
14
23
|
*/
|
|
15
|
-
export declare function Invoke(options: Invoke.Definition):
|
|
24
|
+
export declare function Invoke(options: Invoke.Definition): ClientInvoke;
|
|
16
25
|
/**
|
|
17
26
|
* Request invocation multiple commands with defined options
|
|
18
27
|
*/
|
|
19
|
-
export declare function Invoke(options: Invoke.Definition, ...commands:
|
|
28
|
+
export declare function Invoke(options: Invoke.Definition, ...commands: Invoke.CommandRequest<any>[]): ClientInvoke;
|
|
20
29
|
/**
|
|
21
30
|
* Request invocation multiple commands as list of Commands with default options.
|
|
22
31
|
*/
|
|
23
|
-
export declare function Invoke(...commands:
|
|
32
|
+
export declare function Invoke(...commands: Invoke.CommandRequest<any>[]): ClientInvoke;
|
|
24
33
|
export declare namespace Invoke {
|
|
25
34
|
interface Definition {
|
|
26
|
-
commands
|
|
35
|
+
/** List of commands to invoke */
|
|
36
|
+
commands: Invoke.CommandRequest<any>[];
|
|
37
|
+
/** Tell the server to not send a response */
|
|
27
38
|
suppressResponse?: boolean;
|
|
39
|
+
/** Whether this is sent as a timed request, if no timeout is specified a default is used */
|
|
28
40
|
timed?: boolean;
|
|
41
|
+
/** Timeout when sent as a timed request, if timed flag is not set it will be set automatically */
|
|
42
|
+
timeout?: Duration;
|
|
43
|
+
/** Interaction model revision to use, if not specified a default is used */
|
|
29
44
|
interactionModelRevision?: number;
|
|
45
|
+
/** Processing time of the command of the server assumed for this invoke. If not set a default is used */
|
|
46
|
+
expectedProcessingTime?: Duration;
|
|
47
|
+
/** Whether to use extended timeout for fail-safe messages. Overwrites the expectedProcessingTime if both are set */
|
|
48
|
+
useExtendedFailSafeMessageResponseTimeout?: boolean;
|
|
49
|
+
/** Whether to skip validation of command fields against schema */
|
|
50
|
+
skipValidation?: boolean;
|
|
30
51
|
}
|
|
31
|
-
function Command<const C extends ClusterType>(request: Invoke.CommandRequest<C
|
|
32
|
-
type CommandRequest<C extends Specifier.Cluster = Specifier.Cluster, CMD extends Specifier.Command<Specifier.ClusterFor<C>> = Specifier.Command<Specifier.ClusterFor<C>>> =
|
|
33
|
-
|
|
52
|
+
function Command<const C extends ClusterType>(request: Invoke.CommandRequest<C>, skipValidation?: boolean): InvokeCommandData;
|
|
53
|
+
type CommandRequest<C extends Specifier.Cluster = Specifier.Cluster, CMD extends Specifier.Command<Specifier.ClusterFor<C>> = Specifier.Command<Specifier.ClusterFor<C>>> = ConcreteCommandRequest<C, CMD> | WildcardCommandRequest<C, CMD>;
|
|
54
|
+
type ConcreteCommandRequest<C extends Specifier.Cluster = Specifier.Cluster, CMD extends Specifier.Command<Specifier.ClusterFor<C>> = Specifier.Command<Specifier.ClusterFor<C>>> = WildcardCommandRequest<C, CMD> & {
|
|
55
|
+
endpoint: Specifier.Endpoint;
|
|
56
|
+
};
|
|
57
|
+
function ConcreteCommandRequest<const C extends ClusterType>(data: Invoke.ConcreteCommandRequest<C>): Invoke.ConcreteCommandRequest<any>;
|
|
58
|
+
type WildcardCommandRequest<C extends Specifier.Cluster = Specifier.Cluster, CMD extends Specifier.Command<Specifier.ClusterFor<C>> = Specifier.Command<Specifier.ClusterFor<C>>> = {
|
|
34
59
|
cluster: C;
|
|
35
60
|
command: CMD;
|
|
61
|
+
commandName?: string;
|
|
62
|
+
commandRef?: number;
|
|
36
63
|
} & Fields<Specifier.CommandFor<Specifier.ClusterFor<C>, CMD>["requestSchema"]>;
|
|
64
|
+
function WildcardCommandRequest<const C extends ClusterType>(data: Invoke.WildcardCommandRequest<C>): Invoke.WildcardCommandRequest<any>;
|
|
37
65
|
function commandOf<const R extends CommandRequest>(request: R): ClusterType.Command;
|
|
38
66
|
type Fields<S extends TlvSchema<any>> = S extends TlvSchema<void> ? {} : S extends TlvSchema<null> ? {
|
|
39
67
|
fields?: TypeFromSchema<S>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Invoke.d.ts","sourceRoot":"","sources":["../../../../src/action/request/Invoke.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Invoke.d.ts","sourceRoot":"","sources":["../../../../src/action/request/Invoke.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
+
import { Diagnostic, isObject } from "#general";
|
|
6
7
|
import { FALLBACK_INTERACTIONMODEL_REVISION } from "#session/Session.js";
|
|
8
|
+
import { FabricIndex, ObjectSchema } from "#types";
|
|
7
9
|
import { MalformedRequestError } from "./MalformedRequestError.js";
|
|
8
|
-
import { Specifier } from "./Specifier.js";
|
|
10
|
+
import { resolvePathForSpecifier, Specifier } from "./Specifier.js";
|
|
9
11
|
function Invoke(optionsOrData, ...commands) {
|
|
10
12
|
if (optionsOrData === void 0) {
|
|
11
13
|
throw new MalformedRequestError(`Invocation requires at least one command`);
|
|
@@ -13,44 +15,93 @@ function Invoke(optionsOrData, ...commands) {
|
|
|
13
15
|
let options;
|
|
14
16
|
if ("commands" in optionsOrData) {
|
|
15
17
|
options = optionsOrData;
|
|
18
|
+
commands = [...optionsOrData.commands, ...commands];
|
|
16
19
|
} else {
|
|
17
20
|
commands = [optionsOrData, ...commands];
|
|
18
21
|
options = {};
|
|
19
22
|
}
|
|
20
23
|
const {
|
|
21
|
-
commands: invokeRequests = [],
|
|
22
24
|
interactionModelRevision = FALLBACK_INTERACTIONMODEL_REVISION,
|
|
23
25
|
suppressResponse = false,
|
|
24
|
-
|
|
26
|
+
timeout,
|
|
27
|
+
expectedProcessingTime,
|
|
28
|
+
useExtendedFailSafeMessageResponseTimeout = false,
|
|
29
|
+
skipValidation = false
|
|
25
30
|
} = options;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
invokeRequests.push(entry);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (!invokeRequests?.length) {
|
|
31
|
+
let timedRequest = !!options.timed || !!timeout;
|
|
32
|
+
if (!commands?.length) {
|
|
32
33
|
throw new MalformedRequestError(`Invocation requires at least one command`);
|
|
33
34
|
}
|
|
35
|
+
if (commands.length > 1) {
|
|
36
|
+
const commandRefs = /* @__PURE__ */ new Set();
|
|
37
|
+
for (const { commandRef } of commands) {
|
|
38
|
+
if (commandRef === void 0) {
|
|
39
|
+
throw new MalformedRequestError(`CommandRef required when invoking multiple commands`);
|
|
40
|
+
}
|
|
41
|
+
if (commandRefs.has(commandRef)) {
|
|
42
|
+
throw new MalformedRequestError(`Duplicate commandRef ${commandRef} in multiple command invoke`);
|
|
43
|
+
}
|
|
44
|
+
commandRefs.add(commandRef);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const commandMap = /* @__PURE__ */ new Map();
|
|
48
|
+
const invokeRequests = commands.map((cmd) => {
|
|
49
|
+
const cmdData = Invoke.Command(cmd, skipValidation);
|
|
50
|
+
timedRequest ||= !!cmdData.timed;
|
|
51
|
+
commandMap.set(cmdData.commandRef, cmd);
|
|
52
|
+
return cmdData;
|
|
53
|
+
});
|
|
34
54
|
return {
|
|
55
|
+
timedRequest,
|
|
56
|
+
timeout,
|
|
35
57
|
invokeRequests,
|
|
36
58
|
interactionModelRevision,
|
|
37
59
|
suppressResponse,
|
|
38
|
-
|
|
60
|
+
expectedProcessingTime,
|
|
61
|
+
useExtendedFailSafeMessageResponseTimeout,
|
|
62
|
+
// Additional meta-data for client side processing
|
|
63
|
+
commands: commandMap,
|
|
64
|
+
[Diagnostic.value]: () => Diagnostic.list(
|
|
65
|
+
commands.map((cmd) => {
|
|
66
|
+
const { commandRef } = cmd;
|
|
67
|
+
const fields = "fields" in cmd ? cmd.fields : void 0;
|
|
68
|
+
return [
|
|
69
|
+
Diagnostic.strong(resolvePathForSpecifier(cmd)),
|
|
70
|
+
"with",
|
|
71
|
+
isObject(fields) ? Diagnostic.dict(fields) : "(no payload)",
|
|
72
|
+
commandRef !== void 0 ? `(ref ${commandRef})` : ""
|
|
73
|
+
];
|
|
74
|
+
})
|
|
75
|
+
)
|
|
39
76
|
};
|
|
40
77
|
}
|
|
41
78
|
((Invoke2) => {
|
|
42
|
-
function Command(request) {
|
|
79
|
+
function Command(request, skipValidation = false) {
|
|
43
80
|
const command = Invoke2.commandOf(request);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
81
|
+
const { requestSchema, requestId, timed } = command;
|
|
82
|
+
const { commandRef } = request;
|
|
83
|
+
let fields = "fields" in request ? request.fields : void 0;
|
|
84
|
+
if (requestSchema instanceof ObjectSchema) {
|
|
85
|
+
if (fields === void 0) {
|
|
86
|
+
fields = {};
|
|
87
|
+
}
|
|
88
|
+
if (requestSchema.isFabricScoped && fields.fabricIndex === void 0) {
|
|
89
|
+
fields.fabricIndex = FabricIndex.NO_FABRIC;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!skipValidation) {
|
|
93
|
+
requestSchema.validate(fields);
|
|
47
94
|
}
|
|
95
|
+
const commandFields = requestSchema.encodeTlv(fields);
|
|
48
96
|
const result = {
|
|
49
97
|
commandPath: {
|
|
98
|
+
// Endpoint id is added below if not wildcard
|
|
50
99
|
clusterId: Specifier.clusterFor(request.cluster).id,
|
|
51
|
-
commandId:
|
|
100
|
+
commandId: requestId
|
|
52
101
|
},
|
|
53
|
-
commandFields
|
|
102
|
+
commandFields,
|
|
103
|
+
timed: timed ?? false,
|
|
104
|
+
commandRef
|
|
54
105
|
};
|
|
55
106
|
const endpointId = Specifier.endpointIdOf(request);
|
|
56
107
|
if (endpointId !== void 0) {
|
|
@@ -59,6 +110,20 @@ function Invoke(optionsOrData, ...commands) {
|
|
|
59
110
|
return result;
|
|
60
111
|
}
|
|
61
112
|
Invoke2.Command = Command;
|
|
113
|
+
function ConcreteCommandRequest(data) {
|
|
114
|
+
if (data.endpoint === void 0) {
|
|
115
|
+
throw new MalformedRequestError(`ConcreteCommandRequest requires an endpoint`);
|
|
116
|
+
}
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
Invoke2.ConcreteCommandRequest = ConcreteCommandRequest;
|
|
120
|
+
function WildcardCommandRequest(data) {
|
|
121
|
+
if ("endpoint" in data && data.endpoint !== void 0) {
|
|
122
|
+
throw new MalformedRequestError(`ConcreteCommandRequest must not have an endpoint`);
|
|
123
|
+
}
|
|
124
|
+
return data;
|
|
125
|
+
}
|
|
126
|
+
Invoke2.WildcardCommandRequest = WildcardCommandRequest;
|
|
62
127
|
function commandOf(request) {
|
|
63
128
|
if (typeof request.command === "string") {
|
|
64
129
|
const cluster = Specifier.clusterFor(request.cluster);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/action/request/Invoke.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,0CAA0C;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["Invoke"]
|
|
6
6
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import { AttributePath, ClusterType, DataVersionFilter, EventFilter, EventPath, GlobalAttributes, ReadRequest } from "#types";
|
|
7
7
|
import { Specifier } from "./Specifier.js";
|
|
8
8
|
/**
|
|
9
9
|
* A read request formulated using Matter protocol semantics.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Read.d.ts","sourceRoot":"","sources":["../../../../src/action/request/Read.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"Read.d.ts","sourceRoot":"","sources":["../../../../src/action/request/Read.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { camelize } from "#general";
|
|
7
|
-
import {
|
|
6
|
+
import { camelize, Diagnostic } from "#general";
|
|
7
|
+
import { Specification } from "#model";
|
|
8
8
|
import { MalformedRequestError } from "./MalformedRequestError.js";
|
|
9
|
-
import { Specifier } from "./Specifier.js";
|
|
9
|
+
import { resolvePathForSpecifier, Specifier } from "./Specifier.js";
|
|
10
10
|
function Read(optionsOrSelector, ...selectors) {
|
|
11
11
|
if (optionsOrSelector === void 0) {
|
|
12
12
|
throw new MalformedRequestError(`Read action designates no attributes or events`);
|
|
@@ -21,7 +21,15 @@ function Read(optionsOrSelector, ...selectors) {
|
|
|
21
21
|
let { attributes: attributeRequests, versionFilters, events: eventRequests, eventFilters } = options;
|
|
22
22
|
const result = {
|
|
23
23
|
isFabricFiltered: options.fabricFilter ?? true,
|
|
24
|
-
interactionModelRevision: options.interactionModelRevision ??
|
|
24
|
+
interactionModelRevision: options.interactionModelRevision ?? Specification.INTERACTION_MODEL_REVISION,
|
|
25
|
+
[Diagnostic.value]: () => Diagnostic.dict({
|
|
26
|
+
attributes: attributeRequests?.length ? attributeRequests?.map((path) => resolvePathForSpecifier(path)).join(", ") : void 0,
|
|
27
|
+
events: eventRequests?.length ? eventRequests?.map((path) => resolvePathForSpecifier(path)).join(", ") : void 0,
|
|
28
|
+
dataVersionFilters: versionFilters?.length ? versionFilters.map(
|
|
29
|
+
({ path: { endpointId, clusterId }, dataVersion }) => `${endpointId}/${clusterId}=${dataVersion}`
|
|
30
|
+
).join(", ") : void 0,
|
|
31
|
+
eventFilters: eventFilters?.length ? eventFilters.map(({ nodeId, eventMin }) => `${nodeId}=${eventMin}`).join(", ") : void 0
|
|
32
|
+
})
|
|
25
33
|
};
|
|
26
34
|
for (const selector of selectors) {
|
|
27
35
|
reifySelector(selector);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/action/request/Read.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["Read"]
|
|
6
6
|
}
|