boltstore 0.6.2 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +19 -8
  2. package/dist/audit.d.ts.map +1 -1
  3. package/dist/audit.js +10 -2
  4. package/dist/audit.js.map +1 -1
  5. package/dist/auth/jwt.js +1 -1
  6. package/dist/bin.js +4 -4
  7. package/dist/bin.js.map +1 -1
  8. package/dist/cli/admin.d.ts +2 -0
  9. package/dist/cli/admin.d.ts.map +1 -0
  10. package/dist/cli/admin.js +65 -0
  11. package/dist/cli/admin.js.map +1 -0
  12. package/dist/cli/applications.d.ts +2 -0
  13. package/dist/cli/applications.d.ts.map +1 -0
  14. package/dist/cli/applications.js +105 -0
  15. package/dist/cli/applications.js.map +1 -0
  16. package/dist/cli/backup.d.ts +3 -0
  17. package/dist/cli/backup.d.ts.map +1 -0
  18. package/dist/cli/backup.js +49 -0
  19. package/dist/cli/backup.js.map +1 -0
  20. package/dist/cli/help.d.ts +3 -0
  21. package/dist/cli/help.d.ts.map +1 -0
  22. package/dist/cli/help.js +36 -0
  23. package/dist/cli/help.js.map +1 -0
  24. package/dist/cli/import-export.d.ts +3 -0
  25. package/dist/cli/import-export.d.ts.map +1 -0
  26. package/dist/cli/import-export.js +80 -0
  27. package/dist/cli/import-export.js.map +1 -0
  28. package/dist/cli/init.d.ts +4 -0
  29. package/dist/cli/init.d.ts.map +1 -0
  30. package/dist/cli/init.js +105 -0
  31. package/dist/cli/init.js.map +1 -0
  32. package/dist/cli/migrate.d.ts +4 -0
  33. package/dist/cli/migrate.d.ts.map +1 -0
  34. package/dist/cli/migrate.js +77 -0
  35. package/dist/cli/migrate.js.map +1 -0
  36. package/dist/cli/serve.d.ts +2 -0
  37. package/dist/cli/serve.d.ts.map +1 -0
  38. package/dist/cli/serve.js +33 -0
  39. package/dist/cli/serve.js.map +1 -0
  40. package/dist/cli/status.d.ts +2 -0
  41. package/dist/cli/status.d.ts.map +1 -0
  42. package/dist/cli/status.js +15 -0
  43. package/dist/cli/status.js.map +1 -0
  44. package/dist/cli.d.ts +0 -10
  45. package/dist/cli.d.ts.map +1 -1
  46. package/dist/cli.js +95 -402
  47. package/dist/cli.js.map +1 -1
  48. package/dist/db/manager.d.ts +21 -21
  49. package/dist/db/manager.d.ts.map +1 -1
  50. package/dist/db/manager.js +97 -65
  51. package/dist/db/manager.js.map +1 -1
  52. package/dist/entry.js +4 -4
  53. package/dist/entry.js.map +1 -1
  54. package/package.json +2 -2
package/README.md CHANGED
@@ -113,9 +113,8 @@ Without a command argument, the server starts on port 8080. With a command argum
113
113
  ### CLI commands
114
114
 
115
115
  ```bash
116
- # Start the server
116
+ # Start the server (auto-generates boltstore.yaml if missing)
117
117
  bun run boltstore serve
118
- # or: bun run bolt serve
119
118
 
120
119
  # Generate a config file (YAML by default)
121
120
  bun run boltstore init
@@ -124,7 +123,19 @@ bun run boltstore init
124
123
  bun run boltstore init --json
125
124
 
126
125
  # Create an admin account (CLI-only, interactive prompt)
127
- bun run boltstore admin init
126
+ bun run boltstore admin
127
+
128
+ # List applications with their database IDs and paths
129
+ bun run boltstore applications
130
+
131
+ # Create a new application
132
+ bun run boltstore applications --create myapp
133
+
134
+ # Rename an application
135
+ bun run boltstore applications --rename myapp "new-name"
136
+
137
+ # Delete an application (irreversible — requires confirmation)
138
+ bun run boltstore applications --delete myapp
128
139
 
129
140
  # Run pending migrations
130
141
  bun run boltstore migrate --db myapp --dir ./migrations
@@ -133,19 +144,19 @@ bun run boltstore migrate --db myapp --dir ./migrations
133
144
  bun run boltstore migrate:rollback --db myapp
134
145
 
135
146
  # List migration status
136
- bun run boltstore migrations --db myapp
147
+ bun run boltstore migrate:list --db myapp
137
148
 
138
149
  # Import data
139
- bun run boltstore import todos mydata.csv --db myapp --format csv
150
+ bun run boltstore db:import todos mydata.csv --db myapp --format csv
140
151
 
141
152
  # Export data (prints to stdout)
142
- bun run boltstore export todos --db myapp --format json
153
+ bun run boltstore db:export todos --db myapp --format json
143
154
 
144
155
  # Create a backup
145
- bun run boltstore backup --db myapp --label "pre-deploy"
156
+ bun run boltstore db:backup --db myapp --label "pre-deploy"
146
157
 
147
158
  # Restore from a backup file
148
- bun run boltstore restore ./data/backups/myapp-20260101.db --db myapp
159
+ bun run boltstore db:restore ./data/backups/myapp-20260101.db --db myapp
149
160
 
150
161
  # Check server status
151
162
  bun run boltstore status
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,kCAAkC;AAClC,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,cAAc,GACd,qBAAqB,GACrB,sBAAsB,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,eAAe,GACf,qBAAqB,CAAC;AAE1B,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CA0B7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CA8C1E;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAIxE"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIzC,kCAAkC;AAClC,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,cAAc,GACd,qBAAqB,GACrB,sBAAsB,GACtB,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,GACb,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,cAAc,GACd,YAAY,GACZ,aAAa,GACb,WAAW,GACX,cAAc,GACd,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,QAAQ,GACR,QAAQ,GACR,eAAe,GACf,qBAAqB,CAAC;AAE1B,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CA4B7D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAgD1E;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAIxE"}
package/dist/audit.js CHANGED
@@ -8,12 +8,14 @@
8
8
  * @module boltstore/audit
9
9
  */
10
10
  import logger from "./logger";
11
+ import { generateSecureId, ID_PREFIXES } from "@boltstore/utils";
11
12
  /** Bootstrap the audit log table in a database. */
12
13
  export function bootstrapAuditTables(pool) {
13
14
  const db = pool.write();
14
15
  db.run(`
15
16
  CREATE TABLE IF NOT EXISTS _audit_log (
16
17
  id INTEGER PRIMARY KEY AUTOINCREMENT,
18
+ log_id TEXT,
17
19
  type TEXT NOT NULL,
18
20
  principal_id TEXT,
19
21
  principal_type TEXT,
@@ -29,6 +31,10 @@ export function bootstrapAuditTables(pool) {
29
31
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
30
32
  )
31
33
  `);
34
+ try {
35
+ db.run("ALTER TABLE _audit_log ADD COLUMN log_id TEXT");
36
+ }
37
+ catch { }
32
38
  db.run(`
33
39
  CREATE INDEX IF NOT EXISTS idx_audit_log_created_at ON _audit_log(created_at)
34
40
  `);
@@ -60,9 +66,11 @@ export function logAuditEvent(event, pool) {
60
66
  try {
61
67
  bootstrapAuditTables(pool);
62
68
  const db = pool.write();
69
+ const logId = generateSecureId(ID_PREFIXES.auditLog);
63
70
  db.run(`INSERT INTO _audit_log
64
- (type, principal_id, principal_type, database, collection, action, target, ip, user_agent, success, details_json, error)
65
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
71
+ (log_id, type, principal_id, principal_type, database, collection, action, target, ip, user_agent, success, details_json, error)
72
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
73
+ logId,
66
74
  event.type,
67
75
  event.principalId ?? null,
68
76
  event.principalType ?? null,
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,MAAM,MAAM,UAAU,CAAC;AAgD9B,mDAAmD;AACnD,MAAM,UAAU,oBAAoB,CAAC,IAAkB;IACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACxB,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;GAiBN,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;IACH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAiB,EAAE,IAAmB;IAClE,MAAM,KAAK,GAA4B;QACrC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,YAAY,EAAE,KAAK,CAAC,WAAW;QAC/B,cAAc,EAAE,KAAK,CAAC,aAAa;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,UAAU,EAAE,KAAK,CAAC,SAAS;QAC3B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IAE3C,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,CAAC;YACH,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,EAAE,CAAC,GAAG,CACJ;;qDAE6C,EAC7C;gBACE,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,WAAW,IAAI,IAAI;gBACzB,KAAK,CAAC,aAAa,IAAI,IAAI;gBAC3B,KAAK,CAAC,QAAQ,IAAI,IAAI;gBACtB,KAAK,CAAC,UAAU,IAAI,IAAI;gBACxB,KAAK,CAAC,MAAM,IAAI,IAAI;gBACpB,KAAK,CAAC,MAAM,IAAI,IAAI;gBACpB,KAAK,CAAC,EAAE,IAAI,IAAI;gBAChB,KAAK,CAAC,SAAS,IAAI,IAAI;gBACvB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;gBACpD,KAAK,CAAC,KAAK,IAAI,IAAI;aACpB,CACF,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,SAAS,GAAG,GAAG;IAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,IAAI,UAAU,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,UAAU,CAAC;IACtD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"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"}
package/dist/auth/jwt.js CHANGED
@@ -70,7 +70,7 @@ export function verifyJwt(token, secret, audience) {
70
70
  return payload;
71
71
  }
72
72
  export function generateJti() {
73
- return generateSecureId("jti");
73
+ return generateSecureId("tok");
74
74
  }
75
75
  export function unixNow() {
76
76
  return Math.floor(Date.now() / 1000);
package/dist/bin.js CHANGED
@@ -19,10 +19,10 @@ import { loadConfig } from "./config";
19
19
  import { info, success, error } from "./cli-style";
20
20
  const command = process.argv[2];
21
21
  const CLI_COMMANDS = new Set([
22
- "serve", "init", "admin", "status", "help", "--help", "-h",
23
- "migrate", "migrate:rollback", "migrations",
24
- "import", "export",
25
- "backup", "restore",
22
+ "serve", "init", "admin", "applications", "status", "help", "--help", "-h",
23
+ "migrate", "migrate:rollback", "migrate:list", "migrations",
24
+ "import", "export", "db:import", "db:export",
25
+ "backup", "restore", "db:backup", "db:restore",
26
26
  ]);
27
27
  try {
28
28
  if (command && CLI_COMMANDS.has(command)) {
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function adminCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/cli/admin.ts"],"names":[],"mappings":"AAMA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEhE"}
@@ -0,0 +1,65 @@
1
+ import { DatabaseManager } from "../db/manager";
2
+ import { loadConfig } from "../config";
3
+ import { createAdminUser } from "../auth/users";
4
+ import { info, success, error as cliError, out } from "../cli-style";
5
+ import { deprecateCommand } from "./help";
6
+ export async function adminCommand(args) {
7
+ const subcommand = args[1];
8
+ if (subcommand === "databases") {
9
+ deprecateCommand("admin databases", "applications");
10
+ const { applicationsCommand } = await import("./applications");
11
+ args[0] = "applications";
12
+ return applicationsCommand(args);
13
+ }
14
+ if (subcommand === "init" || !subcommand) {
15
+ const { prompt, promptPassword } = await import("../prompt");
16
+ if (!subcommand) {
17
+ out("");
18
+ info("This will create a new admin account for the Boltstore server.");
19
+ out(" Admin accounts can manage databases, collections, and users.");
20
+ out(" Regular users are created via the register endpoint in each app database.");
21
+ out("");
22
+ const { prompt: confirmPrompt } = await import("../prompt");
23
+ const confirm = await confirmPrompt("Proceed with creating an admin account? [Y/n]: ");
24
+ if (confirm.toLowerCase() === "n" || confirm.toLowerCase() === "no") {
25
+ info("Cancelled.");
26
+ return;
27
+ }
28
+ }
29
+ if (subcommand === "init") {
30
+ deprecateCommand("admin init", "admin");
31
+ }
32
+ out("");
33
+ info("Create an admin account for the Boltstore server.");
34
+ const name = (await prompt(" Name (optional): ")) || undefined;
35
+ const email = await prompt(" Email: ");
36
+ const password = await promptPassword(" Password (min 8 chars): ");
37
+ if (!email || !password) {
38
+ cliError("Email and password are required.");
39
+ return;
40
+ }
41
+ const config = await loadConfig();
42
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
43
+ try {
44
+ const metaPool = manager.getMetaPool();
45
+ const user = await createAdminUser(metaPool, email.trim(), password, name?.trim() || undefined);
46
+ out("");
47
+ success(`Admin account created (source: ${user.source}).`);
48
+ out(` ID: ${user.id}`);
49
+ out(` Email: ${user.email}`);
50
+ if (user.name)
51
+ out(` Name: ${user.name}`);
52
+ out("");
53
+ info("You can now log in at POST /api/_system/auth/login");
54
+ out(` { "email": "${user.email}", "password": "..." }`);
55
+ out("");
56
+ }
57
+ finally {
58
+ manager.close();
59
+ }
60
+ }
61
+ else {
62
+ cliError("Usage: boltstore admin | boltstore applications");
63
+ }
64
+ }
65
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/cli/admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function applicationsCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=applications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applications.d.ts","sourceRoot":"","sources":["../../src/cli/applications.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4GvE"}
@@ -0,0 +1,105 @@
1
+ import { DatabaseManager } from "../db/manager";
2
+ import { loadConfig } from "../config";
3
+ import { info, success, error as cliError, out } from "../cli-style";
4
+ export async function applicationsCommand(args) {
5
+ const config = await loadConfig();
6
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
7
+ try {
8
+ try {
9
+ const createIdx = args.indexOf("--create");
10
+ if (createIdx >= 0) {
11
+ const appName = args[createIdx + 1];
12
+ if (!appName) {
13
+ cliError("Usage: boltstore applications --create <application-name>");
14
+ return;
15
+ }
16
+ const result = manager.createDatabase(appName);
17
+ out("");
18
+ success(`Application "${result.name}" created.`);
19
+ out(` DB ID: ${result.id}`);
20
+ out(` DB Path: ${result.path}`);
21
+ out(` Files Dir: ${result.path.replace("/db/", "/files/").replace(/\/[^/]+\.db$/, "")}`);
22
+ return;
23
+ }
24
+ }
25
+ catch (err) {
26
+ const e = err;
27
+ if (e.message)
28
+ cliError(e.message);
29
+ else
30
+ cliError(String(err));
31
+ return;
32
+ }
33
+ const renameIdx = args.indexOf("--rename");
34
+ if (renameIdx >= 0) {
35
+ const appRef = args[renameIdx + 1];
36
+ const newName = args[renameIdx + 2];
37
+ if (!appRef || !newName) {
38
+ cliError("Usage: boltstore applications --rename <app-id-or-name> <new-name>");
39
+ return;
40
+ }
41
+ const dbList = manager.listDatabases();
42
+ const db = dbList.find((d) => d.id === appRef || d.name === appRef);
43
+ if (!db) {
44
+ cliError(`Application "${appRef}" not found.`);
45
+ return;
46
+ }
47
+ const metaDb = manager.getMetaPool().write();
48
+ metaDb.run("UPDATE _databases SET name=?, updated_at=? WHERE id=?", [newName, new Date().toISOString(), db.id]);
49
+ success(`Renamed application "${db.name}" → "${newName}"`);
50
+ return;
51
+ }
52
+ const deleteIdx = args.indexOf("--delete");
53
+ if (deleteIdx >= 0) {
54
+ const appRef = args[deleteIdx + 1];
55
+ if (!appRef) {
56
+ cliError("Usage: boltstore applications --delete <app-id-or-name>");
57
+ return;
58
+ }
59
+ const dbList = manager.listDatabases();
60
+ const db = dbList.find((d) => d.id === appRef || d.name === appRef);
61
+ if (!db) {
62
+ cliError(`Application "${appRef}" not found.`);
63
+ return;
64
+ }
65
+ out("");
66
+ cliError("⚠ WARNING: This action is IRREVERSIBLE!");
67
+ out("");
68
+ out(` You are about to permanently delete application "${db.name}" (${db.id}):`);
69
+ out(` • Database file: ${db.path}`);
70
+ out(` • All records will be lost`);
71
+ out(` • All uploaded files for this application will be deleted`);
72
+ out("");
73
+ const { prompt } = await import("../prompt");
74
+ const confirm = await prompt(` Type the application name "${db.name}" to confirm: `);
75
+ if (confirm !== db.name) {
76
+ cliError("Confirmation failed. Application was not deleted.");
77
+ return;
78
+ }
79
+ manager.deleteDatabase(db.name);
80
+ success(`Application "${db.name}" has been permanently deleted.`);
81
+ return;
82
+ }
83
+ const databases = manager.listDatabases();
84
+ if (databases.length === 0) {
85
+ info("No applications found.");
86
+ }
87
+ else {
88
+ out("");
89
+ info(`Applications (${databases.length}):`);
90
+ out("");
91
+ for (const db of databases) {
92
+ out(` Application: ${db.name}`);
93
+ out(` DB ID: ${db.id}`);
94
+ out(` DB Path: ${db.path}`);
95
+ out(` Files Dir: ${db.path.replace("/db/", "/files/").replace(/\/[^/]+\.db$/, "")}`);
96
+ out(` Created: ${db.createdAt}`);
97
+ out("");
98
+ }
99
+ }
100
+ }
101
+ finally {
102
+ manager.close();
103
+ }
104
+ }
105
+ //# sourceMappingURL=applications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applications.js","sourceRoot":"","sources":["../../src/cli/applications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function backupCommand(args: string[]): Promise<void>;
2
+ export declare function restoreCommand(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/cli/backup.ts"],"names":[],"mappings":"AAKA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBjE;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BlE"}
@@ -0,0 +1,49 @@
1
+ import { DatabaseManager } from "../db/manager";
2
+ import { loadConfig } from "../config";
3
+ import { createBackup, restoreFromFile } from "../admin/backup";
4
+ import { success, error as cliError, out } from "../cli-style";
5
+ export async function backupCommand(args) {
6
+ const config = await loadConfig();
7
+ const dbName = args.includes("--db") ? args[args.indexOf("--db") + 1] : "default";
8
+ const label = args.includes("--label") ? args[args.indexOf("--label") + 1] : undefined;
9
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
10
+ try {
11
+ if (!manager.exists(dbName)) {
12
+ cliError(`Database "${dbName}" not found.`);
13
+ return;
14
+ }
15
+ const pool = manager.get(dbName);
16
+ const result = createBackup(pool, dbName, manager.getDataDir(), { label });
17
+ success(`Backup created: ${result.id}`);
18
+ out(` Path: ${result.path}`);
19
+ out(` Size: ${result.sizeBytes} bytes`);
20
+ if (result.label)
21
+ out(` Label: ${result.label}`);
22
+ }
23
+ finally {
24
+ manager.close();
25
+ }
26
+ }
27
+ export async function restoreCommand(args) {
28
+ const filePath = args[1];
29
+ if (!filePath) {
30
+ cliError("Usage: boltstore db:restore <file> [--db <path>]");
31
+ return;
32
+ }
33
+ const config = await loadConfig();
34
+ const dbName = args.includes("--db") ? args[args.indexOf("--db") + 1] : "default";
35
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
36
+ try {
37
+ if (!manager.exists(dbName)) {
38
+ cliError(`Database "${dbName}" not found.`);
39
+ return;
40
+ }
41
+ const result = restoreFromFile(manager, dbName, filePath);
42
+ success(`Restored database "${result.database}" from ${result.backupPath}`);
43
+ out(` Restored at: ${result.restoredAt}`);
44
+ }
45
+ finally {
46
+ manager.close();
47
+ }
48
+ }
49
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/cli/backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const HELP = "\n \u26A1 boltstore \u2014 Lightweight backend-as-a-service\n\n Usage: boltstore <command> [options]\n\n Commands:\n serve Start the HTTP server\n init [--json] Generate a config file (boltstore.yaml by default)\n admin Create an admin account interactively\n applications List applications with their databases and file paths\n applications --create <name> Create a new application with database\n applications --rename <app> <new-name> Rename an application\n applications --delete <app> Delete an application (irreversible!)\n migrate Run pending migrations\n migrate:rollback Rollback last migration\n migrate:list List migration status\n db:import <col> <file> Import data into a collection\n db:export <col> Export data from a collection (stdout)\n db:backup Create a backup snapshot\n db:restore <file> Restore from a backup file\n status Display server health and stats\n\n Options:\n --port <number> HTTP server port (default: 8080)\n --db <path> Database path or data directory\n --config <path> Path to config file\n --log-level <level> Log level: debug, info, warn, error\n --timezone <tz> Server timezone\n --format <fmt> Format for import/export: csv or json\n --help Show this help\n";
2
+ export declare function deprecateCommand(oldCmd: string, newCmd: string): void;
3
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,o7CA8BhB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAErE"}
@@ -0,0 +1,36 @@
1
+ import { warn } from "../cli-style";
2
+ export const HELP = `
3
+ ⚡ boltstore — Lightweight backend-as-a-service
4
+
5
+ Usage: boltstore <command> [options]
6
+
7
+ Commands:
8
+ serve Start the HTTP server
9
+ init [--json] Generate a config file (boltstore.yaml by default)
10
+ admin Create an admin account interactively
11
+ applications List applications with their databases and file paths
12
+ applications --create <name> Create a new application with database
13
+ applications --rename <app> <new-name> Rename an application
14
+ applications --delete <app> Delete an application (irreversible!)
15
+ migrate Run pending migrations
16
+ migrate:rollback Rollback last migration
17
+ migrate:list List migration status
18
+ db:import <col> <file> Import data into a collection
19
+ db:export <col> Export data from a collection (stdout)
20
+ db:backup Create a backup snapshot
21
+ db:restore <file> Restore from a backup file
22
+ status Display server health and stats
23
+
24
+ Options:
25
+ --port <number> HTTP server port (default: 8080)
26
+ --db <path> Database path or data directory
27
+ --config <path> Path to config file
28
+ --log-level <level> Log level: debug, info, warn, error
29
+ --timezone <tz> Server timezone
30
+ --format <fmt> Format for import/export: csv or json
31
+ --help Show this help
32
+ `;
33
+ export function deprecateCommand(oldCmd, newCmd) {
34
+ warn(`"${oldCmd}" is deprecated and will be removed in the next release. Use "${newCmd}" instead.`);
35
+ }
36
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BnB,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAc;IAC7D,IAAI,CAAC,IAAI,MAAM,iEAAiE,MAAM,YAAY,CAAC,CAAC;AACtG,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function importCommand(args: string[]): Promise<void>;
2
+ export declare function exportCommand(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=import-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-export.d.ts","sourceRoot":"","sources":["../../src/cli/import-export.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CjE;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjE"}
@@ -0,0 +1,80 @@
1
+ import { DatabaseManager } from "../db/manager";
2
+ import { loadConfig } from "../config";
3
+ import { importData, exportData } from "../admin/import-export";
4
+ import { info, success, warn, error as cliError, out } from "../cli-style";
5
+ export async function importCommand(args) {
6
+ const collection = args[1];
7
+ const filePath = args[2];
8
+ if (!collection || !filePath) {
9
+ cliError("Usage: boltstore db:import <collection> <file> [--db <path>] [--format csv|json]");
10
+ return;
11
+ }
12
+ const config = await loadConfig();
13
+ const dbName = args.includes("--db") ? args[args.indexOf("--db") + 1] : "default";
14
+ const formatArg = args.includes("--format") ? args[args.indexOf("--format") + 1] : undefined;
15
+ let format;
16
+ if (formatArg === "csv")
17
+ format = "csv";
18
+ else if (formatArg === "json")
19
+ format = "json";
20
+ else {
21
+ if (filePath.endsWith(".csv"))
22
+ format = "csv";
23
+ else
24
+ format = "json";
25
+ }
26
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
27
+ try {
28
+ if (!manager.exists(dbName)) {
29
+ manager.createDatabase(dbName);
30
+ }
31
+ const input = await Bun.file(filePath).text();
32
+ const pool = manager.get(dbName);
33
+ const result = importData(pool, collection, input, { format, autoCreate: true });
34
+ if (result.collection) {
35
+ info(`Created collection "${collection}" with auto-detected schema.`);
36
+ }
37
+ success(`Imported ${result.imported} record(s).`);
38
+ if (result.failed > 0) {
39
+ warn(`${result.failed} row(s) failed validation.`);
40
+ if (result.errors) {
41
+ for (const err of result.errors) {
42
+ cliError(`Row ${err.row + 1}: ${err.message}`);
43
+ }
44
+ }
45
+ }
46
+ }
47
+ finally {
48
+ manager.close();
49
+ }
50
+ }
51
+ export async function exportCommand(args) {
52
+ const collection = args[1];
53
+ if (!collection) {
54
+ cliError("Usage: boltstore db:export <collection> [--db <path>] [--format csv|json]");
55
+ return;
56
+ }
57
+ const config = await loadConfig();
58
+ const dbName = args.includes("--db") ? args[args.indexOf("--db") + 1] : "default";
59
+ const formatArg = args.includes("--format") ? args[args.indexOf("--format") + 1] : "json";
60
+ const format = (formatArg === "csv" ? "csv" : "json");
61
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
62
+ try {
63
+ if (!manager.exists(dbName)) {
64
+ cliError(`Database "${dbName}" not found.`);
65
+ return;
66
+ }
67
+ const pool = manager.get(dbName);
68
+ const result = exportData(pool, collection, { format });
69
+ if (format === "csv") {
70
+ process.stdout.write(result.data);
71
+ }
72
+ else {
73
+ out(result.data);
74
+ }
75
+ }
76
+ finally {
77
+ manager.close();
78
+ }
79
+ }
80
+ //# sourceMappingURL=import-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/cli/import-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { loadConfig } from "../config";
2
+ export declare function autoInitConfig(): Promise<ReturnType<typeof loadConfig>>;
3
+ export declare function initCommand(args: string[]): Promise<void>;
4
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvC,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAsC7E;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2D/D"}