@camstack/system 1.2.389 → 1.2.391
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 +30 -30
- package/dist/addon-routes/addon-route-registry.d.ts +31 -31
- package/dist/addon-runner.js +1 -1
- package/dist/addon-runner.mjs +1 -1
- package/dist/addon-utils.d.ts +22 -22
- package/dist/auth/admin-token-manager.d.ts +37 -67
- package/dist/auth/api-key-manager.d.ts +8 -8
- package/dist/auth/auth-audit-log.d.ts +29 -49
- package/dist/auth/auth-manager.d.ts +127 -126
- package/dist/auth/cidr.d.ts +8 -8
- package/dist/auth/external-identity-manager.d.ts +46 -34
- package/dist/auth/jwt-signing-key.d.ts +14 -14
- package/dist/auth/login-session-manager.d.ts +95 -135
- package/dist/auth/parse-record.d.ts +13 -13
- package/dist/auth/scope-matcher.d.ts +7 -7
- package/dist/auth/scoped-token-manager.d.ts +62 -62
- package/dist/auth/token-expiry.d.ts +49 -26
- package/dist/auth/totp-manager.d.ts +48 -48
- package/dist/auth/user-management-internal.d.ts +67 -52
- package/dist/auth/user-manager.d.ts +58 -58
- package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.d.ts +54 -54
- package/dist/builtins/addon-pages-aggregator/dedupe-pages.d.ts +22 -4
- package/dist/builtins/addon-pages-aggregator/index.d.ts +1 -1
- package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.d.ts +54 -54
- package/dist/builtins/addon-widgets-aggregator/index.d.ts +1 -1
- package/dist/builtins/alerts/alerts.addon.d.ts +88 -87
- package/dist/builtins/alerts/device-label.d.ts +6 -6
- package/dist/builtins/alerts/index.d.ts +1 -1
- package/dist/builtins/alerts/prune-policy.d.ts +36 -36
- package/dist/builtins/autotrack/autotrack-cameras.d.ts +102 -79
- package/dist/builtins/autotrack/autotrack-config.d.ts +81 -81
- package/dist/builtins/autotrack/autotrack-decision.d.ts +69 -82
- package/dist/builtins/autotrack/autotrack-loop.d.ts +81 -61
- package/dist/builtins/autotrack/autotrack.addon.d.ts +103 -66
- package/dist/builtins/autotrack/frame-error.d.ts +38 -38
- package/dist/builtins/autotrack/frame-measurements.d.ts +79 -79
- package/dist/builtins/autotrack/index.d.ts +2 -2
- package/dist/builtins/autotrack/ptz-mirror.d.ts +46 -17
- package/dist/builtins/autotrack/target-selection.d.ts +33 -47
- package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.d.ts +270 -269
- package/dist/builtins/backup-orchestrator/cron-helpers.d.ts +17 -17
- package/dist/builtins/backup-orchestrator/destination-policy.d.ts +99 -82
- package/dist/builtins/backup-orchestrator/download-helpers.d.ts +9 -9
- package/dist/builtins/backup-orchestrator/encryption-key-store.d.ts +40 -29
- package/dist/builtins/backup-orchestrator/index.d.ts +2 -2
- package/dist/builtins/backup-orchestrator/manifest-store.d.ts +88 -69
- package/dist/builtins/backup-orchestrator/restore-archive.d.ts +14 -14
- package/dist/builtins/backup-orchestrator/run-queue.d.ts +86 -86
- package/dist/builtins/backup-orchestrator/schedule-store.d.ts +53 -37
- package/dist/builtins/backup-orchestrator/staging-paths.d.ts +23 -23
- package/dist/builtins/backup-orchestrator/write-targets.d.ts +53 -53
- package/dist/builtins/calendars/calendar-color.d.ts +5 -1
- package/dist/builtins/calendars/calendar-prefs-store.d.ts +18 -12
- package/dist/builtins/calendars/calendars.addon.d.ts +16 -11
- package/dist/builtins/calendars/index.d.ts +1 -1
- package/dist/builtins/camera-grid/acquire-retry.d.ts +26 -26
- package/dist/builtins/camera-grid/addon.d.ts +200 -174
- package/dist/builtins/camera-grid/flv-join.d.ts +32 -58
- package/dist/builtins/camera-grid/grid-activity-mirror.d.ts +37 -37
- package/dist/builtins/camera-grid/grid-activity.d.ts +83 -42
- package/dist/builtins/camera-grid/grid-camera-declarations.d.ts +46 -46
- package/dist/builtins/camera-grid/grid-camera-device.d.ts +60 -34
- package/dist/builtins/camera-grid/grid-canvas-derivation.d.ts +50 -15
- package/dist/builtins/camera-grid/grid-canvas-seed.d.ts +96 -46
- package/dist/builtins/camera-grid/grid-canvas.d.ts +74 -74
- package/dist/builtins/camera-grid/grid-child.d.ts +29 -16
- package/dist/builtins/camera-grid/grid-compositor-child.d.ts +2 -2
- package/dist/builtins/camera-grid/grid-compositor-invocation.d.ts +39 -11
- package/dist/builtins/camera-grid/grid-compositor.d.ts +50 -50
- package/dist/builtins/camera-grid/grid-detection-mapping.d.ts +52 -22
- package/dist/builtins/camera-grid/grid-device-settings.d.ts +31 -7
- package/dist/builtins/camera-grid/grid-filter-graph.d.ts +41 -41
- package/dist/builtins/camera-grid/grid-frame-sample.d.ts +45 -19
- package/dist/builtins/camera-grid/grid-instances.d.ts +20 -50
- package/dist/builtins/camera-grid/grid-last-frame-store.d.ts +51 -51
- package/dist/builtins/camera-grid/grid-layout-native-provider.d.ts +30 -4
- package/dist/builtins/camera-grid/grid-plan.d.ts +30 -20
- package/dist/builtins/camera-grid/grid-profiles.d.ts +85 -45
- package/dist/builtins/camera-grid/grid-row-normalization.d.ts +6 -6
- package/dist/builtins/camera-grid/grid-sentry-sources.d.ts +57 -57
- package/dist/builtins/camera-grid/grid-snapshot.d.ts +41 -41
- package/dist/builtins/camera-grid/grid-stream-descriptor.d.ts +49 -21
- package/dist/builtins/camera-grid/grid-stream-invocation.d.ts +37 -22
- package/dist/builtins/camera-grid/grid-stream-relay.d.ts +26 -26
- package/dist/builtins/camera-grid/grid-stream-session.d.ts +123 -93
- package/dist/builtins/camera-grid/grid-tile-feed.d.ts +47 -47
- package/dist/builtins/camera-grid/grid-tile-plan.d.ts +55 -20
- package/dist/builtins/camera-grid/grid-wire-format.d.ts +22 -6
- package/dist/builtins/camera-grid/index.d.ts +44 -44
- package/dist/builtins/camera-grid/silence-analysis.d.ts +31 -14
- package/dist/builtins/composer/claim-gate.d.ts +54 -27
- package/dist/builtins/composer/composed-device-set.d.ts +40 -26
- package/dist/builtins/composer/composed-device.d.ts +39 -17
- package/dist/builtins/composer/composer-apply-waits.d.ts +20 -13
- package/dist/builtins/composer/composer-grafts.d.ts +57 -38
- package/dist/builtins/composer/composer-live-set.d.ts +15 -15
- package/dist/builtins/composer/composer-plan.d.ts +76 -60
- package/dist/builtins/composer/composer-runtime-factory.d.ts +21 -14
- package/dist/builtins/composer/composer-seeds.d.ts +20 -14
- package/dist/builtins/composer/composer-verdict.d.ts +28 -14
- package/dist/builtins/composer/composer.addon.d.ts +23 -9
- package/dist/builtins/composer/composer.d.ts +145 -100
- package/dist/builtins/composer/composition-declarations.d.ts +50 -39
- package/dist/builtins/composer/composition-evaluation.d.ts +38 -22
- package/dist/builtins/composer/composition-runtime.d.ts +178 -125
- package/dist/builtins/composer/composition-target.d.ts +38 -34
- package/dist/builtins/composer/confirmed-seed.d.ts +35 -23
- package/dist/builtins/composer/deadline-timer.d.ts +13 -13
- package/dist/builtins/composer/existing-target.d.ts +90 -73
- package/dist/builtins/composer/field-record.d.ts +26 -19
- package/dist/builtins/composer/graft-host.d.ts +56 -32
- package/dist/builtins/composer/held-claims.d.ts +26 -9
- package/dist/builtins/composer/index.d.ts +1 -1
- package/dist/builtins/composer/own-field-reads.d.ts +26 -15
- package/dist/builtins/composer/owned-fields-target.d.ts +75 -44
- package/dist/builtins/composer/slice-assembler.d.ts +19 -3
- package/dist/builtins/composer/source-readings.d.ts +67 -61
- package/dist/builtins/composer/source-tracker.d.ts +133 -69
- package/dist/builtins/console-logging/console-destination.d.ts +15 -8
- package/dist/builtins/console-logging/console-logging.addon.d.ts +20 -19
- package/dist/builtins/console-logging/index.d.ts +3 -3
- package/dist/builtins/core-blocks/block-package.d.ts +37 -37
- package/dist/builtins/core-blocks/block-settings-store.d.ts +34 -21
- package/dist/builtins/core-blocks/block-supervisor.d.ts +138 -117
- package/dist/builtins/core-blocks/block-type-defs.d.ts +21 -21
- package/dist/builtins/core-blocks/blocks-integration.d.ts +76 -49
- package/dist/builtins/core-blocks/compile-block.d.ts +37 -37
- package/dist/builtins/core-blocks/composition-api.d.ts +38 -24
- package/dist/builtins/core-blocks/composition-peers.d.ts +26 -4
- package/dist/builtins/core-blocks/composition-sources.d.ts +25 -10
- package/dist/builtins/core-blocks/core-block-store.d.ts +109 -109
- package/dist/builtins/core-blocks/core-blocks.addon.d.ts +72 -72
- package/dist/builtins/core-blocks/extract-settings-schema.d.ts +4 -4
- package/dist/builtins/core-blocks/index.d.ts +8 -8
- package/dist/builtins/device-manager/adoption-job-engine.d.ts +141 -98
- package/dist/builtins/device-manager/claimed-status-overlay.d.ts +42 -9
- package/dist/builtins/device-manager/contribution-cache.d.ts +56 -56
- package/dist/builtins/device-manager/day-night-config-schema.d.ts +26 -12
- package/dist/builtins/device-manager/device-aggregation-merge.d.ts +17 -17
- package/dist/builtins/device-manager/device-aggregation.d.ts +277 -254
- package/dist/builtins/device-manager/device-bindings-store.d.ts +232 -220
- package/dist/builtins/device-manager/device-config-contribution.d.ts +29 -29
- package/dist/builtins/device-manager/device-config-secrets.d.ts +32 -13
- package/dist/builtins/device-manager/device-event-propagator.d.ts +22 -22
- package/dist/builtins/device-manager/device-extension-linked-slot.d.ts +17 -17
- package/dist/builtins/device-manager/device-form-secrets.d.ts +14 -14
- package/dist/builtins/device-manager/device-linked-devices.d.ts +159 -98
- package/dist/builtins/device-manager/device-manager.addon.d.ts +223 -197
- package/dist/builtins/device-manager/device-meta-actions.d.ts +306 -305
- package/dist/builtins/device-manager/device-meta-store.d.ts +100 -90
- package/dist/builtins/device-manager/device-meta-types.d.ts +250 -241
- package/dist/builtins/device-manager/device-online-fallback.d.ts +30 -30
- package/dist/builtins/device-manager/device-projection.d.ts +53 -67
- package/dist/builtins/device-manager/device-provider-context.d.ts +109 -94
- package/dist/builtins/device-manager/device-queries.d.ts +63 -63
- package/dist/builtins/device-manager/device-row-store.d.ts +417 -365
- package/dist/builtins/device-manager/device-source-activation.d.ts +91 -49
- package/dist/builtins/device-manager/device-state-claim-views.d.ts +76 -61
- package/dist/builtins/device-manager/device-state-claims.d.ts +53 -30
- package/dist/builtins/device-manager/device-state-mirror.d.ts +256 -264
- package/dist/builtins/device-manager/device-sync-resolvers.d.ts +25 -25
- package/dist/builtins/device-manager/field-claims-index.d.ts +85 -58
- package/dist/builtins/device-manager/field-ownership.d.ts +54 -36
- package/dist/builtins/device-manager/fleet-read-census.d.ts +99 -61
- package/dist/builtins/device-manager/image-settings-config-schema.d.ts +18 -8
- package/dist/builtins/device-manager/index.d.ts +2 -2
- package/dist/builtins/device-manager/linked-devices-manual-backfill.d.ts +20 -9
- package/dist/builtins/device-manager/location-alignment.d.ts +46 -46
- package/dist/builtins/device-manager/migrate-device.d.ts +178 -101
- package/dist/builtins/device-manager/migrate-guard.d.ts +66 -34
- package/dist/builtins/device-manager/migrate-hardware-state.d.ts +59 -59
- package/dist/builtins/device-manager/migrate-reload.d.ts +42 -4
- package/dist/builtins/device-manager/migration-refused.d.ts +20 -20
- package/dist/builtins/device-manager/mirror-row-writer.d.ts +205 -179
- package/dist/builtins/device-manager/recording-onboard-config-schema.d.ts +56 -32
- package/dist/builtins/device-manager/removal-fence.d.ts +48 -48
- package/dist/builtins/device-manager/runtime-state-persist-gate.d.ts +54 -26
- package/dist/builtins/device-manager/secret-config-paths.d.ts +17 -17
- package/dist/builtins/device-manager/stale-wrapper-activations.d.ts +52 -25
- package/dist/builtins/device-manager/write-lock.d.ts +13 -13
- package/dist/builtins/hub-forwarder/hub-forwarder-destination.d.ts +41 -41
- package/dist/builtins/hub-forwarder/hub-forwarder.addon.d.ts +13 -12
- package/dist/builtins/hub-forwarder/index.d.ts +3 -3
- package/dist/builtins/keychain/index.d.ts +1 -1
- package/dist/builtins/keychain/key-sources.d.ts +19 -19
- package/dist/builtins/keychain/keychain-crypto.d.ts +4 -4
- package/dist/builtins/keychain/keychain-reset-trigger.d.ts +13 -13
- package/dist/builtins/keychain/keychain-service.d.ts +128 -128
- package/dist/builtins/keychain/keychain-store.d.ts +96 -87
- package/dist/builtins/keychain/keychain-usage.d.ts +13 -2
- package/dist/builtins/keychain/keychain.addon.d.ts +31 -6
- package/dist/builtins/keychain/platform-key-source.d.ts +15 -15
- package/dist/builtins/keychain/system-held-secrets.d.ts +17 -4
- package/dist/builtins/liveness-monitor/index.d.ts +2 -2
- package/dist/builtins/liveness-monitor/liveness-checks.d.ts +73 -52
- package/dist/builtins/liveness-monitor/liveness-monitor.addon.d.ts +57 -36
- package/dist/builtins/local-auth/admin-account-boot.d.ts +14 -14
- package/dist/builtins/local-auth/auth-config-reader.d.ts +34 -17
- package/dist/builtins/local-auth/auth-schema.d.ts +92 -69
- package/dist/builtins/local-auth/index.d.ts +1 -1
- package/dist/builtins/local-auth/jwt-signing-key-keeper.d.ts +22 -22
- package/dist/builtins/local-auth/local-auth.addon.d.ts +41 -40
- package/dist/builtins/local-auth/oauth-grants.d.ts +57 -57
- package/dist/builtins/local-auth/oauth-session-manager.d.ts +62 -62
- package/dist/builtins/local-network/address-book.d.ts +61 -36
- package/dist/builtins/local-network/index.d.ts +2 -2
- package/dist/builtins/local-network/ipv6-lan.d.ts +12 -17
- package/dist/builtins/local-network/local-hostname.d.ts +10 -10
- package/dist/builtins/local-network/local-network.addon.d.ts +259 -258
- package/dist/builtins/loki-logging/index.d.ts +4 -4
- package/dist/builtins/loki-logging/loki-destination.d.ts +113 -87
- package/dist/builtins/loki-logging/loki-logging.addon.d.ts +61 -42
- package/dist/builtins/loki-logging/loki-payload.d.ts +82 -39
- package/dist/builtins/loki-logging/retire-enabled-flag.d.ts +37 -12
- package/dist/builtins/native-metrics/cgroup-memory.d.ts +206 -159
- package/dist/builtins/native-metrics/cgroup-pids.d.ts +138 -91
- package/dist/builtins/native-metrics/container-memory-series.d.ts +212 -178
- package/dist/builtins/native-metrics/gpu-probe.d.ts +9 -9
- package/dist/builtins/native-metrics/index.d.ts +2 -2
- package/dist/builtins/native-metrics/load-series-config.d.ts +29 -57
- package/dist/builtins/native-metrics/load-series-reader.d.ts +52 -26
- package/dist/builtins/native-metrics/load-series-store.d.ts +237 -176
- package/dist/builtins/native-metrics/native-metrics-provider.d.ts +43 -43
- package/dist/builtins/native-metrics/native-metrics.addon.d.ts +230 -230
- package/dist/builtins/native-metrics/node-load-ring.d.ts +196 -196
- package/dist/builtins/native-metrics/proc-process-table.d.ts +12 -12
- package/dist/builtins/native-metrics/process-classification.d.ts +95 -36
- package/dist/builtins/native-metrics/thread-cpu-sampler.d.ts +95 -95
- package/dist/builtins/platform-probe/coral-accelerators.d.ts +17 -17
- package/dist/builtins/platform-probe/index.d.ts +38 -30
- package/dist/builtins/platform-probe/inference-config-resolver.d.ts +27 -27
- package/dist/builtins/platform-probe/intel-accelerators.d.ts +8 -8
- package/dist/builtins/platform-probe/intel-npu.d.ts +30 -30
- package/dist/builtins/platform-probe/platform-scorer.d.ts +35 -35
- package/dist/builtins/platform-probe/runtime-packages.d.ts +3 -3
- package/dist/builtins/remote-access-orchestrator/enabled-providers-reconcile.d.ts +87 -87
- package/dist/builtins/remote-access-orchestrator/index.d.ts +1 -1
- package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.d.ts +66 -35
- package/dist/builtins/shared/device-state-changed.d.ts +9 -9
- package/dist/builtins/shared/settle-sources.d.ts +16 -16
- package/dist/builtins/snapshot/index.d.ts +2 -2
- package/dist/builtins/snapshot/snapshot-cache.d.ts +92 -92
- package/dist/builtins/snapshot/snapshot-coalescing.d.ts +108 -108
- package/dist/builtins/snapshot/snapshot-courtesy.d.ts +48 -48
- package/dist/builtins/snapshot/snapshot-durable-store.d.ts +32 -32
- package/dist/builtins/snapshot/snapshot-fatigue.d.ts +34 -34
- package/dist/builtins/snapshot/snapshot-grab-pick.d.ts +14 -14
- package/dist/builtins/snapshot/snapshot-link-url.d.ts +49 -49
- package/dist/builtins/snapshot/snapshot-media-handler.d.ts +97 -97
- package/dist/builtins/snapshot/snapshot-resize.d.ts +64 -103
- package/dist/builtins/snapshot/snapshot.addon.d.ts +569 -568
- package/dist/builtins/sqlite-storage/analyze-stats.d.ts +73 -29
- package/dist/builtins/sqlite-storage/config-store.d.ts +6 -6
- package/dist/builtins/sqlite-storage/device-store.d.ts +16 -16
- package/dist/builtins/sqlite-storage/filesystem-browse-provider.d.ts +23 -23
- package/dist/builtins/sqlite-storage/filesystem-storage-provider.d.ts +79 -79
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +27 -26
- package/dist/builtins/sqlite-storage/filter-compiler.d.ts +107 -107
- package/dist/builtins/sqlite-storage/index.d.ts +12 -12
- package/dist/builtins/sqlite-storage/integration-registry.d.ts +37 -37
- package/dist/builtins/sqlite-storage/path-guard.d.ts +5 -5
- package/dist/builtins/sqlite-storage/prefix-range.d.ts +44 -44
- package/dist/builtins/sqlite-storage/query-bounds.d.ts +100 -106
- package/dist/builtins/sqlite-storage/query-profiler.d.ts +217 -217
- package/dist/builtins/sqlite-storage/retired-collections.d.ts +124 -55
- package/dist/builtins/sqlite-storage/retired-settings-keys.d.ts +239 -189
- package/dist/builtins/sqlite-storage/shm-lock-canary.d.ts +41 -41
- package/dist/builtins/sqlite-storage/sqlite-pragmas.d.ts +162 -162
- package/dist/builtins/sqlite-storage/sqlite-settings-backend.d.ts +458 -458
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +59 -58
- package/dist/builtins/sqlite-storage/sqlite-snapshot-protocol.d.ts +37 -32
- package/dist/builtins/sqlite-storage/sqlite-snapshot-worker.d.ts +19 -19
- package/dist/builtins/sqlite-storage/sqlite-snapshotter.d.ts +76 -76
- package/dist/builtins/sqlite-storage/statement-shape.d.ts +54 -54
- package/dist/builtins/sqlite-storage/table-sizes.d.ts +71 -71
- package/dist/builtins/sqlite-storage/vector-index-shared.d.ts +63 -54
- package/dist/builtins/sqlite-storage/vector-index-vec.d.ts +133 -96
- package/dist/builtins/sqlite-storage/wal-checkpoint-policy.d.ts +161 -161
- package/dist/builtins/sqlite-storage/wal-checkpointer.d.ts +60 -60
- package/dist/builtins/sqlite-storage/wal-maintenance.d.ts +94 -94
- package/dist/builtins/storage-orchestrator/access-guards.d.ts +37 -26
- package/dist/builtins/storage-orchestrator/data-store-dispatch.d.ts +33 -18
- package/dist/builtins/storage-orchestrator/drain-ratchet.d.ts +85 -85
- package/dist/builtins/storage-orchestrator/drain-state-store.d.ts +20 -10
- package/dist/builtins/storage-orchestrator/hub-settings-forward.d.ts +113 -53
- package/dist/builtins/storage-orchestrator/index.d.ts +7 -7
- package/dist/builtins/storage-orchestrator/location-occupancy-slice.d.ts +64 -40
- package/dist/builtins/storage-orchestrator/location-occupancy.d.ts +14 -14
- package/dist/builtins/storage-orchestrator/location-protection.d.ts +13 -13
- package/dist/builtins/storage-orchestrator/location-repoint-move.d.ts +44 -44
- package/dist/builtins/storage-orchestrator/location-root-collision.d.ts +61 -25
- package/dist/builtins/storage-orchestrator/location-secrets.d.ts +99 -58
- package/dist/builtins/storage-orchestrator/location-store.d.ts +56 -47
- package/dist/builtins/storage-orchestrator/location-volume-capacity.d.ts +37 -37
- package/dist/builtins/storage-orchestrator/provider-discovery.d.ts +20 -6
- package/dist/builtins/storage-orchestrator/storage-cleanup-coordinator.d.ts +51 -51
- package/dist/builtins/storage-orchestrator/storage-migration-coordinator.d.ts +224 -224
- package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.d.ts +292 -292
- package/dist/builtins/storage-orchestrator/storage-orchestrator.service.d.ts +431 -450
- package/dist/builtins/storage-orchestrator/storage-pressure-manager.d.ts +104 -104
- package/dist/builtins/system-backup/backup-encryption.d.ts +60 -23
- package/dist/builtins/system-backup/system-backup.service.d.ts +240 -240
- package/dist/builtins/system-config/cluster-secret-keeper.d.ts +54 -34
- package/dist/builtins/system-config/index.d.ts +2 -2
- package/dist/builtins/system-config/mesh-actions.d.ts +2 -30
- package/dist/builtins/system-config/system-config.addon.d.ts +57 -93
- package/dist/builtins/system-config/system-config.addon.js +46 -33
- package/dist/builtins/system-config/system-config.addon.mjs +46 -33
- package/dist/builtins/winston-logging/index.d.ts +3 -3
- package/dist/builtins/winston-logging/winston-destination.d.ts +15 -15
- package/dist/builtins/winston-logging/winston-logging.addon.d.ts +14 -13
- package/dist/{child-cap-dispatch-nURMuVTX.js → child-cap-dispatch-Bnr8brru.js} +18 -0
- package/dist/{child-cap-dispatch-B1gyE35b.mjs → child-cap-dispatch-mHO_6r0G.mjs} +1 -1
- package/dist/download/hosted-model-revisions.d.ts +8 -8
- package/dist/download/model-download-service.d.ts +32 -32
- package/dist/download/model-downloader.d.ts +88 -88
- package/dist/events/event-bus.d.ts +6 -6
- package/dist/events/system-event-bus.d.ts +11 -11
- package/dist/feature/feature-manager.d.ts +6 -6
- package/dist/http/asset-compression.d.ts +35 -73
- package/dist/http/authenticated-file-server.d.ts +32 -32
- package/dist/http/data-plane-registry.d.ts +49 -39
- package/dist/http/file-data-plane.d.ts +14 -14
- package/dist/http/lan-http-bind.d.ts +24 -13
- package/dist/http/reverse-proxy.d.ts +36 -24
- package/dist/index.d.ts +137 -137
- package/dist/index.js +4 -3
- package/dist/index.mjs +2 -4
- package/dist/kernel/addon-class-resolver.d.ts +1 -1
- package/dist/kernel/addon-engine-manager.d.ts +20 -20
- package/dist/kernel/addon-health-monitor.d.ts +151 -151
- package/dist/kernel/addon-installer.d.ts +609 -609
- package/dist/kernel/addon-loader.d.ts +133 -133
- package/dist/kernel/addon-manifest.d.ts +118 -118
- package/dist/kernel/addon-residue.d.ts +28 -32
- package/dist/kernel/array-buffer-census.d.ts +84 -88
- package/dist/kernel/bootstrap-config.d.ts +3 -3
- package/dist/kernel/cap-router-builder.d.ts +145 -101
- package/dist/kernel/capability-handle.d.ts +41 -41
- package/dist/kernel/capability-registry.d.ts +588 -576
- package/dist/kernel/config-manager.d.ts +199 -199
- package/dist/kernel/config-schema.d.ts +132 -128
- package/dist/kernel/custom-action-registry.d.ts +25 -25
- package/dist/kernel/deps/addon-deps-manager.d.ts +17 -17
- package/dist/kernel/deps/closure-dedupe.d.ts +76 -76
- package/dist/kernel/deps/ensure-addon-natives.d.ts +34 -34
- package/dist/kernel/deps/ensure-native-prebuilds.d.ts +25 -25
- package/dist/kernel/deps/manifest-native-deps.d.ts +38 -38
- package/dist/kernel/deps/manifest-python-deps.d.ts +18 -18
- package/dist/kernel/deps/manifest-system-deps.d.ts +13 -13
- package/dist/kernel/deps/npm-command.d.ts +45 -45
- package/dist/kernel/deps/system-package-allowlist.d.ts +9 -9
- package/dist/kernel/deps/system-package-broker.d.ts +20 -20
- package/dist/kernel/deps/system-package-client.d.ts +3 -3
- package/dist/kernel/device-registry.d.ts +27 -27
- package/dist/kernel/event-loop-stall-monitor.d.ts +33 -33
- package/dist/kernel/event-plane-report.d.ts +174 -174
- package/dist/kernel/fs-utils.d.ts +70 -70
- package/dist/kernel/gc-census.d.ts +119 -119
- package/dist/kernel/heap-spaces.d.ts +87 -87
- package/dist/kernel/heap-watch.d.ts +706 -706
- package/dist/kernel/host-externals.d.ts +8 -8
- package/dist/kernel/hwaccel/hwaccel-resolver.d.ts +27 -27
- package/dist/kernel/index.d.ts +115 -113
- package/dist/kernel/inference/inference-resolver.d.ts +13 -13
- package/dist/kernel/infra-capabilities.d.ts +7 -7
- package/dist/kernel/isolated-builtin-phase.d.ts +42 -42
- package/dist/kernel/lifecycle/job-journal.d.ts +17 -17
- package/dist/kernel/lifecycle/lifecycle-job-engine.d.ts +99 -99
- package/dist/kernel/lifecycle/staging-area.d.ts +22 -22
- package/dist/kernel/moleculer/addon-context-factory.d.ts +90 -89
- package/dist/kernel/moleculer/addon-data-plane-facility.d.ts +12 -12
- package/dist/kernel/moleculer/addon-deploy-source.d.ts +11 -11
- package/dist/kernel/moleculer/addon-peer-bytes-facility.d.ts +18 -18
- package/dist/kernel/moleculer/addon-service-factory.d.ts +41 -41
- package/dist/kernel/moleculer/agent-mesh-authenticator.d.ts +60 -33
- package/dist/kernel/moleculer/agent-ui-unlock.d.ts +30 -30
- package/dist/kernel/moleculer/broker-factory.d.ts +61 -61
- package/dist/kernel/moleculer/cap-usage-registry.d.ts +108 -153
- package/dist/kernel/moleculer/capabilities-access.d.ts +19 -19
- package/dist/kernel/moleculer/child-addon-call-dispatch.d.ts +43 -43
- package/dist/kernel/moleculer/child-cap-descriptors.d.ts +26 -26
- package/dist/kernel/moleculer/child-cap-dispatch.d.ts +52 -52
- package/dist/kernel/moleculer/children-batch-loader.d.ts +86 -34
- package/dist/kernel/moleculer/cluster-secret.d.ts +19 -19
- package/dist/kernel/moleculer/core-cap-service.d.ts +53 -53
- package/dist/kernel/moleculer/crash-supervisor.d.ts +39 -39
- package/dist/kernel/moleculer/device-cap-proxy.d.ts +51 -51
- package/dist/kernel/moleculer/device-event-ring.d.ts +117 -75
- package/dist/kernel/moleculer/event-bus-core.d.ts +171 -159
- package/dist/kernel/moleculer/event-bus.d.ts +73 -73
- package/dist/kernel/moleculer/hub-log-forwarder.d.ts +30 -30
- package/dist/kernel/moleculer/hub-service.d.ts +42 -42
- package/dist/kernel/moleculer/init-watchdog.d.ts +49 -49
- package/dist/kernel/moleculer/mesh-access-middleware.d.ts +36 -21
- package/dist/kernel/moleculer/mesh-auth-mode.d.ts +33 -39
- package/dist/kernel/moleculer/mesh-authenticator.d.ts +58 -58
- package/dist/kernel/moleculer/mesh-auto-enforce.d.ts +38 -18
- package/dist/kernel/moleculer/mesh-join-client.d.ts +67 -45
- package/dist/kernel/moleculer/mesh-join-proof.d.ts +8 -8
- package/dist/kernel/moleculer/mesh-mtls/constants.d.ts +1 -1
- package/dist/kernel/moleculer/mesh-mtls/index.d.ts +10 -10
- package/dist/kernel/moleculer/mesh-mtls/mesh-ca-keeper.d.ts +43 -38
- package/dist/kernel/moleculer/mesh-mtls/mesh-ca.d.ts +29 -20
- package/dist/kernel/moleculer/mesh-mtls/mesh-clear-port.d.ts +32 -32
- package/dist/kernel/moleculer/mesh-mtls/mesh-crl.d.ts +11 -11
- package/dist/kernel/moleculer/mesh-mtls/mesh-enroll.d.ts +19 -16
- package/dist/kernel/moleculer/mesh-mtls/mesh-join-token.d.ts +40 -40
- package/dist/kernel/moleculer/mesh-mtls/mesh-tls-enabler.d.ts +5 -1
- package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +131 -130
- package/dist/kernel/moleculer/mesh-queue-report.d.ts +39 -39
- package/dist/kernel/moleculer/node-registry.d.ts +120 -120
- package/dist/kernel/moleculer/process-context.d.ts +2 -2
- package/dist/kernel/moleculer/process-service.d.ts +168 -168
- package/dist/kernel/moleculer/provider-registry.d.ts +9 -9
- package/dist/kernel/moleculer/readiness-context.d.ts +58 -58
- package/dist/kernel/moleculer/readiness-service.d.ts +31 -16
- package/dist/kernel/moleculer/register-framework-resolver.d.ts +6 -6
- package/dist/kernel/moleculer/register-node-client.d.ts +34 -27
- package/dist/kernel/moleculer/remote-logger.d.ts +29 -29
- package/dist/kernel/moleculer/resilient-cap-call.d.ts +21 -21
- package/dist/kernel/moleculer/runner-native-allocator.d.ts +95 -95
- package/dist/kernel/moleculer/runner-process-group.d.ts +57 -57
- package/dist/kernel/moleculer/runtime-state-load.d.ts +21 -11
- package/dist/kernel/moleculer/settings-read-guard.d.ts +39 -39
- package/dist/kernel/moleculer/stream-probe-service.d.ts +25 -6
- package/dist/kernel/moleculer/trpc-links.d.ts +203 -203
- package/dist/kernel/moleculer/typed-array-serde.d.ts +9 -20
- package/dist/kernel/moleculer/worker-device-restore.d.ts +8 -8
- package/dist/kernel/outbound-queue-watch.d.ts +74 -74
- package/dist/kernel/process-cpu-census.d.ts +55 -55
- package/dist/kernel/provider-kind-drift.d.ts +17 -8
- package/dist/kernel/restart-coordinator.d.ts +71 -71
- package/dist/kernel/settings-door-view.d.ts +36 -25
- package/dist/kernel/settings-read-error.d.ts +29 -31
- package/dist/kernel/settings-view-types.d.ts +100 -95
- package/dist/kernel/socket-plane-report.d.ts +214 -153
- package/dist/kernel/status-overlay.d.ts +31 -11
- package/dist/kernel/storage-location-registry.d.ts +50 -50
- package/dist/kernel/store-settings-view.d.ts +13 -13
- package/dist/kernel/system-settings-mirror.d.ts +40 -28
- package/dist/kernel/system-settings-policy.d.ts +15 -34
- package/dist/kernel/transport/cap-action-census.d.ts +183 -183
- package/dist/kernel/transport/cap-action-name.d.ts +84 -84
- package/dist/kernel/transport/cap-child-index.d.ts +41 -41
- package/dist/kernel/transport/cap-route-resolver.d.ts +237 -212
- package/dist/kernel/transport/cap-route.d.ts +139 -139
- package/dist/kernel/transport/cap-routing-hints.d.ts +37 -37
- package/dist/kernel/transport/child-cap-protocol.d.ts +245 -245
- package/dist/kernel/transport/claimed-get-status.d.ts +30 -6
- package/dist/kernel/transport/create-local-transport.d.ts +5 -5
- package/dist/kernel/transport/frame-codec.d.ts +109 -109
- package/dist/kernel/transport/hub-cap-forward.d.ts +81 -59
- package/dist/kernel/transport/index.d.ts +36 -36
- package/dist/kernel/transport/local-child-client.d.ts +184 -184
- package/dist/kernel/transport/local-child-registry.d.ts +592 -592
- package/dist/kernel/transport/local-endpoint-path.d.ts +4 -4
- package/dist/kernel/transport/local-transport.d.ts +92 -92
- package/dist/kernel/transport/parent-unowned-call.d.ts +266 -237
- package/dist/kernel/transport/peer-answered-error.d.ts +14 -14
- package/dist/kernel/transport/socket-channel.d.ts +110 -110
- package/dist/kernel/transport/socket-traffic.d.ts +96 -96
- package/dist/kernel/transport/uds-event-bridge.d.ts +77 -50
- package/dist/kernel/transport/uds-event-bus.d.ts +75 -26
- package/dist/kernel/transport/uds-local-transport.d.ts +14 -14
- package/dist/kernel/transport/uds-log-ingest.d.ts +38 -23
- package/dist/kernel/transport/uds-logger.d.ts +33 -33
- package/dist/kernel/utils/ring-buffer.d.ts +12 -12
- package/dist/kernel/workspace-detect.d.ts +7 -7
- package/dist/lifecycle/lifecycle-state-machine.d.ts +24 -24
- package/dist/logging/formatter.d.ts +52 -25
- package/dist/logging/log-manager.d.ts +133 -133
- package/dist/logging/log-redactor.d.ts +22 -1
- package/dist/logging/log-ring-buffer.d.ts +57 -57
- package/dist/logging/logging-gate.d.ts +69 -25
- package/dist/logging/logging-gate.singleton.d.ts +12 -1
- package/dist/logging/partitioned-log-buffer.d.ts +161 -161
- package/dist/logging/scoped-logger.d.ts +14 -14
- package/dist/network/network-quality.d.ts +8 -8
- package/dist/notification/notification-service.d.ts +37 -37
- package/dist/notification/toast-service.d.ts +18 -18
- package/dist/pipeline/engine-manager-resolver.d.ts +12 -12
- package/dist/pipeline/pipeline-runner.d.ts +6 -6
- package/dist/pipeline/pipeline-validator.d.ts +8 -8
- package/dist/process/proc-stat.d.ts +51 -51
- package/dist/process/resource-monitor.d.ts +19 -19
- package/dist/python/python-env-manager.d.ts +10 -10
- package/dist/repl/interfaces.d.ts +21 -21
- package/dist/repl/repl-engine.d.ts +6 -6
- package/dist/storage/fs-storage-backend.d.ts +35 -35
- package/dist/storage/storage-location-manager.d.ts +21 -21
- package/dist/storage/storage-manager.d.ts +68 -68
- package/dist/tls/boot-tls.d.ts +24 -24
- package/dist/tls/cert-evaluation.d.ts +25 -25
- package/dist/tls/cert-identity.d.ts +39 -39
- package/dist/tls/cert-issue.d.ts +37 -17
- package/dist/tls/cert-manager.d.ts +86 -84
- package/dist/tls/https-listener.d.ts +16 -16
- package/dist/tls/index.d.ts +8 -8
- package/dist/tls/tls-actions.d.ts +18 -18
- package/dist/tls/tls-status.d.ts +15 -15
- package/dist/tls/uploaded-cert.d.ts +9 -9
- package/package.json +9 -3
|
@@ -1,487 +1,487 @@
|
|
|
1
|
-
import { BulkRecord, CollectionColumn, CollectionIndex, DataStoreEngineInfo, HistogramBucket, IScopedLogger, ISettingsBackend, QueryFilter, SettingsAggregateInput, SettingsAggregateResult, SettingsCountInput, SettingsDeleteInput, SettingsGetInput, SettingsHistogramInput, SettingsInsertInput, SettingsIsEmptyInput, SettingsQueryInput, SettingsRecord, SettingsSetInput, SettingsUpdateInput, SettingsUpsertInput } from
|
|
2
|
-
import
|
|
3
|
-
import { MutationFilterInput } from
|
|
4
|
-
import { SqliteOpProfiler } from
|
|
1
|
+
import type { BulkRecord, CollectionColumn, CollectionIndex, DataStoreEngineInfo, HistogramBucket, IScopedLogger, ISettingsBackend, QueryFilter, SettingsAggregateInput, SettingsAggregateResult, SettingsCountInput, SettingsDeleteInput, SettingsGetInput, SettingsHistogramInput, SettingsInsertInput, SettingsIsEmptyInput, SettingsQueryInput, SettingsRecord, SettingsSetInput, SettingsUpdateInput, SettingsUpsertInput } from "@camstack/types";
|
|
2
|
+
import Database from "better-sqlite3";
|
|
3
|
+
import { type MutationFilterInput } from "./filter-compiler.js";
|
|
4
|
+
import { SqliteOpProfiler } from "./query-profiler.js";
|
|
5
5
|
/** Input for {@link SqliteSettingsBackend.insertMany}. */
|
|
6
6
|
interface SettingsInsertManyInput {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
readonly namespace?: string;
|
|
8
|
+
readonly collection: string;
|
|
9
|
+
readonly records: readonly BulkRecord[];
|
|
10
10
|
}
|
|
11
11
|
interface SettingsInsertManyResult {
|
|
12
|
-
|
|
12
|
+
readonly inserted: number;
|
|
13
13
|
}
|
|
14
14
|
/** Input for {@link SqliteSettingsBackend.deleteWhere}. */
|
|
15
15
|
interface SettingsDeleteWhereInput {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
readonly namespace?: string;
|
|
17
|
+
readonly collection: string;
|
|
18
|
+
readonly filter: MutationFilterInput;
|
|
19
19
|
}
|
|
20
20
|
interface SettingsDeleteWhereResult {
|
|
21
|
-
|
|
21
|
+
readonly deleted: number;
|
|
22
22
|
}
|
|
23
23
|
/** Input for {@link SqliteSettingsBackend.updateWhere}. */
|
|
24
24
|
interface SettingsUpdateWhereInput {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
readonly namespace?: string;
|
|
26
|
+
readonly collection: string;
|
|
27
|
+
readonly filter: MutationFilterInput;
|
|
28
|
+
readonly data: Readonly<Record<string, unknown>>;
|
|
29
29
|
}
|
|
30
30
|
interface SettingsUpdateWhereResult {
|
|
31
|
-
|
|
31
|
+
readonly updated: number;
|
|
32
32
|
}
|
|
33
33
|
/** What {@link SqliteSettingsBackend.dropRetiredTable} destroyed. */
|
|
34
34
|
export interface DroppedTable {
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
/** Rows the table held at the moment it was dropped. */
|
|
36
|
+
readonly rows: number;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
39
|
+
* The addon that owns a scoped row, lifted out of the filter that names it.
|
|
40
|
+
*
|
|
41
|
+
* `(op, collection)` cannot name a culprit: the 60 s window of 2026-08-25 read
|
|
42
|
+
* `query addon-device-settings` 67 660 times — 1 128 a second on a
|
|
43
|
+
* single-threaded synchronous engine — and the report could say what was
|
|
44
|
+
* running but never who. The caller identity is not reachable from this
|
|
45
|
+
* process (a cap handler receives an input, not a caller), but for the scoped
|
|
46
|
+
* collections it does not need to be: the id IS `<addonId>:<deviceId>.<field>`,
|
|
47
|
+
* so a filter that names an id names its owner.
|
|
48
|
+
*
|
|
49
|
+
* Attributes NOTHING when the id is unscoped or absent. A storm blamed on the
|
|
50
|
+
* wrong addon is worse than one with no name on it — the wrong name gets acted
|
|
51
|
+
* on. Same source and same shape as {@link deviceIdOf}, which already lifts the
|
|
52
|
+
* device out of this very filter.
|
|
53
|
+
*/
|
|
54
54
|
export declare function scopeOwnerOf(filter: QueryFilter | undefined): {
|
|
55
|
-
|
|
55
|
+
owner?: string;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
* Stable identity of a declared schema — every property that changes the DDL
|
|
59
|
+
* or the set of columns a filter can name.
|
|
60
|
+
*
|
|
61
|
+
* Deliberately covers `indexes` too: an added index is as invisible to a
|
|
62
|
+
* name-only memo as an added column, and `CREATE INDEX IF NOT EXISTS` is
|
|
63
|
+
* cheap enough that re-running it costs nothing.
|
|
64
|
+
*/
|
|
65
65
|
/**
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
* A `query` asked to read a column the collection cannot serve. Distinct type
|
|
67
|
+
* so a caller can map it to a 400 — it is always a programming error in the
|
|
68
|
+
* caller, never a condition of the data.
|
|
69
|
+
*/
|
|
70
70
|
export declare class UnprojectableColumnError extends Error {
|
|
71
|
-
|
|
71
|
+
constructor(message: string);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
74
|
+
* SQLite implementation of ISettingsBackend.
|
|
75
|
+
*
|
|
76
|
+
* Every collection is structured: declared at boot (canonical KV
|
|
77
|
+
* collections) or via `declareCollection` (typed schemas like
|
|
78
|
+
* `pipeline-analytics:tracks`). The legacy auto-create-on-first-access
|
|
79
|
+
* path was removed — see commit history for the migration. Operations
|
|
80
|
+
* on undeclared collections throw at runtime so callers fail fast.
|
|
81
|
+
*
|
|
82
|
+
* WAL mode for concurrent reads.
|
|
83
|
+
*/
|
|
84
84
|
export declare class SqliteSettingsBackend implements ISettingsBackend {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
85
|
+
private readonly dbPath;
|
|
86
|
+
private db;
|
|
87
|
+
/**
|
|
88
|
+
* Table name → fingerprint of the schema this process last materialised.
|
|
89
|
+
*
|
|
90
|
+
* Keyed by FINGERPRINT, not by name, and that is the whole point. An addon
|
|
91
|
+
* declares its schema at every boot, but the backend lives in hub-main,
|
|
92
|
+
* which outlives an addon respawn: `camstack deploy` restarts the addon
|
|
93
|
+
* runner and NOT hub-main. A name-only memo therefore made the second
|
|
94
|
+
* declaration of a table a no-op FOREVER — a redeployed addon whose schema
|
|
95
|
+
* had gained a column never got the `ALTER TABLE … ADD COLUMN`, and, because
|
|
96
|
+
* `compileFilter` silently drops a predicate naming a column the collection
|
|
97
|
+
* cannot express (select mode), the missing column read as "matches
|
|
98
|
+
* everything" instead of failing. That is how `pipeline-analytics:tracks`
|
|
99
|
+
* ran for a whole release with no `retrainStatus`: the retention sweep's
|
|
100
|
+
* `whereIn: { retrainStatus: ['none','trained'] }` pin evaporated, so every
|
|
101
|
+
* operator-staged track was eligible for deletion, and `countStaging`
|
|
102
|
+
* reported the entire history as staged.
|
|
103
|
+
*/
|
|
104
|
+
private readonly structuredTables;
|
|
105
|
+
/** Map from scoped collection name → set of column names (non-id) that
|
|
106
|
+
* the structured schema owns. Routes set/get/insert/update/query to
|
|
107
|
+
* typed columns. Every collection MUST be declared here before use. */
|
|
108
|
+
private readonly declaredCollections;
|
|
109
|
+
private readonly runtimeDefaults;
|
|
110
|
+
/**
|
|
111
|
+
* Canonical key/value collections — declared with a `(id TEXT PK,
|
|
112
|
+
* data TEXT NOT NULL)` schema at boot so existing JSON-blob rows
|
|
113
|
+
* keep working through the structured path. Generates SQL identical
|
|
114
|
+
* to the previous legacy path; only the routing is unified.
|
|
115
|
+
*/
|
|
116
|
+
private static readonly CANONICAL_KV_COLLECTIONS;
|
|
117
|
+
/**
|
|
118
|
+
* Optional, because the engine is constructed in places that have no addon
|
|
119
|
+
* context (migrations, one-shot tools, most specs). It is NOT optional in
|
|
120
|
+
* production: `sqlite-settings.addon.ts` passes one, and without it a row cap
|
|
121
|
+
* being hit would be silent — which is the failure mode the cap exists to
|
|
122
|
+
* avoid replacing.
|
|
123
|
+
*/
|
|
124
|
+
private readonly logger;
|
|
125
|
+
/**
|
|
126
|
+
* Per-statement timing. Absent only where the backend is constructed without
|
|
127
|
+
* a logger (migrations, one-shot tools, most specs) — production always has
|
|
128
|
+
* one, because a runner that stalls with no record of what it was executing
|
|
129
|
+
* is the failure this was built for (`query-profiler.ts`).
|
|
130
|
+
*/
|
|
131
|
+
private readonly profiler;
|
|
132
|
+
constructor(dbPath: string, runtimeDefaults?: Record<string, unknown>, logger?: IScopedLogger);
|
|
133
|
+
initialize(): Promise<void>;
|
|
134
|
+
private requireDeclared;
|
|
135
|
+
/**
|
|
136
|
+
* Decode a single column value off a SQLite row into the JS shape the
|
|
137
|
+
* caller's schema expects. Handles:
|
|
138
|
+
* - BOOLEAN columns: `0|1` → `false|true`
|
|
139
|
+
* - JSON columns (TEXT starting with `{` / `[`): parse
|
|
140
|
+
* - everything else: pass-through with null coalescing
|
|
141
|
+
*/
|
|
142
|
+
private decodeColumnValue;
|
|
143
|
+
shutdown(): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* The statement profiler, so an addon sharing this handle (the sqlite-vec
|
|
146
|
+
* index) reports into the SAME window. Two profilers on one thread would
|
|
147
|
+
* each describe a fraction of the stall and neither would add up to it.
|
|
148
|
+
*/
|
|
149
|
+
getProfiler(): SqliteOpProfiler | undefined;
|
|
150
|
+
/**
|
|
151
|
+
* `data-store-provider` self-description — how the orchestrator names
|
|
152
|
+
* this engine in a log line, and (once collections declare an engine)
|
|
153
|
+
* how it picks between registrants.
|
|
154
|
+
*/
|
|
155
|
+
getEngineInfo(): Promise<DataStoreEngineInfo>;
|
|
156
|
+
get({ namespace, collection, key }: SettingsGetInput): Promise<unknown>;
|
|
157
|
+
set({ namespace, collection, key, value }: SettingsSetInput): Promise<void>;
|
|
158
|
+
query<T extends object = Record<string, unknown>>({ namespace, collection, filter, columns }: SettingsQueryInput): Promise<readonly SettingsRecord<T>[]>;
|
|
159
|
+
insert<T extends object = Record<string, unknown>>({ namespace, collection, record }: SettingsInsertInput<T>): Promise<{
|
|
160
|
+
readonly id: string | number;
|
|
161
|
+
}>;
|
|
162
|
+
/**
|
|
163
|
+
* Make a SLOT hold this row, and answer with the id the row HAS — one
|
|
164
|
+
* statement, `INSERT … ON CONFLICT(<slot>) DO UPDATE … RETURNING <pk>`.
|
|
165
|
+
*
|
|
166
|
+
* See `settings-store.cap.ts`'s `upsert` docblock for why the store needed a
|
|
167
|
+
* slot that is not the primary key (D482). Three things are load-bearing
|
|
168
|
+
* here:
|
|
169
|
+
*
|
|
170
|
+
* - **`RETURNING` and not `lastInsertRowid`.** On the UPDATE branch
|
|
171
|
+
* `lastInsertRowid` is whatever the connection last inserted — a
|
|
172
|
+
* different row, or a different TABLE. It answers confidently and wrongly,
|
|
173
|
+
* which is worse than not answering. `RETURNING` names the row this
|
|
174
|
+
* statement actually touched, on both branches.
|
|
175
|
+
* - **The conflict columns are checked against the declaration** before they
|
|
176
|
+
* reach the SQL. An undeclared name would be interpolated into DDL-shaped
|
|
177
|
+
* text; it is refused, by the same rule and for the same reason
|
|
178
|
+
* {@link resolveProjection} throws on an unprojectable column.
|
|
179
|
+
* - **The primary key is never part of the SET list.** An `INTEGER` rowid
|
|
180
|
+
* alias is not in `row` at all, and on a TEXT key rewriting the id of the
|
|
181
|
+
* row we just matched is the one update that cannot be right.
|
|
182
|
+
*/
|
|
183
|
+
upsert<T extends object = Record<string, unknown>>({ namespace, collection, conflict, record }: SettingsUpsertInput<T>): Promise<{
|
|
184
|
+
readonly id: string | number;
|
|
185
|
+
}>;
|
|
186
|
+
/**
|
|
187
|
+
* Insert a batch in ONE transaction, on ONE prepared statement.
|
|
188
|
+
*
|
|
189
|
+
* The write-side twin of {@link deleteWhere}. Every row in the batch shares
|
|
190
|
+
* a single column list, which is what makes one `prepare` legal: rows are
|
|
191
|
+
* normalised to the collection's DECLARED column set, so a row that omits a
|
|
192
|
+
* column binds `null` for it rather than producing a second statement shape.
|
|
193
|
+
*
|
|
194
|
+
* All or nothing — `better-sqlite3`'s `transaction()` rolls the whole batch
|
|
195
|
+
* back on any throw. A caller writing one process sample gets one COMMIT,
|
|
196
|
+
* which is the entire point: 76 rows every 10 s is 7.6 rows/s, and 7.6
|
|
197
|
+
* separate commits per second on the connection that also serves every
|
|
198
|
+
* cluster-wide configuration read is a constant load nobody asked for.
|
|
199
|
+
*/
|
|
200
|
+
insertMany({ namespace, collection, records }: SettingsInsertManyInput): Promise<SettingsInsertManyResult>;
|
|
201
|
+
update({ namespace, collection, id, data }: SettingsUpdateInput): Promise<void>;
|
|
202
|
+
delete({ namespace, collection, key }: SettingsDeleteInput): Promise<void>;
|
|
203
|
+
/**
|
|
204
|
+
* Bulk delete. One statement, whatever the row count — this is what every
|
|
205
|
+
* retention path in the system was hand-rolling as a select-then-delete
|
|
206
|
+
* loop. The filter is compiled in `mutate` mode, so an unresolvable
|
|
207
|
+
* predicate or an empty one throws before any SQL exists.
|
|
208
|
+
*/
|
|
209
|
+
deleteWhere({ namespace, collection, filter }: SettingsDeleteWhereInput): Promise<SettingsDeleteWhereResult>;
|
|
210
|
+
/**
|
|
211
|
+
* Bulk update. Same filter contract as {@link deleteWhere}.
|
|
212
|
+
*
|
|
213
|
+
* Every key of `data` must be a REAL column. A KV-shaped collection keeps
|
|
214
|
+
* its fields inside a JSON blob, and setting one would need `json_set` with
|
|
215
|
+
* read-modify-write semantics this method does not have — so it refuses
|
|
216
|
+
* rather than writing a column that does not exist, which is what the
|
|
217
|
+
* uncapped `tableUpdate` would have done.
|
|
218
|
+
*/
|
|
219
|
+
updateWhere({ namespace, collection, filter, data }: SettingsUpdateWhereInput): Promise<SettingsUpdateWhereResult>;
|
|
220
|
+
/**
|
|
221
|
+
* How many rows match — about the SAME rows {@link query} would return.
|
|
222
|
+
*
|
|
223
|
+
* That agreement is the entire contract, and until now it did not hold. This
|
|
224
|
+
* was the FOURTH hand-rolled copy of the filter logic (after `query`, the
|
|
225
|
+
* bulk mutations and `histogram`) and it compiled only `where`:
|
|
226
|
+
* `whereBetween`, `whereIn` and `whereNot` were dropped silently, so the
|
|
227
|
+
* count was not slow, it was WRONG, and always wrong in the same direction —
|
|
228
|
+
* too big, because every dropped predicate is a predicate that would have
|
|
229
|
+
* excluded rows.
|
|
230
|
+
*
|
|
231
|
+
* Two live callers decided on it. `TrackStore.countStaging({ deviceId,
|
|
232
|
+
* olderThanMs })` sends the cutoff as `whereBetween: { lastSeen: [0, …] }`
|
|
233
|
+
* and got the device's whole staging history instead. The notification-centre
|
|
234
|
+
* artefact gallery pages on `total` from this method while listing through
|
|
235
|
+
* `query`, and its filter is almost entirely `whereIn`/`whereBetween`
|
|
236
|
+
* (visibility, kind, device, time window, expiry) — so `total` counted rows
|
|
237
|
+
* the page could never show, including other users'.
|
|
238
|
+
*
|
|
239
|
+
* `measure` mode. `count` compiles the same predicates `query` does — the
|
|
240
|
+
* two must never disagree about WHICH rows they are talking about — but it
|
|
241
|
+
* refuses a predicate it cannot express rather than skipping it. `query`
|
|
242
|
+
* hands back rows and a caller can see the filter did not bite; a count
|
|
243
|
+
* hands back a number, and the whole collection and the intended subset are
|
|
244
|
+
* the same shape.
|
|
245
|
+
*/
|
|
246
|
+
count({ namespace, collection, filter }: SettingsCountInput): Promise<number>;
|
|
247
|
+
/**
|
|
248
|
+
* `COUNT(*)` and one SUM/MIN/MAX per requested field, in ONE statement.
|
|
249
|
+
*
|
|
250
|
+
* Result slots are aliased POSITIONALLY (`a0`, `a1`, …) and mapped back by
|
|
251
|
+
* index: `as` is caller text and must never reach SQL as an identifier, and
|
|
252
|
+
* the column name is validated through {@link fieldExprFor} exactly like a
|
|
253
|
+
* projection — an unresolvable field THROWS rather than being dropped, because
|
|
254
|
+
* a missing aggregate comes back as a number that looks real.
|
|
255
|
+
*
|
|
256
|
+
* `measure` mode on the filter, so this agrees with `query` and `count`
|
|
257
|
+
* about which rows it is talking about — and, since 2026-08-30, refuses an
|
|
258
|
+
* unresolvable PREDICATE for the same reason it already refused an
|
|
259
|
+
* unresolvable FIELD. Both come back as a number that looks real.
|
|
260
|
+
*/
|
|
261
|
+
aggregate({ namespace, collection, fields, filter }: SettingsAggregateInput): Promise<SettingsAggregateResult>;
|
|
262
|
+
histogram({ namespace, collection, field, bucketSize, origin, filter }: SettingsHistogramInput): Promise<readonly HistogramBucket[]>;
|
|
263
|
+
isEmpty({ namespace, collection }: SettingsIsEmptyInput): Promise<boolean>;
|
|
264
|
+
private queryDeclared;
|
|
265
|
+
/** Get a system setting by dot-notation key */
|
|
266
|
+
getSystem(key: string): unknown;
|
|
267
|
+
/** Set a system setting */
|
|
268
|
+
setSystem(key: string, value: unknown): void;
|
|
269
|
+
/** Get all system settings as flat key-value */
|
|
270
|
+
getAllSystem(): Record<string, unknown>;
|
|
271
|
+
/**
|
|
272
|
+
* Get all settings for an addon.
|
|
273
|
+
*
|
|
274
|
+
* Selected by the SAME key range {@link setAllAddon} deletes and re-inserts
|
|
275
|
+
* — `prefixWhere("<addonId>.")` — and for the same reason `getAllScoped`
|
|
276
|
+
* uses it: `"<addonId>.<key>"` is the PRIMARY KEY, so the range is a
|
|
277
|
+
* `SEARCH … USING INDEX` while anything else is a full `SCAN`.
|
|
278
|
+
*
|
|
279
|
+
* It used to select on `json_extract(data, '$.addonId')`, which is a second
|
|
280
|
+
* authority for "this addon's rows" and disagreed with the writer in both
|
|
281
|
+
* directions: a row inside the JSON's idea of the addon but outside the key
|
|
282
|
+
* range was READ and never DELETED (a config key that could not be cleared),
|
|
283
|
+
* and `json_extract` was evaluated on EVERY row — so a four-key addon paid
|
|
284
|
+
* for the whole table and one unparseable neighbour aborted the statement,
|
|
285
|
+
* taking out every addon's config read at once.
|
|
286
|
+
*
|
|
287
|
+
* The cost was not theoretical. On the live hub `addon-settings` is 627 KB
|
|
288
|
+
* in 24 rows, 625 KB of it device-manager's three fleet blobs; a V8 profile
|
|
289
|
+
* of a boot (2026-08-19) had hub-main's JS thread 99.9% busy with **64% of
|
|
290
|
+
* it inside this method**, which is what put a ~45 s queue in front of every
|
|
291
|
+
* runner's first store read. Measured on that table: 0.947 ms → ~0.02 ms for
|
|
292
|
+
* a four-key addon, 2.90 ms → 2.13 ms for device-manager's own.
|
|
293
|
+
*/
|
|
294
|
+
getAllAddon(addonId: string): Record<string, unknown>;
|
|
295
|
+
/** Bulk-set all settings for an addon */
|
|
296
|
+
setAllAddon(addonId: string, config: Record<string, unknown>): void;
|
|
297
|
+
/** Get all settings for a provider */
|
|
298
|
+
getAllProvider(providerId: string): Record<string, unknown>;
|
|
299
|
+
/** Set a provider setting */
|
|
300
|
+
setProvider(providerId: string, key: string, value: unknown): void;
|
|
301
|
+
/** Get all settings for a device */
|
|
302
|
+
getAllDevice(deviceId: string): Record<string, unknown>;
|
|
303
|
+
/** Set a device setting */
|
|
304
|
+
setDevice(deviceId: string, key: string, value: unknown): void;
|
|
305
|
+
getAddonDevice(addonId: string, deviceId: string): Record<string, unknown>;
|
|
306
|
+
setAddonDevice(addonId: string, deviceId: string, values: Record<string, unknown>): void;
|
|
307
|
+
clearAddonDevice(addonId: string, deviceId: string): void;
|
|
308
|
+
private static readonly LEGACY_RUNTIME_STATE_ADDON_ID;
|
|
309
|
+
/**
|
|
310
|
+
* The device's whole cap-slice map. Canonical row first, legacy prefix as the
|
|
311
|
+
* fallback. `{}` — never null — when the device has never persisted a slice,
|
|
312
|
+
* because every caller treats the result as a cap map to iterate.
|
|
313
|
+
*/
|
|
314
|
+
getDeviceRuntimeState(deviceId: string): Record<string, unknown>;
|
|
315
|
+
/**
|
|
316
|
+
* Replace the device's whole cap-slice map. Replace, not merge — the caller
|
|
317
|
+
* always hands over the full persistable blob, and merging would resurrect a
|
|
318
|
+
* slice the durability policy has since stopped persisting.
|
|
319
|
+
*/
|
|
320
|
+
setDeviceRuntimeState(deviceId: string, blob: Record<string, unknown>): void;
|
|
321
|
+
/** Forget the device's runtime state in BOTH stores (device removal). */
|
|
322
|
+
clearDeviceRuntimeState(deviceId: string): void;
|
|
323
|
+
/** Seed system-settings with runtime defaults (first boot) */
|
|
324
|
+
private seedDefaults;
|
|
325
|
+
/**
|
|
326
|
+
* Expose the raw better-sqlite3 Database instance for components that
|
|
327
|
+
* need direct SQL access (e.g. DeviceStore, ConfigStore).
|
|
328
|
+
* Returns null if the backend has not been initialized yet.
|
|
329
|
+
*/
|
|
330
|
+
getDatabase(): Database.Database | null;
|
|
331
|
+
/**
|
|
332
|
+
* `EXPLAIN QUERY PLAN` for a statement, as one string per plan row.
|
|
333
|
+
*
|
|
334
|
+
* Answers the question the timing alone cannot: "1.6 s for 501 rows" is a
|
|
335
|
+
* full scan and is also a cold disk, and only the plan tells them apart. It
|
|
336
|
+
* runs on the SAME connection as the statement, because that is the only
|
|
337
|
+
* connection whose `sqlite_stat1` visibility and temp schema match.
|
|
338
|
+
*
|
|
339
|
+
* `EXPLAIN QUERY PLAN` prepares and plans; it does not execute the statement,
|
|
340
|
+
* so it costs no page reads of its own. In production it is called only from
|
|
341
|
+
* the slow-call path, once per shape per window; it is public so a guard can
|
|
342
|
+
* assert that a declared index is the one the planner actually picks — "we
|
|
343
|
+
* added an index" and "the query uses it" are different claims.
|
|
344
|
+
*
|
|
345
|
+
* Never throws. A plan that cannot be taken (a statement the engine will no
|
|
346
|
+
* longer prepare, a closed handle mid-shutdown) is a missing ANSWER, not a
|
|
347
|
+
* failure worth turning a slow query into a crash — the profiler falls back
|
|
348
|
+
* to the line it would have printed anyway.
|
|
349
|
+
*/
|
|
350
|
+
explainQueryPlan(sql: string, params: readonly unknown[]): readonly string[];
|
|
351
|
+
/**
|
|
352
|
+
* Run one synchronous statement under the profiler.
|
|
353
|
+
*
|
|
354
|
+
* A thin pass-through when no profiler exists, so the specs that construct
|
|
355
|
+
* this backend without a logger keep exercising the SAME code path as
|
|
356
|
+
* production. The alternative — two call shapes — is how a fix gets tested
|
|
357
|
+
* on a branch production never takes.
|
|
358
|
+
*/
|
|
359
|
+
private measured;
|
|
360
|
+
/**
|
|
361
|
+
* Size of the database file, or 0 when it cannot be read.
|
|
362
|
+
*
|
|
363
|
+
* 0 is the honest answer for a first boot (no file yet) and for an
|
|
364
|
+
* unreadable `stat`, and both callers treat it as "unknown" and fall back to
|
|
365
|
+
* the floor — never to a smaller setting than the one already argued for.
|
|
366
|
+
*/
|
|
367
|
+
/**
|
|
368
|
+
* One numeric PRAGMA off the open connection. A pragma that does not answer
|
|
369
|
+
* with a number yields 0, which `sqliteOccupancy` reads as "unknown" and
|
|
370
|
+
* reports as an empty file rather than inventing a ratio.
|
|
371
|
+
*/
|
|
372
|
+
/**
|
|
373
|
+
* Follow the file as it grows.
|
|
374
|
+
*
|
|
375
|
+
* The map is derived from the file at OPEN and never again, which is the same
|
|
376
|
+
* expiry one level up: a database that grows during uptime keeps the map it
|
|
377
|
+
* had at boot, and once the file passes it every read outside the window
|
|
378
|
+
* costs a synchronous page-in — 418 per second, measured 2026-08-25. This
|
|
379
|
+
* node escaped it only because 130 MB → 858 MB spanned seventeen days of
|
|
380
|
+
* restarts.
|
|
381
|
+
*
|
|
382
|
+
* `unref` so it never holds the process open.
|
|
383
|
+
*/
|
|
384
|
+
private scheduleMapGrowthCheck;
|
|
385
|
+
/**
|
|
386
|
+
* One-shot `ANALYZE`, long after boot, only if the database has none.
|
|
387
|
+
*
|
|
388
|
+
* `analyze-stats.ts` has the measurement that justifies it: without
|
|
389
|
+
* `sqlite_stat1` the planner walked 150 133 media rows to return six, and one
|
|
390
|
+
* `ANALYZE` took that same query from 727 ms to 3.2 ms. It is scheduled
|
|
391
|
+
* rather than run inline because it is a 14 s synchronous statement on the
|
|
392
|
+
* one thread the cluster reads configuration through.
|
|
393
|
+
*/
|
|
394
|
+
private scheduleIndexAnalysis;
|
|
395
|
+
/**
|
|
396
|
+
* Name the biggest tables, once, a minute after the connection opens.
|
|
397
|
+
*
|
|
398
|
+
* `dbSizeMb` says how big the file is and `freePct` says how much of it is
|
|
399
|
+
* live; neither says WHOSE. Per-addon scoped collections are created on first
|
|
400
|
+
* write and declared nowhere, so this is the only place the real set can be
|
|
401
|
+
* enumerated. `unref` so it can never hold the process open.
|
|
402
|
+
*/
|
|
403
|
+
private scheduleStorageReport;
|
|
404
|
+
private logStorageReport;
|
|
405
|
+
private readPragmaNumber;
|
|
406
|
+
private measureDbSizeBytes;
|
|
407
|
+
private getDb;
|
|
408
|
+
/**
|
|
409
|
+
* `WHERE` fragment selecting every key that starts with `prefix`, plus its
|
|
410
|
+
* bound parameters.
|
|
411
|
+
*
|
|
412
|
+
* The range form is what makes the implicit PRIMARY KEY index usable — see
|
|
413
|
+
* `prefix-range.ts` for the `EXPLAIN QUERY PLAN` output and the measured
|
|
414
|
+
* 1.8x/19.4x. The `LIKE` fallback is the SQL that shipped before, kept
|
|
415
|
+
* verbatim for the prefixes a byte range cannot express, so a key shape this
|
|
416
|
+
* function refuses degrades in speed and never in correctness.
|
|
417
|
+
*/
|
|
418
|
+
private prefixWhere;
|
|
419
|
+
private getAllScoped;
|
|
420
|
+
private setScopedKey;
|
|
421
|
+
private scopedName;
|
|
422
|
+
/**
|
|
423
|
+
* Project a declared collection onto what {@link compileFilter} needs. A
|
|
424
|
+
* collection whose only column is `data` is KV-shaped: its fields live
|
|
425
|
+
* inside that blob and are reached with `json_extract`.
|
|
426
|
+
*/
|
|
427
|
+
private shapeOf;
|
|
428
|
+
/**
|
|
429
|
+
* Where a declaration LIVES, so it outlives the process that made it.
|
|
430
|
+
*
|
|
431
|
+
* `declaredCollections` used to be only an in-memory Map, and the
|
|
432
|
+
* declarations are made once, by each addon, at that addon's own boot.
|
|
433
|
+
* On 2026-09-12 this backend died with SIGBUS (a second connection
|
|
434
|
+
* truncated the WAL under its mmap) and `CrashSupervisor` respawned it: the
|
|
435
|
+
* new instance knew only the canonical KV collections, every other addon
|
|
436
|
+
* stayed up and never re-declared, and the cluster failed every settings
|
|
437
|
+
* read for six hours — the operator could not log in.
|
|
438
|
+
*
|
|
439
|
+
* The tables are durable. What the backend knows ABOUT them has to be too,
|
|
440
|
+
* because nothing in the system re-declares and nothing listens for this
|
|
441
|
+
* process restarting.
|
|
442
|
+
*/
|
|
443
|
+
private static readonly DECLARATIONS_TABLE;
|
|
444
|
+
/** Create the meta table. Idempotent; called before anything reads it. */
|
|
445
|
+
private ensureDeclarationsTable;
|
|
446
|
+
/** Persist one declaration, replacing any earlier shape for the same table. */
|
|
447
|
+
private persistDeclaration;
|
|
448
|
+
/**
|
|
449
|
+
* Reload every persisted declaration. Called at init, BEFORE any addon has
|
|
450
|
+
* had the chance to re-declare — which on a respawn none of them will.
|
|
451
|
+
*/
|
|
452
|
+
private restorePersistedDeclarations;
|
|
453
|
+
declareCollection(input: {
|
|
454
|
+
namespace?: string;
|
|
455
|
+
collection: string;
|
|
456
|
+
columns: readonly CollectionColumn[];
|
|
457
|
+
indexes?: readonly CollectionIndex[];
|
|
458
|
+
}): Promise<void>;
|
|
459
|
+
/** Serialise per-column values for SQL binding: objects → JSON, booleans → 0/1. */
|
|
460
|
+
private serializeColumnValue;
|
|
461
|
+
private ensureTable;
|
|
462
|
+
/**
|
|
463
|
+
* Drop a table nothing declares any more, reporting what went with it.
|
|
464
|
+
*
|
|
465
|
+
* The DDL lives here because the engine owns the handle AND the two memos
|
|
466
|
+
* that outlive a table: `structuredTables` (schema fingerprint) and
|
|
467
|
+
* `declaredCollections` (the column set `compileFilter` resolves against).
|
|
468
|
+
* Dropping behind their backs would leave a ghost — a later declaration of
|
|
469
|
+
* the same name would be memoised as "already materialised" against a table
|
|
470
|
+
* that no longer exists.
|
|
471
|
+
*
|
|
472
|
+
* WHICH tables are retired, and the logging, are policy: they live in
|
|
473
|
+
* `retired-collections.ts`. This method knows only how to drop one.
|
|
474
|
+
*
|
|
475
|
+
* Answers `null` when the table is not there — the steady state after the
|
|
476
|
+
* first boot that ran the purge, and the case on a fresh install.
|
|
477
|
+
*/
|
|
478
|
+
dropRetiredTable(table: string): DroppedTable | null;
|
|
479
|
+
/** Returns SQLite's `lastInsertRowid` — the only place an auto-assigned key
|
|
480
|
+
* is knowable (D473). */
|
|
481
|
+
private tableInsert;
|
|
482
|
+
private tableUpdate;
|
|
483
|
+
private tableDelete;
|
|
484
|
+
private tableCount;
|
|
485
|
+
private buildWhere;
|
|
486
486
|
}
|
|
487
487
|
export default SqliteSettingsBackend;
|