@kurdel/auth-db 0.1.0-beta.3 → 0.1.0-beta.4
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/README.md +34 -9
- package/lib/auth-database-module.d.ts +2 -0
- package/lib/auth-database-module.js +48 -9
- package/lib/auth-database-module.js.map +1 -1
- package/lib/auth-database-tables.d.ts +4 -0
- package/lib/auth-database-tables.js +4 -0
- package/lib/auth-database-tables.js.map +1 -1
- package/lib/database-api-key-repository.d.ts +2 -2
- package/lib/database-api-key-repository.js.map +1 -1
- package/lib/database-api-key-service.d.ts +3 -3
- package/lib/database-api-key-service.js.map +1 -1
- package/lib/database-api-key-usage-recorder.d.ts +2 -2
- package/lib/database-api-key-usage-recorder.js.map +1 -1
- package/lib/database-auth-event-store.d.ts +3 -3
- package/lib/database-auth-event-store.js.map +1 -1
- package/lib/database-auth-user-repository.d.ts +2 -2
- package/lib/database-auth-user-repository.js +18 -1
- package/lib/database-auth-user-repository.js.map +1 -1
- package/lib/database-jwt-session-repository.d.ts +10 -0
- package/lib/database-jwt-session-repository.js +26 -0
- package/lib/database-jwt-session-repository.js.map +1 -0
- package/lib/database-jwt-session-service.d.ts +31 -0
- package/lib/database-jwt-session-service.js +74 -0
- package/lib/database-jwt-session-service.js.map +1 -0
- package/lib/database-password-credential-repository.d.ts +9 -0
- package/lib/database-password-credential-repository.js +19 -0
- package/lib/database-password-credential-repository.js.map +1 -0
- package/lib/database-password-service.d.ts +14 -0
- package/lib/database-password-service.js +34 -0
- package/lib/database-password-service.js.map +1 -0
- package/lib/database-user-service.d.ts +12 -2
- package/lib/database-user-service.js +83 -5
- package/lib/database-user-service.js.map +1 -1
- package/lib/index.d.ts +4 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -1
- package/lib/tokens.d.ts +3 -0
- package/lib/tokens.js +3 -0
- package/lib/tokens.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Database-backed repository adapters for `@kurdel/auth`.
|
|
4
4
|
|
|
5
5
|
The package keeps authentication strategies storage-agnostic while providing
|
|
6
|
-
standard implementations over Kurdel's `
|
|
6
|
+
standard implementations over Kurdel's `Database` contract.
|
|
7
7
|
|
|
8
8
|
`DatabaseAuthUserRepository` resolves the current user and roles, while
|
|
9
9
|
`DatabaseApiKeyRepository` resolves safe credential metadata including its
|
|
@@ -17,6 +17,21 @@ role assignments, and issue, list, or revoke API keys. `AuthDatabaseModule`
|
|
|
17
17
|
registers both services as `AUTH_DB_TOKENS.UserService` and
|
|
18
18
|
`AUTH_DB_TOKENS.ApiKeyService`.
|
|
19
19
|
|
|
20
|
+
The module also exposes `DatabaseJwtSessionRepository` and
|
|
21
|
+
`DatabaseJwtSessionService`. Applications can create a server-side session,
|
|
22
|
+
place its ID in the JWT `jti` claim, configure that repository on `JwtStrategy`,
|
|
23
|
+
and revoke the session before the signed token expires. Session creation and
|
|
24
|
+
revocation are transactional and emit sanitized audit events when auditing is
|
|
25
|
+
enabled.
|
|
26
|
+
|
|
27
|
+
Password authentication uses a separate `password_credentials` table rather
|
|
28
|
+
than adding secrets to the user profile. `DatabasePasswordCredentialRepository`
|
|
29
|
+
resolves credentials by case-insensitive email, while
|
|
30
|
+
`DatabasePasswordService.set()` hashes and upserts a user's password.
|
|
31
|
+
`AuthDatabaseModule` wires both to `PasswordAuthenticationService` and uses
|
|
32
|
+
`ScryptPasswordHasher` by default. Applications can replace it with
|
|
33
|
+
`passwordHasher` in the module configuration.
|
|
34
|
+
|
|
20
35
|
User listings support status and text filters, stable sorting, and offset
|
|
21
36
|
pagination. `DatabaseUserService` also provides transactional bulk status,
|
|
22
37
|
role, and deletion operations; role lifecycle management with usage counts;
|
|
@@ -25,6 +40,14 @@ failures. `DatabaseAuthEventStore.listPage()` exposes global or per-user audit
|
|
|
25
40
|
history with type, date range, and offset filters while the existing `list()`
|
|
26
41
|
method remains available for simple queries.
|
|
27
42
|
|
|
43
|
+
Applications may also model authorization as roles containing permissions.
|
|
44
|
+
`DatabaseUserService.listPermissions()` exposes the application-owned catalog,
|
|
45
|
+
and `setRolePermissions()` replaces a role's assignments transactionally.
|
|
46
|
+
`DatabaseAuthUserRepository` resolves the union of permissions from every
|
|
47
|
+
current role into `AuthUser.permissions`. The application schema must provide
|
|
48
|
+
`permissions` and `role_permissions` tables; the runnable sample contains the
|
|
49
|
+
corresponding migration and seed data.
|
|
50
|
+
|
|
28
51
|
`DatabaseApiKeyUsageRecorder` updates `last_used_at` after successful
|
|
29
52
|
authentication. `AuthDatabaseModule` exposes it through
|
|
30
53
|
`AUTH_TOKENS.ApiKeyUsageRecorder`, ready to pass to `ApiKeyStrategy` as its
|
|
@@ -44,7 +67,7 @@ authorization events. The application must provide the configured
|
|
|
44
67
|
columns and indexes.
|
|
45
68
|
|
|
46
69
|
API-key issue or revocation and its database audit event run in the same
|
|
47
|
-
`
|
|
70
|
+
`Database.transaction` callback. If audit persistence fails, the credential
|
|
48
71
|
mutation is rolled back and the service returns the original error. User
|
|
49
72
|
creation, role replacement, profile updates, and deletion use the same
|
|
50
73
|
transaction API for their multi-statement operations.
|
|
@@ -59,12 +82,13 @@ const modules = [
|
|
|
59
82
|
strategies: [
|
|
60
83
|
{
|
|
61
84
|
name: 'api-key',
|
|
62
|
-
useFactory: ioc =>
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
85
|
+
useFactory: ioc =>
|
|
86
|
+
new ApiKeyStrategy({
|
|
87
|
+
header: 'x-api-key',
|
|
88
|
+
credentials: ioc.get(AUTH_TOKENS.ApiKeyRepository),
|
|
89
|
+
users: ioc.get(AUTH_TOKENS.UserRepository),
|
|
90
|
+
usage: ioc.get(AUTH_TOKENS.ApiKeyUsageRecorder),
|
|
91
|
+
}),
|
|
68
92
|
},
|
|
69
93
|
],
|
|
70
94
|
}),
|
|
@@ -84,7 +108,8 @@ new AuthDatabaseModule({
|
|
|
84
108
|
});
|
|
85
109
|
```
|
|
86
110
|
|
|
87
|
-
By default, the package expects `users`, `roles`, `user_roles`,
|
|
111
|
+
By default, the package expects `users`, `roles`, `user_roles`, `api_keys`, and
|
|
112
|
+
`password_credentials`
|
|
88
113
|
tables and uses SHA-256 for API-key lookup. Schema ownership remains with the
|
|
89
114
|
application; see `sample/auth-db` for migrations and a runnable example.
|
|
90
115
|
The management services expect the profile and credential metadata columns
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { type PasswordHasher } from '@kurdel/auth';
|
|
1
2
|
import { ModulePriority, type AppModule, type ProviderConfig } from '@kurdel/core/app';
|
|
2
3
|
import { type ApiKeyHasher } from './api-key-hasher.js';
|
|
3
4
|
import type { AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
5
|
export interface AuthDatabaseModuleConfig {
|
|
5
6
|
tables?: Partial<AuthDatabaseTables>;
|
|
6
7
|
apiKeyHasher?: ApiKeyHasher;
|
|
8
|
+
passwordHasher?: PasswordHasher;
|
|
7
9
|
/** Enables persistence of sanitized authentication audit events. */
|
|
8
10
|
audit?: boolean;
|
|
9
11
|
}
|
|
@@ -1,27 +1,37 @@
|
|
|
1
|
-
import { AUTH_TOKENS } from '@kurdel/auth';
|
|
1
|
+
import { AUTH_TOKENS, PasswordAuthenticationService, ScryptPasswordHasher, } from '@kurdel/auth';
|
|
2
2
|
import { ModulePriority } from '@kurdel/core/app';
|
|
3
|
-
import {
|
|
3
|
+
import { Database } from '@kurdel/db';
|
|
4
4
|
import { Sha256ApiKeyHasher } from './api-key-hasher.js';
|
|
5
5
|
import { DatabaseApiKeyRepository } from './database-api-key-repository.js';
|
|
6
6
|
import { DatabaseApiKeyService } from './database-api-key-service.js';
|
|
7
7
|
import { DatabaseApiKeyUsageRecorder } from './database-api-key-usage-recorder.js';
|
|
8
8
|
import { DatabaseAuthUserRepository } from './database-auth-user-repository.js';
|
|
9
9
|
import { DatabaseAuthEventStore } from './database-auth-event-store.js';
|
|
10
|
+
import { DatabaseJwtSessionRepository } from './database-jwt-session-repository.js';
|
|
11
|
+
import { DatabaseJwtSessionService } from './database-jwt-session-service.js';
|
|
12
|
+
import { DatabasePasswordCredentialRepository } from './database-password-credential-repository.js';
|
|
13
|
+
import { DatabasePasswordService } from './database-password-service.js';
|
|
10
14
|
import { DatabaseUserService } from './database-user-service.js';
|
|
11
15
|
import { AUTH_DB_TOKENS } from './tokens.js';
|
|
12
16
|
export class AuthDatabaseModule {
|
|
13
17
|
constructor(config = {}) {
|
|
14
18
|
this.priority = ModulePriority.User;
|
|
15
|
-
this.imports = { db:
|
|
19
|
+
this.imports = { db: Database };
|
|
16
20
|
const tables = config.tables ?? {};
|
|
17
21
|
const hasher = config.apiKeyHasher ?? new Sha256ApiKeyHasher();
|
|
22
|
+
const passwordHasher = config.passwordHasher ?? new ScryptPasswordHasher();
|
|
18
23
|
this.exports = {
|
|
19
24
|
userRepository: AUTH_TOKENS.UserRepository,
|
|
20
25
|
apiKeyRepository: AUTH_TOKENS.ApiKeyRepository,
|
|
21
26
|
apiKeyUsageRecorder: AUTH_TOKENS.ApiKeyUsageRecorder,
|
|
27
|
+
jwtSessionRepository: AUTH_TOKENS.JwtSessionRepository,
|
|
28
|
+
passwordCredentialRepository: AUTH_TOKENS.PasswordCredentialRepository,
|
|
29
|
+
passwordAuthenticationService: AUTH_TOKENS.PasswordAuthenticationService,
|
|
22
30
|
apiKeyHasher: AUTH_DB_TOKENS.ApiKeyHasher,
|
|
23
31
|
userService: AUTH_DB_TOKENS.UserService,
|
|
24
32
|
apiKeyService: AUTH_DB_TOKENS.ApiKeyService,
|
|
33
|
+
jwtSessionService: AUTH_DB_TOKENS.JwtSessionService,
|
|
34
|
+
passwordService: AUTH_DB_TOKENS.PasswordService,
|
|
25
35
|
...(config.audit ? { eventStore: AUTH_DB_TOKENS.EventStore } : {}),
|
|
26
36
|
};
|
|
27
37
|
this.providers = [
|
|
@@ -29,38 +39,67 @@ export class AuthDatabaseModule {
|
|
|
29
39
|
provide: AUTH_DB_TOKENS.ApiKeyHasher,
|
|
30
40
|
useInstance: hasher,
|
|
31
41
|
},
|
|
42
|
+
{
|
|
43
|
+
provide: AUTH_DB_TOKENS.PasswordHasher,
|
|
44
|
+
useInstance: passwordHasher,
|
|
45
|
+
},
|
|
32
46
|
{
|
|
33
47
|
provide: AUTH_TOKENS.UserRepository,
|
|
34
|
-
useFactory: ioc => new DatabaseAuthUserRepository(ioc.get(
|
|
48
|
+
useFactory: ioc => new DatabaseAuthUserRepository(ioc.get(Database), tables),
|
|
35
49
|
singleton: true,
|
|
36
50
|
},
|
|
37
51
|
{
|
|
38
52
|
provide: AUTH_TOKENS.ApiKeyRepository,
|
|
39
|
-
useFactory: ioc => new DatabaseApiKeyRepository(ioc.get(
|
|
53
|
+
useFactory: ioc => new DatabaseApiKeyRepository(ioc.get(Database), ioc.get(AUTH_DB_TOKENS.ApiKeyHasher), tables),
|
|
40
54
|
singleton: true,
|
|
41
55
|
},
|
|
42
56
|
{
|
|
43
57
|
provide: AUTH_TOKENS.ApiKeyUsageRecorder,
|
|
44
|
-
useFactory: ioc => new DatabaseApiKeyUsageRecorder(ioc.get(
|
|
58
|
+
useFactory: ioc => new DatabaseApiKeyUsageRecorder(ioc.get(Database), tables),
|
|
59
|
+
singleton: true,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
provide: AUTH_TOKENS.JwtSessionRepository,
|
|
63
|
+
useFactory: ioc => new DatabaseJwtSessionRepository(ioc.get(Database), tables),
|
|
64
|
+
singleton: true,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
provide: AUTH_TOKENS.PasswordCredentialRepository,
|
|
68
|
+
useFactory: ioc => new DatabasePasswordCredentialRepository(ioc.get(Database), tables),
|
|
69
|
+
singleton: true,
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
provide: AUTH_TOKENS.PasswordAuthenticationService,
|
|
73
|
+
useFactory: ioc => new PasswordAuthenticationService(ioc.get(AUTH_TOKENS.PasswordCredentialRepository), ioc.get(AUTH_TOKENS.UserRepository), ioc.get(AUTH_DB_TOKENS.PasswordHasher)),
|
|
45
74
|
singleton: true,
|
|
46
75
|
},
|
|
47
76
|
{
|
|
48
77
|
provide: AUTH_DB_TOKENS.UserService,
|
|
49
|
-
useFactory: ioc => new DatabaseUserService(ioc.get(
|
|
78
|
+
useFactory: ioc => new DatabaseUserService(ioc.get(Database), tables),
|
|
50
79
|
singleton: true,
|
|
51
80
|
},
|
|
52
81
|
...(config.audit
|
|
53
82
|
? [
|
|
54
83
|
{
|
|
55
84
|
provide: AUTH_DB_TOKENS.EventStore,
|
|
56
|
-
useFactory: (ioc) => new DatabaseAuthEventStore(ioc.get(
|
|
85
|
+
useFactory: (ioc) => new DatabaseAuthEventStore(ioc.get(Database), tables),
|
|
57
86
|
singleton: true,
|
|
58
87
|
},
|
|
59
88
|
]
|
|
60
89
|
: []),
|
|
61
90
|
{
|
|
62
91
|
provide: AUTH_DB_TOKENS.ApiKeyService,
|
|
63
|
-
useFactory: ioc => new DatabaseApiKeyService(ioc.get(
|
|
92
|
+
useFactory: ioc => new DatabaseApiKeyService(ioc.get(Database), ioc.get(AUTH_DB_TOKENS.ApiKeyHasher), tables, config.audit ? ioc.get(AUTH_DB_TOKENS.EventStore) : undefined),
|
|
93
|
+
singleton: true,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
provide: AUTH_DB_TOKENS.JwtSessionService,
|
|
97
|
+
useFactory: ioc => new DatabaseJwtSessionService(ioc.get(Database), tables, config.audit ? ioc.get(AUTH_DB_TOKENS.EventStore) : undefined),
|
|
98
|
+
singleton: true,
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
provide: AUTH_DB_TOKENS.PasswordService,
|
|
102
|
+
useFactory: ioc => new DatabasePasswordService(ioc.get(Database), ioc.get(AUTH_DB_TOKENS.PasswordHasher), tables),
|
|
64
103
|
singleton: true,
|
|
65
104
|
},
|
|
66
105
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-database-module.js","sourceRoot":"","sources":["../src/auth-database-module.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"auth-database-module.js","sourceRoot":"","sources":["../src/auth-database-module.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,11 @@ export interface AuthDatabaseTables {
|
|
|
2
2
|
users: string;
|
|
3
3
|
roles: string;
|
|
4
4
|
userRoles: string;
|
|
5
|
+
permissions: string;
|
|
6
|
+
rolePermissions: string;
|
|
5
7
|
apiKeys: string;
|
|
8
|
+
jwtSessions: string;
|
|
9
|
+
passwordCredentials: string;
|
|
6
10
|
authEvents: string;
|
|
7
11
|
}
|
|
8
12
|
export declare const DEFAULT_AUTH_DATABASE_TABLES: Readonly<AuthDatabaseTables>;
|
|
@@ -2,7 +2,11 @@ export const DEFAULT_AUTH_DATABASE_TABLES = {
|
|
|
2
2
|
users: 'users',
|
|
3
3
|
roles: 'roles',
|
|
4
4
|
userRoles: 'user_roles',
|
|
5
|
+
permissions: 'permissions',
|
|
6
|
+
rolePermissions: 'role_permissions',
|
|
5
7
|
apiKeys: 'api_keys',
|
|
8
|
+
jwtSessions: 'jwt_sessions',
|
|
9
|
+
passwordCredentials: 'password_credentials',
|
|
6
10
|
authEvents: 'auth_events',
|
|
7
11
|
};
|
|
8
12
|
export function resolveAuthDatabaseTables(tables = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-database-tables.js","sourceRoot":"","sources":["../src/auth-database-tables.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-database-tables.js","sourceRoot":"","sources":["../src/auth-database-tables.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,4BAA4B,GAAiC;IACxE,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,kBAAkB;IACnC,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,cAAc;IAC3B,mBAAmB,EAAE,sBAAsB;IAC3C,UAAU,EAAE,aAAa;CAC1B,CAAC;AAEF,MAAM,UAAU,yBAAyB,CACvC,SAAsC,EAAE;IAExC,MAAM,QAAQ,GAAG,EAAE,GAAG,4BAA4B,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,UAAkB;IAC7C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,qCAAqC,UAAU,GAAG,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { ApiKeyCredential, ApiKeyRepository } from '@kurdel/auth';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Database } from '@kurdel/db';
|
|
3
3
|
import type { ApiKeyHasher } from './api-key-hasher.js';
|
|
4
4
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
5
5
|
export declare class DatabaseApiKeyRepository implements ApiKeyRepository {
|
|
6
6
|
private readonly db;
|
|
7
7
|
private readonly hasher;
|
|
8
8
|
private readonly tables;
|
|
9
|
-
constructor(db:
|
|
9
|
+
constructor(db: Database, hasher: ApiKeyHasher, tables?: Partial<AuthDatabaseTables>);
|
|
10
10
|
findByKey(key: string): Promise<ApiKeyCredential | null>;
|
|
11
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-api-key-repository.js","sourceRoot":"","sources":["../src/database-api-key-repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAS/F,MAAM,OAAO,wBAAwB;IAGnC,YACmB,
|
|
1
|
+
{"version":3,"file":"database-api-key-repository.js","sourceRoot":"","sources":["../src/database-api-key-repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAS/F,MAAM,OAAO,wBAAwB;IAGnC,YACmB,EAAY,EACZ,MAAoB,EACrC,SAAsC,EAAE;QAFvB,OAAE,GAAF,EAAE,CAAU;QACZ,WAAM,GAAN,MAAM,CAAc;QAGrC,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW;QACzB,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAChC,GAAG,EAAE;gBACH,wCAAwC;gBACxC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;gBAC7B,qBAAqB;aACtB,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAChC,CAAC,CAA6B,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ;YACnC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { AuthEvent, AuthEventSink } from '@kurdel/auth';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Database, DatabaseSession } from '@kurdel/db';
|
|
3
3
|
import type { ApiKeyHasher } from './api-key-hasher.js';
|
|
4
4
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
5
5
|
type TransactionalAuthEventSink = AuthEventSink & {
|
|
6
|
-
report(event: AuthEvent, database?:
|
|
6
|
+
report(event: AuthEvent, database?: DatabaseSession): Promise<void> | void;
|
|
7
7
|
};
|
|
8
8
|
export interface CreateApiKeyInput {
|
|
9
9
|
userId: number;
|
|
@@ -43,7 +43,7 @@ export declare class DatabaseApiKeyService {
|
|
|
43
43
|
private readonly events?;
|
|
44
44
|
private readonly now;
|
|
45
45
|
private readonly tables;
|
|
46
|
-
constructor(db:
|
|
46
|
+
constructor(db: Database, hasher: ApiKeyHasher, tables?: Partial<AuthDatabaseTables>, events?: TransactionalAuthEventSink | undefined, now?: () => Date);
|
|
47
47
|
list(userId: number): Promise<ApiKeyMetadata[]>;
|
|
48
48
|
create(input: CreateApiKeyInput): Promise<CreatedApiKey>;
|
|
49
49
|
revoke(userId: number, apiKeyId: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-api-key-service.js","sourceRoot":"","sources":["../src/database-api-key-service.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAMjC,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AA0C/F,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAqB,MAAc;QACjC,KAAK,CAAC,gBAAgB,MAAM,iBAAiB,CAAC,CAAC;QAD5B,WAAM,GAAN,MAAM,CAAQ;IAEnC,CAAC;CACF;AAED,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAqB,MAAc;QACjC,KAAK,CAAC,SAAS,MAAM,iBAAiB,CAAC,CAAC;QADrB,WAAM,GAAN,MAAM,CAAQ;IAEnC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YACW,MAAc,EACd,QAAgB;QAEzB,KAAK,CAAC,YAAY,QAAQ,6BAA6B,MAAM,GAAG,CAAC,CAAC;QAHzD,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAQ;IAG3B,CAAC;CACF;AAED,MAAM,OAAO,qBAAqB;IAGhC,YACmB,
|
|
1
|
+
{"version":3,"file":"database-api-key-service.js","sourceRoot":"","sources":["../src/database-api-key-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { ApiKeyUsageRecorder } from '@kurdel/auth';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Database } from '@kurdel/db';
|
|
3
3
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
4
|
/** Records the most recent successful use of a database-backed API key. */
|
|
5
5
|
export declare class DatabaseApiKeyUsageRecorder implements ApiKeyUsageRecorder {
|
|
6
6
|
private readonly db;
|
|
7
7
|
private readonly tables;
|
|
8
|
-
constructor(db:
|
|
8
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
9
9
|
recordUsage(credentialId: string, usedAt: Date): Promise<void>;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-api-key-usage-recorder.js","sourceRoot":"","sources":["../src/database-api-key-usage-recorder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAE/F,2EAA2E;AAC3E,MAAM,OAAO,2BAA2B;IAGtC,YACmB,
|
|
1
|
+
{"version":3,"file":"database-api-key-usage-recorder.js","sourceRoot":"","sources":["../src/database-api-key-usage-recorder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAE/F,2EAA2E;AAC3E,MAAM,OAAO,2BAA2B;IAGtC,YACmB,EAAY,EAC7B,SAAsC,EAAE;QADvB,OAAE,GAAF,EAAE,CAAU;QAG7B,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAAoB,EAAE,MAAY;QAClD,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAChB,GAAG,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,qCAAqC;YACvE,MAAM,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC;SAC7C,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AuthEvent, AuthEventSink } from '@kurdel/auth';
|
|
2
|
-
import type {
|
|
2
|
+
import type { Database, DatabaseSession } from '@kurdel/db';
|
|
3
3
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
4
|
export type StoredAuthEvent = {
|
|
5
5
|
id: number;
|
|
@@ -30,8 +30,8 @@ export type AuthEventList = {
|
|
|
30
30
|
export declare class DatabaseAuthEventStore implements AuthEventSink {
|
|
31
31
|
private readonly db;
|
|
32
32
|
private readonly tables;
|
|
33
|
-
constructor(db:
|
|
34
|
-
report(event: AuthEvent, database?:
|
|
33
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
34
|
+
report(event: AuthEvent, database?: DatabaseSession): Promise<void>;
|
|
35
35
|
list(input?: ListAuthEventsInput): Promise<StoredAuthEvent[]>;
|
|
36
36
|
listPage(input?: ListAuthEventsInput): Promise<AuthEventList>;
|
|
37
37
|
private serializeDate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-auth-event-store.js","sourceRoot":"","sources":["../src/database-auth-event-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AA0C/F,kEAAkE;AAClE,MAAM,OAAO,sBAAsB;IAGjC,YACmB,
|
|
1
|
+
{"version":3,"file":"database-auth-event-store.js","sourceRoot":"","sources":["../src/database-auth-event-store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AA0C/F,kEAAkE;AAClE,MAAM,OAAO,sBAAsB;IAGjC,YACmB,EAAY,EAC7B,SAAsC,EAAE;QADvB,OAAE,GAAF,EAAE,CAAU;QAG7B,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAgB,EAAE,WAA4B,IAAI,CAAC,EAAE;QAChE,MAAM,QAAQ,CAAC,GAAG,CAAC;YACjB,GAAG,EAAE;gBACH,eAAe,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;gBACvC,wFAAwF;gBACxF,kCAAkC;aACnC,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE;gBACN,KAAK,CAAC,IAAI;gBACV,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE;gBAC9B,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;gBACrD,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;gBACxD,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI;gBAC9B,KAAK,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI;gBAC5B,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;gBACvC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;aAClD;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAA6B,EAAE;QACxC,OAAO,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAA6B,EAAE;QAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YACjC,GAAG,EAAE;gBACH,kDAAkD;gBAClD,gDAAgD;gBAChD,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,EAAE;gBACzC,sDAAsD;aACvD,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;SACnC,CAAC,CAAsB,CAAC;QACzB,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAC/B,GAAG,EAAE,iCAAiC,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK,GAAG;YACxE,MAAM;SACP,CAAC,CAAsB,CAAC;QAEzB,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7B,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,MAAM,CAAC,WAAW;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,MAAM,EAAE,MAAM,CAAC,OAAO;gBACtB,cAAc,EAAE,MAAM,CAAC,eAAe;gBACtC,YAAY,EAAE,MAAM,CAAC,aAAa;gBAClC,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC,CAAC;YACH,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK;YACL,MAAM;SACP,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,KAAoB;QACxC,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,CAAC;CACF"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { AuthUserRepository } from '@kurdel/auth';
|
|
2
2
|
import type { AuthUser } from '@kurdel/common';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Database } from '@kurdel/db';
|
|
4
4
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
5
5
|
export declare class DatabaseAuthUserRepository implements AuthUserRepository {
|
|
6
6
|
private readonly db;
|
|
7
7
|
private readonly tables;
|
|
8
|
-
constructor(db:
|
|
8
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
9
9
|
findById(id: string | number): Promise<AuthUser | null>;
|
|
10
10
|
}
|
|
@@ -22,7 +22,24 @@ export class DatabaseAuthUserRepository {
|
|
|
22
22
|
].join(' '),
|
|
23
23
|
params: [user.id],
|
|
24
24
|
}));
|
|
25
|
-
|
|
25
|
+
const permissions = (await this.db.all({
|
|
26
|
+
sql: [
|
|
27
|
+
`SELECT DISTINCT ${this.tables.permissions}.name`,
|
|
28
|
+
`FROM ${this.tables.permissions}`,
|
|
29
|
+
`INNER JOIN ${this.tables.rolePermissions}`,
|
|
30
|
+
`ON ${this.tables.rolePermissions}.permission_id = ${this.tables.permissions}.id`,
|
|
31
|
+
`INNER JOIN ${this.tables.userRoles}`,
|
|
32
|
+
`ON ${this.tables.userRoles}.role_id = ${this.tables.rolePermissions}.role_id`,
|
|
33
|
+
`WHERE ${this.tables.userRoles}.user_id = ?`,
|
|
34
|
+
`ORDER BY ${this.tables.permissions}.name;`,
|
|
35
|
+
].join(' '),
|
|
36
|
+
params: [user.id],
|
|
37
|
+
}));
|
|
38
|
+
return {
|
|
39
|
+
id: user.id,
|
|
40
|
+
roles: roles.map(role => role.name),
|
|
41
|
+
permissions: permissions.map(permission => permission.name),
|
|
42
|
+
};
|
|
26
43
|
}
|
|
27
44
|
}
|
|
28
45
|
//# sourceMappingURL=database-auth-user-repository.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-auth-user-repository.js","sourceRoot":"","sources":["../src/database-auth-user-repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"database-auth-user-repository.js","sourceRoot":"","sources":["../src/database-auth-user-repository.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAM/F,MAAM,OAAO,0BAA0B;IAGrC,YACmB,EAAY,EAC7B,SAAsC,EAAE;QADvB,OAAE,GAAF,EAAE,CAAU;QAG7B,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAmB;QAChC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAC9B,GAAG,EAAE,0BAA0B,IAAI,CAAC,MAAM,CAAC,KAAK,gBAAgB;YAChE,MAAM,EAAE,CAAC,EAAE,CAAC;SACb,CAAC,CAA2B,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEnD,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAC/B,GAAG,EAAE;gBACH,UAAU,IAAI,CAAC,MAAM,CAAC,KAAK,OAAO;gBAClC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBAC3B,cAAc,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBACrC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,cAAc,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK;gBAC/D,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,cAAc;gBAC5C,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;aACtC,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;SAClB,CAAC,CAAiB,CAAC;QAEpB,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YACrC,GAAG,EAAE;gBACH,mBAAmB,IAAI,CAAC,MAAM,CAAC,WAAW,OAAO;gBACjD,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;gBACjC,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;gBAC3C,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,oBAAoB,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK;gBACjF,cAAc,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;gBACrC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,cAAc,IAAI,CAAC,MAAM,CAAC,eAAe,UAAU;gBAC9E,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,cAAc;gBAC5C,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,QAAQ;aAC5C,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;SAClB,CAAC,CAAuB,CAAC;QAE1B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;SAC5D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { JwtSession, JwtSessionRepository } from '@kurdel/auth';
|
|
2
|
+
import type { Database } from '@kurdel/db';
|
|
3
|
+
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
|
+
/** Resolves persisted JWT sessions for token revocation checks. */
|
|
5
|
+
export declare class DatabaseJwtSessionRepository implements JwtSessionRepository {
|
|
6
|
+
private readonly db;
|
|
7
|
+
private readonly tables;
|
|
8
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
9
|
+
findById(id: string): Promise<JwtSession | null>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { resolveAuthDatabaseTables } from './auth-database-tables.js';
|
|
2
|
+
/** Resolves persisted JWT sessions for token revocation checks. */
|
|
3
|
+
export class DatabaseJwtSessionRepository {
|
|
4
|
+
constructor(db, tables = {}) {
|
|
5
|
+
this.db = db;
|
|
6
|
+
this.tables = resolveAuthDatabaseTables(tables);
|
|
7
|
+
}
|
|
8
|
+
async findById(id) {
|
|
9
|
+
const record = await this.db.get({
|
|
10
|
+
sql: [
|
|
11
|
+
'SELECT id, user_id, status, expires_at',
|
|
12
|
+
`FROM ${this.tables.jwtSessions} WHERE id = ?;`,
|
|
13
|
+
].join(' '),
|
|
14
|
+
params: [id],
|
|
15
|
+
});
|
|
16
|
+
if (!record)
|
|
17
|
+
return null;
|
|
18
|
+
return {
|
|
19
|
+
id: record.id,
|
|
20
|
+
userId: record.user_id,
|
|
21
|
+
revoked: record.status !== 'active',
|
|
22
|
+
...(record.expires_at ? { expiresAt: new Date(record.expires_at) } : {}),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=database-jwt-session-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-jwt-session-repository.js","sourceRoot":"","sources":["../src/database-jwt-session-repository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAS/F,mEAAmE;AACnE,MAAM,OAAO,4BAA4B;IAGvC,YACmB,EAAY,EAC7B,SAAsC,EAAE;QADvB,OAAE,GAAF,EAAE,CAAU;QAG7B,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAC/B,GAAG,EAAE;gBACH,wCAAwC;gBACxC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,gBAAgB;aAChD,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,EAAE,CAAC;SACb,CAAiC,CAAC;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE;YACb,MAAM,EAAE,MAAM,CAAC,OAAO;YACtB,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ;YACnC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AuthEvent, AuthEventSink } from '@kurdel/auth';
|
|
2
|
+
import type { Database, DatabaseSession } from '@kurdel/db';
|
|
3
|
+
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
|
+
type TransactionalAuthEventSink = AuthEventSink & {
|
|
5
|
+
report(event: AuthEvent, database?: DatabaseSession): Promise<void> | void;
|
|
6
|
+
};
|
|
7
|
+
export type CreatedJwtSession = {
|
|
8
|
+
id: string;
|
|
9
|
+
userId: number;
|
|
10
|
+
expiresAt: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class JwtSessionNotFoundError extends Error {
|
|
13
|
+
readonly userId: number;
|
|
14
|
+
readonly sessionId: string;
|
|
15
|
+
constructor(userId: number, sessionId: string);
|
|
16
|
+
}
|
|
17
|
+
export declare class ActiveJwtSessionUserNotFoundError extends Error {
|
|
18
|
+
readonly userId: number;
|
|
19
|
+
constructor(userId: number);
|
|
20
|
+
}
|
|
21
|
+
/** Creates and revokes the server-side state referenced by JWT `jti` claims. */
|
|
22
|
+
export declare class DatabaseJwtSessionService {
|
|
23
|
+
private readonly db;
|
|
24
|
+
private readonly events?;
|
|
25
|
+
private readonly now;
|
|
26
|
+
private readonly tables;
|
|
27
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>, events?: TransactionalAuthEventSink | undefined, now?: () => Date);
|
|
28
|
+
create(userId: number, expiresAt: Date): Promise<CreatedJwtSession>;
|
|
29
|
+
revoke(userId: number, sessionId: string): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { resolveAuthDatabaseTables } from './auth-database-tables.js';
|
|
3
|
+
export class JwtSessionNotFoundError extends Error {
|
|
4
|
+
constructor(userId, sessionId) {
|
|
5
|
+
super(`JWT session '${sessionId}' was not found for user '${userId}'`);
|
|
6
|
+
this.userId = userId;
|
|
7
|
+
this.sessionId = sessionId;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export class ActiveJwtSessionUserNotFoundError extends Error {
|
|
11
|
+
constructor(userId) {
|
|
12
|
+
super(`Active user '${userId}' was not found`);
|
|
13
|
+
this.userId = userId;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Creates and revokes the server-side state referenced by JWT `jti` claims. */
|
|
17
|
+
export class DatabaseJwtSessionService {
|
|
18
|
+
constructor(db, tables = {}, events, now = () => new Date()) {
|
|
19
|
+
this.db = db;
|
|
20
|
+
this.events = events;
|
|
21
|
+
this.now = now;
|
|
22
|
+
this.tables = resolveAuthDatabaseTables(tables);
|
|
23
|
+
}
|
|
24
|
+
async create(userId, expiresAt) {
|
|
25
|
+
const expirationTime = expiresAt.getTime();
|
|
26
|
+
if (!Number.isFinite(expirationTime) || expirationTime <= this.now().getTime()) {
|
|
27
|
+
throw new RangeError('JWT session expiration must be in the future');
|
|
28
|
+
}
|
|
29
|
+
const id = crypto.randomUUID();
|
|
30
|
+
await this.db.transaction(async (transaction) => {
|
|
31
|
+
const user = await transaction.get({
|
|
32
|
+
sql: `SELECT id FROM ${this.tables.users} WHERE id = ? AND status = 'active';`,
|
|
33
|
+
params: [userId],
|
|
34
|
+
});
|
|
35
|
+
if (!user)
|
|
36
|
+
throw new ActiveJwtSessionUserNotFoundError(userId);
|
|
37
|
+
await transaction.run({
|
|
38
|
+
sql: [
|
|
39
|
+
`INSERT INTO ${this.tables.jwtSessions}`,
|
|
40
|
+
'(id, user_id, status, expires_at) VALUES (?, ?, ?, ?);',
|
|
41
|
+
].join(' '),
|
|
42
|
+
params: [id, userId, 'active', expiresAt.toISOString()],
|
|
43
|
+
});
|
|
44
|
+
await this.events?.report({
|
|
45
|
+
type: 'jwt-session.created',
|
|
46
|
+
occurredAt: this.now(),
|
|
47
|
+
userId,
|
|
48
|
+
credential: { type: 'jwt', id },
|
|
49
|
+
}, transaction);
|
|
50
|
+
});
|
|
51
|
+
return { id, userId, expiresAt: expiresAt.toISOString() };
|
|
52
|
+
}
|
|
53
|
+
async revoke(userId, sessionId) {
|
|
54
|
+
await this.db.transaction(async (transaction) => {
|
|
55
|
+
const session = await transaction.get({
|
|
56
|
+
sql: `SELECT id FROM ${this.tables.jwtSessions} WHERE id = ? AND user_id = ?;`,
|
|
57
|
+
params: [sessionId, userId],
|
|
58
|
+
});
|
|
59
|
+
if (!session)
|
|
60
|
+
throw new JwtSessionNotFoundError(userId, sessionId);
|
|
61
|
+
await transaction.run({
|
|
62
|
+
sql: `UPDATE ${this.tables.jwtSessions} SET status = 'revoked' WHERE id = ?;`,
|
|
63
|
+
params: [sessionId],
|
|
64
|
+
});
|
|
65
|
+
await this.events?.report({
|
|
66
|
+
type: 'jwt-session.revoked',
|
|
67
|
+
occurredAt: this.now(),
|
|
68
|
+
userId,
|
|
69
|
+
credential: { type: 'jwt', id: sessionId },
|
|
70
|
+
}, transaction);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=database-jwt-session-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-jwt-session-service.js","sourceRoot":"","sources":["../src/database-jwt-session-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { PasswordCredential, PasswordCredentialRepository } from '@kurdel/auth';
|
|
2
|
+
import type { Database } from '@kurdel/db';
|
|
3
|
+
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
|
+
export declare class DatabasePasswordCredentialRepository implements PasswordCredentialRepository {
|
|
5
|
+
private readonly db;
|
|
6
|
+
private readonly tables;
|
|
7
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
8
|
+
findByLogin(login: string): Promise<PasswordCredential | null>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { resolveAuthDatabaseTables } from './auth-database-tables.js';
|
|
2
|
+
export class DatabasePasswordCredentialRepository {
|
|
3
|
+
constructor(db, tables = {}) {
|
|
4
|
+
this.db = db;
|
|
5
|
+
this.tables = resolveAuthDatabaseTables(tables);
|
|
6
|
+
}
|
|
7
|
+
async findByLogin(login) {
|
|
8
|
+
const record = (await this.db.get({
|
|
9
|
+
sql: [
|
|
10
|
+
`SELECT credentials.user_id, credentials.password_hash FROM ${this.tables.passwordCredentials} credentials`,
|
|
11
|
+
`INNER JOIN ${this.tables.users} users ON users.id = credentials.user_id`,
|
|
12
|
+
'WHERE LOWER(users.email) = LOWER(?);',
|
|
13
|
+
].join(' '),
|
|
14
|
+
params: [login.trim()],
|
|
15
|
+
}));
|
|
16
|
+
return record ? { userId: record.user_id, passwordHash: record.password_hash } : null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=database-password-credential-repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-password-credential-repository.js","sourceRoot":"","sources":["../src/database-password-credential-repository.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAI/F,MAAM,OAAO,oCAAoC;IAG/C,YACmB,EAAY,EAC7B,SAAsC,EAAE;QADvB,OAAE,GAAF,EAAE,CAAU;QAG7B,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAa;QAC7B,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC;YAChC,GAAG,EAAE;gBACH,8DAA8D,IAAI,CAAC,MAAM,CAAC,mBAAmB,cAAc;gBAC3G,cAAc,IAAI,CAAC,MAAM,CAAC,KAAK,0CAA0C;gBACzE,sCAAsC;aACvC,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACvB,CAAC,CAAiC,CAAC;QACpC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PasswordHasher } from '@kurdel/auth';
|
|
2
|
+
import type { Database } from '@kurdel/db';
|
|
3
|
+
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
4
|
+
export declare class PasswordUserNotFoundError extends Error {
|
|
5
|
+
readonly userId: number;
|
|
6
|
+
constructor(userId: number);
|
|
7
|
+
}
|
|
8
|
+
export declare class DatabasePasswordService {
|
|
9
|
+
private readonly db;
|
|
10
|
+
private readonly hasher;
|
|
11
|
+
private readonly tables;
|
|
12
|
+
constructor(db: Database, hasher: PasswordHasher, tables?: Partial<AuthDatabaseTables>);
|
|
13
|
+
set(userId: number, password: string): Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { resolveAuthDatabaseTables } from './auth-database-tables.js';
|
|
2
|
+
export class PasswordUserNotFoundError extends Error {
|
|
3
|
+
constructor(userId) {
|
|
4
|
+
super(`User '${userId}' was not found`);
|
|
5
|
+
this.userId = userId;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class DatabasePasswordService {
|
|
9
|
+
constructor(db, hasher, tables = {}) {
|
|
10
|
+
this.db = db;
|
|
11
|
+
this.hasher = hasher;
|
|
12
|
+
this.tables = resolveAuthDatabaseTables(tables);
|
|
13
|
+
}
|
|
14
|
+
async set(userId, password) {
|
|
15
|
+
const passwordHash = await this.hasher.hash(password);
|
|
16
|
+
await this.db.transaction(async (transaction) => {
|
|
17
|
+
const user = await transaction.get({
|
|
18
|
+
sql: `SELECT id FROM ${this.tables.users} WHERE id = ?;`,
|
|
19
|
+
params: [userId],
|
|
20
|
+
});
|
|
21
|
+
if (!user)
|
|
22
|
+
throw new PasswordUserNotFoundError(userId);
|
|
23
|
+
await transaction.run({
|
|
24
|
+
sql: [
|
|
25
|
+
`INSERT INTO ${this.tables.passwordCredentials} (user_id, password_hash, updated_at)`,
|
|
26
|
+
'VALUES (?, ?, CURRENT_TIMESTAMP)',
|
|
27
|
+
'ON CONFLICT(user_id) DO UPDATE SET password_hash = excluded.password_hash, updated_at = CURRENT_TIMESTAMP;',
|
|
28
|
+
].join(' '),
|
|
29
|
+
params: [userId, passwordHash],
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=database-password-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database-password-service.js","sourceRoot":"","sources":["../src/database-password-service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAC;AAE/F,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAqB,MAAc;QACjC,KAAK,CAAC,SAAS,MAAM,iBAAiB,CAAC,CAAC;QADrB,WAAM,GAAN,MAAM,CAAQ;IAEnC,CAAC;CACF;AAED,MAAM,OAAO,uBAAuB;IAGlC,YACmB,EAAY,EACZ,MAAsB,EACvC,SAAsC,EAAE;QAFvB,OAAE,GAAF,EAAE,CAAU;QACZ,WAAM,GAAN,MAAM,CAAgB;QAGvC,IAAI,CAAC,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,MAAc,EAAE,QAAgB;QACxC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;YAC5C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC;gBACjC,GAAG,EAAE,kBAAkB,IAAI,CAAC,MAAM,CAAC,KAAK,gBAAgB;gBACxD,MAAM,EAAE,CAAC,MAAM,CAAC;aACjB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;YACvD,MAAM,WAAW,CAAC,GAAG,CAAC;gBACpB,GAAG,EAAE;oBACH,eAAe,IAAI,CAAC,MAAM,CAAC,mBAAmB,uCAAuC;oBACrF,kCAAkC;oBAClC,4GAA4G;iBAC7G,CAAC,IAAI,CAAC,GAAG,CAAC;gBACX,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Database } from '@kurdel/db';
|
|
2
2
|
import { type AuthDatabaseTables } from './auth-database-tables.js';
|
|
3
3
|
export type UserStatus = 'active' | 'disabled';
|
|
4
4
|
export interface CreateUserInput {
|
|
@@ -30,6 +30,7 @@ export interface RoleSummary {
|
|
|
30
30
|
id: number;
|
|
31
31
|
name: string;
|
|
32
32
|
userCount: number;
|
|
33
|
+
permissions: string[];
|
|
33
34
|
}
|
|
34
35
|
export interface AdminDashboardStats {
|
|
35
36
|
users: {
|
|
@@ -63,6 +64,10 @@ export declare class UnknownRolesError extends Error {
|
|
|
63
64
|
readonly roles: string[];
|
|
64
65
|
constructor(roles: string[]);
|
|
65
66
|
}
|
|
67
|
+
export declare class UnknownPermissionsError extends Error {
|
|
68
|
+
readonly permissions: string[];
|
|
69
|
+
constructor(permissions: string[]);
|
|
70
|
+
}
|
|
66
71
|
export declare class UserNotFoundError extends Error {
|
|
67
72
|
readonly userId: number;
|
|
68
73
|
constructor(userId: number);
|
|
@@ -87,9 +92,11 @@ export declare class RoleInUseError extends Error {
|
|
|
87
92
|
export declare class DatabaseUserService {
|
|
88
93
|
private readonly db;
|
|
89
94
|
private readonly tables;
|
|
90
|
-
constructor(db:
|
|
95
|
+
constructor(db: Database, tables?: Partial<AuthDatabaseTables>);
|
|
91
96
|
listRoles(): Promise<string[]>;
|
|
92
97
|
listRoleSummaries(): Promise<RoleSummary[]>;
|
|
98
|
+
listPermissions(): Promise<string[]>;
|
|
99
|
+
setRolePermissions(roleId: number, names: string[]): Promise<RoleSummary>;
|
|
93
100
|
createRole(name: string): Promise<RoleSummary>;
|
|
94
101
|
renameRole(roleId: number, name: string): Promise<RoleSummary>;
|
|
95
102
|
deleteRole(roleId: number): Promise<void>;
|
|
@@ -105,10 +112,13 @@ export declare class DatabaseUserService {
|
|
|
105
112
|
private findRole;
|
|
106
113
|
private ensureUsersExist;
|
|
107
114
|
private resolveRoles;
|
|
115
|
+
private resolvePermissions;
|
|
116
|
+
private loadRolePermissions;
|
|
108
117
|
private replaceRoles;
|
|
109
118
|
private loadRoles;
|
|
110
119
|
private mapUser;
|
|
111
120
|
private normalizeEmail;
|
|
112
121
|
private rethrowEmailConflict;
|
|
113
122
|
private rethrowRoleConflict;
|
|
123
|
+
private isUniqueConstraintError;
|
|
114
124
|
}
|
|
@@ -5,6 +5,12 @@ export class UnknownRolesError extends Error {
|
|
|
5
5
|
this.roles = roles;
|
|
6
6
|
}
|
|
7
7
|
}
|
|
8
|
+
export class UnknownPermissionsError extends Error {
|
|
9
|
+
constructor(permissions) {
|
|
10
|
+
super(`Unknown permissions: ${permissions.join(', ')}`);
|
|
11
|
+
this.permissions = permissions;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
8
14
|
export class UserNotFoundError extends Error {
|
|
9
15
|
constructor(userId) {
|
|
10
16
|
super(`User ${userId} not found`);
|
|
@@ -57,7 +63,38 @@ export class DatabaseUserService {
|
|
|
57
63
|
].join(' '),
|
|
58
64
|
params: [],
|
|
59
65
|
}));
|
|
60
|
-
|
|
66
|
+
const permissions = await this.loadRolePermissions(records.map(role => role.id));
|
|
67
|
+
return records.map(role => ({
|
|
68
|
+
id: role.id,
|
|
69
|
+
name: role.name,
|
|
70
|
+
userCount: role.user_count,
|
|
71
|
+
permissions: permissions.get(role.id) ?? [],
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
async listPermissions() {
|
|
75
|
+
const records = (await this.db.all({
|
|
76
|
+
sql: `SELECT name FROM ${this.tables.permissions} ORDER BY name;`,
|
|
77
|
+
params: [],
|
|
78
|
+
}));
|
|
79
|
+
return records.map(permission => permission.name);
|
|
80
|
+
}
|
|
81
|
+
async setRolePermissions(roleId, names) {
|
|
82
|
+
if (!(await this.findRole(roleId)))
|
|
83
|
+
throw new RoleNotFoundError(roleId);
|
|
84
|
+
const permissions = await this.resolvePermissions(names);
|
|
85
|
+
await this.db.transaction(async (transaction) => {
|
|
86
|
+
await transaction.run({
|
|
87
|
+
sql: `DELETE FROM ${this.tables.rolePermissions} WHERE role_id = ?;`,
|
|
88
|
+
params: [roleId],
|
|
89
|
+
});
|
|
90
|
+
for (const permission of permissions) {
|
|
91
|
+
await transaction.run({
|
|
92
|
+
sql: `INSERT INTO ${this.tables.rolePermissions} (role_id, permission_id) VALUES (?, ?);`,
|
|
93
|
+
params: [roleId, permission.id],
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return (await this.listRoleSummaries()).find(role => role.id === roleId);
|
|
61
98
|
}
|
|
62
99
|
async createRole(name) {
|
|
63
100
|
const normalized = name.trim();
|
|
@@ -66,7 +103,7 @@ export class DatabaseUserService {
|
|
|
66
103
|
sql: `INSERT INTO ${this.tables.roles} (name) VALUES (?) RETURNING id, name;`,
|
|
67
104
|
params: [normalized],
|
|
68
105
|
}));
|
|
69
|
-
return { ...role, userCount: 0 };
|
|
106
|
+
return { ...role, userCount: 0, permissions: [] };
|
|
70
107
|
}
|
|
71
108
|
catch (error) {
|
|
72
109
|
this.rethrowRoleConflict(error, normalized);
|
|
@@ -184,7 +221,10 @@ export class DatabaseUserService {
|
|
|
184
221
|
for (const userId of userIds) {
|
|
185
222
|
for (const role of addRoles) {
|
|
186
223
|
await transaction.run({
|
|
187
|
-
sql:
|
|
224
|
+
sql: [
|
|
225
|
+
`INSERT INTO ${this.tables.userRoles} (user_id, role_id) VALUES (?, ?)`,
|
|
226
|
+
'ON CONFLICT (user_id, role_id) DO NOTHING;',
|
|
227
|
+
].join(' '),
|
|
188
228
|
params: [userId, role.id],
|
|
189
229
|
});
|
|
190
230
|
}
|
|
@@ -361,6 +401,38 @@ export class DatabaseUserService {
|
|
|
361
401
|
const byName = new Map(records.map(role => [role.name, role]));
|
|
362
402
|
return uniqueNames.map(name => byName.get(name));
|
|
363
403
|
}
|
|
404
|
+
async resolvePermissions(names) {
|
|
405
|
+
const uniqueNames = [...new Set(names)];
|
|
406
|
+
if (uniqueNames.length === 0)
|
|
407
|
+
return [];
|
|
408
|
+
const records = (await this.db.all({
|
|
409
|
+
sql: `SELECT id, name FROM ${this.tables.permissions} WHERE name IN (${uniqueNames.map(() => '?').join(', ')});`,
|
|
410
|
+
params: uniqueNames,
|
|
411
|
+
}));
|
|
412
|
+
const byName = new Map(records.map(permission => [permission.name, permission]));
|
|
413
|
+
const unknown = uniqueNames.filter(name => !byName.has(name));
|
|
414
|
+
if (unknown.length > 0)
|
|
415
|
+
throw new UnknownPermissionsError(unknown);
|
|
416
|
+
return uniqueNames.map(name => byName.get(name));
|
|
417
|
+
}
|
|
418
|
+
async loadRolePermissions(roleIds) {
|
|
419
|
+
const result = new Map();
|
|
420
|
+
if (roleIds.length === 0)
|
|
421
|
+
return result;
|
|
422
|
+
const records = (await this.db.all({
|
|
423
|
+
sql: [
|
|
424
|
+
`SELECT rp.role_id, p.name FROM ${this.tables.rolePermissions} rp`,
|
|
425
|
+
`INNER JOIN ${this.tables.permissions} p ON p.id = rp.permission_id`,
|
|
426
|
+
`WHERE rp.role_id IN (${roleIds.map(() => '?').join(', ')})`,
|
|
427
|
+
'ORDER BY p.name;',
|
|
428
|
+
].join(' '),
|
|
429
|
+
params: roleIds,
|
|
430
|
+
}));
|
|
431
|
+
for (const permission of records) {
|
|
432
|
+
result.set(permission.role_id, [...(result.get(permission.role_id) ?? []), permission.name]);
|
|
433
|
+
}
|
|
434
|
+
return result;
|
|
435
|
+
}
|
|
364
436
|
async replaceRoles(database, userId, roles) {
|
|
365
437
|
await database.run({
|
|
366
438
|
sql: `DELETE FROM ${this.tables.userRoles} WHERE user_id = ?;`,
|
|
@@ -408,16 +480,22 @@ export class DatabaseUserService {
|
|
|
408
480
|
return email.toLowerCase();
|
|
409
481
|
}
|
|
410
482
|
rethrowEmailConflict(error, email) {
|
|
411
|
-
if (email && error
|
|
483
|
+
if (email && this.isUniqueConstraintError(error, `${this.tables.users}.email`)) {
|
|
412
484
|
throw new DuplicateUserEmailError(email);
|
|
413
485
|
}
|
|
414
486
|
throw error;
|
|
415
487
|
}
|
|
416
488
|
rethrowRoleConflict(error, name) {
|
|
417
|
-
if (error
|
|
489
|
+
if (this.isUniqueConstraintError(error, `${this.tables.roles}.name`)) {
|
|
418
490
|
throw new DuplicateRoleNameError(name);
|
|
419
491
|
}
|
|
420
492
|
throw error;
|
|
421
493
|
}
|
|
494
|
+
isUniqueConstraintError(error, sqliteColumn) {
|
|
495
|
+
if (!(error instanceof Error))
|
|
496
|
+
return false;
|
|
497
|
+
return error.message.includes(sqliteColumn) ||
|
|
498
|
+
error.code === '23505';
|
|
499
|
+
}
|
|
422
500
|
}
|
|
423
501
|
//# sourceMappingURL=database-user-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database-user-service.js","sourceRoot":"","sources":["../src/database-user-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database-user-service.js","sourceRoot":"","sources":["../src/database-user-service.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -6,5 +6,9 @@ export * from './database-api-key-service.js';
|
|
|
6
6
|
export * from './database-api-key-usage-recorder.js';
|
|
7
7
|
export * from './database-auth-user-repository.js';
|
|
8
8
|
export * from './database-auth-event-store.js';
|
|
9
|
+
export * from './database-jwt-session-repository.js';
|
|
10
|
+
export * from './database-jwt-session-service.js';
|
|
11
|
+
export * from './database-password-credential-repository.js';
|
|
12
|
+
export * from './database-password-service.js';
|
|
9
13
|
export * from './database-user-service.js';
|
|
10
14
|
export * from './tokens.js';
|
package/lib/index.js
CHANGED
|
@@ -6,6 +6,10 @@ export * from './database-api-key-service.js';
|
|
|
6
6
|
export * from './database-api-key-usage-recorder.js';
|
|
7
7
|
export * from './database-auth-user-repository.js';
|
|
8
8
|
export * from './database-auth-event-store.js';
|
|
9
|
+
export * from './database-jwt-session-repository.js';
|
|
10
|
+
export * from './database-jwt-session-service.js';
|
|
11
|
+
export * from './database-password-credential-repository.js';
|
|
12
|
+
export * from './database-password-service.js';
|
|
9
13
|
export * from './database-user-service.js';
|
|
10
14
|
export * from './tokens.js';
|
|
11
15
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,aAAa,CAAC"}
|
package/lib/tokens.d.ts
CHANGED
package/lib/tokens.js
CHANGED
|
@@ -2,6 +2,9 @@ export const AUTH_DB_TOKENS = {
|
|
|
2
2
|
ApiKeyHasher: Symbol('AuthDbApiKeyHasher'),
|
|
3
3
|
UserService: Symbol('AuthDbUserService'),
|
|
4
4
|
ApiKeyService: Symbol('AuthDbApiKeyService'),
|
|
5
|
+
JwtSessionService: Symbol('AuthDbJwtSessionService'),
|
|
6
|
+
PasswordHasher: Symbol('AuthDbPasswordHasher'),
|
|
7
|
+
PasswordService: Symbol('AuthDbPasswordService'),
|
|
5
8
|
EventStore: Symbol('AuthDbEventStore'),
|
|
6
9
|
};
|
|
7
10
|
//# sourceMappingURL=tokens.js.map
|
package/lib/tokens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC,oBAAoB,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC,qBAAqB,CAAC;IAC5C,UAAU,EAAE,MAAM,CAAC,kBAAkB,CAAC;CACvC,CAAC"}
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC,oBAAoB,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,mBAAmB,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC,qBAAqB,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC,yBAAyB,CAAC;IACpD,cAAc,EAAE,MAAM,CAAC,sBAAsB,CAAC;IAC9C,eAAe,EAAE,MAAM,CAAC,uBAAuB,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC,kBAAkB,CAAC;CACvC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kurdel/auth-db",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.4",
|
|
4
4
|
"description": "Database-backed authentication adapters for @kurdel/auth",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"tag": "beta"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@kurdel/auth": "0.1.0-beta.
|
|
49
|
-
"@kurdel/common": "0.1.0-beta.
|
|
50
|
-
"@kurdel/core": "0.1.0-beta.
|
|
51
|
-
"@kurdel/db": "0.1.0-beta.
|
|
48
|
+
"@kurdel/auth": "0.1.0-beta.4",
|
|
49
|
+
"@kurdel/common": "0.1.0-beta.4",
|
|
50
|
+
"@kurdel/core": "0.1.0-beta.4",
|
|
51
|
+
"@kurdel/db": "0.1.0-beta.4"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"rimraf": "^6.0.1",
|