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
package/README.md CHANGED
@@ -31,20 +31,53 @@ docker run -p 8080:8080 -v ./data:/data boltstore/boltstore
31
31
 
32
32
  ## Configuration
33
33
 
34
- CLI flags override env vars override config file:
34
+ Boltstore merges settings from four sources. Each source overrides the one below it:
35
+
36
+ ```
37
+ CLI flags (highest priority)
38
+
39
+ Environment variables
40
+
41
+ Config file (boltstore.yaml or boltstore.json, auto-detected)
42
+
43
+ Defaults (lowest priority)
44
+ ```
45
+
46
+ If both `boltstore.yaml` and `boltstore.json` exist, YAML is used first.
35
47
 
36
48
  ```bash
37
- boltstore serve --port 8080 --db ./data --config boltstore.yaml
49
+ # Generate a config file (YAML by default)
50
+ boltstore init
51
+
52
+ # Or generate JSON instead
53
+ boltstore init --json
54
+
55
+ # boltstore.yaml / boltstore.json is auto-detected — no --config needed
56
+ boltstore serve
57
+
58
+ # Override any setting via CLI flags or environment variables
59
+ boltstore serve --port 3000 --db ./myapp
60
+ PORT=3000 boltstore serve
38
61
  ```
39
62
 
40
- | Environment variable | Default | Description |
41
- |---|---|---|
42
- | `PORT` | `8080` | HTTP server port |
43
- | `DATABASE_PATH` | `./data` | Directory for SQLite database files |
44
- | `JWT_SECRET` | — | Secret key for JWT tokens |
45
- | `RATE_LIMIT_PUBLIC` | `60/min` | Rate limit for public endpoints |
46
- | `RATE_LIMIT_AUTH` | `600/min` | Rate limit for authenticated endpoints |
47
- | `SERVER_TIMEZONE` | `UTC` | Server timezone |
63
+ | Config key | Env variable | Default | Description |
64
+ |---|---|---|---|
65
+ | `port` | `PORT` | `8080` | HTTP server port |
66
+ | `databasePath` | `DATABASE_PATH` | `./data` | Directory for SQLite databases |
67
+ | `jwtSecret` | `JWT_SECRET` | — | Secret key for JWT tokens |
68
+ | `rateLimitPublic` | `RATE_LIMIT_PUBLIC` | `100` | Rate limit for public endpoints (req/min) |
69
+ | `rateLimitAuth` | `RATE_LIMIT_AUTH` | `1000` | Rate limit for authenticated endpoints (req/min) |
70
+ | `rateLimitAdmin` | `RATE_LIMIT_ADMIN` | `500` | Rate limit for admin endpoints (req/min) |
71
+ | `rateLimitWindowSeconds` | `RATE_LIMIT_WINDOW_SECONDS` | `60` | Rate limit window in seconds |
72
+ | `serverTimezone` | `SERVER_TIMEZONE` | `UTC` | Server timezone |
73
+ | `logLevel` | `LOG_LEVEL` | `info` | Logging: debug, info, warn, error |
74
+ | `maxBodySize` | `MAX_BODY_SIZE` | `1048576` | Max request body in bytes |
75
+ | `requestTimeoutMs` | `REQUEST_TIMEOUT_MS` | `30000` | Request handler timeout in ms |
76
+ | `maxBatchSize` | `MAX_BATCH_SIZE` | `1000` | Max operations per batch/transaction |
77
+ | `corsOrigins` | `CORS_ORIGINS` | `[]` | Allowed CORS origins (comma-separated) |
78
+ | `corsMethods` | `CORS_METHODS` | `GET,POST,PATCH,DELETE,OPTIONS` | Allowed CORS methods |
79
+ | `corsHeaders` | `CORS_HEADERS` | `Content-Type,Authorization` | Allowed CORS headers |
80
+ | `trustedProxies` | `TRUSTED_PROXIES` | `[]` | Trusted proxy IPs/CIDRs |
48
81
 
49
82
  ## API Tiers
50
83
 
@@ -57,17 +90,100 @@ boltstore serve --port 8080 --db ./data --config boltstore.yaml
57
90
 
58
91
  ## Admin Panel
59
92
 
60
- Open `http://localhost:8080/admin` in your browser after starting the server.
61
-
62
- During development, Vite HMR automatically refreshes the admin UI as you edit Vue files.
93
+ > **Note:** The admin panel is not yet available. The `/admin` route currently returns a 404.
63
94
 
64
95
  ## Development
65
96
 
66
97
  ```bash
98
+ git clone https://github.com/boltstore/boltstore.git
99
+ cd boltstore
67
100
  bun install
68
- bun run build # compile TypeScript
69
- bun test # run tests
70
- bun run dev # watch mode
101
+ ```
102
+
103
+ ### Run the server from source
104
+
105
+ ```bash
106
+ JWT_SECRET="dev-secret-thats-at-least-32-bytes!!" bun run boltstore
107
+ ```
108
+
109
+ > **Note:** `bolt` and `boltstore` are aliases — both point to `src/bin.ts`. Use whichever you prefer.
110
+
111
+ Without a command argument, the server starts on port 8080. With a command argument, it dispatches to the corresponding CLI command.
112
+
113
+ ### CLI commands
114
+
115
+ ```bash
116
+ # Start the server
117
+ bun run boltstore serve
118
+ # or: bun run bolt serve
119
+
120
+ # Generate a config file (YAML by default)
121
+ bun run boltstore init
122
+
123
+ # Or generate JSON
124
+ bun run boltstore init --json
125
+
126
+ # Create an admin account (CLI-only, interactive prompt)
127
+ bun run boltstore admin init
128
+
129
+ # Run pending migrations
130
+ bun run boltstore migrate --db myapp --dir ./migrations
131
+
132
+ # Rollback last migration
133
+ bun run boltstore migrate:rollback --db myapp
134
+
135
+ # List migration status
136
+ bun run boltstore migrations --db myapp
137
+
138
+ # Import data
139
+ bun run boltstore import todos mydata.csv --db myapp --format csv
140
+
141
+ # Export data (prints to stdout)
142
+ bun run boltstore export todos --db myapp --format json
143
+
144
+ # Create a backup
145
+ bun run boltstore backup --db myapp --label "pre-deploy"
146
+
147
+ # Restore from a backup file
148
+ bun run boltstore restore ./data/backups/myapp-20260101.db --db myapp
149
+
150
+ # Check server status
151
+ bun run boltstore status
152
+
153
+ # Show help
154
+ bun run boltstore --help
155
+ ```
156
+
157
+ ### Build and run from dist
158
+
159
+ ```bash
160
+ bun run bolt:build
161
+ JWT_SECRET="dev-secret-thats-at-least-32-bytes!!" cd boltstore && bun run start
162
+ ```
163
+
164
+ ### Run tests
165
+
166
+ ```bash
167
+ bun run bolt:test
168
+ ```
169
+
170
+ ### Watch mode
171
+
172
+ ```bash
173
+ cd boltstore && bun run dev
174
+ ```
175
+
176
+ ### Compile a binary
177
+
178
+ ```bash
179
+ # macOS Apple Silicon
180
+ bun run bolt:compile
181
+
182
+ # Linux x64
183
+ cd boltstore && bun run compile
184
+
185
+ # Windows x64
186
+ cd boltstore && bun run compile:windows
71
187
  ```
72
188
 
73
189
  ## Publishing
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/admin/oauth/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAiE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEtG,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CA6B9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGxE"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/admin/oauth/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAiE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEtG,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,IAAI,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAAC,CAsC9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGxE"}
@@ -3,7 +3,7 @@ export async function findOrCreateOAuthUser(pool, profile) {
3
3
  bootstrapAuthTables(pool);
4
4
  const db = pool.read();
5
5
  const existing = db
6
- .query("SELECT id, email, role, oauth_only, password_set, created_at, updated_at FROM _users WHERE email=?")
6
+ .query("SELECT id, email, name, source, oauth_only, password_set, created_at, updated_at FROM _users WHERE email=?")
7
7
  .get(profile.email);
8
8
  if (existing) {
9
9
  const passwordSet = existing.password_set ?? (existing.oauth_only === 1 ? 0 : 1);
@@ -17,8 +17,17 @@ export async function findOrCreateOAuthUser(pool, profile) {
17
17
  const randomPassword = await generateRandomPassword();
18
18
  return pool.writeTransaction(() => {
19
19
  const writeDb = pool.write();
20
- writeDb.run("INSERT INTO _users (id, email, password_hash, role, oauth_only, password_set, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", [id, profile.email, randomPassword, "user", 1, 0, ts, ts]);
21
- return { id, email: profile.email, role: "user", oauth_only: 1, password_set: 0, created_at: ts, updated_at: ts };
20
+ writeDb.run("INSERT INTO _users (id, email, name, password_hash, source, oauth_only, password_set, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)", [id, profile.email, profile.name ?? null, randomPassword, "oauth", 1, 0, ts, ts]);
21
+ return {
22
+ id,
23
+ email: profile.email,
24
+ name: profile.name,
25
+ source: "oauth",
26
+ oauth_only: 1,
27
+ password_set: 0,
28
+ created_at: ts,
29
+ updated_at: ts,
30
+ };
22
31
  });
23
32
  }
24
33
  export function markPasswordSet(pool, userId) {
@@ -1 +1 @@
1
- {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/admin/oauth/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAa,MAAM,YAAY,CAAC;AAEtG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAkB,EAClB,OAAqD;IAErD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAEvB,MAAM,QAAQ,GAAG,EAAE;SAChB,KAAK,CAAC,oGAAoG,CAAC;SAC3G,GAAG,CAAC,OAAO,CAAC,KAAK,CAAmE,CAAC;IAExF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IAC1F,CAAC;IAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAEtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,uIAAuI,EACvI,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAC1D,CAAC;QAEF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,MAAe,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC7H,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,MAAc;IAChE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,2DAA2D,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1F,CAAC"}
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/admin/oauth/user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,sBAAsB,EAAa,MAAM,YAAY,CAAC;AAEtG,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAkB,EAClB,OAAqD;IAErD,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAEvB,MAAM,QAAQ,GAAG,EAAE;SAChB,KAAK,CAAC,4GAA4G,CAAC;SACnH,GAAG,CAAC,OAAO,CAAC,KAAK,CAAmG,CAAC;IAExH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,QAAQ,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,QAAQ,CAAC,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACnD,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IAC1F,CAAC;IAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,MAAM,sBAAsB,EAAE,CAAC;IAEtD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,kJAAkJ,EAClJ,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CACjF,CAAC;QAEF,OAAO;YACL,EAAE;YACF,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,UAAU,EAAE,EAAE;SACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAkB,EAAE,MAAc;IAChE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,2DAA2D,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/auth/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAmC5D;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,SAAgB,GAAG,IAAI,CAWtF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAa1D"}
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/auth/tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAsC5D;AAID,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,SAAgB,GAAG,IAAI,CAWtF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAa1D"}
@@ -5,7 +5,8 @@ export function bootstrapAuthTables(pool) {
5
5
  id TEXT PRIMARY KEY,
6
6
  email TEXT NOT NULL UNIQUE,
7
7
  password_hash TEXT NOT NULL,
8
- role TEXT NOT NULL DEFAULT 'user',
8
+ name TEXT,
9
+ source TEXT NOT NULL DEFAULT 'register',
9
10
  oauth_only INTEGER NOT NULL DEFAULT 0,
10
11
  created_at TEXT NOT NULL,
11
12
  updated_at TEXT NOT NULL
@@ -15,6 +16,14 @@ export function bootstrapAuthTables(pool) {
15
16
  db.run("ALTER TABLE _users ADD COLUMN oauth_only INTEGER NOT NULL DEFAULT 0");
16
17
  }
17
18
  catch { }
19
+ try {
20
+ db.run("ALTER TABLE _users ADD COLUMN name TEXT");
21
+ }
22
+ catch { }
23
+ try {
24
+ db.run("ALTER TABLE _users ADD COLUMN source TEXT NOT NULL DEFAULT 'register'");
25
+ }
26
+ catch { }
18
27
  db.run(`
19
28
  CREATE TABLE IF NOT EXISTS _tokens (
20
29
  jti TEXT PRIMARY KEY,
@@ -1 +1 @@
1
- {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/auth/tables.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAExB,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;GAUN,CAAC,CAAC;IAEH,IAAI,CAAC;QAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAE/F,EAAE,CAAC,GAAG,CAAC;;;;;;;;;GASN,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;AACL,CAAC;AAED,IAAI,qBAAqB,GAAsD,IAAI,GAAG,EAAE,CAAC;AAEzF,MAAM,UAAU,iBAAiB,CAAC,IAAkB,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;IAC9E,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,EAAE,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;IACf,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,QAAQ,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YACtD,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/auth/tables.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,mBAAmB,CAAC,IAAkB;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IAExB,EAAE,CAAC,GAAG,CAAC;;;;;;;;;;;GAWN,CAAC,CAAC;IAEH,IAAI,CAAC;QAAC,EAAE,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAC/F,IAAI,CAAC;QAAC,EAAE,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACnE,IAAI,CAAC;QAAC,EAAE,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEjG,EAAE,CAAC,GAAG,CAAC;;;;;;;;;GASN,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;IAEH,EAAE,CAAC,GAAG,CAAC;;GAEN,CAAC,CAAC;AACL,CAAC;AAED,IAAI,qBAAqB,GAAsD,IAAI,GAAG,EAAE,CAAC;AAEzF,MAAM,UAAU,iBAAiB,CAAC,IAAkB,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;IAC9E,IAAI,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,EAAE,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;QAClF,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;IACf,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,QAAQ,IAAI,qBAAqB,CAAC,MAAM,EAAE,EAAE,CAAC;YACtD,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;QACD,qBAAqB,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -3,7 +3,6 @@ import type { AuthConfig, TokenPair } from "./types";
3
3
  export declare function createTokenPairForUser(pool: DatabasePool, user: {
4
4
  id: string;
5
5
  email: string;
6
- role: string;
7
6
  }, config: AuthConfig): TokenPair;
8
7
  export declare function loginUser(pool: DatabasePool, email: string, password: string, config: AuthConfig): Promise<TokenPair>;
9
8
  export declare function refreshAccessToken(pool: DatabasePool, refreshToken: string, config: AuthConfig): Promise<TokenPair>;
@@ -11,6 +10,5 @@ export declare function logoutUser(pool: DatabasePool, userId: string): void;
11
10
  export declare function verifyAccessToken(pool: DatabasePool, token: string, config: AuthConfig): {
12
11
  userId: string;
13
12
  email: string;
14
- role: "user" | "admin";
15
13
  };
16
14
  //# sourceMappingURL=tokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/auth/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AASvE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACjD,MAAM,EAAE,UAAU,GACjB,SAAS,CAwDX;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,SAAS,CAAC,CAyCpB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,SAAS,CAAC,CA2CpB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CA0C3D"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/auth/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AASvE,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACnC,MAAM,EAAE,UAAU,GACjB,SAAS,CAsDX;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,SAAS,CAAC,CAyCpB;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,YAAY,EAClB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,SAAS,CAAC,CA2CpB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,UAAU,GACjB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAyCnC"}
@@ -16,7 +16,6 @@ export function createTokenPairForUser(pool, user, config) {
16
16
  const accessPayload = {
17
17
  sub: user.id,
18
18
  email: user.email,
19
- role: user.role,
20
19
  type: "access",
21
20
  jti: accessJti,
22
21
  iat: nowSec,
@@ -43,7 +42,6 @@ export function createTokenPairForUser(pool, user, config) {
43
42
  expiresIn: accessExpiry,
44
43
  userId: user.id,
45
44
  email: user.email,
46
- role: user.role,
47
45
  };
48
46
  }
49
47
  export async function loginUser(pool, email, password, config) {
@@ -55,7 +53,7 @@ export async function loginUser(pool, email, password, config) {
55
53
  bootstrapAuthTables(pool);
56
54
  const db = pool.read();
57
55
  const row = db
58
- .query("SELECT id, email, password_hash, role, oauth_only FROM _users WHERE email=?")
56
+ .query("SELECT id, email, password_hash, oauth_only FROM _users WHERE email=?")
59
57
  .get(email.toLowerCase());
60
58
  if (!row) {
61
59
  throw Object.assign(new Error("Invalid email or password."), { status: 401 });
@@ -67,7 +65,7 @@ export async function loginUser(pool, email, password, config) {
67
65
  if (!valid) {
68
66
  throw Object.assign(new Error("Invalid email or password."), { status: 401 });
69
67
  }
70
- return createTokenPairForUser(pool, { id: row.id, email: row.email, role: row.role }, config);
68
+ return createTokenPairForUser(pool, { id: row.id, email: row.email }, config);
71
69
  }
72
70
  export async function refreshAccessToken(pool, refreshToken, config) {
73
71
  if (!config.secret) {
@@ -86,7 +84,7 @@ export async function refreshAccessToken(pool, refreshToken, config) {
86
84
  throw Object.assign(new Error("Token has been revoked or is invalid."), { status: 401 });
87
85
  }
88
86
  const userRow = db
89
- .query("SELECT id, email, role FROM _users WHERE id=?")
87
+ .query("SELECT id, email FROM _users WHERE id=?")
90
88
  .get(payload.sub);
91
89
  if (!userRow) {
92
90
  throw Object.assign(new Error("User no longer exists."), { status: 401 });
@@ -120,7 +118,6 @@ export function verifyAccessToken(pool, token, config) {
120
118
  return {
121
119
  userId: payload.sub,
122
120
  email: payload.email,
123
- role: payload.role,
124
121
  };
125
122
  }
126
123
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/auth/tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/auth/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AAEtC,MAAM,UAAU,sBAAsB,CACpC,IAAkB,EAClB,IAAmC,EACnC,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAC1C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,IAAI,qBAAqB,CAAC;IACvE,MAAM,aAAa,GAAG,MAAM,CAAC,kBAAkB,IAAI,sBAAsB,CAAC;IAC1E,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IAEzB,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;IAChC,MAAM,aAAa,GAA4B;QAC7C,GAAG,EAAE,IAAI,CAAC,EAAE;QACZ,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM,GAAG,YAAY;KAC3B,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC;IAEnG,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC;IACjC,MAAM,cAAc,GAA4B;QAC9C,GAAG,EAAE,IAAI,CAAC,EAAE;QACZ,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,MAAM;QACX,GAAG,EAAE,MAAM,GAAG,aAAa;KAC5B,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC;IAErG,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,yFAAyF,EACzF,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAC9F,CAAC;QACF,OAAO,CAAC,GAAG,CACT,yFAAyF,EACzF,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CACjG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,YAAY;QACZ,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,IAAI,CAAC,EAAE;QACf,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAkB,EAClB,KAAa,EACb,QAAgB,EAChB,MAAkB;IAElB,aAAa,CAAC,KAAK,CAAC,CAAC;IACrB,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE3B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,oEAAoE,CAAC,EAC/E,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE;SACX,KAAK,CAAC,uEAAuE,CAAC;SAC9E,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAoF,CAAC;IAE/G,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,4BAA4B,CAAC,EACvC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,yFAAyF,CAAC,EACpG,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC;IAChE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,4BAA4B,CAAC,EACvC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,OAAO,sBAAsB,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAkB,EAClB,YAAoB,EACpB,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAC1C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+CAA+C,CAAC,EAC1D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,EAAE;SAChB,KAAK,CAAC,yCAAyC,CAAC;SAChD,GAAG,CAAC,OAAO,CAAC,GAAG,CAA+B,CAAC;IAElD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,uCAAuC,CAAC,EAClD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE;SACf,KAAK,CAAC,yCAAyC,CAAC;SAChD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAyC,CAAC;IAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,wBAAwB,CAAC,EACnC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5E,OAAO,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAkB,EAAE,MAAc;IAC3D,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,qCAAqC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,KAAa,EACb,MAAkB;IAElB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,+BAA+B,CAAC,EAC1C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,qBAAqB,CAAC,EAChC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;QAChC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,uBAAuB,CAAC,EAClC,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,EAAE;SAChB,KAAK,CAAC,yCAAyC,CAAC;SAChD,GAAG,CAAC,OAAO,CAAC,GAAG,CAA+B,CAAC;IAElD,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,MAAM,CAAC,MAAM,CACjB,IAAI,KAAK,CAAC,2CAA2C,CAAC,EACtD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG;QACnB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC"}
@@ -6,12 +6,14 @@ export interface AuthConfig {
6
6
  export interface User {
7
7
  id: string;
8
8
  email: string;
9
- role: "user" | "admin";
9
+ name?: string;
10
+ source: string;
10
11
  created_at: string;
11
12
  updated_at: string;
12
13
  }
13
14
  export interface UserRow extends User {
14
15
  oauth_only?: number;
16
+ password_set?: number;
15
17
  password_hash?: string;
16
18
  }
17
19
  export interface TokenPair {
@@ -20,12 +22,10 @@ export interface TokenPair {
20
22
  expiresIn: number;
21
23
  userId?: string;
22
24
  email?: string;
23
- role?: "user" | "admin";
24
25
  }
25
26
  export interface JwtPayload {
26
27
  sub: string;
27
28
  email: string;
28
- role: "user" | "admin";
29
29
  iat: number;
30
30
  exp: number;
31
31
  jti: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAQ,SAAQ,IAAI;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/auth/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,OAAQ,SAAQ,IAAI;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
@@ -1,5 +1,10 @@
1
1
  import { DatabasePool } from "../db/pool";
2
2
  import type { User } from "./types";
3
+ /**
4
+ * Create an admin user in the system database.
5
+ * Only callable from the CLI — creates with source="cli".
6
+ */
7
+ export declare function createAdminUser(pool: DatabasePool, email: string, password: string, name?: string): Promise<User>;
3
8
  export declare function registerUser(pool: DatabasePool, email: string, password: string): Promise<User>;
4
9
  export declare function getUserById(pool: DatabasePool, userId: string): User;
5
10
  export declare function updateProfile(pool: DatabasePool, userId: string, data: {
@@ -1 +1 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/auth/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAYpC,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CAgBN;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CA8Df"}
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../src/auth/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAQpC;;;GAGG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAMD,wBAAsB,YAAY,CAChC,IAAI,EAAE,YAAY,EAClB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAgB,WAAW,CACzB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CAgBN;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CA8Df"}
@@ -4,6 +4,28 @@ import { hashPassword } from "./password";
4
4
  import { now } from "./jwt";
5
5
  import { generateSecureId } from "@boltstore/utils";
6
6
  import { markPasswordSet } from "../admin/oauth";
7
+ /**
8
+ * Create an admin user in the system database.
9
+ * Only callable from the CLI — creates with source="cli".
10
+ */
11
+ export async function createAdminUser(pool, email, password, name) {
12
+ validateEmail(email);
13
+ validatePassword(password);
14
+ bootstrapAuthTables(pool);
15
+ const passwordHash = await hashPassword(password);
16
+ const id = generateUserId();
17
+ const ts = now();
18
+ return pool.writeTransaction(() => {
19
+ const db = pool.write();
20
+ const existing = db.query("SELECT 1 FROM _users WHERE email=?").get(email);
21
+ if (existing) {
22
+ throw Object.assign(new Error("A user with this email already exists."), { status: 409 });
23
+ }
24
+ db.run(`INSERT INTO _users (id, email, name, password_hash, source, oauth_only, created_at, updated_at)
25
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [id, email.toLowerCase(), name ?? null, passwordHash, "cli", 0, ts, ts]);
26
+ return { id, email, name, source: "cli", created_at: ts, updated_at: ts };
27
+ });
28
+ }
7
29
  function generateUserId() {
8
30
  return generateSecureId("usr");
9
31
  }
@@ -20,16 +42,16 @@ export async function registerUser(pool, email, password) {
20
42
  if (existing) {
21
43
  throw Object.assign(new Error("A user with this email already exists."), { status: 409 });
22
44
  }
23
- db.run(`INSERT INTO _users (id, email, password_hash, role, oauth_only, created_at, updated_at)
24
- VALUES (?, ?, ?, ?, ?, ?, ?)`, [id, email.toLowerCase(), passwordHash, "user", 0, ts, ts]);
25
- return { id, email, role: "user", created_at: ts, updated_at: ts };
45
+ db.run(`INSERT INTO _users (id, email, name, password_hash, source, oauth_only, created_at, updated_at)
46
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [id, email.toLowerCase(), null, passwordHash, "register", 0, ts, ts]);
47
+ return { id, email, source: "register", created_at: ts, updated_at: ts };
26
48
  });
27
49
  }
28
50
  export function getUserById(pool, userId) {
29
51
  bootstrapAuthTables(pool);
30
52
  const db = pool.read();
31
53
  const row = db
32
- .query("SELECT id, email, role, created_at, updated_at FROM _users WHERE id=?")
54
+ .query("SELECT id, email, name, source, created_at, updated_at FROM _users WHERE id=?")
33
55
  .get(userId);
34
56
  if (!row) {
35
57
  throw Object.assign(new Error(`User "${userId}" not found.`), { status: 404 });
@@ -43,7 +65,7 @@ export async function updateProfile(pool, userId, data) {
43
65
  bootstrapAuthTables(pool);
44
66
  const db = pool.read();
45
67
  const existing = db
46
- .query("SELECT id, email, role, created_at, updated_at FROM _users WHERE id=?")
68
+ .query("SELECT id, email, name, source, created_at, updated_at FROM _users WHERE id=?")
47
69
  .get(userId);
48
70
  if (!existing) {
49
71
  throw Object.assign(new Error(`User "${userId}" not found.`), { status: 404 });
@@ -75,7 +97,7 @@ export async function updateProfile(pool, userId, data) {
75
97
  writeDb.run("UPDATE _users SET updated_at=? WHERE id=?", [ts, userId]);
76
98
  }
77
99
  const updated = writeDb
78
- .query("SELECT id, email, role, created_at, updated_at FROM _users WHERE id=?")
100
+ .query("SELECT id, email, name, source, created_at, updated_at FROM _users WHERE id=?")
79
101
  .get(userId);
80
102
  return updated;
81
103
  });
@@ -1 +1 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/auth/users.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/auth/users.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Self-executing CLI entry — starts the server or runs a CLI command.
3
+ *
4
+ * This file is used as the npm `bin` target. It inspects the first argument
5
+ * to decide whether to start the server or run a CLI command. When
6
+ * compiling a standalone binary, `entry.ts` is used instead.
7
+ *
8
+ * Usage:
9
+ * bun run src/bin.ts serve
10
+ * bun run src/bin.ts init
11
+ * bun run src/bin.ts --help
12
+ *
13
+ * @module boltstore/bin
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=bin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
package/dist/bin.js ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Self-executing CLI entry — starts the server or runs a CLI command.
3
+ *
4
+ * This file is used as the npm `bin` target. It inspects the first argument
5
+ * to decide whether to start the server or run a CLI command. When
6
+ * compiling a standalone binary, `entry.ts` is used instead.
7
+ *
8
+ * Usage:
9
+ * bun run src/bin.ts serve
10
+ * bun run src/bin.ts init
11
+ * bun run src/bin.ts --help
12
+ *
13
+ * @module boltstore/bin
14
+ */
15
+ import { runCli } from "./cli";
16
+ import { createServer, stopServerBackgroundTasks } from "./server";
17
+ import { DatabaseManager } from "./db/manager";
18
+ import { loadConfig } from "./config";
19
+ import { info, success, error } from "./cli-style";
20
+ const command = process.argv[2];
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",
26
+ ]);
27
+ try {
28
+ if (command && CLI_COMMANDS.has(command)) {
29
+ await runCli(process.argv.slice(2));
30
+ }
31
+ else {
32
+ // No command or unrecognized arg → start the server
33
+ const config = await loadConfig();
34
+ const manager = new DatabaseManager({ dataDir: config.databasePath });
35
+ const server = createServer({
36
+ port: config.port,
37
+ manager,
38
+ auth: { secret: config.jwtSecret },
39
+ cors: {
40
+ origins: config.corsOrigins,
41
+ methods: config.corsMethods,
42
+ headers: config.corsHeaders,
43
+ },
44
+ rateLimit: {
45
+ public: config.rateLimitPublic,
46
+ auth: config.rateLimitAuth,
47
+ admin: config.rateLimitAdmin,
48
+ windowSeconds: config.rateLimitWindowSeconds,
49
+ },
50
+ maxBodySize: config.maxBodySize,
51
+ requestTimeoutMs: config.requestTimeoutMs,
52
+ maxBatchSize: config.maxBatchSize,
53
+ trustedProxies: config.trustedProxies,
54
+ });
55
+ success(`Server running on http://localhost:${config.port}`);
56
+ info(`Health check: http://localhost:${config.port}/api/health`);
57
+ info(`Data directory: ${config.databasePath}`);
58
+ info(`Log level: ${config.logLevel}`);
59
+ info(`Timezone: ${config.serverTimezone}`);
60
+ info(`Rate limits: public=${config.rateLimitPublic}/min, auth=${config.rateLimitAuth}/min, admin=${config.rateLimitAdmin}/min`);
61
+ if (config.serverTimezone && config.serverTimezone !== "UTC") {
62
+ process.env.TZ = config.serverTimezone;
63
+ }
64
+ process.on("SIGINT", () => { info("Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
65
+ process.on("SIGTERM", () => { info("Shutting down..."); stopServerBackgroundTasks(); manager.close(); server.stop(); process.exit(0); });
66
+ }
67
+ }
68
+ catch (err) {
69
+ error(err.message);
70
+ error("Set JWT_SECRET environment variable or create a config file with boltstore init.");
71
+ process.exit(1);
72
+ }
73
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
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
+ /** Informational message (bold ⚡, default color). */
8
+ export declare function info(msg: string): void;
9
+ /** Success message (green prefix). */
10
+ export declare function success(msg: string): void;
11
+ /** Warning message (yellow prefix). */
12
+ export declare function warn(msg: string): void;
13
+ /** Error message (red prefix, to stderr). */
14
+ export declare function error(msg: string): void;
15
+ /** Plain output without the prefix (data, JSON, etc.). */
16
+ export declare function out(msg: string): void;
17
+ //# sourceMappingURL=cli-style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-style.d.ts","sourceRoot":"","sources":["../src/cli-style.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAeH,qDAAqD;AACrD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,sCAAsC;AACtC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,uCAAuC;AACvC,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,6CAA6C;AAC7C,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,0DAA0D;AAC1D,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC"}