@camstack/core 0.1.14 → 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 (352) 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 +226 -0
  18. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js.map +1 -0
  19. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +218 -0
  20. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs.map +1 -0
  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 +7 -0
  24. package/dist/builtins/addon-pages-aggregator/index.mjs +2 -0
  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 +202 -0
  28. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js.map +1 -0
  29. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +194 -0
  30. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs.map +1 -0
  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 +7 -0
  34. package/dist/builtins/addon-widgets-aggregator/index.mjs +2 -0
  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 +603 -0
  38. package/dist/builtins/alerts/alerts.addon.js.map +1 -0
  39. package/dist/builtins/alerts/alerts.addon.mjs +597 -0
  40. package/dist/builtins/alerts/alerts.addon.mjs.map +1 -0
  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 -0
  44. package/dist/builtins/alerts/index.mjs +2 -0
  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 +106 -0
  80. package/dist/builtins/console-logging/index.js.map +1 -0
  81. package/dist/builtins/console-logging/index.mjs +97 -0
  82. package/dist/builtins/console-logging/index.mjs.map +1 -0
  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 +2153 -0
  88. package/dist/builtins/device-manager/device-manager.addon.js.map +1 -0
  89. package/dist/builtins/device-manager/device-manager.addon.mjs +2147 -0
  90. package/dist/builtins/device-manager/device-manager.addon.mjs.map +1 -0
  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 +7 -0
  94. package/dist/builtins/device-manager/index.mjs +2 -0
  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 +156 -0
  102. package/dist/builtins/hub-forwarder/index.js.map +1 -0
  103. package/dist/builtins/hub-forwarder/index.mjs +147 -0
  104. package/dist/builtins/hub-forwarder/index.mjs.map +1 -0
  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 -0
  110. package/dist/builtins/local-auth/index.mjs +2 -0
  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 +6895 -0
  114. package/dist/builtins/local-auth/local-auth.addon.js.map +1 -0
  115. package/dist/builtins/local-auth/local-auth.addon.mjs +6885 -0
  116. package/dist/builtins/local-auth/local-auth.addon.mjs.map +1 -0
  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 +924 -0
  144. package/dist/builtins/native-metrics/native-metrics.addon.js.map +1 -0
  145. package/dist/builtins/native-metrics/native-metrics.addon.mjs +916 -0
  146. package/dist/builtins/native-metrics/native-metrics.addon.mjs.map +1 -0
  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 +494 -0
  170. package/dist/builtins/snapshot/index.js.map +1 -0
  171. package/dist/builtins/snapshot/index.mjs +488 -0
  172. package/dist/builtins/snapshot/index.mjs.map +1 -0
  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 -2
  182. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts.map +1 -0
  183. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +311 -205
  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 -4
  188. package/dist/builtins/sqlite-storage/index.d.ts.map +1 -0
  189. package/dist/builtins/sqlite-storage/index.js +258 -1097
  190. package/dist/builtins/sqlite-storage/index.js.map +1 -1
  191. package/dist/builtins/sqlite-storage/index.mjs +268 -28
  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 -2
  202. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts.map +1 -0
  203. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +588 -417
  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 +7 -0
  226. package/dist/builtins/system-config/index.mjs +2 -0
  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 +234 -0
  230. package/dist/builtins/system-config/system-config.addon.js.map +1 -0
  231. package/dist/builtins/system-config/system-config.addon.mjs +228 -0
  232. package/dist/builtins/system-config/system-config.addon.mjs.map +1 -0
  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 -30
  244. package/dist/builtins/winston-logging/index.d.ts.map +1 -0
  245. package/dist/builtins/winston-logging/index.js +153 -180
  246. package/dist/builtins/winston-logging/index.js.map +1 -1
  247. package/dist/builtins/winston-logging/index.mjs +144 -8
  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 -1137
  270. package/dist/index.d.ts.map +1 -0
  271. package/dist/index.js +7761 -7017
  272. package/dist/index.js.map +1 -1
  273. package/dist/index.mjs +7699 -3798
  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 +230 -13
  320. package/dist/builtins/local-backup/index.d.mts +0 -42
  321. package/dist/builtins/local-backup/index.d.ts +0 -42
  322. package/dist/builtins/local-backup/index.js +0 -188
  323. package/dist/builtins/local-backup/index.js.map +0 -1
  324. package/dist/builtins/local-backup/index.mjs +0 -10
  325. package/dist/builtins/local-backup/index.mjs.map +0 -1
  326. package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.mts +0 -2
  327. package/dist/builtins/sqlite-storage/index.d.mts +0 -4
  328. package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.mts +0 -2
  329. package/dist/builtins/winston-logging/index.d.mts +0 -30
  330. package/dist/chunk-2F3XZYRW.mjs +0 -89
  331. package/dist/chunk-2F3XZYRW.mjs.map +0 -1
  332. package/dist/chunk-LQFPAEQF.mjs +0 -147
  333. package/dist/chunk-LQFPAEQF.mjs.map +0 -1
  334. package/dist/chunk-R3DIIBBX.mjs +0 -532
  335. package/dist/chunk-R3DIIBBX.mjs.map +0 -1
  336. package/dist/chunk-SMNR44VG.mjs +0 -386
  337. package/dist/chunk-SMNR44VG.mjs.map +0 -1
  338. package/dist/chunk-SO4LROOT.mjs +0 -150
  339. package/dist/chunk-SO4LROOT.mjs.map +0 -1
  340. package/dist/chunk-SPA4JBKN.mjs +0 -175
  341. package/dist/chunk-SPA4JBKN.mjs.map +0 -1
  342. package/dist/dist-3BY63UQ5.mjs +0 -2151
  343. package/dist/dist-3BY63UQ5.mjs.map +0 -1
  344. package/dist/filesystem-storage.addon-C42r589X.d.mts +0 -57
  345. package/dist/filesystem-storage.addon-C42r589X.d.ts +0 -57
  346. package/dist/index.d.mts +0 -1137
  347. package/dist/sql-schema-CKz78rId.d.mts +0 -97
  348. package/dist/sql-schema-CKz78rId.d.ts +0 -97
  349. package/dist/sqlite-settings.addon-KwG-uKMP.d.mts +0 -79
  350. package/dist/sqlite-settings.addon-KwG-uKMP.d.ts +0 -79
  351. package/dist/storage-location-manager-KKDQNAKA.mjs +0 -7
  352. package/dist/storage-location-manager-KKDQNAKA.mjs.map +0 -1
@@ -1,421 +1,592 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/builtins/sqlite-storage/sqlite-settings.addon.ts
31
- var sqlite_settings_addon_exports = {};
32
- __export(sqlite_settings_addon_exports, {
33
- SqliteSettingsAddon: () => SqliteSettingsAddon,
34
- default: () => sqlite_settings_addon_default
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
35
4
  });
36
- module.exports = __toCommonJS(sqlite_settings_addon_exports);
37
-
38
- // src/builtins/sqlite-storage/sqlite-settings-backend.ts
39
- var import_better_sqlite3 = __toESM(require("better-sqlite3"));
40
- var import_node_crypto = require("crypto");
41
- var SqliteSettingsBackend = class {
42
- constructor(dbPath, runtimeDefaults) {
43
- this.dbPath = dbPath;
44
- this.runtimeDefaults = runtimeDefaults ?? {};
45
- }
46
- db = null;
47
- ensuredTables = /* @__PURE__ */ new Set();
48
- structuredTables = /* @__PURE__ */ new Set();
49
- runtimeDefaults;
50
- async initialize() {
51
- const dir = this.dbPath.substring(0, this.dbPath.lastIndexOf("/"));
52
- if (dir) {
53
- const fs = await import("fs");
54
- fs.mkdirSync(dir, { recursive: true });
55
- }
56
- this.db = new import_better_sqlite3.default(this.dbPath);
57
- this.db.pragma("journal_mode = WAL");
58
- this.db.pragma("foreign_keys = ON");
59
- const isEmpty = await this.isEmpty("system-settings");
60
- if (isEmpty) {
61
- await this.seedDefaults();
62
- }
63
- }
64
- async shutdown() {
65
- this.db?.close();
66
- this.db = null;
67
- }
68
- // ---------------------------------------------------------------------------
69
- // ISettingsBackend implementation
70
- // ---------------------------------------------------------------------------
71
- async get(collection, key) {
72
- this.ensureCollectionTable(collection);
73
- const row = this.getDb().prepare(`SELECT data FROM "${collection}" WHERE id = ?`).get(key);
74
- if (!row) return void 0;
75
- return JSON.parse(row.data);
76
- }
77
- async set(collection, key, value) {
78
- this.ensureCollectionTable(collection);
79
- this.getDb().prepare(`INSERT INTO "${collection}" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`).run(key, JSON.stringify(value));
80
- }
81
- async query(collection, filter) {
82
- this.ensureCollectionTable(collection);
83
- let sql = `SELECT id, data FROM "${collection}"`;
84
- const params = [];
85
- const whereClauses = [];
86
- if (filter?.where) {
87
- for (const [field, value] of Object.entries(filter.where)) {
88
- if (field === "id") {
89
- whereClauses.push("id = ?");
90
- params.push(value);
91
- } else {
92
- whereClauses.push(`json_extract(data, '$.${field}') = ?`);
93
- params.push(typeof value === "object" ? JSON.stringify(value) : value);
94
- }
95
- }
96
- }
97
- if (filter?.whereIn) {
98
- for (const [field, values] of Object.entries(filter.whereIn)) {
99
- const placeholders = values.map(() => "?").join(", ");
100
- if (field === "id") {
101
- whereClauses.push(`id IN (${placeholders})`);
102
- } else {
103
- whereClauses.push(`json_extract(data, '$.${field}') IN (${placeholders})`);
104
- }
105
- params.push(...values);
106
- }
107
- }
108
- if (filter?.whereBetween) {
109
- for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {
110
- if (field === "id") {
111
- whereClauses.push("id BETWEEN ? AND ?");
112
- } else {
113
- whereClauses.push(`json_extract(data, '$.${field}') BETWEEN ? AND ?`);
114
- }
115
- params.push(low, high);
116
- }
117
- }
118
- if (whereClauses.length > 0) {
119
- sql += ` WHERE ${whereClauses.join(" AND ")}`;
120
- }
121
- if (filter?.orderBy) {
122
- const dir = filter.orderBy.direction === "desc" ? "DESC" : "ASC";
123
- if (filter.orderBy.field === "id") {
124
- sql += ` ORDER BY id ${dir}`;
125
- } else {
126
- sql += ` ORDER BY json_extract(data, '$.${filter.orderBy.field}') ${dir}`;
127
- }
128
- }
129
- if (filter?.limit) {
130
- sql += ` LIMIT ?`;
131
- params.push(filter.limit);
132
- }
133
- if (filter?.offset) {
134
- sql += ` OFFSET ?`;
135
- params.push(filter.offset);
136
- }
137
- const rows = this.getDb().prepare(sql).all(...params);
138
- return rows.map((row) => ({
139
- id: row.id,
140
- data: JSON.parse(row.data)
141
- }));
142
- }
143
- async insert(collection, record) {
144
- this.ensureCollectionTable(collection);
145
- const id = record.id || (0, import_node_crypto.randomUUID)();
146
- this.getDb().prepare(`INSERT INTO "${collection}" (id, data) VALUES (?, ?)`).run(id, JSON.stringify(record.data));
147
- }
148
- async update(collection, id, data) {
149
- this.ensureCollectionTable(collection);
150
- this.getDb().prepare(`UPDATE "${collection}" SET data = ? WHERE id = ?`).run(JSON.stringify(data), id);
151
- }
152
- async delete(collection, key) {
153
- this.ensureCollectionTable(collection);
154
- this.getDb().prepare(`DELETE FROM "${collection}" WHERE id = ?`).run(key);
155
- }
156
- async count(collection, filter) {
157
- this.ensureCollectionTable(collection);
158
- if (!filter) {
159
- const row = this.getDb().prepare(`SELECT COUNT(*) AS cnt FROM "${collection}"`).get();
160
- return row?.cnt ?? 0;
161
- }
162
- const rows = await this.query(collection, { ...filter, limit: void 0, offset: void 0 });
163
- return rows.length;
164
- }
165
- async isEmpty(collection) {
166
- this.ensureCollectionTable(collection);
167
- const row = this.getDb().prepare(`SELECT COUNT(*) AS cnt FROM "${collection}"`).get();
168
- return (row?.cnt ?? 0) === 0;
169
- }
170
- // ---------------------------------------------------------------------------
171
- // Legacy SettingsStore compatibility (used by ConfigManager.setSettingsStore)
172
- // ---------------------------------------------------------------------------
173
- /** Get a system setting by dot-notation key */
174
- getSystem(key) {
175
- this.ensureCollectionTable("system-settings");
176
- const row = this.getDb().prepare('SELECT data FROM "system-settings" WHERE id = ?').get(key);
177
- if (!row) return void 0;
178
- return JSON.parse(row.data);
179
- }
180
- /** Set a system setting */
181
- setSystem(key, value) {
182
- this.ensureCollectionTable("system-settings");
183
- this.getDb().prepare('INSERT INTO "system-settings" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data').run(key, JSON.stringify(value));
184
- }
185
- /** Get all system settings as flat key-value */
186
- getAllSystem() {
187
- this.ensureCollectionTable("system-settings");
188
- const rows = this.getDb().prepare('SELECT id, data FROM "system-settings"').all();
189
- return Object.fromEntries(rows.map((r) => [r.id, JSON.parse(r.data)]));
190
- }
191
- /** Get all settings for an addon */
192
- getAllAddon(addonId) {
193
- this.ensureCollectionTable("addon-settings");
194
- const rows = this.getDb().prepare(`SELECT id, data FROM "addon-settings" WHERE json_extract(data, '$.addonId') = ?`).all(addonId);
195
- if (rows.length === 0) return {};
196
- const result = {};
197
- for (const row of rows) {
198
- const parsed = JSON.parse(row.data);
199
- const key = row.id.startsWith(`${addonId}.`) ? row.id.slice(addonId.length + 1) : row.id;
200
- result[key] = parsed.value ?? parsed;
201
- }
202
- return result;
203
- }
204
- /** Bulk-set all settings for an addon */
205
- setAllAddon(addonId, config) {
206
- this.ensureCollectionTable("addon-settings");
207
- const db = this.getDb();
208
- const deleteStmt = db.prepare(`DELETE FROM "addon-settings" WHERE id LIKE ? || '%'`);
209
- const insertStmt = db.prepare('INSERT INTO "addon-settings" (id, data) VALUES (?, ?)');
210
- db.transaction(() => {
211
- deleteStmt.run(`${addonId}.`);
212
- for (const [key, value] of Object.entries(config)) {
213
- insertStmt.run(`${addonId}.${key}`, JSON.stringify({ addonId, key, value }));
214
- }
215
- })();
216
- }
217
- /** Get all settings for a provider */
218
- getAllProvider(providerId) {
219
- return this.getAllScoped("provider-settings", providerId);
220
- }
221
- /** Set a provider setting */
222
- setProvider(providerId, key, value) {
223
- this.setScopedKey("provider-settings", providerId, key, value);
224
- }
225
- /** Get all settings for a device */
226
- getAllDevice(deviceId) {
227
- return this.getAllScoped("device-settings", deviceId);
228
- }
229
- /** Set a device setting */
230
- setDevice(deviceId, key, value) {
231
- this.setScopedKey("device-settings", deviceId, key, value);
232
- }
233
- /** Seed system-settings with runtime defaults (first boot) */
234
- async seedDefaults() {
235
- this.ensureCollectionTable("system-settings");
236
- const insert = this.getDb().prepare(
237
- 'INSERT OR IGNORE INTO "system-settings" (id, data) VALUES (?, ?)'
238
- );
239
- this.getDb().transaction(() => {
240
- for (const [key, value] of Object.entries(this.runtimeDefaults)) {
241
- insert.run(key, JSON.stringify(value));
242
- }
243
- })();
244
- }
245
- // ---------------------------------------------------------------------------
246
- // Private helpers
247
- // ---------------------------------------------------------------------------
248
- getDb() {
249
- if (!this.db) throw new Error("SqliteSettingsBackend not initialized \u2014 call initialize() first");
250
- return this.db;
251
- }
252
- ensureCollectionTable(collection) {
253
- if (this.ensuredTables.has(collection)) return;
254
- this.getDb().exec(
255
- `CREATE TABLE IF NOT EXISTS "${collection}" (id TEXT PRIMARY KEY, data TEXT NOT NULL)`
256
- );
257
- this.ensuredTables.add(collection);
258
- }
259
- getAllScoped(collection, scopeId) {
260
- this.ensureCollectionTable(collection);
261
- const rows = this.getDb().prepare(`SELECT id, data FROM "${collection}" WHERE id LIKE ? || '.%'`).all(scopeId);
262
- const result = {};
263
- for (const row of rows) {
264
- const key = row.id.slice(scopeId.length + 1);
265
- const parsed = JSON.parse(row.data);
266
- result[key] = parsed.value ?? parsed;
267
- }
268
- return result;
269
- }
270
- setScopedKey(collection, scopeId, key, value) {
271
- this.ensureCollectionTable(collection);
272
- this.getDb().prepare(`INSERT INTO "${collection}" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`).run(`${scopeId}.${key}`, JSON.stringify({ scopeId, key, value }));
273
- }
274
- // ── Structured table operations ────────────────────────────────────
275
- async ensureTable(table, schema) {
276
- if (!schema) {
277
- if (!this.ensuredTables.has(table)) {
278
- this.getDb().exec(`CREATE TABLE IF NOT EXISTS "${table}" (id TEXT PRIMARY KEY, data TEXT NOT NULL)`);
279
- this.ensuredTables.add(table);
280
- }
281
- return;
282
- }
283
- if (this.structuredTables.has(table)) return;
284
- const colDefs = schema.columns.map((col) => {
285
- const parts = [`"${col.name}" ${col.type}`];
286
- if (col.primaryKey) parts.push("PRIMARY KEY");
287
- if (col.notNull) parts.push("NOT NULL");
288
- if (col.unique) parts.push("UNIQUE");
289
- if (col.defaultValue !== void 0) {
290
- parts.push(`DEFAULT ${typeof col.defaultValue === "string" ? `'${col.defaultValue}'` : col.defaultValue === null ? "NULL" : String(col.defaultValue)}`);
291
- }
292
- return parts.join(" ");
293
- });
294
- this.getDb().exec(`CREATE TABLE IF NOT EXISTS "${table}" (${colDefs.join(", ")})`);
295
- if (schema.indexes) {
296
- for (const idx of schema.indexes) {
297
- const unique = idx.unique ? "UNIQUE " : "";
298
- const cols = idx.columns.map((c) => `"${c}"`).join(", ");
299
- this.getDb().exec(`CREATE ${unique}INDEX IF NOT EXISTS "${idx.name}" ON "${table}" (${cols})`);
300
- }
301
- }
302
- this.structuredTables.add(table);
303
- }
304
- async tableInsert(table, row) {
305
- const keys = Object.keys(row);
306
- const cols = keys.map((k) => `"${k}"`).join(", ");
307
- const placeholders = keys.map(() => "?").join(", ");
308
- const values = keys.map((k) => {
309
- const v = row[k];
310
- return typeof v === "object" && v !== null ? JSON.stringify(v) : v;
311
- });
312
- this.getDb().prepare(`INSERT INTO "${table}" (${cols}) VALUES (${placeholders})`).run(...values);
313
- }
314
- async tableUpdate(table, filter, updates) {
315
- const setClauses = [];
316
- const setValues = [];
317
- for (const [k, v] of Object.entries(updates)) {
318
- setClauses.push(`"${k}" = ?`);
319
- setValues.push(typeof v === "object" && v !== null ? JSON.stringify(v) : v);
320
- }
321
- const { whereSql, whereValues } = this.buildWhere(filter);
322
- const result = this.getDb().prepare(`UPDATE "${table}" SET ${setClauses.join(", ")}${whereSql}`).run(...setValues, ...whereValues);
323
- return result.changes;
324
- }
325
- async tableDelete(table, filter) {
326
- const { whereSql, whereValues } = this.buildWhere(filter);
327
- const result = this.getDb().prepare(`DELETE FROM "${table}"${whereSql}`).run(...whereValues);
328
- return result.changes;
329
- }
330
- async tableQuery(table, options) {
331
- let sql = `SELECT * FROM "${table}"`;
332
- const values = [];
333
- if (options?.where) {
334
- const { whereSql, whereValues } = this.buildWhere(options.where);
335
- sql += whereSql;
336
- values.push(...whereValues);
337
- }
338
- if (options?.orderBy) {
339
- sql += ` ORDER BY "${options.orderBy.field}" ${options.orderBy.direction === "desc" ? "DESC" : "ASC"}`;
340
- }
341
- if (options?.limit !== void 0) {
342
- sql += ` LIMIT ?`;
343
- values.push(options.limit);
344
- }
345
- if (options?.offset !== void 0) {
346
- sql += ` OFFSET ?`;
347
- values.push(options.offset);
348
- }
349
- return this.getDb().prepare(sql).all(...values);
350
- }
351
- async tableGet(table, filter) {
352
- const { whereSql, whereValues } = this.buildWhere(filter);
353
- const row = this.getDb().prepare(`SELECT * FROM "${table}"${whereSql} LIMIT 1`).get(...whereValues);
354
- return row ?? null;
355
- }
356
- async tableCount(table, filter) {
357
- let sql = `SELECT COUNT(*) as count FROM "${table}"`;
358
- const values = [];
359
- if (filter) {
360
- const { whereSql, whereValues } = this.buildWhere(filter);
361
- sql += whereSql;
362
- values.push(...whereValues);
363
- }
364
- const row = this.getDb().prepare(sql).get(...values);
365
- return row.count;
366
- }
367
- buildWhere(filter) {
368
- const conditions = [];
369
- const values = [];
370
- for (const [k, v] of Object.entries(filter)) {
371
- conditions.push(`"${k}" = ?`);
372
- values.push(typeof v === "object" && v !== null ? JSON.stringify(v) : v);
373
- }
374
- const whereSql = conditions.length > 0 ? ` WHERE ${conditions.join(" AND ")}` : "";
375
- return { whereSql, whereValues: values };
376
- }
5
+ const require_chunk = require("../../chunk-C13QxCFV.js");
6
+ let node_crypto = require("node:crypto");
7
+ let _camstack_types = require("@camstack/types");
8
+ let better_sqlite3 = require("better-sqlite3");
9
+ better_sqlite3 = require_chunk.__toESM(better_sqlite3);
10
+ //#region src/builtins/sqlite-storage/sqlite-settings-backend.ts
11
+ function parseRowData(raw) {
12
+ return (0, _camstack_types.asJsonObject)((0, _camstack_types.parseJsonUnknown)(raw)) ?? {};
13
+ }
14
+ /**
15
+ * SQLite implementation of ISettingsBackend.
16
+ *
17
+ * Every collection is structured: declared at boot (canonical KV
18
+ * collections) or via `declareCollection` (typed schemas like
19
+ * `pipeline-analytics:tracks`). The legacy auto-create-on-first-access
20
+ * path was removed — see commit history for the migration. Operations
21
+ * on undeclared collections throw at runtime so callers fail fast.
22
+ *
23
+ * WAL mode for concurrent reads.
24
+ */
25
+ var SqliteSettingsBackend = class SqliteSettingsBackend {
26
+ db = null;
27
+ structuredTables = /* @__PURE__ */ new Set();
28
+ /** Map from scoped collection name → set of column names (non-id) that
29
+ * the structured schema owns. Routes set/get/insert/update/query to
30
+ * typed columns. Every collection MUST be declared here before use. */
31
+ declaredCollections = /* @__PURE__ */ new Map();
32
+ runtimeDefaults;
33
+ /**
34
+ * Canonical key/value collections — declared with a `(id TEXT PK,
35
+ * data TEXT NOT NULL)` schema at boot so existing JSON-blob rows
36
+ * keep working through the structured path. Generates SQL identical
37
+ * to the previous legacy path; only the routing is unified.
38
+ */
39
+ static CANONICAL_KV_COLLECTIONS = [
40
+ "system-settings",
41
+ "addon-settings",
42
+ "addon-device-settings",
43
+ "addon-devices",
44
+ "device-runtime-state",
45
+ "sections",
46
+ "provider-settings",
47
+ "device-settings",
48
+ "alerts"
49
+ ];
50
+ constructor(dbPath, runtimeDefaults) {
51
+ this.dbPath = dbPath;
52
+ this.runtimeDefaults = runtimeDefaults ?? {};
53
+ }
54
+ async initialize() {
55
+ const dir = this.dbPath.substring(0, this.dbPath.lastIndexOf("/"));
56
+ if (dir) (await import("node:fs")).mkdirSync(dir, { recursive: true });
57
+ this.db = new better_sqlite3.default(this.dbPath);
58
+ this.db.pragma("journal_mode = WAL");
59
+ this.db.pragma("foreign_keys = ON");
60
+ for (const collection of SqliteSettingsBackend.CANONICAL_KV_COLLECTIONS) {
61
+ await this.ensureTable(collection, { columns: [{
62
+ name: "id",
63
+ type: "TEXT",
64
+ primaryKey: true,
65
+ notNull: true
66
+ }, {
67
+ name: "data",
68
+ type: "TEXT",
69
+ notNull: true
70
+ }] });
71
+ this.declaredCollections.set(collection, {
72
+ primaryKey: "id",
73
+ columns: new Set(["data"])
74
+ });
75
+ }
76
+ if (await this.isEmpty({ collection: "system-settings" })) await this.seedDefaults();
77
+ }
78
+ requireDeclared(scoped) {
79
+ const decl = this.declaredCollections.get(scoped);
80
+ if (!decl) throw new Error(`SqliteSettingsBackend: collection "${scoped}" is not declared. Call declareCollection() first or add it to CANONICAL_KV_COLLECTIONS.`);
81
+ return decl;
82
+ }
83
+ async shutdown() {
84
+ this.db?.close();
85
+ this.db = null;
86
+ }
87
+ async get({ namespace, collection, key }) {
88
+ const scoped = this.scopedName(namespace, collection);
89
+ const decl = this.requireDeclared(scoped);
90
+ const cols = [`"${decl.primaryKey}"`, ...[...decl.columns].map((c) => `"${c}"`)].join(", ");
91
+ const row = this.getDb().prepare(`SELECT ${cols} FROM "${scoped}" WHERE "${decl.primaryKey}" = ?`).get(key);
92
+ if (!row) return void 0;
93
+ if (decl.columns.size === 1 && decl.columns.has("data")) {
94
+ const raw = row["data"];
95
+ return typeof raw === "string" ? JSON.parse(raw) : raw;
96
+ }
97
+ const data = {};
98
+ for (const c of decl.columns) {
99
+ const v = row[c];
100
+ if (typeof v === "string" && (v.startsWith("{") || v.startsWith("["))) try {
101
+ data[c] = JSON.parse(v);
102
+ } catch {
103
+ data[c] = v;
104
+ }
105
+ else data[c] = v ?? null;
106
+ }
107
+ return data;
108
+ }
109
+ async set({ namespace, collection, key, value }) {
110
+ const scoped = this.scopedName(namespace, collection);
111
+ const decl = this.requireDeclared(scoped);
112
+ const row = { [decl.primaryKey]: key };
113
+ if (decl.columns.size === 1 && decl.columns.has("data")) row["data"] = JSON.stringify(value);
114
+ else {
115
+ const valueObj = value !== null && typeof value === "object" ? value : {};
116
+ for (const [k, v] of Object.entries(valueObj)) if (decl.columns.has(k)) row[k] = this.serializeColumnValue(v);
117
+ }
118
+ const keys = Object.keys(row);
119
+ const cols = keys.map((k) => `"${k}"`).join(", ");
120
+ const placeholders = keys.map(() => "?").join(", ");
121
+ const updates = keys.filter((k) => k !== decl.primaryKey).map((k) => `"${k}" = excluded."${k}"`).join(", ");
122
+ const values = keys.map((k) => row[k]);
123
+ const sql = updates.length > 0 ? `INSERT INTO "${scoped}" (${cols}) VALUES (${placeholders}) ON CONFLICT("${decl.primaryKey}") DO UPDATE SET ${updates}` : `INSERT INTO "${scoped}" (${cols}) VALUES (${placeholders}) ON CONFLICT("${decl.primaryKey}") DO NOTHING`;
124
+ this.getDb().prepare(sql).run(...values);
125
+ }
126
+ async query({ namespace, collection, filter }) {
127
+ const scoped = this.scopedName(namespace, collection);
128
+ const decl = this.requireDeclared(scoped);
129
+ return this.queryDeclared(scoped, decl, filter);
130
+ }
131
+ async insert({ namespace, collection, record }) {
132
+ const scoped = this.scopedName(namespace, collection);
133
+ const decl = this.requireDeclared(scoped);
134
+ const id = record.id || (0, node_crypto.randomUUID)();
135
+ const row = { [decl.primaryKey]: id };
136
+ if (decl.columns.size === 1 && decl.columns.has("data")) row["data"] = JSON.stringify(record.data);
137
+ else for (const [k, v] of Object.entries(record.data)) if (decl.columns.has(k)) row[k] = this.serializeColumnValue(v);
138
+ await this.tableInsert(scoped, row);
139
+ }
140
+ async update({ namespace, collection, id, data }) {
141
+ const scoped = this.scopedName(namespace, collection);
142
+ const decl = this.requireDeclared(scoped);
143
+ const updates = {};
144
+ if (decl.columns.size === 1 && decl.columns.has("data")) updates["data"] = JSON.stringify(data);
145
+ else for (const [k, v] of Object.entries(data)) if (decl.columns.has(k)) updates[k] = this.serializeColumnValue(v);
146
+ if (Object.keys(updates).length > 0) await this.tableUpdate(scoped, { [decl.primaryKey]: id }, updates);
147
+ }
148
+ async delete({ namespace, collection, key }) {
149
+ const scoped = this.scopedName(namespace, collection);
150
+ const decl = this.requireDeclared(scoped);
151
+ await this.tableDelete(scoped, { [decl.primaryKey]: key });
152
+ }
153
+ async count({ namespace, collection, filter }) {
154
+ const scoped = this.scopedName(namespace, collection);
155
+ const decl = this.requireDeclared(scoped);
156
+ const isKvShape = decl.columns.size === 1 && decl.columns.has("data");
157
+ const isColumn = (f) => f === decl.primaryKey || decl.columns.has(f);
158
+ const fieldExpr = (f) => {
159
+ if (isColumn(f)) return `"${f}"`;
160
+ if (isKvShape) return `json_extract("data", '$.${f}')`;
161
+ return "";
162
+ };
163
+ let sql = `SELECT COUNT(*) AS cnt FROM "${scoped}"`;
164
+ const params = [];
165
+ if (filter?.where) {
166
+ const clauses = [];
167
+ for (const [field, value] of Object.entries(filter.where)) {
168
+ const expr = fieldExpr(field);
169
+ if (!expr) continue;
170
+ clauses.push(`${expr} = ?`);
171
+ params.push(this.serializeColumnValue(value));
172
+ }
173
+ if (clauses.length > 0) sql += ` WHERE ${clauses.join(" AND ")}`;
174
+ }
175
+ return this.getDb().prepare(sql).get(...params)?.cnt ?? 0;
176
+ }
177
+ async isEmpty({ namespace, collection }) {
178
+ const scoped = this.scopedName(namespace, collection);
179
+ this.requireDeclared(scoped);
180
+ return await this.tableCount(scoped) === 0;
181
+ }
182
+ async queryDeclared(table, decl, filter) {
183
+ const isKvShape = decl.columns.size === 1 && decl.columns.has("data");
184
+ let sql = `SELECT ${[`"${decl.primaryKey}"`, ...[...decl.columns].map((c) => `"${c}"`)].join(", ")} FROM "${table}"`;
185
+ const params = [];
186
+ const whereClauses = [];
187
+ const isColumn = (f) => f === decl.primaryKey || decl.columns.has(f);
188
+ /**
189
+ * SQL expression for `field` on this table.
190
+ * - real column `"field"`
191
+ * - KV blob field (e.g. `username` inside `data`) → `json_extract`
192
+ * - structured table + non-column → empty string (filter dropped,
193
+ * matches legacy structured-table behaviour)
194
+ */
195
+ const fieldExpr = (f) => {
196
+ if (isColumn(f)) return `"${f}"`;
197
+ if (isKvShape) return `json_extract("data", '$.${f}')`;
198
+ return "";
199
+ };
200
+ if (filter?.where) for (const [field, value] of Object.entries(filter.where)) {
201
+ const expr = fieldExpr(field);
202
+ if (!expr) continue;
203
+ whereClauses.push(`${expr} = ?`);
204
+ params.push(this.serializeColumnValue(value));
205
+ }
206
+ if (filter?.whereIn) for (const [field, values] of Object.entries(filter.whereIn)) {
207
+ const expr = fieldExpr(field);
208
+ if (!expr) continue;
209
+ const placeholders = values.map(() => "?").join(", ");
210
+ whereClauses.push(`${expr} IN (${placeholders})`);
211
+ for (const v of values) params.push(this.serializeColumnValue(v));
212
+ }
213
+ if (filter?.whereBetween) for (const [field, [low, high]] of Object.entries(filter.whereBetween)) {
214
+ const expr = fieldExpr(field);
215
+ if (!expr) continue;
216
+ whereClauses.push(`${expr} BETWEEN ? AND ?`);
217
+ params.push(this.serializeColumnValue(low), this.serializeColumnValue(high));
218
+ }
219
+ if (whereClauses.length > 0) sql += ` WHERE ${whereClauses.join(" AND ")}`;
220
+ if (filter?.orderBy) {
221
+ const expr = fieldExpr(filter.orderBy.field);
222
+ if (expr) {
223
+ const dir = filter.orderBy.direction === "desc" ? "DESC" : "ASC";
224
+ sql += ` ORDER BY ${expr} ${dir}`;
225
+ }
226
+ }
227
+ if (filter?.limit !== void 0) {
228
+ sql += ` LIMIT ?`;
229
+ params.push(filter.limit);
230
+ }
231
+ if (filter?.offset !== void 0) {
232
+ sql += ` OFFSET ?`;
233
+ params.push(filter.offset);
234
+ }
235
+ return this.getDb().prepare(sql).all(...params).map((r) => {
236
+ const id = String(r[decl.primaryKey] ?? "");
237
+ if (isKvShape) {
238
+ const v = r["data"];
239
+ if (typeof v === "string" && (v.startsWith("{") || v.startsWith("["))) try {
240
+ return {
241
+ id,
242
+ data: JSON.parse(v)
243
+ };
244
+ } catch {
245
+ return {
246
+ id,
247
+ data: { value: v }
248
+ };
249
+ }
250
+ return {
251
+ id,
252
+ data: v == null ? {} : { value: v }
253
+ };
254
+ }
255
+ const data = { [decl.primaryKey]: r[decl.primaryKey] ?? null };
256
+ for (const c of decl.columns) {
257
+ const v = r[c];
258
+ if (typeof v === "string" && (v.startsWith("{") || v.startsWith("["))) try {
259
+ data[c] = JSON.parse(v);
260
+ } catch {
261
+ data[c] = v;
262
+ }
263
+ else data[c] = v ?? null;
264
+ }
265
+ return {
266
+ id,
267
+ data
268
+ };
269
+ });
270
+ }
271
+ /** Get a system setting by dot-notation key */
272
+ getSystem(key) {
273
+ this.requireDeclared("system-settings");
274
+ const row = this.getDb().prepare("SELECT data FROM \"system-settings\" WHERE id = ?").get(key);
275
+ if (!row) return void 0;
276
+ return JSON.parse(row.data);
277
+ }
278
+ /** Set a system setting */
279
+ setSystem(key, value) {
280
+ this.requireDeclared("system-settings");
281
+ this.getDb().prepare("INSERT INTO \"system-settings\" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data").run(key, JSON.stringify(value));
282
+ }
283
+ /** Get all system settings as flat key-value */
284
+ getAllSystem() {
285
+ this.requireDeclared("system-settings");
286
+ const rows = this.getDb().prepare("SELECT id, data FROM \"system-settings\"").all();
287
+ return Object.fromEntries(rows.map((r) => [r.id, JSON.parse(r.data)]));
288
+ }
289
+ /** Get all settings for an addon */
290
+ getAllAddon(addonId) {
291
+ this.requireDeclared("addon-settings");
292
+ const rows = this.getDb().prepare("SELECT id, data FROM \"addon-settings\" WHERE json_extract(data, '$.addonId') = ?").all(addonId);
293
+ if (rows.length === 0) return {};
294
+ const result = {};
295
+ for (const row of rows) {
296
+ const parsed = parseRowData(row.data);
297
+ const key = row.id.startsWith(`${addonId}.`) ? row.id.slice(addonId.length + 1) : row.id;
298
+ if (parsed !== null && typeof parsed === "object" && "addonId" in parsed && "key" in parsed) {
299
+ const wrapper = parsed;
300
+ if ("value" in wrapper) result[key] = wrapper.value;
301
+ } else result[key] = parsed;
302
+ }
303
+ return result;
304
+ }
305
+ /** Bulk-set all settings for an addon */
306
+ setAllAddon(addonId, config) {
307
+ this.requireDeclared("addon-settings");
308
+ const db = this.getDb();
309
+ const deleteStmt = db.prepare("DELETE FROM \"addon-settings\" WHERE id LIKE ? || '%'");
310
+ const insertStmt = db.prepare("INSERT INTO \"addon-settings\" (id, data) VALUES (?, ?)");
311
+ db.transaction(() => {
312
+ deleteStmt.run(`${addonId}.`);
313
+ for (const [key, value] of Object.entries(config)) {
314
+ if (value === void 0) continue;
315
+ insertStmt.run(`${addonId}.${key}`, JSON.stringify({
316
+ addonId,
317
+ key,
318
+ value
319
+ }));
320
+ }
321
+ })();
322
+ }
323
+ /** Get all settings for a provider */
324
+ getAllProvider(providerId) {
325
+ return this.getAllScoped("provider-settings", providerId);
326
+ }
327
+ /** Set a provider setting */
328
+ setProvider(providerId, key, value) {
329
+ this.setScopedKey("provider-settings", providerId, key, value);
330
+ }
331
+ /** Get all settings for a device */
332
+ getAllDevice(deviceId) {
333
+ return this.getAllScoped("device-settings", deviceId);
334
+ }
335
+ /** Set a device setting */
336
+ setDevice(deviceId, key, value) {
337
+ this.setScopedKey("device-settings", deviceId, key, value);
338
+ }
339
+ getAddonDevice(addonId, deviceId) {
340
+ return this.getAllScoped("addon-device-settings", `${addonId}:${deviceId}`);
341
+ }
342
+ setAddonDevice(addonId, deviceId, values) {
343
+ this.requireDeclared("addon-device-settings");
344
+ const db = this.getDb();
345
+ const prefix = `${addonId}:${deviceId}.`;
346
+ const deleteStmt = db.prepare(`DELETE FROM "addon-device-settings" WHERE id LIKE ? || '%'`);
347
+ const insertStmt = db.prepare(`INSERT INTO "addon-device-settings" (id, data) VALUES (?, ?)
348
+ ON CONFLICT(id) DO UPDATE SET data = excluded.data`);
349
+ db.transaction(() => {
350
+ deleteStmt.run(prefix);
351
+ for (const [key, value] of Object.entries(values)) insertStmt.run(`${prefix}${key}`, JSON.stringify({
352
+ addonId,
353
+ deviceId,
354
+ key,
355
+ value
356
+ }));
357
+ })();
358
+ }
359
+ clearAddonDevice(addonId, deviceId) {
360
+ this.requireDeclared("addon-device-settings");
361
+ const prefix = `${addonId}:${deviceId}.`;
362
+ this.getDb().prepare(`DELETE FROM "addon-device-settings" WHERE id LIKE ? || '%'`).run(prefix);
363
+ }
364
+ /** Seed system-settings with runtime defaults (first boot) */
365
+ async seedDefaults() {
366
+ this.requireDeclared("system-settings");
367
+ const insert = this.getDb().prepare("INSERT OR IGNORE INTO \"system-settings\" (id, data) VALUES (?, ?)");
368
+ this.getDb().transaction(() => {
369
+ for (const [key, value] of Object.entries(this.runtimeDefaults)) insert.run(key, JSON.stringify(value));
370
+ })();
371
+ }
372
+ /**
373
+ * Expose the raw better-sqlite3 Database instance for components that
374
+ * need direct SQL access (e.g. DeviceStore, ConfigStore).
375
+ * Returns null if the backend has not been initialized yet.
376
+ */
377
+ getDatabase() {
378
+ return this.db;
379
+ }
380
+ getDb() {
381
+ if (!this.db) throw new Error("SqliteSettingsBackend not initialized — call initialize() first");
382
+ return this.db;
383
+ }
384
+ getAllScoped(collection, scopeId) {
385
+ this.requireDeclared(collection);
386
+ const rows = this.getDb().prepare(`SELECT id, data FROM "${collection}" WHERE id LIKE ? || '.%'`).all(scopeId);
387
+ const result = {};
388
+ for (const row of rows) {
389
+ const key = row.id.slice(scopeId.length + 1);
390
+ const parsed = parseRowData(row.data);
391
+ result[key] = parsed.value ?? parsed;
392
+ }
393
+ return result;
394
+ }
395
+ setScopedKey(collection, scopeId, key, value) {
396
+ this.requireDeclared(collection);
397
+ this.getDb().prepare(`INSERT INTO "${collection}" (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data`).run(`${scopeId}.${key}`, JSON.stringify({
398
+ scopeId,
399
+ key,
400
+ value
401
+ }));
402
+ }
403
+ scopedName(namespace, collection) {
404
+ return namespace ? `${namespace}:${collection}` : collection;
405
+ }
406
+ async declareCollection(input) {
407
+ const table = this.scopedName(input.namespace, input.collection);
408
+ if (this.declaredCollections.has(table)) return;
409
+ const columns = input.columns.some((c) => c.primaryKey === true) ? input.columns : [{
410
+ name: "id",
411
+ type: "TEXT",
412
+ primaryKey: true,
413
+ notNull: true
414
+ }, ...input.columns];
415
+ const schema = {
416
+ columns: columns.map((c) => ({
417
+ name: c.name,
418
+ type: c.type === "JSON" ? "TEXT" : c.type,
419
+ ...c.primaryKey !== void 0 ? { primaryKey: c.primaryKey } : {},
420
+ ...c.notNull !== void 0 ? { notNull: c.notNull } : {},
421
+ ...c.unique !== void 0 ? { unique: c.unique } : {}
422
+ })),
423
+ ...input.indexes ? { indexes: input.indexes.map((i) => ({
424
+ name: i.name,
425
+ columns: i.columns,
426
+ ...i.unique !== void 0 ? { unique: i.unique } : {}
427
+ })) } : {}
428
+ };
429
+ await this.ensureTable(table, schema);
430
+ const pkCol = columns.find((c) => c.primaryKey === true);
431
+ const primaryKey = pkCol ? pkCol.name : "id";
432
+ const columnNames = new Set(columns.filter((c) => c.name !== primaryKey).map((c) => c.name));
433
+ this.declaredCollections.set(table, {
434
+ primaryKey,
435
+ columns: columnNames
436
+ });
437
+ }
438
+ /** Serialise per-column values for SQL binding: objects → JSON, booleans → 0/1. */
439
+ serializeColumnValue(v) {
440
+ if (v === null || v === void 0) return v ?? null;
441
+ if (typeof v === "boolean") return v ? 1 : 0;
442
+ if (typeof v === "object") return JSON.stringify(v);
443
+ return v;
444
+ }
445
+ async ensureTable(table, schema) {
446
+ if (this.structuredTables.has(table)) return;
447
+ const colDefs = schema.columns.map((col) => {
448
+ const parts = [`"${col.name}" ${col.type}`];
449
+ if (col.primaryKey) parts.push("PRIMARY KEY");
450
+ if (col.notNull) parts.push("NOT NULL");
451
+ if (col.unique) parts.push("UNIQUE");
452
+ if (col.defaultValue !== void 0) parts.push(`DEFAULT ${typeof col.defaultValue === "string" ? `'${col.defaultValue}'` : col.defaultValue === null ? "NULL" : String(col.defaultValue)}`);
453
+ return parts.join(" ");
454
+ });
455
+ const existingCols = this.getDb().prepare(`PRAGMA table_info("${table}")`).all();
456
+ if (existingCols.length > 0) {
457
+ const existingNames = new Set(existingCols.map((c) => c.name));
458
+ const declaredNames = new Set(schema.columns.map((c) => c.name));
459
+ const missingDeclared = schema.columns.some((c) => !existingNames.has(c.name));
460
+ if (existingCols.length <= 2 && existingNames.has("data") && !declaredNames.has("data") || missingDeclared) try {
461
+ this.getDb().exec(`DROP TABLE "${table}"`);
462
+ } catch {}
463
+ }
464
+ this.getDb().exec(`CREATE TABLE IF NOT EXISTS "${table}" (${colDefs.join(", ")})`);
465
+ if (schema.indexes) for (const idx of schema.indexes) {
466
+ const unique = idx.unique ? "UNIQUE " : "";
467
+ const cols = idx.columns.map((c) => `"${c}"`).join(", ");
468
+ this.getDb().exec(`CREATE ${unique}INDEX IF NOT EXISTS "${idx.name}" ON "${table}" (${cols})`);
469
+ }
470
+ this.structuredTables.add(table);
471
+ }
472
+ async tableInsert(table, row) {
473
+ const keys = Object.keys(row);
474
+ const cols = keys.map((k) => `"${k}"`).join(", ");
475
+ const placeholders = keys.map(() => "?").join(", ");
476
+ const values = keys.map((k) => {
477
+ const v = row[k];
478
+ return typeof v === "object" && v !== null ? JSON.stringify(v) : v;
479
+ });
480
+ this.getDb().prepare(`INSERT INTO "${table}" (${cols}) VALUES (${placeholders})`).run(...values);
481
+ }
482
+ async tableUpdate(table, filter, updates) {
483
+ const setClauses = [];
484
+ const setValues = [];
485
+ for (const [k, v] of Object.entries(updates)) {
486
+ setClauses.push(`"${k}" = ?`);
487
+ setValues.push(typeof v === "object" && v !== null ? JSON.stringify(v) : v);
488
+ }
489
+ const { whereSql, whereValues } = this.buildWhere(filter);
490
+ return this.getDb().prepare(`UPDATE "${table}" SET ${setClauses.join(", ")}${whereSql}`).run(...setValues, ...whereValues).changes;
491
+ }
492
+ async tableDelete(table, filter) {
493
+ const { whereSql, whereValues } = this.buildWhere(filter);
494
+ return this.getDb().prepare(`DELETE FROM "${table}"${whereSql}`).run(...whereValues).changes;
495
+ }
496
+ async tableQuery(table, options) {
497
+ let sql = `SELECT * FROM "${table}"`;
498
+ const values = [];
499
+ if (options?.where) {
500
+ const { whereSql, whereValues } = this.buildWhere(options.where);
501
+ sql += whereSql;
502
+ values.push(...whereValues);
503
+ }
504
+ if (options?.orderBy) sql += ` ORDER BY "${options.orderBy.field}" ${options.orderBy.direction === "desc" ? "DESC" : "ASC"}`;
505
+ if (options?.limit !== void 0) {
506
+ sql += ` LIMIT ?`;
507
+ values.push(options.limit);
508
+ }
509
+ if (options?.offset !== void 0) {
510
+ sql += ` OFFSET ?`;
511
+ values.push(options.offset);
512
+ }
513
+ return this.getDb().prepare(sql).all(...values).flatMap((r) => (0, _camstack_types.asJsonObject)(r) ? [(0, _camstack_types.asJsonObject)(r)] : []);
514
+ }
515
+ async tableGet(table, filter) {
516
+ const { whereSql, whereValues } = this.buildWhere(filter);
517
+ return (0, _camstack_types.asJsonObject)(this.getDb().prepare(`SELECT * FROM "${table}"${whereSql} LIMIT 1`).get(...whereValues));
518
+ }
519
+ async tableCount(table, filter) {
520
+ let sql = `SELECT COUNT(*) as count FROM "${table}"`;
521
+ const values = [];
522
+ if (filter) {
523
+ const { whereSql, whereValues } = this.buildWhere(filter);
524
+ sql += whereSql;
525
+ values.push(...whereValues);
526
+ }
527
+ const row = (0, _camstack_types.asJsonObject)(this.getDb().prepare(sql).get(...values));
528
+ return typeof row?.count === "number" ? row.count : 0;
529
+ }
530
+ buildWhere(filter) {
531
+ const conditions = [];
532
+ const values = [];
533
+ for (const [k, v] of Object.entries(filter)) {
534
+ conditions.push(`"${k}" = ?`);
535
+ values.push(typeof v === "object" && v !== null ? JSON.stringify(v) : v);
536
+ }
537
+ return {
538
+ whereSql: conditions.length > 0 ? ` WHERE ${conditions.join(" AND ")}` : "",
539
+ whereValues: values
540
+ };
541
+ }
377
542
  };
378
-
379
- // src/builtins/sqlite-storage/sqlite-settings.addon.ts
380
- var SqliteSettingsAddon = class {
381
- manifest = {
382
- id: "sqlite-settings",
383
- name: "SQLite Settings",
384
- version: "1.0.0",
385
- capabilities: [{ name: "settings-store", mode: "singleton" }]
386
- };
387
- backend = null;
388
- async initialize(context) {
389
- const dbPath = context.storageProvider ? context.storageProvider.resolve("addons-data", `${context.id.replace("addon:", "")}/camstack.db`) : context.dataDir ? `${context.dataDir}/camstack.db` : "camstack-data/addons-data/sqlite-settings/camstack.db";
390
- const runtimeDefaults = context.addonConfig._runtimeDefaults ?? {};
391
- this.backend = new SqliteSettingsBackend(dbPath, runtimeDefaults);
392
- await this.backend.initialize();
393
- context.logger.info(`SQLite settings initialized at ${dbPath}`);
394
- }
395
- async shutdown() {
396
- await this.backend?.shutdown();
397
- }
398
- getBackend() {
399
- return this.backend;
400
- }
401
- getCapabilityProvider(name) {
402
- if (name === "settings-store" && this.backend) {
403
- return this.backend;
404
- }
405
- return null;
406
- }
407
- getConfigSchema() {
408
- return { sections: [] };
409
- }
410
- getConfig() {
411
- return {};
412
- }
413
- async onConfigChange(_config) {
414
- }
543
+ //#endregion
544
+ //#region src/builtins/sqlite-storage/sqlite-settings.addon.ts
545
+ /**
546
+ * SQLite Settings addon — provides persistent settings storage.
547
+ * Capability: 'settings-store' (singleton)
548
+ */
549
+ var SqliteSettingsAddon = class extends _camstack_types.BaseAddon {
550
+ backend = null;
551
+ constructor() {
552
+ super({});
553
+ }
554
+ async onInitialize() {
555
+ const addonId = this.ctx.id.replace("addon:", "");
556
+ const path = await import("node:path");
557
+ const dbPath = this.ctx.dataDir ? path.join(this.ctx.dataDir, "camstack.db") : path.join("camstack-data", "addons-data", addonId, "camstack.db");
558
+ const pathSource = this.ctx.dataDir ? "dataDir" : "fallback (hardcoded)";
559
+ let dbExists = false;
560
+ try {
561
+ const fs = await import("node:fs");
562
+ dbExists = fs.existsSync(dbPath);
563
+ if (!dbExists) await fs.promises.mkdir(path.dirname(dbPath), { recursive: true });
564
+ } catch (err) {
565
+ this.ctx.logger.warn("Failed to check/create DB directory", { meta: { error: (0, _camstack_types.errMsg)(err) } });
566
+ }
567
+ this.ctx.logger.info("DB path resolved", { meta: {
568
+ pathSource,
569
+ dbPath
570
+ } });
571
+ this.ctx.logger.info("DB file status", { meta: { dbExists } });
572
+ this.backend = new SqliteSettingsBackend(dbPath, { ..._camstack_types.RUNTIME_DEFAULTS });
573
+ await this.backend.initialize();
574
+ this.ctx.logger.info("Initialized successfully");
575
+ return [{
576
+ capability: _camstack_types.settingsStoreCapability,
577
+ provider: this.backend
578
+ }];
579
+ }
580
+ async onShutdown() {
581
+ await this.backend?.shutdown();
582
+ }
583
+ getBackend() {
584
+ return this.backend;
585
+ }
415
586
  };
416
- var sqlite_settings_addon_default = SqliteSettingsAddon;
417
- // Annotate the CommonJS export names for ESM import in node:
418
- 0 && (module.exports = {
419
- SqliteSettingsAddon
420
- });
587
+ //#endregion
588
+ exports.SqliteSettingsAddon = SqliteSettingsAddon;
589
+ exports.default = SqliteSettingsAddon;
590
+ exports.SqliteSettingsBackend = SqliteSettingsBackend;
591
+
421
592
  //# sourceMappingURL=sqlite-settings.addon.js.map