@matter/node 0.15.2-alpha.0-20250717-3607eeac6 → 0.15.2-alpha.0-20250718-7e661c331

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.
Files changed (170) hide show
  1. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts +2 -2
  2. package/dist/cjs/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  3. package/dist/cjs/behavior/internal/BehaviorBacking.js +6 -1
  4. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  5. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts +1 -6
  6. package/dist/cjs/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  7. package/dist/cjs/behavior/internal/ClientBehaviorBacking.js +0 -5
  8. package/dist/cjs/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  9. package/dist/cjs/behavior/internal/ServerBehaviorBacking.d.ts +0 -3
  10. package/dist/cjs/behavior/internal/ServerBehaviorBacking.d.ts.map +1 -1
  11. package/dist/cjs/behavior/internal/ServerBehaviorBacking.js +0 -15
  12. package/dist/cjs/behavior/internal/ServerBehaviorBacking.js.map +1 -1
  13. package/dist/cjs/behavior/state/managed/Datasource.js +7 -3
  14. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  15. package/dist/cjs/behavior/supervision/RootSupervisor.d.ts +2 -2
  16. package/dist/cjs/behavior/supervision/RootSupervisor.d.ts.map +1 -1
  17. package/dist/cjs/behavior/supervision/RootSupervisor.js +12 -10
  18. package/dist/cjs/behavior/supervision/RootSupervisor.js.map +1 -1
  19. package/dist/cjs/node/ClientNode.d.ts.map +1 -1
  20. package/dist/cjs/node/ClientNode.js +2 -2
  21. package/dist/cjs/node/ClientNode.js.map +1 -1
  22. package/dist/cjs/node/ServerNode.js +2 -2
  23. package/dist/cjs/node/ServerNode.js.map +1 -1
  24. package/dist/cjs/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  25. package/dist/cjs/node/client/ClientEndpointInitializer.js +5 -4
  26. package/dist/cjs/node/client/ClientEndpointInitializer.js.map +2 -2
  27. package/dist/cjs/node/client/ClientStructure.d.ts +14 -2
  28. package/dist/cjs/node/client/ClientStructure.d.ts.map +1 -1
  29. package/dist/cjs/node/client/ClientStructure.js +21 -3
  30. package/dist/cjs/node/client/ClientStructure.js.map +1 -1
  31. package/dist/cjs/node/server/ServerEndpointInitializer.d.ts.map +1 -1
  32. package/dist/cjs/node/server/ServerEndpointInitializer.js +2 -1
  33. package/dist/cjs/node/server/ServerEndpointInitializer.js.map +1 -1
  34. package/dist/cjs/node/server/ServerEnvironment.d.ts.map +1 -1
  35. package/dist/cjs/node/server/ServerEnvironment.js +0 -2
  36. package/dist/cjs/node/server/ServerEnvironment.js.map +1 -1
  37. package/dist/cjs/storage/EndpointStore.d.ts +4 -4
  38. package/dist/cjs/storage/EndpointStore.d.ts.map +1 -1
  39. package/dist/cjs/storage/EndpointStore.js +9 -7
  40. package/dist/cjs/storage/EndpointStore.js.map +1 -1
  41. package/dist/cjs/storage/client/ClientEndpointStore.d.ts +24 -0
  42. package/dist/cjs/storage/client/ClientEndpointStore.d.ts.map +1 -0
  43. package/dist/cjs/storage/client/ClientEndpointStore.js +67 -0
  44. package/dist/cjs/storage/client/ClientEndpointStore.js.map +6 -0
  45. package/dist/cjs/storage/client/ClientNodeStore.d.ts +13 -3
  46. package/dist/cjs/storage/client/ClientNodeStore.d.ts.map +1 -1
  47. package/dist/cjs/storage/client/ClientNodeStore.js +24 -3
  48. package/dist/cjs/storage/client/ClientNodeStore.js.map +1 -1
  49. package/dist/cjs/storage/client/ClientNodeStores.d.ts +2 -2
  50. package/dist/cjs/storage/client/ClientNodeStores.d.ts.map +1 -1
  51. package/dist/cjs/storage/client/ClientNodeStores.js +1 -1
  52. package/dist/cjs/storage/client/ClientNodeStores.js.map +1 -1
  53. package/dist/cjs/storage/client/DatasourceCache.d.ts +2 -2
  54. package/dist/cjs/storage/client/DatasourceCache.d.ts.map +1 -1
  55. package/dist/cjs/storage/client/DatasourceCache.js +5 -3
  56. package/dist/cjs/storage/client/DatasourceCache.js.map +1 -1
  57. package/dist/cjs/storage/client/RemoteWriteParticipant.d.ts +30 -0
  58. package/dist/cjs/storage/client/RemoteWriteParticipant.d.ts.map +1 -0
  59. package/dist/cjs/storage/client/RemoteWriteParticipant.js +66 -0
  60. package/dist/cjs/storage/client/RemoteWriteParticipant.js.map +6 -0
  61. package/dist/cjs/storage/client/RemoteWriter.d.ts +29 -0
  62. package/dist/cjs/storage/client/RemoteWriter.d.ts.map +1 -0
  63. package/dist/cjs/storage/client/RemoteWriter.js +73 -0
  64. package/dist/cjs/storage/client/RemoteWriter.js.map +6 -0
  65. package/dist/cjs/storage/server/DatasourceStore.d.ts +0 -3
  66. package/dist/cjs/storage/server/DatasourceStore.d.ts.map +1 -1
  67. package/dist/cjs/storage/server/DatasourceStore.js.map +1 -1
  68. package/dist/cjs/storage/server/ServerEndpointStore.d.ts +4 -0
  69. package/dist/cjs/storage/server/ServerEndpointStore.d.ts.map +1 -1
  70. package/dist/cjs/storage/server/ServerEndpointStore.js +8 -0
  71. package/dist/cjs/storage/server/ServerEndpointStore.js.map +1 -1
  72. package/dist/cjs/storage/server/ServerNodeStore.d.ts +3 -2
  73. package/dist/cjs/storage/server/ServerNodeStore.d.ts.map +1 -1
  74. package/dist/cjs/storage/server/ServerNodeStore.js.map +1 -1
  75. package/dist/esm/behavior/internal/BehaviorBacking.d.ts +2 -2
  76. package/dist/esm/behavior/internal/BehaviorBacking.d.ts.map +1 -1
  77. package/dist/esm/behavior/internal/BehaviorBacking.js +6 -1
  78. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  79. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts +1 -6
  80. package/dist/esm/behavior/internal/ClientBehaviorBacking.d.ts.map +1 -1
  81. package/dist/esm/behavior/internal/ClientBehaviorBacking.js +0 -5
  82. package/dist/esm/behavior/internal/ClientBehaviorBacking.js.map +1 -1
  83. package/dist/esm/behavior/internal/ServerBehaviorBacking.d.ts +0 -3
  84. package/dist/esm/behavior/internal/ServerBehaviorBacking.d.ts.map +1 -1
  85. package/dist/esm/behavior/internal/ServerBehaviorBacking.js +0 -15
  86. package/dist/esm/behavior/internal/ServerBehaviorBacking.js.map +1 -1
  87. package/dist/esm/behavior/state/managed/Datasource.js +7 -3
  88. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  89. package/dist/esm/behavior/supervision/RootSupervisor.d.ts +2 -2
  90. package/dist/esm/behavior/supervision/RootSupervisor.d.ts.map +1 -1
  91. package/dist/esm/behavior/supervision/RootSupervisor.js +12 -10
  92. package/dist/esm/behavior/supervision/RootSupervisor.js.map +1 -1
  93. package/dist/esm/node/ClientNode.d.ts.map +1 -1
  94. package/dist/esm/node/ClientNode.js +2 -2
  95. package/dist/esm/node/ClientNode.js.map +1 -1
  96. package/dist/esm/node/ServerNode.js +2 -2
  97. package/dist/esm/node/ServerNode.js.map +1 -1
  98. package/dist/esm/node/client/ClientEndpointInitializer.d.ts.map +1 -1
  99. package/dist/esm/node/client/ClientEndpointInitializer.js +5 -4
  100. package/dist/esm/node/client/ClientEndpointInitializer.js.map +2 -2
  101. package/dist/esm/node/client/ClientStructure.d.ts +14 -2
  102. package/dist/esm/node/client/ClientStructure.d.ts.map +1 -1
  103. package/dist/esm/node/client/ClientStructure.js +21 -3
  104. package/dist/esm/node/client/ClientStructure.js.map +1 -1
  105. package/dist/esm/node/server/ServerEndpointInitializer.d.ts.map +1 -1
  106. package/dist/esm/node/server/ServerEndpointInitializer.js +2 -1
  107. package/dist/esm/node/server/ServerEndpointInitializer.js.map +1 -1
  108. package/dist/esm/node/server/ServerEnvironment.d.ts.map +1 -1
  109. package/dist/esm/node/server/ServerEnvironment.js +0 -2
  110. package/dist/esm/node/server/ServerEnvironment.js.map +1 -1
  111. package/dist/esm/storage/EndpointStore.d.ts +4 -4
  112. package/dist/esm/storage/EndpointStore.d.ts.map +1 -1
  113. package/dist/esm/storage/EndpointStore.js +9 -7
  114. package/dist/esm/storage/EndpointStore.js.map +1 -1
  115. package/dist/esm/storage/client/ClientEndpointStore.d.ts +24 -0
  116. package/dist/esm/storage/client/ClientEndpointStore.d.ts.map +1 -0
  117. package/dist/esm/storage/client/ClientEndpointStore.js +47 -0
  118. package/dist/esm/storage/client/ClientEndpointStore.js.map +6 -0
  119. package/dist/esm/storage/client/ClientNodeStore.d.ts +13 -3
  120. package/dist/esm/storage/client/ClientNodeStore.d.ts.map +1 -1
  121. package/dist/esm/storage/client/ClientNodeStore.js +24 -3
  122. package/dist/esm/storage/client/ClientNodeStore.js.map +1 -1
  123. package/dist/esm/storage/client/ClientNodeStores.d.ts +2 -2
  124. package/dist/esm/storage/client/ClientNodeStores.d.ts.map +1 -1
  125. package/dist/esm/storage/client/ClientNodeStores.js +1 -1
  126. package/dist/esm/storage/client/ClientNodeStores.js.map +1 -1
  127. package/dist/esm/storage/client/DatasourceCache.d.ts +2 -2
  128. package/dist/esm/storage/client/DatasourceCache.d.ts.map +1 -1
  129. package/dist/esm/storage/client/DatasourceCache.js +5 -3
  130. package/dist/esm/storage/client/DatasourceCache.js.map +1 -1
  131. package/dist/esm/storage/client/RemoteWriteParticipant.d.ts +30 -0
  132. package/dist/esm/storage/client/RemoteWriteParticipant.d.ts.map +1 -0
  133. package/dist/esm/storage/client/RemoteWriteParticipant.js +46 -0
  134. package/dist/esm/storage/client/RemoteWriteParticipant.js.map +6 -0
  135. package/dist/esm/storage/client/RemoteWriter.d.ts +29 -0
  136. package/dist/esm/storage/client/RemoteWriter.d.ts.map +1 -0
  137. package/dist/esm/storage/client/RemoteWriter.js +53 -0
  138. package/dist/esm/storage/client/RemoteWriter.js.map +6 -0
  139. package/dist/esm/storage/server/DatasourceStore.d.ts +0 -3
  140. package/dist/esm/storage/server/DatasourceStore.d.ts.map +1 -1
  141. package/dist/esm/storage/server/DatasourceStore.js.map +1 -1
  142. package/dist/esm/storage/server/ServerEndpointStore.d.ts +4 -0
  143. package/dist/esm/storage/server/ServerEndpointStore.d.ts.map +1 -1
  144. package/dist/esm/storage/server/ServerEndpointStore.js +8 -0
  145. package/dist/esm/storage/server/ServerEndpointStore.js.map +1 -1
  146. package/dist/esm/storage/server/ServerNodeStore.d.ts +3 -2
  147. package/dist/esm/storage/server/ServerNodeStore.d.ts.map +1 -1
  148. package/dist/esm/storage/server/ServerNodeStore.js.map +1 -1
  149. package/package.json +7 -7
  150. package/src/behavior/internal/BehaviorBacking.ts +3 -2
  151. package/src/behavior/internal/ClientBehaviorBacking.ts +0 -15
  152. package/src/behavior/internal/ServerBehaviorBacking.ts +0 -19
  153. package/src/behavior/state/managed/Datasource.ts +10 -3
  154. package/src/behavior/supervision/RootSupervisor.ts +18 -15
  155. package/src/node/ClientNode.ts +4 -2
  156. package/src/node/ServerNode.ts +2 -2
  157. package/src/node/client/ClientEndpointInitializer.ts +7 -3
  158. package/src/node/client/ClientStructure.ts +26 -6
  159. package/src/node/server/ServerEndpointInitializer.ts +3 -1
  160. package/src/node/server/ServerEnvironment.ts +0 -2
  161. package/src/storage/EndpointStore.ts +9 -9
  162. package/src/storage/client/ClientEndpointStore.ts +53 -0
  163. package/src/storage/client/ClientNodeStore.ts +38 -6
  164. package/src/storage/client/ClientNodeStores.ts +3 -4
  165. package/src/storage/client/DatasourceCache.ts +10 -7
  166. package/src/storage/client/RemoteWriteParticipant.ts +62 -0
  167. package/src/storage/client/RemoteWriter.ts +81 -0
  168. package/src/storage/server/DatasourceStore.ts +1 -6
  169. package/src/storage/server/ServerEndpointStore.ts +9 -0
  170. package/src/storage/server/ServerNodeStore.ts +4 -2
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { InternalError } from "#general";
8
+ import { ClientStructure } from "#node/client/ClientStructure.js";
9
+ import type { ClientNode } from "#node/ClientNode.js";
10
+ import { Write, WriteResult, type Val } from "#protocol";
11
+ import type { ClusterId, ClusterType, EndpointNumber } from "#types";
12
+ import type { ClientNodeStore } from "./ClientNodeStore.js";
13
+
14
+ /**
15
+ * Persistence handler for {@link ClientNodeStore}.
16
+ *
17
+ * A remote writer conveys updates to the remote node. This performs actual persistence for client nodes where the
18
+ * local store is just a cache and the source of truth is on the remote device.
19
+ */
20
+ export interface RemoteWriter {
21
+ (request: RemoteWriter.Request): Promise<void>;
22
+ }
23
+
24
+ const attrCache = new WeakMap<ClusterType, Record<string, ClusterType.Attribute>>();
25
+
26
+ export function RemoteWriter(node: ClientNode, structure: ClientStructure): RemoteWriter {
27
+ return async function writeRemote(request: RemoteWriter.Request) {
28
+ const attrWrites = Array<Write.Attribute>();
29
+ for (const { number, behaviorId, values } of request) {
30
+ const cluster = structure.clusterFor(number, Number.parseInt(behaviorId) as ClusterId);
31
+ if (cluster === undefined) {
32
+ throw new InternalError(`Cannot remote write to non-cluster behavior ${behaviorId}`);
33
+ }
34
+ const attrs = attrsFor(cluster);
35
+
36
+ for (const id in values) {
37
+ const attr = attrs[id];
38
+ if (attr === undefined) {
39
+ if (id.startsWith("__")) {
40
+ continue;
41
+ }
42
+
43
+ throw new InternalError(`Cannot write unknown attribute ${id} for ${behaviorId}`);
44
+ }
45
+
46
+ attrWrites.push(
47
+ Write.Attribute({
48
+ endpoint: number,
49
+ cluster,
50
+ attributes: [attrs[id]],
51
+ value: values[id],
52
+ }),
53
+ );
54
+ }
55
+ }
56
+
57
+ const write = Write(...attrWrites);
58
+ const response = await node.interaction.write(write);
59
+ WriteResult.assertSuccess(response);
60
+ };
61
+ }
62
+
63
+ export namespace RemoteWriter {
64
+ export interface EndpointUpdateRequest {
65
+ number: EndpointNumber;
66
+ behaviorId: string;
67
+ values: Val.Struct;
68
+ }
69
+
70
+ export interface Request extends Array<EndpointUpdateRequest> {}
71
+ }
72
+
73
+ function attrsFor(cluster: ClusterType) {
74
+ let attrs = attrCache.get(cluster);
75
+ if (attrs) {
76
+ return attrs;
77
+ }
78
+ attrs = Object.fromEntries(Object.values(cluster.attributes).map(attr => [attr.id, attr]));
79
+ attrCache.set(cluster, attrs);
80
+ return attrs;
81
+ }
@@ -67,8 +67,7 @@ function participantFor(transaction: Transaction, endpointStore: EndpointStore)
67
67
  },
68
68
 
69
69
  commit1(): MaybePromise {
70
- // Persistence serves phase one commit; values are added directly to
71
- // the journal so nothing necessary here
70
+ // Persistence serves phase one commit; values are added directly to the journal so nothing necessary here
72
71
  },
73
72
 
74
73
  async commit2() {
@@ -86,7 +85,3 @@ function participantFor(transaction: Transaction, endpointStore: EndpointStore)
86
85
 
87
86
  return participant;
88
87
  }
89
-
90
- export namespace DatasourceStore {
91
- export type Type = typeof DatasourceStore;
92
- }
@@ -7,6 +7,7 @@
7
7
  import { Endpoint } from "#endpoint/Endpoint.js";
8
8
  import { ImplementationError, StorageContext } from "#general";
9
9
  import { EndpointStore } from "#storage/EndpointStore.js";
10
+ import { DatasourceStore } from "./DatasourceStore.js";
10
11
 
11
12
  const NUMBER_KEY = "__number__";
12
13
 
@@ -37,6 +38,14 @@ export class ServerEndpointStore extends EndpointStore {
37
38
  this.#childStorage = storage.createContext("parts");
38
39
  }
39
40
 
41
+ /**
42
+ * Create a {@link Datasource.Store} for a behavior.
43
+ */
44
+ createStoreForBehavior(behaviorId: string) {
45
+ const initialValues = this.consumeInitialValues(behaviorId);
46
+ return DatasourceStore(this, behaviorId, initialValues);
47
+ }
48
+
40
49
  /**
41
50
  * Invoke a function on this store and the stores of descendant parts.
42
51
  */
@@ -15,6 +15,7 @@ import {
15
15
  StorageManager,
16
16
  StorageService,
17
17
  } from "#general";
18
+ import type { ServerNode } from "#node/ServerNode.js";
18
19
  import { NodeStore } from "../NodeStore.js";
19
20
  import { ClientNodeStores } from "../client/ClientNodeStores.js";
20
21
  import { ServerEndpointStores } from "./ServerEndpointStores.js";
@@ -22,8 +23,9 @@ import { ServerEndpointStores } from "./ServerEndpointStores.js";
22
23
  const logger = Logger.get("ServerNodeStore");
23
24
 
24
25
  /**
25
- * The "server" node store is a {@link NodeStore} with storage for components shared by the server node and client
26
- * nodes.
26
+ * {@link ServerNode} persistence.
27
+ *
28
+ * Each {@link ServerNode} has an instance of this store.
27
29
  */
28
30
  export class ServerNodeStore extends NodeStore implements Destructable {
29
31
  #env: Environment;