@camstack/core 0.1.15 → 0.1.16

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 (382) hide show
  1. package/dist/addon/addon-api-factory.d.ts +36 -0
  2. package/dist/addon/addon-api-factory.d.ts.map +1 -0
  3. package/dist/addon-routes/addon-route-registry.d.ts +38 -0
  4. package/dist/addon-routes/addon-route-registry.d.ts.map +1 -0
  5. package/dist/auth/api-key-manager.d.ts +27 -0
  6. package/dist/auth/api-key-manager.d.ts.map +1 -0
  7. package/dist/auth/auth-manager.d.ts +47 -0
  8. package/dist/auth/auth-manager.d.ts.map +1 -0
  9. package/dist/auth/parse-record.d.ts +19 -0
  10. package/dist/auth/parse-record.d.ts.map +1 -0
  11. package/dist/auth/scoped-token-manager.d.ts +18 -0
  12. package/dist/auth/scoped-token-manager.d.ts.map +1 -0
  13. package/dist/auth/user-manager.d.ts +34 -0
  14. package/dist/auth/user-manager.d.ts.map +1 -0
  15. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -0
  16. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts.map +1 -0
  17. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +223 -217
  18. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js.map +1 -1
  19. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +216 -7
  20. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs.map +1 -1
  21. package/dist/builtins/addon-pages-aggregator/index.d.ts +2 -0
  22. package/dist/builtins/addon-pages-aggregator/index.d.ts.map +1 -0
  23. package/dist/builtins/addon-pages-aggregator/index.js +6 -221
  24. package/dist/builtins/addon-pages-aggregator/index.mjs +2 -9
  25. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +33 -0
  26. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts.map +1 -0
  27. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +199 -197
  28. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js.map +1 -1
  29. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +192 -7
  30. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs.map +1 -1
  31. package/dist/builtins/addon-widgets-aggregator/index.d.ts +2 -0
  32. package/dist/builtins/addon-widgets-aggregator/index.d.ts.map +1 -0
  33. package/dist/builtins/addon-widgets-aggregator/index.js +6 -201
  34. package/dist/builtins/addon-widgets-aggregator/index.mjs +2 -9
  35. package/dist/builtins/alerts/alerts.addon.d.ts +82 -0
  36. package/dist/builtins/alerts/alerts.addon.d.ts.map +1 -0
  37. package/dist/builtins/alerts/alerts.addon.js +590 -430
  38. package/dist/builtins/alerts/alerts.addon.js.map +1 -1
  39. package/dist/builtins/alerts/alerts.addon.mjs +595 -7
  40. package/dist/builtins/alerts/alerts.addon.mjs.map +1 -1
  41. package/dist/builtins/alerts/index.d.ts +2 -0
  42. package/dist/builtins/alerts/index.d.ts.map +1 -0
  43. package/dist/builtins/alerts/index.js +3 -443
  44. package/dist/builtins/alerts/index.mjs +2 -8
  45. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts +8 -0
  46. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts.map +1 -0
  47. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js +56 -0
  48. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js.map +1 -0
  49. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs +50 -0
  50. package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs.map +1 -0
  51. package/dist/builtins/auth-orchestrator/index.d.ts +2 -0
  52. package/dist/builtins/auth-orchestrator/index.d.ts.map +1 -0
  53. package/dist/builtins/auth-orchestrator/index.js +7 -0
  54. package/dist/builtins/auth-orchestrator/index.mjs +2 -0
  55. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +148 -0
  56. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts.map +1 -0
  57. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +7639 -0
  58. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js.map +1 -0
  59. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +7627 -0
  60. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs.map +1 -0
  61. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +24 -0
  62. package/dist/builtins/backup-orchestrator/cron-helpers.d.ts.map +1 -0
  63. package/dist/builtins/backup-orchestrator/destination-policy.d.ts +73 -0
  64. package/dist/builtins/backup-orchestrator/destination-policy.d.ts.map +1 -0
  65. package/dist/builtins/backup-orchestrator/download-helpers.d.ts +13 -0
  66. package/dist/builtins/backup-orchestrator/download-helpers.d.ts.map +1 -0
  67. package/dist/builtins/backup-orchestrator/index.d.ts +3 -0
  68. package/dist/builtins/backup-orchestrator/index.d.ts.map +1 -0
  69. package/dist/builtins/backup-orchestrator/index.js +7 -0
  70. package/dist/builtins/backup-orchestrator/index.mjs +2 -0
  71. package/dist/builtins/backup-orchestrator/manifest-store.d.ts +78 -0
  72. package/dist/builtins/backup-orchestrator/manifest-store.d.ts.map +1 -0
  73. package/dist/builtins/console-logging/console-destination.d.ts +14 -0
  74. package/dist/builtins/console-logging/console-destination.d.ts.map +1 -0
  75. package/dist/builtins/console-logging/console-logging.addon.d.ts +26 -0
  76. package/dist/builtins/console-logging/console-logging.addon.d.ts.map +1 -0
  77. package/dist/builtins/console-logging/index.d.ts +4 -0
  78. package/dist/builtins/console-logging/index.d.ts.map +1 -0
  79. package/dist/builtins/console-logging/index.js +99 -235
  80. package/dist/builtins/console-logging/index.js.map +1 -1
  81. package/dist/builtins/console-logging/index.mjs +95 -9
  82. package/dist/builtins/console-logging/index.mjs.map +1 -1
  83. package/dist/builtins/device-manager/device-event-propagator.d.ts +27 -0
  84. package/dist/builtins/device-manager/device-event-propagator.d.ts.map +1 -0
  85. package/dist/builtins/device-manager/device-manager.addon.d.ts +259 -0
  86. package/dist/builtins/device-manager/device-manager.addon.d.ts.map +1 -0
  87. package/dist/builtins/device-manager/device-manager.addon.js +2125 -2127
  88. package/dist/builtins/device-manager/device-manager.addon.js.map +1 -1
  89. package/dist/builtins/device-manager/device-manager.addon.mjs +2145 -7
  90. package/dist/builtins/device-manager/device-manager.addon.mjs.map +1 -1
  91. package/dist/builtins/device-manager/index.d.ts +3 -0
  92. package/dist/builtins/device-manager/index.d.ts.map +1 -0
  93. package/dist/builtins/device-manager/index.js +6 -2156
  94. package/dist/builtins/device-manager/index.mjs +2 -10
  95. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +45 -0
  96. package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts.map +1 -0
  97. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +16 -0
  98. package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts.map +1 -0
  99. package/dist/builtins/hub-forwarder/index.d.ts +4 -0
  100. package/dist/builtins/hub-forwarder/index.d.ts.map +1 -0
  101. package/dist/builtins/hub-forwarder/index.js +150 -291
  102. package/dist/builtins/hub-forwarder/index.js.map +1 -1
  103. package/dist/builtins/hub-forwarder/index.mjs +145 -9
  104. package/dist/builtins/hub-forwarder/index.mjs.map +1 -1
  105. package/dist/builtins/local-auth/auth-schema.d.ts +12 -0
  106. package/dist/builtins/local-auth/auth-schema.d.ts.map +1 -0
  107. package/dist/builtins/local-auth/index.d.ts +2 -0
  108. package/dist/builtins/local-auth/index.d.ts.map +1 -0
  109. package/dist/builtins/local-auth/index.js +3 -623
  110. package/dist/builtins/local-auth/index.mjs +2 -8
  111. package/dist/builtins/local-auth/local-auth.addon.d.ts +17 -0
  112. package/dist/builtins/local-auth/local-auth.addon.d.ts.map +1 -0
  113. package/dist/builtins/local-auth/local-auth.addon.js +6861 -589
  114. package/dist/builtins/local-auth/local-auth.addon.js.map +1 -1
  115. package/dist/builtins/local-auth/local-auth.addon.mjs +6883 -7
  116. package/dist/builtins/local-auth/local-auth.addon.mjs.map +1 -1
  117. package/dist/builtins/local-network/index.d.ts +3 -0
  118. package/dist/builtins/local-network/index.d.ts.map +1 -0
  119. package/dist/builtins/local-network/index.js +9 -0
  120. package/dist/builtins/local-network/index.mjs +2 -0
  121. package/dist/builtins/local-network/local-network.addon.d.ts +102 -0
  122. package/dist/builtins/local-network/local-network.addon.d.ts.map +1 -0
  123. package/dist/builtins/local-network/local-network.addon.js +404 -0
  124. package/dist/builtins/local-network/local-network.addon.js.map +1 -0
  125. package/dist/builtins/local-network/local-network.addon.mjs +392 -0
  126. package/dist/builtins/local-network/local-network.addon.mjs.map +1 -0
  127. package/dist/builtins/mesh-orchestrator/index.d.ts +2 -0
  128. package/dist/builtins/mesh-orchestrator/index.d.ts.map +1 -0
  129. package/dist/builtins/mesh-orchestrator/index.js +7 -0
  130. package/dist/builtins/mesh-orchestrator/index.mjs +2 -0
  131. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts +9 -0
  132. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts.map +1 -0
  133. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js +83 -0
  134. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js.map +1 -0
  135. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs +77 -0
  136. package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs.map +1 -0
  137. package/dist/builtins/native-metrics/index.d.ts +3 -0
  138. package/dist/builtins/native-metrics/index.d.ts.map +1 -0
  139. package/dist/builtins/native-metrics/native-metrics-provider.d.ts +49 -0
  140. package/dist/builtins/native-metrics/native-metrics-provider.d.ts.map +1 -0
  141. package/dist/builtins/native-metrics/native-metrics.addon.d.ts +74 -0
  142. package/dist/builtins/native-metrics/native-metrics.addon.d.ts.map +1 -0
  143. package/dist/builtins/native-metrics/native-metrics.addon.js +887 -861
  144. package/dist/builtins/native-metrics/native-metrics.addon.js.map +1 -1
  145. package/dist/builtins/native-metrics/native-metrics.addon.mjs +914 -5
  146. package/dist/builtins/native-metrics/native-metrics.addon.mjs.map +1 -1
  147. package/dist/builtins/platform-probe/index.d.ts +12 -0
  148. package/dist/builtins/platform-probe/index.d.ts.map +1 -0
  149. package/dist/builtins/platform-probe/index.js +539 -0
  150. package/dist/builtins/platform-probe/index.js.map +1 -0
  151. package/dist/builtins/platform-probe/index.mjs +530 -0
  152. package/dist/builtins/platform-probe/index.mjs.map +1 -0
  153. package/dist/builtins/platform-probe/inference-config-resolver.d.ts +30 -0
  154. package/dist/builtins/platform-probe/inference-config-resolver.d.ts.map +1 -0
  155. package/dist/builtins/platform-probe/platform-scorer.d.ts +22 -0
  156. package/dist/builtins/platform-probe/platform-scorer.d.ts.map +1 -0
  157. package/dist/builtins/remote-access-orchestrator/index.d.ts +2 -0
  158. package/dist/builtins/remote-access-orchestrator/index.d.ts.map +1 -0
  159. package/dist/builtins/remote-access-orchestrator/index.js +7 -0
  160. package/dist/builtins/remote-access-orchestrator/index.mjs +2 -0
  161. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +9 -0
  162. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts.map +1 -0
  163. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +72 -0
  164. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js.map +1 -0
  165. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +66 -0
  166. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs.map +1 -0
  167. package/dist/builtins/snapshot/index.d.ts +3 -0
  168. package/dist/builtins/snapshot/index.d.ts.map +1 -0
  169. package/dist/builtins/snapshot/index.js +481 -491
  170. package/dist/builtins/snapshot/index.js.map +1 -1
  171. package/dist/builtins/snapshot/index.mjs +475 -464
  172. package/dist/builtins/snapshot/index.mjs.map +1 -1
  173. package/dist/builtins/snapshot/snapshot.addon.d.ts +121 -0
  174. package/dist/builtins/snapshot/snapshot.addon.d.ts.map +1 -0
  175. package/dist/builtins/sqlite-storage/config-store.d.ts +9 -0
  176. package/dist/builtins/sqlite-storage/config-store.d.ts.map +1 -0
  177. package/dist/builtins/sqlite-storage/device-store.d.ts +24 -0
  178. package/dist/builtins/sqlite-storage/device-store.d.ts.map +1 -0
  179. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +87 -0
  180. package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts.map +1 -0
  181. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +32 -0
  182. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts.map +1 -0
  183. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +312 -56
  184. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js.map +1 -1
  185. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +305 -7
  186. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs.map +1 -1
  187. package/dist/builtins/sqlite-storage/index.d.ts +12 -0
  188. package/dist/builtins/sqlite-storage/index.d.ts.map +1 -0
  189. package/dist/builtins/sqlite-storage/index.js +229 -1001
  190. package/dist/builtins/sqlite-storage/index.js.map +1 -1
  191. package/dist/builtins/sqlite-storage/index.mjs +268 -26
  192. package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
  193. package/dist/builtins/sqlite-storage/integration-registry.d.ts +28 -0
  194. package/dist/builtins/sqlite-storage/integration-registry.d.ts.map +1 -0
  195. package/dist/builtins/sqlite-storage/settings-store.d.ts +40 -0
  196. package/dist/builtins/sqlite-storage/settings-store.d.ts.map +1 -0
  197. package/dist/builtins/sqlite-storage/sql-schema.d.ts +33 -0
  198. package/dist/builtins/sqlite-storage/sql-schema.d.ts.map +1 -0
  199. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +94 -0
  200. package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts.map +1 -0
  201. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +15 -0
  202. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts.map +1 -0
  203. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +586 -653
  204. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js.map +1 -1
  205. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +582 -7
  206. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs.map +1 -1
  207. package/dist/builtins/storage-orchestrator/index.d.ts +7 -0
  208. package/dist/builtins/storage-orchestrator/index.d.ts.map +1 -0
  209. package/dist/builtins/storage-orchestrator/index.js +9 -0
  210. package/dist/builtins/storage-orchestrator/index.mjs +2 -0
  211. package/dist/builtins/storage-orchestrator/location-store.d.ts +50 -0
  212. package/dist/builtins/storage-orchestrator/location-store.d.ts.map +1 -0
  213. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +60 -0
  214. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts.map +1 -0
  215. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +755 -0
  216. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js.map +1 -0
  217. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +746 -0
  218. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs.map +1 -0
  219. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +121 -0
  220. package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts.map +1 -0
  221. package/dist/builtins/system-backup/system-backup.service.d.ts +138 -0
  222. package/dist/builtins/system-backup/system-backup.service.d.ts.map +1 -0
  223. package/dist/builtins/system-config/index.d.ts +2 -0
  224. package/dist/builtins/system-config/index.d.ts.map +1 -0
  225. package/dist/builtins/system-config/index.js +6 -188
  226. package/dist/builtins/system-config/index.mjs +2 -10
  227. package/dist/builtins/system-config/system-config.addon.d.ts +11 -0
  228. package/dist/builtins/system-config/system-config.addon.d.ts.map +1 -0
  229. package/dist/builtins/system-config/system-config.addon.js +227 -180
  230. package/dist/builtins/system-config/system-config.addon.js.map +1 -1
  231. package/dist/builtins/system-config/system-config.addon.mjs +226 -7
  232. package/dist/builtins/system-config/system-config.addon.mjs.map +1 -1
  233. package/dist/builtins/turn-orchestrator/index.d.ts +2 -0
  234. package/dist/builtins/turn-orchestrator/index.d.ts.map +1 -0
  235. package/dist/builtins/turn-orchestrator/index.js +7 -0
  236. package/dist/builtins/turn-orchestrator/index.mjs +2 -0
  237. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts +10 -0
  238. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts.map +1 -0
  239. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js +78 -0
  240. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js.map +1 -0
  241. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs +72 -0
  242. package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs.map +1 -0
  243. package/dist/builtins/winston-logging/index.d.ts +4 -0
  244. package/dist/builtins/winston-logging/index.d.ts.map +1 -0
  245. package/dist/builtins/winston-logging/index.js +153 -300
  246. package/dist/builtins/winston-logging/index.js.map +1 -1
  247. package/dist/builtins/winston-logging/index.mjs +144 -9
  248. package/dist/builtins/winston-logging/index.mjs.map +1 -1
  249. package/dist/builtins/winston-logging/winston-destination.d.ts +22 -0
  250. package/dist/builtins/winston-logging/winston-destination.d.ts.map +1 -0
  251. package/dist/builtins/winston-logging/winston-logging.addon.d.ts +20 -0
  252. package/dist/builtins/winston-logging/winston-logging.addon.d.ts.map +1 -0
  253. package/dist/chunk-C13QxCFV.js +50 -0
  254. package/dist/chunk-hT5z_Zn9.mjs +35 -0
  255. package/dist/download/model-download-service.d.ts +42 -0
  256. package/dist/download/model-download-service.d.ts.map +1 -0
  257. package/dist/download/model-downloader.d.ts +32 -0
  258. package/dist/download/model-downloader.d.ts.map +1 -0
  259. package/dist/events/event-bus.d.ts +11 -0
  260. package/dist/events/event-bus.d.ts.map +1 -0
  261. package/dist/events/system-event-bus.d.ts +15 -0
  262. package/dist/events/system-event-bus.d.ts.map +1 -0
  263. package/dist/feature/feature-manager.d.ts +12 -0
  264. package/dist/feature/feature-manager.d.ts.map +1 -0
  265. package/dist/formatter-C-5An4Bl.mjs +164 -0
  266. package/dist/formatter-C-5An4Bl.mjs.map +1 -0
  267. package/dist/formatter-Dr_6NNZc.js +169 -0
  268. package/dist/formatter-Dr_6NNZc.js.map +1 -0
  269. package/dist/index.d.ts +76 -1696
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.js +7780 -8035
  272. package/dist/index.js.map +1 -1
  273. package/dist/index.mjs +7707 -2148
  274. package/dist/index.mjs.map +1 -1
  275. package/dist/lifecycle/lifecycle-state-machine.d.ts +29 -0
  276. package/dist/lifecycle/lifecycle-state-machine.d.ts.map +1 -0
  277. package/dist/logging/formatter.d.ts +31 -0
  278. package/dist/logging/formatter.d.ts.map +1 -0
  279. package/dist/logging/log-manager.d.ts +52 -0
  280. package/dist/logging/log-manager.d.ts.map +1 -0
  281. package/dist/logging/log-ring-buffer.d.ts +48 -0
  282. package/dist/logging/log-ring-buffer.d.ts.map +1 -0
  283. package/dist/logging/scoped-logger.d.ts +18 -0
  284. package/dist/logging/scoped-logger.d.ts.map +1 -0
  285. package/dist/network/network-quality.d.ts +12 -0
  286. package/dist/network/network-quality.d.ts.map +1 -0
  287. package/dist/notification/notification-service.d.ts +38 -0
  288. package/dist/notification/notification-service.d.ts.map +1 -0
  289. package/dist/notification/toast-service.d.ts +23 -0
  290. package/dist/notification/toast-service.d.ts.map +1 -0
  291. package/dist/pipeline/engine-manager-resolver.d.ts +16 -0
  292. package/dist/pipeline/engine-manager-resolver.d.ts.map +1 -0
  293. package/dist/pipeline/pipeline-runner.d.ts +9 -0
  294. package/dist/pipeline/pipeline-runner.d.ts.map +1 -0
  295. package/dist/pipeline/pipeline-validator.d.ts +14 -0
  296. package/dist/pipeline/pipeline-validator.d.ts.map +1 -0
  297. package/dist/process/resource-monitor.d.ts +12 -0
  298. package/dist/process/resource-monitor.d.ts.map +1 -0
  299. package/dist/python/python-env-manager.d.ts +13 -0
  300. package/dist/python/python-env-manager.d.ts.map +1 -0
  301. package/dist/repl/interfaces.d.ts +32 -0
  302. package/dist/repl/interfaces.d.ts.map +1 -0
  303. package/dist/repl/repl-engine.d.ts +9 -0
  304. package/dist/repl/repl-engine.d.ts.map +1 -0
  305. package/dist/resource-monitor-CmuWlmap.js +76 -0
  306. package/dist/resource-monitor-CmuWlmap.js.map +1 -0
  307. package/dist/resource-monitor-DcQdKGYU.mjs +59 -0
  308. package/dist/resource-monitor-DcQdKGYU.mjs.map +1 -0
  309. package/dist/storage/fs-storage-backend.d.ts +41 -0
  310. package/dist/storage/fs-storage-backend.d.ts.map +1 -0
  311. package/dist/storage/storage-location-manager.d.ts +24 -0
  312. package/dist/storage/storage-location-manager.d.ts.map +1 -0
  313. package/dist/storage/storage-manager.d.ts +77 -0
  314. package/dist/storage/storage-manager.d.ts.map +1 -0
  315. package/dist/tls/cert-manager.d.ts +27 -0
  316. package/dist/tls/cert-manager.d.ts.map +1 -0
  317. package/dist/tls/index.d.ts +2 -0
  318. package/dist/tls/index.d.ts.map +1 -0
  319. package/package.json +119 -23
  320. package/dist/builtins/addon-pages-aggregator/index.js.map +0 -1
  321. package/dist/builtins/addon-pages-aggregator/index.mjs.map +0 -1
  322. package/dist/builtins/addon-widgets-aggregator/index.js.map +0 -1
  323. package/dist/builtins/addon-widgets-aggregator/index.mjs.map +0 -1
  324. package/dist/builtins/alerts/index.js.map +0 -1
  325. package/dist/builtins/alerts/index.mjs.map +0 -1
  326. package/dist/builtins/device-manager/index.js.map +0 -1
  327. package/dist/builtins/device-manager/index.mjs.map +0 -1
  328. package/dist/builtins/local-auth/index.js.map +0 -1
  329. package/dist/builtins/local-auth/index.mjs.map +0 -1
  330. package/dist/builtins/local-backup/index.js +0 -173
  331. package/dist/builtins/local-backup/index.js.map +0 -1
  332. package/dist/builtins/local-backup/index.mjs +0 -10
  333. package/dist/builtins/local-backup/index.mjs.map +0 -1
  334. package/dist/builtins/system-config/index.js.map +0 -1
  335. package/dist/builtins/system-config/index.mjs.map +0 -1
  336. package/dist/chunk-2CIYKDRN.mjs +0 -1
  337. package/dist/chunk-2CIYKDRN.mjs.map +0 -1
  338. package/dist/chunk-2F76X6NL.mjs +0 -136
  339. package/dist/chunk-2F76X6NL.mjs.map +0 -1
  340. package/dist/chunk-2QUFBZ7M.mjs +0 -1
  341. package/dist/chunk-2QUFBZ7M.mjs.map +0 -1
  342. package/dist/chunk-3BK2Y7GY.mjs +0 -593
  343. package/dist/chunk-3BK2Y7GY.mjs.map +0 -1
  344. package/dist/chunk-4OOHFJHT.mjs +0 -421
  345. package/dist/chunk-4OOHFJHT.mjs.map +0 -1
  346. package/dist/chunk-4XHB7IHT.mjs +0 -809
  347. package/dist/chunk-4XHB7IHT.mjs.map +0 -1
  348. package/dist/chunk-6M2HSSTQ.mjs +0 -98
  349. package/dist/chunk-6M2HSSTQ.mjs.map +0 -1
  350. package/dist/chunk-7FI7SQS7.mjs +0 -135
  351. package/dist/chunk-7FI7SQS7.mjs.map +0 -1
  352. package/dist/chunk-ED57RCQE.mjs +0 -171
  353. package/dist/chunk-ED57RCQE.mjs.map +0 -1
  354. package/dist/chunk-FZN56HGQ.mjs +0 -626
  355. package/dist/chunk-FZN56HGQ.mjs.map +0 -1
  356. package/dist/chunk-GL4OOB25.mjs +0 -51
  357. package/dist/chunk-GL4OOB25.mjs.map +0 -1
  358. package/dist/chunk-KDG2NTDB.mjs +0 -137
  359. package/dist/chunk-KDG2NTDB.mjs.map +0 -1
  360. package/dist/chunk-NRBQWBDM.mjs +0 -191
  361. package/dist/chunk-NRBQWBDM.mjs.map +0 -1
  362. package/dist/chunk-O4V246GG.mjs +0 -2137
  363. package/dist/chunk-O4V246GG.mjs.map +0 -1
  364. package/dist/chunk-QT57H266.mjs +0 -163
  365. package/dist/chunk-QT57H266.mjs.map +0 -1
  366. package/dist/chunk-QX4RH25I.mjs +0 -141
  367. package/dist/chunk-QX4RH25I.mjs.map +0 -1
  368. package/dist/chunk-TB562PZX.mjs +0 -86
  369. package/dist/chunk-TB562PZX.mjs.map +0 -1
  370. package/dist/chunk-TDYPZXK5.mjs +0 -1
  371. package/dist/chunk-TDYPZXK5.mjs.map +0 -1
  372. package/dist/chunk-UJI4LN5P.mjs +0 -36
  373. package/dist/chunk-UJI4LN5P.mjs.map +0 -1
  374. package/dist/chunk-W6RTHQGP.mjs +0 -1
  375. package/dist/chunk-W6RTHQGP.mjs.map +0 -1
  376. package/dist/chunk-ZELBCPDC.mjs +0 -369
  377. package/dist/chunk-ZELBCPDC.mjs.map +0 -1
  378. package/dist/index.d.mts +0 -1696
  379. package/dist/resource-monitor-UZUGPIAU.mjs +0 -9
  380. package/dist/resource-monitor-UZUGPIAU.mjs.map +0 -1
  381. package/dist/storage-location-manager-HFNB3PCS.mjs +0 -7
  382. package/dist/storage-location-manager-HFNB3PCS.mjs.map +0 -1
@@ -1,187 +1,234 @@
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
-
20
- // src/builtins/system-config/system-config.addon.ts
21
- var system_config_addon_exports = {};
22
- __export(system_config_addon_exports, {
23
- SystemConfigAddon: () => SystemConfigAddon,
24
- default: () => system_config_addon_default
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
25
4
  });
26
- module.exports = __toCommonJS(system_config_addon_exports);
27
- var import_types = require("@camstack/types");
5
+ require("../../chunk-C13QxCFV.js");
6
+ let _camstack_types = require("@camstack/types");
7
+ //#region src/builtins/system-config/system-config.addon.ts
8
+ /**
9
+ * Built-in `system-config` addon — Phase 4 of the settings redesign.
10
+ *
11
+ * Exposes the cluster-wide yml-backed sections that the bootstrap
12
+ * loader reads before any addon is instantiated — things that cannot
13
+ * live inside an addon because changing them requires a server
14
+ * restart (port, host, dataPath) or because they own no runtime
15
+ * state of their own (auth token expiry, global ffmpeg binary path).
16
+ *
17
+ * Sections exposed:
18
+ * - server (port, host, dataPath — READ-ONLY, loaded from config.yaml at bootstrap)
19
+ * - auth (tokenExpiry)
20
+ * - ffmpeg (binaryPath, hwAccel, threadCount)
21
+ *
22
+ * Sections NOT exposed (each owned by the addon that implements them):
23
+ * - logging → `winston-logging` addon (level + retention)
24
+ * - recording → `recording` addon (segment duration, retention)
25
+ * - retention → analytics / detection addons (per-table retention)
26
+ *
27
+ * Implementation notes:
28
+ * - Runs only on the hub process (yml sections are hub-side state).
29
+ * On agent nodes this addon would still instantiate, but every
30
+ * `ctx.settings.getSection(section)` call would hit an empty
31
+ * ConfigManager section so the UI would show the schema defaults.
32
+ * In practice the built-in loader can skip it on agents; for now we
33
+ * just let it run everywhere because it's harmless.
34
+ * - Reads via `ctx.settings.getSection(section)` and writes via
35
+ * `ctx.settings.setSection(section, patch)` — the explicit
36
+ * yml-section pair on `AddonSettingsApi`.
37
+ * - Does NOT register as a capability provider. It's a pure "settings
38
+ * surface" addon — its sole purpose is to expose the yml sections
39
+ * through the new three-level settings API.
40
+ *
41
+ * This addon is declared in `@camstack/core`'s package.json `camstack.addons[]`
42
+ * and loaded automatically via AddonLoader like any other core built-in.
43
+ */
44
+ /** Section key → user-facing section title. */
28
45
  var SECTION_TITLES = {
29
- server: "Server",
30
- auth: "Authentication",
31
- ffmpeg: "FFmpeg"
46
+ server: "Server",
47
+ auth: "Authentication",
48
+ ffmpeg: "FFmpeg"
32
49
  };
50
+ /** Keys that map 1:1 to a given yml section — used by `updateGlobalSettings`
51
+ * to figure out which section owns each key in the incoming patch. */
33
52
  var KEY_TO_SECTION = {
34
- // server (read-only)
35
- port: "server",
36
- host: "server",
37
- dataPath: "server",
38
- // auth
39
- tokenExpiry: "auth",
40
- // ffmpeg
41
- binaryPath: "ffmpeg",
42
- hwAccel: "ffmpeg",
43
- threadCount: "ffmpeg"
53
+ port: "server",
54
+ host: "server",
55
+ dataPath: "server",
56
+ tokenExpiry: "auth",
57
+ binaryPath: "ffmpeg",
58
+ hwAccel: "ffmpeg",
59
+ threadCount: "ffmpeg"
44
60
  };
45
- var SystemConfigAddon = class extends import_types.BaseAddon {
46
- id = "system-config";
47
- constructor() {
48
- super({});
49
- }
50
- async onInitialize() {
51
- this.ctx.logger.info("Initialized \u2014 exposes yml-backed sections via getGlobalSettings");
52
- }
53
- // ── Three-level settings API (only `getGlobalSettings` is implemented) ──
54
- buildGlobalSchema() {
55
- return {
56
- sections: [
57
- {
58
- id: "system-config-server",
59
- title: SECTION_TITLES["server"],
60
- description: "Core server connection settings \u2014 read-only, loaded from config.yaml at bootstrap.",
61
- columns: 2,
62
- fields: [
63
- {
64
- type: "info",
65
- key: "server-restart-note",
66
- label: "Restart required",
67
- content: "Server settings are read-only. Change them in config.yaml and restart.",
68
- variant: "warning"
69
- },
70
- { type: "text", key: "port", label: "Port", description: "Listening port", disabled: true },
71
- { type: "text", key: "host", label: "Host", description: "Bind address", disabled: true },
72
- { type: "text", key: "dataPath", label: "Data Path", description: "Root data directory", disabled: true, span: 2 }
73
- ]
74
- },
75
- {
76
- id: "system-config-auth",
77
- title: SECTION_TITLES["auth"],
78
- description: "Token and session settings.",
79
- columns: 1,
80
- fields: [
81
- {
82
- type: "text",
83
- key: "tokenExpiry",
84
- label: "Token Expiry",
85
- description: "JWT token lifetime (e.g. 24h, 7d, 1h)",
86
- placeholder: "24h",
87
- default: "24h"
88
- }
89
- ]
90
- },
91
- {
92
- id: "system-config-ffmpeg",
93
- title: SECTION_TITLES["ffmpeg"],
94
- description: "FFmpeg binary and hardware acceleration settings.",
95
- columns: 2,
96
- fields: [
97
- {
98
- type: "text",
99
- key: "binaryPath",
100
- label: "Binary Path",
101
- description: "Path to ffmpeg executable",
102
- placeholder: "ffmpeg",
103
- default: "ffmpeg",
104
- span: 2
105
- },
106
- {
107
- type: "select",
108
- key: "hwAccel",
109
- label: "Hardware Acceleration",
110
- description: "GPU decoding/encoding backend",
111
- default: "auto",
112
- options: [
113
- { value: "auto", label: "Auto-detect" },
114
- { value: "none", label: "None (CPU only)" },
115
- { value: "videotoolbox", label: "VideoToolbox (macOS)" },
116
- { value: "vaapi", label: "VA-API (Linux Intel/AMD)" },
117
- { value: "qsv", label: "QSV (Intel Quick Sync)" },
118
- { value: "cuda", label: "CUDA (NVIDIA)" }
119
- ]
120
- },
121
- {
122
- type: "number",
123
- key: "threadCount",
124
- label: "Thread Count",
125
- description: "0 = auto (let FFmpeg decide)",
126
- min: 0,
127
- max: 16,
128
- step: 1,
129
- default: 0
130
- }
131
- ]
132
- }
133
- ]
134
- };
135
- }
136
- async getGlobalSettings() {
137
- const schema = this.buildGlobalSchema();
138
- if (!this.ctx.settings) {
139
- return (0, import_types.hydrateSchema)(schema, {});
140
- }
141
- const sectionNames = Object.keys(SECTION_TITLES);
142
- const merged = {};
143
- for (const section of sectionNames) {
144
- try {
145
- const values = await this.ctx.settings.getSection(section);
146
- Object.assign(merged, values);
147
- } catch (err) {
148
- const msg = (0, import_types.errMsg)(err);
149
- this.ctx.logger.debug("Failed to read section", { meta: { section, error: msg } });
150
- }
151
- }
152
- return (0, import_types.hydrateSchema)(schema, merged);
153
- }
154
- async updateGlobalSettings(patch) {
155
- if (!this.ctx.settings) {
156
- throw new Error("system-config: ctx.settings not available \u2014 cannot write sections");
157
- }
158
- const perSection = /* @__PURE__ */ new Map();
159
- for (const [key, value] of Object.entries(patch)) {
160
- const section = KEY_TO_SECTION[key];
161
- if (section === void 0) {
162
- this.ctx.logger.warn("update ignored unknown key (not mapped to any section)", { meta: { key } });
163
- continue;
164
- }
165
- if (section === "server") {
166
- this.ctx.logger.warn("update ignored read-only server-section key", { meta: { key } });
167
- continue;
168
- }
169
- let bucket = perSection.get(section);
170
- if (!bucket) {
171
- bucket = {};
172
- perSection.set(section, bucket);
173
- }
174
- bucket[key] = value;
175
- }
176
- for (const [section, sectionPatch] of perSection) {
177
- await this.ctx.settings.setSection(section, sectionPatch);
178
- this.ctx.logger.info("Wrote keys to section", { meta: { section, keyCount: Object.keys(sectionPatch).length } });
179
- }
180
- }
61
+ var SystemConfigAddon = class extends _camstack_types.BaseAddon {
62
+ id = "system-config";
63
+ constructor() {
64
+ super({});
65
+ }
66
+ async onInitialize() {
67
+ this.ctx.logger.info("Initialized exposes yml-backed sections via getGlobalSettings");
68
+ }
69
+ buildGlobalSchema() {
70
+ return { sections: [
71
+ {
72
+ id: "system-config-server",
73
+ title: SECTION_TITLES["server"],
74
+ description: "Core server connection settings — read-only, loaded from config.yaml at bootstrap.",
75
+ columns: 2,
76
+ fields: [
77
+ {
78
+ type: "info",
79
+ key: "server-restart-note",
80
+ label: "Restart required",
81
+ content: "Server settings are read-only. Change them in config.yaml and restart.",
82
+ variant: "warning"
83
+ },
84
+ {
85
+ type: "text",
86
+ key: "port",
87
+ label: "Port",
88
+ description: "Listening port",
89
+ disabled: true
90
+ },
91
+ {
92
+ type: "text",
93
+ key: "host",
94
+ label: "Host",
95
+ description: "Bind address",
96
+ disabled: true
97
+ },
98
+ {
99
+ type: "text",
100
+ key: "dataPath",
101
+ label: "Data Path",
102
+ description: "Root data directory",
103
+ disabled: true,
104
+ span: 2
105
+ }
106
+ ]
107
+ },
108
+ {
109
+ id: "system-config-auth",
110
+ title: SECTION_TITLES["auth"],
111
+ description: "Token and session settings.",
112
+ columns: 1,
113
+ fields: [{
114
+ type: "text",
115
+ key: "tokenExpiry",
116
+ label: "Token Expiry",
117
+ description: "JWT token lifetime (e.g. 24h, 7d, 1h)",
118
+ placeholder: "24h",
119
+ default: "24h"
120
+ }]
121
+ },
122
+ {
123
+ id: "system-config-ffmpeg",
124
+ title: SECTION_TITLES["ffmpeg"],
125
+ description: "FFmpeg binary and hardware acceleration settings.",
126
+ columns: 2,
127
+ fields: [
128
+ {
129
+ type: "text",
130
+ key: "binaryPath",
131
+ label: "Binary Path",
132
+ description: "Path to ffmpeg executable",
133
+ placeholder: "ffmpeg",
134
+ default: "ffmpeg",
135
+ span: 2
136
+ },
137
+ {
138
+ type: "select",
139
+ key: "hwAccel",
140
+ label: "Hardware Acceleration",
141
+ description: "GPU decoding/encoding backend",
142
+ default: "auto",
143
+ options: [
144
+ {
145
+ value: "auto",
146
+ label: "Auto-detect"
147
+ },
148
+ {
149
+ value: "none",
150
+ label: "None (CPU only)"
151
+ },
152
+ {
153
+ value: "videotoolbox",
154
+ label: "VideoToolbox (macOS)"
155
+ },
156
+ {
157
+ value: "vaapi",
158
+ label: "VA-API (Linux Intel/AMD)"
159
+ },
160
+ {
161
+ value: "qsv",
162
+ label: "QSV (Intel Quick Sync)"
163
+ },
164
+ {
165
+ value: "cuda",
166
+ label: "CUDA (NVIDIA)"
167
+ }
168
+ ]
169
+ },
170
+ {
171
+ type: "number",
172
+ key: "threadCount",
173
+ label: "Thread Count",
174
+ description: "0 = auto (let FFmpeg decide)",
175
+ min: 0,
176
+ max: 16,
177
+ step: 1,
178
+ default: 0
179
+ }
180
+ ]
181
+ }
182
+ ] };
183
+ }
184
+ async getGlobalSettings() {
185
+ const schema = this.buildGlobalSchema();
186
+ if (!this.ctx.settings) return (0, _camstack_types.hydrateSchema)(schema, {});
187
+ const sectionNames = Object.keys(SECTION_TITLES);
188
+ const merged = {};
189
+ for (const section of sectionNames) try {
190
+ const values = await this.ctx.settings.getSection(section);
191
+ Object.assign(merged, values);
192
+ } catch (err) {
193
+ const msg = (0, _camstack_types.errMsg)(err);
194
+ this.ctx.logger.debug("Failed to read section", { meta: {
195
+ section,
196
+ error: msg
197
+ } });
198
+ }
199
+ return (0, _camstack_types.hydrateSchema)(schema, merged);
200
+ }
201
+ async updateGlobalSettings(patch) {
202
+ if (!this.ctx.settings) throw new Error("system-config: ctx.settings not available — cannot write sections");
203
+ const perSection = /* @__PURE__ */ new Map();
204
+ for (const [key, value] of Object.entries(patch)) {
205
+ const section = KEY_TO_SECTION[key];
206
+ if (section === void 0) {
207
+ this.ctx.logger.warn("update ignored unknown key (not mapped to any section)", { meta: { key } });
208
+ continue;
209
+ }
210
+ if (section === "server") {
211
+ this.ctx.logger.warn("update ignored read-only server-section key", { meta: { key } });
212
+ continue;
213
+ }
214
+ let bucket = perSection.get(section);
215
+ if (!bucket) {
216
+ bucket = {};
217
+ perSection.set(section, bucket);
218
+ }
219
+ bucket[key] = value;
220
+ }
221
+ for (const [section, sectionPatch] of perSection) {
222
+ await this.ctx.settings.setSection(section, sectionPatch);
223
+ this.ctx.logger.info("Wrote keys to section", { meta: {
224
+ section,
225
+ keyCount: Object.keys(sectionPatch).length
226
+ } });
227
+ }
228
+ }
181
229
  };
182
- var system_config_addon_default = SystemConfigAddon;
183
- // Annotate the CommonJS export names for ESM import in node:
184
- 0 && (module.exports = {
185
- SystemConfigAddon
186
- });
230
+ //#endregion
231
+ exports.SystemConfigAddon = SystemConfigAddon;
232
+ exports.default = SystemConfigAddon;
233
+
187
234
  //# sourceMappingURL=system-config.addon.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/builtins/system-config/system-config.addon.ts"],"sourcesContent":["import type {\n ConfigUISchema,\n ConfigUISchemaWithValues,\n} from '@camstack/types'\nimport { BaseAddon, hydrateSchema , errMsg } from '@camstack/types'\n\n/**\n * Built-in `system-config` addon — Phase 4 of the settings redesign.\n *\n * Exposes the cluster-wide yml-backed sections that the bootstrap\n * loader reads before any addon is instantiated — things that cannot\n * live inside an addon because changing them requires a server\n * restart (port, host, dataPath) or because they own no runtime\n * state of their own (auth token expiry, global ffmpeg binary path).\n *\n * Sections exposed:\n * - server (port, host, dataPath — READ-ONLY, loaded from config.yaml at bootstrap)\n * - auth (tokenExpiry)\n * - ffmpeg (binaryPath, hwAccel, threadCount)\n *\n * Sections NOT exposed (each owned by the addon that implements them):\n * - logging → `winston-logging` addon (level + retention)\n * - recording → `recording` addon (segment duration, retention)\n * - retention → analytics / detection addons (per-table retention)\n *\n * Implementation notes:\n * - Runs only on the hub process (yml sections are hub-side state).\n * On agent nodes this addon would still instantiate, but every\n * `ctx.settings.getSection(section)` call would hit an empty\n * ConfigManager section so the UI would show the schema defaults.\n * In practice the built-in loader can skip it on agents; for now we\n * just let it run everywhere because it's harmless.\n * - Reads via `ctx.settings.getSection(section)` and writes via\n * `ctx.settings.setSection(section, patch)` — the explicit\n * yml-section pair on `AddonSettingsApi`.\n * - Does NOT register as a capability provider. It's a pure \"settings\n * surface\" addon — its sole purpose is to expose the yml sections\n * through the new three-level settings API.\n *\n * This addon is declared in `@camstack/core`'s package.json `camstack.addons[]`\n * and loaded automatically via AddonLoader like any other core built-in.\n */\n\n/** Section key → user-facing section title. */\nconst SECTION_TITLES: Readonly<Record<string, string>> = {\n server: 'Server',\n auth: 'Authentication',\n ffmpeg: 'FFmpeg',\n}\n\n/** Keys that map 1:1 to a given yml section — used by `updateGlobalSettings`\n * to figure out which section owns each key in the incoming patch. */\nconst KEY_TO_SECTION: Readonly<Record<string, string>> = {\n // server (read-only)\n port: 'server',\n host: 'server',\n dataPath: 'server',\n // auth\n tokenExpiry: 'auth',\n // ffmpeg\n binaryPath: 'ffmpeg',\n hwAccel: 'ffmpeg',\n threadCount: 'ffmpeg',\n}\n\nexport class SystemConfigAddon extends BaseAddon {\n readonly id = 'system-config'\n\n constructor() { super({}) }\n\n protected async onInitialize(): Promise<void> {\n this.ctx.logger.info('Initialized — exposes yml-backed sections via getGlobalSettings')\n }\n\n // ── Three-level settings API (only `getGlobalSettings` is implemented) ──\n\n private buildGlobalSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'system-config-server',\n title: SECTION_TITLES['server']!,\n description: 'Core server connection settings — read-only, loaded from config.yaml at bootstrap.',\n columns: 2,\n fields: [\n {\n type: 'info',\n key: 'server-restart-note',\n label: 'Restart required',\n content: 'Server settings are read-only. Change them in config.yaml and restart.',\n variant: 'warning',\n },\n { type: 'text', key: 'port', label: 'Port', description: 'Listening port', disabled: true },\n { type: 'text', key: 'host', label: 'Host', description: 'Bind address', disabled: true },\n { type: 'text', key: 'dataPath', label: 'Data Path', description: 'Root data directory', disabled: true, span: 2 },\n ],\n },\n {\n id: 'system-config-auth',\n title: SECTION_TITLES['auth']!,\n description: 'Token and session settings.',\n columns: 1,\n fields: [\n {\n type: 'text',\n key: 'tokenExpiry',\n label: 'Token Expiry',\n description: 'JWT token lifetime (e.g. 24h, 7d, 1h)',\n placeholder: '24h',\n default: '24h',\n },\n ],\n },\n {\n id: 'system-config-ffmpeg',\n title: SECTION_TITLES['ffmpeg']!,\n description: 'FFmpeg binary and hardware acceleration settings.',\n columns: 2,\n fields: [\n {\n type: 'text',\n key: 'binaryPath',\n label: 'Binary Path',\n description: 'Path to ffmpeg executable',\n placeholder: 'ffmpeg',\n default: 'ffmpeg',\n span: 2,\n },\n {\n type: 'select',\n key: 'hwAccel',\n label: 'Hardware Acceleration',\n description: 'GPU decoding/encoding backend',\n default: 'auto',\n options: [\n { value: 'auto', label: 'Auto-detect' },\n { value: 'none', label: 'None (CPU only)' },\n { value: 'videotoolbox', label: 'VideoToolbox (macOS)' },\n { value: 'vaapi', label: 'VA-API (Linux Intel/AMD)' },\n { value: 'qsv', label: 'QSV (Intel Quick Sync)' },\n { value: 'cuda', label: 'CUDA (NVIDIA)' },\n ],\n },\n {\n type: 'number',\n key: 'threadCount',\n label: 'Thread Count',\n description: '0 = auto (let FFmpeg decide)',\n min: 0,\n max: 16,\n step: 1,\n default: 0,\n },\n ],\n },\n ],\n }\n }\n\n async getGlobalSettings(): Promise<ConfigUISchemaWithValues> {\n const schema = this.buildGlobalSchema()\n if (!this.ctx.settings) {\n return hydrateSchema(schema, {})\n }\n\n // Read all yml sections in parallel and merge their values into a\n // single flat record keyed by field name. The `KEY_TO_SECTION` map\n // guarantees uniqueness (each key belongs to exactly one section).\n const sectionNames = Object.keys(SECTION_TITLES)\n const merged: Record<string, unknown> = {}\n for (const section of sectionNames) {\n try {\n const values = await this.ctx.settings!.getSection(section)\n Object.assign(merged, values)\n } catch (err: unknown) {\n const msg = errMsg(err)\n this.ctx.logger.debug('Failed to read section', { meta: { section, error: msg } })\n }\n }\n\n return hydrateSchema(schema, merged)\n }\n\n async updateGlobalSettings(patch: Record<string, unknown>): Promise<void> {\n if (!this.ctx.settings) {\n throw new Error('system-config: ctx.settings not available — cannot write sections')\n }\n\n // Group the patch keys by the section they belong to, then write\n // each section in one shot via ctx.settings.setSection(). The\n // server section is read-only, so any keys targeting it are skipped\n // with a warning.\n const perSection = new Map<string, Record<string, unknown>>()\n for (const [key, value] of Object.entries(patch)) {\n const section = KEY_TO_SECTION[key]\n if (section === undefined) {\n this.ctx.logger.warn('update ignored unknown key (not mapped to any section)', { meta: { key } })\n continue\n }\n if (section === 'server') {\n this.ctx.logger.warn('update ignored read-only server-section key', { meta: { key } })\n continue\n }\n let bucket = perSection.get(section)\n if (!bucket) {\n bucket = {}\n perSection.set(section, bucket)\n }\n bucket[key] = value\n }\n\n for (const [section, sectionPatch] of perSection) {\n await this.ctx.settings!.setSection(section, sectionPatch)\n this.ctx.logger.info('Wrote keys to section', { meta: { section, keyCount: Object.keys(sectionPatch).length } })\n }\n }\n}\n\nexport default SystemConfigAddon\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"system-config.addon.js","names":[],"sources":["../../../src/builtins/system-config/system-config.addon.ts"],"sourcesContent":["import type {\n ConfigUISchema,\n ConfigUISchemaWithValues,\n} from '@camstack/types'\nimport { BaseAddon, hydrateSchema , errMsg } from '@camstack/types'\n\n/**\n * Built-in `system-config` addon — Phase 4 of the settings redesign.\n *\n * Exposes the cluster-wide yml-backed sections that the bootstrap\n * loader reads before any addon is instantiated — things that cannot\n * live inside an addon because changing them requires a server\n * restart (port, host, dataPath) or because they own no runtime\n * state of their own (auth token expiry, global ffmpeg binary path).\n *\n * Sections exposed:\n * - server (port, host, dataPath — READ-ONLY, loaded from config.yaml at bootstrap)\n * - auth (tokenExpiry)\n * - ffmpeg (binaryPath, hwAccel, threadCount)\n *\n * Sections NOT exposed (each owned by the addon that implements them):\n * - logging → `winston-logging` addon (level + retention)\n * - recording → `recording` addon (segment duration, retention)\n * - retention → analytics / detection addons (per-table retention)\n *\n * Implementation notes:\n * - Runs only on the hub process (yml sections are hub-side state).\n * On agent nodes this addon would still instantiate, but every\n * `ctx.settings.getSection(section)` call would hit an empty\n * ConfigManager section so the UI would show the schema defaults.\n * In practice the built-in loader can skip it on agents; for now we\n * just let it run everywhere because it's harmless.\n * - Reads via `ctx.settings.getSection(section)` and writes via\n * `ctx.settings.setSection(section, patch)` — the explicit\n * yml-section pair on `AddonSettingsApi`.\n * - Does NOT register as a capability provider. It's a pure \"settings\n * surface\" addon — its sole purpose is to expose the yml sections\n * through the new three-level settings API.\n *\n * This addon is declared in `@camstack/core`'s package.json `camstack.addons[]`\n * and loaded automatically via AddonLoader like any other core built-in.\n */\n\n/** Section key → user-facing section title. */\nconst SECTION_TITLES: Readonly<Record<string, string>> = {\n server: 'Server',\n auth: 'Authentication',\n ffmpeg: 'FFmpeg',\n}\n\n/** Keys that map 1:1 to a given yml section — used by `updateGlobalSettings`\n * to figure out which section owns each key in the incoming patch. */\nconst KEY_TO_SECTION: Readonly<Record<string, string>> = {\n // server (read-only)\n port: 'server',\n host: 'server',\n dataPath: 'server',\n // auth\n tokenExpiry: 'auth',\n // ffmpeg\n binaryPath: 'ffmpeg',\n hwAccel: 'ffmpeg',\n threadCount: 'ffmpeg',\n}\n\nexport class SystemConfigAddon extends BaseAddon {\n readonly id = 'system-config'\n\n constructor() { super({}) }\n\n protected async onInitialize(): Promise<void> {\n this.ctx.logger.info('Initialized — exposes yml-backed sections via getGlobalSettings')\n }\n\n // ── Three-level settings API (only `getGlobalSettings` is implemented) ──\n\n private buildGlobalSchema(): ConfigUISchema {\n return {\n sections: [\n {\n id: 'system-config-server',\n title: SECTION_TITLES['server']!,\n description: 'Core server connection settings — read-only, loaded from config.yaml at bootstrap.',\n columns: 2,\n fields: [\n {\n type: 'info',\n key: 'server-restart-note',\n label: 'Restart required',\n content: 'Server settings are read-only. Change them in config.yaml and restart.',\n variant: 'warning',\n },\n { type: 'text', key: 'port', label: 'Port', description: 'Listening port', disabled: true },\n { type: 'text', key: 'host', label: 'Host', description: 'Bind address', disabled: true },\n { type: 'text', key: 'dataPath', label: 'Data Path', description: 'Root data directory', disabled: true, span: 2 },\n ],\n },\n {\n id: 'system-config-auth',\n title: SECTION_TITLES['auth']!,\n description: 'Token and session settings.',\n columns: 1,\n fields: [\n {\n type: 'text',\n key: 'tokenExpiry',\n label: 'Token Expiry',\n description: 'JWT token lifetime (e.g. 24h, 7d, 1h)',\n placeholder: '24h',\n default: '24h',\n },\n ],\n },\n {\n id: 'system-config-ffmpeg',\n title: SECTION_TITLES['ffmpeg']!,\n description: 'FFmpeg binary and hardware acceleration settings.',\n columns: 2,\n fields: [\n {\n type: 'text',\n key: 'binaryPath',\n label: 'Binary Path',\n description: 'Path to ffmpeg executable',\n placeholder: 'ffmpeg',\n default: 'ffmpeg',\n span: 2,\n },\n {\n type: 'select',\n key: 'hwAccel',\n label: 'Hardware Acceleration',\n description: 'GPU decoding/encoding backend',\n default: 'auto',\n options: [\n { value: 'auto', label: 'Auto-detect' },\n { value: 'none', label: 'None (CPU only)' },\n { value: 'videotoolbox', label: 'VideoToolbox (macOS)' },\n { value: 'vaapi', label: 'VA-API (Linux Intel/AMD)' },\n { value: 'qsv', label: 'QSV (Intel Quick Sync)' },\n { value: 'cuda', label: 'CUDA (NVIDIA)' },\n ],\n },\n {\n type: 'number',\n key: 'threadCount',\n label: 'Thread Count',\n description: '0 = auto (let FFmpeg decide)',\n min: 0,\n max: 16,\n step: 1,\n default: 0,\n },\n ],\n },\n ],\n }\n }\n\n async getGlobalSettings(): Promise<ConfigUISchemaWithValues> {\n const schema = this.buildGlobalSchema()\n if (!this.ctx.settings) {\n return hydrateSchema(schema, {})\n }\n\n // Read all yml sections in parallel and merge their values into a\n // single flat record keyed by field name. The `KEY_TO_SECTION` map\n // guarantees uniqueness (each key belongs to exactly one section).\n const sectionNames = Object.keys(SECTION_TITLES)\n const merged: Record<string, unknown> = {}\n for (const section of sectionNames) {\n try {\n const values = await this.ctx.settings!.getSection(section)\n Object.assign(merged, values)\n } catch (err: unknown) {\n const msg = errMsg(err)\n this.ctx.logger.debug('Failed to read section', { meta: { section, error: msg } })\n }\n }\n\n return hydrateSchema(schema, merged)\n }\n\n async updateGlobalSettings(patch: Record<string, unknown>): Promise<void> {\n if (!this.ctx.settings) {\n throw new Error('system-config: ctx.settings not available — cannot write sections')\n }\n\n // Group the patch keys by the section they belong to, then write\n // each section in one shot via ctx.settings.setSection(). The\n // server section is read-only, so any keys targeting it are skipped\n // with a warning.\n const perSection = new Map<string, Record<string, unknown>>()\n for (const [key, value] of Object.entries(patch)) {\n const section = KEY_TO_SECTION[key]\n if (section === undefined) {\n this.ctx.logger.warn('update ignored unknown key (not mapped to any section)', { meta: { key } })\n continue\n }\n if (section === 'server') {\n this.ctx.logger.warn('update ignored read-only server-section key', { meta: { key } })\n continue\n }\n let bucket = perSection.get(section)\n if (!bucket) {\n bucket = {}\n perSection.set(section, bucket)\n }\n bucket[key] = value\n }\n\n for (const [section, sectionPatch] of perSection) {\n await this.ctx.settings!.setSection(section, sectionPatch)\n this.ctx.logger.info('Wrote keys to section', { meta: { section, keyCount: Object.keys(sectionPatch).length } })\n }\n }\n}\n\nexport default SystemConfigAddon\n"],"mappings":"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"}