@auth/d1-adapter 1.1.0 → 1.3.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/index.d.ts +1 -20
- package/index.d.ts.map +1 -1
- package/index.js +3 -53
- package/migrations.d.ts +1 -4
- package/migrations.d.ts.map +1 -1
- package/migrations.js +2 -6
- package/package.json +2 -2
- package/queries.d.ts +20 -0
- package/queries.d.ts.map +1 -0
- package/queries.js +39 -0
- package/src/index.ts +28 -68
- package/src/migrations.ts +3 -7
- package/src/queries.ts +43 -0
package/index.d.ts
CHANGED
|
@@ -20,31 +20,12 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import type { D1Database as WorkerDatabase } from "@cloudflare/workers-types";
|
|
22
22
|
import type { D1Database as MiniflareD1Database } from "@miniflare/d1";
|
|
23
|
-
import type
|
|
23
|
+
import { type Adapter } from "@auth/core/adapters";
|
|
24
24
|
export { up } from "./migrations.js";
|
|
25
25
|
/**
|
|
26
26
|
* @type @cloudflare/workers-types.D1Database | @miniflare/d1.D1Database
|
|
27
27
|
*/
|
|
28
28
|
export type D1Database = WorkerDatabase | MiniflareD1Database;
|
|
29
|
-
export declare const CREATE_USER_SQL = "INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)";
|
|
30
|
-
export declare const GET_USER_BY_ID_SQL = "SELECT * FROM users WHERE id = ?";
|
|
31
|
-
export declare const GET_USER_BY_EMAIL_SQL = "SELECT * FROM users WHERE email = ?";
|
|
32
|
-
export declare const GET_USER_BY_ACCOUNTL_SQL = "\n SELECT u.*\n FROM users u JOIN accounts a ON a.userId = u.id\n WHERE a.providerAccountId = ? AND a.provider = ?";
|
|
33
|
-
export declare const UPDATE_USER_BY_ID_SQL = "\n UPDATE users \n SET name = ?, email = ?, emailVerified = ?, image = ?\n WHERE id = ? ";
|
|
34
|
-
export declare const DELETE_USER_SQL = "DELETE FROM users WHERE id = ?";
|
|
35
|
-
export declare const CREATE_SESSION_SQL = "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)";
|
|
36
|
-
export declare const GET_SESSION_BY_TOKEN_SQL = "\n SELECT id, sessionToken, userId, expires\n FROM sessions\n WHERE sessionToken = ?";
|
|
37
|
-
export declare const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = "UPDATE sessions SET expires = ? WHERE sessionToken = ?";
|
|
38
|
-
export declare const DELETE_SESSION_SQL = "DELETE FROM sessions WHERE sessionToken = ?";
|
|
39
|
-
export declare const DELETE_SESSION_BY_USER_ID_SQL = "DELETE FROM sessions WHERE userId = ?";
|
|
40
|
-
export declare const CREATE_ACCOUNT_SQL = "\n INSERT INTO accounts (\n id, userId, type, provider, \n providerAccountId, refresh_token, access_token, \n expires_at, token_type, scope, id_token, session_state,\n oauth_token, oauth_token_secret\n ) \n VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
41
|
-
export declare const GET_ACCOUNT_BY_ID_SQL = "SELECT * FROM accounts WHERE id = ? ";
|
|
42
|
-
export declare const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = "SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?";
|
|
43
|
-
export declare const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = "DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?";
|
|
44
|
-
export declare const DELETE_ACCOUNT_BY_USER_ID_SQL = "DELETE FROM accounts WHERE userId = ?";
|
|
45
|
-
export declare const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = "SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?";
|
|
46
|
-
export declare const CREATE_VERIFICATION_TOKEN_SQL = "INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)";
|
|
47
|
-
export declare const DELETE_VERIFICATION_TOKEN_SQL = "DELETE FROM verification_tokens WHERE identifier = ? and token = ?";
|
|
48
29
|
export declare function createRecord<RecordType>(db: D1Database, CREATE_SQL: string, bindings: any[], GET_SQL: string, getBindings: any[]): Promise<RecordType | null>;
|
|
49
30
|
export declare function getRecord<RecordType>(db: D1Database, SQL: string, bindings: any[]): Promise<RecordType | null>;
|
|
50
31
|
export declare function updateRecord(db: D1Database, SQL: string, bindings: any[]): Promise<import("@miniflare/d1").D1Result<unknown> | import("@cloudflare/workers-types").D1Result<unknown>>;
|
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC7E,OAAO,KAAK,EAAE,UAAU,IAAI,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,EACL,KAAK,OAAO,EAMb,MAAM,qBAAqB,CAAA;AAsB5B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAA;AAuB7D,wBAAsB,YAAY,CAAC,UAAU,EAC3C,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,GAAG,EAAE,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,GAAG,EAAE,8BAanB;AAED,wBAAsB,SAAS,CAAC,UAAU,EACxC,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,GAAG,EAAE,GACd,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAgB5B;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,GAAG,EAAE,8GAYhB;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,UAAU,EACd,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,GAAG,EAAE,iBAahB;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAoLjD"}
|
package/index.js
CHANGED
|
@@ -18,53 +18,9 @@
|
|
|
18
18
|
*
|
|
19
19
|
* @module @auth/d1-adapter
|
|
20
20
|
*/
|
|
21
|
+
import { isDate, } from "@auth/core/adapters";
|
|
22
|
+
import { CREATE_ACCOUNT_SQL, CREATE_SESSION_SQL, CREATE_USER_SQL, CREATE_VERIFICATION_TOKEN_SQL, DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, DELETE_ACCOUNT_BY_USER_ID_SQL, DELETE_SESSION_BY_USER_ID_SQL, DELETE_SESSION_SQL, DELETE_USER_SQL, DELETE_VERIFICATION_TOKEN_SQL, GET_ACCOUNT_BY_ID_SQL, GET_SESSION_BY_TOKEN_SQL, GET_USER_BY_ACCOUNTL_SQL, GET_USER_BY_EMAIL_SQL, GET_USER_BY_ID_SQL, GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, UPDATE_SESSION_BY_SESSION_TOKEN_SQL, UPDATE_USER_BY_ID_SQL, } from "./queries.js";
|
|
21
23
|
export { up } from "./migrations.js";
|
|
22
|
-
// all the sqls
|
|
23
|
-
// USER
|
|
24
|
-
export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)`;
|
|
25
|
-
export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?`;
|
|
26
|
-
export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?`;
|
|
27
|
-
export const GET_USER_BY_ACCOUNTL_SQL = `
|
|
28
|
-
SELECT u.*
|
|
29
|
-
FROM users u JOIN accounts a ON a.userId = u.id
|
|
30
|
-
WHERE a.providerAccountId = ? AND a.provider = ?`;
|
|
31
|
-
export const UPDATE_USER_BY_ID_SQL = `
|
|
32
|
-
UPDATE users
|
|
33
|
-
SET name = ?, email = ?, emailVerified = ?, image = ?
|
|
34
|
-
WHERE id = ? `;
|
|
35
|
-
export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?`;
|
|
36
|
-
// SESSION
|
|
37
|
-
export const CREATE_SESSION_SQL = "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)";
|
|
38
|
-
export const GET_SESSION_BY_TOKEN_SQL = `
|
|
39
|
-
SELECT id, sessionToken, userId, expires
|
|
40
|
-
FROM sessions
|
|
41
|
-
WHERE sessionToken = ?`;
|
|
42
|
-
export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?`;
|
|
43
|
-
export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?`;
|
|
44
|
-
export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?`;
|
|
45
|
-
// ACCOUNT
|
|
46
|
-
export const CREATE_ACCOUNT_SQL = `
|
|
47
|
-
INSERT INTO accounts (
|
|
48
|
-
id, userId, type, provider,
|
|
49
|
-
providerAccountId, refresh_token, access_token,
|
|
50
|
-
expires_at, token_type, scope, id_token, session_state,
|
|
51
|
-
oauth_token, oauth_token_secret
|
|
52
|
-
)
|
|
53
|
-
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`;
|
|
54
|
-
export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? `;
|
|
55
|
-
export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?`;
|
|
56
|
-
export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?`;
|
|
57
|
-
export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?`;
|
|
58
|
-
// VERIFICATION_TOKEN
|
|
59
|
-
export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?`;
|
|
60
|
-
export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)`;
|
|
61
|
-
export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?`;
|
|
62
|
-
// helper functions
|
|
63
|
-
// isDate is borrowed from the supabase adapter, graciously
|
|
64
|
-
// depending on error messages ("Invalid Date") is always precarious, but probably fine for a built in native like Date
|
|
65
|
-
function isDate(date) {
|
|
66
|
-
return (new Date(date).toString() !== "Invalid Date" && !isNaN(Date.parse(date)));
|
|
67
|
-
}
|
|
68
24
|
// format is borrowed from the supabase adapter, graciously
|
|
69
25
|
function format(obj) {
|
|
70
26
|
for (const [key, value] of Object.entries(obj)) {
|
|
@@ -188,7 +144,6 @@ export function D1Adapter(db) {
|
|
|
188
144
|
params.id,
|
|
189
145
|
]);
|
|
190
146
|
if (res.success) {
|
|
191
|
-
// we could probably just return
|
|
192
147
|
const user = await getRecord(db, GET_USER_BY_ID_SQL, [
|
|
193
148
|
params.id,
|
|
194
149
|
]);
|
|
@@ -200,8 +155,7 @@ export function D1Adapter(db) {
|
|
|
200
155
|
throw new Error("Error updating user: Failed to run the update SQL.");
|
|
201
156
|
},
|
|
202
157
|
async deleteUser(userId) {
|
|
203
|
-
//
|
|
204
|
-
// no multi line sql statements
|
|
158
|
+
// miniflare doesn't support batch operations or multiline sql statements
|
|
205
159
|
await deleteRecord(db, DELETE_ACCOUNT_BY_USER_ID_SQL, [userId]);
|
|
206
160
|
await deleteRecord(db, DELETE_SESSION_BY_USER_ID_SQL, [userId]);
|
|
207
161
|
await deleteRecord(db, DELETE_USER_SQL, [userId]);
|
|
@@ -243,10 +197,8 @@ export function D1Adapter(db) {
|
|
|
243
197
|
},
|
|
244
198
|
async getSessionAndUser(sessionToken) {
|
|
245
199
|
const session = await getRecord(db, GET_SESSION_BY_TOKEN_SQL, [sessionToken]);
|
|
246
|
-
// no session? no user!
|
|
247
200
|
if (session === null)
|
|
248
201
|
return null;
|
|
249
|
-
// this shouldnt happen, but just in case
|
|
250
202
|
const user = await getRecord(db, GET_USER_BY_ID_SQL, [
|
|
251
203
|
session.userId,
|
|
252
204
|
]);
|
|
@@ -255,8 +207,6 @@ export function D1Adapter(db) {
|
|
|
255
207
|
return { session, user };
|
|
256
208
|
},
|
|
257
209
|
async updateSession({ sessionToken, expires }) {
|
|
258
|
-
// kinda strange that we have to deal with an undefined expires,
|
|
259
|
-
// we dont have any policy to enforce, lets just expire it now.
|
|
260
210
|
if (expires === undefined) {
|
|
261
211
|
await deleteRecord(db, DELETE_SESSION_SQL, [sessionToken]);
|
|
262
212
|
return null;
|
package/migrations.d.ts
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import type { D1Database } from ".";
|
|
1
|
+
import type { D1Database } from "./index.js";
|
|
2
2
|
export declare const upSQLStatements: string[];
|
|
3
3
|
export declare const down: string[];
|
|
4
|
-
/**
|
|
5
|
-
* @param db
|
|
6
|
-
*/
|
|
7
4
|
declare function up(db: D1Database): Promise<void>;
|
|
8
5
|
export { up };
|
|
9
6
|
//# sourceMappingURL=migrations.d.ts.map
|
package/migrations.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,eAAO,MAAM,eAAe,UAuC3B,CAAA;AAED,eAAO,MAAM,IAAI,UAKhB,CAAA;AAED,iBAAe,EAAE,CAAC,EAAE,EAAE,UAAU,iBAQ/B;AAED,OAAO,EAAE,EAAE,EAAE,CAAA"}
|
package/migrations.js
CHANGED
|
@@ -42,16 +42,12 @@ export const down = [
|
|
|
42
42
|
`DROP TABLE IF EXISTS "accounts";`,
|
|
43
43
|
`DROP TABLE IF EXISTS "sessions";`,
|
|
44
44
|
`DROP TABLE IF EXISTS "users";`,
|
|
45
|
-
`DROP TABLE IF EXISTS "
|
|
45
|
+
`DROP TABLE IF EXISTS "verification_tokens";`,
|
|
46
46
|
];
|
|
47
|
-
/**
|
|
48
|
-
* @param db
|
|
49
|
-
*/
|
|
50
47
|
async function up(db) {
|
|
51
|
-
// run the migration
|
|
52
48
|
upSQLStatements.forEach(async (sql) => {
|
|
53
49
|
try {
|
|
54
|
-
|
|
50
|
+
await db.prepare(sql).run();
|
|
55
51
|
}
|
|
56
52
|
catch (e) {
|
|
57
53
|
console.error(e.cause?.message, e.message);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@auth/d1-adapter",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A Cloudflare D1 adapter for Auth.js",
|
|
5
5
|
"homepage": "https://authjs.dev",
|
|
6
6
|
"repository": "https://github.com/nextauthjs/next-auth",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@auth/core": "0.
|
|
41
|
+
"@auth/core": "0.33.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@cloudflare/workers-types": "^4.20230321.0",
|
package/queries.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const CREATE_USER_SQL = "INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)";
|
|
2
|
+
export declare const GET_USER_BY_ID_SQL = "SELECT * FROM users WHERE id = ?";
|
|
3
|
+
export declare const GET_USER_BY_EMAIL_SQL = "SELECT * FROM users WHERE email = ?";
|
|
4
|
+
export declare const GET_USER_BY_ACCOUNTL_SQL = "\n SELECT u.*\n FROM users u JOIN accounts a ON a.userId = u.id\n WHERE a.providerAccountId = ? AND a.provider = ?";
|
|
5
|
+
export declare const UPDATE_USER_BY_ID_SQL = "\n UPDATE users \n SET name = ?, email = ?, emailVerified = ?, image = ?\n WHERE id = ? ";
|
|
6
|
+
export declare const DELETE_USER_SQL = "DELETE FROM users WHERE id = ?";
|
|
7
|
+
export declare const CREATE_SESSION_SQL = "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)";
|
|
8
|
+
export declare const GET_SESSION_BY_TOKEN_SQL = "\n SELECT id, sessionToken, userId, expires\n FROM sessions\n WHERE sessionToken = ?";
|
|
9
|
+
export declare const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = "UPDATE sessions SET expires = ? WHERE sessionToken = ?";
|
|
10
|
+
export declare const DELETE_SESSION_SQL = "DELETE FROM sessions WHERE sessionToken = ?";
|
|
11
|
+
export declare const DELETE_SESSION_BY_USER_ID_SQL = "DELETE FROM sessions WHERE userId = ?";
|
|
12
|
+
export declare const CREATE_ACCOUNT_SQL = "\n INSERT INTO accounts (\n id, userId, type, provider, \n providerAccountId, refresh_token, access_token, \n expires_at, token_type, scope, id_token, session_state,\n oauth_token, oauth_token_secret\n ) \n VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
|
|
13
|
+
export declare const GET_ACCOUNT_BY_ID_SQL = "SELECT * FROM accounts WHERE id = ? ";
|
|
14
|
+
export declare const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = "SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?";
|
|
15
|
+
export declare const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = "DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?";
|
|
16
|
+
export declare const DELETE_ACCOUNT_BY_USER_ID_SQL = "DELETE FROM accounts WHERE userId = ?";
|
|
17
|
+
export declare const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = "SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?";
|
|
18
|
+
export declare const CREATE_VERIFICATION_TOKEN_SQL = "INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)";
|
|
19
|
+
export declare const DELETE_VERIFICATION_TOKEN_SQL = "DELETE FROM verification_tokens WHERE identifier = ? and token = ?";
|
|
20
|
+
//# sourceMappingURL=queries.d.ts.map
|
package/queries.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["src/queries.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,eAAe,qFAAqF,CAAA;AACjH,eAAO,MAAM,kBAAkB,qCAAqC,CAAA;AACpE,eAAO,MAAM,qBAAqB,wCAAwC,CAAA;AAC1E,eAAO,MAAM,wBAAwB,0HAGc,CAAA;AACnD,eAAO,MAAM,qBAAqB,gGAGlB,CAAA;AAChB,eAAO,MAAM,eAAe,mCAAmC,CAAA;AAG/D,eAAO,MAAM,kBAAkB,8EAC8C,CAAA;AAC7E,eAAO,MAAM,wBAAwB,4FAGZ,CAAA;AACzB,eAAO,MAAM,mCAAmC,2DAA2D,CAAA;AAC3G,eAAO,MAAM,kBAAkB,gDAAgD,CAAA;AAC/E,eAAO,MAAM,6BAA6B,0CAA0C,CAAA;AAGpF,eAAO,MAAM,kBAAkB,uQAOQ,CAAA;AACvC,eAAO,MAAM,qBAAqB,yCAAyC,CAAA;AAC3E,eAAO,MAAM,mDAAmD,wEAAwE,CAAA;AACxI,eAAO,MAAM,sDAAsD,sEAAsE,CAAA;AACzI,eAAO,MAAM,6BAA6B,0CAA0C,CAAA;AAGpF,eAAO,MAAM,kDAAkD,yEAAyE,CAAA;AACxI,eAAO,MAAM,6BAA6B,gFAAgF,CAAA;AAC1H,eAAO,MAAM,6BAA6B,uEAAuE,CAAA"}
|
package/queries.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// USER
|
|
2
|
+
export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)`;
|
|
3
|
+
export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?`;
|
|
4
|
+
export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?`;
|
|
5
|
+
export const GET_USER_BY_ACCOUNTL_SQL = `
|
|
6
|
+
SELECT u.*
|
|
7
|
+
FROM users u JOIN accounts a ON a.userId = u.id
|
|
8
|
+
WHERE a.providerAccountId = ? AND a.provider = ?`;
|
|
9
|
+
export const UPDATE_USER_BY_ID_SQL = `
|
|
10
|
+
UPDATE users
|
|
11
|
+
SET name = ?, email = ?, emailVerified = ?, image = ?
|
|
12
|
+
WHERE id = ? `;
|
|
13
|
+
export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?`;
|
|
14
|
+
// SESSION
|
|
15
|
+
export const CREATE_SESSION_SQL = "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)";
|
|
16
|
+
export const GET_SESSION_BY_TOKEN_SQL = `
|
|
17
|
+
SELECT id, sessionToken, userId, expires
|
|
18
|
+
FROM sessions
|
|
19
|
+
WHERE sessionToken = ?`;
|
|
20
|
+
export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?`;
|
|
21
|
+
export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?`;
|
|
22
|
+
export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?`;
|
|
23
|
+
// ACCOUNT
|
|
24
|
+
export const CREATE_ACCOUNT_SQL = `
|
|
25
|
+
INSERT INTO accounts (
|
|
26
|
+
id, userId, type, provider,
|
|
27
|
+
providerAccountId, refresh_token, access_token,
|
|
28
|
+
expires_at, token_type, scope, id_token, session_state,
|
|
29
|
+
oauth_token, oauth_token_secret
|
|
30
|
+
)
|
|
31
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`;
|
|
32
|
+
export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? `;
|
|
33
|
+
export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?`;
|
|
34
|
+
export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?`;
|
|
35
|
+
export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?`;
|
|
36
|
+
// VERIFICATION_TOKEN
|
|
37
|
+
export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?`;
|
|
38
|
+
export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)`;
|
|
39
|
+
export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?`;
|
package/src/index.ts
CHANGED
|
@@ -21,13 +21,34 @@
|
|
|
21
21
|
|
|
22
22
|
import type { D1Database as WorkerDatabase } from "@cloudflare/workers-types"
|
|
23
23
|
import type { D1Database as MiniflareD1Database } from "@miniflare/d1"
|
|
24
|
-
import
|
|
25
|
-
Adapter,
|
|
26
|
-
AdapterSession,
|
|
27
|
-
AdapterUser,
|
|
28
|
-
AdapterAccount,
|
|
29
|
-
VerificationToken as AdapterVerificationToken,
|
|
24
|
+
import {
|
|
25
|
+
type Adapter,
|
|
26
|
+
type AdapterSession,
|
|
27
|
+
type AdapterUser,
|
|
28
|
+
type AdapterAccount,
|
|
29
|
+
type VerificationToken as AdapterVerificationToken,
|
|
30
|
+
isDate,
|
|
30
31
|
} from "@auth/core/adapters"
|
|
32
|
+
import {
|
|
33
|
+
CREATE_ACCOUNT_SQL,
|
|
34
|
+
CREATE_SESSION_SQL,
|
|
35
|
+
CREATE_USER_SQL,
|
|
36
|
+
CREATE_VERIFICATION_TOKEN_SQL,
|
|
37
|
+
DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL,
|
|
38
|
+
DELETE_ACCOUNT_BY_USER_ID_SQL,
|
|
39
|
+
DELETE_SESSION_BY_USER_ID_SQL,
|
|
40
|
+
DELETE_SESSION_SQL,
|
|
41
|
+
DELETE_USER_SQL,
|
|
42
|
+
DELETE_VERIFICATION_TOKEN_SQL,
|
|
43
|
+
GET_ACCOUNT_BY_ID_SQL,
|
|
44
|
+
GET_SESSION_BY_TOKEN_SQL,
|
|
45
|
+
GET_USER_BY_ACCOUNTL_SQL,
|
|
46
|
+
GET_USER_BY_EMAIL_SQL,
|
|
47
|
+
GET_USER_BY_ID_SQL,
|
|
48
|
+
GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL,
|
|
49
|
+
UPDATE_SESSION_BY_SESSION_TOKEN_SQL,
|
|
50
|
+
UPDATE_USER_BY_ID_SQL,
|
|
51
|
+
} from "./queries.js"
|
|
31
52
|
|
|
32
53
|
export { up } from "./migrations.js"
|
|
33
54
|
|
|
@@ -36,61 +57,6 @@ export { up } from "./migrations.js"
|
|
|
36
57
|
*/
|
|
37
58
|
export type D1Database = WorkerDatabase | MiniflareD1Database
|
|
38
59
|
|
|
39
|
-
// all the sqls
|
|
40
|
-
// USER
|
|
41
|
-
export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)`
|
|
42
|
-
export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?`
|
|
43
|
-
export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?`
|
|
44
|
-
export const GET_USER_BY_ACCOUNTL_SQL = `
|
|
45
|
-
SELECT u.*
|
|
46
|
-
FROM users u JOIN accounts a ON a.userId = u.id
|
|
47
|
-
WHERE a.providerAccountId = ? AND a.provider = ?`
|
|
48
|
-
export const UPDATE_USER_BY_ID_SQL = `
|
|
49
|
-
UPDATE users
|
|
50
|
-
SET name = ?, email = ?, emailVerified = ?, image = ?
|
|
51
|
-
WHERE id = ? `
|
|
52
|
-
export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?`
|
|
53
|
-
|
|
54
|
-
// SESSION
|
|
55
|
-
export const CREATE_SESSION_SQL =
|
|
56
|
-
"INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)"
|
|
57
|
-
export const GET_SESSION_BY_TOKEN_SQL = `
|
|
58
|
-
SELECT id, sessionToken, userId, expires
|
|
59
|
-
FROM sessions
|
|
60
|
-
WHERE sessionToken = ?`
|
|
61
|
-
export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?`
|
|
62
|
-
export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?`
|
|
63
|
-
export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?`
|
|
64
|
-
|
|
65
|
-
// ACCOUNT
|
|
66
|
-
export const CREATE_ACCOUNT_SQL = `
|
|
67
|
-
INSERT INTO accounts (
|
|
68
|
-
id, userId, type, provider,
|
|
69
|
-
providerAccountId, refresh_token, access_token,
|
|
70
|
-
expires_at, token_type, scope, id_token, session_state,
|
|
71
|
-
oauth_token, oauth_token_secret
|
|
72
|
-
)
|
|
73
|
-
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
|
|
74
|
-
export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? `
|
|
75
|
-
export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?`
|
|
76
|
-
export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?`
|
|
77
|
-
export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?`
|
|
78
|
-
|
|
79
|
-
// VERIFICATION_TOKEN
|
|
80
|
-
export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?`
|
|
81
|
-
export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)`
|
|
82
|
-
export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?`
|
|
83
|
-
|
|
84
|
-
// helper functions
|
|
85
|
-
|
|
86
|
-
// isDate is borrowed from the supabase adapter, graciously
|
|
87
|
-
// depending on error messages ("Invalid Date") is always precarious, but probably fine for a built in native like Date
|
|
88
|
-
function isDate(date: any) {
|
|
89
|
-
return (
|
|
90
|
-
new Date(date).toString() !== "Invalid Date" && !isNaN(Date.parse(date))
|
|
91
|
-
)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
60
|
// format is borrowed from the supabase adapter, graciously
|
|
95
61
|
function format<T>(obj: Record<string, any>): T {
|
|
96
62
|
for (const [key, value] of Object.entries(obj)) {
|
|
@@ -242,7 +208,6 @@ export function D1Adapter(db: D1Database): Adapter {
|
|
|
242
208
|
params.id,
|
|
243
209
|
])
|
|
244
210
|
if (res.success) {
|
|
245
|
-
// we could probably just return
|
|
246
211
|
const user = await getRecord<AdapterUser>(db, GET_USER_BY_ID_SQL, [
|
|
247
212
|
params.id,
|
|
248
213
|
])
|
|
@@ -255,8 +220,7 @@ export function D1Adapter(db: D1Database): Adapter {
|
|
|
255
220
|
throw new Error("Error updating user: Failed to run the update SQL.")
|
|
256
221
|
},
|
|
257
222
|
async deleteUser(userId) {
|
|
258
|
-
//
|
|
259
|
-
// no multi line sql statements
|
|
223
|
+
// miniflare doesn't support batch operations or multiline sql statements
|
|
260
224
|
await deleteRecord(db, DELETE_ACCOUNT_BY_USER_ID_SQL, [userId])
|
|
261
225
|
await deleteRecord(db, DELETE_SESSION_BY_USER_ID_SQL, [userId])
|
|
262
226
|
await deleteRecord(db, DELETE_USER_SQL, [userId])
|
|
@@ -317,10 +281,8 @@ export function D1Adapter(db: D1Database): Adapter {
|
|
|
317
281
|
GET_SESSION_BY_TOKEN_SQL,
|
|
318
282
|
[sessionToken]
|
|
319
283
|
)
|
|
320
|
-
// no session? no user!
|
|
321
284
|
if (session === null) return null
|
|
322
285
|
|
|
323
|
-
// this shouldnt happen, but just in case
|
|
324
286
|
const user = await getRecord<AdapterUser>(db, GET_USER_BY_ID_SQL, [
|
|
325
287
|
session.userId,
|
|
326
288
|
])
|
|
@@ -329,8 +291,6 @@ export function D1Adapter(db: D1Database): Adapter {
|
|
|
329
291
|
return { session, user }
|
|
330
292
|
},
|
|
331
293
|
async updateSession({ sessionToken, expires }) {
|
|
332
|
-
// kinda strange that we have to deal with an undefined expires,
|
|
333
|
-
// we dont have any policy to enforce, lets just expire it now.
|
|
334
294
|
if (expires === undefined) {
|
|
335
295
|
await deleteRecord(db, DELETE_SESSION_SQL, [sessionToken])
|
|
336
296
|
return null
|
package/src/migrations.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { D1Database } from "."
|
|
1
|
+
import type { D1Database } from "./index.js"
|
|
2
2
|
|
|
3
3
|
export const upSQLStatements = [
|
|
4
4
|
`CREATE TABLE IF NOT EXISTS "accounts" (
|
|
@@ -45,17 +45,13 @@ export const down = [
|
|
|
45
45
|
`DROP TABLE IF EXISTS "accounts";`,
|
|
46
46
|
`DROP TABLE IF EXISTS "sessions";`,
|
|
47
47
|
`DROP TABLE IF EXISTS "users";`,
|
|
48
|
-
`DROP TABLE IF EXISTS "
|
|
48
|
+
`DROP TABLE IF EXISTS "verification_tokens";`,
|
|
49
49
|
]
|
|
50
50
|
|
|
51
|
-
/**
|
|
52
|
-
* @param db
|
|
53
|
-
*/
|
|
54
51
|
async function up(db: D1Database) {
|
|
55
|
-
// run the migration
|
|
56
52
|
upSQLStatements.forEach(async (sql) => {
|
|
57
53
|
try {
|
|
58
|
-
|
|
54
|
+
await db.prepare(sql).run()
|
|
59
55
|
} catch (e: any) {
|
|
60
56
|
console.error(e.cause?.message, e.message)
|
|
61
57
|
}
|
package/src/queries.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// USER
|
|
2
|
+
export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)`
|
|
3
|
+
export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?`
|
|
4
|
+
export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?`
|
|
5
|
+
export const GET_USER_BY_ACCOUNTL_SQL = `
|
|
6
|
+
SELECT u.*
|
|
7
|
+
FROM users u JOIN accounts a ON a.userId = u.id
|
|
8
|
+
WHERE a.providerAccountId = ? AND a.provider = ?`
|
|
9
|
+
export const UPDATE_USER_BY_ID_SQL = `
|
|
10
|
+
UPDATE users
|
|
11
|
+
SET name = ?, email = ?, emailVerified = ?, image = ?
|
|
12
|
+
WHERE id = ? `
|
|
13
|
+
export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?`
|
|
14
|
+
|
|
15
|
+
// SESSION
|
|
16
|
+
export const CREATE_SESSION_SQL =
|
|
17
|
+
"INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)"
|
|
18
|
+
export const GET_SESSION_BY_TOKEN_SQL = `
|
|
19
|
+
SELECT id, sessionToken, userId, expires
|
|
20
|
+
FROM sessions
|
|
21
|
+
WHERE sessionToken = ?`
|
|
22
|
+
export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?`
|
|
23
|
+
export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?`
|
|
24
|
+
export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?`
|
|
25
|
+
|
|
26
|
+
// ACCOUNT
|
|
27
|
+
export const CREATE_ACCOUNT_SQL = `
|
|
28
|
+
INSERT INTO accounts (
|
|
29
|
+
id, userId, type, provider,
|
|
30
|
+
providerAccountId, refresh_token, access_token,
|
|
31
|
+
expires_at, token_type, scope, id_token, session_state,
|
|
32
|
+
oauth_token, oauth_token_secret
|
|
33
|
+
)
|
|
34
|
+
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
|
|
35
|
+
export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? `
|
|
36
|
+
export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?`
|
|
37
|
+
export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?`
|
|
38
|
+
export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?`
|
|
39
|
+
|
|
40
|
+
// VERIFICATION_TOKEN
|
|
41
|
+
export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?`
|
|
42
|
+
export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)`
|
|
43
|
+
export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?`
|