@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.
- package/dist/addon/addon-api-factory.d.ts +36 -0
- package/dist/addon/addon-api-factory.d.ts.map +1 -0
- package/dist/addon-routes/addon-route-registry.d.ts +38 -0
- package/dist/addon-routes/addon-route-registry.d.ts.map +1 -0
- package/dist/auth/api-key-manager.d.ts +27 -0
- package/dist/auth/api-key-manager.d.ts.map +1 -0
- package/dist/auth/auth-manager.d.ts +47 -0
- package/dist/auth/auth-manager.d.ts.map +1 -0
- package/dist/auth/parse-record.d.ts +19 -0
- package/dist/auth/parse-record.d.ts.map +1 -0
- package/dist/auth/scoped-token-manager.d.ts +18 -0
- package/dist/auth/scoped-token-manager.d.ts.map +1 -0
- package/dist/auth/user-manager.d.ts +34 -0
- package/dist/auth/user-manager.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +223 -217
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js.map +1 -1
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +216 -7
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs.map +1 -1
- package/dist/builtins/addon-pages-aggregator/index.d.ts +2 -0
- package/dist/builtins/addon-pages-aggregator/index.d.ts.map +1 -0
- package/dist/builtins/addon-pages-aggregator/index.js +6 -221
- package/dist/builtins/addon-pages-aggregator/index.mjs +2 -9
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +33 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +199 -197
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js.map +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +192 -7
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs.map +1 -1
- package/dist/builtins/addon-widgets-aggregator/index.d.ts +2 -0
- package/dist/builtins/addon-widgets-aggregator/index.d.ts.map +1 -0
- package/dist/builtins/addon-widgets-aggregator/index.js +6 -201
- package/dist/builtins/addon-widgets-aggregator/index.mjs +2 -9
- package/dist/builtins/alerts/alerts.addon.d.ts +82 -0
- package/dist/builtins/alerts/alerts.addon.d.ts.map +1 -0
- package/dist/builtins/alerts/alerts.addon.js +590 -430
- package/dist/builtins/alerts/alerts.addon.js.map +1 -1
- package/dist/builtins/alerts/alerts.addon.mjs +595 -7
- package/dist/builtins/alerts/alerts.addon.mjs.map +1 -1
- package/dist/builtins/alerts/index.d.ts +2 -0
- package/dist/builtins/alerts/index.d.ts.map +1 -0
- package/dist/builtins/alerts/index.js +3 -443
- package/dist/builtins/alerts/index.mjs +2 -8
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts +8 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js +56 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.js.map +1 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs +50 -0
- package/dist/builtins/auth-orchestrator/auth-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/auth-orchestrator/index.d.ts +2 -0
- package/dist/builtins/auth-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/auth-orchestrator/index.js +7 -0
- package/dist/builtins/auth-orchestrator/index.mjs +2 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +148 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +7639 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js.map +1 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +7627 -0
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +24 -0
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts +73 -0
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts +13 -0
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/index.d.ts +3 -0
- package/dist/builtins/backup-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/backup-orchestrator/index.js +7 -0
- package/dist/builtins/backup-orchestrator/index.mjs +2 -0
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts +78 -0
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts.map +1 -0
- package/dist/builtins/console-logging/console-destination.d.ts +14 -0
- package/dist/builtins/console-logging/console-destination.d.ts.map +1 -0
- package/dist/builtins/console-logging/console-logging.addon.d.ts +26 -0
- package/dist/builtins/console-logging/console-logging.addon.d.ts.map +1 -0
- package/dist/builtins/console-logging/index.d.ts +4 -0
- package/dist/builtins/console-logging/index.d.ts.map +1 -0
- package/dist/builtins/console-logging/index.js +99 -235
- package/dist/builtins/console-logging/index.js.map +1 -1
- package/dist/builtins/console-logging/index.mjs +95 -9
- package/dist/builtins/console-logging/index.mjs.map +1 -1
- package/dist/builtins/device-manager/device-event-propagator.d.ts +27 -0
- package/dist/builtins/device-manager/device-event-propagator.d.ts.map +1 -0
- package/dist/builtins/device-manager/device-manager.addon.d.ts +259 -0
- package/dist/builtins/device-manager/device-manager.addon.d.ts.map +1 -0
- package/dist/builtins/device-manager/device-manager.addon.js +2125 -2127
- package/dist/builtins/device-manager/device-manager.addon.js.map +1 -1
- package/dist/builtins/device-manager/device-manager.addon.mjs +2145 -7
- package/dist/builtins/device-manager/device-manager.addon.mjs.map +1 -1
- package/dist/builtins/device-manager/index.d.ts +3 -0
- package/dist/builtins/device-manager/index.d.ts.map +1 -0
- package/dist/builtins/device-manager/index.js +6 -2156
- package/dist/builtins/device-manager/index.mjs +2 -10
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +45 -0
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +16 -0
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/index.d.ts +4 -0
- package/dist/builtins/hub-forwarder/index.d.ts.map +1 -0
- package/dist/builtins/hub-forwarder/index.js +150 -291
- package/dist/builtins/hub-forwarder/index.js.map +1 -1
- package/dist/builtins/hub-forwarder/index.mjs +145 -9
- package/dist/builtins/hub-forwarder/index.mjs.map +1 -1
- package/dist/builtins/local-auth/auth-schema.d.ts +12 -0
- package/dist/builtins/local-auth/auth-schema.d.ts.map +1 -0
- package/dist/builtins/local-auth/index.d.ts +2 -0
- package/dist/builtins/local-auth/index.d.ts.map +1 -0
- package/dist/builtins/local-auth/index.js +3 -623
- package/dist/builtins/local-auth/index.mjs +2 -8
- package/dist/builtins/local-auth/local-auth.addon.d.ts +17 -0
- package/dist/builtins/local-auth/local-auth.addon.d.ts.map +1 -0
- package/dist/builtins/local-auth/local-auth.addon.js +6861 -589
- package/dist/builtins/local-auth/local-auth.addon.js.map +1 -1
- package/dist/builtins/local-auth/local-auth.addon.mjs +6883 -7
- package/dist/builtins/local-auth/local-auth.addon.mjs.map +1 -1
- package/dist/builtins/local-network/index.d.ts +3 -0
- package/dist/builtins/local-network/index.d.ts.map +1 -0
- package/dist/builtins/local-network/index.js +9 -0
- package/dist/builtins/local-network/index.mjs +2 -0
- package/dist/builtins/local-network/local-network.addon.d.ts +110 -0
- package/dist/builtins/local-network/local-network.addon.d.ts.map +1 -0
- package/dist/builtins/local-network/local-network.addon.js +399 -0
- package/dist/builtins/local-network/local-network.addon.js.map +1 -0
- package/dist/builtins/local-network/local-network.addon.mjs +387 -0
- package/dist/builtins/local-network/local-network.addon.mjs.map +1 -0
- package/dist/builtins/mesh-orchestrator/index.d.ts +2 -0
- package/dist/builtins/mesh-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/mesh-orchestrator/index.js +7 -0
- package/dist/builtins/mesh-orchestrator/index.mjs +2 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts +9 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js +83 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.js.map +1 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs +77 -0
- package/dist/builtins/mesh-orchestrator/mesh-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/native-metrics/index.d.ts +3 -0
- package/dist/builtins/native-metrics/index.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts +49 -0
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts +74 -0
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts.map +1 -0
- package/dist/builtins/native-metrics/native-metrics.addon.js +887 -861
- package/dist/builtins/native-metrics/native-metrics.addon.js.map +1 -1
- package/dist/builtins/native-metrics/native-metrics.addon.mjs +914 -5
- package/dist/builtins/native-metrics/native-metrics.addon.mjs.map +1 -1
- package/dist/builtins/platform-probe/index.d.ts +12 -0
- package/dist/builtins/platform-probe/index.d.ts.map +1 -0
- package/dist/builtins/platform-probe/index.js +539 -0
- package/dist/builtins/platform-probe/index.js.map +1 -0
- package/dist/builtins/platform-probe/index.mjs +530 -0
- package/dist/builtins/platform-probe/index.mjs.map +1 -0
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts +30 -0
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts.map +1 -0
- package/dist/builtins/platform-probe/platform-scorer.d.ts +22 -0
- package/dist/builtins/platform-probe/platform-scorer.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/index.d.ts +2 -0
- package/dist/builtins/remote-access-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/index.js +7 -0
- package/dist/builtins/remote-access-orchestrator/index.mjs +2 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +9 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +72 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js.map +1 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +66 -0
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/snapshot/index.d.ts +3 -0
- package/dist/builtins/snapshot/index.d.ts.map +1 -0
- package/dist/builtins/snapshot/index.js +481 -491
- package/dist/builtins/snapshot/index.js.map +1 -1
- package/dist/builtins/snapshot/index.mjs +475 -464
- package/dist/builtins/snapshot/index.mjs.map +1 -1
- package/dist/builtins/snapshot/snapshot.addon.d.ts +121 -0
- package/dist/builtins/snapshot/snapshot.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/config-store.d.ts +9 -0
- package/dist/builtins/sqlite-storage/config-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/device-store.d.ts +24 -0
- package/dist/builtins/sqlite-storage/device-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +87 -0
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +32 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +312 -56
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.js.map +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +305 -7
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/index.d.ts +12 -0
- package/dist/builtins/sqlite-storage/index.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/index.js +229 -1001
- package/dist/builtins/sqlite-storage/index.js.map +1 -1
- package/dist/builtins/sqlite-storage/index.mjs +268 -26
- package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/integration-registry.d.ts +28 -0
- package/dist/builtins/sqlite-storage/integration-registry.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/settings-store.d.ts +40 -0
- package/dist/builtins/sqlite-storage/settings-store.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sql-schema.d.ts +33 -0
- package/dist/builtins/sqlite-storage/sql-schema.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +94 -0
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +15 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts.map +1 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +586 -653
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.js.map +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +582 -7
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs.map +1 -1
- package/dist/builtins/storage-orchestrator/index.d.ts +7 -0
- package/dist/builtins/storage-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/index.js +9 -0
- package/dist/builtins/storage-orchestrator/index.mjs +2 -0
- package/dist/builtins/storage-orchestrator/location-store.d.ts +50 -0
- package/dist/builtins/storage-orchestrator/location-store.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +60 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +755 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +746 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +121 -0
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts.map +1 -0
- package/dist/builtins/system-backup/system-backup.service.d.ts +138 -0
- package/dist/builtins/system-backup/system-backup.service.d.ts.map +1 -0
- package/dist/builtins/system-config/index.d.ts +2 -0
- package/dist/builtins/system-config/index.d.ts.map +1 -0
- package/dist/builtins/system-config/index.js +6 -188
- package/dist/builtins/system-config/index.mjs +2 -10
- package/dist/builtins/system-config/system-config.addon.d.ts +11 -0
- package/dist/builtins/system-config/system-config.addon.d.ts.map +1 -0
- package/dist/builtins/system-config/system-config.addon.js +227 -180
- package/dist/builtins/system-config/system-config.addon.js.map +1 -1
- package/dist/builtins/system-config/system-config.addon.mjs +226 -7
- package/dist/builtins/system-config/system-config.addon.mjs.map +1 -1
- package/dist/builtins/turn-orchestrator/index.d.ts +2 -0
- package/dist/builtins/turn-orchestrator/index.d.ts.map +1 -0
- package/dist/builtins/turn-orchestrator/index.js +7 -0
- package/dist/builtins/turn-orchestrator/index.mjs +2 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts +10 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.d.ts.map +1 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js +78 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.js.map +1 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs +72 -0
- package/dist/builtins/turn-orchestrator/turn-orchestrator.addon.mjs.map +1 -0
- package/dist/builtins/winston-logging/index.d.ts +4 -0
- package/dist/builtins/winston-logging/index.d.ts.map +1 -0
- package/dist/builtins/winston-logging/index.js +153 -300
- package/dist/builtins/winston-logging/index.js.map +1 -1
- package/dist/builtins/winston-logging/index.mjs +144 -9
- package/dist/builtins/winston-logging/index.mjs.map +1 -1
- package/dist/builtins/winston-logging/winston-destination.d.ts +22 -0
- package/dist/builtins/winston-logging/winston-destination.d.ts.map +1 -0
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts +20 -0
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts.map +1 -0
- package/dist/chunk-C13QxCFV.js +50 -0
- package/dist/chunk-hT5z_Zn9.mjs +35 -0
- package/dist/download/model-download-service.d.ts +42 -0
- package/dist/download/model-download-service.d.ts.map +1 -0
- package/dist/download/model-downloader.d.ts +32 -0
- package/dist/download/model-downloader.d.ts.map +1 -0
- package/dist/events/event-bus.d.ts +11 -0
- package/dist/events/event-bus.d.ts.map +1 -0
- package/dist/events/system-event-bus.d.ts +15 -0
- package/dist/events/system-event-bus.d.ts.map +1 -0
- package/dist/feature/feature-manager.d.ts +12 -0
- package/dist/feature/feature-manager.d.ts.map +1 -0
- package/dist/formatter-C-5An4Bl.mjs +164 -0
- package/dist/formatter-C-5An4Bl.mjs.map +1 -0
- package/dist/formatter-Dr_6NNZc.js +169 -0
- package/dist/formatter-Dr_6NNZc.js.map +1 -0
- package/dist/index.d.ts +76 -1696
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7780 -8035
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7707 -2148
- package/dist/index.mjs.map +1 -1
- package/dist/lifecycle/lifecycle-state-machine.d.ts +29 -0
- package/dist/lifecycle/lifecycle-state-machine.d.ts.map +1 -0
- package/dist/logging/formatter.d.ts +31 -0
- package/dist/logging/formatter.d.ts.map +1 -0
- package/dist/logging/log-manager.d.ts +52 -0
- package/dist/logging/log-manager.d.ts.map +1 -0
- package/dist/logging/log-ring-buffer.d.ts +48 -0
- package/dist/logging/log-ring-buffer.d.ts.map +1 -0
- package/dist/logging/scoped-logger.d.ts +18 -0
- package/dist/logging/scoped-logger.d.ts.map +1 -0
- package/dist/network/network-quality.d.ts +12 -0
- package/dist/network/network-quality.d.ts.map +1 -0
- package/dist/notification/notification-service.d.ts +38 -0
- package/dist/notification/notification-service.d.ts.map +1 -0
- package/dist/notification/toast-service.d.ts +23 -0
- package/dist/notification/toast-service.d.ts.map +1 -0
- package/dist/pipeline/engine-manager-resolver.d.ts +16 -0
- package/dist/pipeline/engine-manager-resolver.d.ts.map +1 -0
- package/dist/pipeline/pipeline-runner.d.ts +9 -0
- package/dist/pipeline/pipeline-runner.d.ts.map +1 -0
- package/dist/pipeline/pipeline-validator.d.ts +14 -0
- package/dist/pipeline/pipeline-validator.d.ts.map +1 -0
- package/dist/process/resource-monitor.d.ts +12 -0
- package/dist/process/resource-monitor.d.ts.map +1 -0
- package/dist/python/python-env-manager.d.ts +13 -0
- package/dist/python/python-env-manager.d.ts.map +1 -0
- package/dist/repl/interfaces.d.ts +32 -0
- package/dist/repl/interfaces.d.ts.map +1 -0
- package/dist/repl/repl-engine.d.ts +9 -0
- package/dist/repl/repl-engine.d.ts.map +1 -0
- package/dist/resource-monitor-CmuWlmap.js +76 -0
- package/dist/resource-monitor-CmuWlmap.js.map +1 -0
- package/dist/resource-monitor-DcQdKGYU.mjs +59 -0
- package/dist/resource-monitor-DcQdKGYU.mjs.map +1 -0
- package/dist/storage/fs-storage-backend.d.ts +41 -0
- package/dist/storage/fs-storage-backend.d.ts.map +1 -0
- package/dist/storage/storage-location-manager.d.ts +24 -0
- package/dist/storage/storage-location-manager.d.ts.map +1 -0
- package/dist/storage/storage-manager.d.ts +77 -0
- package/dist/storage/storage-manager.d.ts.map +1 -0
- package/dist/tls/cert-manager.d.ts +27 -0
- package/dist/tls/cert-manager.d.ts.map +1 -0
- package/dist/tls/index.d.ts +2 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/package.json +119 -23
- package/dist/builtins/addon-pages-aggregator/index.js.map +0 -1
- package/dist/builtins/addon-pages-aggregator/index.mjs.map +0 -1
- package/dist/builtins/addon-widgets-aggregator/index.js.map +0 -1
- package/dist/builtins/addon-widgets-aggregator/index.mjs.map +0 -1
- package/dist/builtins/alerts/index.js.map +0 -1
- package/dist/builtins/alerts/index.mjs.map +0 -1
- package/dist/builtins/device-manager/index.js.map +0 -1
- package/dist/builtins/device-manager/index.mjs.map +0 -1
- package/dist/builtins/local-auth/index.js.map +0 -1
- package/dist/builtins/local-auth/index.mjs.map +0 -1
- package/dist/builtins/local-backup/index.js +0 -173
- package/dist/builtins/local-backup/index.js.map +0 -1
- package/dist/builtins/local-backup/index.mjs +0 -10
- package/dist/builtins/local-backup/index.mjs.map +0 -1
- package/dist/builtins/system-config/index.js.map +0 -1
- package/dist/builtins/system-config/index.mjs.map +0 -1
- package/dist/chunk-2CIYKDRN.mjs +0 -1
- package/dist/chunk-2CIYKDRN.mjs.map +0 -1
- package/dist/chunk-2F76X6NL.mjs +0 -136
- package/dist/chunk-2F76X6NL.mjs.map +0 -1
- package/dist/chunk-2QUFBZ7M.mjs +0 -1
- package/dist/chunk-2QUFBZ7M.mjs.map +0 -1
- package/dist/chunk-3BK2Y7GY.mjs +0 -593
- package/dist/chunk-3BK2Y7GY.mjs.map +0 -1
- package/dist/chunk-4OOHFJHT.mjs +0 -421
- package/dist/chunk-4OOHFJHT.mjs.map +0 -1
- package/dist/chunk-4XHB7IHT.mjs +0 -809
- package/dist/chunk-4XHB7IHT.mjs.map +0 -1
- package/dist/chunk-6M2HSSTQ.mjs +0 -98
- package/dist/chunk-6M2HSSTQ.mjs.map +0 -1
- package/dist/chunk-7FI7SQS7.mjs +0 -135
- package/dist/chunk-7FI7SQS7.mjs.map +0 -1
- package/dist/chunk-ED57RCQE.mjs +0 -171
- package/dist/chunk-ED57RCQE.mjs.map +0 -1
- package/dist/chunk-FZN56HGQ.mjs +0 -626
- package/dist/chunk-FZN56HGQ.mjs.map +0 -1
- package/dist/chunk-GL4OOB25.mjs +0 -51
- package/dist/chunk-GL4OOB25.mjs.map +0 -1
- package/dist/chunk-KDG2NTDB.mjs +0 -137
- package/dist/chunk-KDG2NTDB.mjs.map +0 -1
- package/dist/chunk-NRBQWBDM.mjs +0 -191
- package/dist/chunk-NRBQWBDM.mjs.map +0 -1
- package/dist/chunk-O4V246GG.mjs +0 -2137
- package/dist/chunk-O4V246GG.mjs.map +0 -1
- package/dist/chunk-QT57H266.mjs +0 -163
- package/dist/chunk-QT57H266.mjs.map +0 -1
- package/dist/chunk-QX4RH25I.mjs +0 -141
- package/dist/chunk-QX4RH25I.mjs.map +0 -1
- package/dist/chunk-TB562PZX.mjs +0 -86
- package/dist/chunk-TB562PZX.mjs.map +0 -1
- package/dist/chunk-TDYPZXK5.mjs +0 -1
- package/dist/chunk-TDYPZXK5.mjs.map +0 -1
- package/dist/chunk-UJI4LN5P.mjs +0 -36
- package/dist/chunk-UJI4LN5P.mjs.map +0 -1
- package/dist/chunk-W6RTHQGP.mjs +0 -1
- package/dist/chunk-W6RTHQGP.mjs.map +0 -1
- package/dist/chunk-ZELBCPDC.mjs +0 -369
- package/dist/chunk-ZELBCPDC.mjs.map +0 -1
- package/dist/index.d.mts +0 -1696
- package/dist/resource-monitor-UZUGPIAU.mjs +0 -9
- package/dist/resource-monitor-UZUGPIAU.mjs.map +0 -1
- package/dist/storage-location-manager-HFNB3PCS.mjs +0 -7
- package/dist/storage-location-manager-HFNB3PCS.mjs.map +0 -1
|
@@ -1,9 +1,307 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
} from "
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { BaseAddon, STORAGE_LOCATION_TYPES, storageProviderCapability } from "@camstack/types";
|
|
5
|
+
//#region src/builtins/sqlite-storage/filesystem-storage-provider.ts
|
|
6
|
+
/**
|
|
7
|
+
* Filesystem `storage-provider` (Task 7).
|
|
8
|
+
*
|
|
9
|
+
* Implements the `storage-provider` collection cap. Replaces the legacy
|
|
10
|
+
* sync `IStorageProvider` shape — every method now takes the live
|
|
11
|
+
* `StorageLocation` inline (no per-provider location state) and works
|
|
12
|
+
* off `location.config.basePath`.
|
|
13
|
+
*
|
|
14
|
+
* Adds chunked upload (`.partial` rename trick) + chunked download
|
|
15
|
+
* sessions for moving multi-GB archives without buffering the whole
|
|
16
|
+
* archive in memory. Sessions auto-expire after 5 minutes idle.
|
|
17
|
+
*
|
|
18
|
+
* The legacy `FilesystemStorageProvider` in `@camstack/types/node` is
|
|
19
|
+
* deliberately untouched — it still backs the sync `ctx.kernel.storage`
|
|
20
|
+
* helper that addons like `pipeline-analytics` use to derive paths
|
|
21
|
+
* synchronously. That sync API will be retired in a later refactor;
|
|
22
|
+
* Task 7 is scoped to the cap surface only.
|
|
23
|
+
*/
|
|
24
|
+
/** Idle TTL for upload + download sessions. */
|
|
25
|
+
var SESSION_IDLE_TTL_MS = 300 * 1e3;
|
|
26
|
+
/**
|
|
27
|
+
* Resolve `location.config.basePath` into a string. Throws an actionable
|
|
28
|
+
* error when the field is missing or wrong-typed — every primitive
|
|
29
|
+
* funnels through here, so a missing field surfaces as a single clear
|
|
30
|
+
* message instead of a downstream `path.join` TypeError.
|
|
31
|
+
*/
|
|
32
|
+
function getBasePath(location) {
|
|
33
|
+
const basePath = location.config["basePath"];
|
|
34
|
+
if (typeof basePath !== "string" || basePath.length === 0) throw new Error(`filesystem-storage: location "${location.id}" missing string config.basePath`);
|
|
35
|
+
return basePath;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve a relative path against the location's base, rejecting any
|
|
39
|
+
* traversal that escapes the base directory. Mirrors the
|
|
40
|
+
* `addon-asset` endpoint security check in `main.ts`: normalize both
|
|
41
|
+
* the base + the joined target, then enforce `target.startsWith(base + sep)`
|
|
42
|
+
* (with the `+ sep` guard so `/data` doesn't accidentally allow
|
|
43
|
+
* `/datasecret`).
|
|
44
|
+
*/
|
|
45
|
+
function safeResolve(base, relativePath) {
|
|
46
|
+
const normalizedBase = path.resolve(base);
|
|
47
|
+
const target = path.resolve(normalizedBase, relativePath);
|
|
48
|
+
if (target !== normalizedBase && !target.startsWith(normalizedBase + path.sep)) throw new Error(`filesystem-storage: relativePath "${relativePath}" escapes basePath "${normalizedBase}"`);
|
|
49
|
+
return target;
|
|
50
|
+
}
|
|
51
|
+
var FilesystemStorageProvider = class FilesystemStorageProvider {
|
|
52
|
+
static providerId = "filesystem-storage";
|
|
53
|
+
static displayName = "Filesystem";
|
|
54
|
+
uploads = /* @__PURE__ */ new Map();
|
|
55
|
+
downloads = /* @__PURE__ */ new Map();
|
|
56
|
+
async getProviderInfo() {
|
|
57
|
+
return {
|
|
58
|
+
providerId: FilesystemStorageProvider.providerId,
|
|
59
|
+
displayName: FilesystemStorageProvider.displayName,
|
|
60
|
+
supportedLocationTypes: STORAGE_LOCATION_TYPES,
|
|
61
|
+
configSchema: { sections: [{
|
|
62
|
+
id: "filesystem-storage",
|
|
63
|
+
title: "Filesystem",
|
|
64
|
+
fields: [{
|
|
65
|
+
type: "text",
|
|
66
|
+
key: "basePath",
|
|
67
|
+
label: "Base path",
|
|
68
|
+
description: "Absolute directory path where files are stored.",
|
|
69
|
+
required: true
|
|
70
|
+
}]
|
|
71
|
+
}] }
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
async testLocation({ config }) {
|
|
75
|
+
const basePath = config["basePath"];
|
|
76
|
+
if (typeof basePath !== "string" || basePath.length === 0) return {
|
|
77
|
+
ok: false,
|
|
78
|
+
error: "config.basePath must be a non-empty string"
|
|
79
|
+
};
|
|
80
|
+
try {
|
|
81
|
+
const stat = await fs.promises.stat(basePath).catch(() => null);
|
|
82
|
+
if (stat) {
|
|
83
|
+
if (!stat.isDirectory()) return {
|
|
84
|
+
ok: false,
|
|
85
|
+
error: `Path "${basePath}" exists but is not a directory`
|
|
86
|
+
};
|
|
87
|
+
await fs.promises.access(basePath, fs.constants.W_OK);
|
|
88
|
+
return { ok: true };
|
|
89
|
+
}
|
|
90
|
+
await fs.promises.mkdir(basePath, { recursive: true });
|
|
91
|
+
return { ok: true };
|
|
92
|
+
} catch (err) {
|
|
93
|
+
return {
|
|
94
|
+
ok: false,
|
|
95
|
+
error: err instanceof Error ? err.message : String(err)
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
async resolve({ location, relativePath }) {
|
|
100
|
+
return safeResolve(getBasePath(location), relativePath);
|
|
101
|
+
}
|
|
102
|
+
async write({ location, relativePath, data }) {
|
|
103
|
+
const filePath = safeResolve(getBasePath(location), relativePath);
|
|
104
|
+
await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
|
|
105
|
+
await fs.promises.writeFile(filePath, data);
|
|
106
|
+
}
|
|
107
|
+
async read({ location, relativePath }) {
|
|
108
|
+
const filePath = safeResolve(getBasePath(location), relativePath);
|
|
109
|
+
const buf = await fs.promises.readFile(filePath);
|
|
110
|
+
const out = new Uint8Array(new ArrayBuffer(buf.byteLength));
|
|
111
|
+
out.set(buf);
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
async exists({ location, relativePath }) {
|
|
115
|
+
const filePath = safeResolve(getBasePath(location), relativePath);
|
|
116
|
+
try {
|
|
117
|
+
await fs.promises.access(filePath);
|
|
118
|
+
return true;
|
|
119
|
+
} catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async list({ location, prefix }) {
|
|
124
|
+
const base = getBasePath(location);
|
|
125
|
+
const dir = prefix ? safeResolve(base, prefix) : path.resolve(base);
|
|
126
|
+
try {
|
|
127
|
+
return (await fs.promises.readdir(dir, { withFileTypes: true })).map((e) => prefix ? `${prefix}/${e.name}` : e.name);
|
|
128
|
+
} catch {
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
async delete({ location, relativePath }) {
|
|
133
|
+
const filePath = safeResolve(getBasePath(location), relativePath);
|
|
134
|
+
await fs.promises.rm(filePath, { force: true });
|
|
135
|
+
}
|
|
136
|
+
async getAvailableSpace({ location }) {
|
|
137
|
+
const base = path.resolve(getBasePath(location));
|
|
138
|
+
try {
|
|
139
|
+
let target = base;
|
|
140
|
+
while (!fs.existsSync(target)) {
|
|
141
|
+
const parent = path.dirname(target);
|
|
142
|
+
if (!parent || parent === target) return null;
|
|
143
|
+
target = parent;
|
|
144
|
+
}
|
|
145
|
+
const stats = await fs.promises.statfs(target);
|
|
146
|
+
return stats.bavail * stats.bsize;
|
|
147
|
+
} catch {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async beginUpload({ location, relativePath }) {
|
|
152
|
+
const target = safeResolve(getBasePath(location), relativePath);
|
|
153
|
+
const partial = `${target}.partial`;
|
|
154
|
+
await fs.promises.mkdir(path.dirname(target), { recursive: true });
|
|
155
|
+
await fs.promises.unlink(partial).catch(() => {});
|
|
156
|
+
const stream = fs.createWriteStream(partial);
|
|
157
|
+
const uploadId = randomUUID();
|
|
158
|
+
const session = {
|
|
159
|
+
stream,
|
|
160
|
+
target,
|
|
161
|
+
partial,
|
|
162
|
+
bytesWritten: 0,
|
|
163
|
+
timer: setTimeout(() => {
|
|
164
|
+
this.abortUpload({ uploadId }).catch(() => {});
|
|
165
|
+
}, SESSION_IDLE_TTL_MS)
|
|
166
|
+
};
|
|
167
|
+
this.uploads.set(uploadId, session);
|
|
168
|
+
return { uploadId };
|
|
169
|
+
}
|
|
170
|
+
async writeChunk({ uploadId, offset, data }) {
|
|
171
|
+
const session = this.uploads.get(uploadId);
|
|
172
|
+
if (!session) throw new Error(`filesystem-storage: upload session "${uploadId}" not found`);
|
|
173
|
+
if (offset !== session.bytesWritten) throw new Error(`filesystem-storage: chunk offset mismatch (expected ${session.bytesWritten}, got ${offset})`);
|
|
174
|
+
await new Promise((resolve, reject) => {
|
|
175
|
+
session.stream.write(data, (err) => {
|
|
176
|
+
if (err) reject(err);
|
|
177
|
+
else resolve();
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
clearTimeout(session.timer);
|
|
181
|
+
const nextBytesWritten = session.bytesWritten + data.length;
|
|
182
|
+
this.uploads.set(uploadId, {
|
|
183
|
+
...session,
|
|
184
|
+
bytesWritten: nextBytesWritten,
|
|
185
|
+
timer: setTimeout(() => {
|
|
186
|
+
this.abortUpload({ uploadId }).catch(() => {});
|
|
187
|
+
}, SESSION_IDLE_TTL_MS)
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
async finalizeUpload({ uploadId }) {
|
|
191
|
+
const session = this.uploads.get(uploadId);
|
|
192
|
+
if (!session) throw new Error(`filesystem-storage: upload session "${uploadId}" not found`);
|
|
193
|
+
await new Promise((resolve, reject) => {
|
|
194
|
+
session.stream.end(() => resolve());
|
|
195
|
+
session.stream.on("error", reject);
|
|
196
|
+
});
|
|
197
|
+
await fs.promises.rename(session.partial, session.target);
|
|
198
|
+
clearTimeout(session.timer);
|
|
199
|
+
this.uploads.delete(uploadId);
|
|
200
|
+
}
|
|
201
|
+
async abortUpload({ uploadId }) {
|
|
202
|
+
const session = this.uploads.get(uploadId);
|
|
203
|
+
if (!session) return;
|
|
204
|
+
try {
|
|
205
|
+
session.stream.destroy();
|
|
206
|
+
} catch {}
|
|
207
|
+
await fs.promises.unlink(session.partial).catch(() => {});
|
|
208
|
+
clearTimeout(session.timer);
|
|
209
|
+
this.uploads.delete(uploadId);
|
|
210
|
+
}
|
|
211
|
+
async beginDownload({ location, relativePath }) {
|
|
212
|
+
const target = safeResolve(getBasePath(location), relativePath);
|
|
213
|
+
const stat = await fs.promises.stat(target);
|
|
214
|
+
const fd = await fs.promises.open(target, "r");
|
|
215
|
+
const downloadId = randomUUID();
|
|
216
|
+
const session = {
|
|
217
|
+
fd,
|
|
218
|
+
sizeBytes: stat.size,
|
|
219
|
+
timer: setTimeout(() => {
|
|
220
|
+
this.endDownload({ downloadId }).catch(() => {});
|
|
221
|
+
}, SESSION_IDLE_TTL_MS)
|
|
222
|
+
};
|
|
223
|
+
this.downloads.set(downloadId, session);
|
|
224
|
+
return {
|
|
225
|
+
downloadId,
|
|
226
|
+
sizeBytes: stat.size
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
async readChunk({ downloadId, offset, length }) {
|
|
230
|
+
const session = this.downloads.get(downloadId);
|
|
231
|
+
if (!session) throw new Error(`filesystem-storage: download session "${downloadId}" not found`);
|
|
232
|
+
const out = new Uint8Array(new ArrayBuffer(length));
|
|
233
|
+
const { bytesRead } = await session.fd.read(out, 0, length, offset);
|
|
234
|
+
clearTimeout(session.timer);
|
|
235
|
+
this.downloads.set(downloadId, {
|
|
236
|
+
...session,
|
|
237
|
+
timer: setTimeout(() => {
|
|
238
|
+
this.endDownload({ downloadId }).catch(() => {});
|
|
239
|
+
}, SESSION_IDLE_TTL_MS)
|
|
240
|
+
});
|
|
241
|
+
return out.subarray(0, bytesRead);
|
|
242
|
+
}
|
|
243
|
+
async endDownload({ downloadId }) {
|
|
244
|
+
const session = this.downloads.get(downloadId);
|
|
245
|
+
if (!session) return;
|
|
246
|
+
try {
|
|
247
|
+
await session.fd.close();
|
|
248
|
+
} catch {}
|
|
249
|
+
clearTimeout(session.timer);
|
|
250
|
+
this.downloads.delete(downloadId);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Abort all outstanding sessions. Called on addon shutdown so timers
|
|
254
|
+
* don't leak across hot-reload cycles.
|
|
255
|
+
*/
|
|
256
|
+
async dispose() {
|
|
257
|
+
const uploadIds = [...this.uploads.keys()];
|
|
258
|
+
const downloadIds = [...this.downloads.keys()];
|
|
259
|
+
await Promise.all(uploadIds.map((uploadId) => this.abortUpload({ uploadId })));
|
|
260
|
+
await Promise.all(downloadIds.map((downloadId) => this.endDownload({ downloadId })));
|
|
261
|
+
}
|
|
8
262
|
};
|
|
263
|
+
//#endregion
|
|
264
|
+
//#region src/builtins/sqlite-storage/filesystem-storage.addon.ts
|
|
265
|
+
/**
|
|
266
|
+
* Filesystem Storage addon — registers a filesystem-backed
|
|
267
|
+
* `storage-provider` (Task 7).
|
|
268
|
+
*
|
|
269
|
+
* Pre-Task 7 this addon registered against the (then-collection)
|
|
270
|
+
* `storage` cap. After Tasks 2/3/4 the consumer-facing `storage` cap is
|
|
271
|
+
* a singleton owned by `storage-orchestrator`; the orchestrator
|
|
272
|
+
* dispatches each call to whichever `storage-provider` matches
|
|
273
|
+
* `location.providerId`.
|
|
274
|
+
*
|
|
275
|
+
* The OLD `rootPath` config field is preserved for back-compat: the
|
|
276
|
+
* orchestrator's first-boot seeding step still uses the same env-var
|
|
277
|
+
* resolution chain (operator override → `CAMSTACK_DATA` → fallback) to
|
|
278
|
+
* derive the base path of every default location, then writes
|
|
279
|
+
* `config.basePath` into each persisted `StorageLocation` row. The
|
|
280
|
+
* provider itself is now stateless — every call carries the live
|
|
281
|
+
* `StorageLocation` inline.
|
|
282
|
+
*/
|
|
283
|
+
var FilesystemStorageAddon = class extends BaseAddon {
|
|
284
|
+
provider = null;
|
|
285
|
+
constructor() {
|
|
286
|
+
super({ rootPath: "camstack-data" });
|
|
287
|
+
}
|
|
288
|
+
async onInitialize() {
|
|
289
|
+
this.provider = new FilesystemStorageProvider();
|
|
290
|
+
this.ctx.logger.info("Filesystem storage-provider initialized");
|
|
291
|
+
return [{
|
|
292
|
+
capability: storageProviderCapability,
|
|
293
|
+
provider: this.provider
|
|
294
|
+
}];
|
|
295
|
+
}
|
|
296
|
+
async onShutdown() {
|
|
297
|
+
await this.provider?.dispose();
|
|
298
|
+
this.provider = null;
|
|
299
|
+
}
|
|
300
|
+
getProvider() {
|
|
301
|
+
return this.provider;
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
//#endregion
|
|
305
|
+
export { FilesystemStorageAddon, FilesystemStorageAddon as default, FilesystemStorageProvider as t };
|
|
306
|
+
|
|
9
307
|
//# sourceMappingURL=filesystem-storage.addon.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"file":"filesystem-storage.addon.mjs","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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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { FilesystemStorageProvider } from './filesystem-storage-provider.js';
|
|
2
|
+
export { FilesystemStorageAddon } from './filesystem-storage.addon.js';
|
|
3
|
+
export { SqliteSettingsBackend } from './sqlite-settings-backend.js';
|
|
4
|
+
export { SqliteSettingsAddon } from './sqlite-settings.addon.js';
|
|
5
|
+
export { SettingsStore } from './settings-store.js';
|
|
6
|
+
export { CORE_TABLE_DDL, addonTableToDdl } from './sql-schema.js';
|
|
7
|
+
export type { AddonTableSchema } from './sql-schema.js';
|
|
8
|
+
export { DeviceStore } from './device-store.js';
|
|
9
|
+
export type { DeviceRow } from './device-store.js';
|
|
10
|
+
export { ConfigStore } from './config-store.js';
|
|
11
|
+
export { FilesystemStorageAddon as default } from './filesystem-storage.addon.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/builtins/sqlite-storage/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,EAAE,sBAAsB,IAAI,OAAO,EAAE,MAAM,+BAA+B,CAAA"}
|