@frigear-nu/oauth-server 0.0.8 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@frigear-nu/oauth-server",
3
3
  "configKey": "oauthServer",
4
- "version": "0.0.8",
4
+ "version": "0.0.10",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.3",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { defineNuxtModule, createResolver, hasNuxtModule, addServerHandler, addServerImportsDir, addImports } from '@nuxt/kit';
2
- import { registerModule, registerTailwindSource, registerLocales, resolvePagePath, registerDatabaseTable, addModulePages, addOptionalMenuSource, moduleApiUrl } from '@frigear-nu/module-kit/utils';
2
+ import { registerModule, registerTailwindSource, registerLocales, resolvePagePath, registerDatabaseTable, inlineModuleRuntime, addModulePages, addOptionalMenuSource, moduleApiUrl } from '@frigear-nu/module-kit/utils';
3
3
  import { adminRoute } from '@frigear-nu/admin/utils';
4
4
  import { addAuthScope, addAuthResolver } from '@frigear-nu/auth/utils';
5
5
  import { addMcpDefinitions } from '@frigear-nu/mcp/utils';
@@ -90,6 +90,7 @@ const module$1 = defineNuxtModule({
90
90
  api("post", "admin/applications/:id/secret", "api/admin/application-secret.post");
91
91
  api("post", "admin/applications/:id/revoke", "api/admin/application-revoke.post");
92
92
  addServerImportsDir(resolver.resolve("./runtime/server/utils"));
93
+ inlineModuleRuntime(nuxt, resolver);
93
94
  if (settings.mcp === true) addMcpDefinitions(nuxt, resolver.resolve("./runtime/server/mcp"));
94
95
  addImports([
95
96
  { name: "useOAuthApplications", from: resolver.resolve("./runtime/app/composables/useOAuthApplications") },
@@ -0,0 +1,642 @@
1
+ /** An application (OAuth client) that users may sign in to. */
2
+ export declare const oauthApplications: import("drizzle-orm/pg-core").PgTableWithColumns<{
3
+ name: "oauth_applications";
4
+ schema: undefined;
5
+ columns: {
6
+ id: import("drizzle-orm/pg-core").PgColumn<{
7
+ name: "id";
8
+ tableName: "oauth_applications";
9
+ dataType: "string";
10
+ columnType: "PgText";
11
+ data: string;
12
+ driverParam: string;
13
+ notNull: true;
14
+ hasDefault: false;
15
+ isPrimaryKey: true;
16
+ isAutoincrement: false;
17
+ hasRuntimeDefault: false;
18
+ enumValues: [string, ...string[]];
19
+ baseColumn: never;
20
+ identity: undefined;
21
+ generated: undefined;
22
+ }, {}, {}>;
23
+ secretHash: import("drizzle-orm/pg-core").PgColumn<{
24
+ name: "secretHash";
25
+ tableName: "oauth_applications";
26
+ dataType: "string";
27
+ columnType: "PgText";
28
+ data: string;
29
+ driverParam: string;
30
+ notNull: true;
31
+ hasDefault: false;
32
+ isPrimaryKey: false;
33
+ isAutoincrement: false;
34
+ hasRuntimeDefault: false;
35
+ enumValues: [string, ...string[]];
36
+ baseColumn: never;
37
+ identity: undefined;
38
+ generated: undefined;
39
+ }, {}, {}>;
40
+ name: import("drizzle-orm/pg-core").PgColumn<{
41
+ name: "name";
42
+ tableName: "oauth_applications";
43
+ dataType: "string";
44
+ columnType: "PgText";
45
+ data: string;
46
+ driverParam: string;
47
+ notNull: true;
48
+ hasDefault: false;
49
+ isPrimaryKey: false;
50
+ isAutoincrement: false;
51
+ hasRuntimeDefault: false;
52
+ enumValues: [string, ...string[]];
53
+ baseColumn: never;
54
+ identity: undefined;
55
+ generated: undefined;
56
+ }, {}, {}>;
57
+ description: import("drizzle-orm/pg-core").PgColumn<{
58
+ name: "description";
59
+ tableName: "oauth_applications";
60
+ dataType: "string";
61
+ columnType: "PgText";
62
+ data: string;
63
+ driverParam: string;
64
+ notNull: false;
65
+ hasDefault: false;
66
+ isPrimaryKey: false;
67
+ isAutoincrement: false;
68
+ hasRuntimeDefault: false;
69
+ enumValues: [string, ...string[]];
70
+ baseColumn: never;
71
+ identity: undefined;
72
+ generated: undefined;
73
+ }, {}, {}>;
74
+ icon: import("drizzle-orm/pg-core").PgColumn<{
75
+ name: "icon";
76
+ tableName: "oauth_applications";
77
+ dataType: "string";
78
+ columnType: "PgText";
79
+ data: string;
80
+ driverParam: string;
81
+ notNull: false;
82
+ hasDefault: false;
83
+ isPrimaryKey: false;
84
+ isAutoincrement: false;
85
+ hasRuntimeDefault: false;
86
+ enumValues: [string, ...string[]];
87
+ baseColumn: never;
88
+ identity: undefined;
89
+ generated: undefined;
90
+ }, {}, {}>;
91
+ priority: import("drizzle-orm/pg-core").PgColumn<{
92
+ name: "priority";
93
+ tableName: "oauth_applications";
94
+ dataType: "number";
95
+ columnType: "PgInteger";
96
+ data: number;
97
+ driverParam: string | number;
98
+ notNull: true;
99
+ hasDefault: true;
100
+ isPrimaryKey: false;
101
+ isAutoincrement: false;
102
+ hasRuntimeDefault: false;
103
+ enumValues: undefined;
104
+ baseColumn: never;
105
+ identity: undefined;
106
+ generated: undefined;
107
+ }, {}, {}>;
108
+ websiteUrl: import("drizzle-orm/pg-core").PgColumn<{
109
+ name: "websiteUrl";
110
+ tableName: "oauth_applications";
111
+ dataType: "string";
112
+ columnType: "PgText";
113
+ data: string;
114
+ driverParam: string;
115
+ notNull: true;
116
+ hasDefault: false;
117
+ isPrimaryKey: false;
118
+ isAutoincrement: false;
119
+ hasRuntimeDefault: false;
120
+ enumValues: [string, ...string[]];
121
+ baseColumn: never;
122
+ identity: undefined;
123
+ generated: undefined;
124
+ }, {}, {}>;
125
+ loginUrl: import("drizzle-orm/pg-core").PgColumn<{
126
+ name: "loginUrl";
127
+ tableName: "oauth_applications";
128
+ dataType: "string";
129
+ columnType: "PgText";
130
+ data: string;
131
+ driverParam: string;
132
+ notNull: false;
133
+ hasDefault: false;
134
+ isPrimaryKey: false;
135
+ isAutoincrement: false;
136
+ hasRuntimeDefault: false;
137
+ enumValues: [string, ...string[]];
138
+ baseColumn: never;
139
+ identity: undefined;
140
+ generated: undefined;
141
+ }, {}, {}>;
142
+ previewUrlPattern: import("drizzle-orm/pg-core").PgColumn<{
143
+ name: "previewUrlPattern";
144
+ tableName: "oauth_applications";
145
+ dataType: "string";
146
+ columnType: "PgText";
147
+ data: string;
148
+ driverParam: string;
149
+ notNull: false;
150
+ hasDefault: false;
151
+ isPrimaryKey: false;
152
+ isAutoincrement: false;
153
+ hasRuntimeDefault: false;
154
+ enumValues: [string, ...string[]];
155
+ baseColumn: never;
156
+ identity: undefined;
157
+ generated: undefined;
158
+ }, {}, {}>;
159
+ redirectUris: import("drizzle-orm/pg-core").PgColumn<{
160
+ name: "redirectUris";
161
+ tableName: "oauth_applications";
162
+ dataType: "json";
163
+ columnType: "PgJsonb";
164
+ data: string[];
165
+ driverParam: unknown;
166
+ notNull: true;
167
+ hasDefault: true;
168
+ isPrimaryKey: false;
169
+ isAutoincrement: false;
170
+ hasRuntimeDefault: true;
171
+ enumValues: undefined;
172
+ baseColumn: never;
173
+ identity: undefined;
174
+ generated: undefined;
175
+ }, {}, {
176
+ $type: string[];
177
+ }>;
178
+ allowedRoles: import("drizzle-orm/pg-core").PgColumn<{
179
+ name: "allowedRoles";
180
+ tableName: "oauth_applications";
181
+ dataType: "json";
182
+ columnType: "PgJsonb";
183
+ data: string[];
184
+ driverParam: unknown;
185
+ notNull: true;
186
+ hasDefault: true;
187
+ isPrimaryKey: false;
188
+ isAutoincrement: false;
189
+ hasRuntimeDefault: true;
190
+ enumValues: undefined;
191
+ baseColumn: never;
192
+ identity: undefined;
193
+ generated: undefined;
194
+ }, {}, {
195
+ $type: string[];
196
+ }>;
197
+ tags: import("drizzle-orm/pg-core").PgColumn<{
198
+ name: "tags";
199
+ tableName: "oauth_applications";
200
+ dataType: "json";
201
+ columnType: "PgJsonb";
202
+ data: string[];
203
+ driverParam: unknown;
204
+ notNull: true;
205
+ hasDefault: true;
206
+ isPrimaryKey: false;
207
+ isAutoincrement: false;
208
+ hasRuntimeDefault: true;
209
+ enumValues: undefined;
210
+ baseColumn: never;
211
+ identity: undefined;
212
+ generated: undefined;
213
+ }, {}, {
214
+ $type: string[];
215
+ }>;
216
+ ownerId: import("drizzle-orm/pg-core").PgColumn<{
217
+ name: "ownerId";
218
+ tableName: "oauth_applications";
219
+ dataType: "number";
220
+ columnType: "PgInteger";
221
+ data: number;
222
+ driverParam: string | number;
223
+ notNull: false;
224
+ hasDefault: false;
225
+ isPrimaryKey: false;
226
+ isAutoincrement: false;
227
+ hasRuntimeDefault: false;
228
+ enumValues: undefined;
229
+ baseColumn: never;
230
+ identity: undefined;
231
+ generated: undefined;
232
+ }, {}, {}>;
233
+ isActive: import("drizzle-orm/pg-core").PgColumn<{
234
+ name: "isActive";
235
+ tableName: "oauth_applications";
236
+ dataType: "boolean";
237
+ columnType: "PgBoolean";
238
+ data: boolean;
239
+ driverParam: boolean;
240
+ notNull: true;
241
+ hasDefault: true;
242
+ isPrimaryKey: false;
243
+ isAutoincrement: false;
244
+ hasRuntimeDefault: false;
245
+ enumValues: undefined;
246
+ baseColumn: never;
247
+ identity: undefined;
248
+ generated: undefined;
249
+ }, {}, {}>;
250
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
251
+ name: "createdAt";
252
+ tableName: "oauth_applications";
253
+ dataType: "date";
254
+ columnType: "PgTimestamp";
255
+ data: Date;
256
+ driverParam: string;
257
+ notNull: true;
258
+ hasDefault: true;
259
+ isPrimaryKey: false;
260
+ isAutoincrement: false;
261
+ hasRuntimeDefault: true;
262
+ enumValues: undefined;
263
+ baseColumn: never;
264
+ identity: undefined;
265
+ generated: undefined;
266
+ }, {}, {}>;
267
+ updatedAt: import("drizzle-orm/pg-core").PgColumn<{
268
+ name: "updatedAt";
269
+ tableName: "oauth_applications";
270
+ dataType: "date";
271
+ columnType: "PgTimestamp";
272
+ data: Date;
273
+ driverParam: string;
274
+ notNull: true;
275
+ hasDefault: true;
276
+ isPrimaryKey: false;
277
+ isAutoincrement: false;
278
+ hasRuntimeDefault: true;
279
+ enumValues: undefined;
280
+ baseColumn: never;
281
+ identity: undefined;
282
+ generated: undefined;
283
+ }, {}, {}>;
284
+ };
285
+ dialect: "pg";
286
+ }>;
287
+ /** Short-lived, single-use authorization codes. Only the hash of the code is stored. */
288
+ export declare const oauthAuthorizationCodes: import("drizzle-orm/pg-core").PgTableWithColumns<{
289
+ name: "oauth_authorization_codes";
290
+ schema: undefined;
291
+ columns: {
292
+ codeHash: import("drizzle-orm/pg-core").PgColumn<{
293
+ name: "codeHash";
294
+ tableName: "oauth_authorization_codes";
295
+ dataType: "string";
296
+ columnType: "PgText";
297
+ data: string;
298
+ driverParam: string;
299
+ notNull: true;
300
+ hasDefault: false;
301
+ isPrimaryKey: true;
302
+ isAutoincrement: false;
303
+ hasRuntimeDefault: false;
304
+ enumValues: [string, ...string[]];
305
+ baseColumn: never;
306
+ identity: undefined;
307
+ generated: undefined;
308
+ }, {}, {}>;
309
+ applicationId: import("drizzle-orm/pg-core").PgColumn<{
310
+ name: "applicationId";
311
+ tableName: "oauth_authorization_codes";
312
+ dataType: "string";
313
+ columnType: "PgText";
314
+ data: string;
315
+ driverParam: string;
316
+ notNull: true;
317
+ hasDefault: false;
318
+ isPrimaryKey: false;
319
+ isAutoincrement: false;
320
+ hasRuntimeDefault: false;
321
+ enumValues: [string, ...string[]];
322
+ baseColumn: never;
323
+ identity: undefined;
324
+ generated: undefined;
325
+ }, {}, {}>;
326
+ userId: import("drizzle-orm/pg-core").PgColumn<{
327
+ name: "userId";
328
+ tableName: "oauth_authorization_codes";
329
+ dataType: "number";
330
+ columnType: "PgInteger";
331
+ data: number;
332
+ driverParam: string | number;
333
+ notNull: true;
334
+ hasDefault: false;
335
+ isPrimaryKey: false;
336
+ isAutoincrement: false;
337
+ hasRuntimeDefault: false;
338
+ enumValues: undefined;
339
+ baseColumn: never;
340
+ identity: undefined;
341
+ generated: undefined;
342
+ }, {}, {}>;
343
+ redirectUri: import("drizzle-orm/pg-core").PgColumn<{
344
+ name: "redirectUri";
345
+ tableName: "oauth_authorization_codes";
346
+ dataType: "string";
347
+ columnType: "PgText";
348
+ data: string;
349
+ driverParam: string;
350
+ notNull: true;
351
+ hasDefault: false;
352
+ isPrimaryKey: false;
353
+ isAutoincrement: false;
354
+ hasRuntimeDefault: false;
355
+ enumValues: [string, ...string[]];
356
+ baseColumn: never;
357
+ identity: undefined;
358
+ generated: undefined;
359
+ }, {}, {}>;
360
+ scope: import("drizzle-orm/pg-core").PgColumn<{
361
+ name: "scope";
362
+ tableName: "oauth_authorization_codes";
363
+ dataType: "string";
364
+ columnType: "PgText";
365
+ data: string;
366
+ driverParam: string;
367
+ notNull: true;
368
+ hasDefault: false;
369
+ isPrimaryKey: false;
370
+ isAutoincrement: false;
371
+ hasRuntimeDefault: false;
372
+ enumValues: [string, ...string[]];
373
+ baseColumn: never;
374
+ identity: undefined;
375
+ generated: undefined;
376
+ }, {}, {}>;
377
+ codeChallenge: import("drizzle-orm/pg-core").PgColumn<{
378
+ name: "codeChallenge";
379
+ tableName: "oauth_authorization_codes";
380
+ dataType: "string";
381
+ columnType: "PgText";
382
+ data: string;
383
+ driverParam: string;
384
+ notNull: true;
385
+ hasDefault: false;
386
+ isPrimaryKey: false;
387
+ isAutoincrement: false;
388
+ hasRuntimeDefault: false;
389
+ enumValues: [string, ...string[]];
390
+ baseColumn: never;
391
+ identity: undefined;
392
+ generated: undefined;
393
+ }, {}, {}>;
394
+ nonce: import("drizzle-orm/pg-core").PgColumn<{
395
+ name: "nonce";
396
+ tableName: "oauth_authorization_codes";
397
+ dataType: "string";
398
+ columnType: "PgText";
399
+ data: string;
400
+ driverParam: string;
401
+ notNull: false;
402
+ hasDefault: false;
403
+ isPrimaryKey: false;
404
+ isAutoincrement: false;
405
+ hasRuntimeDefault: false;
406
+ enumValues: [string, ...string[]];
407
+ baseColumn: never;
408
+ identity: undefined;
409
+ generated: undefined;
410
+ }, {}, {}>;
411
+ authTime: import("drizzle-orm/pg-core").PgColumn<{
412
+ name: "authTime";
413
+ tableName: "oauth_authorization_codes";
414
+ dataType: "date";
415
+ columnType: "PgTimestamp";
416
+ data: Date;
417
+ driverParam: string;
418
+ notNull: true;
419
+ hasDefault: true;
420
+ isPrimaryKey: false;
421
+ isAutoincrement: false;
422
+ hasRuntimeDefault: true;
423
+ enumValues: undefined;
424
+ baseColumn: never;
425
+ identity: undefined;
426
+ generated: undefined;
427
+ }, {}, {}>;
428
+ expiresAt: import("drizzle-orm/pg-core").PgColumn<{
429
+ name: "expiresAt";
430
+ tableName: "oauth_authorization_codes";
431
+ dataType: "date";
432
+ columnType: "PgTimestamp";
433
+ data: Date;
434
+ driverParam: string;
435
+ notNull: true;
436
+ hasDefault: false;
437
+ isPrimaryKey: false;
438
+ isAutoincrement: false;
439
+ hasRuntimeDefault: false;
440
+ enumValues: undefined;
441
+ baseColumn: never;
442
+ identity: undefined;
443
+ generated: undefined;
444
+ }, {}, {}>;
445
+ };
446
+ dialect: "pg";
447
+ }>;
448
+ /** Refresh tokens are rotated on use; reusing a rotated token revokes the whole chain. */
449
+ export declare const oauthRefreshTokens: import("drizzle-orm/pg-core").PgTableWithColumns<{
450
+ name: "oauth_refresh_tokens";
451
+ schema: undefined;
452
+ columns: {
453
+ id: import("drizzle-orm/pg-core").PgColumn<{
454
+ name: "id";
455
+ tableName: "oauth_refresh_tokens";
456
+ dataType: "string";
457
+ columnType: "PgText";
458
+ data: string;
459
+ driverParam: string;
460
+ notNull: true;
461
+ hasDefault: false;
462
+ isPrimaryKey: true;
463
+ isAutoincrement: false;
464
+ hasRuntimeDefault: false;
465
+ enumValues: [string, ...string[]];
466
+ baseColumn: never;
467
+ identity: undefined;
468
+ generated: undefined;
469
+ }, {}, {}>;
470
+ tokenHash: import("drizzle-orm/pg-core").PgColumn<{
471
+ name: "tokenHash";
472
+ tableName: "oauth_refresh_tokens";
473
+ dataType: "string";
474
+ columnType: "PgText";
475
+ data: string;
476
+ driverParam: string;
477
+ notNull: true;
478
+ hasDefault: false;
479
+ isPrimaryKey: false;
480
+ isAutoincrement: false;
481
+ hasRuntimeDefault: false;
482
+ enumValues: [string, ...string[]];
483
+ baseColumn: never;
484
+ identity: undefined;
485
+ generated: undefined;
486
+ }, {}, {}>;
487
+ applicationId: import("drizzle-orm/pg-core").PgColumn<{
488
+ name: "applicationId";
489
+ tableName: "oauth_refresh_tokens";
490
+ dataType: "string";
491
+ columnType: "PgText";
492
+ data: string;
493
+ driverParam: string;
494
+ notNull: true;
495
+ hasDefault: false;
496
+ isPrimaryKey: false;
497
+ isAutoincrement: false;
498
+ hasRuntimeDefault: false;
499
+ enumValues: [string, ...string[]];
500
+ baseColumn: never;
501
+ identity: undefined;
502
+ generated: undefined;
503
+ }, {}, {}>;
504
+ userId: import("drizzle-orm/pg-core").PgColumn<{
505
+ name: "userId";
506
+ tableName: "oauth_refresh_tokens";
507
+ dataType: "number";
508
+ columnType: "PgInteger";
509
+ data: number;
510
+ driverParam: string | number;
511
+ notNull: true;
512
+ hasDefault: false;
513
+ isPrimaryKey: false;
514
+ isAutoincrement: false;
515
+ hasRuntimeDefault: false;
516
+ enumValues: undefined;
517
+ baseColumn: never;
518
+ identity: undefined;
519
+ generated: undefined;
520
+ }, {}, {}>;
521
+ scope: import("drizzle-orm/pg-core").PgColumn<{
522
+ name: "scope";
523
+ tableName: "oauth_refresh_tokens";
524
+ dataType: "string";
525
+ columnType: "PgText";
526
+ data: string;
527
+ driverParam: string;
528
+ notNull: true;
529
+ hasDefault: false;
530
+ isPrimaryKey: false;
531
+ isAutoincrement: false;
532
+ hasRuntimeDefault: false;
533
+ enumValues: [string, ...string[]];
534
+ baseColumn: never;
535
+ identity: undefined;
536
+ generated: undefined;
537
+ }, {}, {}>;
538
+ familyId: import("drizzle-orm/pg-core").PgColumn<{
539
+ name: "familyId";
540
+ tableName: "oauth_refresh_tokens";
541
+ dataType: "string";
542
+ columnType: "PgText";
543
+ data: string;
544
+ driverParam: string;
545
+ notNull: true;
546
+ hasDefault: false;
547
+ isPrimaryKey: false;
548
+ isAutoincrement: false;
549
+ hasRuntimeDefault: false;
550
+ enumValues: [string, ...string[]];
551
+ baseColumn: never;
552
+ identity: undefined;
553
+ generated: undefined;
554
+ }, {}, {}>;
555
+ replacedBy: import("drizzle-orm/pg-core").PgColumn<{
556
+ name: "replacedBy";
557
+ tableName: "oauth_refresh_tokens";
558
+ dataType: "string";
559
+ columnType: "PgText";
560
+ data: string;
561
+ driverParam: string;
562
+ notNull: false;
563
+ hasDefault: false;
564
+ isPrimaryKey: false;
565
+ isAutoincrement: false;
566
+ hasRuntimeDefault: false;
567
+ enumValues: [string, ...string[]];
568
+ baseColumn: never;
569
+ identity: undefined;
570
+ generated: undefined;
571
+ }, {}, {}>;
572
+ authTime: import("drizzle-orm/pg-core").PgColumn<{
573
+ name: "authTime";
574
+ tableName: "oauth_refresh_tokens";
575
+ dataType: "date";
576
+ columnType: "PgTimestamp";
577
+ data: Date;
578
+ driverParam: string;
579
+ notNull: true;
580
+ hasDefault: true;
581
+ isPrimaryKey: false;
582
+ isAutoincrement: false;
583
+ hasRuntimeDefault: true;
584
+ enumValues: undefined;
585
+ baseColumn: never;
586
+ identity: undefined;
587
+ generated: undefined;
588
+ }, {}, {}>;
589
+ expiresAt: import("drizzle-orm/pg-core").PgColumn<{
590
+ name: "expiresAt";
591
+ tableName: "oauth_refresh_tokens";
592
+ dataType: "date";
593
+ columnType: "PgTimestamp";
594
+ data: Date;
595
+ driverParam: string;
596
+ notNull: true;
597
+ hasDefault: false;
598
+ isPrimaryKey: false;
599
+ isAutoincrement: false;
600
+ hasRuntimeDefault: false;
601
+ enumValues: undefined;
602
+ baseColumn: never;
603
+ identity: undefined;
604
+ generated: undefined;
605
+ }, {}, {}>;
606
+ revokedAt: import("drizzle-orm/pg-core").PgColumn<{
607
+ name: "revokedAt";
608
+ tableName: "oauth_refresh_tokens";
609
+ dataType: "date";
610
+ columnType: "PgTimestamp";
611
+ data: Date;
612
+ driverParam: string;
613
+ notNull: false;
614
+ hasDefault: false;
615
+ isPrimaryKey: false;
616
+ isAutoincrement: false;
617
+ hasRuntimeDefault: false;
618
+ enumValues: undefined;
619
+ baseColumn: never;
620
+ identity: undefined;
621
+ generated: undefined;
622
+ }, {}, {}>;
623
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
624
+ name: "createdAt";
625
+ tableName: "oauth_refresh_tokens";
626
+ dataType: "date";
627
+ columnType: "PgTimestamp";
628
+ data: Date;
629
+ driverParam: string;
630
+ notNull: true;
631
+ hasDefault: true;
632
+ isPrimaryKey: false;
633
+ isAutoincrement: false;
634
+ hasRuntimeDefault: true;
635
+ enumValues: undefined;
636
+ baseColumn: never;
637
+ identity: undefined;
638
+ generated: undefined;
639
+ }, {}, {}>;
640
+ };
641
+ dialect: "pg";
642
+ }>;
@@ -0,0 +1,60 @@
1
+ import { pgTable, text, integer, boolean, jsonb, timestamp, index } from "drizzle-orm/pg-core";
2
+ export const oauthApplications = pgTable("oauth_applications", {
3
+ /** `app_` + random id; it is the OAuth `client_id`. */
4
+ id: text().primaryKey(),
5
+ /** SHA-256 hex of the client secret. The secret itself is only shown once. */
6
+ secretHash: text().notNull(),
7
+ name: text().notNull(),
8
+ description: text(),
9
+ icon: text(),
10
+ priority: integer().notNull().default(0),
11
+ /** Origin of the application, no path. The redirect URI is derived from it. */
12
+ websiteUrl: text().notNull(),
13
+ /** Where "open application" links go; defaults to the website URL. */
14
+ loginUrl: text(),
15
+ /** e.g. `https://*.vercel.app`: preview deployments that may use the callback too. */
16
+ previewUrlPattern: text(),
17
+ /** Extra exact redirect URIs. */
18
+ redirectUris: jsonb().$type().notNull().$defaultFn(() => []),
19
+ /** Roles allowed to sign in. Empty = every signed-in user. Roles are resolved by the host (`oauth:user:roles`). */
20
+ allowedRoles: jsonb().$type().notNull().$defaultFn(() => []),
21
+ tags: jsonb().$type().notNull().$defaultFn(() => []),
22
+ ownerId: integer(),
23
+ isActive: boolean().notNull().default(true),
24
+ createdAt: timestamp({ withTimezone: true }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()),
25
+ updatedAt: timestamp({ withTimezone: true }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()).$onUpdateFn(() => /* @__PURE__ */ new Date())
26
+ }, (t) => [
27
+ index("oauth_application_active_idx").on(t.isActive, t.priority)
28
+ ]);
29
+ export const oauthAuthorizationCodes = pgTable("oauth_authorization_codes", {
30
+ codeHash: text().primaryKey(),
31
+ applicationId: text().notNull().references(() => oauthApplications.id, { onDelete: "cascade" }),
32
+ userId: integer().notNull(),
33
+ redirectUri: text().notNull(),
34
+ scope: text().notNull(),
35
+ codeChallenge: text().notNull(),
36
+ nonce: text(),
37
+ /** When the user signed in / approved; becomes `auth_time` in the ID token. */
38
+ authTime: timestamp({ withTimezone: true }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()),
39
+ expiresAt: timestamp({ withTimezone: true }).notNull()
40
+ }, (t) => [
41
+ index("oauth_code_application_idx").on(t.applicationId)
42
+ ]);
43
+ export const oauthRefreshTokens = pgTable("oauth_refresh_tokens", {
44
+ id: text().primaryKey(),
45
+ tokenHash: text().notNull().unique(),
46
+ applicationId: text().notNull().references(() => oauthApplications.id, { onDelete: "cascade" }),
47
+ userId: integer().notNull(),
48
+ scope: text().notNull(),
49
+ /** Shared by every token of one authorization, so a reuse can revoke them all. */
50
+ familyId: text().notNull(),
51
+ /** Id of the token that replaced this one when it was rotated. */
52
+ replacedBy: text(),
53
+ authTime: timestamp({ withTimezone: true }).notNull().$defaultFn(() => /* @__PURE__ */ new Date()),
54
+ expiresAt: timestamp({ withTimezone: true }).notNull(),
55
+ revokedAt: timestamp({ withTimezone: true }),
56
+ createdAt: timestamp({ withTimezone: true }).notNull().$defaultFn(() => /* @__PURE__ */ new Date())
57
+ }, (t) => [
58
+ index("oauth_refresh_user_idx").on(t.userId, t.applicationId),
59
+ index("oauth_refresh_family_idx").on(t.familyId)
60
+ ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frigear-nu/oauth-server",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "OAuth 2.0 / OpenID Connect server for the frigear ecosystem: register applications that users with certain roles may sign in to.",
5
5
  "url": "https://docs.frigear.dev/modules/oauth-server",
6
6
  "author": {
@@ -37,12 +37,12 @@
37
37
  "playground"
38
38
  ],
39
39
  "dependencies": {
40
- "@frigear-nu/admin": "0.0.2",
41
- "@frigear-nu/module-kit": "0.1.7",
42
- "@frigear-nu/ui": "0.0.7",
43
- "@frigear-nu/auth": "0.0.3",
44
- "@frigear-nu/mcp": "0.0.3",
45
- "@frigear-nu/users": "1.0.9",
40
+ "@frigear-nu/admin": "0.0.4",
41
+ "@frigear-nu/module-kit": "1.0.1",
42
+ "@frigear-nu/ui": "0.0.9",
43
+ "@frigear-nu/auth": "0.0.5",
44
+ "@frigear-nu/mcp": "0.0.5",
45
+ "@frigear-nu/users": "1.0.11",
46
46
  "@libsql/client": "^0.18.0",
47
47
  "@nuxt/kit": "^4.6.0",
48
48
  "drizzle-kit": "^0.31.11",
@@ -52,7 +52,7 @@
52
52
  "zod": "^4.6.5"
53
53
  },
54
54
  "peerDependencies": {
55
- "@frigear-nu/menu": "0.0.9",
55
+ "@frigear-nu/menu": "0.0.11",
56
56
  "@nuxt/ui": "^4.10.0",
57
57
  "@nuxthub/core": "^0.10.8"
58
58
  },
@@ -65,7 +65,7 @@
65
65
  }
66
66
  },
67
67
  "devDependencies": {
68
- "@frigear-nu/menu": "0.0.9",
68
+ "@frigear-nu/menu": "0.0.11",
69
69
  "@nuxt/devtools": "^3.4.2",
70
70
  "@nuxt/eslint-config": "^1.17.0",
71
71
  "@nuxt/module-builder": "^1.0.3",