@matter/protocol 0.16.0-alpha.0-20251016-b56cf5683 → 0.16.0-alpha.0-20251018-dd1ea6a8a
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/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 +2 -1
- 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 +3 -1
- package/dist/cjs/session/NodeSession.d.ts.map +1 -1
- package/dist/cjs/session/NodeSession.js +13 -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/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/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/pase/PaseClient.js +1 -1
- package/dist/cjs/session/pase/PaseClient.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/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 +2 -1
- 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 +3 -1
- package/dist/esm/session/NodeSession.d.ts.map +1 -1
- package/dist/esm/session/NodeSession.js +13 -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/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/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/pase/PaseClient.js +1 -1
- package/dist/esm/session/pase/PaseClient.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/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 +5 -1
- package/src/session/GroupSession.ts +12 -1
- package/src/session/NodeSession.ts +21 -0
- package/src/session/SecureSession.ts +2 -0
- package/src/session/case/CaseClient.ts +3 -23
- package/src/session/case/CaseServer.ts +15 -20
- package/src/session/pase/PaseClient.ts +1 -1
- package/src/session/pase/PaseServer.ts +3 -2
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Interactable, InteractionSession } from "#action/Interactable.js";
|
|
7
|
-
import {
|
|
7
|
+
import { ClientInvoke } from "#action/request/Invoke.js";
|
|
8
8
|
import { Read } from "#action/request/Read.js";
|
|
9
9
|
import { Subscribe } from "#action/request/Subscribe.js";
|
|
10
10
|
import { Write } from "#action/request/Write.js";
|
|
11
|
-
import {
|
|
11
|
+
import { DecodedInvokeResult } from "#action/response/InvokeResult.js";
|
|
12
12
|
import { ReadResult } from "#action/response/ReadResult.js";
|
|
13
13
|
import { SubscribeResult } from "#action/response/SubscribeResult.js";
|
|
14
14
|
import { WriteResult } from "#action/response/WriteResult.js";
|
|
15
|
-
import { Environment, Environmental, PromiseQueue } from "#general";
|
|
15
|
+
import { Duration, Environment, Environmental, PromiseQueue } from "#general";
|
|
16
16
|
import { ExchangeProvider } from "#protocol/ExchangeProvider.js";
|
|
17
17
|
import { ClientSubscriptions } from "./ClientSubscriptions.js";
|
|
18
18
|
export interface ClientInteractionContext {
|
|
@@ -20,7 +20,7 @@ export interface ClientInteractionContext {
|
|
|
20
20
|
subscriptions: ClientSubscriptions;
|
|
21
21
|
queue: PromiseQueue;
|
|
22
22
|
}
|
|
23
|
-
export declare const DEFAULT_MIN_INTERVAL_FLOOR:
|
|
23
|
+
export declare const DEFAULT_MIN_INTERVAL_FLOOR: Duration;
|
|
24
24
|
/**
|
|
25
25
|
* Client-side implementation of the Matter protocol.
|
|
26
26
|
*/
|
|
@@ -32,8 +32,13 @@ export declare class ClientInteraction<SessionT extends InteractionSession = Int
|
|
|
32
32
|
get queue(): PromiseQueue | undefined;
|
|
33
33
|
static [Environmental.create](env: Environment): ClientInteraction<InteractionSession>;
|
|
34
34
|
read(request: Read, _session?: SessionT): ReadResult;
|
|
35
|
+
/**
|
|
36
|
+
* Write chosen attributes remotely to the node.
|
|
37
|
+
* The returned attribute write status information is returned. No error is thrown for individual attribute write
|
|
38
|
+
* failures.
|
|
39
|
+
*/
|
|
35
40
|
write<T extends Write>(request: T, _session?: SessionT): WriteResult<T>;
|
|
36
|
-
invoke(request:
|
|
41
|
+
invoke(request: ClientInvoke, _session?: SessionT): DecodedInvokeResult;
|
|
37
42
|
subscribe(request: Subscribe, _session?: SessionT): SubscribeResult;
|
|
38
43
|
cancelSubscription(id: number): void;
|
|
39
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientInteraction.d.ts","sourceRoot":"","sources":["../../../../src/action/client/ClientInteraction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ClientInteraction.d.ts","sourceRoot":"","sources":["../../../../src/action/client/ClientInteraction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAU,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAgB,MAAM,kCAAkC,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAGH,QAAQ,EACR,WAAW,EACX,aAAa,EAIb,YAAY,EAEf,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAK/D,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,aAAa,EAAE,mBAAmB,CAAC;IACnC,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,UAAa,CAAC;AAKrD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,QAAQ,SAAS,kBAAkB,GAAG,kBAAkB,CACnF,YAAW,YAAY,CAAC,QAAQ,CAAC;;gBAQrB,OAAO,EAAE,wBAAwB;IAMvC,KAAK;IAQX,IAAI,aAAa,wBAEhB;IAED,IAAI,KAAK,6BAER;IAED,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAUvC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,UAAU;IAyC3D;;;;OAIG;IACG,KAAK,CAAC,CAAC,SAAS,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;IAiEtE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,mBAAmB;IAyGxE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,eAAe;IA2DzE,kBAAkB,CAAC,EAAE,EAAE,MAAM;CA2BhC"}
|
|
@@ -22,6 +22,8 @@ __export(ClientInteraction_exports, {
|
|
|
22
22
|
DEFAULT_MIN_INTERVAL_FLOOR: () => DEFAULT_MIN_INTERVAL_FLOOR
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(ClientInteraction_exports);
|
|
25
|
+
var import_action = require("#action/index.js");
|
|
26
|
+
var import_Invoke = require("#action/request/Invoke.js");
|
|
25
27
|
var import_general = require("#general");
|
|
26
28
|
var import_InteractionMessenger = require("#interaction/InteractionMessenger.js");
|
|
27
29
|
var import_InteractionQueue = require("#peer/InteractionQueue.js");
|
|
@@ -34,7 +36,10 @@ var import_InputChunk = require("./InputChunk.js");
|
|
|
34
36
|
* Copyright 2022-2025 Matter.js Authors
|
|
35
37
|
* SPDX-License-Identifier: Apache-2.0
|
|
36
38
|
*/
|
|
39
|
+
const logger = import_general.Logger.get("ClientInteraction");
|
|
37
40
|
const DEFAULT_MIN_INTERVAL_FLOOR = (0, import_general.Seconds)(1);
|
|
41
|
+
const DEFAULT_TIMED_REQUEST_TIMEOUT = (0, import_general.Seconds)(10);
|
|
42
|
+
const DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE = (0, import_general.Seconds)(30);
|
|
38
43
|
class ClientInteraction {
|
|
39
44
|
#exchanges;
|
|
40
45
|
#subscriptions;
|
|
@@ -68,34 +73,71 @@ class ClientInteraction {
|
|
|
68
73
|
return instance;
|
|
69
74
|
}
|
|
70
75
|
async *read(request, _session) {
|
|
76
|
+
const readPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
|
|
77
|
+
if (readPathsCount > 9) {
|
|
78
|
+
logger.debug(
|
|
79
|
+
"Read interactions with more then 9 paths might be not allowed by the device. Consider splitting then into several read requests."
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
this.#begin(request);
|
|
83
|
+
let messenger;
|
|
71
84
|
try {
|
|
72
|
-
this.#
|
|
73
|
-
|
|
85
|
+
messenger = await import_InteractionMessenger.InteractionClientMessenger.create(this.#exchanges);
|
|
86
|
+
logger.debug("Read \xBB", messenger.exchange.via, request);
|
|
74
87
|
await messenger.sendReadRequest(request);
|
|
88
|
+
let attributeReportCount = 0;
|
|
89
|
+
let eventReportCount = 0;
|
|
75
90
|
for await (const report of messenger.readDataReports()) {
|
|
91
|
+
attributeReportCount += report.attributeReports?.length ?? 0;
|
|
92
|
+
eventReportCount += report.eventReports?.length ?? 0;
|
|
76
93
|
yield (0, import_InputChunk.InputChunk)(report);
|
|
77
94
|
}
|
|
95
|
+
logger.debug(
|
|
96
|
+
"Read \xAB",
|
|
97
|
+
messenger.exchange.via,
|
|
98
|
+
import_general.Diagnostic.weak(
|
|
99
|
+
attributeReportCount + eventReportCount === 0 ? "(empty)" : import_general.Diagnostic.dict({ attributes: attributeReportCount, events: eventReportCount })
|
|
100
|
+
)
|
|
101
|
+
);
|
|
78
102
|
} finally {
|
|
103
|
+
await messenger?.close();
|
|
79
104
|
this.#end(request);
|
|
80
105
|
}
|
|
81
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Write chosen attributes remotely to the node.
|
|
109
|
+
* The returned attribute write status information is returned. No error is thrown for individual attribute write
|
|
110
|
+
* failures.
|
|
111
|
+
*/
|
|
82
112
|
async write(request, _session) {
|
|
113
|
+
this.#begin(request);
|
|
83
114
|
let messenger;
|
|
84
115
|
try {
|
|
85
|
-
this.#begin(request);
|
|
86
116
|
messenger = await import_InteractionMessenger.InteractionClientMessenger.create(this.#exchanges);
|
|
117
|
+
if (request.timedRequest) {
|
|
118
|
+
await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
|
|
119
|
+
}
|
|
120
|
+
logger.info("Write \xBB", messenger.exchange.via, request);
|
|
87
121
|
const response = await messenger.sendWriteCommand(request);
|
|
88
122
|
if (request.suppressResponse) {
|
|
89
123
|
return void 0;
|
|
90
124
|
}
|
|
91
125
|
if (!response || !response.writeResponses?.length) {
|
|
92
|
-
return
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
126
|
+
return [];
|
|
127
|
+
}
|
|
128
|
+
let successCount = 0;
|
|
129
|
+
let failureCount = 0;
|
|
130
|
+
const result = response.writeResponses.map(
|
|
131
|
+
({
|
|
132
|
+
path: { nodeId, endpointId, clusterId, attributeId, listIndex },
|
|
133
|
+
status: { status, clusterStatus }
|
|
134
|
+
}) => {
|
|
135
|
+
if (status === import_types.Status.Success) {
|
|
136
|
+
successCount++;
|
|
137
|
+
} else {
|
|
138
|
+
failureCount++;
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
99
141
|
kind: "attr-status",
|
|
100
142
|
path: {
|
|
101
143
|
nodeId,
|
|
@@ -106,20 +148,41 @@ class ClientInteraction {
|
|
|
106
148
|
},
|
|
107
149
|
status,
|
|
108
150
|
clusterStatus
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
);
|
|
154
|
+
logger.info(
|
|
155
|
+
"Write \xAB",
|
|
156
|
+
messenger.exchange.via,
|
|
157
|
+
import_general.Diagnostic.weak(
|
|
158
|
+
successCount + failureCount === 0 ? "(empty)" : import_general.Diagnostic.dict({ success: successCount, failure: failureCount })
|
|
159
|
+
)
|
|
160
|
+
);
|
|
161
|
+
return result;
|
|
112
162
|
} finally {
|
|
113
163
|
await messenger?.close();
|
|
114
164
|
this.#end(request);
|
|
115
165
|
}
|
|
116
166
|
}
|
|
117
167
|
async *invoke(request, _session) {
|
|
168
|
+
this.#begin(request);
|
|
118
169
|
let messenger;
|
|
119
170
|
try {
|
|
120
|
-
this.#begin(request);
|
|
121
171
|
messenger = await import_InteractionMessenger.InteractionClientMessenger.create(this.#exchanges);
|
|
122
|
-
|
|
172
|
+
if (request.timedRequest) {
|
|
173
|
+
await messenger.sendTimedRequest(request.timeout ?? DEFAULT_TIMED_REQUEST_TIMEOUT);
|
|
174
|
+
}
|
|
175
|
+
logger.info(
|
|
176
|
+
"Invoke \xBB",
|
|
177
|
+
messenger.exchange.via,
|
|
178
|
+
import_general.Diagnostic.asFlags({ suppressResponse: request.suppressResponse, timed: request.timedRequest }),
|
|
179
|
+
request
|
|
180
|
+
);
|
|
181
|
+
const { expectedProcessingTime, useExtendedFailSafeMessageResponseTimeout } = request;
|
|
182
|
+
const result = await messenger.sendInvokeCommand(
|
|
183
|
+
request,
|
|
184
|
+
expectedProcessingTime ?? (useExtendedFailSafeMessageResponseTimeout ? DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE : void 0)
|
|
185
|
+
);
|
|
123
186
|
if (!request.suppressResponse) {
|
|
124
187
|
if (result && result.invokeResponses?.length) {
|
|
125
188
|
const chunk = result.invokeResponses.map((response) => {
|
|
@@ -129,6 +192,25 @@ class ClientInteraction {
|
|
|
129
192
|
commandRef,
|
|
130
193
|
commandFields
|
|
131
194
|
} = response.command;
|
|
195
|
+
const cmd = request.commands.get(commandRef);
|
|
196
|
+
if (!cmd) {
|
|
197
|
+
throw new import_general.ImplementationError(
|
|
198
|
+
`No response schema found for commandRef ${commandRef} (endpoint ${endpointId}, cluster ${clusterId}, command ${commandId})`
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
const responseSchema = import_Invoke.Invoke.commandOf(cmd).responseSchema;
|
|
202
|
+
if (commandFields === void 0 && responseSchema !== import_types.TlvNoResponse) {
|
|
203
|
+
throw new import_general.ImplementationError(
|
|
204
|
+
`No command fields found for commandRef ${commandRef} (endpoint ${endpointId}, cluster ${clusterId}, command ${commandId})`
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
const data = commandFields === void 0 ? void 0 : responseSchema.decodeTlv(commandFields);
|
|
208
|
+
logger.info(
|
|
209
|
+
"Invoke \xAB",
|
|
210
|
+
messenger.exchange.via,
|
|
211
|
+
import_general.Diagnostic.strong((0, import_action.resolvePathForSpecifier)(cmd)),
|
|
212
|
+
(0, import_general.isObject)(data) ? import_general.Diagnostic.dict(data) : import_general.Diagnostic.weak("(no payload)")
|
|
213
|
+
);
|
|
132
214
|
const res = {
|
|
133
215
|
kind: "cmd-response",
|
|
134
216
|
path: {
|
|
@@ -137,8 +219,7 @@ class ClientInteraction {
|
|
|
137
219
|
commandId
|
|
138
220
|
},
|
|
139
221
|
commandRef,
|
|
140
|
-
data
|
|
141
|
-
// TODO add decoding
|
|
222
|
+
data
|
|
142
223
|
};
|
|
143
224
|
return res;
|
|
144
225
|
} else if (response.status !== void 0) {
|
|
@@ -174,10 +255,32 @@ class ClientInteraction {
|
|
|
174
255
|
}
|
|
175
256
|
}
|
|
176
257
|
async subscribe(request, _session) {
|
|
258
|
+
const subscriptionPathsCount = (request.attributeRequests?.length ?? 0) + (request.eventRequests?.length ?? 0);
|
|
259
|
+
if (subscriptionPathsCount > 3) {
|
|
260
|
+
logger.debug("Subscribe interactions with more then 3 paths might be not allowed by the device.");
|
|
261
|
+
}
|
|
262
|
+
if (!request.keepSubscriptions) {
|
|
263
|
+
for (const subscription of this.#subscriptions) {
|
|
264
|
+
logger.debug(
|
|
265
|
+
`Removing subscription with ID ${subscription.subscriptionId} because new subscription replaces it`
|
|
266
|
+
);
|
|
267
|
+
subscription.close();
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
this.#begin(request);
|
|
177
271
|
let messenger;
|
|
178
272
|
try {
|
|
179
|
-
this.#begin(request);
|
|
180
273
|
messenger = await import_InteractionMessenger.InteractionClientMessenger.create(this.#exchanges);
|
|
274
|
+
logger.info(
|
|
275
|
+
"Subscribe \xBB",
|
|
276
|
+
messenger.exchange.via,
|
|
277
|
+
import_general.Diagnostic.asFlags({ keepSubscriptions: request.keepSubscriptions }),
|
|
278
|
+
import_general.Diagnostic.dict({
|
|
279
|
+
min: import_general.Duration.format(request.minIntervalFloor),
|
|
280
|
+
max: import_general.Duration.format(request.maxIntervalCeiling)
|
|
281
|
+
}),
|
|
282
|
+
request
|
|
283
|
+
);
|
|
181
284
|
await messenger.sendSubscribeRequest({
|
|
182
285
|
minIntervalFloorSeconds: import_general.Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
|
|
183
286
|
maxIntervalCeilingSeconds: import_general.Seconds.of(DEFAULT_MIN_INTERVAL_FLOOR),
|
|
@@ -187,6 +290,14 @@ class ClientInteraction {
|
|
|
187
290
|
await this.#handleSubscriptionResponse(request, readChunks(messenger));
|
|
188
291
|
const responseMessage = await messenger.nextMessage(import_InteractionMessenger.MessageType.SubscribeResponse);
|
|
189
292
|
const response = import_types.TlvSubscribeResponse.decode(responseMessage.payload);
|
|
293
|
+
logger.info(
|
|
294
|
+
"Subscription successful \xAB",
|
|
295
|
+
messenger.exchange.via,
|
|
296
|
+
import_general.Diagnostic.dict({
|
|
297
|
+
subId: response.subscriptionId,
|
|
298
|
+
interval: import_general.Duration.format((0, import_general.Seconds)(response.maxInterval))
|
|
299
|
+
})
|
|
300
|
+
);
|
|
190
301
|
return this.#subscriptions.add(request, response);
|
|
191
302
|
} finally {
|
|
192
303
|
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;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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"}
|
|
@@ -21,7 +21,9 @@ __export(Invoke_exports, {
|
|
|
21
21
|
Invoke: () => Invoke
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(Invoke_exports);
|
|
24
|
+
var import_general = require("#general");
|
|
24
25
|
var import_Session = require("#session/Session.js");
|
|
26
|
+
var import_types = require("#types");
|
|
25
27
|
var import_MalformedRequestError = require("./MalformedRequestError.js");
|
|
26
28
|
var import_Specifier = require("./Specifier.js");
|
|
27
29
|
/**
|
|
@@ -36,44 +38,93 @@ function Invoke(optionsOrData, ...commands) {
|
|
|
36
38
|
let options;
|
|
37
39
|
if ("commands" in optionsOrData) {
|
|
38
40
|
options = optionsOrData;
|
|
41
|
+
commands = [...optionsOrData.commands, ...commands];
|
|
39
42
|
} else {
|
|
40
43
|
commands = [optionsOrData, ...commands];
|
|
41
44
|
options = {};
|
|
42
45
|
}
|
|
43
46
|
const {
|
|
44
|
-
commands: invokeRequests = [],
|
|
45
47
|
interactionModelRevision = import_Session.FALLBACK_INTERACTIONMODEL_REVISION,
|
|
46
48
|
suppressResponse = false,
|
|
47
|
-
|
|
49
|
+
timeout,
|
|
50
|
+
expectedProcessingTime,
|
|
51
|
+
useExtendedFailSafeMessageResponseTimeout = false,
|
|
52
|
+
skipValidation = false
|
|
48
53
|
} = options;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
invokeRequests.push(entry);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (!invokeRequests?.length) {
|
|
54
|
+
let timedRequest = !!options.timed || !!timeout;
|
|
55
|
+
if (!commands?.length) {
|
|
55
56
|
throw new import_MalformedRequestError.MalformedRequestError(`Invocation requires at least one command`);
|
|
56
57
|
}
|
|
58
|
+
if (commands.length > 1) {
|
|
59
|
+
const commandRefs = /* @__PURE__ */ new Set();
|
|
60
|
+
for (const { commandRef } of commands) {
|
|
61
|
+
if (commandRef === void 0) {
|
|
62
|
+
throw new import_MalformedRequestError.MalformedRequestError(`CommandRef required when invoking multiple commands`);
|
|
63
|
+
}
|
|
64
|
+
if (commandRefs.has(commandRef)) {
|
|
65
|
+
throw new import_MalformedRequestError.MalformedRequestError(`Duplicate commandRef ${commandRef} in multiple command invoke`);
|
|
66
|
+
}
|
|
67
|
+
commandRefs.add(commandRef);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const commandMap = /* @__PURE__ */ new Map();
|
|
71
|
+
const invokeRequests = commands.map((cmd) => {
|
|
72
|
+
const cmdData = Invoke.Command(cmd, skipValidation);
|
|
73
|
+
timedRequest ||= !!cmdData.timed;
|
|
74
|
+
commandMap.set(cmdData.commandRef, cmd);
|
|
75
|
+
return cmdData;
|
|
76
|
+
});
|
|
57
77
|
return {
|
|
78
|
+
timedRequest,
|
|
79
|
+
timeout,
|
|
58
80
|
invokeRequests,
|
|
59
81
|
interactionModelRevision,
|
|
60
82
|
suppressResponse,
|
|
61
|
-
|
|
83
|
+
expectedProcessingTime,
|
|
84
|
+
useExtendedFailSafeMessageResponseTimeout,
|
|
85
|
+
// Additional meta-data for client side processing
|
|
86
|
+
commands: commandMap,
|
|
87
|
+
[import_general.Diagnostic.value]: () => import_general.Diagnostic.list(
|
|
88
|
+
commands.map((cmd) => {
|
|
89
|
+
const { commandRef } = cmd;
|
|
90
|
+
const fields = "fields" in cmd ? cmd.fields : void 0;
|
|
91
|
+
return [
|
|
92
|
+
import_general.Diagnostic.strong((0, import_Specifier.resolvePathForSpecifier)(cmd)),
|
|
93
|
+
"with",
|
|
94
|
+
(0, import_general.isObject)(fields) ? import_general.Diagnostic.dict(fields) : "(no payload)",
|
|
95
|
+
commandRef !== void 0 ? `(ref ${commandRef})` : ""
|
|
96
|
+
];
|
|
97
|
+
})
|
|
98
|
+
)
|
|
62
99
|
};
|
|
63
100
|
}
|
|
64
101
|
((Invoke2) => {
|
|
65
|
-
function Command(request) {
|
|
102
|
+
function Command(request, skipValidation = false) {
|
|
66
103
|
const command = Invoke2.commandOf(request);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
104
|
+
const { requestSchema, requestId, timed } = command;
|
|
105
|
+
const { commandRef } = request;
|
|
106
|
+
let fields = "fields" in request ? request.fields : void 0;
|
|
107
|
+
if (requestSchema instanceof import_types.ObjectSchema) {
|
|
108
|
+
if (fields === void 0) {
|
|
109
|
+
fields = {};
|
|
110
|
+
}
|
|
111
|
+
if (requestSchema.isFabricScoped && fields.fabricIndex === void 0) {
|
|
112
|
+
fields.fabricIndex = import_types.FabricIndex.NO_FABRIC;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (!skipValidation) {
|
|
116
|
+
requestSchema.validate(fields);
|
|
70
117
|
}
|
|
118
|
+
const commandFields = requestSchema.encodeTlv(fields);
|
|
71
119
|
const result = {
|
|
72
120
|
commandPath: {
|
|
121
|
+
// Endpoint id is added below if not wildcard
|
|
73
122
|
clusterId: import_Specifier.Specifier.clusterFor(request.cluster).id,
|
|
74
|
-
commandId:
|
|
123
|
+
commandId: requestId
|
|
75
124
|
},
|
|
76
|
-
commandFields
|
|
125
|
+
commandFields,
|
|
126
|
+
timed: timed ?? false,
|
|
127
|
+
commandRef
|
|
77
128
|
};
|
|
78
129
|
const endpointId = import_Specifier.Specifier.endpointIdOf(request);
|
|
79
130
|
if (endpointId !== void 0) {
|
|
@@ -82,6 +133,20 @@ function Invoke(optionsOrData, ...commands) {
|
|
|
82
133
|
return result;
|
|
83
134
|
}
|
|
84
135
|
Invoke2.Command = Command;
|
|
136
|
+
function ConcreteCommandRequest(data) {
|
|
137
|
+
if (data.endpoint === void 0) {
|
|
138
|
+
throw new import_MalformedRequestError.MalformedRequestError(`ConcreteCommandRequest requires an endpoint`);
|
|
139
|
+
}
|
|
140
|
+
return data;
|
|
141
|
+
}
|
|
142
|
+
Invoke2.ConcreteCommandRequest = ConcreteCommandRequest;
|
|
143
|
+
function WildcardCommandRequest(data) {
|
|
144
|
+
if ("endpoint" in data && data.endpoint !== void 0) {
|
|
145
|
+
throw new import_MalformedRequestError.MalformedRequestError(`ConcreteCommandRequest must not have an endpoint`);
|
|
146
|
+
}
|
|
147
|
+
return data;
|
|
148
|
+
}
|
|
149
|
+
Invoke2.WildcardCommandRequest = WildcardCommandRequest;
|
|
85
150
|
function commandOf(request) {
|
|
86
151
|
if (typeof request.command === "string") {
|
|
87
152
|
const cluster = import_Specifier.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,qBAAmD;
|
|
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":"AAAA;;;;GAIG;AAIH,OAAO,EACH,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,WAAW,EACd,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAA2B,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,IAAK,SAAQ,WAAW;CAAG;AAE5C;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AAEjF;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC;AAqL1D,yBAAiB,IAAI,CAAC;IAClB,UAAiB,OAAO;QACpB,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;QAC7B,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;QACrC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;QACrB,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;QAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,wBAAwB,CAAC,EAAE,MAAM,CAAC;KACrC;IAED,UAAiB,UAAW,SAAQ,IAAI;QACpC,iBAAiB,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,CAAC;KACpE;IAED,SAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,UAAU,CAEtE;IAED,UAAiB,MAAO,SAAQ,IAAI;QAChC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,CAAC;KAC5D;IAED,SAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,IAAI,MAAM,CAE9D;IAED;;OAEG;IACH,KAAY,QAAQ,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IAC9D,CAAC;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAC9C,CAAC;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C;;OAEG;IACH,KAAY,iBAAiB,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IACvE,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAC7B,iBAAiB,CAAC,YAAY,GAC9B,iBAAiB,CAAC,MAAM,GACxB,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,GACrC,iBAAiB,CAAC,iBAAiB,GACnC,iBAAiB,CAAC,QAAQ,CAAC;IAEjC;;OAEG;IACH,KAAY,aAAa,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,IACnE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,GACzB,aAAa,CAAC,YAAY,GAC1B,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,GACjC,aAAa,CAAC,aAAa,GAC3B,aAAa,CAAC,QAAQ,CAAC;IAE7B,SAAgB,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,WAAW,EACjD,QAAQ,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAChC;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAK9C;IAED,SAAgB,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,CAAC,GAAG;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,CAAC,CAKvF;IAED,UAAiB,aAAa;QAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAChC;IAED,KAAY,wBAAwB,GAAG,WAAW,CAAC,SAAS,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE3F,UAAiB,iBAAiB,CAAC;QAC/B,UAAiB,QAAQ,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO;YACjD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,OAAO,EAAE,CAAC,CAAC;YACX,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7G;QAED,UAAiB,QAAQ;YACrB,KAAK,CAAC,EAAE,aAAa,CAAC;SACzB;QAED,UAAiB,YAAa,SAAQ,QAAQ;YAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;YACrB,OAAO,CAAC,EAAE,SAAS,CAAC;YACpB,UAAU,CAAC,EAAE,SAAS,CAAC;SAC1B;QAED,UAAiB,MAAO,SAAQ,QAAQ;YACpC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC9B,OAAO,CAAC,EAAE,SAAS,CAAC;YACpB,UAAU,EAAE,wBAAwB,GAAG,wBAAwB,EAAE,CAAC;SACrE;QAED,UAAiB,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAE,SAAQ,QAAQ;YAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;YACrB,OAAO,EAAE,CAAC,CAAC;YACX,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7G;QAED,UAAiB,iBAAkB,SAAQ,QAAQ;YAC/C,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC9B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,UAAU,CAAC,EAAE,SAAS,CAAC;SAC1B;QAED,UAAiB,QAAS,SAAQ,QAAQ;YACtC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;YACpB,UAAU,CAAC,EAAE,SAAS,CAAC;SAC1B;KACJ;IAED,UAAiB,aAAa,CAAC;QAC3B,UAAiB,QAAQ,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO;YACjD,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACjG;QAED,UAAiB,QAAQ;YACrB,KAAK,CAAC,EAAE,aAAa,CAAC;SACzB;QAED,UAAiB,YAAa,SAAQ,QAAQ;YAC1C,QAAQ,CAAC,EAAE,SAAS,CAAC;YACrB,OAAO,CAAC,EAAE,SAAS,CAAC;YACpB,MAAM,CAAC,EAAE,SAAS,CAAC;SACtB;QAED,UAAiB,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAE,SAAQ,QAAQ;YAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;YACrB,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACjG;QAED,UAAiB,aAAc,SAAQ,QAAQ;YAC3C,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;YAC3B,MAAM,CAAC,EAAE,SAAS,CAAC;SACtB;QAED,UAAiB,QAAS,SAAQ,QAAQ;YACtC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC;YAC7B,OAAO,CAAC,EAAE,SAAS,CAAC;YACpB,MAAM,CAAC,EAAE,SAAS,CAAC;SACtB;KACJ;CACJ"}
|
|
@@ -22,7 +22,7 @@ __export(Read_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(Read_exports);
|
|
24
24
|
var import_general = require("#general");
|
|
25
|
-
var
|
|
25
|
+
var import_model = require("#model");
|
|
26
26
|
var import_MalformedRequestError = require("./MalformedRequestError.js");
|
|
27
27
|
var import_Specifier = require("./Specifier.js");
|
|
28
28
|
/**
|
|
@@ -44,7 +44,15 @@ function Read(optionsOrSelector, ...selectors) {
|
|
|
44
44
|
let { attributes: attributeRequests, versionFilters, events: eventRequests, eventFilters } = options;
|
|
45
45
|
const result = {
|
|
46
46
|
isFabricFiltered: options.fabricFilter ?? true,
|
|
47
|
-
interactionModelRevision: options.interactionModelRevision ??
|
|
47
|
+
interactionModelRevision: options.interactionModelRevision ?? import_model.Specification.INTERACTION_MODEL_REVISION,
|
|
48
|
+
[import_general.Diagnostic.value]: () => import_general.Diagnostic.dict({
|
|
49
|
+
attributes: attributeRequests?.length ? attributeRequests?.map((path) => (0, import_Specifier.resolvePathForSpecifier)(path)).join(", ") : void 0,
|
|
50
|
+
events: eventRequests?.length ? eventRequests?.map((path) => (0, import_Specifier.resolvePathForSpecifier)(path)).join(", ") : void 0,
|
|
51
|
+
dataVersionFilters: versionFilters?.length ? versionFilters.map(
|
|
52
|
+
({ path: { endpointId, clusterId }, dataVersion }) => `${endpointId}/${clusterId}=${dataVersion}`
|
|
53
|
+
).join(", ") : void 0,
|
|
54
|
+
eventFilters: eventFilters?.length ? eventFilters.map(({ nodeId, eventMin }) => `${nodeId}=${eventMin}`).join(", ") : void 0
|
|
55
|
+
})
|
|
48
56
|
};
|
|
49
57
|
for (const selector of selectors) {
|
|
50
58
|
reifySelector(selector);
|