@camstack/core 0.1.8 → 0.1.10
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/builtins/local-backup/index.d.mts +42 -0
- package/dist/builtins/local-backup/index.d.ts +42 -0
- package/dist/builtins/local-backup/index.mjs +2 -10
- package/dist/builtins/local-backup/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.mts +2 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.d.ts +2 -0
- package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +2 -5
- package/dist/builtins/sqlite-storage/index.d.mts +4 -0
- package/dist/builtins/sqlite-storage/index.d.ts +4 -0
- package/dist/builtins/sqlite-storage/index.js +95 -197
- package/dist/builtins/sqlite-storage/index.js.map +1 -1
- package/dist/builtins/sqlite-storage/index.mjs +6 -26
- package/dist/builtins/sqlite-storage/index.mjs.map +1 -1
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.mts +2 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.d.ts +2 -0
- package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +1 -4
- package/dist/builtins/winston-logging/index.d.mts +30 -0
- package/dist/builtins/winston-logging/index.d.ts +30 -0
- package/dist/builtins/winston-logging/index.mjs +2 -10
- package/dist/builtins/winston-logging/index.mjs.map +1 -1
- package/dist/chunk-2F3XZYRW.mjs +89 -0
- package/dist/chunk-2F3XZYRW.mjs.map +1 -0
- package/dist/chunk-LQFPAEQF.mjs +147 -0
- package/dist/{chunk-XSLBW5C2.mjs.map → chunk-LQFPAEQF.mjs.map} +1 -1
- package/dist/chunk-R3DIIBBX.mjs +532 -0
- package/dist/chunk-R3DIIBBX.mjs.map +1 -0
- package/dist/chunk-SO4LROOT.mjs +150 -0
- package/dist/{chunk-GBWW3JU4.mjs.map → chunk-SO4LROOT.mjs.map} +1 -1
- package/dist/chunk-SPA4JBKN.mjs +175 -0
- package/dist/{chunk-4YD6WMO6.mjs.map → chunk-SPA4JBKN.mjs.map} +1 -1
- package/dist/chunk-YXNXYYHL.mjs +282 -0
- package/dist/{chunk-CHFIH4G6.mjs.map → chunk-YXNXYYHL.mjs.map} +1 -1
- package/dist/dist-3BY63UQ5.mjs +2151 -0
- package/dist/dist-3BY63UQ5.mjs.map +1 -0
- package/dist/filesystem-storage.addon-C42r589X.d.mts +57 -0
- package/dist/filesystem-storage.addon-C42r589X.d.ts +57 -0
- package/dist/index.d.mts +1110 -0
- package/dist/index.d.ts +1110 -0
- package/dist/index.js +6002 -17264
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3408 -16481
- package/dist/index.mjs.map +1 -1
- package/dist/sql-schema-CKz78rId.d.mts +97 -0
- package/dist/sql-schema-CKz78rId.d.ts +97 -0
- package/dist/sqlite-settings.addon-DigoKwpZ.d.mts +70 -0
- package/dist/sqlite-settings.addon-DigoKwpZ.d.ts +70 -0
- package/dist/storage-location-manager-KKDQNAKA.mjs +7 -0
- package/package.json +1 -1
- package/dist/chunk-4JEXNFZZ.mjs +0 -57
- package/dist/chunk-4YD6WMO6.mjs +0 -207
- package/dist/chunk-CHFIH4G6.mjs +0 -314
- package/dist/chunk-EFQ25JFE.mjs +0 -689
- package/dist/chunk-EFQ25JFE.mjs.map +0 -1
- package/dist/chunk-GBWW3JU4.mjs +0 -180
- package/dist/chunk-XSLBW5C2.mjs +0 -177
- package/dist/onnxruntime_binding-6Q6HXASN.node +0 -0
- package/dist/onnxruntime_binding-EKZT2NRK.node +0 -0
- package/dist/onnxruntime_binding-P6S7V3CI.node +0 -0
- package/dist/onnxruntime_binding-PJNNIIUO.node +0 -0
- package/dist/onnxruntime_binding-UN6SPTQK.node +0 -0
- /package/dist/{chunk-4JEXNFZZ.mjs.map → storage-location-manager-KKDQNAKA.mjs.map} +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IScopedLogger, IEventBus, IStorageLocation, BackupManifest, ICamstackAddon, IConfigurable, AddonManifest, AddonContext, CapabilityProviderMap, ConfigUISchema } from '@camstack/types';
|
|
2
|
+
export { BackupManifest } from '@camstack/types';
|
|
3
|
+
|
|
4
|
+
interface BackupConfig {
|
|
5
|
+
readonly backupDir: string;
|
|
6
|
+
readonly retentionCount: number;
|
|
7
|
+
}
|
|
8
|
+
declare class LocalBackupService {
|
|
9
|
+
private readonly config;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly eventBus;
|
|
12
|
+
private readonly storage;
|
|
13
|
+
private manifests;
|
|
14
|
+
constructor(config: BackupConfig, logger: IScopedLogger, eventBus: IEventBus, storage: IStorageLocation);
|
|
15
|
+
/** Create a backup of specified locations */
|
|
16
|
+
backup(options?: {
|
|
17
|
+
locations?: string[];
|
|
18
|
+
label?: string;
|
|
19
|
+
}): Promise<BackupManifest>;
|
|
20
|
+
/** Restore from a backup */
|
|
21
|
+
restore(backupId: string): Promise<void>;
|
|
22
|
+
/** List all backups sorted by timestamp descending */
|
|
23
|
+
list(): readonly BackupManifest[];
|
|
24
|
+
/** Delete a specific backup */
|
|
25
|
+
delete(backupId: string): Promise<void>;
|
|
26
|
+
private pruneOldBackups;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare class LocalBackupAddon implements ICamstackAddon, IConfigurable {
|
|
30
|
+
readonly manifest: AddonManifest;
|
|
31
|
+
private service;
|
|
32
|
+
private currentConfig;
|
|
33
|
+
initialize(context: AddonContext): Promise<void>;
|
|
34
|
+
shutdown(): Promise<void>;
|
|
35
|
+
getService(): LocalBackupService;
|
|
36
|
+
getCapabilityProvider<K extends keyof CapabilityProviderMap>(name: K): CapabilityProviderMap[K] | null;
|
|
37
|
+
getConfigSchema(): ConfigUISchema;
|
|
38
|
+
getConfig(): Record<string, unknown>;
|
|
39
|
+
onConfigChange(config: Record<string, unknown>): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { type BackupConfig, LocalBackupAddon, LocalBackupService, LocalBackupAddon as default };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { IScopedLogger, IEventBus, IStorageLocation, BackupManifest, ICamstackAddon, IConfigurable, AddonManifest, AddonContext, CapabilityProviderMap, ConfigUISchema } from '@camstack/types';
|
|
2
|
+
export { BackupManifest } from '@camstack/types';
|
|
3
|
+
|
|
4
|
+
interface BackupConfig {
|
|
5
|
+
readonly backupDir: string;
|
|
6
|
+
readonly retentionCount: number;
|
|
7
|
+
}
|
|
8
|
+
declare class LocalBackupService {
|
|
9
|
+
private readonly config;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly eventBus;
|
|
12
|
+
private readonly storage;
|
|
13
|
+
private manifests;
|
|
14
|
+
constructor(config: BackupConfig, logger: IScopedLogger, eventBus: IEventBus, storage: IStorageLocation);
|
|
15
|
+
/** Create a backup of specified locations */
|
|
16
|
+
backup(options?: {
|
|
17
|
+
locations?: string[];
|
|
18
|
+
label?: string;
|
|
19
|
+
}): Promise<BackupManifest>;
|
|
20
|
+
/** Restore from a backup */
|
|
21
|
+
restore(backupId: string): Promise<void>;
|
|
22
|
+
/** List all backups sorted by timestamp descending */
|
|
23
|
+
list(): readonly BackupManifest[];
|
|
24
|
+
/** Delete a specific backup */
|
|
25
|
+
delete(backupId: string): Promise<void>;
|
|
26
|
+
private pruneOldBackups;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
declare class LocalBackupAddon implements ICamstackAddon, IConfigurable {
|
|
30
|
+
readonly manifest: AddonManifest;
|
|
31
|
+
private service;
|
|
32
|
+
private currentConfig;
|
|
33
|
+
initialize(context: AddonContext): Promise<void>;
|
|
34
|
+
shutdown(): Promise<void>;
|
|
35
|
+
getService(): LocalBackupService;
|
|
36
|
+
getCapabilityProvider<K extends keyof CapabilityProviderMap>(name: K): CapabilityProviderMap[K] | null;
|
|
37
|
+
getConfigSchema(): ConfigUISchema;
|
|
38
|
+
getConfig(): Record<string, unknown>;
|
|
39
|
+
onConfigChange(config: Record<string, unknown>): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { type BackupConfig, LocalBackupAddon, LocalBackupService, LocalBackupAddon as default };
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
LocalBackupAddon,
|
|
3
|
-
LocalBackupService
|
|
4
|
-
|
|
5
|
-
init_local_backup_addon
|
|
6
|
-
} from "../../chunk-GBWW3JU4.mjs";
|
|
7
|
-
import "../../chunk-4JEXNFZZ.mjs";
|
|
8
|
-
|
|
9
|
-
// src/builtins/local-backup/index.ts
|
|
10
|
-
init_local_backup();
|
|
11
|
-
init_local_backup_addon();
|
|
12
|
-
init_local_backup_addon();
|
|
3
|
+
LocalBackupService
|
|
4
|
+
} from "../../chunk-SO4LROOT.mjs";
|
|
13
5
|
export {
|
|
14
6
|
LocalBackupAddon,
|
|
15
7
|
LocalBackupService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FilesystemStorageAddon,
|
|
3
|
-
filesystem_storage_addon_default
|
|
4
|
-
|
|
5
|
-
} from "../../chunk-4YD6WMO6.mjs";
|
|
6
|
-
import "../../chunk-4JEXNFZZ.mjs";
|
|
7
|
-
init_filesystem_storage_addon();
|
|
3
|
+
filesystem_storage_addon_default
|
|
4
|
+
} from "../../chunk-SPA4JBKN.mjs";
|
|
8
5
|
export {
|
|
9
6
|
FilesystemStorageAddon,
|
|
10
7
|
filesystem_storage_addon_default as default
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { F as FilesystemStorageAddon, a as FilesystemStorageProvider, F as default } from '../../filesystem-storage.addon-C42r589X.mjs';
|
|
2
|
+
export { S as SqliteSettingsAddon, a as SqliteSettingsBackend } from '../../sqlite-settings.addon-DigoKwpZ.mjs';
|
|
3
|
+
export { A as AddonTableSchema, C as CORE_TABLE_DDL, F as FileSystemStorage, S as SettingsStore, a as SqliteStorageAddon, b as SqliteStorageProvider, c as addonTableToDdl } from '../../sql-schema-CKz78rId.mjs';
|
|
4
|
+
import '@camstack/types';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { F as FilesystemStorageAddon, a as FilesystemStorageProvider, F as default } from '../../filesystem-storage.addon-C42r589X.js';
|
|
2
|
+
export { S as SqliteSettingsAddon, a as SqliteSettingsBackend } from '../../sqlite-settings.addon-DigoKwpZ.js';
|
|
3
|
+
export { A as AddonTableSchema, C as CORE_TABLE_DDL, F as FileSystemStorage, S as SettingsStore, a as SqliteStorageAddon, b as SqliteStorageProvider, c as addonTableToDdl } from '../../sql-schema-CKz78rId.js';
|
|
4
|
+
import '@camstack/types';
|
|
@@ -5,9 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
10
|
-
};
|
|
11
8
|
var __export = (target, all) => {
|
|
12
9
|
for (var name in all)
|
|
13
10
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -30,110 +27,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
30
27
|
));
|
|
31
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
32
29
|
|
|
33
|
-
// src/builtins/sqlite-storage/sql-schema.js
|
|
34
|
-
var require_sql_schema = __commonJS({
|
|
35
|
-
"src/builtins/sqlite-storage/sql-schema.js"(exports2) {
|
|
36
|
-
"use strict";
|
|
37
|
-
Object.defineProperty(exports2, "__esModule", { value: true });
|
|
38
|
-
exports2.CORE_TABLE_DDL = void 0;
|
|
39
|
-
exports2.addonTableToDdl = addonTableToDdl2;
|
|
40
|
-
exports2.CORE_TABLE_DDL = [
|
|
41
|
-
// Settings tables
|
|
42
|
-
`CREATE TABLE IF NOT EXISTS system_settings (
|
|
43
|
-
key TEXT PRIMARY KEY,
|
|
44
|
-
value JSON NOT NULL,
|
|
45
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
46
|
-
)`,
|
|
47
|
-
`CREATE TABLE IF NOT EXISTS addon_settings (
|
|
48
|
-
addon_id TEXT NOT NULL,
|
|
49
|
-
key TEXT NOT NULL,
|
|
50
|
-
value JSON NOT NULL,
|
|
51
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
52
|
-
PRIMARY KEY (addon_id, key)
|
|
53
|
-
)`,
|
|
54
|
-
`CREATE TABLE IF NOT EXISTS provider_settings (
|
|
55
|
-
provider_id TEXT NOT NULL,
|
|
56
|
-
key TEXT NOT NULL,
|
|
57
|
-
value JSON NOT NULL,
|
|
58
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
59
|
-
PRIMARY KEY (provider_id, key)
|
|
60
|
-
)`,
|
|
61
|
-
`CREATE TABLE IF NOT EXISTS device_settings (
|
|
62
|
-
device_id TEXT NOT NULL,
|
|
63
|
-
key TEXT NOT NULL,
|
|
64
|
-
value JSON NOT NULL,
|
|
65
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
66
|
-
PRIMARY KEY (device_id, key)
|
|
67
|
-
)`,
|
|
68
|
-
// Detection events
|
|
69
|
-
`CREATE TABLE IF NOT EXISTS detection_events (
|
|
70
|
-
id TEXT PRIMARY KEY,
|
|
71
|
-
timestamp INTEGER NOT NULL,
|
|
72
|
-
device_id TEXT NOT NULL,
|
|
73
|
-
class_name TEXT NOT NULL,
|
|
74
|
-
score REAL NOT NULL,
|
|
75
|
-
severity TEXT NOT NULL,
|
|
76
|
-
track_id TEXT,
|
|
77
|
-
zones JSON,
|
|
78
|
-
recognition JSON,
|
|
79
|
-
media_files JSON,
|
|
80
|
-
data JSON
|
|
81
|
-
)`,
|
|
82
|
-
`CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,
|
|
83
|
-
`CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,
|
|
84
|
-
// Audio levels
|
|
85
|
-
`CREATE TABLE IF NOT EXISTS audio_levels (
|
|
86
|
-
id TEXT PRIMARY KEY,
|
|
87
|
-
timestamp INTEGER NOT NULL,
|
|
88
|
-
device_id TEXT NOT NULL,
|
|
89
|
-
dbfs REAL NOT NULL,
|
|
90
|
-
rms REAL NOT NULL,
|
|
91
|
-
state TEXT NOT NULL
|
|
92
|
-
)`,
|
|
93
|
-
`CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,
|
|
94
|
-
// Track trails
|
|
95
|
-
`CREATE TABLE IF NOT EXISTS track_trails (
|
|
96
|
-
track_id TEXT PRIMARY KEY,
|
|
97
|
-
device_id TEXT NOT NULL,
|
|
98
|
-
class_name TEXT NOT NULL,
|
|
99
|
-
first_seen INTEGER NOT NULL,
|
|
100
|
-
last_seen INTEGER NOT NULL,
|
|
101
|
-
positions JSON NOT NULL,
|
|
102
|
-
snapshots JSON,
|
|
103
|
-
total_distance REAL,
|
|
104
|
-
zones_visited JSON
|
|
105
|
-
)`,
|
|
106
|
-
`CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`
|
|
107
|
-
];
|
|
108
|
-
function addonTableToDdl2(schema) {
|
|
109
|
-
const pks = schema.columns.filter((c) => c.primaryKey).map((c) => c.name);
|
|
110
|
-
const colDefs = schema.columns.map((c) => {
|
|
111
|
-
const parts = [c.name, c.type];
|
|
112
|
-
if (c.notNull)
|
|
113
|
-
parts.push("NOT NULL");
|
|
114
|
-
return parts.join(" ");
|
|
115
|
-
});
|
|
116
|
-
let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (
|
|
117
|
-
${colDefs.join(",\n ")}`;
|
|
118
|
-
if (pks.length > 0) {
|
|
119
|
-
ddl += `,
|
|
120
|
-
PRIMARY KEY (${pks.join(", ")})`;
|
|
121
|
-
}
|
|
122
|
-
ddl += "\n)";
|
|
123
|
-
const stmts = [ddl];
|
|
124
|
-
for (const idx of schema.indexes ?? []) {
|
|
125
|
-
const unique = idx.unique ? "UNIQUE " : "";
|
|
126
|
-
stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(", ")})`);
|
|
127
|
-
}
|
|
128
|
-
return stmts;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
|
|
133
30
|
// src/builtins/sqlite-storage/index.ts
|
|
134
31
|
var sqlite_storage_exports = {};
|
|
135
32
|
__export(sqlite_storage_exports, {
|
|
136
|
-
CORE_TABLE_DDL: () =>
|
|
33
|
+
CORE_TABLE_DDL: () => CORE_TABLE_DDL,
|
|
137
34
|
FileSystemStorage: () => FileSystemStorage,
|
|
138
35
|
FilesystemStorageAddon: () => FilesystemStorageAddon,
|
|
139
36
|
FilesystemStorageProvider: () => FilesystemStorageProvider,
|
|
@@ -879,7 +776,99 @@ var SqliteStorageAddon = class {
|
|
|
879
776
|
|
|
880
777
|
// src/builtins/sqlite-storage/settings-store.ts
|
|
881
778
|
var import_better_sqlite33 = __toESM(require("better-sqlite3"));
|
|
882
|
-
|
|
779
|
+
|
|
780
|
+
// src/builtins/sqlite-storage/sql-schema.ts
|
|
781
|
+
var CORE_TABLE_DDL = [
|
|
782
|
+
// Settings tables
|
|
783
|
+
`CREATE TABLE IF NOT EXISTS system_settings (
|
|
784
|
+
key TEXT PRIMARY KEY,
|
|
785
|
+
value JSON NOT NULL,
|
|
786
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
787
|
+
)`,
|
|
788
|
+
`CREATE TABLE IF NOT EXISTS addon_settings (
|
|
789
|
+
addon_id TEXT NOT NULL,
|
|
790
|
+
key TEXT NOT NULL,
|
|
791
|
+
value JSON NOT NULL,
|
|
792
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
793
|
+
PRIMARY KEY (addon_id, key)
|
|
794
|
+
)`,
|
|
795
|
+
`CREATE TABLE IF NOT EXISTS provider_settings (
|
|
796
|
+
provider_id TEXT NOT NULL,
|
|
797
|
+
key TEXT NOT NULL,
|
|
798
|
+
value JSON NOT NULL,
|
|
799
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
800
|
+
PRIMARY KEY (provider_id, key)
|
|
801
|
+
)`,
|
|
802
|
+
`CREATE TABLE IF NOT EXISTS device_settings (
|
|
803
|
+
device_id TEXT NOT NULL,
|
|
804
|
+
key TEXT NOT NULL,
|
|
805
|
+
value JSON NOT NULL,
|
|
806
|
+
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
807
|
+
PRIMARY KEY (device_id, key)
|
|
808
|
+
)`,
|
|
809
|
+
// Detection events
|
|
810
|
+
`CREATE TABLE IF NOT EXISTS detection_events (
|
|
811
|
+
id TEXT PRIMARY KEY,
|
|
812
|
+
timestamp INTEGER NOT NULL,
|
|
813
|
+
device_id TEXT NOT NULL,
|
|
814
|
+
class_name TEXT NOT NULL,
|
|
815
|
+
score REAL NOT NULL,
|
|
816
|
+
severity TEXT NOT NULL,
|
|
817
|
+
track_id TEXT,
|
|
818
|
+
zones JSON,
|
|
819
|
+
recognition JSON,
|
|
820
|
+
media_files JSON,
|
|
821
|
+
data JSON
|
|
822
|
+
)`,
|
|
823
|
+
`CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,
|
|
824
|
+
`CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,
|
|
825
|
+
// Audio levels
|
|
826
|
+
`CREATE TABLE IF NOT EXISTS audio_levels (
|
|
827
|
+
id TEXT PRIMARY KEY,
|
|
828
|
+
timestamp INTEGER NOT NULL,
|
|
829
|
+
device_id TEXT NOT NULL,
|
|
830
|
+
dbfs REAL NOT NULL,
|
|
831
|
+
rms REAL NOT NULL,
|
|
832
|
+
state TEXT NOT NULL
|
|
833
|
+
)`,
|
|
834
|
+
`CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,
|
|
835
|
+
// Track trails
|
|
836
|
+
`CREATE TABLE IF NOT EXISTS track_trails (
|
|
837
|
+
track_id TEXT PRIMARY KEY,
|
|
838
|
+
device_id TEXT NOT NULL,
|
|
839
|
+
class_name TEXT NOT NULL,
|
|
840
|
+
first_seen INTEGER NOT NULL,
|
|
841
|
+
last_seen INTEGER NOT NULL,
|
|
842
|
+
positions JSON NOT NULL,
|
|
843
|
+
snapshots JSON,
|
|
844
|
+
total_distance REAL,
|
|
845
|
+
zones_visited JSON
|
|
846
|
+
)`,
|
|
847
|
+
`CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`
|
|
848
|
+
];
|
|
849
|
+
function addonTableToDdl(schema) {
|
|
850
|
+
const pks = schema.columns.filter((c) => c.primaryKey).map((c) => c.name);
|
|
851
|
+
const colDefs = schema.columns.map((c) => {
|
|
852
|
+
const parts = [c.name, c.type];
|
|
853
|
+
if (c.notNull) parts.push("NOT NULL");
|
|
854
|
+
return parts.join(" ");
|
|
855
|
+
});
|
|
856
|
+
let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (
|
|
857
|
+
${colDefs.join(",\n ")}`;
|
|
858
|
+
if (pks.length > 0) {
|
|
859
|
+
ddl += `,
|
|
860
|
+
PRIMARY KEY (${pks.join(", ")})`;
|
|
861
|
+
}
|
|
862
|
+
ddl += "\n)";
|
|
863
|
+
const stmts = [ddl];
|
|
864
|
+
for (const idx of schema.indexes ?? []) {
|
|
865
|
+
const unique = idx.unique ? "UNIQUE " : "";
|
|
866
|
+
stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(", ")})`);
|
|
867
|
+
}
|
|
868
|
+
return stmts;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
// src/builtins/sqlite-storage/settings-store.ts
|
|
883
872
|
var import_kernel = require("@camstack/kernel");
|
|
884
873
|
var SettingsStore = class {
|
|
885
874
|
db;
|
|
@@ -1014,103 +1003,12 @@ var SettingsStore = class {
|
|
|
1014
1003
|
// ---------------------------------------------------------------------------
|
|
1015
1004
|
initTables() {
|
|
1016
1005
|
this.db.transaction(() => {
|
|
1017
|
-
for (const stmt of
|
|
1006
|
+
for (const stmt of CORE_TABLE_DDL) {
|
|
1018
1007
|
this.db.prepare(stmt).run();
|
|
1019
1008
|
}
|
|
1020
1009
|
})();
|
|
1021
1010
|
}
|
|
1022
1011
|
};
|
|
1023
|
-
|
|
1024
|
-
// src/builtins/sqlite-storage/sql-schema.ts
|
|
1025
|
-
var CORE_TABLE_DDL2 = [
|
|
1026
|
-
// Settings tables
|
|
1027
|
-
`CREATE TABLE IF NOT EXISTS system_settings (
|
|
1028
|
-
key TEXT PRIMARY KEY,
|
|
1029
|
-
value JSON NOT NULL,
|
|
1030
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch())
|
|
1031
|
-
)`,
|
|
1032
|
-
`CREATE TABLE IF NOT EXISTS addon_settings (
|
|
1033
|
-
addon_id TEXT NOT NULL,
|
|
1034
|
-
key TEXT NOT NULL,
|
|
1035
|
-
value JSON NOT NULL,
|
|
1036
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
1037
|
-
PRIMARY KEY (addon_id, key)
|
|
1038
|
-
)`,
|
|
1039
|
-
`CREATE TABLE IF NOT EXISTS provider_settings (
|
|
1040
|
-
provider_id TEXT NOT NULL,
|
|
1041
|
-
key TEXT NOT NULL,
|
|
1042
|
-
value JSON NOT NULL,
|
|
1043
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
1044
|
-
PRIMARY KEY (provider_id, key)
|
|
1045
|
-
)`,
|
|
1046
|
-
`CREATE TABLE IF NOT EXISTS device_settings (
|
|
1047
|
-
device_id TEXT NOT NULL,
|
|
1048
|
-
key TEXT NOT NULL,
|
|
1049
|
-
value JSON NOT NULL,
|
|
1050
|
-
updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
|
|
1051
|
-
PRIMARY KEY (device_id, key)
|
|
1052
|
-
)`,
|
|
1053
|
-
// Detection events
|
|
1054
|
-
`CREATE TABLE IF NOT EXISTS detection_events (
|
|
1055
|
-
id TEXT PRIMARY KEY,
|
|
1056
|
-
timestamp INTEGER NOT NULL,
|
|
1057
|
-
device_id TEXT NOT NULL,
|
|
1058
|
-
class_name TEXT NOT NULL,
|
|
1059
|
-
score REAL NOT NULL,
|
|
1060
|
-
severity TEXT NOT NULL,
|
|
1061
|
-
track_id TEXT,
|
|
1062
|
-
zones JSON,
|
|
1063
|
-
recognition JSON,
|
|
1064
|
-
media_files JSON,
|
|
1065
|
-
data JSON
|
|
1066
|
-
)`,
|
|
1067
|
-
`CREATE INDEX IF NOT EXISTS idx_det_device_ts ON detection_events(device_id, timestamp)`,
|
|
1068
|
-
`CREATE INDEX IF NOT EXISTS idx_det_class_ts ON detection_events(class_name, timestamp)`,
|
|
1069
|
-
// Audio levels
|
|
1070
|
-
`CREATE TABLE IF NOT EXISTS audio_levels (
|
|
1071
|
-
id TEXT PRIMARY KEY,
|
|
1072
|
-
timestamp INTEGER NOT NULL,
|
|
1073
|
-
device_id TEXT NOT NULL,
|
|
1074
|
-
dbfs REAL NOT NULL,
|
|
1075
|
-
rms REAL NOT NULL,
|
|
1076
|
-
state TEXT NOT NULL
|
|
1077
|
-
)`,
|
|
1078
|
-
`CREATE INDEX IF NOT EXISTS idx_audio_device_ts ON audio_levels(device_id, timestamp)`,
|
|
1079
|
-
// Track trails
|
|
1080
|
-
`CREATE TABLE IF NOT EXISTS track_trails (
|
|
1081
|
-
track_id TEXT PRIMARY KEY,
|
|
1082
|
-
device_id TEXT NOT NULL,
|
|
1083
|
-
class_name TEXT NOT NULL,
|
|
1084
|
-
first_seen INTEGER NOT NULL,
|
|
1085
|
-
last_seen INTEGER NOT NULL,
|
|
1086
|
-
positions JSON NOT NULL,
|
|
1087
|
-
snapshots JSON,
|
|
1088
|
-
total_distance REAL,
|
|
1089
|
-
zones_visited JSON
|
|
1090
|
-
)`,
|
|
1091
|
-
`CREATE INDEX IF NOT EXISTS idx_trails_device_ts ON track_trails(device_id, first_seen)`
|
|
1092
|
-
];
|
|
1093
|
-
function addonTableToDdl(schema) {
|
|
1094
|
-
const pks = schema.columns.filter((c) => c.primaryKey).map((c) => c.name);
|
|
1095
|
-
const colDefs = schema.columns.map((c) => {
|
|
1096
|
-
const parts = [c.name, c.type];
|
|
1097
|
-
if (c.notNull) parts.push("NOT NULL");
|
|
1098
|
-
return parts.join(" ");
|
|
1099
|
-
});
|
|
1100
|
-
let ddl = `CREATE TABLE IF NOT EXISTS ${schema.name} (
|
|
1101
|
-
${colDefs.join(",\n ")}`;
|
|
1102
|
-
if (pks.length > 0) {
|
|
1103
|
-
ddl += `,
|
|
1104
|
-
PRIMARY KEY (${pks.join(", ")})`;
|
|
1105
|
-
}
|
|
1106
|
-
ddl += "\n)";
|
|
1107
|
-
const stmts = [ddl];
|
|
1108
|
-
for (const idx of schema.indexes ?? []) {
|
|
1109
|
-
const unique = idx.unique ? "UNIQUE " : "";
|
|
1110
|
-
stmts.push(`CREATE ${unique}INDEX IF NOT EXISTS ${idx.name} ON ${schema.name}(${idx.columns.join(", ")})`);
|
|
1111
|
-
}
|
|
1112
|
-
return stmts;
|
|
1113
|
-
}
|
|
1114
1012
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1115
1013
|
0 && (module.exports = {
|
|
1116
1014
|
CORE_TABLE_DDL,
|