@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 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 { Adapter } from "@auth/core/adapters";
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,EACV,OAAO,EAKR,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAA;AAEpC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,mBAAmB,CAAA;AAI7D,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;AAiCjH,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,CA0LjD"}
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
- // this should probably be in a db.batch but batch has problems right now in miniflare
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
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["src/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,GAAG,CAAA;AAEnC,eAAO,MAAM,eAAe,UAuC3B,CAAA;AAED,eAAO,MAAM,IAAI,UAKhB,CAAA;AAED;;GAEG;AACH,iBAAe,EAAE,CAAC,EAAE,EAAE,UAAU,iBAS/B;AAED,OAAO,EAAE,EAAE,EAAE,CAAA"}
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 "verification_token";`,
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
- const res = await db.prepare(sql).run();
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.1.0",
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.31.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
@@ -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 type {
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
- // this should probably be in a db.batch but batch has problems right now in miniflare
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 "verification_token";`,
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
- const res = await db.prepare(sql).run()
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 = ?`