@joethebigbuddy/auth 0.0.1
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 +97 -0
- package/dist/express.d.ts +2 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +2 -0
- package/dist/express.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/adapters/express/express-auth-adapter.d.ts +48 -0
- package/dist/lib/adapters/express/express-auth-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/express/express-auth-adapter.js +161 -0
- package/dist/lib/adapters/express/express-auth-adapter.js.map +1 -0
- package/dist/lib/adapters/logging/create-logging-adapter.d.ts +4 -0
- package/dist/lib/adapters/logging/create-logging-adapter.d.ts.map +1 -0
- package/dist/lib/adapters/logging/create-logging-adapter.js +20 -0
- package/dist/lib/adapters/logging/create-logging-adapter.js.map +1 -0
- package/dist/lib/adapters/memory/memory-refresh-token-store.d.ts +10 -0
- package/dist/lib/adapters/memory/memory-refresh-token-store.d.ts.map +1 -0
- package/dist/lib/adapters/memory/memory-refresh-token-store.js +34 -0
- package/dist/lib/adapters/memory/memory-refresh-token-store.js.map +1 -0
- package/dist/lib/adapters/memory/memory-session-store.d.ts +12 -0
- package/dist/lib/adapters/memory/memory-session-store.d.ts.map +1 -0
- package/dist/lib/adapters/memory/memory-session-store.js +32 -0
- package/dist/lib/adapters/memory/memory-session-store.js.map +1 -0
- package/dist/lib/adapters/postgres/create-postgres-auth-storage.d.ts +16 -0
- package/dist/lib/adapters/postgres/create-postgres-auth-storage.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/create-postgres-auth-storage.js +18 -0
- package/dist/lib/adapters/postgres/create-postgres-auth-storage.js.map +1 -0
- package/dist/lib/adapters/postgres/postgres-refresh-token-store.d.ts +13 -0
- package/dist/lib/adapters/postgres/postgres-refresh-token-store.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/postgres-refresh-token-store.js +63 -0
- package/dist/lib/adapters/postgres/postgres-refresh-token-store.js.map +1 -0
- package/dist/lib/adapters/postgres/postgres-session-store.d.ts +15 -0
- package/dist/lib/adapters/postgres/postgres-session-store.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/postgres-session-store.js +75 -0
- package/dist/lib/adapters/postgres/postgres-session-store.js.map +1 -0
- package/dist/lib/adapters/postgres/shared.d.ts +41 -0
- package/dist/lib/adapters/postgres/shared.d.ts.map +1 -0
- package/dist/lib/adapters/postgres/shared.js +83 -0
- package/dist/lib/adapters/postgres/shared.js.map +1 -0
- package/dist/lib/adapters/redis/create-redis-auth-storage.d.ts +2329 -0
- package/dist/lib/adapters/redis/create-redis-auth-storage.d.ts.map +1 -0
- package/dist/lib/adapters/redis/create-redis-auth-storage.js +25 -0
- package/dist/lib/adapters/redis/create-redis-auth-storage.js.map +1 -0
- package/dist/lib/adapters/redis/redis-refresh-token-store.d.ts +13 -0
- package/dist/lib/adapters/redis/redis-refresh-token-store.d.ts.map +1 -0
- package/dist/lib/adapters/redis/redis-refresh-token-store.js +46 -0
- package/dist/lib/adapters/redis/redis-refresh-token-store.js.map +1 -0
- package/dist/lib/adapters/redis/redis-session-store.d.ts +16 -0
- package/dist/lib/adapters/redis/redis-session-store.d.ts.map +1 -0
- package/dist/lib/adapters/redis/redis-session-store.js +49 -0
- package/dist/lib/adapters/redis/redis-session-store.js.map +1 -0
- package/dist/lib/adapters/redis/shared.d.ts +24 -0
- package/dist/lib/adapters/redis/shared.d.ts.map +1 -0
- package/dist/lib/adapters/redis/shared.js +60 -0
- package/dist/lib/adapters/redis/shared.js.map +1 -0
- package/dist/lib/core/authorization-service.d.ts +21 -0
- package/dist/lib/core/authorization-service.d.ts.map +1 -0
- package/dist/lib/core/authorization-service.js +125 -0
- package/dist/lib/core/authorization-service.js.map +1 -0
- package/dist/lib/core/create-auth-module.d.ts +3 -0
- package/dist/lib/core/create-auth-module.d.ts.map +1 -0
- package/dist/lib/core/create-auth-module.js +177 -0
- package/dist/lib/core/create-auth-module.js.map +1 -0
- package/dist/lib/core/defaults.d.ts +4 -0
- package/dist/lib/core/defaults.d.ts.map +1 -0
- package/dist/lib/core/defaults.js +50 -0
- package/dist/lib/core/defaults.js.map +1 -0
- package/dist/lib/core/logger.d.ts +4 -0
- package/dist/lib/core/logger.d.ts.map +1 -0
- package/dist/lib/core/logger.js +14 -0
- package/dist/lib/core/logger.js.map +1 -0
- package/dist/lib/core/session-service.d.ts +33 -0
- package/dist/lib/core/session-service.d.ts.map +1 -0
- package/dist/lib/core/session-service.js +96 -0
- package/dist/lib/core/session-service.js.map +1 -0
- package/dist/lib/core/token-service.d.ts +22 -0
- package/dist/lib/core/token-service.d.ts.map +1 -0
- package/dist/lib/core/token-service.js +111 -0
- package/dist/lib/core/token-service.js.map +1 -0
- package/dist/lib/errors.d.ts +21 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +36 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/ports.d.ts +32 -0
- package/dist/lib/ports.d.ts.map +1 -0
- package/dist/lib/ports.js +2 -0
- package/dist/lib/ports.js.map +1 -0
- package/dist/lib/types.d.ts +161 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/logging.d.ts +2 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +2 -0
- package/dist/logging.js.map +1 -0
- package/dist/memory.d.ts +3 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +3 -0
- package/dist/memory.js.map +1 -0
- package/dist/postgres.d.ts +5 -0
- package/dist/postgres.d.ts.map +1 -0
- package/dist/postgres.js +5 -0
- package/dist/postgres.js.map +1 -0
- package/dist/redis.d.ts +5 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +5 -0
- package/dist/redis.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-refresh-token-store.js","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/postgres-refresh-token-store.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,GAI1B,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,yBAAyB;IAIjB;IAHF,SAAS,CAAS;IAEnC,YACmB,MAAyB,EAC1C,UAAqC,EAAE;QADtB,WAAM,GAAN,MAAM,CAAmB;QAG1C,IAAI,CAAC,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA0B;QACnC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACrB;sBACgB,IAAI,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;OAoB7B,EACD;YACE,MAAM,CAAC,OAAO;YACd,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,UAAU,IAAI,IAAI;YACzB,MAAM,CAAC,SAAS,IAAI,IAAI;YACxB,MAAM,CAAC,iBAAiB,IAAI,IAAI;SACjC,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACpC,iBAAiB,IAAI,CAAC,SAAS,8BAA8B,EAC7D,CAAC,OAAO,CAAC,CACV,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe;QAC1B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACrB;iBACW,IAAI,CAAC,SAAS;;;OAGxB,EACD,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACpC;iBACW,IAAI,CAAC,SAAS;;;OAGxB,EACD,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,CACxB,CAAC;QAEF,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SessionStore } from '../../ports.js';
|
|
2
|
+
import type { SessionRecord } from '../../types.js';
|
|
3
|
+
import { type PostgresAuthTablesOptions, type PostgresQueryable } from './shared.js';
|
|
4
|
+
export declare class PostgresSessionStore implements SessionStore {
|
|
5
|
+
private readonly client;
|
|
6
|
+
private readonly tableName;
|
|
7
|
+
constructor(client: PostgresQueryable, options?: PostgresAuthTablesOptions);
|
|
8
|
+
create(session: SessionRecord): Promise<void>;
|
|
9
|
+
get(sessionId: string): Promise<SessionRecord | null>;
|
|
10
|
+
update(session: SessionRecord): Promise<void>;
|
|
11
|
+
delete(sessionId: string): Promise<void>;
|
|
12
|
+
deleteBySubject(subjectId: string): Promise<number>;
|
|
13
|
+
listBySubject(subjectId: string): Promise<SessionRecord[]>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=postgres-session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-session-store.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/postgres-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AAErB,qBAAa,oBAAqB,YAAW,YAAY;IAIrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAGhB,MAAM,EAAE,iBAAiB,EAC1C,OAAO,GAAE,yBAA8B;IAKnC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IASrD,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKnD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CAQjE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { mapPostgresSessionRow, resolvePostgresAuthTables, } from './shared.js';
|
|
2
|
+
export class PostgresSessionStore {
|
|
3
|
+
client;
|
|
4
|
+
tableName;
|
|
5
|
+
constructor(client, options = {}) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
this.tableName = resolvePostgresAuthTables(options).sessionsTableName;
|
|
8
|
+
}
|
|
9
|
+
async create(session) {
|
|
10
|
+
await this.client.query(`
|
|
11
|
+
insert into ${this.tableName} (
|
|
12
|
+
id,
|
|
13
|
+
subject_id,
|
|
14
|
+
created_at,
|
|
15
|
+
expires_at,
|
|
16
|
+
last_seen_at,
|
|
17
|
+
user_agent,
|
|
18
|
+
ip_address,
|
|
19
|
+
revoked_at,
|
|
20
|
+
metadata
|
|
21
|
+
) values ($1, $2, $3, $4, $5, $6, $7, $8, $9)
|
|
22
|
+
`, [
|
|
23
|
+
session.id,
|
|
24
|
+
session.subjectId,
|
|
25
|
+
session.createdAt,
|
|
26
|
+
session.expiresAt,
|
|
27
|
+
session.lastSeenAt,
|
|
28
|
+
session.userAgent ?? null,
|
|
29
|
+
session.ipAddress ?? null,
|
|
30
|
+
session.revokedAt ?? null,
|
|
31
|
+
session.metadata ?? null,
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
async get(sessionId) {
|
|
35
|
+
const result = await this.client.query(`select * from ${this.tableName} where id = $1 limit 1`, [sessionId]);
|
|
36
|
+
return result.rows[0] ? mapPostgresSessionRow(result.rows[0]) : null;
|
|
37
|
+
}
|
|
38
|
+
async update(session) {
|
|
39
|
+
await this.client.query(`
|
|
40
|
+
update ${this.tableName}
|
|
41
|
+
set
|
|
42
|
+
subject_id = $2,
|
|
43
|
+
created_at = $3,
|
|
44
|
+
expires_at = $4,
|
|
45
|
+
last_seen_at = $5,
|
|
46
|
+
user_agent = $6,
|
|
47
|
+
ip_address = $7,
|
|
48
|
+
revoked_at = $8,
|
|
49
|
+
metadata = $9
|
|
50
|
+
where id = $1
|
|
51
|
+
`, [
|
|
52
|
+
session.id,
|
|
53
|
+
session.subjectId,
|
|
54
|
+
session.createdAt,
|
|
55
|
+
session.expiresAt,
|
|
56
|
+
session.lastSeenAt,
|
|
57
|
+
session.userAgent ?? null,
|
|
58
|
+
session.ipAddress ?? null,
|
|
59
|
+
session.revokedAt ?? null,
|
|
60
|
+
session.metadata ?? null,
|
|
61
|
+
]);
|
|
62
|
+
}
|
|
63
|
+
async delete(sessionId) {
|
|
64
|
+
await this.client.query(`delete from ${this.tableName} where id = $1`, [sessionId]);
|
|
65
|
+
}
|
|
66
|
+
async deleteBySubject(subjectId) {
|
|
67
|
+
const result = await this.client.query(`delete from ${this.tableName} where subject_id = $1`, [subjectId]);
|
|
68
|
+
return result.rowCount ?? 0;
|
|
69
|
+
}
|
|
70
|
+
async listBySubject(subjectId) {
|
|
71
|
+
const result = await this.client.query(`select * from ${this.tableName} where subject_id = $1 order by created_at desc`, [subjectId]);
|
|
72
|
+
return result.rows.map(mapPostgresSessionRow);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=postgres-session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-session-store.js","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/postgres-session-store.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAI1B,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,oBAAoB;IAIZ;IAHF,SAAS,CAAS;IAEnC,YACmB,MAAyB,EAC1C,UAAqC,EAAE;QADtB,WAAM,GAAN,MAAM,CAAmB;QAG1C,IAAI,CAAC,SAAS,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACrB;sBACgB,IAAI,CAAC,SAAS;;;;;;;;;;;OAW7B,EACD;YACE,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,QAAQ,IAAI,IAAI;SACzB,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,SAAiB;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACpC,iBAAiB,IAAI,CAAC,SAAS,wBAAwB,EACvD,CAAC,SAAS,CAAC,CACZ,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACrB;iBACW,IAAI,CAAC,SAAS;;;;;;;;;;;OAWxB,EACD;YACE,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,SAAS;YACjB,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,SAAS,IAAI,IAAI;YACzB,OAAO,CAAC,QAAQ,IAAI,IAAI;SACzB,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,SAAS,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,SAAS,wBAAwB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3G,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CACpC,iBAAiB,IAAI,CAAC,SAAS,iDAAiD,EAChF,CAAC,SAAS,CAAC,CACZ,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { RefreshTokenRecord, SessionRecord } from '../../types.js';
|
|
2
|
+
export interface PostgresQueryable {
|
|
3
|
+
query<Row = Record<string, unknown>>(text: string, params?: unknown[]): Promise<{
|
|
4
|
+
rows: Row[];
|
|
5
|
+
rowCount: number | null;
|
|
6
|
+
}>;
|
|
7
|
+
}
|
|
8
|
+
export interface PostgresAuthTablesOptions {
|
|
9
|
+
sessionsTableName?: string;
|
|
10
|
+
refreshTokensTableName?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PostgresSessionRow {
|
|
13
|
+
id: string;
|
|
14
|
+
subject_id: string;
|
|
15
|
+
created_at: Date | string;
|
|
16
|
+
expires_at: Date | string;
|
|
17
|
+
last_seen_at: Date | string;
|
|
18
|
+
user_agent: string | null;
|
|
19
|
+
ip_address: string | null;
|
|
20
|
+
revoked_at: Date | string | null;
|
|
21
|
+
metadata: Record<string, unknown> | null;
|
|
22
|
+
}
|
|
23
|
+
export interface PostgresRefreshTokenRow {
|
|
24
|
+
token_id: string;
|
|
25
|
+
session_id: string;
|
|
26
|
+
subject_id: string;
|
|
27
|
+
token: string;
|
|
28
|
+
issued_at: Date | string;
|
|
29
|
+
expires_at: Date | string;
|
|
30
|
+
consumed_at: Date | string | null;
|
|
31
|
+
revoked_at: Date | string | null;
|
|
32
|
+
replaced_by_token_id: string | null;
|
|
33
|
+
}
|
|
34
|
+
export declare function resolvePostgresAuthTables(options?: PostgresAuthTablesOptions): {
|
|
35
|
+
sessionsTableName: string;
|
|
36
|
+
refreshTokensTableName: string;
|
|
37
|
+
};
|
|
38
|
+
export declare function ensurePostgresAuthTables(client: PostgresQueryable, options?: PostgresAuthTablesOptions): Promise<void>;
|
|
39
|
+
export declare function mapPostgresSessionRow(row: PostgresSessionRow): SessionRecord;
|
|
40
|
+
export declare function mapPostgresRefreshTokenRow(row: PostgresRefreshTokenRow): RefreshTokenRecord;
|
|
41
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,yBAAyB;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,YAAY,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,UAAU,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACjC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAcD,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,yBAA8B,GAAG;IAClF,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;CAChC,CAQA;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,iBAAiB,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,kBAAkB,GAAG,aAAa,CAY5E;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,uBAAuB,GAAG,kBAAkB,CAY3F"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const DEFAULT_SESSIONS_TABLE_NAME = 'auth_sessions';
|
|
2
|
+
const DEFAULT_REFRESH_TOKENS_TABLE_NAME = 'auth_refresh_tokens';
|
|
3
|
+
function toIdentifier(value, fallback) {
|
|
4
|
+
const candidate = value || fallback;
|
|
5
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(candidate)) {
|
|
6
|
+
throw new Error(`Invalid SQL identifier: ${candidate}`);
|
|
7
|
+
}
|
|
8
|
+
return candidate;
|
|
9
|
+
}
|
|
10
|
+
export function resolvePostgresAuthTables(options = {}) {
|
|
11
|
+
return {
|
|
12
|
+
sessionsTableName: toIdentifier(options.sessionsTableName ?? DEFAULT_SESSIONS_TABLE_NAME, DEFAULT_SESSIONS_TABLE_NAME),
|
|
13
|
+
refreshTokensTableName: toIdentifier(options.refreshTokensTableName ?? DEFAULT_REFRESH_TOKENS_TABLE_NAME, DEFAULT_REFRESH_TOKENS_TABLE_NAME),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export async function ensurePostgresAuthTables(client, options = {}) {
|
|
17
|
+
const tables = resolvePostgresAuthTables(options);
|
|
18
|
+
await client.query(`
|
|
19
|
+
create table if not exists ${tables.sessionsTableName} (
|
|
20
|
+
id text primary key,
|
|
21
|
+
subject_id text not null,
|
|
22
|
+
created_at timestamptz not null,
|
|
23
|
+
expires_at timestamptz not null,
|
|
24
|
+
last_seen_at timestamptz not null,
|
|
25
|
+
user_agent text null,
|
|
26
|
+
ip_address text null,
|
|
27
|
+
revoked_at timestamptz null,
|
|
28
|
+
metadata jsonb null
|
|
29
|
+
)
|
|
30
|
+
`);
|
|
31
|
+
await client.query(`
|
|
32
|
+
create index if not exists ${tables.sessionsTableName}_subject_id_idx
|
|
33
|
+
on ${tables.sessionsTableName} (subject_id)
|
|
34
|
+
`);
|
|
35
|
+
await client.query(`
|
|
36
|
+
create table if not exists ${tables.refreshTokensTableName} (
|
|
37
|
+
token_id text primary key,
|
|
38
|
+
session_id text not null,
|
|
39
|
+
subject_id text not null,
|
|
40
|
+
token text not null,
|
|
41
|
+
issued_at timestamptz not null,
|
|
42
|
+
expires_at timestamptz not null,
|
|
43
|
+
consumed_at timestamptz null,
|
|
44
|
+
revoked_at timestamptz null,
|
|
45
|
+
replaced_by_token_id text null
|
|
46
|
+
)
|
|
47
|
+
`);
|
|
48
|
+
await client.query(`
|
|
49
|
+
create index if not exists ${tables.refreshTokensTableName}_session_id_idx
|
|
50
|
+
on ${tables.refreshTokensTableName} (session_id)
|
|
51
|
+
`);
|
|
52
|
+
await client.query(`
|
|
53
|
+
create index if not exists ${tables.refreshTokensTableName}_subject_id_idx
|
|
54
|
+
on ${tables.refreshTokensTableName} (subject_id)
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
export function mapPostgresSessionRow(row) {
|
|
58
|
+
return {
|
|
59
|
+
id: row.id,
|
|
60
|
+
subjectId: row.subject_id,
|
|
61
|
+
createdAt: new Date(row.created_at),
|
|
62
|
+
expiresAt: new Date(row.expires_at),
|
|
63
|
+
lastSeenAt: new Date(row.last_seen_at),
|
|
64
|
+
userAgent: row.user_agent ?? undefined,
|
|
65
|
+
ipAddress: row.ip_address ?? undefined,
|
|
66
|
+
revokedAt: row.revoked_at ? new Date(row.revoked_at) : null,
|
|
67
|
+
metadata: row.metadata ?? undefined,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function mapPostgresRefreshTokenRow(row) {
|
|
71
|
+
return {
|
|
72
|
+
tokenId: row.token_id,
|
|
73
|
+
sessionId: row.session_id,
|
|
74
|
+
subjectId: row.subject_id,
|
|
75
|
+
token: row.token,
|
|
76
|
+
issuedAt: new Date(row.issued_at),
|
|
77
|
+
expiresAt: new Date(row.expires_at),
|
|
78
|
+
consumedAt: row.consumed_at ? new Date(row.consumed_at) : null,
|
|
79
|
+
revokedAt: row.revoked_at ? new Date(row.revoked_at) : null,
|
|
80
|
+
replacedByTokenId: row.replaced_by_token_id ?? null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/lib/adapters/postgres/shared.ts"],"names":[],"mappings":"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"}
|