@auth/drizzle-adapter 0.9.0 → 1.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../src/lib/mysql.ts"],"names":[],"mappings":"AACA,OAAO,EAML,YAAY,EACZ,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAA;AAElE,wBAAgB,YAAY,CAAC,UAAU,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAA;AAE3D,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,CAAC,OAAO,aAAa,CAAC,EAC1C,OAAO,0BAAsB,GAC5B,OAAO,CAsLT"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../src/lib/mysql.ts"],"names":[],"mappings":"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"}
package/lib/mysql.js CHANGED
@@ -1,189 +1,177 @@
1
- import { and, eq } from "drizzle-orm";
2
- import { int, timestamp, mysqlTable as defaultMySqlTableFn, primaryKey, varchar, } from "drizzle-orm/mysql-core";
3
- export function createTables(mySqlTable) {
4
- const users = mySqlTable("user", {
5
- id: varchar("id", { length: 255 }).notNull().primaryKey(),
6
- name: varchar("name", { length: 255 }),
7
- email: varchar("email", { length: 255 }).notNull(),
8
- emailVerified: timestamp("emailVerified", {
9
- mode: "date",
10
- fsp: 3,
11
- }).defaultNow(),
12
- image: varchar("image", { length: 255 }),
13
- });
14
- const accounts = mySqlTable("account", {
15
- userId: varchar("userId", { length: 255 })
16
- .notNull()
17
- .references(() => users.id, { onDelete: "cascade" }),
18
- type: varchar("type", { length: 255 })
19
- .$type()
20
- .notNull(),
21
- provider: varchar("provider", { length: 255 }).notNull(),
22
- providerAccountId: varchar("providerAccountId", {
23
- length: 255,
24
- }).notNull(),
25
- refresh_token: varchar("refresh_token", { length: 255 }),
26
- access_token: varchar("access_token", { length: 255 }),
27
- expires_at: int("expires_at"),
28
- token_type: varchar("token_type", { length: 255 }),
29
- scope: varchar("scope", { length: 255 }),
30
- id_token: varchar("id_token", { length: 255 }),
31
- session_state: varchar("session_state", { length: 255 }),
32
- }, (account) => ({
33
- compoundKey: primaryKey(account.provider, account.providerAccountId),
34
- }));
35
- const sessions = mySqlTable("session", {
36
- sessionToken: varchar("sessionToken", { length: 255 })
37
- .notNull()
38
- .primaryKey(),
39
- userId: varchar("userId", { length: 255 })
40
- .notNull()
41
- .references(() => users.id, { onDelete: "cascade" }),
42
- expires: timestamp("expires", { mode: "date" }).notNull(),
43
- });
44
- const verificationTokens = mySqlTable("verificationToken", {
45
- identifier: varchar("identifier", { length: 255 }).notNull(),
46
- token: varchar("token", { length: 255 }).notNull(),
47
- expires: timestamp("expires", { mode: "date" }).notNull(),
48
- }, (vt) => ({
49
- compoundKey: primaryKey(vt.identifier, vt.token),
50
- }));
51
- return { users, accounts, sessions, verificationTokens };
52
- }
53
- export function mySqlDrizzleAdapter(client, tableFn = defaultMySqlTableFn) {
54
- const { users, accounts, sessions, verificationTokens } = createTables(tableFn);
1
+ import { and, eq, getTableColumns } from "drizzle-orm";
2
+ import { int, mysqlTable, primaryKey, timestamp, varchar, } from "drizzle-orm/mysql-core";
3
+ export const mysqlUsersTable = mysqlTable("user", {
4
+ id: varchar("id", { length: 255 })
5
+ .primaryKey()
6
+ .$defaultFn(() => crypto.randomUUID()),
7
+ name: varchar("name", { length: 255 }),
8
+ email: varchar("email", { length: 255 }).notNull(),
9
+ emailVerified: timestamp("emailVerified", { mode: "date", fsp: 3 }),
10
+ image: varchar("image", { length: 255 }),
11
+ });
12
+ export const mysqlAccountsTable = mysqlTable("account", {
13
+ userId: varchar("userId", { length: 255 })
14
+ .notNull()
15
+ .references(() => mysqlUsersTable.id, { onDelete: "cascade" }),
16
+ type: varchar("type", { length: 255 })
17
+ .$type()
18
+ .notNull(),
19
+ provider: varchar("provider", { length: 255 }).notNull(),
20
+ providerAccountId: varchar("providerAccountId", { length: 255 }).notNull(),
21
+ refresh_token: varchar("refresh_token", { length: 255 }),
22
+ access_token: varchar("access_token", { length: 255 }),
23
+ expires_at: int("expires_at"),
24
+ token_type: varchar("token_type", { length: 255 }),
25
+ scope: varchar("scope", { length: 255 }),
26
+ id_token: varchar("id_token", { length: 2048 }),
27
+ session_state: varchar("session_state", { length: 255 }),
28
+ }, (account) => ({
29
+ compositePk: primaryKey({
30
+ columns: [account.provider, account.providerAccountId],
31
+ }),
32
+ }));
33
+ export const mysqlSessionsTable = mysqlTable("session", {
34
+ sessionToken: varchar("sessionToken", { length: 255 }).primaryKey(),
35
+ userId: varchar("userId", { length: 255 })
36
+ .notNull()
37
+ .references(() => mysqlUsersTable.id, { onDelete: "cascade" }),
38
+ expires: timestamp("expires", { mode: "date" }).notNull(),
39
+ });
40
+ export const mysqlVerificationTokensTable = mysqlTable("verificationToken", {
41
+ identifier: varchar("identifier", { length: 255 }).notNull(),
42
+ token: varchar("token", { length: 255 }).notNull(),
43
+ expires: timestamp("expires", { mode: "date" }).notNull(),
44
+ }, (vt) => ({
45
+ compositePk: primaryKey({ columns: [vt.identifier, vt.token] }),
46
+ }));
47
+ export function MySqlDrizzleAdapter(client, schema = {
48
+ usersTable: mysqlUsersTable,
49
+ accountsTable: mysqlAccountsTable,
50
+ sessionsTable: mysqlSessionsTable,
51
+ verificationTokensTable: mysqlVerificationTokensTable,
52
+ }) {
53
+ const { usersTable, accountsTable, sessionsTable, verificationTokensTable } = schema;
55
54
  return {
56
55
  async createUser(data) {
57
- const id = crypto.randomUUID();
58
- await client.insert(users).values({ ...data, id });
59
- return await client
56
+ const hasDefaultId = getTableColumns(usersTable)["id"]["hasDefault"];
57
+ await client
58
+ .insert(usersTable)
59
+ .values(hasDefaultId ? data : { ...data, id: crypto.randomUUID() });
60
+ return client
60
61
  .select()
61
- .from(users)
62
- .where(eq(users.id, id))
62
+ .from(usersTable)
63
+ .where(eq(usersTable.email, data.email))
63
64
  .then((res) => res[0]);
64
65
  },
65
- async getUser(data) {
66
- const thing = (await client
66
+ async getUser(userId) {
67
+ return client
67
68
  .select()
68
- .from(users)
69
- .where(eq(users.id, data))
70
- .then((res) => res[0])) ?? null;
71
- return thing;
69
+ .from(usersTable)
70
+ .where(eq(usersTable.id, userId))
71
+ .then((res) => (res.length > 0 ? res[0] : null));
72
72
  },
73
- async getUserByEmail(data) {
74
- const user = (await client
73
+ async getUserByEmail(email) {
74
+ return client
75
75
  .select()
76
- .from(users)
77
- .where(eq(users.email, data))
78
- .then((res) => res[0])) ?? null;
79
- return user;
76
+ .from(usersTable)
77
+ .where(eq(usersTable.email, email))
78
+ .then((res) => (res.length > 0 ? res[0] : null));
80
79
  },
81
80
  async createSession(data) {
82
- await client.insert(sessions).values(data);
83
- return await client
81
+ await client.insert(sessionsTable).values(data);
82
+ return client
84
83
  .select()
85
- .from(sessions)
86
- .where(eq(sessions.sessionToken, data.sessionToken))
84
+ .from(sessionsTable)
85
+ .where(eq(sessionsTable.sessionToken, data.sessionToken))
87
86
  .then((res) => res[0]);
88
87
  },
89
- async getSessionAndUser(data) {
90
- const sessionAndUser = (await client
88
+ async getSessionAndUser(sessionToken) {
89
+ return client
91
90
  .select({
92
- session: sessions,
93
- user: users,
91
+ session: sessionsTable,
92
+ user: usersTable,
94
93
  })
95
- .from(sessions)
96
- .where(eq(sessions.sessionToken, data))
97
- .innerJoin(users, eq(users.id, sessions.userId))
98
- .then((res) => res[0])) ?? null;
99
- return sessionAndUser;
94
+ .from(sessionsTable)
95
+ .where(eq(sessionsTable.sessionToken, sessionToken))
96
+ .innerJoin(usersTable, eq(usersTable.id, sessionsTable.userId))
97
+ .then((res) => (res.length > 0 ? res[0] : null));
100
98
  },
101
99
  async updateUser(data) {
102
100
  if (!data.id) {
103
101
  throw new Error("No user id.");
104
102
  }
105
- await client.update(users).set(data).where(eq(users.id, data.id));
106
- return await client
103
+ await client
104
+ .update(usersTable)
105
+ .set(data)
106
+ .where(eq(usersTable.id, data.id));
107
+ const [result] = await client
107
108
  .select()
108
- .from(users)
109
- .where(eq(users.id, data.id))
110
- .then((res) => res[0]);
109
+ .from(usersTable)
110
+ .where(eq(usersTable.id, data.id));
111
+ if (!result) {
112
+ throw new Error("No user found.");
113
+ }
114
+ return result;
111
115
  },
112
116
  async updateSession(data) {
113
117
  await client
114
- .update(sessions)
118
+ .update(sessionsTable)
115
119
  .set(data)
116
- .where(eq(sessions.sessionToken, data.sessionToken));
117
- return await client
120
+ .where(eq(sessionsTable.sessionToken, data.sessionToken));
121
+ return client
118
122
  .select()
119
- .from(sessions)
120
- .where(eq(sessions.sessionToken, data.sessionToken))
123
+ .from(sessionsTable)
124
+ .where(eq(sessionsTable.sessionToken, data.sessionToken))
121
125
  .then((res) => res[0]);
122
126
  },
123
- async linkAccount(rawAccount) {
124
- await client.insert(accounts).values(rawAccount);
127
+ async linkAccount(data) {
128
+ await client.insert(accountsTable).values(data);
125
129
  },
126
130
  async getUserByAccount(account) {
127
- const dbAccount = (await client
128
- .select()
129
- .from(accounts)
130
- .where(and(eq(accounts.providerAccountId, account.providerAccountId), eq(accounts.provider, account.provider)))
131
- .leftJoin(users, eq(accounts.userId, users.id))
132
- .then((res) => res[0])) ?? null;
133
- if (!dbAccount) {
134
- return null;
135
- }
136
- return dbAccount.user;
131
+ const result = await client
132
+ .select({
133
+ account: accountsTable,
134
+ user: usersTable,
135
+ })
136
+ .from(accountsTable)
137
+ .innerJoin(usersTable, eq(accountsTable.userId, usersTable.id))
138
+ .where(and(eq(accountsTable.provider, account.provider), eq(accountsTable.providerAccountId, account.providerAccountId)))
139
+ .then((res) => res[0]);
140
+ return result?.user ?? null;
137
141
  },
138
142
  async deleteSession(sessionToken) {
139
- const session = (await client
140
- .select()
141
- .from(sessions)
142
- .where(eq(sessions.sessionToken, sessionToken))
143
- .then((res) => res[0])) ?? null;
144
143
  await client
145
- .delete(sessions)
146
- .where(eq(sessions.sessionToken, sessionToken));
147
- return session;
144
+ .delete(sessionsTable)
145
+ .where(eq(sessionsTable.sessionToken, sessionToken));
148
146
  },
149
- async createVerificationToken(token) {
150
- await client.insert(verificationTokens).values(token);
151
- return await client
147
+ async createVerificationToken(data) {
148
+ await client.insert(verificationTokensTable).values(data);
149
+ return client
152
150
  .select()
153
- .from(verificationTokens)
154
- .where(eq(verificationTokens.identifier, token.identifier))
151
+ .from(verificationTokensTable)
152
+ .where(eq(verificationTokensTable.identifier, data.identifier))
155
153
  .then((res) => res[0]);
156
154
  },
157
- async useVerificationToken(token) {
158
- try {
159
- const deletedToken = (await client
160
- .select()
161
- .from(verificationTokens)
162
- .where(and(eq(verificationTokens.identifier, token.identifier), eq(verificationTokens.token, token.token)))
163
- .then((res) => res[0])) ?? null;
155
+ async useVerificationToken(params) {
156
+ const deletedToken = await client
157
+ .select()
158
+ .from(verificationTokensTable)
159
+ .where(and(eq(verificationTokensTable.identifier, params.identifier), eq(verificationTokensTable.token, params.token)))
160
+ .then((res) => (res.length > 0 ? res[0] : null));
161
+ if (deletedToken) {
164
162
  await client
165
- .delete(verificationTokens)
166
- .where(and(eq(verificationTokens.identifier, token.identifier), eq(verificationTokens.token, token.token)));
167
- return deletedToken;
168
- }
169
- catch (err) {
170
- throw new Error("No verification token found.");
163
+ .delete(verificationTokensTable)
164
+ .where(and(eq(verificationTokensTable.identifier, params.identifier), eq(verificationTokensTable.token, params.token)));
171
165
  }
166
+ return deletedToken;
172
167
  },
173
168
  async deleteUser(id) {
174
- const user = await client
175
- .select()
176
- .from(users)
177
- .where(eq(users.id, id))
178
- .then((res) => res[0] ?? null);
179
- await client.delete(users).where(eq(users.id, id));
180
- return user;
169
+ await client.delete(usersTable).where(eq(usersTable.id, id));
181
170
  },
182
- async unlinkAccount(account) {
171
+ async unlinkAccount(params) {
183
172
  await client
184
- .delete(accounts)
185
- .where(and(eq(accounts.providerAccountId, account.providerAccountId), eq(accounts.provider, account.provider)));
186
- return undefined;
173
+ .delete(accountsTable)
174
+ .where(and(eq(accountsTable.provider, params.provider), eq(accountsTable.providerAccountId, params.providerAccountId)));
187
175
  },
188
176
  };
189
177
  }