@matter/node 0.16.0-alpha.0-20251110-c4c70a41b → 0.16.0-alpha.0-20251111-11cc8c3bd
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/behavior/internal/BehaviorBacking.d.ts +2 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js +11 -3
- package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts +2 -0
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.js +4 -0
- package/dist/cjs/behavior/internal/ClientBehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -0
- package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.js +5 -0
- package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/cjs/endpoint/properties/Behaviors.d.ts +12 -2
- package/dist/cjs/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/Behaviors.js +44 -10
- package/dist/cjs/endpoint/properties/Behaviors.js.map +2 -2
- package/dist/cjs/node/client/ClientStructure.d.ts +31 -1
- package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientStructure.js +257 -81
- package/dist/cjs/node/client/ClientStructure.js.map +1 -1
- package/dist/cjs/node/client/ClientStructureEvents.d.ts +5 -2
- package/dist/cjs/node/client/ClientStructureEvents.d.ts.map +1 -1
- package/dist/cjs/node/client/ClientStructureEvents.js +38 -2
- package/dist/cjs/node/client/ClientStructureEvents.js.map +1 -1
- package/dist/cjs/node/client/Peers.d.ts +3 -0
- package/dist/cjs/node/client/Peers.d.ts.map +1 -1
- package/dist/cjs/node/client/Peers.js +3 -0
- package/dist/cjs/node/client/Peers.js.map +1 -1
- package/dist/cjs/node/server/ServerEndpointInitializer.js +1 -1
- package/dist/cjs/node/server/ServerEndpointInitializer.js.map +1 -1
- package/dist/cjs/storage/EndpointStore.d.ts +5 -1
- package/dist/cjs/storage/EndpointStore.d.ts.map +1 -1
- package/dist/cjs/storage/EndpointStore.js +7 -1
- package/dist/cjs/storage/EndpointStore.js.map +1 -1
- package/dist/cjs/storage/client/ClientEndpointStore.d.ts +2 -1
- package/dist/cjs/storage/client/ClientEndpointStore.d.ts.map +1 -1
- package/dist/cjs/storage/client/DatasourceCache.d.ts +14 -3
- package/dist/cjs/storage/client/DatasourceCache.d.ts.map +1 -1
- package/dist/cjs/storage/client/DatasourceCache.js +10 -0
- package/dist/cjs/storage/client/DatasourceCache.js.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts +2 -1
- package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.js +11 -3
- package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts +2 -0
- package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
- package/dist/esm/behavior/internal/ClientBehaviorBacking.js +4 -0
- package/dist/esm/behavior/internal/ClientBehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -0
- package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.js +5 -0
- package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/esm/endpoint/properties/Behaviors.d.ts +12 -2
- package/dist/esm/endpoint/properties/Behaviors.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/Behaviors.js +44 -10
- package/dist/esm/endpoint/properties/Behaviors.js.map +2 -2
- package/dist/esm/node/client/ClientStructure.d.ts +31 -1
- package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
- package/dist/esm/node/client/ClientStructure.js +258 -82
- package/dist/esm/node/client/ClientStructure.js.map +1 -1
- package/dist/esm/node/client/ClientStructureEvents.d.ts +5 -2
- package/dist/esm/node/client/ClientStructureEvents.d.ts.map +1 -1
- package/dist/esm/node/client/ClientStructureEvents.js +39 -3
- package/dist/esm/node/client/ClientStructureEvents.js.map +1 -1
- package/dist/esm/node/client/Peers.d.ts +3 -0
- package/dist/esm/node/client/Peers.d.ts.map +1 -1
- package/dist/esm/node/client/Peers.js +3 -0
- package/dist/esm/node/client/Peers.js.map +1 -1
- package/dist/esm/node/server/ServerEndpointInitializer.js +1 -1
- package/dist/esm/node/server/ServerEndpointInitializer.js.map +1 -1
- package/dist/esm/storage/EndpointStore.d.ts +5 -1
- package/dist/esm/storage/EndpointStore.d.ts.map +1 -1
- package/dist/esm/storage/EndpointStore.js +7 -1
- package/dist/esm/storage/EndpointStore.js.map +1 -1
- package/dist/esm/storage/client/ClientEndpointStore.d.ts +2 -1
- package/dist/esm/storage/client/ClientEndpointStore.d.ts.map +1 -1
- package/dist/esm/storage/client/DatasourceCache.d.ts +14 -3
- package/dist/esm/storage/client/DatasourceCache.d.ts.map +1 -1
- package/dist/esm/storage/client/DatasourceCache.js +10 -0
- package/dist/esm/storage/client/DatasourceCache.js.map +1 -1
- package/package.json +7 -7
- package/src/behavior/internal/BehaviorBacking.ts +16 -3
- package/src/behavior/internal/ClientBehaviorBacking.ts +10 -1
- package/src/behavior/state/managed/Datasource.ts +13 -0
- package/src/endpoint/properties/Behaviors.ts +53 -12
- package/src/node/client/ClientStructure.ts +352 -91
- package/src/node/client/ClientStructureEvents.ts +55 -7
- package/src/node/client/Peers.ts +4 -0
- package/src/node/server/ServerEndpointInitializer.ts +1 -1
- package/src/storage/EndpointStore.ts +8 -1
- package/src/storage/client/DatasourceCache.ts +28 -4
|
@@ -9,22 +9,27 @@ import { ClusterBehavior } from "#behavior/cluster/ClusterBehavior.js";
|
|
|
9
9
|
import { DescriptorClient } from "#behaviors/descriptor";
|
|
10
10
|
import { Endpoint } from "#endpoint/Endpoint.js";
|
|
11
11
|
import { EndpointType } from "#endpoint/type/EndpointType.js";
|
|
12
|
-
import { Environment, Environmental, Observable } from "#general";
|
|
12
|
+
import { Environment, Environmental, Logger, Observable } from "#general";
|
|
13
13
|
import { DeviceTypeId } from "#types";
|
|
14
14
|
|
|
15
|
+
const logger = Logger.get("ClientStructureEvents");
|
|
16
|
+
|
|
15
17
|
/**
|
|
16
18
|
* An environmental service that manages events endpoint and behavior types.
|
|
17
19
|
*/
|
|
18
20
|
export class ClientStructureEvents {
|
|
19
|
-
#endpointEvents?: Map<DeviceTypeId, Observable<[Endpoint]>>;
|
|
21
|
+
#endpointEvents?: Map<DeviceTypeId, Observable<[endpoint: Endpoint]>>;
|
|
20
22
|
#clusterEvents?: Map<
|
|
21
23
|
string,
|
|
22
24
|
Array<{
|
|
23
25
|
requestedType: Behavior.Type;
|
|
24
|
-
event: Observable<[Endpoint,
|
|
26
|
+
event: Observable<[endpoint: Endpoint, type: ClusterBehavior.Type]>;
|
|
25
27
|
}>
|
|
26
28
|
>;
|
|
27
29
|
|
|
30
|
+
#clusterReplaced?: Observable<[endpoint: Endpoint, type: ClusterBehavior.Type]>;
|
|
31
|
+
#clusterDeleted?: Observable<[endpoint: Endpoint, type: ClusterBehavior.Type]>;
|
|
32
|
+
|
|
28
33
|
static [Environmental.create](env: Environment) {
|
|
29
34
|
const instance = new ClientStructureEvents();
|
|
30
35
|
env.set(ClientStructureEvents, instance);
|
|
@@ -38,7 +43,7 @@ export class ClientStructureEvents {
|
|
|
38
43
|
|
|
39
44
|
let event = this.#endpointEvents.get(type.deviceType);
|
|
40
45
|
if (event === undefined) {
|
|
41
|
-
this.#endpointEvents.set(type.deviceType, (event =
|
|
46
|
+
this.#endpointEvents.set(type.deviceType, (event = this.#createEvent("endpointInstalled")));
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
return event as Observable<[endpoint: Endpoint<T>]>;
|
|
@@ -60,12 +65,26 @@ export class ClientStructureEvents {
|
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
67
|
|
|
63
|
-
const event =
|
|
68
|
+
const event = this.#createEvent("clusterInstalled");
|
|
64
69
|
events.push({ requestedType: type, event });
|
|
65
70
|
|
|
66
71
|
return event;
|
|
67
72
|
}
|
|
68
73
|
|
|
74
|
+
get clusterReplaced() {
|
|
75
|
+
if (this.#clusterReplaced) {
|
|
76
|
+
return this.#clusterReplaced;
|
|
77
|
+
}
|
|
78
|
+
return (this.#clusterReplaced = this.#createEvent("clusterReplaced"));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get clusterDeleted() {
|
|
82
|
+
if (this.#clusterDeleted) {
|
|
83
|
+
return this.#clusterDeleted;
|
|
84
|
+
}
|
|
85
|
+
return (this.#clusterDeleted = this.#createEvent("clusterDeleted"));
|
|
86
|
+
}
|
|
87
|
+
|
|
69
88
|
emitEndpoint(endpoint: Endpoint) {
|
|
70
89
|
if (this.#endpointEvents && endpoint.behaviors.supported.descriptor) {
|
|
71
90
|
const deviceTypes = endpoint.stateOf(DescriptorClient).deviceTypeList;
|
|
@@ -75,7 +94,11 @@ export class ClientStructureEvents {
|
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
for (const type of Object.values(endpoint.behaviors.supported)) {
|
|
78
|
-
|
|
97
|
+
if (!("cluster" in type)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
this.emitCluster(endpoint, type as ClusterBehavior.Type);
|
|
79
102
|
}
|
|
80
103
|
|
|
81
104
|
for (const part of endpoint.parts) {
|
|
@@ -83,15 +106,40 @@ export class ClientStructureEvents {
|
|
|
83
106
|
}
|
|
84
107
|
}
|
|
85
108
|
|
|
86
|
-
emitCluster(endpoint: Endpoint, type:
|
|
109
|
+
emitCluster(endpoint: Endpoint, type: ClusterBehavior.Type) {
|
|
87
110
|
const events = this.#clusterEvents?.get(type.id);
|
|
88
111
|
if (!events) {
|
|
89
112
|
return;
|
|
90
113
|
}
|
|
114
|
+
|
|
91
115
|
for (const { requestedType, event } of events) {
|
|
92
116
|
if (type.supports(requestedType)) {
|
|
93
117
|
event.emit(endpoint, type);
|
|
94
118
|
}
|
|
95
119
|
}
|
|
96
120
|
}
|
|
121
|
+
|
|
122
|
+
emitClusterReplaced(endpoint: Endpoint, type: ClusterBehavior.Type) {
|
|
123
|
+
if (!this.#clusterReplaced) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
this.#clusterReplaced.emit(endpoint, type);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
emitClusterDeleted(endpoint: Endpoint, type: ClusterBehavior.Type) {
|
|
131
|
+
if (!this.#clusterDeleted) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
this.#clusterDeleted.emit(endpoint, type);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
#createEvent(kind: string): Observable<any, void> {
|
|
139
|
+
return Observable(unhandledError);
|
|
140
|
+
|
|
141
|
+
function unhandledError(e: unknown) {
|
|
142
|
+
logger.error(`Unhandled error in client structure ${kind} event handler:`, e);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
97
145
|
}
|
package/src/node/client/Peers.ts
CHANGED
|
@@ -131,6 +131,10 @@ export class Peers extends EndpointContainer<ClientNode> {
|
|
|
131
131
|
return this.owner.env.get(ClientStructureEvents).clusterInstalled(type);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Emits when fixed attributes
|
|
136
|
+
*/
|
|
137
|
+
|
|
134
138
|
override get(id: number | string | PeerAddress) {
|
|
135
139
|
if (typeof id !== "string" && typeof id !== "number") {
|
|
136
140
|
const address = PeerAddress(id);
|
|
@@ -32,7 +32,7 @@ export class ServerEndpointInitializer extends EndpointInitializer {
|
|
|
32
32
|
|
|
33
33
|
// DescriptorServer is mandatory but we don't include it in generated device types
|
|
34
34
|
if (!(DescriptorServer.id in endpoint.behaviors.supported)) {
|
|
35
|
-
endpoint.behaviors.inject(DescriptorServer);
|
|
35
|
+
endpoint.behaviors.inject(DescriptorServer, undefined, false);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -115,12 +115,19 @@ export class EndpointStore {
|
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
/**
|
|
118
|
-
* Remove all persisted information for the {@link Endpoint}
|
|
118
|
+
* Remove all persisted information for the {@link Endpoint}.
|
|
119
119
|
*/
|
|
120
120
|
erase() {
|
|
121
121
|
return this.storage.clearAll();
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
/**
|
|
125
|
+
* Remove all persisted information for a single behavior on the {@link Endpoint}.
|
|
126
|
+
*/
|
|
127
|
+
eraseStoreForBehavior(behaviorId: string) {
|
|
128
|
+
return this.storage.createContext(behaviorId).clearAll();
|
|
129
|
+
}
|
|
130
|
+
|
|
124
131
|
protected get storage() {
|
|
125
132
|
return this.#storage;
|
|
126
133
|
}
|
|
@@ -5,21 +5,33 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { Datasource } from "#behavior/state/managed/Datasource.js";
|
|
8
|
-
import { InternalError, Transaction } from "#general";
|
|
8
|
+
import { InternalError, MaybePromise, Transaction } from "#general";
|
|
9
9
|
import { Val } from "#protocol";
|
|
10
10
|
import type { ClientEndpointStore } from "./ClientEndpointStore.js";
|
|
11
11
|
import type { RemoteWriteParticipant } from "./RemoteWriteParticipant.js";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* The default implementation of {@link Datasource.ExternallyMutableStore}.
|
|
15
15
|
*
|
|
16
|
-
* This implements storage for attribute values for a single cluster loaded from
|
|
16
|
+
* This implements storage for attribute values for a single cluster loaded from peers.
|
|
17
17
|
*/
|
|
18
|
+
export interface DatasourceCache extends Datasource.ExternallyMutableStore {
|
|
19
|
+
/**
|
|
20
|
+
* Reset the cache to "uninitialized" state by reclaiming {@link initialValues} from an active datasource.
|
|
21
|
+
*/
|
|
22
|
+
reclaimValues(): void;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Erase values just for this datasource.
|
|
26
|
+
*/
|
|
27
|
+
erase(): MaybePromise<void>;
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
export function DatasourceCache(
|
|
19
31
|
store: ClientEndpointStore,
|
|
20
32
|
behaviorId: string,
|
|
21
33
|
initialValues: Val.Struct | undefined,
|
|
22
|
-
):
|
|
34
|
+
): DatasourceCache {
|
|
23
35
|
let version = initialValues?.[DatasourceCache.VERSION_KEY] as number;
|
|
24
36
|
if (typeof version !== "number") {
|
|
25
37
|
version = Datasource.UNKNOWN_VERSION;
|
|
@@ -51,6 +63,14 @@ export function DatasourceCache(
|
|
|
51
63
|
},
|
|
52
64
|
|
|
53
65
|
externalChangeListener: undefined,
|
|
66
|
+
releaseValues: undefined,
|
|
67
|
+
|
|
68
|
+
reclaimValues() {
|
|
69
|
+
if (this.releaseValues) {
|
|
70
|
+
this.initialValues = this.releaseValues();
|
|
71
|
+
this.releaseValues = undefined;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
54
74
|
|
|
55
75
|
get version() {
|
|
56
76
|
return version;
|
|
@@ -59,6 +79,10 @@ export function DatasourceCache(
|
|
|
59
79
|
set version(_version: number) {
|
|
60
80
|
throw new InternalError("Datasource version must be set via externalSet");
|
|
61
81
|
},
|
|
82
|
+
|
|
83
|
+
async erase() {
|
|
84
|
+
await store.eraseStoreForBehavior(behaviorId);
|
|
85
|
+
},
|
|
62
86
|
};
|
|
63
87
|
}
|
|
64
88
|
|