@camstack/core 0.1.15 → 0.1.17

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 +110 -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 +399 -0
  124. package/dist/builtins/local-network/local-network.addon.js.map +1 -0
  125. package/dist/builtins/local-network/local-network.addon.mjs +387 -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,60 +1,316 @@
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 });
1
+ Object.defineProperties(exports, {
2
+ __esModule: { value: true },
3
+ [Symbol.toStringTag]: { value: "Module" }
4
+ });
5
+ const require_chunk = require("../../chunk-C13QxCFV.js");
6
+ let node_fs = require("node:fs");
7
+ node_fs = require_chunk.__toESM(node_fs);
8
+ let node_path = require("node:path");
9
+ node_path = require_chunk.__toESM(node_path);
10
+ let node_crypto = require("node:crypto");
11
+ let _camstack_types = require("@camstack/types");
12
+ //#region src/builtins/sqlite-storage/filesystem-storage-provider.ts
13
+ /**
14
+ * Filesystem `storage-provider` (Task 7).
15
+ *
16
+ * Implements the `storage-provider` collection cap. Replaces the legacy
17
+ * sync `IStorageProvider` shape — every method now takes the live
18
+ * `StorageLocation` inline (no per-provider location state) and works
19
+ * off `location.config.basePath`.
20
+ *
21
+ * Adds chunked upload (`.partial` rename trick) + chunked download
22
+ * sessions for moving multi-GB archives without buffering the whole
23
+ * archive in memory. Sessions auto-expire after 5 minutes idle.
24
+ *
25
+ * The legacy `FilesystemStorageProvider` in `@camstack/types/node` is
26
+ * deliberately untouched — it still backs the sync `ctx.kernel.storage`
27
+ * helper that addons like `pipeline-analytics` use to derive paths
28
+ * synchronously. That sync API will be retired in a later refactor;
29
+ * Task 7 is scoped to the cap surface only.
30
+ */
31
+ /** Idle TTL for upload + download sessions. */
32
+ var SESSION_IDLE_TTL_MS = 300 * 1e3;
33
+ /**
34
+ * Resolve `location.config.basePath` into a string. Throws an actionable
35
+ * error when the field is missing or wrong-typed — every primitive
36
+ * funnels through here, so a missing field surfaces as a single clear
37
+ * message instead of a downstream `path.join` TypeError.
38
+ */
39
+ function getBasePath(location) {
40
+ const basePath = location.config["basePath"];
41
+ if (typeof basePath !== "string" || basePath.length === 0) throw new Error(`filesystem-storage: location "${location.id}" missing string config.basePath`);
42
+ return basePath;
43
+ }
44
+ /**
45
+ * Resolve a relative path against the location's base, rejecting any
46
+ * traversal that escapes the base directory. Mirrors the
47
+ * `addon-asset` endpoint security check in `main.ts`: normalize both
48
+ * the base + the joined target, then enforce `target.startsWith(base + sep)`
49
+ * (with the `+ sep` guard so `/data` doesn't accidentally allow
50
+ * `/datasecret`).
51
+ */
52
+ function safeResolve(base, relativePath) {
53
+ const normalizedBase = node_path.resolve(base);
54
+ const target = node_path.resolve(normalizedBase, relativePath);
55
+ if (target !== normalizedBase && !target.startsWith(normalizedBase + node_path.sep)) throw new Error(`filesystem-storage: relativePath "${relativePath}" escapes basePath "${normalizedBase}"`);
56
+ return target;
57
+ }
58
+ var FilesystemStorageProvider = class FilesystemStorageProvider {
59
+ static providerId = "filesystem-storage";
60
+ static displayName = "Filesystem";
61
+ uploads = /* @__PURE__ */ new Map();
62
+ downloads = /* @__PURE__ */ new Map();
63
+ async getProviderInfo() {
64
+ return {
65
+ providerId: FilesystemStorageProvider.providerId,
66
+ displayName: FilesystemStorageProvider.displayName,
67
+ supportedLocationTypes: _camstack_types.STORAGE_LOCATION_TYPES,
68
+ configSchema: { sections: [{
69
+ id: "filesystem-storage",
70
+ title: "Filesystem",
71
+ fields: [{
72
+ type: "text",
73
+ key: "basePath",
74
+ label: "Base path",
75
+ description: "Absolute directory path where files are stored.",
76
+ required: true
77
+ }]
78
+ }] }
79
+ };
80
+ }
81
+ async testLocation({ config }) {
82
+ const basePath = config["basePath"];
83
+ if (typeof basePath !== "string" || basePath.length === 0) return {
84
+ ok: false,
85
+ error: "config.basePath must be a non-empty string"
86
+ };
87
+ try {
88
+ const stat = await node_fs.promises.stat(basePath).catch(() => null);
89
+ if (stat) {
90
+ if (!stat.isDirectory()) return {
91
+ ok: false,
92
+ error: `Path "${basePath}" exists but is not a directory`
93
+ };
94
+ await node_fs.promises.access(basePath, node_fs.constants.W_OK);
95
+ return { ok: true };
96
+ }
97
+ await node_fs.promises.mkdir(basePath, { recursive: true });
98
+ return { ok: true };
99
+ } catch (err) {
100
+ return {
101
+ ok: false,
102
+ error: err instanceof Error ? err.message : String(err)
103
+ };
104
+ }
105
+ }
106
+ async resolve({ location, relativePath }) {
107
+ return safeResolve(getBasePath(location), relativePath);
108
+ }
109
+ async write({ location, relativePath, data }) {
110
+ const filePath = safeResolve(getBasePath(location), relativePath);
111
+ await node_fs.promises.mkdir(node_path.dirname(filePath), { recursive: true });
112
+ await node_fs.promises.writeFile(filePath, data);
113
+ }
114
+ async read({ location, relativePath }) {
115
+ const filePath = safeResolve(getBasePath(location), relativePath);
116
+ const buf = await node_fs.promises.readFile(filePath);
117
+ const out = new Uint8Array(new ArrayBuffer(buf.byteLength));
118
+ out.set(buf);
119
+ return out;
120
+ }
121
+ async exists({ location, relativePath }) {
122
+ const filePath = safeResolve(getBasePath(location), relativePath);
123
+ try {
124
+ await node_fs.promises.access(filePath);
125
+ return true;
126
+ } catch {
127
+ return false;
128
+ }
129
+ }
130
+ async list({ location, prefix }) {
131
+ const base = getBasePath(location);
132
+ const dir = prefix ? safeResolve(base, prefix) : node_path.resolve(base);
133
+ try {
134
+ return (await node_fs.promises.readdir(dir, { withFileTypes: true })).map((e) => prefix ? `${prefix}/${e.name}` : e.name);
135
+ } catch {
136
+ return [];
137
+ }
138
+ }
139
+ async delete({ location, relativePath }) {
140
+ const filePath = safeResolve(getBasePath(location), relativePath);
141
+ await node_fs.promises.rm(filePath, { force: true });
142
+ }
143
+ async getAvailableSpace({ location }) {
144
+ const base = node_path.resolve(getBasePath(location));
145
+ try {
146
+ let target = base;
147
+ while (!node_fs.existsSync(target)) {
148
+ const parent = node_path.dirname(target);
149
+ if (!parent || parent === target) return null;
150
+ target = parent;
151
+ }
152
+ const stats = await node_fs.promises.statfs(target);
153
+ return stats.bavail * stats.bsize;
154
+ } catch {
155
+ return null;
156
+ }
157
+ }
158
+ async beginUpload({ location, relativePath }) {
159
+ const target = safeResolve(getBasePath(location), relativePath);
160
+ const partial = `${target}.partial`;
161
+ await node_fs.promises.mkdir(node_path.dirname(target), { recursive: true });
162
+ await node_fs.promises.unlink(partial).catch(() => {});
163
+ const stream = node_fs.createWriteStream(partial);
164
+ const uploadId = (0, node_crypto.randomUUID)();
165
+ const session = {
166
+ stream,
167
+ target,
168
+ partial,
169
+ bytesWritten: 0,
170
+ timer: setTimeout(() => {
171
+ this.abortUpload({ uploadId }).catch(() => {});
172
+ }, SESSION_IDLE_TTL_MS)
173
+ };
174
+ this.uploads.set(uploadId, session);
175
+ return { uploadId };
176
+ }
177
+ async writeChunk({ uploadId, offset, data }) {
178
+ const session = this.uploads.get(uploadId);
179
+ if (!session) throw new Error(`filesystem-storage: upload session "${uploadId}" not found`);
180
+ if (offset !== session.bytesWritten) throw new Error(`filesystem-storage: chunk offset mismatch (expected ${session.bytesWritten}, got ${offset})`);
181
+ await new Promise((resolve, reject) => {
182
+ session.stream.write(data, (err) => {
183
+ if (err) reject(err);
184
+ else resolve();
185
+ });
186
+ });
187
+ clearTimeout(session.timer);
188
+ const nextBytesWritten = session.bytesWritten + data.length;
189
+ this.uploads.set(uploadId, {
190
+ ...session,
191
+ bytesWritten: nextBytesWritten,
192
+ timer: setTimeout(() => {
193
+ this.abortUpload({ uploadId }).catch(() => {});
194
+ }, SESSION_IDLE_TTL_MS)
195
+ });
196
+ }
197
+ async finalizeUpload({ uploadId }) {
198
+ const session = this.uploads.get(uploadId);
199
+ if (!session) throw new Error(`filesystem-storage: upload session "${uploadId}" not found`);
200
+ await new Promise((resolve, reject) => {
201
+ session.stream.end(() => resolve());
202
+ session.stream.on("error", reject);
203
+ });
204
+ await node_fs.promises.rename(session.partial, session.target);
205
+ clearTimeout(session.timer);
206
+ this.uploads.delete(uploadId);
207
+ }
208
+ async abortUpload({ uploadId }) {
209
+ const session = this.uploads.get(uploadId);
210
+ if (!session) return;
211
+ try {
212
+ session.stream.destroy();
213
+ } catch {}
214
+ await node_fs.promises.unlink(session.partial).catch(() => {});
215
+ clearTimeout(session.timer);
216
+ this.uploads.delete(uploadId);
217
+ }
218
+ async beginDownload({ location, relativePath }) {
219
+ const target = safeResolve(getBasePath(location), relativePath);
220
+ const stat = await node_fs.promises.stat(target);
221
+ const fd = await node_fs.promises.open(target, "r");
222
+ const downloadId = (0, node_crypto.randomUUID)();
223
+ const session = {
224
+ fd,
225
+ sizeBytes: stat.size,
226
+ timer: setTimeout(() => {
227
+ this.endDownload({ downloadId }).catch(() => {});
228
+ }, SESSION_IDLE_TTL_MS)
229
+ };
230
+ this.downloads.set(downloadId, session);
231
+ return {
232
+ downloadId,
233
+ sizeBytes: stat.size
234
+ };
235
+ }
236
+ async readChunk({ downloadId, offset, length }) {
237
+ const session = this.downloads.get(downloadId);
238
+ if (!session) throw new Error(`filesystem-storage: download session "${downloadId}" not found`);
239
+ const out = new Uint8Array(new ArrayBuffer(length));
240
+ const { bytesRead } = await session.fd.read(out, 0, length, offset);
241
+ clearTimeout(session.timer);
242
+ this.downloads.set(downloadId, {
243
+ ...session,
244
+ timer: setTimeout(() => {
245
+ this.endDownload({ downloadId }).catch(() => {});
246
+ }, SESSION_IDLE_TTL_MS)
247
+ });
248
+ return out.subarray(0, bytesRead);
249
+ }
250
+ async endDownload({ downloadId }) {
251
+ const session = this.downloads.get(downloadId);
252
+ if (!session) return;
253
+ try {
254
+ await session.fd.close();
255
+ } catch {}
256
+ clearTimeout(session.timer);
257
+ this.downloads.delete(downloadId);
258
+ }
259
+ /**
260
+ * Abort all outstanding sessions. Called on addon shutdown so timers
261
+ * don't leak across hot-reload cycles.
262
+ */
263
+ async dispose() {
264
+ const uploadIds = [...this.uploads.keys()];
265
+ const downloadIds = [...this.downloads.keys()];
266
+ await Promise.all(uploadIds.map((uploadId) => this.abortUpload({ uploadId })));
267
+ await Promise.all(downloadIds.map((downloadId) => this.endDownload({ downloadId })));
268
+ }
9
269
  };
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;
270
+ //#endregion
271
+ //#region src/builtins/sqlite-storage/filesystem-storage.addon.ts
272
+ /**
273
+ * Filesystem Storage addon registers a filesystem-backed
274
+ * `storage-provider` (Task 7).
275
+ *
276
+ * Pre-Task 7 this addon registered against the (then-collection)
277
+ * `storage` cap. After Tasks 2/3/4 the consumer-facing `storage` cap is
278
+ * a singleton owned by `storage-orchestrator`; the orchestrator
279
+ * dispatches each call to whichever `storage-provider` matches
280
+ * `location.providerId`.
281
+ *
282
+ * The OLD `rootPath` config field is preserved for back-compat: the
283
+ * orchestrator's first-boot seeding step still uses the same env-var
284
+ * resolution chain (operator override → `CAMSTACK_DATA` → fallback) to
285
+ * derive the base path of every default location, then writes
286
+ * `config.basePath` into each persisted `StorageLocation` row. The
287
+ * provider itself is now stateless — every call carries the live
288
+ * `StorageLocation` inline.
289
+ */
290
+ var FilesystemStorageAddon = class extends _camstack_types.BaseAddon {
291
+ provider = null;
292
+ constructor() {
293
+ super({ rootPath: "camstack-data" });
294
+ }
295
+ async onInitialize() {
296
+ this.provider = new FilesystemStorageProvider();
297
+ this.ctx.logger.info("Filesystem storage-provider initialized");
298
+ return [{
299
+ capability: _camstack_types.storageProviderCapability,
300
+ provider: this.provider
301
+ }];
302
+ }
303
+ async onShutdown() {
304
+ await this.provider?.dispose();
305
+ this.provider = null;
306
+ }
307
+ getProvider() {
308
+ return this.provider;
309
+ }
17
310
  };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
311
+ //#endregion
312
+ exports.FilesystemStorageAddon = FilesystemStorageAddon;
313
+ exports.default = FilesystemStorageAddon;
314
+ exports.FilesystemStorageProvider = FilesystemStorageProvider;
19
315
 
20
- // src/builtins/sqlite-storage/filesystem-storage.addon.ts
21
- var filesystem_storage_addon_exports = {};
22
- __export(filesystem_storage_addon_exports, {
23
- FilesystemStorageAddon: () => FilesystemStorageAddon,
24
- default: () => filesystem_storage_addon_default
25
- });
26
- module.exports = __toCommonJS(filesystem_storage_addon_exports);
27
- var import_types = require("@camstack/types");
28
- var import_node = require("@camstack/types/node");
29
- var FilesystemStorageAddon = class extends import_types.BaseAddon {
30
- provider = null;
31
- constructor() {
32
- super({ rootPath: "camstack-data" });
33
- }
34
- async onInitialize() {
35
- const rootPath = this.ctx.addonConfig.rootPath ?? this.config.rootPath;
36
- const overrides = {};
37
- const addonCfg = this.ctx.addonConfig;
38
- for (const key of Object.keys(addonCfg)) {
39
- if (key.startsWith("override.")) {
40
- const loc = key.slice("override.".length);
41
- overrides[loc] = addonCfg[key];
42
- }
43
- }
44
- this.provider = new import_node.FilesystemStorageProvider(rootPath, overrides);
45
- this.ctx.logger.info("Filesystem storage initialized", { meta: { rootPath: this.provider.getRootPath() } });
46
- return [{ capability: import_types.storageCapability, provider: this.provider }];
47
- }
48
- async onShutdown() {
49
- this.provider = null;
50
- }
51
- getProvider() {
52
- return this.provider;
53
- }
54
- };
55
- var filesystem_storage_addon_default = FilesystemStorageAddon;
56
- // Annotate the CommonJS export names for ESM import in node:
57
- 0 && (module.exports = {
58
- FilesystemStorageAddon
59
- });
60
316
  //# sourceMappingURL=filesystem-storage.addon.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/builtins/sqlite-storage/filesystem-storage.addon.ts"],"sourcesContent":["import type {\n StorageLocationType,\n ProviderRegistration,\n} from '@camstack/types'\nimport { BaseAddon, storageCapability } from '@camstack/types'\nimport { FilesystemStorageProvider } from '@camstack/types/node'\n\ninterface FilesystemStorageConfig {\n readonly rootPath: string\n}\n\n/**\n * Filesystem Storage addon — provides local disk storage for all location types.\n * Capability: 'storage' (collection)\n */\nexport class FilesystemStorageAddon extends BaseAddon<FilesystemStorageConfig> {\n private provider: FilesystemStorageProvider | null = null\n\n constructor() {\n super({ rootPath: 'camstack-data' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n const rootPath = (this.ctx.addonConfig as Record<string, unknown>).rootPath as string | undefined ?? this.config.rootPath\n\n const overrides: Partial<Record<StorageLocationType, string>> = {}\n const addonCfg = this.ctx.addonConfig as Record<string, unknown>\n for (const key of Object.keys(addonCfg)) {\n if (key.startsWith('override.')) {\n const loc = key.slice('override.'.length) as StorageLocationType\n overrides[loc] = addonCfg[key] as string\n }\n }\n\n this.provider = new FilesystemStorageProvider(rootPath, overrides)\n this.ctx.logger.info('Filesystem storage initialized', { meta: { rootPath: this.provider.getRootPath() } })\n return [{ capability: storageCapability, provider: this.provider }]\n }\n\n protected async onShutdown(): Promise<void> {\n this.provider = null\n }\n\n getProvider(): FilesystemStorageProvider | null {\n return this.provider\n }\n}\n\nexport default FilesystemStorageAddon\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,mBAA6C;AAC7C,kBAA0C;AAUnC,IAAM,yBAAN,cAAqC,uBAAmC;AAAA,EACrE,WAA6C;AAAA,EAErD,cAAc;AACZ,UAAM,EAAE,UAAU,gBAAgB,CAAC;AAAA,EACrC;AAAA,EAEA,MAAgB,eAAgD;AAC9D,UAAM,WAAY,KAAK,IAAI,YAAwC,YAAkC,KAAK,OAAO;AAEjH,UAAM,YAA0D,CAAC;AACjE,UAAM,WAAW,KAAK,IAAI;AAC1B,eAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,UAAI,IAAI,WAAW,WAAW,GAAG;AAC/B,cAAM,MAAM,IAAI,MAAM,YAAY,MAAM;AACxC,kBAAU,GAAG,IAAI,SAAS,GAAG;AAAA,MAC/B;AAAA,IACF;AAEA,SAAK,WAAW,IAAI,sCAA0B,UAAU,SAAS;AACjE,SAAK,IAAI,OAAO,KAAK,kCAAkC,EAAE,MAAM,EAAE,UAAU,KAAK,SAAS,YAAY,EAAE,EAAE,CAAC;AAC1G,WAAO,CAAC,EAAE,YAAY,gCAAmB,UAAU,KAAK,SAAS,CAAC;AAAA,EACpE;AAAA,EAEA,MAAgB,aAA4B;AAC1C,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,cAAgD;AAC9C,WAAO,KAAK;AAAA,EACd;AACF;AAEA,IAAO,mCAAQ;","names":[]}
1
+ {"version":3,"file":"filesystem-storage.addon.js","names":[],"sources":["../../../src/builtins/sqlite-storage/filesystem-storage-provider.ts","../../../src/builtins/sqlite-storage/filesystem-storage.addon.ts"],"sourcesContent":["/**\n * Filesystem `storage-provider` (Task 7).\n *\n * Implements the `storage-provider` collection cap. Replaces the legacy\n * sync `IStorageProvider` shape — every method now takes the live\n * `StorageLocation` inline (no per-provider location state) and works\n * off `location.config.basePath`.\n *\n * Adds chunked upload (`.partial` rename trick) + chunked download\n * sessions for moving multi-GB archives without buffering the whole\n * archive in memory. Sessions auto-expire after 5 minutes idle.\n *\n * The legacy `FilesystemStorageProvider` in `@camstack/types/node` is\n * deliberately untouched — it still backs the sync `ctx.kernel.storage`\n * helper that addons like `pipeline-analytics` use to derive paths\n * synchronously. That sync API will be retired in a later refactor;\n * Task 7 is scoped to the cap surface only.\n */\nimport * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport { randomUUID } from 'node:crypto'\nimport type { FileHandle } from 'node:fs/promises'\nimport type {\n IStorageProviderImpl,\n StorageLocation,\n StorageLocationType,\n} from '@camstack/types'\nimport { STORAGE_LOCATION_TYPES } from '@camstack/types'\n\n/** Idle TTL for upload + download sessions. */\nconst SESSION_IDLE_TTL_MS = 5 * 60 * 1000\n\ninterface UploadSession {\n readonly stream: fs.WriteStream\n readonly target: string\n readonly partial: string\n bytesWritten: number\n timer: NodeJS.Timeout\n}\n\ninterface DownloadSession {\n readonly fd: FileHandle\n readonly sizeBytes: number\n timer: NodeJS.Timeout\n}\n\n/**\n * Resolve `location.config.basePath` into a string. Throws an actionable\n * error when the field is missing or wrong-typed — every primitive\n * funnels through here, so a missing field surfaces as a single clear\n * message instead of a downstream `path.join` TypeError.\n */\nfunction getBasePath(location: StorageLocation): string {\n const cfg = location.config as Record<string, unknown>\n const basePath = cfg['basePath']\n if (typeof basePath !== 'string' || basePath.length === 0) {\n throw new Error(\n `filesystem-storage: location \"${location.id}\" missing string config.basePath`,\n )\n }\n return basePath\n}\n\n/**\n * Resolve a relative path against the location's base, rejecting any\n * traversal that escapes the base directory. Mirrors the\n * `addon-asset` endpoint security check in `main.ts`: normalize both\n * the base + the joined target, then enforce `target.startsWith(base + sep)`\n * (with the `+ sep` guard so `/data` doesn't accidentally allow\n * `/datasecret`).\n */\nfunction safeResolve(base: string, relativePath: string): string {\n const normalizedBase = path.resolve(base)\n const target = path.resolve(normalizedBase, relativePath)\n if (target !== normalizedBase && !target.startsWith(normalizedBase + path.sep)) {\n throw new Error(\n `filesystem-storage: relativePath \"${relativePath}\" escapes basePath \"${normalizedBase}\"`,\n )\n }\n return target\n}\n\nexport class FilesystemStorageProvider implements IStorageProviderImpl {\n static readonly providerId = 'filesystem-storage'\n static readonly displayName = 'Filesystem'\n\n private readonly uploads = new Map<string, UploadSession>()\n private readonly downloads = new Map<string, DownloadSession>()\n\n // ── Self-description ────────────────────────────────────────────────\n\n async getProviderInfo(): Promise<{\n readonly providerId: string\n readonly displayName: string\n readonly supportedLocationTypes: readonly StorageLocationType[]\n readonly configSchema: unknown\n }> {\n return {\n providerId: FilesystemStorageProvider.providerId,\n displayName: FilesystemStorageProvider.displayName,\n // Filesystem can host every location type — the orchestrator's\n // first-boot seeding walks this list to provision defaults.\n supportedLocationTypes: STORAGE_LOCATION_TYPES,\n // Minimal schema — the only required field is `basePath`. Casted\n // through `unknown` because the cap surface declares\n // `configSchema: z.unknown()` (the admin UI casts back at the\n // consumption site to `ConfigUISchemaWithValues`).\n configSchema: {\n sections: [\n {\n id: 'filesystem-storage',\n title: 'Filesystem',\n fields: [\n {\n type: 'text',\n key: 'basePath',\n label: 'Base path',\n description: 'Absolute directory path where files are stored.',\n required: true,\n },\n ],\n },\n ],\n },\n }\n }\n\n async testLocation({ config }: { readonly config: Record<string, unknown> }): Promise<{\n readonly ok: boolean\n readonly error?: string\n }> {\n const basePath = config['basePath']\n if (typeof basePath !== 'string' || basePath.length === 0) {\n return { ok: false, error: 'config.basePath must be a non-empty string' }\n }\n try {\n const stat = await fs.promises.stat(basePath).catch(() => null)\n if (stat) {\n if (!stat.isDirectory()) {\n return { ok: false, error: `Path \"${basePath}\" exists but is not a directory` }\n }\n // Confirm we can write to it.\n await fs.promises.access(basePath, fs.constants.W_OK)\n return { ok: true }\n }\n // Doesn't exist — try to create it.\n await fs.promises.mkdir(basePath, { recursive: true })\n return { ok: true }\n } catch (err) {\n return {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n }\n\n // ── Small-file primitives ───────────────────────────────────────────\n\n async resolve({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n }): Promise<string> {\n return safeResolve(getBasePath(location), relativePath)\n }\n\n async write({\n location,\n relativePath,\n data,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n readonly data: Uint8Array\n }): Promise<void> {\n const filePath = safeResolve(getBasePath(location), relativePath)\n await fs.promises.mkdir(path.dirname(filePath), { recursive: true })\n await fs.promises.writeFile(filePath, data)\n }\n\n async read({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n }): Promise<Uint8Array<ArrayBuffer>> {\n const filePath = safeResolve(getBasePath(location), relativePath)\n const buf = await fs.promises.readFile(filePath)\n // The cap surface narrows `Uint8Array` to `Uint8Array<ArrayBuffer>`\n // (Node's `Buffer` types as `Uint8Array<ArrayBufferLike>` which can\n // also wrap a `SharedArrayBuffer`). Copy through a fresh\n // `ArrayBuffer` so the structural narrowing succeeds. The copy is\n // cheap relative to the disk read; for chunked transfers callers\n // should use `beginDownload`/`readChunk` which already allocates\n // its own ArrayBuffer-backed Buffer.\n const out = new Uint8Array(new ArrayBuffer(buf.byteLength))\n out.set(buf)\n return out\n }\n\n async exists({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n }): Promise<boolean> {\n const filePath = safeResolve(getBasePath(location), relativePath)\n try {\n await fs.promises.access(filePath)\n return true\n } catch {\n return false\n }\n }\n\n async list({\n location,\n prefix,\n }: {\n readonly location: StorageLocation\n readonly prefix?: string\n }): Promise<readonly string[]> {\n const base = getBasePath(location)\n const dir = prefix ? safeResolve(base, prefix) : path.resolve(base)\n try {\n const entries = await fs.promises.readdir(dir, { withFileTypes: true })\n // Return RELATIVE-to-location filenames so consumers can pass\n // them straight back to `read({ location, relativePath })`.\n return entries.map(e => (prefix ? `${prefix}/${e.name}` : e.name))\n } catch {\n return []\n }\n }\n\n async delete({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n }): Promise<void> {\n const filePath = safeResolve(getBasePath(location), relativePath)\n await fs.promises.rm(filePath, { force: true })\n }\n\n async getAvailableSpace({\n location,\n }: {\n readonly location: StorageLocation\n }): Promise<number | null> {\n const base = path.resolve(getBasePath(location))\n // Walk up to the nearest existing ancestor when the directory\n // hasn't been created yet (lazy-mkdir contract from the legacy\n // provider) so statfs can still report mount-point free space.\n try {\n let target = base\n while (!fs.existsSync(target)) {\n const parent = path.dirname(target)\n if (!parent || parent === target) return null\n target = parent\n }\n const stats = await fs.promises.statfs(target)\n return stats.bavail * stats.bsize\n } catch {\n return null\n }\n }\n\n // ── Chunked upload ──────────────────────────────────────────────────\n\n async beginUpload({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n readonly sizeBytes?: number\n }): Promise<{ readonly uploadId: string }> {\n const target = safeResolve(getBasePath(location), relativePath)\n const partial = `${target}.partial`\n await fs.promises.mkdir(path.dirname(target), { recursive: true })\n // Wipe a stale `.partial` from a previous aborted run so the\n // append-zero offset stays correct.\n await fs.promises.unlink(partial).catch(() => {})\n const stream = fs.createWriteStream(partial)\n const uploadId = randomUUID()\n const session: UploadSession = {\n stream,\n target,\n partial,\n bytesWritten: 0,\n timer: setTimeout(() => {\n void this.abortUpload({ uploadId }).catch(() => {})\n }, SESSION_IDLE_TTL_MS),\n }\n this.uploads.set(uploadId, session)\n return { uploadId }\n }\n\n async writeChunk({\n uploadId,\n offset,\n data,\n }: {\n readonly uploadId: string\n readonly offset: number\n readonly data: Uint8Array\n }): Promise<void> {\n const session = this.uploads.get(uploadId)\n if (!session) {\n throw new Error(`filesystem-storage: upload session \"${uploadId}\" not found`)\n }\n if (offset !== session.bytesWritten) {\n throw new Error(\n `filesystem-storage: chunk offset mismatch (expected ${session.bytesWritten}, got ${offset})`,\n )\n }\n await new Promise<void>((resolve, reject) => {\n session.stream.write(data, err => {\n if (err) reject(err)\n else resolve()\n })\n })\n // Replace session with updated bytesWritten + reset timer (immutable\n // update; old timer cleared).\n clearTimeout(session.timer)\n const nextBytesWritten = session.bytesWritten + data.length\n this.uploads.set(uploadId, {\n ...session,\n bytesWritten: nextBytesWritten,\n timer: setTimeout(() => {\n void this.abortUpload({ uploadId }).catch(() => {})\n }, SESSION_IDLE_TTL_MS),\n })\n }\n\n async finalizeUpload({ uploadId }: { readonly uploadId: string }): Promise<void> {\n const session = this.uploads.get(uploadId)\n if (!session) {\n throw new Error(`filesystem-storage: upload session \"${uploadId}\" not found`)\n }\n await new Promise<void>((resolve, reject) => {\n session.stream.end(() => resolve())\n session.stream.on('error', reject)\n })\n await fs.promises.rename(session.partial, session.target)\n clearTimeout(session.timer)\n this.uploads.delete(uploadId)\n }\n\n async abortUpload({ uploadId }: { readonly uploadId: string }): Promise<void> {\n const session = this.uploads.get(uploadId)\n if (!session) return // Already cleaned up — idempotent.\n try {\n session.stream.destroy()\n } catch {\n // Best-effort.\n }\n await fs.promises.unlink(session.partial).catch(() => {})\n clearTimeout(session.timer)\n this.uploads.delete(uploadId)\n }\n\n // ── Chunked download ────────────────────────────────────────────────\n\n async beginDownload({\n location,\n relativePath,\n }: {\n readonly location: StorageLocation\n readonly relativePath: string\n }): Promise<{ readonly downloadId: string; readonly sizeBytes: number }> {\n const target = safeResolve(getBasePath(location), relativePath)\n const stat = await fs.promises.stat(target)\n const fd = await fs.promises.open(target, 'r')\n const downloadId = randomUUID()\n const session: DownloadSession = {\n fd,\n sizeBytes: stat.size,\n timer: setTimeout(() => {\n void this.endDownload({ downloadId }).catch(() => {})\n }, SESSION_IDLE_TTL_MS),\n }\n this.downloads.set(downloadId, session)\n return { downloadId, sizeBytes: stat.size }\n }\n\n async readChunk({\n downloadId,\n offset,\n length,\n }: {\n readonly downloadId: string\n readonly offset: number\n readonly length: number\n }): Promise<Uint8Array<ArrayBuffer>> {\n const session = this.downloads.get(downloadId)\n if (!session) {\n throw new Error(`filesystem-storage: download session \"${downloadId}\" not found`)\n }\n // Allocate over an explicit `ArrayBuffer` so the narrowing required\n // by the cap surface (`Uint8Array<ArrayBuffer>`) succeeds — `Buffer`\n // types as `Uint8Array<ArrayBufferLike>` which TS won't widen\n // through the structural check.\n const out = new Uint8Array(new ArrayBuffer(length))\n const { bytesRead } = await session.fd.read(out, 0, length, offset)\n // Reset TTL on activity.\n clearTimeout(session.timer)\n this.downloads.set(downloadId, {\n ...session,\n timer: setTimeout(() => {\n void this.endDownload({ downloadId }).catch(() => {})\n }, SESSION_IDLE_TTL_MS),\n })\n return out.subarray(0, bytesRead)\n }\n\n async endDownload({ downloadId }: { readonly downloadId: string }): Promise<void> {\n const session = this.downloads.get(downloadId)\n if (!session) return\n try {\n await session.fd.close()\n } catch {\n // Best-effort.\n }\n clearTimeout(session.timer)\n this.downloads.delete(downloadId)\n }\n\n /**\n * Abort all outstanding sessions. Called on addon shutdown so timers\n * don't leak across hot-reload cycles.\n */\n async dispose(): Promise<void> {\n const uploadIds = [...this.uploads.keys()]\n const downloadIds = [...this.downloads.keys()]\n await Promise.all(uploadIds.map(uploadId => this.abortUpload({ uploadId })))\n await Promise.all(downloadIds.map(downloadId => this.endDownload({ downloadId })))\n }\n}\n\nexport default FilesystemStorageProvider\n","import type { ProviderRegistration } from '@camstack/types'\nimport { BaseAddon, storageProviderCapability } from '@camstack/types'\nimport { FilesystemStorageProvider } from './filesystem-storage-provider.js'\n\ninterface FilesystemStorageConfig {\n readonly rootPath: string\n}\n\n/**\n * Filesystem Storage addon — registers a filesystem-backed\n * `storage-provider` (Task 7).\n *\n * Pre-Task 7 this addon registered against the (then-collection)\n * `storage` cap. After Tasks 2/3/4 the consumer-facing `storage` cap is\n * a singleton owned by `storage-orchestrator`; the orchestrator\n * dispatches each call to whichever `storage-provider` matches\n * `location.providerId`.\n *\n * The OLD `rootPath` config field is preserved for back-compat: the\n * orchestrator's first-boot seeding step still uses the same env-var\n * resolution chain (operator override → `CAMSTACK_DATA` → fallback) to\n * derive the base path of every default location, then writes\n * `config.basePath` into each persisted `StorageLocation` row. The\n * provider itself is now stateless — every call carries the live\n * `StorageLocation` inline.\n */\nexport class FilesystemStorageAddon extends BaseAddon<FilesystemStorageConfig> {\n private provider: FilesystemStorageProvider | null = null\n\n constructor() {\n super({ rootPath: 'camstack-data' })\n }\n\n protected async onInitialize(): Promise<ProviderRegistration[]> {\n this.provider = new FilesystemStorageProvider()\n this.ctx.logger.info('Filesystem storage-provider initialized')\n return [{ capability: storageProviderCapability, provider: this.provider }]\n }\n\n protected async onShutdown(): Promise<void> {\n await this.provider?.dispose()\n this.provider = null\n }\n\n getProvider(): FilesystemStorageProvider | null {\n return this.provider\n }\n}\n\nexport default FilesystemStorageAddon\n"],"mappings":"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"}