@cloudauth/adapter-drizzle 0.1.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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/adapter 2.js +181 -0
  3. package/dist/adapter.d 2.ts +7 -0
  4. package/dist/adapter.d.ts +7 -0
  5. package/dist/adapter.d.ts.map +1 -0
  6. package/dist/adapter.js +181 -0
  7. package/dist/adapter.js 2.map +1 -0
  8. package/dist/adapter.js.map +1 -0
  9. package/dist/index 2.js +4 -0
  10. package/dist/index.d 2.ts +4 -0
  11. package/dist/index.d.ts +4 -0
  12. package/dist/index.d.ts 2.map +1 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +4 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/schema-pg.d 2.ts +624 -0
  17. package/dist/schema-pg.d.ts +624 -0
  18. package/dist/schema-pg.d.ts 2.map +1 -0
  19. package/dist/schema-pg.d.ts.map +1 -0
  20. package/dist/schema-pg.js +52 -0
  21. package/dist/schema-pg.js 2.map +1 -0
  22. package/dist/schema-pg.js.map +1 -0
  23. package/dist/schema.d 2.ts +672 -0
  24. package/dist/schema.d.ts +672 -0
  25. package/dist/schema.d.ts 2.map +1 -0
  26. package/dist/schema.d.ts.map +1 -0
  27. package/dist/schema.js +52 -0
  28. package/dist/schema.js.map +1 -0
  29. package/dist/test/adapter.test 2.js +88 -0
  30. package/dist/test/adapter.test.d 2.ts +2 -0
  31. package/dist/test/adapter.test.d 3.ts +2 -0
  32. package/dist/test/adapter.test.d.ts +2 -0
  33. package/dist/test/adapter.test.d.ts 2.map +1 -0
  34. package/dist/test/adapter.test.d.ts 3.map +1 -0
  35. package/dist/test/adapter.test.d.ts.map +1 -0
  36. package/dist/test/adapter.test.js +88 -0
  37. package/dist/test/adapter.test.js 2.map +1 -0
  38. package/dist/test/adapter.test.js 3.map +1 -0
  39. package/dist/test/adapter.test.js.map +1 -0
  40. package/dist/test/auth.test.d 2.ts +2 -0
  41. package/dist/test/auth.test.d.ts +2 -0
  42. package/dist/test/auth.test.d.ts 2.map +1 -0
  43. package/dist/test/auth.test.d.ts.map +1 -0
  44. package/dist/test/auth.test.js +181 -0
  45. package/dist/test/auth.test.js 2.map +1 -0
  46. package/dist/test/auth.test.js.map +1 -0
  47. package/package.json +36 -0
  48. package/src/adapter.ts +227 -0
  49. package/src/index.ts +3 -0
  50. package/src/schema-pg.ts +62 -0
  51. package/src/schema.ts +62 -0
  52. package/src/test/adapter.test.ts +93 -0
  53. package/src/test/auth.test.ts +211 -0
  54. package/tsconfig 2.tsbuildinfo +1 -0
  55. package/tsconfig 3.tsbuildinfo +1 -0
  56. package/tsconfig.json +11 -0
  57. package/tsconfig.tsbuildinfo +1 -0
  58. package/vitest.config.ts +7 -0
package/dist/schema.js ADDED
@@ -0,0 +1,52 @@
1
+ import { sqliteTable, text, integer, uniqueIndex } from 'drizzle-orm/sqlite-core';
2
+ export const users = sqliteTable('users', {
3
+ id: text('id').primaryKey(),
4
+ email: text('email'),
5
+ emailVerified: integer('email_verified', { mode: 'boolean' }).default(false).notNull(),
6
+ name: text('name'),
7
+ image: text('image'),
8
+ createdAt: integer('created_at', { mode: 'timestamp_ms' }).notNull(),
9
+ updatedAt: integer('updated_at', { mode: 'timestamp_ms' }).notNull(),
10
+ });
11
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
12
+ export const accounts = sqliteTable('accounts', {
13
+ id: text('id').primaryKey(),
14
+ userId: text('user_id')
15
+ .notNull()
16
+ .references(() => users.id),
17
+ provider: text('provider').notNull(),
18
+ providerAccountId: text('provider_account_id').notNull(),
19
+ accessToken: text('access_token'),
20
+ refreshToken: text('refresh_token'),
21
+ idToken: text('id_token'),
22
+ scope: text('scope'),
23
+ tokenType: text('token_type'),
24
+ expiresAt: integer('expires_at', { mode: 'timestamp_ms' }),
25
+ createdAt: integer('created_at', { mode: 'timestamp_ms' }).notNull(),
26
+ updatedAt: integer('updated_at', { mode: 'timestamp_ms' }).notNull(),
27
+ }, (table) => ({
28
+ providerAccountUnique: uniqueIndex('unique_provider_account').on(table.provider, table.providerAccountId),
29
+ }));
30
+ export const sessions = sqliteTable('sessions', {
31
+ id: text('id').primaryKey(),
32
+ userId: text('user_id')
33
+ .notNull()
34
+ .references(() => users.id),
35
+ tokenHash: text('token_hash').unique().notNull(),
36
+ expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),
37
+ ipAddress: text('ip_address'),
38
+ userAgent: text('user_agent'),
39
+ createdAt: integer('created_at', { mode: 'timestamp_ms' }).notNull(),
40
+ updatedAt: integer('updated_at', { mode: 'timestamp_ms' }).notNull(),
41
+ });
42
+ export const oauthStates = sqliteTable('oauth_states', {
43
+ id: text('id').primaryKey(),
44
+ stateHash: text('state_hash').unique().notNull(),
45
+ codeVerifier: text('code_verifier').notNull(),
46
+ provider: text('provider').notNull(),
47
+ callbackUrl: text('callback_url'),
48
+ errorUrl: text('error_url'),
49
+ expiresAt: integer('expires_at', { mode: 'timestamp_ms' }).notNull(),
50
+ createdAt: integer('created_at', { mode: 'timestamp_ms' }).notNull(),
51
+ });
52
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import { describe, beforeAll, afterAll, beforeEach } from 'vitest';
2
+ import { createClient } from '@libsql/client';
3
+ import { runAdapterConformanceTests } from '@cloudauth/core/test';
4
+ import { drizzleAdapter } from '../adapter.js';
5
+ import * as schema from '../schema.js';
6
+ import { drizzle } from 'drizzle-orm/libsql';
7
+ describe('Drizzle SQLite adapter', () => {
8
+ let client;
9
+ beforeAll(async () => {
10
+ client = createClient({
11
+ url: ':memory:',
12
+ });
13
+ // Create tables once
14
+ await client.execute(`
15
+ CREATE TABLE IF NOT EXISTS users (
16
+ id text PRIMARY KEY,
17
+ email text,
18
+ email_verified integer DEFAULT 0 NOT NULL,
19
+ name text,
20
+ image text,
21
+ created_at integer NOT NULL,
22
+ updated_at integer NOT NULL
23
+ )
24
+ `);
25
+ await client.execute(`
26
+ CREATE TABLE IF NOT EXISTS accounts (
27
+ id text PRIMARY KEY,
28
+ user_id text NOT NULL REFERENCES users(id),
29
+ provider text NOT NULL,
30
+ provider_account_id text NOT NULL,
31
+ access_token text,
32
+ refresh_token text,
33
+ id_token text,
34
+ scope text,
35
+ token_type text,
36
+ expires_at integer,
37
+ created_at integer NOT NULL,
38
+ updated_at integer NOT NULL
39
+ )
40
+ `);
41
+ await client.execute(`
42
+ CREATE UNIQUE INDEX IF NOT EXISTS unique_provider_account
43
+ ON accounts(provider, provider_account_id)
44
+ `);
45
+ await client.execute(`
46
+ CREATE TABLE IF NOT EXISTS sessions (
47
+ id text PRIMARY KEY,
48
+ user_id text NOT NULL REFERENCES users(id),
49
+ token_hash text UNIQUE NOT NULL,
50
+ expires_at integer NOT NULL,
51
+ ip_address text,
52
+ user_agent text,
53
+ created_at integer NOT NULL,
54
+ updated_at integer NOT NULL
55
+ )
56
+ `);
57
+ await client.execute(`
58
+ CREATE TABLE IF NOT EXISTS oauth_states (
59
+ id text PRIMARY KEY,
60
+ state_hash text UNIQUE NOT NULL,
61
+ code_verifier text NOT NULL,
62
+ provider text NOT NULL,
63
+ callback_url text,
64
+ error_url text,
65
+ expires_at integer NOT NULL,
66
+ created_at integer NOT NULL
67
+ )
68
+ `);
69
+ });
70
+ beforeEach(async () => {
71
+ // Clean data between tests to ensure test isolation
72
+ await client.execute('DELETE FROM accounts');
73
+ await client.execute('DELETE FROM sessions');
74
+ await client.execute('DELETE FROM oauth_states');
75
+ await client.execute('DELETE FROM users');
76
+ });
77
+ afterAll(() => {
78
+ client.close();
79
+ });
80
+ runAdapterConformanceTests({
81
+ name: 'SQLite (libsql)',
82
+ createAdapter: () => {
83
+ const db = drizzle(client, { schema });
84
+ return drizzleAdapter(db);
85
+ },
86
+ });
87
+ });
88
+ //# sourceMappingURL=adapter.test.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.test.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.test.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ import { describe, beforeAll, afterAll, beforeEach } from 'vitest';
2
+ import { createClient } from '@libsql/client';
3
+ import { runAdapterConformanceTests } from '@cloudauth/core/test';
4
+ import { drizzleAdapter } from '../adapter.js';
5
+ import * as schema from '../schema.js';
6
+ import { drizzle } from 'drizzle-orm/libsql';
7
+ describe('Drizzle SQLite adapter', () => {
8
+ let client;
9
+ beforeAll(async () => {
10
+ client = createClient({
11
+ url: ':memory:',
12
+ });
13
+ // Create tables once
14
+ await client.execute(`
15
+ CREATE TABLE IF NOT EXISTS users (
16
+ id text PRIMARY KEY,
17
+ email text,
18
+ email_verified integer DEFAULT 0 NOT NULL,
19
+ name text,
20
+ image text,
21
+ created_at integer NOT NULL,
22
+ updated_at integer NOT NULL
23
+ )
24
+ `);
25
+ await client.execute(`
26
+ CREATE TABLE IF NOT EXISTS accounts (
27
+ id text PRIMARY KEY,
28
+ user_id text NOT NULL REFERENCES users(id),
29
+ provider text NOT NULL,
30
+ provider_account_id text NOT NULL,
31
+ access_token text,
32
+ refresh_token text,
33
+ id_token text,
34
+ scope text,
35
+ token_type text,
36
+ expires_at integer,
37
+ created_at integer NOT NULL,
38
+ updated_at integer NOT NULL
39
+ )
40
+ `);
41
+ await client.execute(`
42
+ CREATE UNIQUE INDEX IF NOT EXISTS unique_provider_account
43
+ ON accounts(provider, provider_account_id)
44
+ `);
45
+ await client.execute(`
46
+ CREATE TABLE IF NOT EXISTS sessions (
47
+ id text PRIMARY KEY,
48
+ user_id text NOT NULL REFERENCES users(id),
49
+ token_hash text UNIQUE NOT NULL,
50
+ expires_at integer NOT NULL,
51
+ ip_address text,
52
+ user_agent text,
53
+ created_at integer NOT NULL,
54
+ updated_at integer NOT NULL
55
+ )
56
+ `);
57
+ await client.execute(`
58
+ CREATE TABLE IF NOT EXISTS oauth_states (
59
+ id text PRIMARY KEY,
60
+ state_hash text UNIQUE NOT NULL,
61
+ code_verifier text NOT NULL,
62
+ provider text NOT NULL,
63
+ callback_url text,
64
+ error_url text,
65
+ expires_at integer NOT NULL,
66
+ created_at integer NOT NULL
67
+ )
68
+ `);
69
+ });
70
+ beforeEach(async () => {
71
+ // Clean data between tests to ensure test isolation
72
+ await client.execute('DELETE FROM accounts');
73
+ await client.execute('DELETE FROM sessions');
74
+ await client.execute('DELETE FROM oauth_states');
75
+ await client.execute('DELETE FROM users');
76
+ });
77
+ afterAll(() => {
78
+ client.close();
79
+ });
80
+ runAdapterConformanceTests({
81
+ name: 'SQLite (libsql)',
82
+ createAdapter: () => {
83
+ const db = drizzle(client, { schema });
84
+ return drizzleAdapter(db);
85
+ },
86
+ });
87
+ });
88
+ //# sourceMappingURL=adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,MAAuC,CAAA;IAE3C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,YAAY,CAAC;YACpB,GAAG,EAAE,UAAU;SAChB,CAAC,CAAA;QAEF,qBAAqB;QACrB,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;KAUpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAepB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;KAGpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,oDAAoD;QACpD,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,0BAA0B,CAAC;QACzB,IAAI,EAAE,iBAAiB;QACvB,aAAa,EAAE,GAAG,EAAE;YAClB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YACtC,OAAO,cAAc,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,MAAuC,CAAA;IAE3C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,YAAY,CAAC;YACpB,GAAG,EAAE,UAAU;SAChB,CAAC,CAAA;QAEF,qBAAqB;QACrB,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;KAUpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAepB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;KAGpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,oDAAoD;QACpD,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,0BAA0B,CAAC;QACzB,IAAI,EAAE,iBAAiB;QACvB,aAAa,EAAE,GAAG,EAAE;YAClB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YACtC,OAAO,cAAc,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../src/test/adapter.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE5C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,IAAI,MAAuC,CAAA;IAE3C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,GAAG,YAAY,CAAC;YACpB,GAAG,EAAE,UAAU;SAChB,CAAC,CAAA;QAEF,qBAAqB;QACrB,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;KAUpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;KAepB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;KAGpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;QACF,MAAM,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;KAWpB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,oDAAoD;QACpD,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;QAChD,MAAM,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,0BAA0B,CAAC;QACzB,IAAI,EAAE,iBAAiB;QACvB,aAAa,EAAE,GAAG,EAAE;YAClB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;YACtC,OAAO,cAAc,CAAC,EAAE,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth.test.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auth.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/test/auth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.d.ts","sourceRoot":"","sources":["../../src/test/auth.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,181 @@
1
+ import { describe, it, expect, beforeAll, beforeEach, afterAll } from 'vitest';
2
+ import { createClient } from '@libsql/client';
3
+ import { drizzle } from 'drizzle-orm/libsql';
4
+ import { drizzleAdapter } from '../adapter.js';
5
+ import * as schema from '../schema.js';
6
+ import { cloudAuth } from '@cloudauth/core';
7
+ // A mock provider for testing
8
+ const mockProvider = {
9
+ id: 'mock',
10
+ type: 'oauth',
11
+ authorizationUrl(params) {
12
+ const url = new URL('https://mock.provider/oauth/authorize');
13
+ url.searchParams.set('state', params.state);
14
+ url.searchParams.set('code_challenge', params.codeVerifier);
15
+ url.searchParams.set('redirect_uri', params.redirectUri);
16
+ return url;
17
+ },
18
+ exchangeCode(_params) {
19
+ return Promise.resolve({
20
+ accessToken: 'mock_access_token',
21
+ refreshToken: 'mock_refresh_token',
22
+ scope: 'email profile',
23
+ tokenType: 'Bearer',
24
+ expiresAt: 3600,
25
+ });
26
+ },
27
+ getProfile(_tokens) {
28
+ return Promise.resolve({
29
+ provider: 'mock',
30
+ providerAccountId: 'mock_user_123',
31
+ email: 'mock@example.com',
32
+ emailVerified: true,
33
+ name: 'Mock User',
34
+ image: 'https://example.com/avatar.png',
35
+ });
36
+ },
37
+ };
38
+ function getCookieValue(cookieHeader) {
39
+ const firstPart = cookieHeader.split(';')[0];
40
+ if (!firstPart)
41
+ return null;
42
+ const eqIndex = firstPart.indexOf('=');
43
+ if (eqIndex === -1)
44
+ return null;
45
+ return firstPart.slice(eqIndex + 1);
46
+ }
47
+ describe('cloudAuth integration', () => {
48
+ let client;
49
+ let auth;
50
+ beforeAll(async () => {
51
+ client = createClient({ url: ':memory:' });
52
+ await client.execute(`
53
+ CREATE TABLE IF NOT EXISTS users (
54
+ id text PRIMARY KEY, email text, email_verified integer DEFAULT 0 NOT NULL,
55
+ name text, image text, created_at integer NOT NULL, updated_at integer NOT NULL
56
+ )
57
+ `);
58
+ await client.execute(`
59
+ CREATE TABLE IF NOT EXISTS accounts (
60
+ id text PRIMARY KEY, user_id text NOT NULL REFERENCES users(id),
61
+ provider text NOT NULL, provider_account_id text NOT NULL,
62
+ access_token text, refresh_token text, id_token text,
63
+ scope text, token_type text, expires_at integer,
64
+ created_at integer NOT NULL, updated_at integer NOT NULL
65
+ )
66
+ `);
67
+ await client.execute(`
68
+ CREATE UNIQUE INDEX IF NOT EXISTS unique_provider_account
69
+ ON accounts(provider, provider_account_id)
70
+ `);
71
+ await client.execute(`
72
+ CREATE TABLE IF NOT EXISTS sessions (
73
+ id text PRIMARY KEY, user_id text NOT NULL REFERENCES users(id),
74
+ token_hash text UNIQUE NOT NULL, expires_at integer NOT NULL,
75
+ ip_address text, user_agent text,
76
+ created_at integer NOT NULL, updated_at integer NOT NULL
77
+ )
78
+ `);
79
+ await client.execute(`
80
+ CREATE TABLE IF NOT EXISTS oauth_states (
81
+ id text PRIMARY KEY, state_hash text UNIQUE NOT NULL,
82
+ code_verifier text NOT NULL, provider text NOT NULL,
83
+ callback_url text, error_url text,
84
+ expires_at integer NOT NULL, created_at integer NOT NULL
85
+ )
86
+ `);
87
+ });
88
+ beforeEach(async () => {
89
+ await client.execute('DELETE FROM accounts');
90
+ await client.execute('DELETE FROM sessions');
91
+ await client.execute('DELETE FROM oauth_states');
92
+ await client.execute('DELETE FROM users');
93
+ const db = drizzle(client, { schema });
94
+ auth = cloudAuth({
95
+ appName: 'TestApp',
96
+ baseURL: 'https://test.example.com',
97
+ providers: [mockProvider],
98
+ database: drizzleAdapter(db),
99
+ security: { secret: 'test-secret-that-is-at-least-32-characters!!' },
100
+ });
101
+ });
102
+ afterAll(() => {
103
+ client.close();
104
+ });
105
+ it('should create an authorization URL', async () => {
106
+ const url = await auth.createAuthUrl('mock');
107
+ expect(url).toBeInstanceOf(URL);
108
+ expect(url.hostname).toBe('mock.provider');
109
+ expect(url.searchParams.has('state')).toBe(true);
110
+ expect(url.searchParams.has('code_challenge')).toBe(true);
111
+ expect(url.searchParams.has('redirect_uri')).toBe(true);
112
+ });
113
+ it('should handle a full sign-in callback', async () => {
114
+ const authUrl = await auth.createAuthUrl('mock');
115
+ const stateParam = authUrl.searchParams.get('state');
116
+ expect(stateParam).toBeTruthy();
117
+ const callbackUrl = `https://test.example.com/auth/mock/callback?code=mock_code&state=${String(stateParam)}`;
118
+ const result = await auth.handleCallback('mock', new Request(callbackUrl));
119
+ expect(result.user).toBeDefined();
120
+ expect(result.user.email).toBe('mock@example.com');
121
+ expect(result.session).toBeDefined();
122
+ expect(result.cookieHeader).toContain('cloud_auth_session');
123
+ expect(result.cookieHeader).toContain('HttpOnly');
124
+ });
125
+ it('should get a valid session after sign-in', async () => {
126
+ const authUrl = await auth.createAuthUrl('mock');
127
+ const stateParam = authUrl.searchParams.get('state');
128
+ expect(stateParam).toBeTruthy();
129
+ const callbackUrl = `https://test.example.com/auth/mock/callback?code=mock_code&state=${String(stateParam)}`;
130
+ const result = await auth.handleCallback('mock', new Request(callbackUrl));
131
+ const cookieValue = getCookieValue(result.cookieHeader);
132
+ expect(cookieValue).toBeTruthy();
133
+ const sessionRequest = new Request('https://test.example.com/dashboard', {
134
+ headers: { cookie: `cloud_auth_session=${String(cookieValue)}` },
135
+ });
136
+ const session = await auth.getSession(sessionRequest);
137
+ expect(session).not.toBeNull();
138
+ if (session) {
139
+ expect(session.user.email).toBe('mock@example.com');
140
+ }
141
+ });
142
+ it('should return null for unauthenticated requests', async () => {
143
+ const req = new Request('https://test.example.com/protected');
144
+ const session = await auth.getSession(req);
145
+ expect(session).toBeNull();
146
+ });
147
+ it('should sign out and clear the session', async () => {
148
+ const authUrl = await auth.createAuthUrl('mock');
149
+ const stateParam = authUrl.searchParams.get('state');
150
+ expect(stateParam).toBeTruthy();
151
+ const callbackUrl = `https://test.example.com/auth/mock/callback?code=mock_code&state=${String(stateParam)}`;
152
+ const result = await auth.handleCallback('mock', new Request(callbackUrl));
153
+ const cookieValue = getCookieValue(result.cookieHeader);
154
+ expect(cookieValue).toBeTruthy();
155
+ const signOutReq = new Request('https://test.example.com/logout', {
156
+ headers: { cookie: `cloud_auth_session=${String(cookieValue)}` },
157
+ });
158
+ const clearCookie = await auth.signOut(signOutReq);
159
+ expect(clearCookie).toContain('Max-Age=0');
160
+ const checkReq = new Request('https://test.example.com/dashboard', {
161
+ headers: { cookie: `cloud_auth_session=${String(cookieValue)}` },
162
+ });
163
+ const session = await auth.getSession(checkReq);
164
+ expect(session).toBeNull();
165
+ });
166
+ it('should throw on invalid state', async () => {
167
+ const callbackUrl = 'https://test.example.com/auth/mock/callback?code=bad&state=invalid';
168
+ await expect(auth.handleCallback('mock', new Request(callbackUrl))).rejects.toThrow();
169
+ });
170
+ it('should throw on missing security secret', async () => {
171
+ const db = drizzle(client, { schema });
172
+ const badAuth = cloudAuth({
173
+ appName: 'Test',
174
+ baseURL: 'https://test.com',
175
+ providers: [mockProvider],
176
+ database: drizzleAdapter(db),
177
+ });
178
+ await expect(badAuth.getSession(new Request('https://test.com'))).rejects.toThrow('security.secret is required');
179
+ });
180
+ });
181
+ //# sourceMappingURL=auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/test/auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/test/auth.test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@cloudauth/adapter-drizzle",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./schema": {
15
+ "types": "./dist/schema.d.ts",
16
+ "import": "./dist/schema.js",
17
+ "default": "./dist/schema.js"
18
+ }
19
+ },
20
+ "dependencies": {
21
+ "@libsql/client": "^0.17.4",
22
+ "@cloudauth/core": "0.1.0"
23
+ },
24
+ "peerDependencies": {
25
+ "drizzle-orm": "^0.38.0"
26
+ },
27
+ "devDependencies": {
28
+ "vitest": "^4.1.10"
29
+ },
30
+ "scripts": {
31
+ "build": "tsc",
32
+ "typecheck": "tsc --noEmit",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest"
35
+ }
36
+ }