@matter/protocol 0.13.1-alpha.0-20250509-28e1567e1 → 0.13.1-alpha.0-20250515-a4c61c546
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/protocols.d.ts +59 -2
- package/dist/cjs/action/protocols.d.ts.map +1 -1
- package/dist/cjs/action/request/Read.d.ts +2 -2
- package/dist/cjs/action/request/Read.d.ts.map +1 -1
- package/dist/cjs/action/request/Read.js +4 -4
- package/dist/cjs/action/request/Read.js.map +1 -1
- package/dist/cjs/action/response/ReadResult.d.ts +6 -2
- package/dist/cjs/action/response/ReadResult.d.ts.map +1 -1
- package/dist/cjs/action/server/AttributeResponse.d.ts +46 -17
- package/dist/cjs/action/server/AttributeResponse.d.ts.map +1 -1
- package/dist/cjs/action/server/AttributeResponse.js +128 -110
- package/dist/cjs/action/server/AttributeResponse.js.map +2 -2
- package/dist/cjs/action/server/AttributeSubscriptionResponse.d.ts +36 -0
- package/dist/cjs/action/server/AttributeSubscriptionResponse.d.ts.map +1 -0
- package/dist/cjs/action/server/AttributeSubscriptionResponse.js +86 -0
- package/dist/cjs/action/server/AttributeSubscriptionResponse.js.map +6 -0
- package/dist/cjs/action/server/DataResponse.d.ts +45 -0
- package/dist/cjs/action/server/DataResponse.d.ts.map +1 -0
- package/dist/cjs/action/server/DataResponse.js +69 -0
- package/dist/cjs/action/server/DataResponse.js.map +6 -0
- package/dist/cjs/action/server/EventResponse.d.ts +28 -0
- package/dist/cjs/action/server/EventResponse.d.ts.map +1 -0
- package/dist/cjs/action/server/EventResponse.js +318 -0
- package/dist/cjs/action/server/EventResponse.js.map +6 -0
- package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
- package/dist/cjs/action/server/ServerInteraction.js +15 -2
- package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
- package/dist/cjs/action/server/index.d.ts +3 -0
- package/dist/cjs/action/server/index.d.ts.map +1 -1
- package/dist/cjs/action/server/index.js +3 -0
- package/dist/cjs/action/server/index.js.map +1 -1
- package/dist/cjs/events/OccurrenceManager.d.ts +20 -11
- package/dist/cjs/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/cjs/events/OccurrenceManager.js +113 -74
- package/dist/cjs/events/OccurrenceManager.js.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.d.ts +14 -2
- package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/cjs/interaction/InteractionMessenger.js +87 -3
- package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
- package/dist/cjs/interaction/index.d.ts +0 -1
- package/dist/cjs/interaction/index.d.ts.map +1 -1
- package/dist/cjs/interaction/index.js +0 -1
- package/dist/cjs/interaction/index.js.map +1 -1
- package/dist/cjs/peer/ControllerCommissioningFlow.js +1 -1
- package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/cjs/protocol/MessageExchange.js +11 -1
- package/dist/cjs/protocol/MessageExchange.js.map +1 -1
- package/dist/esm/action/protocols.d.ts +59 -2
- package/dist/esm/action/protocols.d.ts.map +1 -1
- package/dist/esm/action/request/Read.d.ts +2 -2
- package/dist/esm/action/request/Read.d.ts.map +1 -1
- package/dist/esm/action/request/Read.js +4 -4
- package/dist/esm/action/request/Read.js.map +1 -1
- package/dist/esm/action/response/ReadResult.d.ts +6 -2
- package/dist/esm/action/response/ReadResult.d.ts.map +1 -1
- package/dist/esm/action/server/AttributeResponse.d.ts +46 -17
- package/dist/esm/action/server/AttributeResponse.d.ts.map +1 -1
- package/dist/esm/action/server/AttributeResponse.js +129 -113
- package/dist/esm/action/server/AttributeResponse.js.map +1 -1
- package/dist/esm/action/server/AttributeSubscriptionResponse.d.ts +36 -0
- package/dist/esm/action/server/AttributeSubscriptionResponse.d.ts.map +1 -0
- package/dist/esm/action/server/AttributeSubscriptionResponse.js +66 -0
- package/dist/esm/action/server/AttributeSubscriptionResponse.js.map +6 -0
- package/dist/esm/action/server/DataResponse.d.ts +45 -0
- package/dist/esm/action/server/DataResponse.d.ts.map +1 -0
- package/dist/esm/action/server/DataResponse.js +49 -0
- package/dist/esm/action/server/DataResponse.js.map +6 -0
- package/dist/esm/action/server/EventResponse.d.ts +28 -0
- package/dist/esm/action/server/EventResponse.d.ts.map +1 -0
- package/dist/esm/action/server/EventResponse.js +305 -0
- package/dist/esm/action/server/EventResponse.js.map +6 -0
- package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
- package/dist/esm/action/server/ServerInteraction.js +16 -3
- package/dist/esm/action/server/ServerInteraction.js.map +1 -1
- package/dist/esm/action/server/index.d.ts +3 -0
- package/dist/esm/action/server/index.d.ts.map +1 -1
- package/dist/esm/action/server/index.js +3 -0
- package/dist/esm/action/server/index.js.map +1 -1
- package/dist/esm/events/OccurrenceManager.d.ts +20 -11
- package/dist/esm/events/OccurrenceManager.d.ts.map +1 -1
- package/dist/esm/events/OccurrenceManager.js +117 -80
- package/dist/esm/events/OccurrenceManager.js.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.d.ts +14 -2
- package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
- package/dist/esm/interaction/InteractionMessenger.js +87 -3
- package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
- package/dist/esm/interaction/index.d.ts +0 -1
- package/dist/esm/interaction/index.d.ts.map +1 -1
- package/dist/esm/interaction/index.js +0 -1
- package/dist/esm/interaction/index.js.map +1 -1
- package/dist/esm/peer/ControllerCommissioningFlow.js +1 -1
- package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
- package/dist/esm/protocol/MessageExchange.js +11 -1
- package/dist/esm/protocol/MessageExchange.js.map +1 -1
- package/package.json +6 -6
- package/src/action/protocols.ts +68 -2
- package/src/action/request/Read.ts +2 -2
- package/src/action/response/ReadResult.ts +8 -1
- package/src/action/server/AttributeResponse.ts +145 -118
- package/src/action/server/AttributeSubscriptionResponse.ts +90 -0
- package/src/action/server/DataResponse.ts +70 -0
- package/src/action/server/EventResponse.ts +381 -0
- package/src/action/server/ServerInteraction.ts +18 -4
- package/src/action/server/index.ts +3 -0
- package/src/events/OccurrenceManager.ts +126 -100
- package/src/interaction/InteractionMessenger.ts +93 -8
- package/src/interaction/index.ts +0 -1
- package/src/peer/ControllerCommissioningFlow.ts +1 -1
- package/src/protocol/MessageExchange.ts +13 -1
- package/dist/cjs/interaction/ServerSubscription.d.ts +0 -116
- package/dist/cjs/interaction/ServerSubscription.d.ts.map +0 -1
- package/dist/cjs/interaction/ServerSubscription.js +0 -778
- package/dist/cjs/interaction/ServerSubscription.js.map +0 -6
- package/dist/esm/interaction/ServerSubscription.d.ts +0 -116
- package/dist/esm/interaction/ServerSubscription.d.ts.map +0 -1
- package/dist/esm/interaction/ServerSubscription.js +0 -778
- package/dist/esm/interaction/ServerSubscription.js.map +0 -6
- package/src/interaction/ServerSubscription.ts +0 -1038
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataResponse.d.ts","sourceRoot":"","sources":["../../../../src/action/server/DataResponse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,OAAO,EAAgB,MAAM,EAA2B,MAAM,QAAQ,CAAC;AAEvE,eAAO,MAAM,sBAAsB;;;;;;;;;;EAAwC,CAAC;AAC5E,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,MAQ1C,CAAC;AAEF,8BAAsB,YAAY,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO;;gBAQjF,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ;IAKjD,SAAS,KAAK,IAAI,iBAEjB;IAED,SAAS,KAAK,OAAO,aAEpB;IAED;;OAEG;IACH,SAAS,KAAK,MAAM,WAMnB;IAED,QAAQ,CAAC,MAAM,EAAE;QACb;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;QAEf;;WAEG;QACH,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC;CACL"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var DataResponse_exports = {};
|
|
20
|
+
__export(DataResponse_exports, {
|
|
21
|
+
DataResponse: () => DataResponse,
|
|
22
|
+
FallbackLimits: () => FallbackLimits,
|
|
23
|
+
WildcardPathFlagsCodec: () => WildcardPathFlagsCodec
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(DataResponse_exports);
|
|
26
|
+
var import_model = require("#model");
|
|
27
|
+
var import_types = require("#types");
|
|
28
|
+
/**
|
|
29
|
+
* @license
|
|
30
|
+
* Copyright 2022-2025 Project CHIP Authors
|
|
31
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
32
|
+
*/
|
|
33
|
+
const WildcardPathFlagsCodec = (0, import_types.BitmapSchema)(import_types.WildcardPathFlagsBitmap);
|
|
34
|
+
const FallbackLimits = {
|
|
35
|
+
fabricScoped: false,
|
|
36
|
+
fabricSensitive: false,
|
|
37
|
+
readable: true,
|
|
38
|
+
readLevel: import_model.AccessLevel.View,
|
|
39
|
+
timed: false,
|
|
40
|
+
writable: true,
|
|
41
|
+
writeLevel: import_model.AccessLevel.Administer
|
|
42
|
+
};
|
|
43
|
+
class DataResponse {
|
|
44
|
+
// Configuration
|
|
45
|
+
#session;
|
|
46
|
+
#node;
|
|
47
|
+
// The node ID may be expensive to retrieve and is invariant so we cache it here
|
|
48
|
+
#cachedNodeId;
|
|
49
|
+
constructor(node, session) {
|
|
50
|
+
this.#node = node;
|
|
51
|
+
this.#session = session;
|
|
52
|
+
}
|
|
53
|
+
get node() {
|
|
54
|
+
return this.#node;
|
|
55
|
+
}
|
|
56
|
+
get session() {
|
|
57
|
+
return this.#session;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The node ID used to filter paths with node ID specified. Unsure if this is ever actually used.
|
|
61
|
+
*/
|
|
62
|
+
get nodeId() {
|
|
63
|
+
if (this.#cachedNodeId === void 0) {
|
|
64
|
+
this.#cachedNodeId = (this.#session.fabric && this.#node.nodeIdFor(this.#session.fabric)) ?? import_types.NodeId.UNSPECIFIED_NODE_ID;
|
|
65
|
+
}
|
|
66
|
+
return this.#cachedNodeId;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=DataResponse.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/action/server/DataResponse.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,mBAA4B;AAC5B,mBAA8D;AAR9D;AAAA;AAAA;AAAA;AAAA;AAUO,MAAM,6BAAyB,2BAAa,oCAAuB;AACnE,MAAM,iBAAuC;AAAA,EAChD,cAAc;AAAA,EACd,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,WAAW,yBAAY;AAAA,EACvB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY,yBAAY;AAC5B;AAEO,MAAe,aAA6E;AAAA;AAAA,EAE/F;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EAEA,YAAY,MAAoB,SAAmB;AAC/C,SAAK,QAAQ;AACb,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,IAAc,OAAO;AACjB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAc,UAAU;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAc,SAAS;AACnB,QAAI,KAAK,kBAAkB,QAAW;AAClC,WAAK,iBACA,KAAK,SAAS,UAAU,KAAK,MAAM,UAAU,KAAK,SAAS,MAAM,MAAM,oBAAO;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EAChB;AAkBJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Project CHIP Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { NodeProtocol } from "#action/protocols.js";
|
|
7
|
+
import { Read } from "#action/request/Read.js";
|
|
8
|
+
import { ReadResult } from "#action/response/ReadResult.js";
|
|
9
|
+
import { AccessControl } from "#action/server/AccessControl.js";
|
|
10
|
+
import { DataResponse } from "#action/server/DataResponse.js";
|
|
11
|
+
/**
|
|
12
|
+
* Implements read of event data for Matter "read" and "subscribe" interactions.
|
|
13
|
+
*
|
|
14
|
+
* We collect all allowed event paths at first and then iterate over all events and use the ones matching to the paths.
|
|
15
|
+
*
|
|
16
|
+
* TODO - profile; ensure nested functions are properly JITed and/or inlined
|
|
17
|
+
*/
|
|
18
|
+
export declare class EventResponse<SessionT extends AccessControl.Session = AccessControl.Session> extends DataResponse<SessionT> {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(node: NodeProtocol, session: SessionT);
|
|
21
|
+
process({ eventFilters, eventRequests, isFabricFiltered, }: Read.Events): AsyncGenerator<ReadResult.Chunk, void, void>;
|
|
22
|
+
get counts(): {
|
|
23
|
+
status: number;
|
|
24
|
+
value: number;
|
|
25
|
+
existent: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=EventResponse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventResponse.d.ts","sourceRoot":"","sources":["../../../../src/action/server/EventResponse.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwD,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAkB,MAAM,gCAAgC,CAAC;AAiB9E;;;;;;GAMG;AACH,qBAAa,aAAa,CACtB,QAAQ,SAAS,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAChE,SAAQ,YAAY,CAAC,QAAQ,CAAC;;gBAmBhB,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ;IAI1C,OAAO,CAAC,EACX,YAAY,EACZ,aAAa,EACb,gBAAgB,GACnB,EAAE,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC;IAsC7D,IAAI,MAAM;;;;MAMT;CAiRJ"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var EventResponse_exports = {};
|
|
20
|
+
__export(EventResponse_exports, {
|
|
21
|
+
EventResponse: () => EventResponse
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(EventResponse_exports);
|
|
24
|
+
var import_AccessControl = require("#action/server/AccessControl.js");
|
|
25
|
+
var import_DataResponse = require("#action/server/DataResponse.js");
|
|
26
|
+
var import_general = require("#general");
|
|
27
|
+
var import_model = require("#model");
|
|
28
|
+
var import_types = require("#types");
|
|
29
|
+
/**
|
|
30
|
+
* @license
|
|
31
|
+
* Copyright 2022-2025 Project CHIP Authors
|
|
32
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
33
|
+
*/
|
|
34
|
+
const logger = import_general.Logger.get("EventResponse");
|
|
35
|
+
class EventResponse extends import_DataResponse.DataResponse {
|
|
36
|
+
// Normalized Event Filter to just our node-id
|
|
37
|
+
#eventMinVersion;
|
|
38
|
+
// The Fabric filtering is done when we read the data from OccurrenceManager, so we can determine the parameter once
|
|
39
|
+
#filteredForFabricIndex;
|
|
40
|
+
// The following state updates as data producers execute. This serves both to convey state between functions and as
|
|
41
|
+
// a cache between producers that touch the same endpoint and/or cluster
|
|
42
|
+
#currentEndpoint;
|
|
43
|
+
#currentCluster;
|
|
44
|
+
// Collected allowed and existing event paths to consider when reading events
|
|
45
|
+
#allowedEventPaths = /* @__PURE__ */ new Map();
|
|
46
|
+
// Count how many attribute status (on error) and attribute values (on success) we have emitted
|
|
47
|
+
#statusCount = 0;
|
|
48
|
+
#valueCount = 0;
|
|
49
|
+
constructor(node, session) {
|
|
50
|
+
super(node, session);
|
|
51
|
+
}
|
|
52
|
+
async *process({
|
|
53
|
+
eventFilters,
|
|
54
|
+
eventRequests,
|
|
55
|
+
isFabricFiltered
|
|
56
|
+
}) {
|
|
57
|
+
const nodeId = this.session.fabric === void 0 ? import_types.NodeId.UNSPECIFIED_NODE_ID : this.nodeId;
|
|
58
|
+
if (eventFilters !== void 0) {
|
|
59
|
+
for (const { nodeId: filterNodeId, eventMin } of eventFilters) {
|
|
60
|
+
if (filterNodeId === void 0 || filterNodeId === nodeId) {
|
|
61
|
+
this.#eventMinVersion = (0, import_types.EventNumber)(eventMin);
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (isFabricFiltered) {
|
|
67
|
+
this.#filteredForFabricIndex = this.session.fabric ?? import_types.FabricIndex.NO_FABRIC;
|
|
68
|
+
}
|
|
69
|
+
for (const path of eventRequests) {
|
|
70
|
+
if (path.endpointId === void 0 || path.clusterId === void 0 || path.eventId === void 0) {
|
|
71
|
+
this.#addWildcard(path);
|
|
72
|
+
} else {
|
|
73
|
+
const status = this.#addConcrete(path);
|
|
74
|
+
if (status !== void 0) {
|
|
75
|
+
yield [status];
|
|
76
|
+
this.#statusCount++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for await (const data of this.#readAllowedEvents()) {
|
|
81
|
+
yield [data];
|
|
82
|
+
this.#valueCount++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
get counts() {
|
|
86
|
+
return {
|
|
87
|
+
status: this.#statusCount,
|
|
88
|
+
value: this.#valueCount,
|
|
89
|
+
existent: this.#allowedEventPaths.size
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/** Guarded accessor for this.#currentEndpoint. This should never be undefined */
|
|
93
|
+
get #guardedCurrentEndpoint() {
|
|
94
|
+
if (this.#currentEndpoint === void 0) {
|
|
95
|
+
throw new import_general.InternalError("currentEndpoint is not set. Should never happen");
|
|
96
|
+
}
|
|
97
|
+
return this.#currentEndpoint;
|
|
98
|
+
}
|
|
99
|
+
/** Guarded accessor for this.#currentCluster. This should never be undefined */
|
|
100
|
+
get #guardedCurrentCluster() {
|
|
101
|
+
if (this.#currentCluster === void 0) {
|
|
102
|
+
throw new import_general.InternalError("currentCluster is not set. Should never happen");
|
|
103
|
+
}
|
|
104
|
+
return this.#currentCluster;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Validate a wildcard path and update the internal state.
|
|
108
|
+
*/
|
|
109
|
+
#addWildcard(path) {
|
|
110
|
+
const { nodeId, clusterId, endpointId, eventId } = path;
|
|
111
|
+
if (clusterId === void 0 && eventId !== void 0) {
|
|
112
|
+
throw new import_types.StatusResponseError("Illegal read request with wildcard cluster ID", import_types.StatusCode.InvalidAction);
|
|
113
|
+
}
|
|
114
|
+
if (nodeId !== void 0 && nodeId !== this.nodeId) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (endpointId === void 0) {
|
|
118
|
+
for (const endpoint2 of this.node) {
|
|
119
|
+
this.#addEndpointForWildcard(endpoint2, path);
|
|
120
|
+
}
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const endpoint = this.node[endpointId];
|
|
124
|
+
if (endpoint) {
|
|
125
|
+
return this.#addEndpointForWildcard(endpoint, path);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Validate a concrete path and update the internal state.
|
|
130
|
+
*/
|
|
131
|
+
#addConcrete(path) {
|
|
132
|
+
const { nodeId, endpointId, clusterId, eventId } = path;
|
|
133
|
+
if (nodeId !== void 0 && this.nodeId !== nodeId) {
|
|
134
|
+
return this.#asStatus(path, import_types.Status.UnsupportedNode);
|
|
135
|
+
}
|
|
136
|
+
const endpoint = this.node[endpointId];
|
|
137
|
+
const cluster = endpoint?.[clusterId];
|
|
138
|
+
const event = cluster?.type.events[eventId];
|
|
139
|
+
let limits;
|
|
140
|
+
if (event === void 0) {
|
|
141
|
+
const modelEvent = this.node.matter.member(path.clusterId, [import_model.ElementTag.Cluster])?.member(path.eventId, [import_model.ElementTag.Event]);
|
|
142
|
+
if (modelEvent) {
|
|
143
|
+
limits = (0, import_AccessControl.AccessControl)(modelEvent).limits;
|
|
144
|
+
} else {
|
|
145
|
+
limits = import_DataResponse.FallbackLimits;
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
limits = event.limits;
|
|
149
|
+
}
|
|
150
|
+
const location = {
|
|
151
|
+
...cluster?.location ?? {
|
|
152
|
+
path: import_model.DataModelPath.none,
|
|
153
|
+
endpoint: endpointId,
|
|
154
|
+
cluster: clusterId
|
|
155
|
+
},
|
|
156
|
+
owningFabric: this.session.fabric
|
|
157
|
+
};
|
|
158
|
+
const permission = this.session.authorityAt(limits.readLevel, location);
|
|
159
|
+
switch (permission) {
|
|
160
|
+
case import_AccessControl.AccessControl.Authority.Granted:
|
|
161
|
+
break;
|
|
162
|
+
case import_AccessControl.AccessControl.Authority.Unauthorized:
|
|
163
|
+
return this.#asStatus(path, import_types.Status.UnsupportedAccess);
|
|
164
|
+
case import_AccessControl.AccessControl.Authority.Restricted:
|
|
165
|
+
return this.#asStatus(path, import_types.Status.AccessRestricted);
|
|
166
|
+
default:
|
|
167
|
+
throw new import_general.InternalError(`Unsupported authorization state ${permission}`);
|
|
168
|
+
}
|
|
169
|
+
if (endpoint === void 0) {
|
|
170
|
+
return this.#asStatus(path, import_types.Status.UnsupportedEndpoint);
|
|
171
|
+
}
|
|
172
|
+
if (cluster === void 0) {
|
|
173
|
+
return this.#asStatus(path, import_types.Status.UnsupportedCluster);
|
|
174
|
+
}
|
|
175
|
+
if (event === void 0 || !cluster.type.events[event.id]) {
|
|
176
|
+
return this.#asStatus(path, import_types.Status.UnsupportedEvent);
|
|
177
|
+
}
|
|
178
|
+
if (this.#currentEndpoint !== endpoint) {
|
|
179
|
+
this.#currentEndpoint = endpoint;
|
|
180
|
+
this.#currentCluster = cluster;
|
|
181
|
+
} else if (this.#currentCluster !== cluster) {
|
|
182
|
+
this.#currentCluster = cluster;
|
|
183
|
+
}
|
|
184
|
+
this.#registerEventPath(path);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Starts new chunk or adds to current chunk all values from {@link endpoint} selected by {@link path}.
|
|
188
|
+
*
|
|
189
|
+
* Emits previous chunk if it exists and was not for this endpoint. This means that our chunk size is one endpoint
|
|
190
|
+
* worth of data, except for the initial error chunk if there are path errors.
|
|
191
|
+
*
|
|
192
|
+
* TODO - skip endpoints for which subject is unauthorized
|
|
193
|
+
*/
|
|
194
|
+
#addEndpointForWildcard(endpoint, path) {
|
|
195
|
+
if (this.#currentEndpoint !== endpoint) {
|
|
196
|
+
this.#currentEndpoint = endpoint;
|
|
197
|
+
this.#currentCluster = void 0;
|
|
198
|
+
}
|
|
199
|
+
const { clusterId } = path;
|
|
200
|
+
if (clusterId === void 0) {
|
|
201
|
+
for (const cluster of endpoint) {
|
|
202
|
+
this.#addClusterForWildcard(cluster, { ...path, endpointId: endpoint.id });
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
const cluster = endpoint[clusterId];
|
|
206
|
+
if (cluster !== void 0) {
|
|
207
|
+
this.#addClusterForWildcard(cluster, { ...path, endpointId: endpoint.id });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Read values from a specific {@link cluster} for a wildcard path.
|
|
213
|
+
*
|
|
214
|
+
* Depends on state initialized by {@link #addEndpointForWildcard}.
|
|
215
|
+
*
|
|
216
|
+
* TODO - skip endpoints for which subject is unauthorized as optimization
|
|
217
|
+
*/
|
|
218
|
+
#addClusterForWildcard(cluster, path) {
|
|
219
|
+
if (this.#currentCluster !== cluster) {
|
|
220
|
+
this.#currentCluster = cluster;
|
|
221
|
+
}
|
|
222
|
+
const { eventId } = path;
|
|
223
|
+
if (eventId === void 0) {
|
|
224
|
+
for (const event of cluster.type.events) {
|
|
225
|
+
this.#addEventForWildcard(event, {
|
|
226
|
+
...path,
|
|
227
|
+
clusterId: cluster.type.id
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
} else {
|
|
231
|
+
const event = cluster.type.events[eventId];
|
|
232
|
+
if (event !== void 0) {
|
|
233
|
+
this.#addEventForWildcard(event, {
|
|
234
|
+
...path,
|
|
235
|
+
clusterId: cluster.type.id
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Read values from a specific {@link event} for a wildcard path.
|
|
242
|
+
*
|
|
243
|
+
* Depends on state initialized by {@link #addClusterForWildcard}.
|
|
244
|
+
*/
|
|
245
|
+
#addEventForWildcard(event, path) {
|
|
246
|
+
if (!this.#guardedCurrentCluster.type.events[event.id]) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (this.session.authorityAt(event.limits.readLevel, this.#guardedCurrentCluster.location) !== import_AccessControl.AccessControl.Authority.Granted) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
this.#registerEventPath({ ...path, eventId: event.id });
|
|
253
|
+
}
|
|
254
|
+
#createEventKey(path) {
|
|
255
|
+
const { endpointId, clusterId, eventId } = path;
|
|
256
|
+
return `${endpointId}:${clusterId}:${eventId}`;
|
|
257
|
+
}
|
|
258
|
+
#registerEventPath(path) {
|
|
259
|
+
const { eventId } = path;
|
|
260
|
+
this.#allowedEventPaths.set(
|
|
261
|
+
this.#createEventKey({
|
|
262
|
+
...path,
|
|
263
|
+
endpointId: this.#guardedCurrentEndpoint.id,
|
|
264
|
+
clusterId: this.#guardedCurrentCluster.type.id,
|
|
265
|
+
eventId
|
|
266
|
+
}),
|
|
267
|
+
this.#guardedCurrentCluster.type.events[eventId].tlv
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
async *#readAllowedEvents() {
|
|
271
|
+
for await (const event of this.node.eventHandler.get(this.#eventMinVersion)) {
|
|
272
|
+
const tlv = this.#allowedEventPaths.get(this.#createEventKey(event));
|
|
273
|
+
if (tlv === void 0) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
if (this.#filteredForFabricIndex !== void 0) {
|
|
277
|
+
const { payload } = event;
|
|
278
|
+
if (!(0, import_general.isObject)(payload)) {
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
const { fabricIndex } = payload;
|
|
282
|
+
if (fabricIndex !== void 0 && fabricIndex !== this.#filteredForFabricIndex) {
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
yield this.#asValue(event, tlv);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Add a status value.
|
|
291
|
+
*/
|
|
292
|
+
#asStatus(path, status) {
|
|
293
|
+
logger.debug(`Error reading event ${this.node.inspectPath(path)}: Status=${import_types.StatusCode[status]}(${status})`);
|
|
294
|
+
const report = {
|
|
295
|
+
kind: "event-status",
|
|
296
|
+
path,
|
|
297
|
+
status
|
|
298
|
+
};
|
|
299
|
+
return report;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Add event values as separate entries to the result.
|
|
303
|
+
*/
|
|
304
|
+
#asValue(event, tlv) {
|
|
305
|
+
const { number, epochTimestamp: timestamp, priority, payload: value, endpointId, clusterId, eventId } = event;
|
|
306
|
+
const report = {
|
|
307
|
+
kind: "event-value",
|
|
308
|
+
path: { endpointId, clusterId, eventId },
|
|
309
|
+
number,
|
|
310
|
+
priority,
|
|
311
|
+
timestamp,
|
|
312
|
+
value,
|
|
313
|
+
tlv
|
|
314
|
+
};
|
|
315
|
+
return report;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=EventResponse.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/action/server/EventResponse.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["endpoint"]
|
|
6
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ServerInteraction.d.ts","sourceRoot":"","sources":["../../../../src/action/server/ServerInteraction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,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,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,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,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"ServerInteraction.d.ts","sourceRoot":"","sources":["../../../../src/action/server/ServerInteraction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,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,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,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,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAOhE;;;;;;;;;GASG;AACH,qBAAa,iBAAiB,CAAC,QAAQ,SAAS,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CACzF,YAAW,YAAY,CAAC,QAAQ,CAAC;;gBAIrB,IAAI,EAAE,YAAY;IAIvB,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,GAAG,UAAU;IAqBzD,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,eAAe;IAKpE,KAAK,CAAC,CAAC,SAAS,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC;IAKxE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC;CAI9E"}
|
|
@@ -22,6 +22,7 @@ __export(ServerInteraction_exports, {
|
|
|
22
22
|
});
|
|
23
23
|
module.exports = __toCommonJS(ServerInteraction_exports);
|
|
24
24
|
var import_Read = require("#action/request/Read.js");
|
|
25
|
+
var import_EventResponse = require("#action/server/EventResponse.js");
|
|
25
26
|
var import_general = require("#general");
|
|
26
27
|
var import_AttributeResponse = require("./AttributeResponse.js");
|
|
27
28
|
/**
|
|
@@ -29,15 +30,27 @@ var import_AttributeResponse = require("./AttributeResponse.js");
|
|
|
29
30
|
* Copyright 2022-2025 Project CHIP Authors
|
|
30
31
|
* SPDX-License-Identifier: Apache-2.0
|
|
31
32
|
*/
|
|
33
|
+
const logger = import_general.Logger.get("ServerInteraction");
|
|
32
34
|
class ServerInteraction {
|
|
33
35
|
#node;
|
|
34
36
|
constructor(node) {
|
|
35
37
|
this.#node = node;
|
|
36
38
|
}
|
|
37
39
|
async *read(request, session) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
let readInfo = "";
|
|
41
|
+
if (import_Read.Read.containsAttribute(request)) {
|
|
42
|
+
const attributeReader = new import_AttributeResponse.AttributeResponse(this.#node, session);
|
|
43
|
+
yield* attributeReader.process(request);
|
|
44
|
+
const { existent, status, value } = attributeReader.counts;
|
|
45
|
+
readInfo = `${existent} matching attributes (${status ? `${status} status, ` : ""}${value ? `${value} values` : ""})`;
|
|
40
46
|
}
|
|
47
|
+
if (import_Read.Read.containsEvent(request)) {
|
|
48
|
+
const eventReader = new import_EventResponse.EventResponse(this.#node, session);
|
|
49
|
+
yield* eventReader.process(request);
|
|
50
|
+
const { existent, status, value } = eventReader.counts;
|
|
51
|
+
readInfo += `${readInfo.length > 0 ? ", " : ""}${existent} matching events (${status ? `${status} status, ` : ""}${value ? `${value} values` : ""})`;
|
|
52
|
+
}
|
|
53
|
+
logger.debug(`Read request resolved to ${readInfo}`);
|
|
41
54
|
}
|
|
42
55
|
subscribe(_request, _session) {
|
|
43
56
|
throw new import_general.NotImplementedError();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/action/server/ServerInteraction.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,kBAAqB;AAQrB,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,kBAAqB;AAQrB,2BAA8B;AAC9B,qBAA4C;AAC5C,+BAAkC;AAnBlC;AAAA;AAAA;AAAA;AAAA;AAqBA,MAAM,SAAS,sBAAO,IAAI,mBAAmB;AAYtC,MAAM,kBAEb;AAAA,EACI;AAAA,EAEA,YAAY,MAAoB;AAC5B,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,OAAO,KAAK,SAAe,SAA+B;AAGtD,QAAI,WAAW;AACf,QAAI,iBAAK,kBAAkB,OAAO,GAAG;AACjC,YAAM,kBAAkB,IAAI,2CAAkB,KAAK,OAAO,OAAO;AACjE,aAAO,gBAAgB,QAAQ,OAAO;AAEtC,YAAM,EAAE,UAAU,QAAQ,MAAM,IAAI,gBAAgB;AACpD,iBAAW,GAAG,QAAQ,yBAAyB,SAAS,GAAG,MAAM,cAAc,EAAE,GAAG,QAAQ,GAAG,KAAK,YAAY,EAAE;AAAA,IACtH;AAEA,QAAI,iBAAK,cAAc,OAAO,GAAG;AAC7B,YAAM,cAAc,IAAI,mCAAc,KAAK,OAAO,OAAO;AACzD,aAAO,YAAY,QAAQ,OAAO;AAClC,YAAM,EAAE,UAAU,QAAQ,MAAM,IAAI,YAAY;AAChD,kBAAY,GAAG,SAAS,SAAS,IAAI,OAAO,EAAE,GAAG,QAAQ,qBAAqB,SAAS,GAAG,MAAM,cAAc,EAAE,GAAG,QAAQ,GAAG,KAAK,YAAY,EAAE;AAAA,IACrJ;AACA,WAAO,MAAM,4BAA4B,QAAQ,EAAE;AAAA,EACvD;AAAA,EAEA,UAAU,UAAqB,UAAsC;AAEjE,UAAM,IAAI,mCAAoB;AAAA,EAClC;AAAA,EAEA,MAAuB,UAAa,UAAqC;AAErE,UAAM,IAAI,mCAAoB;AAAA,EAClC;AAAA,EAEA,OAAyB,UAAa,UAAsC;AAExE,UAAM,IAAI,mCAAoB;AAAA,EAClC;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -5,5 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export * from "./AccessControl.js";
|
|
7
7
|
export * from "./AttributeResponse.js";
|
|
8
|
+
export * from "./AttributeSubscriptionResponse.js";
|
|
9
|
+
export * from "./DataResponse.js";
|
|
10
|
+
export * from "./EventResponse.js";
|
|
8
11
|
export * from "./ServerInteraction.js";
|
|
9
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/action/server/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/action/server/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
|
|
@@ -17,6 +17,9 @@ var server_exports = {};
|
|
|
17
17
|
module.exports = __toCommonJS(server_exports);
|
|
18
18
|
__reExport(server_exports, require("./AccessControl.js"), module.exports);
|
|
19
19
|
__reExport(server_exports, require("./AttributeResponse.js"), module.exports);
|
|
20
|
+
__reExport(server_exports, require("./AttributeSubscriptionResponse.js"), module.exports);
|
|
21
|
+
__reExport(server_exports, require("./DataResponse.js"), module.exports);
|
|
22
|
+
__reExport(server_exports, require("./EventResponse.js"), module.exports);
|
|
20
23
|
__reExport(server_exports, require("./ServerInteraction.js"), module.exports);
|
|
21
24
|
/**
|
|
22
25
|
* @license
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/action/server/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,2BAAc,+BANd;AAOA,2BAAc,mCAPd;AAQA,2BAAc,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;AAMA,2BAAc,+BANd;AAOA,2BAAc,mCAPd;AAQA,2BAAc,+CARd;AASA,2BAAc,8BATd;AAUA,2BAAc,+BAVd;AAWA,2BAAc,mCAXd;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { Construction, MaybePromise } from "#general";
|
|
7
|
-
import { FabricIndex, TlvEventFilter, TlvEventPath, TypeFromSchema } from "#types";
|
|
6
|
+
import { Construction, MaybePromise, Observable } from "#general";
|
|
7
|
+
import { EventNumber, FabricIndex, TlvEventFilter, TlvEventPath, TypeFromSchema } from "#types";
|
|
8
8
|
import { EventStore } from "./EventStore.js";
|
|
9
9
|
import { NumberedOccurrence, Occurrence } from "./Occurrence.js";
|
|
10
10
|
export interface OccurrenceManagerContext {
|
|
@@ -27,8 +27,26 @@ export declare class OccurrenceManager {
|
|
|
27
27
|
get construction(): Construction<OccurrenceManager>;
|
|
28
28
|
static create(context: OccurrenceManagerContext): Promise<OccurrenceManager>;
|
|
29
29
|
constructor({ store, bufferConfig }: OccurrenceManagerContext);
|
|
30
|
+
get added(): Observable<[occurrence: NumberedOccurrence], void>;
|
|
30
31
|
clear(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Query the event store for events matching the given path and filters.
|
|
34
|
+
* @deprecated
|
|
35
|
+
*/
|
|
31
36
|
query(eventPath: TypeFromSchema<typeof TlvEventPath>, filters?: TypeFromSchema<typeof TlvEventFilter>[], filterForFabricIndex?: FabricIndex): MaybePromise<NumberedOccurrence[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Return an iterator over all occurrences in the store that are bigger or equal to the minimum eventNumber,
|
|
39
|
+
* if provided.
|
|
40
|
+
*/
|
|
41
|
+
get(eventMin?: EventNumber): AsyncGenerator<{
|
|
42
|
+
number: EventNumber;
|
|
43
|
+
endpointId: import("#types").EndpointNumber;
|
|
44
|
+
clusterId: import("#types").ClusterId;
|
|
45
|
+
eventId: import("#types").EventId;
|
|
46
|
+
epochTimestamp: number;
|
|
47
|
+
priority: import("#types").EventPriority;
|
|
48
|
+
payload: unknown;
|
|
49
|
+
}, void, unknown>;
|
|
32
50
|
close(): MaybePromise<void>;
|
|
33
51
|
add(occurrence: Occurrence): MaybePromise<NumberedOccurrence>;
|
|
34
52
|
}
|
|
@@ -48,15 +66,6 @@ export declare namespace OccurrenceManager {
|
|
|
48
66
|
* {@link minimumEventAllowance}.
|
|
49
67
|
*/
|
|
50
68
|
maxEventAllowance: number;
|
|
51
|
-
/**
|
|
52
|
-
* Minimum allowances by priority. This ensures a minimum number of events for each priority avoid LRU
|
|
53
|
-
* harvesting.
|
|
54
|
-
*/
|
|
55
|
-
minPriorityEventAllowance: {
|
|
56
|
-
critical: number;
|
|
57
|
-
info: number;
|
|
58
|
-
debug: number;
|
|
59
|
-
};
|
|
60
69
|
}
|
|
61
70
|
const DefaultBufferConfig: BufferConfig;
|
|
62
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OccurrenceManager.d.ts","sourceRoot":"","sources":["../../../src/events/OccurrenceManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,YAAY,
|
|
1
|
+
{"version":3,"file":"OccurrenceManager.d.ts","sourceRoot":"","sources":["../../../src/events/OccurrenceManager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,YAAY,EAOZ,YAAY,EACZ,UAAU,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAoB,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAClH,OAAO,EAAE,UAAU,EAAqB,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIjE,MAAM,WAAW,wBAAwB;IACrC,KAAK,EAAE,UAAU,CAAC;IAElB,YAAY,CAAC,EAAE,iBAAiB,CAAC,YAAY,CAAC;CACjD;AAED;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;;IAc1B,IAAI,YAAY,oCAEf;WAEY,MAAM,CAAC,OAAO,EAAE,wBAAwB;gBAIzC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,wBAAwB;IAgC7D,IAAI,KAAK,uDAER;IAEK,KAAK;IA4CX;;;OAGG;IACH,KAAK,CACD,SAAS,EAAE,cAAc,CAAC,OAAO,YAAY,CAAC,EAC9C,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,cAAc,CAAC,EAAE,EACjD,oBAAoB,CAAC,EAAE,WAAW,GACnC,YAAY,CAAC,kBAAkB,EAAE,CAAC;IAmFrC;;;OAGG;IACI,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW;;;;;;;;;IA8BjC,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;IAI3B,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,YAAY,CAAC,kBAAkB,CAAC;CAqDhE;AAED,yBAAiB,iBAAiB,CAAC;IAC/B;;OAEG;IACH,UAAiB,YAAY;QACzB;;WAEG;QACH,iBAAiB,EAAE,MAAM,CAAC;QAE1B;;;;;WAKG;QACH,iBAAiB,EAAE,MAAM,CAAC;KAC7B;IAEM,MAAM,mBAAmB,EAAE,YAGjC,CAAC;CACL"}
|