diff --git a/packages/adapter-d1/src/index.ts b/packages/adapter-d1/src/index.ts index 09b58d285d..0b5f0f8ea2 100644 --- a/packages/adapter-d1/src/index.ts +++ b/packages/adapter-d1/src/index.ts @@ -29,6 +29,26 @@ import { type VerificationToken as AdapterVerificationToken, isDate, } from "@auth/core/adapters" +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" export { up } from "./migrations.js" @@ -37,49 +57,7 @@ export { up } from "./migrations.js" */ export type D1Database = WorkerDatabase | MiniflareD1Database -export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)` -export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?` -export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?` -export const GET_USER_BY_ACCOUNTL_SQL = ` - SELECT u.* - FROM users u JOIN accounts a ON a.userId = u.id - WHERE a.providerAccountId = ? AND a.provider = ?` -export const UPDATE_USER_BY_ID_SQL = ` - UPDATE users - SET name = ?, email = ?, emailVerified = ?, image = ? - WHERE id = ? ` -export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?` - -// SESSION -export const CREATE_SESSION_SQL = - "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)" -export const GET_SESSION_BY_TOKEN_SQL = ` - SELECT id, sessionToken, userId, expires - FROM sessions - WHERE sessionToken = ?` -export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?` -export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?` -export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?` - -// ACCOUNT -export const CREATE_ACCOUNT_SQL = ` - INSERT INTO accounts ( - id, userId, type, provider, - providerAccountId, refresh_token, access_token, - expires_at, token_type, scope, id_token, session_state, - oauth_token, oauth_token_secret - ) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)` -export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? ` -export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?` -export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?` -export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?` - -// VERIFICATION_TOKEN -export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?` -export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)` -export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?` - +// format is borrowed from the supabase adapter, graciously function format(obj: Record): T { for (const [key, value] of Object.entries(obj)) { if (value === null) { diff --git a/packages/adapter-d1/src/migrations.ts b/packages/adapter-d1/src/migrations.ts index 4ff88df388..09f8a842d8 100644 --- a/packages/adapter-d1/src/migrations.ts +++ b/packages/adapter-d1/src/migrations.ts @@ -48,14 +48,10 @@ export const down = [ `DROP TABLE IF EXISTS "verification_token";`, ] -/** - * @param db - */ async function up(db: D1Database) { - // run the migration upSQLStatements.forEach(async (sql) => { try { - const res = await db.prepare(sql).run() + await db.prepare(sql).run() } catch (e: any) { console.error(e.cause?.message, e.message) } diff --git a/packages/adapter-d1/src/queries.ts b/packages/adapter-d1/src/queries.ts new file mode 100644 index 0000000000..cdd3383198 --- /dev/null +++ b/packages/adapter-d1/src/queries.ts @@ -0,0 +1,43 @@ +// USER +export const CREATE_USER_SQL = `INSERT INTO users (id, name, email, emailVerified, image) VALUES (?, ?, ?, ?, ?)` +export const GET_USER_BY_ID_SQL = `SELECT * FROM users WHERE id = ?` +export const GET_USER_BY_EMAIL_SQL = `SELECT * FROM users WHERE email = ?` +export const GET_USER_BY_ACCOUNTL_SQL = ` + SELECT u.* + FROM users u JOIN accounts a ON a.userId = u.id + WHERE a.providerAccountId = ? AND a.provider = ?` +export const UPDATE_USER_BY_ID_SQL = ` + UPDATE users + SET name = ?, email = ?, emailVerified = ?, image = ? + WHERE id = ? ` +export const DELETE_USER_SQL = `DELETE FROM users WHERE id = ?` + +// SESSION +export const CREATE_SESSION_SQL = + "INSERT INTO sessions (id, sessionToken, userId, expires) VALUES (?,?,?,?)" +export const GET_SESSION_BY_TOKEN_SQL = ` + SELECT id, sessionToken, userId, expires + FROM sessions + WHERE sessionToken = ?` +export const UPDATE_SESSION_BY_SESSION_TOKEN_SQL = `UPDATE sessions SET expires = ? WHERE sessionToken = ?` +export const DELETE_SESSION_SQL = `DELETE FROM sessions WHERE sessionToken = ?` +export const DELETE_SESSION_BY_USER_ID_SQL = `DELETE FROM sessions WHERE userId = ?` + +// ACCOUNT +export const CREATE_ACCOUNT_SQL = ` + INSERT INTO accounts ( + id, userId, type, provider, + providerAccountId, refresh_token, access_token, + expires_at, token_type, scope, id_token, session_state, + oauth_token, oauth_token_secret + ) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)` +export const GET_ACCOUNT_BY_ID_SQL = `SELECT * FROM accounts WHERE id = ? ` +export const GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `SELECT * FROM accounts WHERE provider = ? AND providerAccountId = ?` +export const DELETE_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL = `DELETE FROM accounts WHERE provider = ? AND providerAccountId = ?` +export const DELETE_ACCOUNT_BY_USER_ID_SQL = `DELETE FROM accounts WHERE userId = ?` + +// VERIFICATION_TOKEN +export const GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL = `SELECT * FROM verification_tokens WHERE identifier = ? AND token = ?` +export const CREATE_VERIFICATION_TOKEN_SQL = `INSERT INTO verification_tokens (identifier, expires, token) VALUES (?,?,?)` +export const DELETE_VERIFICATION_TOKEN_SQL = `DELETE FROM verification_tokens WHERE identifier = ? and token = ?` diff --git a/packages/adapter-d1/test/index.test.ts b/packages/adapter-d1/test/index.test.ts index c91ed4b479..83cb5692c3 100644 --- a/packages/adapter-d1/test/index.test.ts +++ b/packages/adapter-d1/test/index.test.ts @@ -1,14 +1,12 @@ import { beforeAll } from "vitest" +import { D1Adapter, up, getRecord } from "../src/" import { - D1Adapter, - up, - getRecord, GET_USER_BY_ID_SQL, GET_SESSION_BY_TOKEN_SQL, GET_ACCOUNT_BY_PROVIDER_AND_PROVIDER_ACCOUNT_ID_SQL, GET_VERIFICATION_TOKEN_BY_IDENTIFIER_AND_TOKEN_SQL, -} from "../src" +} from "../src/queries" import { AdapterSession, AdapterUser,