@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.
Files changed (110) hide show
  1. package/README.md +97 -0
  2. package/dist/express.d.ts +2 -0
  3. package/dist/express.d.ts.map +1 -0
  4. package/dist/express.js +2 -0
  5. package/dist/express.js.map +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +9 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/lib/adapters/express/express-auth-adapter.d.ts +48 -0
  11. package/dist/lib/adapters/express/express-auth-adapter.d.ts.map +1 -0
  12. package/dist/lib/adapters/express/express-auth-adapter.js +161 -0
  13. package/dist/lib/adapters/express/express-auth-adapter.js.map +1 -0
  14. package/dist/lib/adapters/logging/create-logging-adapter.d.ts +4 -0
  15. package/dist/lib/adapters/logging/create-logging-adapter.d.ts.map +1 -0
  16. package/dist/lib/adapters/logging/create-logging-adapter.js +20 -0
  17. package/dist/lib/adapters/logging/create-logging-adapter.js.map +1 -0
  18. package/dist/lib/adapters/memory/memory-refresh-token-store.d.ts +10 -0
  19. package/dist/lib/adapters/memory/memory-refresh-token-store.d.ts.map +1 -0
  20. package/dist/lib/adapters/memory/memory-refresh-token-store.js +34 -0
  21. package/dist/lib/adapters/memory/memory-refresh-token-store.js.map +1 -0
  22. package/dist/lib/adapters/memory/memory-session-store.d.ts +12 -0
  23. package/dist/lib/adapters/memory/memory-session-store.d.ts.map +1 -0
  24. package/dist/lib/adapters/memory/memory-session-store.js +32 -0
  25. package/dist/lib/adapters/memory/memory-session-store.js.map +1 -0
  26. package/dist/lib/adapters/postgres/create-postgres-auth-storage.d.ts +16 -0
  27. package/dist/lib/adapters/postgres/create-postgres-auth-storage.d.ts.map +1 -0
  28. package/dist/lib/adapters/postgres/create-postgres-auth-storage.js +18 -0
  29. package/dist/lib/adapters/postgres/create-postgres-auth-storage.js.map +1 -0
  30. package/dist/lib/adapters/postgres/postgres-refresh-token-store.d.ts +13 -0
  31. package/dist/lib/adapters/postgres/postgres-refresh-token-store.d.ts.map +1 -0
  32. package/dist/lib/adapters/postgres/postgres-refresh-token-store.js +63 -0
  33. package/dist/lib/adapters/postgres/postgres-refresh-token-store.js.map +1 -0
  34. package/dist/lib/adapters/postgres/postgres-session-store.d.ts +15 -0
  35. package/dist/lib/adapters/postgres/postgres-session-store.d.ts.map +1 -0
  36. package/dist/lib/adapters/postgres/postgres-session-store.js +75 -0
  37. package/dist/lib/adapters/postgres/postgres-session-store.js.map +1 -0
  38. package/dist/lib/adapters/postgres/shared.d.ts +41 -0
  39. package/dist/lib/adapters/postgres/shared.d.ts.map +1 -0
  40. package/dist/lib/adapters/postgres/shared.js +83 -0
  41. package/dist/lib/adapters/postgres/shared.js.map +1 -0
  42. package/dist/lib/adapters/redis/create-redis-auth-storage.d.ts +2329 -0
  43. package/dist/lib/adapters/redis/create-redis-auth-storage.d.ts.map +1 -0
  44. package/dist/lib/adapters/redis/create-redis-auth-storage.js +25 -0
  45. package/dist/lib/adapters/redis/create-redis-auth-storage.js.map +1 -0
  46. package/dist/lib/adapters/redis/redis-refresh-token-store.d.ts +13 -0
  47. package/dist/lib/adapters/redis/redis-refresh-token-store.d.ts.map +1 -0
  48. package/dist/lib/adapters/redis/redis-refresh-token-store.js +46 -0
  49. package/dist/lib/adapters/redis/redis-refresh-token-store.js.map +1 -0
  50. package/dist/lib/adapters/redis/redis-session-store.d.ts +16 -0
  51. package/dist/lib/adapters/redis/redis-session-store.d.ts.map +1 -0
  52. package/dist/lib/adapters/redis/redis-session-store.js +49 -0
  53. package/dist/lib/adapters/redis/redis-session-store.js.map +1 -0
  54. package/dist/lib/adapters/redis/shared.d.ts +24 -0
  55. package/dist/lib/adapters/redis/shared.d.ts.map +1 -0
  56. package/dist/lib/adapters/redis/shared.js +60 -0
  57. package/dist/lib/adapters/redis/shared.js.map +1 -0
  58. package/dist/lib/core/authorization-service.d.ts +21 -0
  59. package/dist/lib/core/authorization-service.d.ts.map +1 -0
  60. package/dist/lib/core/authorization-service.js +125 -0
  61. package/dist/lib/core/authorization-service.js.map +1 -0
  62. package/dist/lib/core/create-auth-module.d.ts +3 -0
  63. package/dist/lib/core/create-auth-module.d.ts.map +1 -0
  64. package/dist/lib/core/create-auth-module.js +177 -0
  65. package/dist/lib/core/create-auth-module.js.map +1 -0
  66. package/dist/lib/core/defaults.d.ts +4 -0
  67. package/dist/lib/core/defaults.d.ts.map +1 -0
  68. package/dist/lib/core/defaults.js +50 -0
  69. package/dist/lib/core/defaults.js.map +1 -0
  70. package/dist/lib/core/logger.d.ts +4 -0
  71. package/dist/lib/core/logger.d.ts.map +1 -0
  72. package/dist/lib/core/logger.js +14 -0
  73. package/dist/lib/core/logger.js.map +1 -0
  74. package/dist/lib/core/session-service.d.ts +33 -0
  75. package/dist/lib/core/session-service.d.ts.map +1 -0
  76. package/dist/lib/core/session-service.js +96 -0
  77. package/dist/lib/core/session-service.js.map +1 -0
  78. package/dist/lib/core/token-service.d.ts +22 -0
  79. package/dist/lib/core/token-service.d.ts.map +1 -0
  80. package/dist/lib/core/token-service.js +111 -0
  81. package/dist/lib/core/token-service.js.map +1 -0
  82. package/dist/lib/errors.d.ts +21 -0
  83. package/dist/lib/errors.d.ts.map +1 -0
  84. package/dist/lib/errors.js +36 -0
  85. package/dist/lib/errors.js.map +1 -0
  86. package/dist/lib/ports.d.ts +32 -0
  87. package/dist/lib/ports.d.ts.map +1 -0
  88. package/dist/lib/ports.js +2 -0
  89. package/dist/lib/ports.js.map +1 -0
  90. package/dist/lib/types.d.ts +161 -0
  91. package/dist/lib/types.d.ts.map +1 -0
  92. package/dist/lib/types.js +2 -0
  93. package/dist/lib/types.js.map +1 -0
  94. package/dist/logging.d.ts +2 -0
  95. package/dist/logging.d.ts.map +1 -0
  96. package/dist/logging.js +2 -0
  97. package/dist/logging.js.map +1 -0
  98. package/dist/memory.d.ts +3 -0
  99. package/dist/memory.d.ts.map +1 -0
  100. package/dist/memory.js +3 -0
  101. package/dist/memory.js.map +1 -0
  102. package/dist/postgres.d.ts +5 -0
  103. package/dist/postgres.d.ts.map +1 -0
  104. package/dist/postgres.js +5 -0
  105. package/dist/postgres.js.map +1 -0
  106. package/dist/redis.d.ts +5 -0
  107. package/dist/redis.d.ts.map +1 -0
  108. package/dist/redis.js +5 -0
  109. package/dist/redis.js.map +1 -0
  110. 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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"}