@dashwire/server 0.1.0 → 0.3.0

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 (39) hide show
  1. package/dist/auth.service.d.ts +16 -0
  2. package/dist/auth.service.js +65 -0
  3. package/dist/db/client.d.ts +2 -0
  4. package/{src/db/client.ts → dist/db/client.js} +1 -4
  5. package/dist/db/schema.d.ts +570 -0
  6. package/dist/db/schema.js +46 -0
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.js +114 -0
  9. package/dist/logs.service.d.ts +1 -0
  10. package/dist/logs.service.js +14 -0
  11. package/dist/overview.service.d.ts +12 -0
  12. package/dist/overview.service.js +20 -0
  13. package/dist/projects.service.d.ts +40 -0
  14. package/dist/projects.service.js +180 -0
  15. package/dist/realtime/dashboardNamespace.d.ts +2 -0
  16. package/dist/realtime/dashboardNamespace.js +26 -0
  17. package/dist/realtime/sdkNamespace.d.ts +2 -0
  18. package/dist/realtime/sdkNamespace.js +69 -0
  19. package/dist/routes/auth.d.ts +2 -0
  20. package/dist/routes/auth.js +76 -0
  21. package/dist/routes/overview.d.ts +2 -0
  22. package/dist/routes/overview.js +21 -0
  23. package/dist/routes/projects.d.ts +3 -0
  24. package/dist/routes/projects.js +66 -0
  25. package/package.json +5 -4
  26. package/dashwire.db +0 -0
  27. package/drizzle.config.ts +0 -10
  28. package/src/auth.service.ts +0 -76
  29. package/src/db/schema.ts +0 -52
  30. package/src/index.ts +0 -44
  31. package/src/logs.service.ts +0 -15
  32. package/src/overview.service.ts +0 -28
  33. package/src/projects.service.ts +0 -204
  34. package/src/realtime/dashboardNamespace.ts +0 -36
  35. package/src/realtime/sdkNamespace.ts +0 -88
  36. package/src/routes/auth.ts +0 -90
  37. package/src/routes/overview.ts +0 -27
  38. package/src/routes/projects.ts +0 -93
  39. package/tsconfig.json +0 -11
@@ -0,0 +1,16 @@
1
+ export declare function hasAnyAdmin(): boolean;
2
+ export declare function createAdminUser(username: string, password: string): string;
3
+ export declare function createUserRecord(username: string, password: string, role?: "admin" | "user"): string;
4
+ export declare function authenticateUser(username: string, password: string): string;
5
+ export declare function verifyAuthToken(token: string): {
6
+ id: string;
7
+ username: string;
8
+ role: string;
9
+ } | null;
10
+ export declare function listUsers(): {
11
+ id: string;
12
+ username: string;
13
+ role: string;
14
+ createdAt: string;
15
+ }[];
16
+ export declare function deleteUser(userId: string, currentUserId: string): void;
@@ -0,0 +1,65 @@
1
+ import { randomBytes, scryptSync, timingSafeEqual } from "node:crypto";
2
+ import { eq } from "drizzle-orm";
3
+ import jwt from "jsonwebtoken";
4
+ import { db } from "./db/client.js";
5
+ import { users } from "./db/schema.js";
6
+ const JWT_SECRET = process.env.JWT_SECRET || "super-secret-dashwire-key";
7
+ function hashPassword(password) {
8
+ const salt = randomBytes(16).toString("hex");
9
+ const buffer = scryptSync(password, salt, 64);
10
+ return `${salt}:${buffer.toString("hex")}`;
11
+ }
12
+ function verifyPassword(password, storedHash) {
13
+ const [salt, key] = storedHash.split(":");
14
+ const buffer = scryptSync(password, salt, 64);
15
+ const storedBuffer = Buffer.from(key, "hex");
16
+ return timingSafeEqual(buffer, storedBuffer);
17
+ }
18
+ export function hasAnyAdmin() {
19
+ const admin = db.select().from(users).where(eq(users.role, "admin")).limit(1).get();
20
+ return !!admin;
21
+ }
22
+ export function createAdminUser(username, password) {
23
+ if (hasAnyAdmin()) {
24
+ throw new Error("Admin account bestaat al.");
25
+ }
26
+ return createUserRecord(username, password, "admin");
27
+ }
28
+ export function createUserRecord(username, password, role = "user") {
29
+ const id = randomBytes(8).toString("hex");
30
+ const passwordHash = hashPassword(password);
31
+ const now = new Date().toISOString();
32
+ db.insert(users).values({
33
+ id,
34
+ username,
35
+ passwordHash,
36
+ role,
37
+ createdAt: now,
38
+ }).run();
39
+ return jwt.sign({ id, username, role }, JWT_SECRET, { expiresIn: "7d" });
40
+ }
41
+ export function authenticateUser(username, password) {
42
+ const user = db.select().from(users).where(eq(users.username, username)).get();
43
+ if (!user || !verifyPassword(password, user.passwordHash)) {
44
+ throw new Error("Ongeldige gebruikersnaam of wachtwoord.");
45
+ }
46
+ return jwt.sign({ id: user.id, username: user.username, role: user.role }, JWT_SECRET, { expiresIn: "7d" });
47
+ }
48
+ export function verifyAuthToken(token) {
49
+ try {
50
+ const decoded = jwt.verify(token, JWT_SECRET);
51
+ return decoded;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ export function listUsers() {
58
+ return db.select({ id: users.id, username: users.username, role: users.role, createdAt: users.createdAt }).from(users).all();
59
+ }
60
+ export function deleteUser(userId, currentUserId) {
61
+ if (userId === currentUserId) {
62
+ throw new Error("Je kunt je eigen admin-account niet verwijderen.");
63
+ }
64
+ db.delete(users).where(eq(users.id, userId)).run();
65
+ }
@@ -0,0 +1,2 @@
1
+ import * as schema from "./schema.js";
2
+ export declare const db: import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof schema>;
@@ -1,9 +1,7 @@
1
1
  import Database from "better-sqlite3";
2
2
  import { drizzle } from "drizzle-orm/better-sqlite3";
3
3
  import * as schema from "./schema.js";
4
-
5
4
  const sqlite = new Database("dashwire.db");
6
-
7
5
  sqlite.exec(`
8
6
  CREATE TABLE IF NOT EXISTS projects (
9
7
  id TEXT PRIMARY KEY,
@@ -56,5 +54,4 @@ sqlite.exec(`
56
54
  created_at TEXT NOT NULL
57
55
  );
58
56
  `);
59
-
60
- export const db = drizzle(sqlite, { schema });
57
+ export const db = drizzle(sqlite, { schema });
@@ -0,0 +1,570 @@
1
+ export declare const projects: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "projects";
3
+ schema: undefined;
4
+ columns: {
5
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "id";
7
+ tableName: "projects";
8
+ dataType: "string";
9
+ columnType: "SQLiteText";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ generated: undefined;
20
+ }, object>;
21
+ name: import("drizzle-orm/sqlite-core").SQLiteColumn<{
22
+ name: "name";
23
+ tableName: "projects";
24
+ dataType: "string";
25
+ columnType: "SQLiteText";
26
+ data: string;
27
+ driverParam: string;
28
+ notNull: true;
29
+ hasDefault: false;
30
+ isPrimaryKey: false;
31
+ isAutoincrement: false;
32
+ hasRuntimeDefault: false;
33
+ enumValues: [string, ...string[]];
34
+ baseColumn: never;
35
+ generated: undefined;
36
+ }, object>;
37
+ apiKeyHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
38
+ name: "api_key_hash";
39
+ tableName: "projects";
40
+ dataType: "string";
41
+ columnType: "SQLiteText";
42
+ data: string;
43
+ driverParam: string;
44
+ notNull: true;
45
+ hasDefault: false;
46
+ isPrimaryKey: false;
47
+ isAutoincrement: false;
48
+ hasRuntimeDefault: false;
49
+ enumValues: [string, ...string[]];
50
+ baseColumn: never;
51
+ generated: undefined;
52
+ }, object>;
53
+ structureJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
54
+ name: "structure_json";
55
+ tableName: "projects";
56
+ dataType: "string";
57
+ columnType: "SQLiteText";
58
+ data: string;
59
+ driverParam: string;
60
+ notNull: true;
61
+ hasDefault: false;
62
+ isPrimaryKey: false;
63
+ isAutoincrement: false;
64
+ hasRuntimeDefault: false;
65
+ enumValues: [string, ...string[]];
66
+ baseColumn: never;
67
+ generated: undefined;
68
+ }, object>;
69
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
70
+ name: "status";
71
+ tableName: "projects";
72
+ dataType: "string";
73
+ columnType: "SQLiteText";
74
+ data: "online" | "offline";
75
+ driverParam: string;
76
+ notNull: true;
77
+ hasDefault: true;
78
+ isPrimaryKey: false;
79
+ isAutoincrement: false;
80
+ hasRuntimeDefault: false;
81
+ enumValues: ["online", "offline"];
82
+ baseColumn: never;
83
+ generated: undefined;
84
+ }, object>;
85
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
86
+ name: "created_at";
87
+ tableName: "projects";
88
+ dataType: "string";
89
+ columnType: "SQLiteText";
90
+ data: string;
91
+ driverParam: string;
92
+ notNull: true;
93
+ hasDefault: false;
94
+ isPrimaryKey: false;
95
+ isAutoincrement: false;
96
+ hasRuntimeDefault: false;
97
+ enumValues: [string, ...string[]];
98
+ baseColumn: never;
99
+ generated: undefined;
100
+ }, object>;
101
+ lastSeenAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
102
+ name: "last_seen_at";
103
+ tableName: "projects";
104
+ dataType: "string";
105
+ columnType: "SQLiteText";
106
+ data: string;
107
+ driverParam: string;
108
+ notNull: false;
109
+ hasDefault: false;
110
+ isPrimaryKey: false;
111
+ isAutoincrement: false;
112
+ hasRuntimeDefault: false;
113
+ enumValues: [string, ...string[]];
114
+ baseColumn: never;
115
+ generated: undefined;
116
+ }, object>;
117
+ };
118
+ dialect: "sqlite";
119
+ }>;
120
+ export declare const projectTokens: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
121
+ name: "project_tokens";
122
+ schema: undefined;
123
+ columns: {
124
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
125
+ name: "id";
126
+ tableName: "project_tokens";
127
+ dataType: "string";
128
+ columnType: "SQLiteText";
129
+ data: string;
130
+ driverParam: string;
131
+ notNull: true;
132
+ hasDefault: false;
133
+ isPrimaryKey: true;
134
+ isAutoincrement: false;
135
+ hasRuntimeDefault: false;
136
+ enumValues: [string, ...string[]];
137
+ baseColumn: never;
138
+ generated: undefined;
139
+ }, object>;
140
+ projectId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
141
+ name: "project_id";
142
+ tableName: "project_tokens";
143
+ dataType: "string";
144
+ columnType: "SQLiteText";
145
+ data: string;
146
+ driverParam: string;
147
+ notNull: true;
148
+ hasDefault: false;
149
+ isPrimaryKey: false;
150
+ isAutoincrement: false;
151
+ hasRuntimeDefault: false;
152
+ enumValues: [string, ...string[]];
153
+ baseColumn: never;
154
+ generated: undefined;
155
+ }, object>;
156
+ token: import("drizzle-orm/sqlite-core").SQLiteColumn<{
157
+ name: "token";
158
+ tableName: "project_tokens";
159
+ dataType: "string";
160
+ columnType: "SQLiteText";
161
+ data: string;
162
+ driverParam: string;
163
+ notNull: true;
164
+ hasDefault: false;
165
+ isPrimaryKey: false;
166
+ isAutoincrement: false;
167
+ hasRuntimeDefault: false;
168
+ enumValues: [string, ...string[]];
169
+ baseColumn: never;
170
+ generated: undefined;
171
+ }, object>;
172
+ active: import("drizzle-orm/sqlite-core").SQLiteColumn<{
173
+ name: "active";
174
+ tableName: "project_tokens";
175
+ dataType: "boolean";
176
+ columnType: "SQLiteBoolean";
177
+ data: boolean;
178
+ driverParam: number;
179
+ notNull: true;
180
+ hasDefault: true;
181
+ isPrimaryKey: false;
182
+ isAutoincrement: false;
183
+ hasRuntimeDefault: false;
184
+ enumValues: undefined;
185
+ baseColumn: never;
186
+ generated: undefined;
187
+ }, object>;
188
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
189
+ name: "created_at";
190
+ tableName: "project_tokens";
191
+ dataType: "string";
192
+ columnType: "SQLiteText";
193
+ data: string;
194
+ driverParam: string;
195
+ notNull: true;
196
+ hasDefault: false;
197
+ isPrimaryKey: false;
198
+ isAutoincrement: false;
199
+ hasRuntimeDefault: false;
200
+ enumValues: [string, ...string[]];
201
+ baseColumn: never;
202
+ generated: undefined;
203
+ }, object>;
204
+ };
205
+ dialect: "sqlite";
206
+ }>;
207
+ export declare const capabilityState: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
208
+ name: "capability_state";
209
+ schema: undefined;
210
+ columns: {
211
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
212
+ name: "id";
213
+ tableName: "capability_state";
214
+ dataType: "number";
215
+ columnType: "SQLiteInteger";
216
+ data: number;
217
+ driverParam: number;
218
+ notNull: true;
219
+ hasDefault: true;
220
+ isPrimaryKey: true;
221
+ isAutoincrement: false;
222
+ hasRuntimeDefault: false;
223
+ enumValues: undefined;
224
+ baseColumn: never;
225
+ generated: undefined;
226
+ }, object>;
227
+ projectId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
228
+ name: "project_id";
229
+ tableName: "capability_state";
230
+ dataType: "string";
231
+ columnType: "SQLiteText";
232
+ data: string;
233
+ driverParam: string;
234
+ notNull: true;
235
+ hasDefault: false;
236
+ isPrimaryKey: false;
237
+ isAutoincrement: false;
238
+ hasRuntimeDefault: false;
239
+ enumValues: [string, ...string[]];
240
+ baseColumn: never;
241
+ generated: undefined;
242
+ }, object>;
243
+ capabilityPath: import("drizzle-orm/sqlite-core").SQLiteColumn<{
244
+ name: "capability_path";
245
+ tableName: "capability_state";
246
+ dataType: "string";
247
+ columnType: "SQLiteText";
248
+ data: string;
249
+ driverParam: string;
250
+ notNull: true;
251
+ hasDefault: false;
252
+ isPrimaryKey: false;
253
+ isAutoincrement: false;
254
+ hasRuntimeDefault: false;
255
+ enumValues: [string, ...string[]];
256
+ baseColumn: never;
257
+ generated: undefined;
258
+ }, object>;
259
+ valueJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
260
+ name: "value_json";
261
+ tableName: "capability_state";
262
+ dataType: "string";
263
+ columnType: "SQLiteText";
264
+ data: string;
265
+ driverParam: string;
266
+ notNull: true;
267
+ hasDefault: false;
268
+ isPrimaryKey: false;
269
+ isAutoincrement: false;
270
+ hasRuntimeDefault: false;
271
+ enumValues: [string, ...string[]];
272
+ baseColumn: never;
273
+ generated: undefined;
274
+ }, object>;
275
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
276
+ name: "updated_at";
277
+ tableName: "capability_state";
278
+ dataType: "string";
279
+ columnType: "SQLiteText";
280
+ data: string;
281
+ driverParam: string;
282
+ notNull: true;
283
+ hasDefault: false;
284
+ isPrimaryKey: false;
285
+ isAutoincrement: false;
286
+ hasRuntimeDefault: false;
287
+ enumValues: [string, ...string[]];
288
+ baseColumn: never;
289
+ generated: undefined;
290
+ }, object>;
291
+ };
292
+ dialect: "sqlite";
293
+ }>;
294
+ export declare const overviewConfig: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
295
+ name: "overview_config";
296
+ schema: undefined;
297
+ columns: {
298
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
299
+ name: "id";
300
+ tableName: "overview_config";
301
+ dataType: "number";
302
+ columnType: "SQLiteInteger";
303
+ data: number;
304
+ driverParam: number;
305
+ notNull: true;
306
+ hasDefault: true;
307
+ isPrimaryKey: true;
308
+ isAutoincrement: false;
309
+ hasRuntimeDefault: false;
310
+ enumValues: undefined;
311
+ baseColumn: never;
312
+ generated: undefined;
313
+ }, object>;
314
+ projectId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
315
+ name: "project_id";
316
+ tableName: "overview_config";
317
+ dataType: "string";
318
+ columnType: "SQLiteText";
319
+ data: string;
320
+ driverParam: string;
321
+ notNull: true;
322
+ hasDefault: false;
323
+ isPrimaryKey: false;
324
+ isAutoincrement: false;
325
+ hasRuntimeDefault: false;
326
+ enumValues: [string, ...string[]];
327
+ baseColumn: never;
328
+ generated: undefined;
329
+ }, object>;
330
+ capabilityPath: import("drizzle-orm/sqlite-core").SQLiteColumn<{
331
+ name: "capability_path";
332
+ tableName: "overview_config";
333
+ dataType: "string";
334
+ columnType: "SQLiteText";
335
+ data: string;
336
+ driverParam: string;
337
+ notNull: true;
338
+ hasDefault: false;
339
+ isPrimaryKey: false;
340
+ isAutoincrement: false;
341
+ hasRuntimeDefault: false;
342
+ enumValues: [string, ...string[]];
343
+ baseColumn: never;
344
+ generated: undefined;
345
+ }, object>;
346
+ staleSince: import("drizzle-orm/sqlite-core").SQLiteColumn<{
347
+ name: "stale_since";
348
+ tableName: "overview_config";
349
+ dataType: "string";
350
+ columnType: "SQLiteText";
351
+ data: string;
352
+ driverParam: string;
353
+ notNull: false;
354
+ hasDefault: false;
355
+ isPrimaryKey: false;
356
+ isAutoincrement: false;
357
+ hasRuntimeDefault: false;
358
+ enumValues: [string, ...string[]];
359
+ baseColumn: never;
360
+ generated: undefined;
361
+ }, object>;
362
+ };
363
+ dialect: "sqlite";
364
+ }>;
365
+ export declare const logs: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
366
+ name: "logs";
367
+ schema: undefined;
368
+ columns: {
369
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
370
+ name: "id";
371
+ tableName: "logs";
372
+ dataType: "number";
373
+ columnType: "SQLiteInteger";
374
+ data: number;
375
+ driverParam: number;
376
+ notNull: true;
377
+ hasDefault: true;
378
+ isPrimaryKey: true;
379
+ isAutoincrement: false;
380
+ hasRuntimeDefault: false;
381
+ enumValues: undefined;
382
+ baseColumn: never;
383
+ generated: undefined;
384
+ }, object>;
385
+ projectId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
386
+ name: "project_id";
387
+ tableName: "logs";
388
+ dataType: "string";
389
+ columnType: "SQLiteText";
390
+ data: string;
391
+ driverParam: string;
392
+ notNull: true;
393
+ hasDefault: false;
394
+ isPrimaryKey: false;
395
+ isAutoincrement: false;
396
+ hasRuntimeDefault: false;
397
+ enumValues: [string, ...string[]];
398
+ baseColumn: never;
399
+ generated: undefined;
400
+ }, object>;
401
+ level: import("drizzle-orm/sqlite-core").SQLiteColumn<{
402
+ name: "level";
403
+ tableName: "logs";
404
+ dataType: "string";
405
+ columnType: "SQLiteText";
406
+ data: string;
407
+ driverParam: string;
408
+ notNull: true;
409
+ hasDefault: false;
410
+ isPrimaryKey: false;
411
+ isAutoincrement: false;
412
+ hasRuntimeDefault: false;
413
+ enumValues: [string, ...string[]];
414
+ baseColumn: never;
415
+ generated: undefined;
416
+ }, object>;
417
+ message: import("drizzle-orm/sqlite-core").SQLiteColumn<{
418
+ name: "message";
419
+ tableName: "logs";
420
+ dataType: "string";
421
+ columnType: "SQLiteText";
422
+ data: string;
423
+ driverParam: string;
424
+ notNull: true;
425
+ hasDefault: false;
426
+ isPrimaryKey: false;
427
+ isAutoincrement: false;
428
+ hasRuntimeDefault: false;
429
+ enumValues: [string, ...string[]];
430
+ baseColumn: never;
431
+ generated: undefined;
432
+ }, object>;
433
+ source: import("drizzle-orm/sqlite-core").SQLiteColumn<{
434
+ name: "source";
435
+ tableName: "logs";
436
+ dataType: "string";
437
+ columnType: "SQLiteText";
438
+ data: string;
439
+ driverParam: string;
440
+ notNull: false;
441
+ hasDefault: false;
442
+ isPrimaryKey: false;
443
+ isAutoincrement: false;
444
+ hasRuntimeDefault: false;
445
+ enumValues: [string, ...string[]];
446
+ baseColumn: never;
447
+ generated: undefined;
448
+ }, object>;
449
+ metadataJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
450
+ name: "metadata_json";
451
+ tableName: "logs";
452
+ dataType: "string";
453
+ columnType: "SQLiteText";
454
+ data: string;
455
+ driverParam: string;
456
+ notNull: false;
457
+ hasDefault: false;
458
+ isPrimaryKey: false;
459
+ isAutoincrement: false;
460
+ hasRuntimeDefault: false;
461
+ enumValues: [string, ...string[]];
462
+ baseColumn: never;
463
+ generated: undefined;
464
+ }, object>;
465
+ timestamp: import("drizzle-orm/sqlite-core").SQLiteColumn<{
466
+ name: "timestamp";
467
+ tableName: "logs";
468
+ dataType: "string";
469
+ columnType: "SQLiteText";
470
+ data: string;
471
+ driverParam: string;
472
+ notNull: true;
473
+ hasDefault: false;
474
+ isPrimaryKey: false;
475
+ isAutoincrement: false;
476
+ hasRuntimeDefault: false;
477
+ enumValues: [string, ...string[]];
478
+ baseColumn: never;
479
+ generated: undefined;
480
+ }, object>;
481
+ };
482
+ dialect: "sqlite";
483
+ }>;
484
+ export declare const users: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
485
+ name: "users";
486
+ schema: undefined;
487
+ columns: {
488
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
489
+ name: "id";
490
+ tableName: "users";
491
+ dataType: "string";
492
+ columnType: "SQLiteText";
493
+ data: string;
494
+ driverParam: string;
495
+ notNull: true;
496
+ hasDefault: false;
497
+ isPrimaryKey: true;
498
+ isAutoincrement: false;
499
+ hasRuntimeDefault: false;
500
+ enumValues: [string, ...string[]];
501
+ baseColumn: never;
502
+ generated: undefined;
503
+ }, object>;
504
+ username: import("drizzle-orm/sqlite-core").SQLiteColumn<{
505
+ name: "username";
506
+ tableName: "users";
507
+ dataType: "string";
508
+ columnType: "SQLiteText";
509
+ data: string;
510
+ driverParam: string;
511
+ notNull: true;
512
+ hasDefault: false;
513
+ isPrimaryKey: false;
514
+ isAutoincrement: false;
515
+ hasRuntimeDefault: false;
516
+ enumValues: [string, ...string[]];
517
+ baseColumn: never;
518
+ generated: undefined;
519
+ }, object>;
520
+ passwordHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
521
+ name: "password_hash";
522
+ tableName: "users";
523
+ dataType: "string";
524
+ columnType: "SQLiteText";
525
+ data: string;
526
+ driverParam: string;
527
+ notNull: true;
528
+ hasDefault: false;
529
+ isPrimaryKey: false;
530
+ isAutoincrement: false;
531
+ hasRuntimeDefault: false;
532
+ enumValues: [string, ...string[]];
533
+ baseColumn: never;
534
+ generated: undefined;
535
+ }, object>;
536
+ role: import("drizzle-orm/sqlite-core").SQLiteColumn<{
537
+ name: "role";
538
+ tableName: "users";
539
+ dataType: "string";
540
+ columnType: "SQLiteText";
541
+ data: string;
542
+ driverParam: string;
543
+ notNull: true;
544
+ hasDefault: true;
545
+ isPrimaryKey: false;
546
+ isAutoincrement: false;
547
+ hasRuntimeDefault: false;
548
+ enumValues: [string, ...string[]];
549
+ baseColumn: never;
550
+ generated: undefined;
551
+ }, object>;
552
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
553
+ name: "created_at";
554
+ tableName: "users";
555
+ dataType: "string";
556
+ columnType: "SQLiteText";
557
+ data: string;
558
+ driverParam: string;
559
+ notNull: true;
560
+ hasDefault: false;
561
+ isPrimaryKey: false;
562
+ isAutoincrement: false;
563
+ hasRuntimeDefault: false;
564
+ enumValues: [string, ...string[]];
565
+ baseColumn: never;
566
+ generated: undefined;
567
+ }, object>;
568
+ };
569
+ dialect: "sqlite";
570
+ }>;