@matter-server/ws-controller 0.2.0-alpha.0-00000000-000000000
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/LICENSE +201 -0
- package/README.md +11 -0
- package/dist/esm/controller/AttributeDataCache.d.ts +49 -0
- package/dist/esm/controller/AttributeDataCache.d.ts.map +1 -0
- package/dist/esm/controller/AttributeDataCache.js +154 -0
- package/dist/esm/controller/AttributeDataCache.js.map +6 -0
- package/dist/esm/controller/ControllerCommandHandler.d.ts +118 -0
- package/dist/esm/controller/ControllerCommandHandler.d.ts.map +1 -0
- package/dist/esm/controller/ControllerCommandHandler.js +1015 -0
- package/dist/esm/controller/ControllerCommandHandler.js.map +6 -0
- package/dist/esm/controller/LegacyDataInjector.d.ts +95 -0
- package/dist/esm/controller/LegacyDataInjector.d.ts.map +1 -0
- package/dist/esm/controller/LegacyDataInjector.js +196 -0
- package/dist/esm/controller/LegacyDataInjector.js.map +6 -0
- package/dist/esm/controller/MatterController.d.ts +59 -0
- package/dist/esm/controller/MatterController.d.ts.map +1 -0
- package/dist/esm/controller/MatterController.js +212 -0
- package/dist/esm/controller/MatterController.js.map +6 -0
- package/dist/esm/controller/Nodes.d.ts +62 -0
- package/dist/esm/controller/Nodes.d.ts.map +1 -0
- package/dist/esm/controller/Nodes.js +85 -0
- package/dist/esm/controller/Nodes.js.map +6 -0
- package/dist/esm/controller/TestNodeCommandHandler.d.ts +84 -0
- package/dist/esm/controller/TestNodeCommandHandler.d.ts.map +1 -0
- package/dist/esm/controller/TestNodeCommandHandler.js +225 -0
- package/dist/esm/controller/TestNodeCommandHandler.js.map +6 -0
- package/dist/esm/data/VendorIDs.d.ts +7 -0
- package/dist/esm/data/VendorIDs.d.ts.map +1 -0
- package/dist/esm/data/VendorIDs.js +1237 -0
- package/dist/esm/data/VendorIDs.js.map +6 -0
- package/dist/esm/example/send-command.d.ts +7 -0
- package/dist/esm/example/send-command.d.ts.map +1 -0
- package/dist/esm/example/send-command.js +60 -0
- package/dist/esm/example/send-command.js.map +6 -0
- package/dist/esm/index.d.ts +21 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +26 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/model/ModelMapper.d.ts +34 -0
- package/dist/esm/model/ModelMapper.d.ts.map +1 -0
- package/dist/esm/model/ModelMapper.js +62 -0
- package/dist/esm/model/ModelMapper.js.map +6 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/server/ConfigStorage.d.ts +29 -0
- package/dist/esm/server/ConfigStorage.d.ts.map +1 -0
- package/dist/esm/server/ConfigStorage.js +84 -0
- package/dist/esm/server/ConfigStorage.js.map +6 -0
- package/dist/esm/server/Converters.d.ts +53 -0
- package/dist/esm/server/Converters.d.ts.map +1 -0
- package/dist/esm/server/Converters.js +343 -0
- package/dist/esm/server/Converters.js.map +6 -0
- package/dist/esm/server/WebSocketControllerHandler.d.ts +21 -0
- package/dist/esm/server/WebSocketControllerHandler.d.ts.map +1 -0
- package/dist/esm/server/WebSocketControllerHandler.js +767 -0
- package/dist/esm/server/WebSocketControllerHandler.js.map +6 -0
- package/dist/esm/types/CommandHandler.d.ts +258 -0
- package/dist/esm/types/CommandHandler.d.ts.map +1 -0
- package/dist/esm/types/CommandHandler.js +6 -0
- package/dist/esm/types/CommandHandler.js.map +6 -0
- package/dist/esm/types/WebServer.d.ts +12 -0
- package/dist/esm/types/WebServer.d.ts.map +1 -0
- package/dist/esm/types/WebServer.js +6 -0
- package/dist/esm/types/WebServer.js.map +6 -0
- package/dist/esm/types/WebSocketMessageTypes.d.ts +478 -0
- package/dist/esm/types/WebSocketMessageTypes.d.ts.map +1 -0
- package/dist/esm/types/WebSocketMessageTypes.js +77 -0
- package/dist/esm/types/WebSocketMessageTypes.js.map +6 -0
- package/dist/esm/util/matterVersion.d.ts +12 -0
- package/dist/esm/util/matterVersion.d.ts.map +1 -0
- package/dist/esm/util/matterVersion.js +32 -0
- package/dist/esm/util/matterVersion.js.map +6 -0
- package/dist/esm/util/network.d.ts +14 -0
- package/dist/esm/util/network.d.ts.map +1 -0
- package/dist/esm/util/network.js +63 -0
- package/dist/esm/util/network.js.map +6 -0
- package/package.json +45 -0
- package/src/controller/AttributeDataCache.ts +194 -0
- package/src/controller/ControllerCommandHandler.ts +1256 -0
- package/src/controller/LegacyDataInjector.ts +314 -0
- package/src/controller/MatterController.ts +265 -0
- package/src/controller/Nodes.ts +115 -0
- package/src/controller/TestNodeCommandHandler.ts +305 -0
- package/src/data/VendorIDs.ts +1234 -0
- package/src/example/send-command.ts +82 -0
- package/src/index.ts +33 -0
- package/src/model/ModelMapper.ts +87 -0
- package/src/server/ConfigStorage.ts +112 -0
- package/src/server/Converters.ts +483 -0
- package/src/server/WebSocketControllerHandler.ts +917 -0
- package/src/tsconfig.json +7 -0
- package/src/types/CommandHandler.ts +270 -0
- package/src/types/WebServer.ts +14 -0
- package/src/types/WebSocketMessageTypes.ts +525 -0
- package/src/util/matterVersion.ts +45 -0
- package/src/util/network.ts +85 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/data/VendorIDs.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,MAAM,YAAoC;AAAA,EAC7C,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,GAAQ;AAAA,EACR,KAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,KAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,MAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AAAA,EACR,OAAQ;AACZ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-command.d.ts","sourceRoot":"","sources":["../../../src/example/send-command.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import WebSocket from "ws";
|
|
7
|
+
const [, , url, command, argsJson] = process.argv;
|
|
8
|
+
if (!url || !command) {
|
|
9
|
+
console.error("Usage: send-command <url> <command> [args-json]");
|
|
10
|
+
console.error("");
|
|
11
|
+
console.error("Examples:");
|
|
12
|
+
console.error(" npx ts-node send-command.ts ws://localhost:5580/ws server_info");
|
|
13
|
+
console.error(` npx ts-node send-command.ts ws://localhost:5580/ws get_node '{"node_id": 1}'`);
|
|
14
|
+
console.error(" npx ts-node send-command.ts ws://localhost:5580/ws start_listening");
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
let args = void 0;
|
|
18
|
+
if (argsJson) {
|
|
19
|
+
try {
|
|
20
|
+
args = JSON.parse(argsJson);
|
|
21
|
+
} catch (e) {
|
|
22
|
+
console.error("Error parsing args JSON:", e.message);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
console.log(`Connecting to ${url}...`);
|
|
27
|
+
const ws = new WebSocket(url);
|
|
28
|
+
ws.on("open", () => {
|
|
29
|
+
console.log("Connected!");
|
|
30
|
+
const message = {
|
|
31
|
+
message_id: `cmd-${Date.now()}`,
|
|
32
|
+
command,
|
|
33
|
+
...args !== void 0 && { args }
|
|
34
|
+
};
|
|
35
|
+
console.log("Sending:", JSON.stringify(message, null, 2));
|
|
36
|
+
ws.send(JSON.stringify(message));
|
|
37
|
+
});
|
|
38
|
+
ws.on("message", (data) => {
|
|
39
|
+
try {
|
|
40
|
+
const parsed = JSON.parse(data.toString());
|
|
41
|
+
console.log("\n--- Received ---");
|
|
42
|
+
console.log(JSON.stringify(parsed, null, 2));
|
|
43
|
+
} catch {
|
|
44
|
+
console.log("\n--- Received (raw) ---");
|
|
45
|
+
console.log(data.toString());
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
ws.on("error", (error) => {
|
|
49
|
+
console.error("WebSocket error:", error.message);
|
|
50
|
+
});
|
|
51
|
+
ws.on("close", (code, reason) => {
|
|
52
|
+
console.log(`
|
|
53
|
+
Disconnected (code: ${code}, reason: ${reason.toString() || "none"})`);
|
|
54
|
+
process.exit(0);
|
|
55
|
+
});
|
|
56
|
+
process.on("SIGINT", () => {
|
|
57
|
+
console.log("\nClosing connection...");
|
|
58
|
+
ws.close();
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=send-command.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/example/send-command.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,OAAO,eAAe;AAEtB,MAAM,CAAC,EAAE,EAAE,KAAK,SAAS,QAAQ,IAAI,QAAQ;AAE7C,IAAI,CAAC,OAAO,CAAC,SAAS;AAClB,UAAQ,MAAM,iDAAiD;AAC/D,UAAQ,MAAM,EAAE;AAChB,UAAQ,MAAM,WAAW;AACzB,UAAQ,MAAM,kEAAkE;AAChF,UAAQ,MAAM,gFAAkF;AAChG,UAAQ,MAAM,sEAAsE;AACpF,UAAQ,KAAK,CAAC;AAClB;AAEA,IAAI,OAAgB;AACpB,IAAI,UAAU;AACV,MAAI;AACA,WAAO,KAAK,MAAM,QAAQ;AAAA,EAC9B,SAAS,GAAG;AACR,YAAQ,MAAM,4BAA6B,EAAY,OAAO;AAC9D,YAAQ,KAAK,CAAC;AAAA,EAClB;AACJ;AAEA,QAAQ,IAAI,iBAAiB,GAAG,KAAK;AAErC,MAAM,KAAK,IAAI,UAAU,GAAG;AAE5B,GAAG,GAAG,QAAQ,MAAM;AAChB,UAAQ,IAAI,YAAY;AAExB,QAAM,UAAU;AAAA,IACZ,YAAY,OAAO,KAAK,IAAI,CAAC;AAAA,IAC7B;AAAA,IACA,GAAI,SAAS,UAAa,EAAE,KAAK;AAAA,EACrC;AAEA,UAAQ,IAAI,YAAY,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AACxD,KAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AACnC,CAAC;AAED,GAAG,GAAG,WAAW,CAAC,SAAyB;AACvC,MAAI;AACA,UAAM,SAAS,KAAK,MAAM,KAAK,SAAS,CAAC;AACzC,YAAQ,IAAI,oBAAoB;AAChC,YAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC/C,QAAQ;AACJ,YAAQ,IAAI,0BAA0B;AACtC,YAAQ,IAAI,KAAK,SAAS,CAAC;AAAA,EAC/B;AACJ,CAAC;AAED,GAAG,GAAG,SAAS,CAAC,UAAiB;AAC7B,UAAQ,MAAM,oBAAoB,MAAM,OAAO;AACnD,CAAC;AAED,GAAG,GAAG,SAAS,CAAC,MAAc,WAAmB;AAC7C,UAAQ,IAAI;AAAA,sBAAyB,IAAI,aAAa,OAAO,SAAS,KAAK,MAAM,GAAG;AACpF,UAAQ,KAAK,CAAC;AAClB,CAAC;AAGD,QAAQ,GAAG,UAAU,MAAM;AACvB,UAAQ,IAAI,yBAAyB;AACrC,KAAG,MAAM;AACb,CAAC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @matter-server/ws-controller - Matter controller Websocket library
|
|
8
|
+
*/
|
|
9
|
+
export * from "./controller/ControllerCommandHandler.js";
|
|
10
|
+
export * from "./controller/LegacyDataInjector.js";
|
|
11
|
+
export * from "./controller/MatterController.js";
|
|
12
|
+
export * from "./model/ModelMapper.js";
|
|
13
|
+
export * from "./server/ConfigStorage.js";
|
|
14
|
+
export * from "./server/Converters.js";
|
|
15
|
+
export * from "./server/WebSocketControllerHandler.js";
|
|
16
|
+
export * from "./types/WebServer.js";
|
|
17
|
+
export * from "./types/CommandHandler.js";
|
|
18
|
+
export * from "./types/WebSocketMessageTypes.js";
|
|
19
|
+
export * from "./util/matterVersion.js";
|
|
20
|
+
export { Crypto, Environment, LogDestination, LogFormat, LogLevel, Logger } from "@matter/main";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AAGH,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,wBAAwB,CAAC;AAGvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wCAAwC,CAAC;AACvD,cAAc,sBAAsB,CAAC;AAGrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,yBAAyB,CAAC;AAGxC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export * from "./controller/ControllerCommandHandler.js";
|
|
7
|
+
export * from "./controller/LegacyDataInjector.js";
|
|
8
|
+
export * from "./controller/MatterController.js";
|
|
9
|
+
export * from "./model/ModelMapper.js";
|
|
10
|
+
export * from "./server/ConfigStorage.js";
|
|
11
|
+
export * from "./server/Converters.js";
|
|
12
|
+
export * from "./server/WebSocketControllerHandler.js";
|
|
13
|
+
export * from "./types/WebServer.js";
|
|
14
|
+
export * from "./types/CommandHandler.js";
|
|
15
|
+
export * from "./types/WebSocketMessageTypes.js";
|
|
16
|
+
export * from "./util/matterVersion.js";
|
|
17
|
+
import { Crypto, Environment, LogDestination, LogFormat, LogLevel, Logger } from "@matter/main";
|
|
18
|
+
export {
|
|
19
|
+
Crypto,
|
|
20
|
+
Environment,
|
|
21
|
+
LogDestination,
|
|
22
|
+
LogFormat,
|
|
23
|
+
LogLevel,
|
|
24
|
+
Logger
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ClusterId } from "@matter/main";
|
|
7
|
+
import { AttributeModel, ClusterModel, CommandModel, EventModel } from "@matter/model";
|
|
8
|
+
type AttributeDetails = {
|
|
9
|
+
readonly [key: string]: AttributeModel | undefined;
|
|
10
|
+
};
|
|
11
|
+
/** Metadata for Global attributes */
|
|
12
|
+
export declare const GlobalAttributes: AttributeDetails;
|
|
13
|
+
/**
|
|
14
|
+
* Metadata for all clusters collected in an optimized form for direct access with the incoming websocket requests.
|
|
15
|
+
* All names are just lowercased to prevent differences in camelize and decamelize handling.
|
|
16
|
+
*/
|
|
17
|
+
export type ClusterMapEntry = {
|
|
18
|
+
readonly clusterId: ClusterId;
|
|
19
|
+
readonly model: ClusterModel;
|
|
20
|
+
readonly commands: {
|
|
21
|
+
readonly [key: string]: CommandModel | undefined;
|
|
22
|
+
};
|
|
23
|
+
readonly attributes: AttributeDetails;
|
|
24
|
+
readonly events: {
|
|
25
|
+
readonly [key: string]: EventModel | undefined;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export type ClusterMapType = {
|
|
29
|
+
readonly [key: string]: ClusterMapEntry | undefined;
|
|
30
|
+
};
|
|
31
|
+
/** Readonly map of all clusters frozen after initialization */
|
|
32
|
+
export declare const ClusterMap: ClusterMapType;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=ModelMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelMapper.d.ts","sourceRoot":"","sources":["../../../src/model/ModelMapper.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAGH,cAAc,EACd,YAAY,EAEZ,YAAY,EACZ,UAAU,EAIb,MAAM,eAAe,CAAC;AAEvB,KAAK,gBAAgB,GAAG;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/E,qCAAqC;AACrC,eAAO,MAAM,gBAAgB,EAAE,gBAM7B,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAA;KAAE,CAAC;IACxE,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;KAAE,CAAC;CACvE,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;CACvD,CAAC;AAwCF,+DAA+D;AAC/D,eAAO,MAAM,UAAU,EAAE,cAAiD,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ClusterId } from "@matter/main";
|
|
7
|
+
import {
|
|
8
|
+
AcceptedCommandList,
|
|
9
|
+
AttributeList,
|
|
10
|
+
AttributeModel,
|
|
11
|
+
ClusterRevision,
|
|
12
|
+
CommandModel,
|
|
13
|
+
EventModel,
|
|
14
|
+
FeatureMap,
|
|
15
|
+
GeneratedCommandList,
|
|
16
|
+
MatterModel
|
|
17
|
+
} from "@matter/model";
|
|
18
|
+
const GlobalAttributes = Object.freeze({
|
|
19
|
+
clusterRevision: ClusterRevision,
|
|
20
|
+
featureMap: FeatureMap,
|
|
21
|
+
attributeList: AttributeList,
|
|
22
|
+
acceptedCommandList: AcceptedCommandList,
|
|
23
|
+
generatedCommandList: GeneratedCommandList
|
|
24
|
+
});
|
|
25
|
+
const clusterMapBuilder = {};
|
|
26
|
+
MatterModel.standard.clusters.forEach((cluster) => {
|
|
27
|
+
if (cluster.id === void 0) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const aces = cluster.allAces;
|
|
31
|
+
const commands = {};
|
|
32
|
+
const attributes = {};
|
|
33
|
+
const events = {};
|
|
34
|
+
aces.forEach((ace) => {
|
|
35
|
+
const name = ace.name.toLowerCase();
|
|
36
|
+
if (ace instanceof CommandModel) {
|
|
37
|
+
commands[name] = ace;
|
|
38
|
+
commands[ace.id] = ace;
|
|
39
|
+
} else if (ace instanceof AttributeModel) {
|
|
40
|
+
attributes[name] = ace;
|
|
41
|
+
attributes[ace.id] = ace;
|
|
42
|
+
} else if (ace instanceof EventModel) {
|
|
43
|
+
events[name] = ace;
|
|
44
|
+
events[ace.id] = ace;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
const clusterData = Object.freeze({
|
|
48
|
+
clusterId: ClusterId(cluster.id),
|
|
49
|
+
model: cluster,
|
|
50
|
+
commands: Object.freeze(commands),
|
|
51
|
+
attributes: Object.freeze(attributes),
|
|
52
|
+
events: Object.freeze(events)
|
|
53
|
+
});
|
|
54
|
+
clusterMapBuilder[cluster.name.toLowerCase()] = clusterData;
|
|
55
|
+
clusterMapBuilder[cluster.id] = clusterData;
|
|
56
|
+
});
|
|
57
|
+
const ClusterMap = Object.freeze(clusterMapBuilder);
|
|
58
|
+
export {
|
|
59
|
+
ClusterMap,
|
|
60
|
+
GlobalAttributes
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=ModelMapper.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/model/ModelMapper.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,iBAAiB;AAC1B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AAKA,MAAM,mBAAqC,OAAO,OAAO;AAAA,EAC5D,iBAAiB;AAAA,EACjB,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,sBAAsB;AAC1B,CAAC;AAmBD,MAAM,oBAAoE,CAAC;AAE3E,YAAY,SAAS,SAAS,QAAQ,aAAW;AAC7C,MAAI,QAAQ,OAAO,QAAW;AAC1B;AAAA,EACJ;AACA,QAAM,OAAO,QAAQ;AACrB,QAAM,WAAwD,CAAC;AAC/D,QAAM,aAA4D,CAAC;AACnE,QAAM,SAAoD,CAAC;AAE3D,OAAK,QAAQ,SAAO;AAChB,UAAM,OAAO,IAAI,KAAK,YAAY;AAClC,QAAI,eAAe,cAAc;AAC7B,eAAS,IAAI,IAAI;AACjB,eAAS,IAAI,EAAE,IAAI;AAAA,IACvB,WAAW,eAAe,gBAAgB;AACtC,iBAAW,IAAI,IAAI;AACnB,iBAAW,IAAI,EAAE,IAAI;AAAA,IACzB,WAAW,eAAe,YAAY;AAClC,aAAO,IAAI,IAAI;AACf,aAAO,IAAI,EAAE,IAAI;AAAA,IACrB;AAAA,EACJ,CAAC;AAED,QAAM,cAA+B,OAAO,OAAO;AAAA,IAC/C,WAAW,UAAU,QAAQ,EAAE;AAAA,IAC/B,OAAO;AAAA,IACP,UAAU,OAAO,OAAO,QAAQ;AAAA,IAChC,YAAY,OAAO,OAAO,UAAU;AAAA,IACpC,QAAQ,OAAO,OAAO,MAAM;AAAA,EAChC,CAAC;AAED,oBAAkB,QAAQ,KAAK,YAAY,CAAC,IAAI;AAChD,oBAAkB,QAAQ,EAAE,IAAI;AACpC,CAAC;AAGM,MAAM,aAA6B,OAAO,OAAO,iBAAiB;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Environment, StorageService } from "@matter/main";
|
|
7
|
+
interface ConfigData {
|
|
8
|
+
fabricLabel: string;
|
|
9
|
+
nextNodeId: number;
|
|
10
|
+
wifiSsid?: string;
|
|
11
|
+
wifiCredentials?: string;
|
|
12
|
+
threadDataset?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare class ConfigStorage {
|
|
15
|
+
#private;
|
|
16
|
+
static create(env: Environment): Promise<ConfigStorage>;
|
|
17
|
+
constructor(env: Environment);
|
|
18
|
+
get service(): StorageService;
|
|
19
|
+
open(): Promise<void>;
|
|
20
|
+
get fabricLabel(): string;
|
|
21
|
+
get nextNodeId(): number;
|
|
22
|
+
get wifiSsid(): string | undefined;
|
|
23
|
+
get wifiCredentials(): string | undefined;
|
|
24
|
+
get threadDataset(): string | undefined;
|
|
25
|
+
set(data: Partial<ConfigData>): Promise<void>;
|
|
26
|
+
close(): Promise<void>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=ConfigStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigStorage.d.ts","sourceRoot":"","sources":["../../../src/server/ConfigStorage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAA0C,cAAc,EAAE,MAAM,cAAc,CAAC;AAInG,UAAU,UAAU;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,aAAa;;WAaT,MAAM,CAAC,GAAG,EAAE,WAAW;gBAMxB,GAAG,EAAE,WAAW;IAI5B,IAAI,OAAO,mBAKV;IAEK,IAAI;IA0BV,IAAI,WAAW,WAEd;IACD,IAAI,UAAU,WAEb;IACD,IAAI,QAAQ,uBAEX;IACD,IAAI,eAAe,uBAElB;IACD,IAAI,aAAa,uBAEhB;IAEK,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC;IAgB7B,KAAK;CAKd"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Logger, StorageService } from "@matter/main";
|
|
7
|
+
const logger = new Logger("ConfigStorage");
|
|
8
|
+
class ConfigStorage {
|
|
9
|
+
#env;
|
|
10
|
+
#storageService;
|
|
11
|
+
#storage;
|
|
12
|
+
#configStore;
|
|
13
|
+
#data = {
|
|
14
|
+
nextNodeId: 2,
|
|
15
|
+
// 2 because controller is Node Id 1
|
|
16
|
+
fabricLabel: "HomeAssistant",
|
|
17
|
+
wifiSsid: void 0,
|
|
18
|
+
wifiCredentials: void 0,
|
|
19
|
+
threadDataset: void 0
|
|
20
|
+
};
|
|
21
|
+
static async create(env) {
|
|
22
|
+
const instance = new ConfigStorage(env);
|
|
23
|
+
await instance.open();
|
|
24
|
+
return instance;
|
|
25
|
+
}
|
|
26
|
+
constructor(env) {
|
|
27
|
+
this.#env = env;
|
|
28
|
+
}
|
|
29
|
+
get service() {
|
|
30
|
+
if (this.#storageService === void 0) {
|
|
31
|
+
throw new Error("Storage not open");
|
|
32
|
+
}
|
|
33
|
+
return this.#storageService;
|
|
34
|
+
}
|
|
35
|
+
async open() {
|
|
36
|
+
this.#storageService = this.#env.get(StorageService);
|
|
37
|
+
logger.info(`Storage location: ${this.#storageService.location} (Directory)`);
|
|
38
|
+
this.#storage = await this.#storageService.open("config");
|
|
39
|
+
this.#configStore = this.#storage.createContext("values");
|
|
40
|
+
const fabricLabel = await this.#configStore.has("fabricLabel") ? await this.#configStore.get("fabricLabel") : this.#env.vars.string("fabricLabel") ?? this.#data.fabricLabel;
|
|
41
|
+
const nextNodeId = await this.#configStore.get("nextNodeId", this.#data.nextNodeId);
|
|
42
|
+
const wifiSsid = await this.#configStore.has("wifiSsid") ? await this.#configStore.get("wifiSsid", "") : void 0;
|
|
43
|
+
const wifiCredentials = await this.#configStore.has("wifiCredentials") ? await this.#configStore.get("wifiCredentials", "") : void 0;
|
|
44
|
+
const threadDataset = await this.#configStore.has("threadDataset") ? await this.#configStore.get("threadDataset", "") : void 0;
|
|
45
|
+
await this.set({ fabricLabel, nextNodeId, wifiSsid, wifiCredentials, threadDataset });
|
|
46
|
+
}
|
|
47
|
+
get fabricLabel() {
|
|
48
|
+
return this.#data.fabricLabel;
|
|
49
|
+
}
|
|
50
|
+
get nextNodeId() {
|
|
51
|
+
return this.#data.nextNodeId;
|
|
52
|
+
}
|
|
53
|
+
get wifiSsid() {
|
|
54
|
+
return this.#data.wifiSsid;
|
|
55
|
+
}
|
|
56
|
+
get wifiCredentials() {
|
|
57
|
+
return this.#data.wifiCredentials;
|
|
58
|
+
}
|
|
59
|
+
get threadDataset() {
|
|
60
|
+
return this.#data.threadDataset;
|
|
61
|
+
}
|
|
62
|
+
async set(data) {
|
|
63
|
+
if (!this.#configStore) {
|
|
64
|
+
throw new Error("Storage not open");
|
|
65
|
+
}
|
|
66
|
+
for (const key of Object.keys(data)) {
|
|
67
|
+
if (!(key in this.#data)) {
|
|
68
|
+
throw new Error(`Invalid key: ${key}`);
|
|
69
|
+
}
|
|
70
|
+
this.#data[key] = data[key];
|
|
71
|
+
logger.info(`Set config key ${key} to ${data[key]}`);
|
|
72
|
+
await this.#configStore.set(key, data[key]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async close() {
|
|
76
|
+
if (this.#storage) {
|
|
77
|
+
await this.#storage.close();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
ConfigStorage
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=ConfigStorage.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/server/ConfigStorage.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAsB,QAAwC,sBAAsB;AAEpF,MAAM,SAAS,IAAI,OAAO,eAAe;AAUlC,MAAM,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACS,QAAoB;AAAA,IACzB,YAAY;AAAA;AAAA,IACZ,aAAa;AAAA,IACb,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,eAAe;AAAA,EACnB;AAAA,EAEA,aAAa,OAAO,KAAkB;AAClC,UAAM,WAAW,IAAI,cAAc,GAAG;AACtC,UAAM,SAAS,KAAK;AACpB,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,KAAkB;AAC1B,SAAK,OAAO;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU;AACV,QAAI,KAAK,oBAAoB,QAAW;AACpC,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACtC;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,OAAO;AACT,SAAK,kBAAkB,KAAK,KAAK,IAAI,cAAc;AAInD,WAAO,KAAK,qBAAqB,KAAK,gBAAgB,QAAQ,cAAc;AAC5E,SAAK,WAAW,MAAM,KAAK,gBAAgB,KAAK,QAAQ;AACxD,SAAK,eAAe,KAAK,SAAS,cAAc,QAAQ;AAExD,UAAM,cAAe,MAAM,KAAK,aAAa,IAAI,aAAa,IACxD,MAAM,KAAK,aAAa,IAAY,aAAa,IAChD,KAAK,KAAK,KAAK,OAAO,aAAa,KAAK,KAAK,MAAM;AAC1D,UAAM,aAAa,MAAM,KAAK,aAAa,IAAY,cAAc,KAAK,MAAM,UAAU;AAE1F,UAAM,WAAY,MAAM,KAAK,aAAa,IAAI,UAAU,IAClD,MAAM,KAAK,aAAa,IAAY,YAAY,EAAE,IAClD;AACN,UAAM,kBAAmB,MAAM,KAAK,aAAa,IAAI,iBAAiB,IAChE,MAAM,KAAK,aAAa,IAAY,mBAAmB,EAAE,IACzD;AACN,UAAM,gBAAiB,MAAM,KAAK,aAAa,IAAI,eAAe,IAC5D,MAAM,KAAK,aAAa,IAAY,iBAAiB,EAAE,IACvD;AACN,UAAM,KAAK,IAAI,EAAE,aAAa,YAAY,UAAU,iBAAiB,cAAc,CAAC;AAAA,EACxF;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,aAAa;AACb,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,WAAW;AACX,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,kBAAkB;AAClB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EACA,IAAI,gBAAgB;AAChB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,IAAI,MAA2B;AACjC,QAAI,CAAC,KAAK,cAAc;AACpB,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACtC;AAEA,eAAW,OAAO,OAAO,KAAK,IAAI,GAAG;AACjC,UAAI,EAAE,OAAO,KAAK,QAAQ;AACtB,cAAM,IAAI,MAAM,gBAAgB,GAAG,EAAE;AAAA,MACzC;AAEA,WAAK,MAAM,GAAG,IAAI,KAAK,GAAG;AAC1B,aAAO,KAAK,kBAAkB,GAAG,OAAO,KAAK,GAAuB,CAAC,EAAE;AACvE,YAAM,KAAK,aAAa,IAAI,KAAK,KAAK,GAAuB,CAAC;AAAA,IAClE;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ;AACV,QAAI,KAAK,UAAU;AACf,YAAM,KAAK,SAAS,MAAM;AAAA,IAC9B;AAAA,EACJ;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { AttributeId, ClusterId } from "@matter/main";
|
|
7
|
+
import { ClusterModel, ValueModel } from "@matter/main/model";
|
|
8
|
+
import { EndpointNumber } from "@matter/main/types";
|
|
9
|
+
/** Convert stringified numbers in hex and normal style to either number or bigint. */
|
|
10
|
+
export declare function parseNumber(number: string): number | bigint;
|
|
11
|
+
/**
|
|
12
|
+
* Converts tag-based WebSocket data (with numeric keys) back to Matter.js data format (with camelCased names).
|
|
13
|
+
* This is the reverse of convertMatterToWebSocketTagBased.
|
|
14
|
+
*/
|
|
15
|
+
export declare function convertWebSocketTagBasedToMatter(value: unknown, model: ValueModel | undefined, clusterModel: ClusterModel): unknown;
|
|
16
|
+
/**
|
|
17
|
+
* Converts camelized name-based WebSocket data to Matter.js data format. Mainly to ensure binary and epoch data
|
|
18
|
+
*/
|
|
19
|
+
export declare function convertCommandDataToMatter(value: unknown, model: ValueModel | undefined, clusterModel: ClusterModel): unknown;
|
|
20
|
+
/**
|
|
21
|
+
* Uses the matter.js Model to convert the response data for read, subscribe and invoke into a tag-based response
|
|
22
|
+
* including conversion of data types.
|
|
23
|
+
*/
|
|
24
|
+
export declare function convertMatterToWebSocketTagBased(value: unknown, model: ValueModel | undefined, clusterModel: ClusterModel | undefined): unknown;
|
|
25
|
+
/**
|
|
26
|
+
* Serialize to JSON with BigInt support.
|
|
27
|
+
* - BigInt values within safe integer range are converted to numbers
|
|
28
|
+
* - Large BigInt values are output as raw decimal numbers (not quoted strings)
|
|
29
|
+
*/
|
|
30
|
+
export declare function toBigIntAwareJson(object: object, spaces?: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Parse JSON with BigInt support for large numbers that exceed JavaScript precision.
|
|
33
|
+
* Numbers with 15+ digits that exceed MAX_SAFE_INTEGER are converted to BigInt.
|
|
34
|
+
*/
|
|
35
|
+
export declare function parseBigIntAwareJson(json: string): unknown;
|
|
36
|
+
/** Use the matter.js model to convert the incoming data for write and invoke commands into the expected format. */
|
|
37
|
+
export declare function convertWebsocketDataToMatter(value: any, model: ValueModel): any;
|
|
38
|
+
export declare function getDateAsString(date: Date): string;
|
|
39
|
+
export declare function buildAttributePath(endpointId: number, clusterId: number, attributeId: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Parse an attribute path string into its components.
|
|
42
|
+
* Supports wildcards (*) for endpoint, cluster, and attribute IDs.
|
|
43
|
+
* Non-numeric values are treated as wildcards and returned as undefined.
|
|
44
|
+
*
|
|
45
|
+
* @param path - Attribute path string in format "endpoint/cluster/attribute"
|
|
46
|
+
* @returns Object with endpointId, clusterId, attributeId - each undefined if wildcard
|
|
47
|
+
*/
|
|
48
|
+
export declare function splitAttributePath(path: string): {
|
|
49
|
+
endpointId: EndpointNumber | undefined;
|
|
50
|
+
clusterId: ClusterId | undefined;
|
|
51
|
+
attributeId: AttributeId | undefined;
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=Converters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Converters.d.ts","sourceRoot":"","sources":["../../../src/server/Converters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAmB,SAAS,EAAoB,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,YAAY,EAAc,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAiD,MAAM,oBAAoB,CAAC;AAInG,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAM3D;AA0DD;;;GAGG;AACH,wBAAgB,gCAAgC,CAC5C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAqCT;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACtC,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAoCT;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC5C,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,UAAU,GAAG,SAAS,EAC7B,YAAY,EAAE,YAAY,GAAG,SAAS,GACvC,OAAO,CA4ET;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CA2BzE;AAKD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmB1D;AAeD,mHAAmH;AACnH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,CA2G/E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,UAWzC;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAErG;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAC9C,UAAU,EAAE,cAAc,GAAG,SAAS,CAAC;IACvC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;CACxC,CAaA"}
|