@alliance-droid/svelte-auth-core 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter-context.d.ts +19 -0
- package/dist/adapter-context.d.ts.map +1 -0
- package/dist/adapter-context.js +68 -0
- package/dist/adapter-context.js.map +1 -0
- package/dist/adapters/__tests__/adapter-tests.d.ts +7 -0
- package/dist/adapters/__tests__/adapter-tests.d.ts.map +1 -0
- package/dist/adapters/__tests__/adapter-tests.js +206 -0
- package/dist/adapters/__tests__/adapter-tests.js.map +1 -0
- package/dist/adapters/adapter.d.ts +60 -0
- package/dist/adapters/adapter.d.ts.map +1 -0
- package/dist/adapters/adapter.js +2 -0
- package/dist/adapters/adapter.js.map +1 -0
- package/dist/adapters/filesystem-adapter.d.ts +26 -0
- package/dist/adapters/filesystem-adapter.d.ts.map +1 -0
- package/dist/adapters/filesystem-adapter.js +148 -0
- package/dist/adapters/filesystem-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +5 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mongodb-adapter.d.ts +27 -0
- package/dist/adapters/mongodb-adapter.d.ts.map +1 -0
- package/dist/adapters/mongodb-adapter.js +213 -0
- package/dist/adapters/mongodb-adapter.js.map +1 -0
- package/dist/adapters/postgres-adapter.d.ts +30 -0
- package/dist/adapters/postgres-adapter.d.ts.map +1 -0
- package/dist/adapters/postgres-adapter.js +237 -0
- package/dist/adapters/postgres-adapter.js.map +1 -0
- package/dist/adapters/sqlite-adapter.d.ts +26 -0
- package/dist/adapters/sqlite-adapter.d.ts.map +1 -0
- package/dist/adapters/sqlite-adapter.js +261 -0
- package/dist/adapters/sqlite-adapter.js.map +1 -0
- package/dist/auth.d.ts +48 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +205 -0
- package/dist/auth.js.map +1 -0
- package/dist/client-jwt.d.ts +30 -0
- package/dist/client-jwt.d.ts.map +1 -0
- package/dist/client-jwt.js +57 -0
- package/dist/client-jwt.js.map +1 -0
- package/dist/client-store.d.ts +31 -0
- package/dist/client-store.d.ts.map +1 -0
- package/dist/client-store.js +122 -0
- package/dist/client-store.js.map +1 -0
- package/dist/cors.d.ts +48 -0
- package/dist/cors.d.ts.map +1 -0
- package/dist/cors.js +88 -0
- package/dist/cors.js.map +1 -0
- package/dist/csrf.d.ts +57 -0
- package/dist/csrf.d.ts.map +1 -0
- package/dist/csrf.js +95 -0
- package/dist/csrf.js.map +1 -0
- package/dist/db.d.ts +22 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +43 -0
- package/dist/db.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/input-validation.d.ts +78 -0
- package/dist/input-validation.d.ts.map +1 -0
- package/dist/input-validation.js +238 -0
- package/dist/input-validation.js.map +1 -0
- package/dist/oauth-callback.d.ts +31 -0
- package/dist/oauth-callback.d.ts.map +1 -0
- package/dist/oauth-callback.js +254 -0
- package/dist/oauth-callback.js.map +1 -0
- package/dist/oauth-providers.d.ts +92 -0
- package/dist/oauth-providers.d.ts.map +1 -0
- package/dist/oauth-providers.js +213 -0
- package/dist/oauth-providers.js.map +1 -0
- package/dist/oauth-types.d.ts +77 -0
- package/dist/oauth-types.d.ts.map +1 -0
- package/dist/oauth-types.js +2 -0
- package/dist/oauth-types.js.map +1 -0
- package/dist/password.d.ts +31 -0
- package/dist/password.d.ts.map +1 -0
- package/dist/password.js +54 -0
- package/dist/password.js.map +1 -0
- package/dist/providers/github-oauth.d.ts +58 -0
- package/dist/providers/github-oauth.d.ts.map +1 -0
- package/dist/providers/github-oauth.js +230 -0
- package/dist/providers/github-oauth.js.map +1 -0
- package/dist/providers/google-oauth.d.ts +46 -0
- package/dist/providers/google-oauth.d.ts.map +1 -0
- package/dist/providers/google-oauth.js +177 -0
- package/dist/providers/google-oauth.js.map +1 -0
- package/dist/providers/oidc-oauth.d.ts +85 -0
- package/dist/providers/oidc-oauth.d.ts.map +1 -0
- package/dist/providers/oidc-oauth.js +301 -0
- package/dist/providers/oidc-oauth.js.map +1 -0
- package/dist/rate-limit.d.ts +36 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +88 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/rate-limiting.d.ts +113 -0
- package/dist/rate-limiting.d.ts.map +1 -0
- package/dist/rate-limiting.js +221 -0
- package/dist/rate-limiting.js.map +1 -0
- package/dist/security-headers.d.ts +54 -0
- package/dist/security-headers.d.ts.map +1 -0
- package/dist/security-headers.js +123 -0
- package/dist/security-headers.js.map +1 -0
- package/dist/session.d.ts +13 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +33 -0
- package/dist/session.js.map +1 -0
- package/dist/sql-injection-prevention.d.ts +94 -0
- package/dist/sql-injection-prevention.d.ts.map +1 -0
- package/dist/sql-injection-prevention.js +222 -0
- package/dist/sql-injection-prevention.js.map +1 -0
- package/dist/token.d.ts +22 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +31 -0
- package/dist/token.js.map +1 -0
- package/dist/types.d.ts +81 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/user.d.ts +33 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +144 -0
- package/dist/user.js.map +1 -0
- package/package.json +48 -0
- package/src/adapter-context.ts +72 -0
- package/src/adapters/__tests__/adapter-tests.ts +254 -0
- package/src/adapters/__tests__/filesystem-adapter.test.ts +48 -0
- package/src/adapters/__tests__/mongodb-adapter.test.ts +64 -0
- package/src/adapters/__tests__/postgres-adapter.test.ts +62 -0
- package/src/adapters/__tests__/sqlite-adapter.test.ts +103 -0
- package/src/adapters/__tests__/test-fs-adapter.json +4 -0
- package/src/adapters/adapter.ts +72 -0
- package/src/adapters/filesystem-adapter.ts +153 -0
- package/src/adapters/index.ts +5 -0
- package/src/adapters/mongodb-adapter.ts +208 -0
- package/src/adapters/postgres-adapter.ts +261 -0
- package/src/adapters/sqlite-adapter.ts +284 -0
- package/src/auth.ts +239 -0
- package/src/client-jwt.test.ts +137 -0
- package/src/client-jwt.ts +67 -0
- package/src/client-store.test.ts +149 -0
- package/src/client-store.ts +144 -0
- package/src/cors.test.ts +175 -0
- package/src/cors.ts +115 -0
- package/src/csrf.test.ts +226 -0
- package/src/csrf.ts +126 -0
- package/src/db.ts +57 -0
- package/src/index.ts +143 -0
- package/src/input-validation.test.ts +347 -0
- package/src/input-validation.ts +307 -0
- package/src/integration.test.ts +322 -0
- package/src/oauth-callback.test.ts +282 -0
- package/src/oauth-callback.ts +323 -0
- package/src/oauth-providers.ts +232 -0
- package/src/oauth-types.ts +82 -0
- package/src/password.test.ts +89 -0
- package/src/password.ts +62 -0
- package/src/providers/github-oauth.test.ts +290 -0
- package/src/providers/github-oauth.ts +226 -0
- package/src/providers/google-oauth.test.ts +240 -0
- package/src/providers/google-oauth.ts +166 -0
- package/src/providers/oidc-oauth.test.ts +367 -0
- package/src/providers/oidc-oauth.ts +302 -0
- package/src/rate-limit.test.ts +308 -0
- package/src/rate-limit.ts +118 -0
- package/src/rate-limiting.test.ts +390 -0
- package/src/rate-limiting.ts +275 -0
- package/src/security-headers.test.ts +242 -0
- package/src/security-headers.ts +160 -0
- package/src/security-penetration.test.ts +705 -0
- package/src/session.ts +42 -0
- package/src/sql-injection-prevention.test.ts +337 -0
- package/src/sql-injection-prevention.ts +272 -0
- package/src/token.test.ts +67 -0
- package/src/token.ts +34 -0
- package/src/types.ts +87 -0
- package/src/user.ts +165 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { DatabaseAdapter } from './adapters/adapter';
|
|
2
|
+
/**
|
|
3
|
+
* Initialize the database adapter
|
|
4
|
+
* Must be called before any auth operations
|
|
5
|
+
*/
|
|
6
|
+
export declare function initializeAdapter(adapter: DatabaseAdapter): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Initialize with the default FileSystem adapter
|
|
9
|
+
*/
|
|
10
|
+
export declare function initializeDefaultAdapter(dbPath?: string): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Get the current adapter
|
|
13
|
+
*/
|
|
14
|
+
export declare function getAdapter(): DatabaseAdapter;
|
|
15
|
+
/**
|
|
16
|
+
* Close the current adapter
|
|
17
|
+
*/
|
|
18
|
+
export declare function closeAdapter(): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=adapter-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-context.d.ts","sourceRoot":"","sources":["../src/adapter-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAyC1D;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAG/E;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7E;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,eAAe,CAE5C;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAGlD"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { FileSystemAdapter } from './adapters/filesystem-adapter';
|
|
2
|
+
/**
|
|
3
|
+
* Global adapter context
|
|
4
|
+
* Manages the active database adapter instance
|
|
5
|
+
*/
|
|
6
|
+
class AdapterContext {
|
|
7
|
+
constructor() {
|
|
8
|
+
Object.defineProperty(this, "adapter", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: null
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Set the database adapter
|
|
17
|
+
*/
|
|
18
|
+
setAdapter(adapter) {
|
|
19
|
+
this.adapter = adapter;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get the current database adapter
|
|
23
|
+
* Throws if no adapter is set
|
|
24
|
+
*/
|
|
25
|
+
getAdapter() {
|
|
26
|
+
if (!this.adapter) {
|
|
27
|
+
throw new Error('Database adapter not initialized. Call initializeAdapter() first.');
|
|
28
|
+
}
|
|
29
|
+
return this.adapter;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if adapter is initialized
|
|
33
|
+
*/
|
|
34
|
+
isInitialized() {
|
|
35
|
+
return this.adapter !== null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Global singleton instance
|
|
39
|
+
const context = new AdapterContext();
|
|
40
|
+
/**
|
|
41
|
+
* Initialize the database adapter
|
|
42
|
+
* Must be called before any auth operations
|
|
43
|
+
*/
|
|
44
|
+
export async function initializeAdapter(adapter) {
|
|
45
|
+
context.setAdapter(adapter);
|
|
46
|
+
await adapter.initialize();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Initialize with the default FileSystem adapter
|
|
50
|
+
*/
|
|
51
|
+
export async function initializeDefaultAdapter(dbPath) {
|
|
52
|
+
const adapter = new FileSystemAdapter(dbPath);
|
|
53
|
+
await initializeAdapter(adapter);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the current adapter
|
|
57
|
+
*/
|
|
58
|
+
export function getAdapter() {
|
|
59
|
+
return context.getAdapter();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Close the current adapter
|
|
63
|
+
*/
|
|
64
|
+
export async function closeAdapter() {
|
|
65
|
+
const adapter = context.getAdapter();
|
|
66
|
+
await adapter.close();
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=adapter-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-context.js","sourceRoot":"","sources":["../src/adapter-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE;;;GAGG;AACH,MAAM,cAAc;IAApB;QACS;;;;mBAAkC,IAAI;WAAC;IA4BhD,CAAC;IA1BA;;OAEG;IACH,UAAU,CAAC,OAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,UAAU;QACT,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACd,mEAAmE,CACnE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,aAAa;QACZ,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC;IAC9B,CAAC;CACD;AAED,4BAA4B;AAC5B,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAwB;IAC/D,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAe;IAC7D,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACzB,OAAO,OAAO,CAAC,UAAU,EAAE,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IACjC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DatabaseAdapter } from '../adapter';
|
|
2
|
+
/**
|
|
3
|
+
* Shared test suite for database adapters
|
|
4
|
+
* Can be used to test any implementation of DatabaseAdapter
|
|
5
|
+
*/
|
|
6
|
+
export declare function createAdapterTestSuite(name: string, createAdapter: () => DatabaseAdapter): void;
|
|
7
|
+
//# sourceMappingURL=adapter-tests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-tests.d.ts","sourceRoot":"","sources":["../../../src/adapters/__tests__/adapter-tests.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,eAAe,QAmPpC"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* Shared test suite for database adapters
|
|
4
|
+
* Can be used to test any implementation of DatabaseAdapter
|
|
5
|
+
*/
|
|
6
|
+
export function createAdapterTestSuite(name, createAdapter) {
|
|
7
|
+
describe(`${name} Adapter Tests`, () => {
|
|
8
|
+
let adapter;
|
|
9
|
+
beforeEach(async () => {
|
|
10
|
+
adapter = createAdapter();
|
|
11
|
+
await adapter.initialize();
|
|
12
|
+
});
|
|
13
|
+
afterEach(async () => {
|
|
14
|
+
await adapter.close();
|
|
15
|
+
});
|
|
16
|
+
describe('User Operations', () => {
|
|
17
|
+
it('should create a user', async () => {
|
|
18
|
+
const user = {
|
|
19
|
+
id: 'user-1',
|
|
20
|
+
email: 'test@example.com',
|
|
21
|
+
passwordHash: 'hashed-password',
|
|
22
|
+
emailVerified: false,
|
|
23
|
+
createdAt: Date.now(),
|
|
24
|
+
updatedAt: Date.now()
|
|
25
|
+
};
|
|
26
|
+
await adapter.createUser(user);
|
|
27
|
+
const retrieved = await adapter.getUserById('user-1');
|
|
28
|
+
expect(retrieved).toBeDefined();
|
|
29
|
+
expect(retrieved?.email).toBe('test@example.com');
|
|
30
|
+
});
|
|
31
|
+
it('should get user by email', async () => {
|
|
32
|
+
const user = {
|
|
33
|
+
id: 'user-2',
|
|
34
|
+
email: 'test2@example.com',
|
|
35
|
+
passwordHash: 'hashed-password',
|
|
36
|
+
emailVerified: false,
|
|
37
|
+
createdAt: Date.now(),
|
|
38
|
+
updatedAt: Date.now()
|
|
39
|
+
};
|
|
40
|
+
await adapter.createUser(user);
|
|
41
|
+
const retrieved = await adapter.getUserByEmail('test2@example.com');
|
|
42
|
+
expect(retrieved).toBeDefined();
|
|
43
|
+
expect(retrieved?.id).toBe('user-2');
|
|
44
|
+
});
|
|
45
|
+
it('should return null for non-existent user', async () => {
|
|
46
|
+
const user = await adapter.getUserById('non-existent');
|
|
47
|
+
expect(user).toBeNull();
|
|
48
|
+
});
|
|
49
|
+
it('should update user', async () => {
|
|
50
|
+
const user = {
|
|
51
|
+
id: 'user-3',
|
|
52
|
+
email: 'test3@example.com',
|
|
53
|
+
passwordHash: 'hashed-password',
|
|
54
|
+
emailVerified: false,
|
|
55
|
+
createdAt: Date.now(),
|
|
56
|
+
updatedAt: Date.now()
|
|
57
|
+
};
|
|
58
|
+
await adapter.createUser(user);
|
|
59
|
+
await adapter.updateUser('user-3', {
|
|
60
|
+
emailVerified: true,
|
|
61
|
+
passwordHash: 'new-hashed-password'
|
|
62
|
+
});
|
|
63
|
+
const updated = await adapter.getUserById('user-3');
|
|
64
|
+
expect(updated?.emailVerified).toBe(true);
|
|
65
|
+
expect(updated?.passwordHash).toBe('new-hashed-password');
|
|
66
|
+
});
|
|
67
|
+
it('should get all users', async () => {
|
|
68
|
+
const user1 = {
|
|
69
|
+
id: 'user-4',
|
|
70
|
+
email: 'test4@example.com',
|
|
71
|
+
passwordHash: 'hashed-password',
|
|
72
|
+
emailVerified: false,
|
|
73
|
+
createdAt: Date.now(),
|
|
74
|
+
updatedAt: Date.now()
|
|
75
|
+
};
|
|
76
|
+
const user2 = {
|
|
77
|
+
id: 'user-5',
|
|
78
|
+
email: 'test5@example.com',
|
|
79
|
+
passwordHash: 'hashed-password',
|
|
80
|
+
emailVerified: false,
|
|
81
|
+
createdAt: Date.now(),
|
|
82
|
+
updatedAt: Date.now()
|
|
83
|
+
};
|
|
84
|
+
await adapter.createUser(user1);
|
|
85
|
+
await adapter.createUser(user2);
|
|
86
|
+
const users = await adapter.getAllUsers();
|
|
87
|
+
expect(users.length).toBeGreaterThanOrEqual(2);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('Session Operations', () => {
|
|
91
|
+
it('should create a session', async () => {
|
|
92
|
+
const session = {
|
|
93
|
+
userId: 'user-1',
|
|
94
|
+
email: 'test@example.com',
|
|
95
|
+
createdAt: Date.now(),
|
|
96
|
+
expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000
|
|
97
|
+
};
|
|
98
|
+
await adapter.createSession('session-1', session);
|
|
99
|
+
const retrieved = await adapter.getSession('session-1');
|
|
100
|
+
expect(retrieved).toBeDefined();
|
|
101
|
+
expect(retrieved?.userId).toBe('user-1');
|
|
102
|
+
expect(retrieved?.email).toBe('test@example.com');
|
|
103
|
+
});
|
|
104
|
+
it('should return null for non-existent session', async () => {
|
|
105
|
+
const session = await adapter.getSession('non-existent');
|
|
106
|
+
expect(session).toBeNull();
|
|
107
|
+
});
|
|
108
|
+
it('should return null for expired session', async () => {
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
const expiredSession = {
|
|
111
|
+
userId: 'user-1',
|
|
112
|
+
email: 'test@example.com',
|
|
113
|
+
createdAt: now - 1000,
|
|
114
|
+
expiresAt: now - 100 // Expired 100ms ago
|
|
115
|
+
};
|
|
116
|
+
await adapter.createSession('expired-session', expiredSession);
|
|
117
|
+
const retrieved = await adapter.getSession('expired-session');
|
|
118
|
+
expect(retrieved).toBeNull();
|
|
119
|
+
});
|
|
120
|
+
it('should delete session', async () => {
|
|
121
|
+
const session = {
|
|
122
|
+
userId: 'user-1',
|
|
123
|
+
email: 'test@example.com',
|
|
124
|
+
createdAt: Date.now(),
|
|
125
|
+
expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000
|
|
126
|
+
};
|
|
127
|
+
await adapter.createSession('session-to-delete', session);
|
|
128
|
+
await adapter.deleteSession('session-to-delete');
|
|
129
|
+
const retrieved = await adapter.getSession('session-to-delete');
|
|
130
|
+
expect(retrieved).toBeNull();
|
|
131
|
+
});
|
|
132
|
+
it('should delete expired sessions', async () => {
|
|
133
|
+
const now = Date.now();
|
|
134
|
+
const expiredSession1 = {
|
|
135
|
+
userId: 'user-1',
|
|
136
|
+
email: 'test@example.com',
|
|
137
|
+
createdAt: now - 2000,
|
|
138
|
+
expiresAt: now - 1000
|
|
139
|
+
};
|
|
140
|
+
const expiredSession2 = {
|
|
141
|
+
userId: 'user-2',
|
|
142
|
+
email: 'test2@example.com',
|
|
143
|
+
createdAt: now - 2000,
|
|
144
|
+
expiresAt: now - 500
|
|
145
|
+
};
|
|
146
|
+
const validSession = {
|
|
147
|
+
userId: 'user-3',
|
|
148
|
+
email: 'test3@example.com',
|
|
149
|
+
createdAt: now,
|
|
150
|
+
expiresAt: now + 7 * 24 * 60 * 60 * 1000
|
|
151
|
+
};
|
|
152
|
+
await adapter.createSession('expired-1', expiredSession1);
|
|
153
|
+
await adapter.createSession('expired-2', expiredSession2);
|
|
154
|
+
await adapter.createSession('valid', validSession);
|
|
155
|
+
const deletedCount = await adapter.deleteExpiredSessions();
|
|
156
|
+
expect(deletedCount).toBeGreaterThanOrEqual(2);
|
|
157
|
+
const valid = await adapter.getSession('valid');
|
|
158
|
+
expect(valid).toBeDefined();
|
|
159
|
+
});
|
|
160
|
+
it('should get all sessions', async () => {
|
|
161
|
+
const session1 = {
|
|
162
|
+
userId: 'user-1',
|
|
163
|
+
email: 'test@example.com',
|
|
164
|
+
createdAt: Date.now(),
|
|
165
|
+
expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000
|
|
166
|
+
};
|
|
167
|
+
const session2 = {
|
|
168
|
+
userId: 'user-2',
|
|
169
|
+
email: 'test2@example.com',
|
|
170
|
+
createdAt: Date.now(),
|
|
171
|
+
expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000
|
|
172
|
+
};
|
|
173
|
+
await adapter.createSession('session-all-1', session1);
|
|
174
|
+
await adapter.createSession('session-all-2', session2);
|
|
175
|
+
const sessions = await adapter.getAllSessions();
|
|
176
|
+
expect(sessions.length).toBeGreaterThanOrEqual(2);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
describe('Data Clearing', () => {
|
|
180
|
+
it('should clear all data', async () => {
|
|
181
|
+
const user = {
|
|
182
|
+
id: 'user-clear',
|
|
183
|
+
email: 'clear@example.com',
|
|
184
|
+
passwordHash: 'hashed-password',
|
|
185
|
+
emailVerified: false,
|
|
186
|
+
createdAt: Date.now(),
|
|
187
|
+
updatedAt: Date.now()
|
|
188
|
+
};
|
|
189
|
+
const session = {
|
|
190
|
+
userId: 'user-clear',
|
|
191
|
+
email: 'clear@example.com',
|
|
192
|
+
createdAt: Date.now(),
|
|
193
|
+
expiresAt: Date.now() + 7 * 24 * 60 * 60 * 1000
|
|
194
|
+
};
|
|
195
|
+
await adapter.createUser(user);
|
|
196
|
+
await adapter.createSession('session-clear', session);
|
|
197
|
+
await adapter.clear();
|
|
198
|
+
const users = await adapter.getAllUsers();
|
|
199
|
+
const sessions = await adapter.getAllSessions();
|
|
200
|
+
expect(users.length).toBe(0);
|
|
201
|
+
expect(sessions.length).toBe(0);
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=adapter-tests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-tests.js","sourceRoot":"","sources":["../../../src/adapters/__tests__/adapter-tests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAIrE;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACrC,IAAY,EACZ,aAAoC;IAEpC,QAAQ,CAAC,GAAG,IAAI,gBAAgB,EAAE,GAAG,EAAE;QACtC,IAAI,OAAwB,CAAC;QAE7B,UAAU,CAAC,KAAK,IAAI,EAAE;YACrB,OAAO,GAAG,aAAa,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAChC,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;gBACrC,MAAM,IAAI,GAAS;oBAClB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,kBAAkB;oBACzB,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAEtD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;gBACzC,MAAM,IAAI,GAAS;oBAClB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;gBAEpE,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;gBACvD,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzB,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;gBACnC,MAAM,IAAI,GAAS;oBAClB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE;oBAClC,aAAa,EAAE,IAAI;oBACnB,YAAY,EAAE,qBAAqB;iBACnC,CAAC,CAAC;gBAEH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBACpD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;gBACrC,MAAM,KAAK,GAAS;oBACnB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,KAAK,GAAS;oBACnB,EAAE,EAAE,QAAQ;oBACZ,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAChC,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAEhC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;YACnC,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,OAAO,GAAY;oBACxB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,kBAAkB;oBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC/C,CAAC;gBAEF,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBAClD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAExD,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;gBAChC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;gBACzD,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,cAAc,GAAY;oBAC/B,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,kBAAkB;oBACzB,SAAS,EAAE,GAAG,GAAG,IAAI;oBACrB,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC,oBAAoB;iBACzC,CAAC;gBAEF,MAAM,OAAO,CAAC,aAAa,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;gBAC/D,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;gBAE9D,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;gBACtC,MAAM,OAAO,GAAY;oBACxB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,kBAAkB;oBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC/C,CAAC;gBAEF,MAAM,OAAO,CAAC,aAAa,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;gBAC1D,MAAM,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;gBAEjD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;gBAChE,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEvB,MAAM,eAAe,GAAY;oBAChC,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,kBAAkB;oBACzB,SAAS,EAAE,GAAG,GAAG,IAAI;oBACrB,SAAS,EAAE,GAAG,GAAG,IAAI;iBACrB,CAAC;gBAEF,MAAM,eAAe,GAAY;oBAChC,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,mBAAmB;oBAC1B,SAAS,EAAE,GAAG,GAAG,IAAI;oBACrB,SAAS,EAAE,GAAG,GAAG,GAAG;iBACpB,CAAC;gBAEF,MAAM,YAAY,GAAY;oBAC7B,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,mBAAmB;oBAC1B,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBACxC,CAAC;gBAEF,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBAC1D,MAAM,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBAC1D,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;gBAEnD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAE3D,MAAM,CAAC,YAAY,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;gBAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAChD,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,QAAQ,GAAY;oBACzB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,kBAAkB;oBACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC/C,CAAC;gBAEF,MAAM,QAAQ,GAAY;oBACzB,MAAM,EAAE,QAAQ;oBAChB,KAAK,EAAE,mBAAmB;oBAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC/C,CAAC;gBAEF,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBACvD,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;gBAEvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;YAC9B,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;gBACtC,MAAM,IAAI,GAAS;oBAClB,EAAE,EAAE,YAAY;oBAChB,KAAK,EAAE,mBAAmB;oBAC1B,YAAY,EAAE,iBAAiB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;iBACrB,CAAC;gBAEF,MAAM,OAAO,GAAY;oBACxB,MAAM,EAAE,YAAY;oBACpB,KAAK,EAAE,mBAAmB;oBAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;oBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;iBAC/C,CAAC;gBAEF,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBAEtD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEtB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,cAAc,EAAE,CAAC;gBAEhD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { User, Session } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Database adapter interface
|
|
4
|
+
* Defines the contract that all database adapters must implement
|
|
5
|
+
*/
|
|
6
|
+
export interface DatabaseAdapter {
|
|
7
|
+
/**
|
|
8
|
+
* Initialize the database connection and schema
|
|
9
|
+
*/
|
|
10
|
+
initialize(): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Close the database connection
|
|
13
|
+
*/
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new user
|
|
17
|
+
*/
|
|
18
|
+
createUser(user: User): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Get user by ID
|
|
21
|
+
*/
|
|
22
|
+
getUserById(id: string): Promise<User | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Get user by email
|
|
25
|
+
*/
|
|
26
|
+
getUserByEmail(email: string): Promise<User | null>;
|
|
27
|
+
/**
|
|
28
|
+
* Update user
|
|
29
|
+
*/
|
|
30
|
+
updateUser(id: string, updates: Partial<User>): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new session
|
|
33
|
+
*/
|
|
34
|
+
createSession(sessionId: string, session: Session): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Get session by ID
|
|
37
|
+
*/
|
|
38
|
+
getSession(sessionId: string): Promise<Session | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Delete session
|
|
41
|
+
*/
|
|
42
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Delete all expired sessions
|
|
45
|
+
*/
|
|
46
|
+
deleteExpiredSessions(): Promise<number>;
|
|
47
|
+
/**
|
|
48
|
+
* Get all users (for testing/admin purposes)
|
|
49
|
+
*/
|
|
50
|
+
getAllUsers(): Promise<User[]>;
|
|
51
|
+
/**
|
|
52
|
+
* Get all sessions (for testing/admin purposes)
|
|
53
|
+
*/
|
|
54
|
+
getAllSessions(): Promise<Session[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Clear all data (for testing)
|
|
57
|
+
*/
|
|
58
|
+
clear(): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAE9C;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAEpD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAEvD;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;OAEG;IACH,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzC;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAE/B;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAErC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/adapters/adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { User, Session } from '../types';
|
|
2
|
+
import type { DatabaseAdapter } from './adapter';
|
|
3
|
+
/**
|
|
4
|
+
* File system adapter - JSON file-based storage
|
|
5
|
+
* Useful for development and testing
|
|
6
|
+
*/
|
|
7
|
+
export declare class FileSystemAdapter implements DatabaseAdapter {
|
|
8
|
+
private dbPath;
|
|
9
|
+
private store;
|
|
10
|
+
constructor(dbPath?: string);
|
|
11
|
+
initialize(): Promise<void>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
createUser(user: User): Promise<void>;
|
|
14
|
+
getUserById(id: string): Promise<User | null>;
|
|
15
|
+
getUserByEmail(email: string): Promise<User | null>;
|
|
16
|
+
updateUser(id: string, updates: Partial<User>): Promise<void>;
|
|
17
|
+
createSession(sessionId: string, session: Session): Promise<void>;
|
|
18
|
+
getSession(sessionId: string): Promise<Session | null>;
|
|
19
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
20
|
+
deleteExpiredSessions(): Promise<number>;
|
|
21
|
+
getAllUsers(): Promise<User[]>;
|
|
22
|
+
getAllSessions(): Promise<Session[]>;
|
|
23
|
+
clear(): Promise<void>;
|
|
24
|
+
private save;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=filesystem-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/filesystem-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAOjD;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACxD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAA8B;gBAE/B,MAAM,CAAC,EAAE,MAAM;IAIrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAK7C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAOnD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAWtD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAmBxC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAK9B,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAKpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,IAAI;CAcZ"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* File system adapter - JSON file-based storage
|
|
5
|
+
* Useful for development and testing
|
|
6
|
+
*/
|
|
7
|
+
export class FileSystemAdapter {
|
|
8
|
+
constructor(dbPath) {
|
|
9
|
+
Object.defineProperty(this, "dbPath", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: void 0
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "store", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: null
|
|
20
|
+
});
|
|
21
|
+
this.dbPath = dbPath || path.join(process.cwd(), 'auth.json');
|
|
22
|
+
}
|
|
23
|
+
async initialize() {
|
|
24
|
+
try {
|
|
25
|
+
if (fs.existsSync(this.dbPath)) {
|
|
26
|
+
const data = fs.readFileSync(this.dbPath, 'utf-8');
|
|
27
|
+
this.store = JSON.parse(data);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.store = {
|
|
31
|
+
users: {},
|
|
32
|
+
sessions: {}
|
|
33
|
+
};
|
|
34
|
+
this.save();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
console.error('Failed to initialize filesystem adapter:', error);
|
|
39
|
+
this.store = {
|
|
40
|
+
users: {},
|
|
41
|
+
sessions: {}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async close() {
|
|
46
|
+
if (this.store) {
|
|
47
|
+
this.save();
|
|
48
|
+
this.store = null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async createUser(user) {
|
|
52
|
+
if (!this.store)
|
|
53
|
+
throw new Error('Database not initialized');
|
|
54
|
+
this.store.users[user.id] = user;
|
|
55
|
+
this.save();
|
|
56
|
+
}
|
|
57
|
+
async getUserById(id) {
|
|
58
|
+
if (!this.store)
|
|
59
|
+
throw new Error('Database not initialized');
|
|
60
|
+
return this.store.users[id] || null;
|
|
61
|
+
}
|
|
62
|
+
async getUserByEmail(email) {
|
|
63
|
+
if (!this.store)
|
|
64
|
+
throw new Error('Database not initialized');
|
|
65
|
+
return (Object.values(this.store.users).find((u) => u.email === email) || null);
|
|
66
|
+
}
|
|
67
|
+
async updateUser(id, updates) {
|
|
68
|
+
if (!this.store)
|
|
69
|
+
throw new Error('Database not initialized');
|
|
70
|
+
const user = this.store.users[id];
|
|
71
|
+
if (!user)
|
|
72
|
+
throw new Error('User not found');
|
|
73
|
+
this.store.users[id] = { ...user, ...updates };
|
|
74
|
+
this.save();
|
|
75
|
+
}
|
|
76
|
+
async createSession(sessionId, session) {
|
|
77
|
+
if (!this.store)
|
|
78
|
+
throw new Error('Database not initialized');
|
|
79
|
+
this.store.sessions[sessionId] = session;
|
|
80
|
+
this.save();
|
|
81
|
+
}
|
|
82
|
+
async getSession(sessionId) {
|
|
83
|
+
if (!this.store)
|
|
84
|
+
throw new Error('Database not initialized');
|
|
85
|
+
const session = this.store.sessions[sessionId];
|
|
86
|
+
if (!session || session.expiresAt < Date.now()) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return session;
|
|
90
|
+
}
|
|
91
|
+
async deleteSession(sessionId) {
|
|
92
|
+
if (!this.store)
|
|
93
|
+
throw new Error('Database not initialized');
|
|
94
|
+
delete this.store.sessions[sessionId];
|
|
95
|
+
this.save();
|
|
96
|
+
}
|
|
97
|
+
async deleteExpiredSessions() {
|
|
98
|
+
if (!this.store)
|
|
99
|
+
throw new Error('Database not initialized');
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
let count = 0;
|
|
102
|
+
for (const [sessionId, session] of Object.entries(this.store.sessions)) {
|
|
103
|
+
if (session.expiresAt < now) {
|
|
104
|
+
delete this.store.sessions[sessionId];
|
|
105
|
+
count++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (count > 0) {
|
|
109
|
+
this.save();
|
|
110
|
+
}
|
|
111
|
+
return count;
|
|
112
|
+
}
|
|
113
|
+
async getAllUsers() {
|
|
114
|
+
if (!this.store)
|
|
115
|
+
throw new Error('Database not initialized');
|
|
116
|
+
return Object.values(this.store.users);
|
|
117
|
+
}
|
|
118
|
+
async getAllSessions() {
|
|
119
|
+
if (!this.store)
|
|
120
|
+
throw new Error('Database not initialized');
|
|
121
|
+
return Object.values(this.store.sessions);
|
|
122
|
+
}
|
|
123
|
+
async clear() {
|
|
124
|
+
if (!this.store)
|
|
125
|
+
throw new Error('Database not initialized');
|
|
126
|
+
this.store = {
|
|
127
|
+
users: {},
|
|
128
|
+
sessions: {}
|
|
129
|
+
};
|
|
130
|
+
this.save();
|
|
131
|
+
}
|
|
132
|
+
save() {
|
|
133
|
+
if (this.store && this.dbPath) {
|
|
134
|
+
try {
|
|
135
|
+
const dir = path.dirname(this.dbPath);
|
|
136
|
+
if (!fs.existsSync(dir)) {
|
|
137
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
138
|
+
}
|
|
139
|
+
fs.writeFileSync(this.dbPath, JSON.stringify(this.store, null, 2), 'utf-8');
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error('Failed to save database:', error);
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=filesystem-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-adapter.js","sourceRoot":"","sources":["../../src/adapters/filesystem-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { DatabaseAdapter } from './adapter';
|
|
2
|
+
export { FileSystemAdapter } from './filesystem-adapter';
|
|
3
|
+
export { PostgresAdapter } from './postgres-adapter';
|
|
4
|
+
export { MongoDBAdapter } from './mongodb-adapter';
|
|
5
|
+
export { SqliteAdapter } from './sqlite-adapter';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { User, Session } from '../types';
|
|
2
|
+
import type { DatabaseAdapter } from './adapter';
|
|
3
|
+
/**
|
|
4
|
+
* MongoDB adapter
|
|
5
|
+
* Requires a MongoDB instance (local or MongoDB Atlas)
|
|
6
|
+
*/
|
|
7
|
+
export declare class MongoDBAdapter implements DatabaseAdapter {
|
|
8
|
+
private client;
|
|
9
|
+
private db;
|
|
10
|
+
private usersCollection;
|
|
11
|
+
private sessionsCollection;
|
|
12
|
+
constructor(connectionUri?: string);
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
close(): Promise<void>;
|
|
15
|
+
createUser(user: User): Promise<void>;
|
|
16
|
+
getUserById(id: string): Promise<User | null>;
|
|
17
|
+
getUserByEmail(email: string): Promise<User | null>;
|
|
18
|
+
updateUser(id: string, updates: Partial<User>): Promise<void>;
|
|
19
|
+
createSession(sessionId: string, session: Session): Promise<void>;
|
|
20
|
+
getSession(sessionId: string): Promise<Session | null>;
|
|
21
|
+
deleteSession(sessionId: string): Promise<void>;
|
|
22
|
+
deleteExpiredSessions(): Promise<number>;
|
|
23
|
+
getAllUsers(): Promise<User[]>;
|
|
24
|
+
getAllSessions(): Promise<Session[]>;
|
|
25
|
+
clear(): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mongodb-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/mongodb-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IACrD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,kBAAkB,CAAoC;gBAElD,aAAa,CAAC,EAAE,MAAM;IAK5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAY7C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAYnD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAiBtD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAcxC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAY9B,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAYpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAa5B"}
|