boltstore 0.6.0 → 0.6.2

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 (60) hide show
  1. package/README.md +132 -16
  2. package/dist/admin/oauth/user.d.ts.map +1 -1
  3. package/dist/admin/oauth/user.js +12 -3
  4. package/dist/admin/oauth/user.js.map +1 -1
  5. package/dist/auth/tables.d.ts.map +1 -1
  6. package/dist/auth/tables.js +10 -1
  7. package/dist/auth/tables.js.map +1 -1
  8. package/dist/auth/tokens.d.ts +0 -2
  9. package/dist/auth/tokens.d.ts.map +1 -1
  10. package/dist/auth/tokens.js +3 -6
  11. package/dist/auth/tokens.js.map +1 -1
  12. package/dist/auth/types.d.ts +3 -3
  13. package/dist/auth/types.d.ts.map +1 -1
  14. package/dist/auth/users.d.ts +5 -0
  15. package/dist/auth/users.d.ts.map +1 -1
  16. package/dist/auth/users.js +28 -6
  17. package/dist/auth/users.js.map +1 -1
  18. package/dist/bin.d.ts +16 -0
  19. package/dist/bin.d.ts.map +1 -0
  20. package/dist/bin.js +73 -0
  21. package/dist/bin.js.map +1 -0
  22. package/dist/cli-style.d.ts +17 -0
  23. package/dist/cli-style.d.ts.map +1 -0
  24. package/dist/cli-style.js +38 -0
  25. package/dist/cli-style.js.map +1 -0
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +153 -61
  28. package/dist/cli.js.map +1 -1
  29. package/dist/config.d.ts +1 -1
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +65 -43
  32. package/dist/config.js.map +1 -1
  33. package/dist/db/manager.d.ts.map +1 -1
  34. package/dist/db/manager.js +7 -0
  35. package/dist/db/manager.js.map +1 -1
  36. package/dist/entry.js +68 -66
  37. package/dist/entry.js.map +1 -1
  38. package/dist/index.d.ts +2 -2
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +58 -36
  41. package/dist/index.js.map +1 -1
  42. package/dist/logger.d.ts.map +1 -1
  43. package/dist/logger.js +15 -1
  44. package/dist/logger.js.map +1 -1
  45. package/dist/middleware/auth.d.ts +1 -29
  46. package/dist/middleware/auth.d.ts.map +1 -1
  47. package/dist/middleware/auth.js +22 -28
  48. package/dist/middleware/auth.js.map +1 -1
  49. package/dist/prompt.d.ts +17 -0
  50. package/dist/prompt.d.ts.map +1 -0
  51. package/dist/prompt.js +95 -0
  52. package/dist/prompt.js.map +1 -0
  53. package/dist/routes/auth.d.ts.map +1 -1
  54. package/dist/routes/auth.js +5 -0
  55. package/dist/routes/auth.js.map +1 -1
  56. package/dist/yaml.d.ts +14 -0
  57. package/dist/yaml.d.ts.map +1 -0
  58. package/dist/yaml.js +91 -0
  59. package/dist/yaml.js.map +1 -0
  60. package/package.json +4 -2
@@ -0,0 +1,38 @@
1
+ /**
2
+ * CLI output styling with a color-coded [⚡ boltstore] prefix.
3
+ * The prefix color indicates the message type; the message text is always plain.
4
+ *
5
+ * @module boltstore/cli-style
6
+ */
7
+ /** ANSI escape codes for terminal colors. */
8
+ const COLORS = {
9
+ reset: "\x1b[0m",
10
+ red: "\x1b[31m",
11
+ green: "\x1b[32m",
12
+ yellow: "\x1b[33m",
13
+ bold: "\x1b[1m",
14
+ };
15
+ function prefix(color) {
16
+ return `${color}[${COLORS.bold}⚡${COLORS.reset}${color} boltstore]${COLORS.reset}`;
17
+ }
18
+ /** Informational message (bold ⚡, default color). */
19
+ export function info(msg) {
20
+ console.log(`${prefix(COLORS.reset)} ${msg}`);
21
+ }
22
+ /** Success message (green prefix). */
23
+ export function success(msg) {
24
+ console.log(`${prefix(COLORS.green)} ${msg}`);
25
+ }
26
+ /** Warning message (yellow prefix). */
27
+ export function warn(msg) {
28
+ console.warn(`${prefix(COLORS.yellow)} ${msg}`);
29
+ }
30
+ /** Error message (red prefix, to stderr). */
31
+ export function error(msg) {
32
+ console.error(`${prefix(COLORS.red)} ${msg}`);
33
+ }
34
+ /** Plain output without the prefix (data, JSON, etc.). */
35
+ export function out(msg) {
36
+ console.log(msg);
37
+ }
38
+ //# sourceMappingURL=cli-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-style.js","sourceRoot":"","sources":["../src/cli-style.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,KAAK,cAAc,MAAM,CAAC,KAAK,EAAE,CAAC;AACrF,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC"}
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoCH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwT1D"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAuCH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuZ1D"}
package/dist/cli.js CHANGED
@@ -14,34 +14,57 @@ import { loadConfig } from "./config";
14
14
  import { listMigrations, applyMigrations, rollbackLastMigration } from "./migrations";
15
15
  import { importData, exportData } from "./admin/import-export";
16
16
  import { createBackup, restoreFromFile } from "./admin/backup";
17
+ import { createAdminUser } from "./auth/users";
18
+ import { info, success, warn, error as cliError, out } from "./cli-style";
17
19
  const HELP = `
18
- Boltstore — Lightweight backend-as-a-service
20
+ ⚡ boltstore — Lightweight backend-as-a-service
19
21
 
20
- Usage: boltstore <command> [options]
22
+ Usage: boltstore <command> [options]
21
23
 
22
- Commands:
23
- serve Start the HTTP server
24
- init Generate a config file (boltstore.json)
25
- migrate [--db <path>] [--dir <path>] Run pending migrations
26
- migrate:rollback [--db <path>] Rollback last migration
27
- migrations [--db <path>] List migration status
28
- import <collection> <file> [--db <path>] [--format csv|json] Import data
29
- export <collection> [--db <path>] [--format csv|json] Export data (stdout)
30
- backup [--db <path>] [--label <text>] Create a backup snapshot
31
- restore <file> [--db <path>] Restore from a backup file
32
- status Display server health and stats
24
+ Commands:
25
+ serve Start the HTTP server
26
+ init [--json] Generate a config file (boltstore.yaml by default)
27
+ admin init Create an admin account interactively
28
+ migrate [--db <path>] [--dir <path>] Run pending migrations
29
+ migrate:rollback [--db <path>] Rollback last migration
30
+ migrations [--db <path>] List migration status
31
+ import <collection> <file> [--db <path>] [--format csv|json] Import data
32
+ export <collection> [--db <path>] [--format csv|json] Export data (stdout)
33
+ backup [--db <path>] [--label <text>] Create a backup snapshot
34
+ restore <file> [--db <path>] Restore from a backup file
35
+ status Display server health and stats
33
36
 
34
- Options:
35
- --port <number> HTTP server port (default: 8080)
36
- --db <path> Database path or data directory
37
- --config <path> Path to config file
38
- --log-level <level> Log level: debug, info, warn, error
39
- --timezone <tz> Server timezone
40
- --format <fmt> Format for import/export: csv or json
41
- --help Show this help
37
+ Options:
38
+ --port <number> HTTP server port (default: 8080)
39
+ --db <path> Database path or data directory
40
+ --config <path> Path to config file
41
+ --log-level <level> Log level: debug, info, warn, error
42
+ --timezone <tz> Server timezone
43
+ --format <fmt> Format for import/export: csv or json
44
+ --help Show this help
42
45
  `;
43
46
  export async function runCli(args) {
44
47
  const command = args[0];
48
+ // Commands that don't require a config file
49
+ const NO_CONFIG_COMMANDS = new Set(["init", "help", "--help", "-h"]);
50
+ if (!NO_CONFIG_COMMANDS.has(command)) {
51
+ let configExists = false;
52
+ for (const candidate of ["boltstore.yaml", "boltstore.yml", "boltstore.json"]) {
53
+ try {
54
+ if (await Bun.file(candidate).exists()) {
55
+ configExists = true;
56
+ break;
57
+ }
58
+ }
59
+ catch {
60
+ // Skip
61
+ }
62
+ }
63
+ if (!configExists) {
64
+ cliError("No config file found. Run boltstore init first to create one.");
65
+ process.exit(1);
66
+ }
67
+ }
45
68
  switch (command) {
46
69
  case "serve": {
47
70
  const config = await loadConfig();
@@ -66,13 +89,14 @@ export async function runCli(args) {
66
89
  maxBatchSize: config.maxBatchSize,
67
90
  trustedProxies: config.trustedProxies,
68
91
  });
69
- console.log(`[boltstore] Server running on http://localhost:${config.port}`);
70
- console.log(`[boltstore] Data directory: ${config.databasePath}`);
71
- process.on("SIGINT", () => { console.log("\n[boltstore] Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
72
- process.on("SIGTERM", () => { console.log("[boltstore] Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
92
+ info(`Server running on http://localhost:${config.port}`);
93
+ info(`Data directory: ${config.databasePath}`);
94
+ process.on("SIGINT", () => { info("Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
95
+ process.on("SIGTERM", () => { info("Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
73
96
  break;
74
97
  }
75
98
  case "init": {
99
+ const asJson = args.includes("--json");
76
100
  const jwtSecret = crypto.randomUUID().replace(/-/g, "") + crypto.randomUUID().replace(/-/g, "");
77
101
  const config = {
78
102
  port: 8080,
@@ -87,15 +111,85 @@ export async function runCli(args) {
87
111
  corsMethods: ["GET", "POST", "PATCH", "DELETE", "OPTIONS"],
88
112
  corsHeaders: ["Content-Type", "Authorization"],
89
113
  logLevel: "info",
90
- maxBodySize: 1024 * 1024,
114
+ maxBodySize: 1048576,
91
115
  requestTimeoutMs: 30000,
92
116
  maxBatchSize: 1000,
93
117
  queryTimeoutMs: 0,
94
118
  trustedProxies: [],
95
119
  };
96
- await Bun.write("boltstore.json", JSON.stringify(config, null, 2));
97
- console.log("[boltstore] Created boltstore.json");
98
- console.warn("[boltstore] A random JWT secret was generated. In production, set a strong JWT_SECRET and keep it secret.");
120
+ if (asJson) {
121
+ await Bun.write("boltstore.json", JSON.stringify(config, null, 2));
122
+ success("Created boltstore.json");
123
+ }
124
+ else {
125
+ const yaml = `# Boltstore configuration
126
+ port: ${config.port}
127
+ databasePath: ${config.databasePath}
128
+ jwtSecret: "${config.jwtSecret}"
129
+ rateLimitPublic: ${config.rateLimitPublic}
130
+ rateLimitAuth: ${config.rateLimitAuth}
131
+ rateLimitAdmin: ${config.rateLimitAdmin}
132
+ rateLimitWindowSeconds: ${config.rateLimitWindowSeconds}
133
+ serverTimezone: ${config.serverTimezone}
134
+ corsOrigins:
135
+ corsMethods:
136
+ - GET
137
+ - POST
138
+ - PATCH
139
+ - DELETE
140
+ - OPTIONS
141
+ corsHeaders:
142
+ - Content-Type
143
+ - Authorization
144
+ logLevel: ${config.logLevel}
145
+ maxBodySize: ${config.maxBodySize}
146
+ requestTimeoutMs: ${config.requestTimeoutMs}
147
+ maxBatchSize: ${config.maxBatchSize}
148
+ queryTimeoutMs: ${config.queryTimeoutMs}
149
+ trustedProxies:
150
+ `;
151
+ await Bun.write("boltstore.yaml", yaml);
152
+ success("Created boltstore.yaml");
153
+ }
154
+ warn("A random JWT secret was generated. In production, set a strong JWT_SECRET and keep it secret.");
155
+ break;
156
+ }
157
+ case "admin": {
158
+ const subcommand = args[1];
159
+ if (subcommand === "init") {
160
+ const { prompt, promptPassword } = await import("./prompt");
161
+ out("");
162
+ info("Create an admin account for the Boltstore server.");
163
+ const name = (await prompt(" Name (optional): ")) || undefined;
164
+ const email = await prompt(" Email: ");
165
+ const password = await promptPassword(" Password (min 8 chars): ");
166
+ if (!email || !password) {
167
+ cliError("Email and password are required.");
168
+ break;
169
+ }
170
+ const config = await loadConfig();
171
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
172
+ try {
173
+ const metaPool = manager.getMetaPool();
174
+ const user = await createAdminUser(metaPool, email.trim(), password, name?.trim() || undefined);
175
+ out("");
176
+ success(`Admin account created (source: ${user.source}).`);
177
+ out(` ID: ${user.id}`);
178
+ out(` Email: ${user.email}`);
179
+ if (user.name)
180
+ out(` Name: ${user.name}`);
181
+ out("");
182
+ info("You can now log in at POST /api/_system/auth/login");
183
+ out(` { "email": "${user.email}", "password": "..." }`);
184
+ out("");
185
+ }
186
+ finally {
187
+ manager.close();
188
+ }
189
+ }
190
+ else {
191
+ cliError("Usage: boltstore admin init");
192
+ }
99
193
  break;
100
194
  }
101
195
  case "migrate": {
@@ -104,19 +198,18 @@ export async function runCli(args) {
104
198
  const migrationDir = args.includes("--dir") ? args[args.indexOf("--dir") + 1] : "./migrations";
105
199
  const manager = new DatabaseManager({ dataDir: config.databasePath });
106
200
  try {
107
- // Create the database if it doesn't exist
108
201
  if (!manager.exists(dbName)) {
109
202
  manager.createDatabase(dbName);
110
203
  }
111
204
  const pool = manager.get(dbName);
112
205
  const result = await applyMigrations(pool, migrationDir);
113
206
  if (result.applied.length === 0) {
114
- console.log("[boltstore] No pending migrations.");
207
+ info("No pending migrations.");
115
208
  }
116
209
  else {
117
- console.log(`[boltstore] Applied ${result.applied.length} migration(s):`);
210
+ success(`Applied ${result.applied.length} migration(s):`);
118
211
  for (const name of result.applied) {
119
- console.log(` ✓ ${name}`);
212
+ out(` ✓ ${name}`);
120
213
  }
121
214
  }
122
215
  }
@@ -131,16 +224,16 @@ export async function runCli(args) {
131
224
  const manager = new DatabaseManager({ dataDir: config.databasePath });
132
225
  try {
133
226
  if (!manager.exists(dbName)) {
134
- console.log(`[boltstore] Database "${dbName}" not found.`);
227
+ cliError(`Database "${dbName}" not found.`);
135
228
  break;
136
229
  }
137
230
  const pool = manager.get(dbName);
138
231
  const result = rollbackLastMigration(pool);
139
232
  if (result.rolledBack) {
140
- console.log(`[boltstore] Rolled back: ${result.rolledBack}`);
233
+ success(`Rolled back: ${result.rolledBack}`);
141
234
  }
142
235
  else {
143
- console.log("[boltstore] No migrations to roll back.");
236
+ info("No migrations to roll back.");
144
237
  }
145
238
  }
146
239
  finally {
@@ -154,18 +247,18 @@ export async function runCli(args) {
154
247
  const manager = new DatabaseManager({ dataDir: config.databasePath });
155
248
  try {
156
249
  if (!manager.exists(dbName)) {
157
- console.log(`[boltstore] Database "${dbName}" not found.`);
250
+ cliError(`Database "${dbName}" not found.`);
158
251
  break;
159
252
  }
160
253
  const pool = manager.get(dbName);
161
254
  const migrations = listMigrations(pool);
162
255
  if (migrations.length === 0) {
163
- console.log("[boltstore] No migrations applied.");
256
+ info("No migrations applied.");
164
257
  }
165
258
  else {
166
- console.log(`[boltstore] Applied migrations (${migrations.length}):`);
259
+ out(`Applied migrations (${migrations.length}):`);
167
260
  for (const m of migrations) {
168
- console.log(` ${m.name} — ${m.appliedAt}`);
261
+ out(` ${m.name} — ${m.appliedAt}`);
169
262
  }
170
263
  }
171
264
  }
@@ -178,7 +271,7 @@ export async function runCli(args) {
178
271
  const collection = args[1];
179
272
  const filePath = args[2];
180
273
  if (!collection || !filePath) {
181
- console.log("Usage: boltstore import <collection> <file> [--db <path>] [--format csv|json]");
274
+ cliError("Usage: boltstore import <collection> <file> [--db <path>] [--format csv|json]");
182
275
  break;
183
276
  }
184
277
  const config = await loadConfig();
@@ -190,7 +283,6 @@ export async function runCli(args) {
190
283
  else if (formatArg === "json")
191
284
  format = "json";
192
285
  else {
193
- // Auto-detect from file extension
194
286
  if (filePath.endsWith(".csv"))
195
287
  format = "csv";
196
288
  else
@@ -205,14 +297,14 @@ export async function runCli(args) {
205
297
  const pool = manager.get(dbName);
206
298
  const result = importData(pool, collection, input, { format, autoCreate: true });
207
299
  if (result.collection) {
208
- console.log(`[boltstore] Created collection "${collection}" with auto-detected schema.`);
300
+ info(`Created collection "${collection}" with auto-detected schema.`);
209
301
  }
210
- console.log(`[boltstore] Imported ${result.imported} record(s).`);
302
+ success(`Imported ${result.imported} record(s).`);
211
303
  if (result.failed > 0) {
212
- console.log(`[boltstore] ${result.failed} row(s) failed validation.`);
304
+ warn(`${result.failed} row(s) failed validation.`);
213
305
  if (result.errors) {
214
306
  for (const err of result.errors) {
215
- console.log(` Row ${err.row + 1}: ${err.message}`);
307
+ cliError(`Row ${err.row + 1}: ${err.message}`);
216
308
  }
217
309
  }
218
310
  }
@@ -225,7 +317,7 @@ export async function runCli(args) {
225
317
  case "export": {
226
318
  const collection = args[1];
227
319
  if (!collection) {
228
- console.log("Usage: boltstore export <collection> [--db <path>] [--format csv|json]");
320
+ cliError("Usage: boltstore export <collection> [--db <path>] [--format csv|json]");
229
321
  break;
230
322
  }
231
323
  const config = await loadConfig();
@@ -235,7 +327,7 @@ export async function runCli(args) {
235
327
  const manager = new DatabaseManager({ dataDir: config.databasePath });
236
328
  try {
237
329
  if (!manager.exists(dbName)) {
238
- console.log(`[boltstore] Database "${dbName}" not found.`);
330
+ cliError(`Database "${dbName}" not found.`);
239
331
  break;
240
332
  }
241
333
  const pool = manager.get(dbName);
@@ -244,7 +336,7 @@ export async function runCli(args) {
244
336
  process.stdout.write(result.data);
245
337
  }
246
338
  else {
247
- console.log(result.data);
339
+ out(result.data);
248
340
  }
249
341
  }
250
342
  finally {
@@ -259,16 +351,16 @@ export async function runCli(args) {
259
351
  const manager = new DatabaseManager({ dataDir: config.databasePath });
260
352
  try {
261
353
  if (!manager.exists(dbName)) {
262
- console.log(`[boltstore] Database "${dbName}" not found.`);
354
+ cliError(`Database "${dbName}" not found.`);
263
355
  break;
264
356
  }
265
357
  const pool = manager.get(dbName);
266
358
  const result = createBackup(pool, dbName, manager.getDataDir(), { label });
267
- console.log(`[boltstore] Backup created: ${result.id}`);
268
- console.log(` Path: ${result.path}`);
269
- console.log(` Size: ${result.sizeBytes} bytes`);
359
+ success(`Backup created: ${result.id}`);
360
+ out(` Path: ${result.path}`);
361
+ out(` Size: ${result.sizeBytes} bytes`);
270
362
  if (result.label)
271
- console.log(` Label: ${result.label}`);
363
+ out(` Label: ${result.label}`);
272
364
  }
273
365
  finally {
274
366
  manager.close();
@@ -278,7 +370,7 @@ export async function runCli(args) {
278
370
  case "restore": {
279
371
  const filePath = args[1];
280
372
  if (!filePath) {
281
- console.log("Usage: boltstore restore <file> [--db <path>]");
373
+ cliError("Usage: boltstore restore <file> [--db <path>]");
282
374
  break;
283
375
  }
284
376
  const config = await loadConfig();
@@ -286,12 +378,12 @@ export async function runCli(args) {
286
378
  const manager = new DatabaseManager({ dataDir: config.databasePath });
287
379
  try {
288
380
  if (!manager.exists(dbName)) {
289
- console.log(`[boltstore] Database "${dbName}" not found.`);
381
+ cliError(`Database "${dbName}" not found.`);
290
382
  break;
291
383
  }
292
384
  const result = restoreFromFile(manager, dbName, filePath);
293
- console.log(`[boltstore] Restored database "${result.database}" from ${result.backupPath}`);
294
- console.log(` Restored at: ${result.restoredAt}`);
385
+ success(`Restored database "${result.database}" from ${result.backupPath}`);
386
+ out(` Restored at: ${result.restoredAt}`);
295
387
  }
296
388
  finally {
297
389
  manager.close();
@@ -304,10 +396,10 @@ export async function runCli(args) {
304
396
  try {
305
397
  const response = await fetch(healthUrl);
306
398
  const body = await response.json();
307
- console.log(JSON.stringify(body.data, null, 2));
399
+ out(JSON.stringify(body.data, null, 2));
308
400
  }
309
401
  catch {
310
- console.log('[boltstore] Server is not running.');
402
+ cliError("Server is not running.");
311
403
  }
312
404
  break;
313
405
  }
@@ -315,7 +407,7 @@ export async function runCli(args) {
315
407
  case "-h":
316
408
  case "help":
317
409
  default:
318
- console.log(HELP);
410
+ out(HELP);
319
411
  break;
320
412
  }
321
413
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * Three sources, merged in priority order:
5
5
  * 1. CLI flags (highest priority)
6
6
  * 2. Environment variables
7
- * 3. Config file (JSON)
7
+ * 3. Config file (YAML or JSON)
8
8
  *
9
9
  * @module boltstore/config
10
10
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;CACvB;AA2JD;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAwC3D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,eAAe,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IACzB,iFAAiF;IACjF,YAAY,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,+EAA+E;IAC/E,aAAa,EAAE,MAAM,CAAC;CACvB;AAqKD;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAsD3D"}
package/dist/config.js CHANGED
@@ -4,10 +4,11 @@
4
4
  * Three sources, merged in priority order:
5
5
  * 1. CLI flags (highest priority)
6
6
  * 2. Environment variables
7
- * 3. Config file (JSON)
7
+ * 3. Config file (YAML or JSON)
8
8
  *
9
9
  * @module boltstore/config
10
10
  */
11
+ import { parseYaml } from "./yaml";
11
12
  const DEFAULT_CONFIG = {
12
13
  port: 8080,
13
14
  databasePath: "./data",
@@ -181,7 +182,8 @@ function parseEnvVars() {
181
182
  return config;
182
183
  }
183
184
  /**
184
- * Parse a JSON config file.
185
+ * Parse a config file (JSON or YAML) into a typed partial config.
186
+ * Format is detected by file extension.
185
187
  */
186
188
  async function parseConfigFile(filePath) {
187
189
  try {
@@ -190,62 +192,82 @@ async function parseConfigFile(filePath) {
190
192
  if (!exists)
191
193
  return {};
192
194
  const content = await file.text();
193
- const parsed = JSON.parse(content);
194
- const config = {};
195
- if (typeof parsed.port === "number")
196
- config.port = parsed.port;
197
- if (typeof parsed.databasePath === "string")
198
- config.databasePath = parsed.databasePath;
199
- if (typeof parsed.jwtSecret === "string")
200
- config.jwtSecret = parsed.jwtSecret;
201
- if (typeof parsed.rateLimitPublic === "number")
202
- config.rateLimitPublic = parsed.rateLimitPublic;
203
- if (typeof parsed.rateLimitAuth === "number")
204
- config.rateLimitAuth = parsed.rateLimitAuth;
205
- if (typeof parsed.rateLimitAdmin === "number")
206
- config.rateLimitAdmin = parsed.rateLimitAdmin;
207
- if (typeof parsed.rateLimitWindowSeconds === "number")
208
- config.rateLimitWindowSeconds = parsed.rateLimitWindowSeconds;
209
- if (typeof parsed.serverTimezone === "string")
210
- config.serverTimezone = parsed.serverTimezone;
211
- if (Array.isArray(parsed.corsOrigins))
212
- config.corsOrigins = parsed.corsOrigins;
213
- if (Array.isArray(parsed.corsMethods))
214
- config.corsMethods = parsed.corsMethods;
215
- if (Array.isArray(parsed.corsHeaders))
216
- config.corsHeaders = parsed.corsHeaders;
217
- if (typeof parsed.logLevel === "string")
218
- config.logLevel = parsed.logLevel;
219
- if (typeof parsed.maxBodySize === "number")
220
- config.maxBodySize = parsed.maxBodySize;
221
- if (typeof parsed.requestTimeoutMs === "number")
222
- config.requestTimeoutMs = parsed.requestTimeoutMs;
223
- if (typeof parsed.maxBatchSize === "number")
224
- config.maxBatchSize = parsed.maxBatchSize;
225
- if (typeof parsed.queryTimeoutMs === "number")
226
- config.queryTimeoutMs = parsed.queryTimeoutMs;
227
- if (Array.isArray(parsed.trustedProxies))
228
- config.trustedProxies = parsed.trustedProxies;
229
- if (typeof parsed.maxImportRows === "number")
230
- config.maxImportRows = parsed.maxImportRows;
231
- return config;
195
+ // Detect format from extension
196
+ const isYaml = filePath.endsWith(".yaml") || filePath.endsWith(".yml");
197
+ const parsed = isYaml ? parseYaml(content) : JSON.parse(content);
198
+ return mapToConfig(parsed);
232
199
  }
233
200
  catch {
234
201
  return {};
235
202
  }
236
203
  }
204
+ /** Map a parsed object to typed BoltstoreConfig fields. */
205
+ function mapToConfig(parsed) {
206
+ const config = {};
207
+ if (typeof parsed.port === "number")
208
+ config.port = parsed.port;
209
+ if (typeof parsed.databasePath === "string")
210
+ config.databasePath = parsed.databasePath;
211
+ if (typeof parsed.jwtSecret === "string")
212
+ config.jwtSecret = parsed.jwtSecret;
213
+ if (typeof parsed.rateLimitPublic === "number")
214
+ config.rateLimitPublic = parsed.rateLimitPublic;
215
+ if (typeof parsed.rateLimitAuth === "number")
216
+ config.rateLimitAuth = parsed.rateLimitAuth;
217
+ if (typeof parsed.rateLimitAdmin === "number")
218
+ config.rateLimitAdmin = parsed.rateLimitAdmin;
219
+ if (typeof parsed.rateLimitWindowSeconds === "number")
220
+ config.rateLimitWindowSeconds = parsed.rateLimitWindowSeconds;
221
+ if (typeof parsed.serverTimezone === "string")
222
+ config.serverTimezone = parsed.serverTimezone;
223
+ if (Array.isArray(parsed.corsOrigins))
224
+ config.corsOrigins = parsed.corsOrigins;
225
+ if (Array.isArray(parsed.corsMethods))
226
+ config.corsMethods = parsed.corsMethods;
227
+ if (Array.isArray(parsed.corsHeaders))
228
+ config.corsHeaders = parsed.corsHeaders;
229
+ if (typeof parsed.logLevel === "string")
230
+ config.logLevel = parsed.logLevel;
231
+ if (typeof parsed.maxBodySize === "number")
232
+ config.maxBodySize = parsed.maxBodySize;
233
+ if (typeof parsed.requestTimeoutMs === "number")
234
+ config.requestTimeoutMs = parsed.requestTimeoutMs;
235
+ if (typeof parsed.maxBatchSize === "number")
236
+ config.maxBatchSize = parsed.maxBatchSize;
237
+ if (typeof parsed.queryTimeoutMs === "number")
238
+ config.queryTimeoutMs = parsed.queryTimeoutMs;
239
+ if (Array.isArray(parsed.trustedProxies))
240
+ config.trustedProxies = parsed.trustedProxies;
241
+ if (typeof parsed.maxImportRows === "number")
242
+ config.maxImportRows = parsed.maxImportRows;
243
+ return config;
244
+ }
237
245
  /**
238
246
  * Load configuration from all three sources, merged in priority order.
239
247
  *
240
248
  * Priority: CLI flags > environment variables > config file > defaults
241
249
  */
242
250
  export async function loadConfig() {
243
- // Get config file path from CLI or env
251
+ // Get config file path: CLI flag > env var > auto-detect boltstore.yaml / boltstore.json
244
252
  const cliArgs = process.argv.slice(2);
245
253
  const configFlagIdx = cliArgs.indexOf("--config");
246
- const configPath = configFlagIdx >= 0 && cliArgs[configFlagIdx + 1]
254
+ let configPath = configFlagIdx >= 0 && cliArgs[configFlagIdx + 1]
247
255
  ? cliArgs[configFlagIdx + 1]
248
256
  : Bun.env.BOLTSTORE_CONFIG;
257
+ // Auto-detect boltstore.yaml or boltstore.json if no explicit path given
258
+ if (!configPath) {
259
+ for (const candidate of ["boltstore.yaml", "boltstore.yml", "boltstore.json"]) {
260
+ try {
261
+ if (await Bun.file(candidate).exists()) {
262
+ configPath = candidate;
263
+ break;
264
+ }
265
+ }
266
+ catch {
267
+ // File doesn't exist or can't be read — skip
268
+ }
269
+ }
270
+ }
249
271
  // Load from file
250
272
  const fileConfig = configPath ? await parseConfigFile(configPath) : {};
251
273
  // Load from environment