@fortressauth/adapter-sql 0.1.7 → 0.1.9
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/README.md +57 -16
- package/dist/adapter.d.ts +13 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +162 -11
- package/dist/adapter.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/001_initial.d.ts +3 -2
- package/dist/migrations/001_initial.d.ts.map +1 -1
- package/dist/migrations/001_initial.js +47 -29
- package/dist/migrations/001_initial.js.map +1 -1
- package/dist/migrations/002_email_verification.d.ts +5 -0
- package/dist/migrations/002_email_verification.d.ts.map +1 -0
- package/dist/migrations/002_email_verification.js +31 -0
- package/dist/migrations/002_email_verification.js.map +1 -0
- package/dist/migrations/003_password_resets.d.ts +5 -0
- package/dist/migrations/003_password_resets.d.ts.map +1 -0
- package/dist/migrations/003_password_resets.js +31 -0
- package/dist/migrations/003_password_resets.js.map +1 -0
- package/dist/migrations/004_session_split_token.d.ts +5 -0
- package/dist/migrations/004_session_split_token.d.ts.map +1 -0
- package/dist/migrations/004_session_split_token.js +46 -0
- package/dist/migrations/004_session_split_token.js.map +1 -0
- package/dist/migrations/005_oauth_support.d.ts +5 -0
- package/dist/migrations/005_oauth_support.d.ts.map +1 -0
- package/dist/migrations/005_oauth_support.js +27 -0
- package/dist/migrations/005_oauth_support.js.map +1 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +47 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/mysql.d.ts +4 -0
- package/dist/migrations/mysql.d.ts.map +1 -0
- package/dist/migrations/mysql.js +8 -0
- package/dist/migrations/mysql.js.map +1 -0
- package/dist/migrations/postgres.d.ts +4 -0
- package/dist/migrations/postgres.d.ts.map +1 -0
- package/dist/migrations/postgres.js +8 -0
- package/dist/migrations/postgres.js.map +1 -0
- package/dist/migrations/types.d.ts +9 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +14 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/schema.d.ts +30 -1
- package/dist/schema.d.ts.map +1 -1
- package/package.json +15 -6
package/README.md
CHANGED
|
@@ -4,10 +4,10 @@ SQL database adapter for FortressAuth using Kysely query builder.
|
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
7
|
+
- Multi-Database Support: PostgreSQL, MySQL, SQLite
|
|
8
|
+
- Type-Safe Queries: Powered by Kysely
|
|
9
|
+
- Transactions: Full transaction support
|
|
10
|
+
- Migrations: Built-in migration system
|
|
11
11
|
|
|
12
12
|
## Installation
|
|
13
13
|
|
|
@@ -32,6 +32,19 @@ npm install mysql2
|
|
|
32
32
|
npm install better-sqlite3
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
+
## Environment Variables
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# SQLite (default for development)
|
|
39
|
+
DATABASE_URL=./fortress.db
|
|
40
|
+
|
|
41
|
+
# PostgreSQL
|
|
42
|
+
DATABASE_URL=postgresql://user:password@localhost:5432/fortressauth
|
|
43
|
+
|
|
44
|
+
# MySQL
|
|
45
|
+
DATABASE_URL=mysql://user:password@localhost:3306/fortressauth
|
|
46
|
+
```
|
|
47
|
+
|
|
35
48
|
## Quick Start
|
|
36
49
|
|
|
37
50
|
### SQLite
|
|
@@ -47,7 +60,7 @@ const db = new Kysely({
|
|
|
47
60
|
});
|
|
48
61
|
|
|
49
62
|
// Run migrations
|
|
50
|
-
await up(db);
|
|
63
|
+
await up(db, { dialect: 'sqlite' });
|
|
51
64
|
|
|
52
65
|
// Create adapter
|
|
53
66
|
const adapter = new SqlAdapter(db, { dialect: 'sqlite' });
|
|
@@ -63,13 +76,12 @@ import { SqlAdapter, up } from '@fortressauth/adapter-sql';
|
|
|
63
76
|
const db = new Kysely({
|
|
64
77
|
dialect: new PostgresDialect({
|
|
65
78
|
pool: new Pool({
|
|
66
|
-
|
|
67
|
-
database: 'auth',
|
|
79
|
+
connectionString: process.env.DATABASE_URL,
|
|
68
80
|
}),
|
|
69
81
|
}),
|
|
70
82
|
});
|
|
71
83
|
|
|
72
|
-
await up(db);
|
|
84
|
+
await up(db, { dialect: 'postgres' });
|
|
73
85
|
const adapter = new SqlAdapter(db, { dialect: 'postgres' });
|
|
74
86
|
```
|
|
75
87
|
|
|
@@ -82,14 +94,11 @@ import { SqlAdapter, up } from '@fortressauth/adapter-sql';
|
|
|
82
94
|
|
|
83
95
|
const db = new Kysely({
|
|
84
96
|
dialect: new MysqlDialect({
|
|
85
|
-
pool: createPool(
|
|
86
|
-
host: 'localhost',
|
|
87
|
-
database: 'auth',
|
|
88
|
-
}),
|
|
97
|
+
pool: createPool(process.env.DATABASE_URL!),
|
|
89
98
|
}),
|
|
90
99
|
});
|
|
91
100
|
|
|
92
|
-
await up(db);
|
|
101
|
+
await up(db, { dialect: 'mysql' });
|
|
93
102
|
const adapter = new SqlAdapter(db, { dialect: 'mysql' });
|
|
94
103
|
```
|
|
95
104
|
|
|
@@ -107,13 +116,45 @@ The adapter creates four tables:
|
|
|
107
116
|
```typescript
|
|
108
117
|
import { up, down } from '@fortressauth/adapter-sql';
|
|
109
118
|
|
|
110
|
-
// Apply migrations
|
|
111
|
-
await up(db);
|
|
119
|
+
// Apply migrations with the correct dialect
|
|
120
|
+
await up(db, { dialect: 'postgres' });
|
|
112
121
|
|
|
113
122
|
// Rollback migrations
|
|
114
|
-
await down(db);
|
|
123
|
+
await down(db, { dialect: 'postgres' });
|
|
115
124
|
```
|
|
116
125
|
|
|
126
|
+
## Database Setup
|
|
127
|
+
|
|
128
|
+
### PostgreSQL
|
|
129
|
+
|
|
130
|
+
Connection string example:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
postgresql://user:password@localhost:5432/fortressauth
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Required permissions for the database user:
|
|
137
|
+
|
|
138
|
+
- CREATE, ALTER, DROP tables
|
|
139
|
+
- CREATE, DROP indexes
|
|
140
|
+
- SELECT, INSERT, UPDATE, DELETE
|
|
141
|
+
|
|
142
|
+
### MySQL
|
|
143
|
+
|
|
144
|
+
Connection string example:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
mysql://user:password@localhost:3306/fortressauth
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Required permissions for the database user:
|
|
151
|
+
|
|
152
|
+
- CREATE, ALTER, DROP tables
|
|
153
|
+
- CREATE, DROP indexes
|
|
154
|
+
- SELECT, INSERT, UPDATE, DELETE
|
|
155
|
+
|
|
156
|
+
MySQL migrations use `TINYINT` for boolean fields and `DATETIME` for timestamps.
|
|
157
|
+
|
|
117
158
|
## Transactions
|
|
118
159
|
|
|
119
160
|
```typescript
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Account, type AuthRepository, type LoginAttempt, type Result, Session, User } from '@fortressauth/core';
|
|
1
|
+
import { Account, type AuthRepository, EmailVerificationToken, type LoginAttempt, OAuthState, PasswordResetToken, type Result, Session, User } from '@fortressauth/core';
|
|
2
2
|
import type { Kysely } from 'kysely';
|
|
3
3
|
import type { Database } from './schema.js';
|
|
4
4
|
export type DatabaseDialect = 'sqlite' | 'postgres' | 'mysql';
|
|
@@ -22,10 +22,21 @@ export declare class SqlAdapter implements AuthRepository {
|
|
|
22
22
|
findAccountByProvider(providerId: string, providerUserId: string): Promise<Account | null>;
|
|
23
23
|
findEmailAccountByUserId(userId: string): Promise<Account | null>;
|
|
24
24
|
createAccount(account: Account): Promise<void>;
|
|
25
|
-
|
|
25
|
+
updateEmailAccountPassword(userId: string, passwordHash: string): Promise<void>;
|
|
26
|
+
findSessionBySelector(selector: string): Promise<Session | null>;
|
|
26
27
|
createSession(session: Session): Promise<void>;
|
|
27
28
|
deleteSession(sessionId: string): Promise<void>;
|
|
28
29
|
deleteSessionsByUserId(userId: string): Promise<void>;
|
|
30
|
+
createEmailVerificationToken(token: EmailVerificationToken): Promise<void>;
|
|
31
|
+
findEmailVerificationBySelector(selector: string): Promise<EmailVerificationToken | null>;
|
|
32
|
+
deleteEmailVerification(id: string): Promise<void>;
|
|
33
|
+
createPasswordResetToken(token: PasswordResetToken): Promise<void>;
|
|
34
|
+
findPasswordResetBySelector(selector: string): Promise<PasswordResetToken | null>;
|
|
35
|
+
findPasswordResetsByUserId(userId: string): Promise<PasswordResetToken[]>;
|
|
36
|
+
deletePasswordReset(id: string): Promise<void>;
|
|
37
|
+
createOAuthState(state: OAuthState): Promise<void>;
|
|
38
|
+
findOAuthStateByState(state: string): Promise<OAuthState | null>;
|
|
39
|
+
deleteOAuthState(id: string): Promise<void>;
|
|
29
40
|
recordLoginAttempt(attempt: LoginAttempt): Promise<void>;
|
|
30
41
|
countRecentFailedAttempts(email: string, windowMs: number): Promise<number>;
|
|
31
42
|
transaction<T>(fn: (repo: AuthRepository) => Promise<T>): Promise<T>;
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js
CHANGED
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
import { Account, err, ok, Session, User, } from '@fortressauth/core';
|
|
1
|
+
import { Account, EmailVerificationToken, err, OAuthState, ok, PasswordResetToken, Session, User, } from '@fortressauth/core';
|
|
2
|
+
/**
|
|
3
|
+
* Checks if an error is a duplicate key/unique constraint violation.
|
|
4
|
+
* Handles SQLite, PostgreSQL, and MySQL error formats.
|
|
5
|
+
*/
|
|
6
|
+
function isDuplicateKeyError(error) {
|
|
7
|
+
if (!(error instanceof Error)) {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
// Check error codes for different database drivers
|
|
11
|
+
const errorWithCode = error;
|
|
12
|
+
// SQLite: SQLITE_CONSTRAINT
|
|
13
|
+
// PostgreSQL: 23505 (unique_violation)
|
|
14
|
+
// MySQL: ER_DUP_ENTRY
|
|
15
|
+
if (errorWithCode.code === 'SQLITE_CONSTRAINT' ||
|
|
16
|
+
errorWithCode.code === '23505' ||
|
|
17
|
+
errorWithCode.code === 'ER_DUP_ENTRY') {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
// MySQL errno 1062 = Duplicate entry
|
|
21
|
+
if (errorWithCode.errno === 1062) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
// Fallback: check error message patterns
|
|
25
|
+
const message = error.message ?? '';
|
|
26
|
+
return (message.includes('UNIQUE constraint failed') || /duplicate key|duplicate entry/i.test(message));
|
|
27
|
+
}
|
|
2
28
|
export class SqlAdapter {
|
|
3
29
|
db;
|
|
4
30
|
dialect;
|
|
@@ -73,12 +99,7 @@ export class SqlAdapter {
|
|
|
73
99
|
return ok(undefined);
|
|
74
100
|
}
|
|
75
101
|
catch (error) {
|
|
76
|
-
|
|
77
|
-
const isUniqueViolation = error instanceof Error &&
|
|
78
|
-
(('code' in error && (error.code === 'SQLITE_CONSTRAINT' || error.code === '23505')) ||
|
|
79
|
-
error.message?.includes('UNIQUE constraint failed') ||
|
|
80
|
-
error.message?.includes('duplicate key'));
|
|
81
|
-
if (isUniqueViolation) {
|
|
102
|
+
if (isDuplicateKeyError(error)) {
|
|
82
103
|
return err('EMAIL_EXISTS');
|
|
83
104
|
}
|
|
84
105
|
throw error;
|
|
@@ -147,11 +168,19 @@ export class SqlAdapter {
|
|
|
147
168
|
})
|
|
148
169
|
.execute();
|
|
149
170
|
}
|
|
150
|
-
async
|
|
171
|
+
async updateEmailAccountPassword(userId, passwordHash) {
|
|
172
|
+
await this.db
|
|
173
|
+
.updateTable('accounts')
|
|
174
|
+
.set({ password_hash: passwordHash })
|
|
175
|
+
.where('user_id', '=', userId)
|
|
176
|
+
.where('provider_id', '=', 'email')
|
|
177
|
+
.execute();
|
|
178
|
+
}
|
|
179
|
+
async findSessionBySelector(selector) {
|
|
151
180
|
const row = await this.db
|
|
152
181
|
.selectFrom('sessions')
|
|
153
182
|
.selectAll()
|
|
154
|
-
.where('
|
|
183
|
+
.where('selector', '=', selector)
|
|
155
184
|
.executeTakeFirst();
|
|
156
185
|
if (!row) {
|
|
157
186
|
return null;
|
|
@@ -159,7 +188,8 @@ export class SqlAdapter {
|
|
|
159
188
|
return Session.rehydrate({
|
|
160
189
|
id: row.id,
|
|
161
190
|
userId: row.user_id,
|
|
162
|
-
|
|
191
|
+
selector: row.selector,
|
|
192
|
+
verifierHash: row.verifier_hash,
|
|
163
193
|
expiresAt: this.parseDate(row.expires_at),
|
|
164
194
|
ipAddress: row.ip_address,
|
|
165
195
|
userAgent: row.user_agent,
|
|
@@ -172,7 +202,8 @@ export class SqlAdapter {
|
|
|
172
202
|
.values({
|
|
173
203
|
id: session.id,
|
|
174
204
|
user_id: session.userId,
|
|
175
|
-
|
|
205
|
+
selector: session.selector,
|
|
206
|
+
verifier_hash: session.verifierHash,
|
|
176
207
|
expires_at: this.serializeDate(session.expiresAt),
|
|
177
208
|
ip_address: session.ipAddress,
|
|
178
209
|
user_agent: session.userAgent,
|
|
@@ -186,6 +217,126 @@ export class SqlAdapter {
|
|
|
186
217
|
async deleteSessionsByUserId(userId) {
|
|
187
218
|
await this.db.deleteFrom('sessions').where('user_id', '=', userId).execute();
|
|
188
219
|
}
|
|
220
|
+
async createEmailVerificationToken(token) {
|
|
221
|
+
await this.db
|
|
222
|
+
.insertInto('email_verifications')
|
|
223
|
+
.values({
|
|
224
|
+
id: token.id,
|
|
225
|
+
user_id: token.userId,
|
|
226
|
+
selector: token.selector,
|
|
227
|
+
verifier_hash: token.verifierHash,
|
|
228
|
+
expires_at: this.serializeDate(token.expiresAt),
|
|
229
|
+
created_at: this.serializeDate(token.createdAt),
|
|
230
|
+
})
|
|
231
|
+
.execute();
|
|
232
|
+
}
|
|
233
|
+
async findEmailVerificationBySelector(selector) {
|
|
234
|
+
const row = await this.db
|
|
235
|
+
.selectFrom('email_verifications')
|
|
236
|
+
.selectAll()
|
|
237
|
+
.where('selector', '=', selector)
|
|
238
|
+
.executeTakeFirst();
|
|
239
|
+
if (!row) {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
return EmailVerificationToken.rehydrate({
|
|
243
|
+
id: row.id,
|
|
244
|
+
userId: row.user_id,
|
|
245
|
+
selector: row.selector,
|
|
246
|
+
verifierHash: row.verifier_hash,
|
|
247
|
+
expiresAt: this.parseDate(row.expires_at),
|
|
248
|
+
createdAt: this.parseDate(row.created_at),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
async deleteEmailVerification(id) {
|
|
252
|
+
await this.db.deleteFrom('email_verifications').where('id', '=', id).execute();
|
|
253
|
+
}
|
|
254
|
+
async createPasswordResetToken(token) {
|
|
255
|
+
await this.db
|
|
256
|
+
.insertInto('password_resets')
|
|
257
|
+
.values({
|
|
258
|
+
id: token.id,
|
|
259
|
+
user_id: token.userId,
|
|
260
|
+
selector: token.selector,
|
|
261
|
+
verifier_hash: token.verifierHash,
|
|
262
|
+
expires_at: this.serializeDate(token.expiresAt),
|
|
263
|
+
created_at: this.serializeDate(token.createdAt),
|
|
264
|
+
})
|
|
265
|
+
.execute();
|
|
266
|
+
}
|
|
267
|
+
async findPasswordResetBySelector(selector) {
|
|
268
|
+
const row = await this.db
|
|
269
|
+
.selectFrom('password_resets')
|
|
270
|
+
.selectAll()
|
|
271
|
+
.where('selector', '=', selector)
|
|
272
|
+
.executeTakeFirst();
|
|
273
|
+
if (!row) {
|
|
274
|
+
return null;
|
|
275
|
+
}
|
|
276
|
+
return PasswordResetToken.rehydrate({
|
|
277
|
+
id: row.id,
|
|
278
|
+
userId: row.user_id,
|
|
279
|
+
selector: row.selector,
|
|
280
|
+
verifierHash: row.verifier_hash,
|
|
281
|
+
expiresAt: this.parseDate(row.expires_at),
|
|
282
|
+
createdAt: this.parseDate(row.created_at),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
async findPasswordResetsByUserId(userId) {
|
|
286
|
+
const rows = await this.db
|
|
287
|
+
.selectFrom('password_resets')
|
|
288
|
+
.selectAll()
|
|
289
|
+
.where('user_id', '=', userId)
|
|
290
|
+
.orderBy('created_at', 'asc')
|
|
291
|
+
.execute();
|
|
292
|
+
return rows.map((row) => PasswordResetToken.rehydrate({
|
|
293
|
+
id: row.id,
|
|
294
|
+
userId: row.user_id,
|
|
295
|
+
selector: row.selector,
|
|
296
|
+
verifierHash: row.verifier_hash,
|
|
297
|
+
expiresAt: this.parseDate(row.expires_at),
|
|
298
|
+
createdAt: this.parseDate(row.created_at),
|
|
299
|
+
}));
|
|
300
|
+
}
|
|
301
|
+
async deletePasswordReset(id) {
|
|
302
|
+
await this.db.deleteFrom('password_resets').where('id', '=', id).execute();
|
|
303
|
+
}
|
|
304
|
+
async createOAuthState(state) {
|
|
305
|
+
await this.db
|
|
306
|
+
.insertInto('oauth_states')
|
|
307
|
+
.values({
|
|
308
|
+
id: state.id,
|
|
309
|
+
provider_id: state.providerId,
|
|
310
|
+
state: state.state,
|
|
311
|
+
code_verifier: state.codeVerifier,
|
|
312
|
+
redirect_uri: state.redirectUri,
|
|
313
|
+
expires_at: this.serializeDate(state.expiresAt),
|
|
314
|
+
created_at: this.serializeDate(state.createdAt),
|
|
315
|
+
})
|
|
316
|
+
.execute();
|
|
317
|
+
}
|
|
318
|
+
async findOAuthStateByState(state) {
|
|
319
|
+
const row = await this.db
|
|
320
|
+
.selectFrom('oauth_states')
|
|
321
|
+
.selectAll()
|
|
322
|
+
.where('state', '=', state)
|
|
323
|
+
.executeTakeFirst();
|
|
324
|
+
if (!row) {
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
return OAuthState.rehydrate({
|
|
328
|
+
id: row.id,
|
|
329
|
+
providerId: row.provider_id,
|
|
330
|
+
state: row.state,
|
|
331
|
+
codeVerifier: row.code_verifier,
|
|
332
|
+
redirectUri: row.redirect_uri,
|
|
333
|
+
expiresAt: this.parseDate(row.expires_at),
|
|
334
|
+
createdAt: this.parseDate(row.created_at),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
async deleteOAuthState(id) {
|
|
338
|
+
await this.db.deleteFrom('oauth_states').where('id', '=', id).execute();
|
|
339
|
+
}
|
|
189
340
|
async recordLoginAttempt(attempt) {
|
|
190
341
|
await this.db
|
|
191
342
|
.insertInto('login_attempts')
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,sBAAsB,EACtB,GAAG,EAGH,UAAU,EACV,EAAE,EACF,kBAAkB,EAGlB,OAAO,EACP,IAAI,GACL,MAAM,oBAAoB,CAAC;AAW5B;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mDAAmD;IACnD,MAAM,aAAa,GAAG,KAAkD,CAAC;IAEzE,4BAA4B;IAC5B,uCAAuC;IACvC,sBAAsB;IACtB,IACE,aAAa,CAAC,IAAI,KAAK,mBAAmB;QAC1C,aAAa,CAAC,IAAI,KAAK,OAAO;QAC9B,aAAa,CAAC,IAAI,KAAK,cAAc,EACrC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,aAAa,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yCAAyC;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,OAAO,CACL,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAAI,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,UAAU;IAIF;IAHF,OAAO,CAAkB;IAE1C,YACmB,EAAoB,EACrC,UAA6B,EAAE;QADd,OAAE,GAAF,EAAE,CAAkB;QAGrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;IAC7C,CAAC;IAEO,QAAQ;QACd,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC;IACnC,CAAC;IAEO,YAAY,CAAC,KAAuB;QAC1C,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEO,gBAAgB,CAAC,KAAc;QACrC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnD,CAAC;IAEO,SAAS,CAAC,KAAoB;QACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7D,CAAC;IAEO,aAAa,CAAC,KAAW;QAC/B,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,OAAO,CAAC;aACnB,SAAS,EAAE;aACX,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;aACxC,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;SACxE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,OAAO,CAAC;aACnB,SAAS,EAAE;aACX,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;aACpB,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC;YACpD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;SACxE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,EAAE;iBACV,UAAU,CAAC,OAAO,CAAC;iBACnB,MAAM,CAAC;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;gBACzD,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC9C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC9C,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;aAC7E,CAAC;iBACD,OAAO,EAAE,CAAC;YAEb,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAU;QACzB,MAAM,IAAI,CAAC,EAAE;aACV,WAAW,CAAC,OAAO,CAAC;aACpB,GAAG,CAAC;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;YACzD,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;YAC9C,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;SAC7E,CAAC;aACD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;aACzB,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,UAAkB,EAAE,cAAsB;QACpE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,UAAU,CAAC;aACtB,SAAS,EAAE;aACX,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,UAAU,CAAC;aACrC,KAAK,CAAC,kBAAkB,EAAE,GAAG,EAAE,cAAc,CAAC;aAC9C,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC,SAAS,CAAC;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,UAAU,EAAE,GAAG,CAAC,WAAyB;YACzC,cAAc,EAAE,GAAG,CAAC,gBAAgB;YACpC,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,MAAc;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,UAAU,CAAC;aACtB,SAAS,EAAE;aACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;aAC7B,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC;aAClC,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC,SAAS,CAAC;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,UAAU,EAAE,GAAG,CAAC,WAAyB;YACzC,cAAc,EAAE,GAAG,CAAC,gBAAgB;YACpC,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,UAAU,CAAC;aACtB,MAAM,CAAC;YACN,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,WAAW,EAAE,OAAO,CAAC,UAAU;YAC/B,gBAAgB,EAAE,OAAO,CAAC,cAAc;YACxC,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;SAClD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,MAAc,EAAE,YAAoB;QACnE,MAAM,IAAI,CAAC,EAAE;aACV,WAAW,CAAC,UAAU,CAAC;aACvB,GAAG,CAAC,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;aACpC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;aAC7B,KAAK,CAAC,aAAa,EAAE,GAAG,EAAE,OAAO,CAAC;aAClC,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,UAAU,CAAC;aACtB,SAAS,EAAE;aACX,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;aAChC,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC,SAAS,CAAC;YACvB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,UAAU,CAAC;aACtB,MAAM,CAAC;YACN,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,aAAa,EAAE,OAAO,CAAC,YAAY;YACnC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;YACjD,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;SAClD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,MAAc;QACzC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,KAA6B;QAC9D,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,qBAAqB,CAAC;aACjC,MAAM,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;SAChD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,+BAA+B,CAAC,QAAgB;QACpD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,qBAAqB,CAAC;aACjC,SAAS,EAAE;aACX,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;aAChC,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,sBAAsB,CAAC,SAAS,CAAC;YACtC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,EAAU;QACtC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,KAAyB;QACtD,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,iBAAiB,CAAC;aAC7B,MAAM,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,KAAK,CAAC,MAAM;YACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;SAChD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,2BAA2B,CAAC,QAAgB;QAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,iBAAiB,CAAC;aAC7B,SAAS,EAAE;aACX,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC;aAChC,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,kBAAkB,CAAC,SAAS,CAAC;YAClC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,0BAA0B,CAAC,MAAc;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE;aACvB,UAAU,CAAC,iBAAiB,CAAC;aAC7B,SAAS,EAAE;aACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC;aAC7B,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;aAC5B,OAAO,EAAE,CAAC;QAEb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACtB,kBAAkB,CAAC,SAAS,CAAC;YAC3B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,MAAM,EAAE,GAAG,CAAC,OAAO;YACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CACH,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,EAAU;QAClC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,KAAiB;QACtC,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,cAAc,CAAC;aAC1B,MAAM,CAAC;YACN,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,WAAW,EAAE,KAAK,CAAC,UAAU;YAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,YAAY;YACjC,YAAY,EAAE,KAAK,CAAC,WAAW;YAC/B,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC;SAChD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,KAAa;QACvC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE;aACtB,UAAU,CAAC,cAAc,CAAC;aAC1B,SAAS,EAAE;aACX,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;aAC1B,gBAAgB,EAAE,CAAC;QAEtB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,UAAU,CAAC,SAAS,CAAC;YAC1B,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,UAAU,EAAE,GAAG,CAAC,WAA8B;YAC9C,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,YAAY,EAAE,GAAG,CAAC,aAAa;YAC/B,WAAW,EAAE,GAAG,CAAC,YAAY;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU;QAC/B,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAqB;QAC5C,MAAM,IAAI,CAAC,EAAE;aACV,UAAU,CAAC,gBAAgB,CAAC;aAC5B,MAAM,CAAC;YACN,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,OAAO,EAAE,OAAO,CAAC,MAAM;YACvB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU,EAAE,OAAO,CAAC,SAAS;YAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;YAC/C,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;SAClD,CAAC;aACD,OAAO,EAAE,CAAC;IACf,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,KAAa,EAAE,QAAgB;QAC7D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;QACnD,wEAAwE;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAE5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE;aACzB,UAAU,CAAC,gBAAgB,CAAC;aAC5B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;aACpD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;aACxC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAY,CAAC;aAC9D,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,WAAmB,CAAC;aAC9C,gBAAgB,EAAE,CAAC;QAEtB,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAI,EAAwC;QAC3D,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACvD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,GAAkC,EAAE;gBACnE,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export type { DatabaseDialect, SqlAdapterOptions } from './adapter.js';
|
|
2
2
|
export { SqlAdapter } from './adapter.js';
|
|
3
|
-
export {
|
|
3
|
+
export type { MigrationDialect, MigrationOptions } from './migrations/index.js';
|
|
4
|
+
export { down, up } from './migrations/index.js';
|
|
5
|
+
export { down as downMysql, up as upMysql } from './migrations/mysql.js';
|
|
6
|
+
export { down as downPostgres, up as upPostgres } from './migrations/postgres.js';
|
|
4
7
|
export type { Database } from './schema.js';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,EAAE,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAClF,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { SqlAdapter } from './adapter.js';
|
|
2
|
-
export { down, up } from './migrations/
|
|
2
|
+
export { down, up } from './migrations/index.js';
|
|
3
|
+
export { down as downMysql, up as upMysql } from './migrations/mysql.js';
|
|
4
|
+
export { down as downPostgres, up as upPostgres } from './migrations/postgres.js';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,EAAE,IAAI,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,EAAE,IAAI,UAAU,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Kysely } from 'kysely';
|
|
2
|
-
|
|
3
|
-
export declare function
|
|
2
|
+
import { type MigrationColumnTypes } from './types.js';
|
|
3
|
+
export declare function up<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
|
+
export declare function down<T>(db: Kysely<T>, _columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
5
|
//# sourceMappingURL=001_initial.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"001_initial.d.ts","sourceRoot":"","sources":["../../src/migrations/001_initial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"001_initial.d.ts","sourceRoot":"","sources":["../../src/migrations/001_initial.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAG5E,wBAAsB,EAAE,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CAkGf;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,YAAY,GAAE,oBAA0C,GACvD,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -1,62 +1,80 @@
|
|
|
1
|
+
import { safeExecute } from './index.js';
|
|
2
|
+
import { SQLITE_COLUMN_TYPES } from './types.js';
|
|
1
3
|
// Generic type parameter allows any database schema since migrations only use schema builder
|
|
2
|
-
export async function up(db) {
|
|
3
|
-
await db.schema
|
|
4
|
+
export async function up(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
5
|
+
await safeExecute(db.schema
|
|
4
6
|
.createTable('users')
|
|
7
|
+
.ifNotExists()
|
|
5
8
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
6
9
|
.addColumn('email', 'text', (col) => col.notNull().unique())
|
|
7
|
-
.addColumn('email_verified',
|
|
8
|
-
.addColumn('created_at',
|
|
9
|
-
.addColumn('updated_at',
|
|
10
|
-
.addColumn('locked_until',
|
|
11
|
-
.execute();
|
|
10
|
+
.addColumn('email_verified', columnTypes.boolean, (col) => col.notNull().defaultTo(false))
|
|
11
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
12
|
+
.addColumn('updated_at', columnTypes.timestamp, (col) => col.notNull())
|
|
13
|
+
.addColumn('locked_until', columnTypes.timestamp)
|
|
14
|
+
.execute());
|
|
12
15
|
// Note: email already has a unique constraint which creates an implicit index
|
|
13
|
-
await db.schema
|
|
16
|
+
await safeExecute(db.schema
|
|
14
17
|
.createTable('accounts')
|
|
18
|
+
.ifNotExists()
|
|
15
19
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
16
20
|
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id').onDelete('cascade'))
|
|
17
21
|
.addColumn('provider_id', 'text', (col) => col.notNull())
|
|
18
22
|
.addColumn('provider_user_id', 'text', (col) => col.notNull())
|
|
19
23
|
.addColumn('password_hash', 'text')
|
|
20
|
-
.addColumn('created_at',
|
|
21
|
-
.execute();
|
|
22
|
-
await db.schema
|
|
24
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
25
|
+
.execute());
|
|
26
|
+
await safeExecute(db.schema
|
|
23
27
|
.createIndex('accounts_provider_idx')
|
|
28
|
+
.ifNotExists()
|
|
24
29
|
.on('accounts')
|
|
25
30
|
.columns(['provider_id', 'provider_user_id'])
|
|
26
31
|
.unique()
|
|
27
|
-
.execute();
|
|
28
|
-
await db.schema
|
|
29
|
-
|
|
32
|
+
.execute());
|
|
33
|
+
await safeExecute(db.schema
|
|
34
|
+
.createIndex('accounts_user_id_idx')
|
|
35
|
+
.ifNotExists()
|
|
36
|
+
.on('accounts')
|
|
37
|
+
.column('user_id')
|
|
38
|
+
.execute());
|
|
39
|
+
await safeExecute(db.schema
|
|
30
40
|
.createTable('sessions')
|
|
41
|
+
.ifNotExists()
|
|
31
42
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
32
43
|
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id').onDelete('cascade'))
|
|
33
44
|
.addColumn('token_hash', 'text', (col) => col.notNull().unique())
|
|
34
|
-
.addColumn('expires_at',
|
|
45
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
35
46
|
.addColumn('ip_address', 'text')
|
|
36
47
|
.addColumn('user_agent', 'text')
|
|
37
|
-
.addColumn('created_at',
|
|
38
|
-
.execute();
|
|
48
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
49
|
+
.execute());
|
|
39
50
|
// Note: token_hash already has a unique constraint which creates an implicit index
|
|
40
|
-
await db.schema
|
|
41
|
-
|
|
51
|
+
await safeExecute(db.schema
|
|
52
|
+
.createIndex('sessions_user_id_idx')
|
|
53
|
+
.ifNotExists()
|
|
54
|
+
.on('sessions')
|
|
55
|
+
.column('user_id')
|
|
56
|
+
.execute());
|
|
57
|
+
await safeExecute(db.schema
|
|
42
58
|
.createTable('login_attempts')
|
|
59
|
+
.ifNotExists()
|
|
43
60
|
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
44
61
|
.addColumn('user_id', 'text', (col) => col.references('users.id').onDelete('set null'))
|
|
45
62
|
.addColumn('email', 'text', (col) => col.notNull())
|
|
46
63
|
.addColumn('ip_address', 'text', (col) => col.notNull())
|
|
47
|
-
.addColumn('success',
|
|
48
|
-
.addColumn('created_at',
|
|
49
|
-
.execute();
|
|
50
|
-
await db.schema
|
|
64
|
+
.addColumn('success', columnTypes.boolean, (col) => col.notNull())
|
|
65
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
66
|
+
.execute());
|
|
67
|
+
await safeExecute(db.schema
|
|
51
68
|
.createIndex('login_attempts_email_created_idx')
|
|
69
|
+
.ifNotExists()
|
|
52
70
|
.on('login_attempts')
|
|
53
71
|
.columns(['email', 'created_at'])
|
|
54
|
-
.execute();
|
|
72
|
+
.execute());
|
|
55
73
|
}
|
|
56
|
-
export async function down(db) {
|
|
57
|
-
await db.schema.dropTable('login_attempts').execute();
|
|
58
|
-
await db.schema.dropTable('sessions').execute();
|
|
59
|
-
await db.schema.dropTable('accounts').execute();
|
|
60
|
-
await db.schema.dropTable('users').execute();
|
|
74
|
+
export async function down(db, _columnTypes = SQLITE_COLUMN_TYPES) {
|
|
75
|
+
await db.schema.dropTable('login_attempts').ifExists().execute();
|
|
76
|
+
await db.schema.dropTable('sessions').ifExists().execute();
|
|
77
|
+
await db.schema.dropTable('accounts').ifExists().execute();
|
|
78
|
+
await db.schema.dropTable('users').ifExists().execute();
|
|
61
79
|
}
|
|
62
80
|
//# sourceMappingURL=001_initial.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"001_initial.js","sourceRoot":"","sources":["../../src/migrations/001_initial.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"001_initial.js","sourceRoot":"","sources":["../../src/migrations/001_initial.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Kysely } from 'kysely';
|
|
2
|
+
import { type MigrationColumnTypes } from './types.js';
|
|
3
|
+
export declare function up<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
|
+
export declare function down<T>(db: Kysely<T>, _columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=002_email_verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"002_email_verification.d.ts","sourceRoot":"","sources":["../../src/migrations/002_email_verification.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAE5E,wBAAsB,EAAE,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,YAAY,GAAE,oBAA0C,GACvD,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { safeExecute } from './index.js';
|
|
2
|
+
import { SQLITE_COLUMN_TYPES } from './types.js';
|
|
3
|
+
export async function up(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
4
|
+
await safeExecute(db.schema
|
|
5
|
+
.createTable('email_verifications')
|
|
6
|
+
.ifNotExists()
|
|
7
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
8
|
+
.addColumn('user_id', 'text', (col) => col.references('users.id').onDelete('cascade'))
|
|
9
|
+
.addColumn('selector', 'text', (col) => col.notNull())
|
|
10
|
+
.addColumn('verifier_hash', 'text', (col) => col.notNull())
|
|
11
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
12
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
13
|
+
.execute());
|
|
14
|
+
await safeExecute(db.schema
|
|
15
|
+
.createIndex('email_verifications_selector_idx')
|
|
16
|
+
.ifNotExists()
|
|
17
|
+
.on('email_verifications')
|
|
18
|
+
.column('selector')
|
|
19
|
+
.unique()
|
|
20
|
+
.execute());
|
|
21
|
+
await safeExecute(db.schema
|
|
22
|
+
.createIndex('email_verifications_user_id_idx')
|
|
23
|
+
.ifNotExists()
|
|
24
|
+
.on('email_verifications')
|
|
25
|
+
.column('user_id')
|
|
26
|
+
.execute());
|
|
27
|
+
}
|
|
28
|
+
export async function down(db, _columnTypes = SQLITE_COLUMN_TYPES) {
|
|
29
|
+
await db.schema.dropTable('email_verifications').ifExists().execute();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=002_email_verification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"002_email_verification.js","sourceRoot":"","sources":["../../src/migrations/002_email_verification.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAA6B,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,EAAE,CACtB,EAAa,EACb,cAAoC,mBAAmB;IAEvD,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,qBAAqB,CAAC;SAClC,WAAW,EAAE;SACb,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;SAClD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACrF,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACrD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SAC1D,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,OAAO,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,kCAAkC,CAAC;SAC/C,WAAW,EAAE;SACb,EAAE,CAAC,qBAAqB,CAAC;SACzB,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,EAAE;SACR,OAAO,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,iCAAiC,CAAC;SAC9C,WAAW,EAAE;SACb,EAAE,CAAC,qBAAqB,CAAC;SACzB,MAAM,CAAC,SAAS,CAAC;SACjB,OAAO,EAAE,CACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAa,EACb,eAAqC,mBAAmB;IAExD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Kysely } from 'kysely';
|
|
2
|
+
import { type MigrationColumnTypes } from './types.js';
|
|
3
|
+
export declare function up<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
|
+
export declare function down<T>(db: Kysely<T>, _columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=003_password_resets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"003_password_resets.d.ts","sourceRoot":"","sources":["../../src/migrations/003_password_resets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAE5E,wBAAsB,EAAE,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,YAAY,GAAE,oBAA0C,GACvD,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { safeExecute } from './index.js';
|
|
2
|
+
import { SQLITE_COLUMN_TYPES } from './types.js';
|
|
3
|
+
export async function up(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
4
|
+
await safeExecute(db.schema
|
|
5
|
+
.createTable('password_resets')
|
|
6
|
+
.ifNotExists()
|
|
7
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
8
|
+
.addColumn('user_id', 'text', (col) => col.references('users.id').onDelete('cascade'))
|
|
9
|
+
.addColumn('selector', 'text', (col) => col.notNull())
|
|
10
|
+
.addColumn('verifier_hash', 'text', (col) => col.notNull())
|
|
11
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
12
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
13
|
+
.execute());
|
|
14
|
+
await safeExecute(db.schema
|
|
15
|
+
.createIndex('password_resets_selector_idx')
|
|
16
|
+
.ifNotExists()
|
|
17
|
+
.on('password_resets')
|
|
18
|
+
.column('selector')
|
|
19
|
+
.unique()
|
|
20
|
+
.execute());
|
|
21
|
+
await safeExecute(db.schema
|
|
22
|
+
.createIndex('password_resets_user_id_idx')
|
|
23
|
+
.ifNotExists()
|
|
24
|
+
.on('password_resets')
|
|
25
|
+
.column('user_id')
|
|
26
|
+
.execute());
|
|
27
|
+
}
|
|
28
|
+
export async function down(db, _columnTypes = SQLITE_COLUMN_TYPES) {
|
|
29
|
+
await db.schema.dropTable('password_resets').ifExists().execute();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=003_password_resets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"003_password_resets.js","sourceRoot":"","sources":["../../src/migrations/003_password_resets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAA6B,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,EAAE,CACtB,EAAa,EACb,cAAoC,mBAAmB;IAEvD,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,iBAAiB,CAAC;SAC9B,WAAW,EAAE;SACb,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;SAClD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;SACrF,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACrD,SAAS,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SAC1D,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,OAAO,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,8BAA8B,CAAC;SAC3C,WAAW,EAAE;SACb,EAAE,CAAC,iBAAiB,CAAC;SACrB,MAAM,CAAC,UAAU,CAAC;SAClB,MAAM,EAAE;SACR,OAAO,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,6BAA6B,CAAC;SAC1C,WAAW,EAAE;SACb,EAAE,CAAC,iBAAiB,CAAC;SACrB,MAAM,CAAC,SAAS,CAAC;SACjB,OAAO,EAAE,CACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAa,EACb,eAAqC,mBAAmB;IAExD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Kysely } from 'kysely';
|
|
2
|
+
import { type MigrationColumnTypes } from './types.js';
|
|
3
|
+
export declare function up<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
|
+
export declare function down<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=004_session_split_token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"004_session_split_token.d.ts","sourceRoot":"","sources":["../../src/migrations/004_session_split_token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,KAAK,oBAAoB,EAAuB,MAAM,YAAY,CAAC;AAE5E,wBAAsB,EAAE,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CAsBf"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { safeExecute } from './index.js';
|
|
2
|
+
import { SQLITE_COLUMN_TYPES } from './types.js';
|
|
3
|
+
export async function up(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
4
|
+
// Drop old sessions table if it exists to ensure schema matches split-token design
|
|
5
|
+
await db.schema.dropTable('sessions').ifExists().execute();
|
|
6
|
+
await safeExecute(db.schema
|
|
7
|
+
.createTable('sessions')
|
|
8
|
+
.ifNotExists()
|
|
9
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
10
|
+
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id').onDelete('cascade'))
|
|
11
|
+
.addColumn('selector', 'text', (col) => col.notNull().unique())
|
|
12
|
+
.addColumn('verifier_hash', 'text', (col) => col.notNull())
|
|
13
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
14
|
+
.addColumn('ip_address', 'text')
|
|
15
|
+
.addColumn('user_agent', 'text')
|
|
16
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
17
|
+
.execute());
|
|
18
|
+
await safeExecute(db.schema
|
|
19
|
+
.createIndex('sessions_user_id_idx')
|
|
20
|
+
.ifNotExists()
|
|
21
|
+
.on('sessions')
|
|
22
|
+
.column('user_id')
|
|
23
|
+
.execute());
|
|
24
|
+
}
|
|
25
|
+
export async function down(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
26
|
+
await db.schema.dropTable('sessions').ifExists().execute();
|
|
27
|
+
// Recreate legacy sessions table with token_hash
|
|
28
|
+
await db.schema
|
|
29
|
+
.createTable('sessions')
|
|
30
|
+
.ifNotExists()
|
|
31
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
32
|
+
.addColumn('user_id', 'text', (col) => col.notNull().references('users.id').onDelete('cascade'))
|
|
33
|
+
.addColumn('token_hash', 'text', (col) => col.notNull().unique())
|
|
34
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
35
|
+
.addColumn('ip_address', 'text')
|
|
36
|
+
.addColumn('user_agent', 'text')
|
|
37
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
38
|
+
.execute();
|
|
39
|
+
await db.schema
|
|
40
|
+
.createIndex('sessions_user_id_idx')
|
|
41
|
+
.ifNotExists()
|
|
42
|
+
.on('sessions')
|
|
43
|
+
.column('user_id')
|
|
44
|
+
.execute();
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=004_session_split_token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"004_session_split_token.js","sourceRoot":"","sources":["../../src/migrations/004_session_split_token.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Kysely } from 'kysely';
|
|
2
|
+
import type { MigrationColumnTypes } from './types.js';
|
|
3
|
+
export declare function up<T>(db: Kysely<T>, columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
4
|
+
export declare function down<T>(db: Kysely<T>, _columnTypes?: MigrationColumnTypes): Promise<void>;
|
|
5
|
+
//# sourceMappingURL=005_oauth_support.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"005_oauth_support.d.ts","sourceRoot":"","sources":["../../src/migrations/005_oauth_support.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvD,wBAAsB,EAAE,CAAC,CAAC,EACxB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,WAAW,GAAE,oBAA0C,GACtD,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EACb,YAAY,GAAE,oBAA0C,GACvD,OAAO,CAAC,IAAI,CAAC,CAEf"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { safeExecute } from './index.js';
|
|
2
|
+
import { SQLITE_COLUMN_TYPES } from './types.js';
|
|
3
|
+
export async function up(db, columnTypes = SQLITE_COLUMN_TYPES) {
|
|
4
|
+
// Add oauth_states table
|
|
5
|
+
await safeExecute(db.schema
|
|
6
|
+
.createTable('oauth_states')
|
|
7
|
+
.ifNotExists()
|
|
8
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
9
|
+
.addColumn('provider_id', 'text', (col) => col.notNull())
|
|
10
|
+
.addColumn('state', 'text', (col) => col.notNull())
|
|
11
|
+
.addColumn('code_verifier', 'text')
|
|
12
|
+
.addColumn('redirect_uri', 'text')
|
|
13
|
+
.addColumn('expires_at', columnTypes.timestamp, (col) => col.notNull())
|
|
14
|
+
.addColumn('created_at', columnTypes.timestamp, (col) => col.notNull())
|
|
15
|
+
.execute());
|
|
16
|
+
await safeExecute(db.schema
|
|
17
|
+
.createIndex('oauth_states_state_idx')
|
|
18
|
+
.ifNotExists()
|
|
19
|
+
.on('oauth_states')
|
|
20
|
+
.column('state')
|
|
21
|
+
.unique()
|
|
22
|
+
.execute());
|
|
23
|
+
}
|
|
24
|
+
export async function down(db, _columnTypes = SQLITE_COLUMN_TYPES) {
|
|
25
|
+
await db.schema.dropTable('oauth_states').ifExists().execute();
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=005_oauth_support.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"005_oauth_support.js","sourceRoot":"","sources":["../../src/migrations/005_oauth_support.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,EAAE,CACtB,EAAa,EACb,cAAoC,mBAAmB;IAEvD,yBAAyB;IACzB,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,cAAc,CAAC;SAC3B,WAAW,EAAE;SACb,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;SAClD,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACxD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SAClD,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;SAClC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;SACjC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtE,OAAO,EAAE,CACb,CAAC;IAEF,MAAM,WAAW,CACf,EAAE,CAAC,MAAM;SACN,WAAW,CAAC,wBAAwB,CAAC;SACrC,WAAW,EAAE;SACb,EAAE,CAAC,cAAc,CAAC;SAClB,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,EAAE;SACR,OAAO,EAAE,CACb,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAa,EACb,eAAqC,mBAAmB;IAExD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Kysely } from 'kysely';
|
|
2
|
+
export type MigrationDialect = 'sqlite' | 'postgres' | 'mysql';
|
|
3
|
+
export interface MigrationOptions {
|
|
4
|
+
dialect?: MigrationDialect;
|
|
5
|
+
}
|
|
6
|
+
export declare function safeExecute(promise: Promise<unknown>): Promise<void>;
|
|
7
|
+
export declare function up<T>(db: Kysely<T>, options?: MigrationOptions): Promise<void>;
|
|
8
|
+
export declare function down<T>(db: Kysely<T>, options?: MigrationOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAarC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAkBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1E;AAED,wBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxF;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1F"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { down as down001, up as up001 } from './001_initial.js';
|
|
2
|
+
import { down as down002, up as up002 } from './002_email_verification.js';
|
|
3
|
+
import { down as down003, up as up003 } from './003_password_resets.js';
|
|
4
|
+
import { down as down004, up as up004 } from './004_session_split_token.js';
|
|
5
|
+
import { down as down005, up as up005 } from './005_oauth_support.js';
|
|
6
|
+
import { MYSQL_COLUMN_TYPES, POSTGRES_COLUMN_TYPES, SQLITE_COLUMN_TYPES, } from './types.js';
|
|
7
|
+
function isAlreadyExistsError(error) {
|
|
8
|
+
return error instanceof Error && /already exists|duplicate key name/i.test(error.message);
|
|
9
|
+
}
|
|
10
|
+
function resolveColumnTypes(options) {
|
|
11
|
+
const dialect = options?.dialect ?? 'sqlite';
|
|
12
|
+
switch (dialect) {
|
|
13
|
+
case 'postgres':
|
|
14
|
+
return POSTGRES_COLUMN_TYPES;
|
|
15
|
+
case 'mysql':
|
|
16
|
+
return MYSQL_COLUMN_TYPES;
|
|
17
|
+
default:
|
|
18
|
+
return SQLITE_COLUMN_TYPES;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export async function safeExecute(promise) {
|
|
22
|
+
try {
|
|
23
|
+
await promise;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (!isAlreadyExistsError(error)) {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function up(db, options = {}) {
|
|
32
|
+
const columnTypes = resolveColumnTypes(options);
|
|
33
|
+
await up001(db, columnTypes);
|
|
34
|
+
await up002(db, columnTypes);
|
|
35
|
+
await up003(db, columnTypes);
|
|
36
|
+
await up004(db, columnTypes);
|
|
37
|
+
await up005(db, columnTypes);
|
|
38
|
+
}
|
|
39
|
+
export async function down(db, options = {}) {
|
|
40
|
+
const columnTypes = resolveColumnTypes(options);
|
|
41
|
+
await down005(db, columnTypes);
|
|
42
|
+
await down004(db, columnTypes);
|
|
43
|
+
await down003(db, columnTypes);
|
|
44
|
+
await down002(db, columnTypes);
|
|
45
|
+
await down001(db, columnTypes);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAEL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAQpB,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,KAAK,IAAI,oCAAoC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B;IACpD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,QAAQ,CAAC;IAC7C,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,qBAAqB,CAAC;QAC/B,KAAK,OAAO;YACV,OAAO,kBAAkB,CAAC;QAC5B;YACE,OAAO,mBAAmB,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAyB;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,EAAE,CAAI,EAAa,EAAE,UAA4B,EAAE;IACvE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC7B,MAAM,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAa,EAAE,UAA4B,EAAE;IACzE,MAAM,WAAW,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IAC/B,MAAM,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../src/migrations/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,wBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../src/migrations/mysql.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,EAAE,CAAI,EAAa;IACvC,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAa;IACzC,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/migrations/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,wBAAsB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAExD;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { down as downBase, up as upBase } from './index.js';
|
|
2
|
+
export async function up(db) {
|
|
3
|
+
await upBase(db, { dialect: 'postgres' });
|
|
4
|
+
}
|
|
5
|
+
export async function down(db) {
|
|
6
|
+
await downBase(db, { dialect: 'postgres' });
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/migrations/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,YAAY,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,EAAE,CAAI,EAAa;IACvC,MAAM,MAAM,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAI,EAAa;IACzC,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ColumnDataType, type Expression } from 'kysely';
|
|
2
|
+
export type MigrationColumnTypes = {
|
|
3
|
+
boolean: ColumnDataType | Expression<unknown>;
|
|
4
|
+
timestamp: ColumnDataType | Expression<unknown>;
|
|
5
|
+
};
|
|
6
|
+
export declare const SQLITE_COLUMN_TYPES: MigrationColumnTypes;
|
|
7
|
+
export declare const POSTGRES_COLUMN_TYPES: MigrationColumnTypes;
|
|
8
|
+
export declare const MYSQL_COLUMN_TYPES: MigrationColumnTypes;
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/migrations/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,UAAU,EAAO,MAAM,QAAQ,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9C,SAAS,EAAE,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,oBAGjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,oBAGnC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,oBAGhC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { sql } from 'kysely';
|
|
2
|
+
export const SQLITE_COLUMN_TYPES = {
|
|
3
|
+
boolean: 'boolean',
|
|
4
|
+
timestamp: 'timestamp',
|
|
5
|
+
};
|
|
6
|
+
export const POSTGRES_COLUMN_TYPES = {
|
|
7
|
+
boolean: 'boolean',
|
|
8
|
+
timestamp: 'timestamp',
|
|
9
|
+
};
|
|
10
|
+
export const MYSQL_COLUMN_TYPES = {
|
|
11
|
+
boolean: sql `tinyint`,
|
|
12
|
+
timestamp: 'datetime',
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/migrations/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,GAAG,EAAE,MAAM,QAAQ,CAAC;AAOnE,MAAM,CAAC,MAAM,mBAAmB,GAAyB;IACvD,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAyB;IACzD,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAyB;IACtD,OAAO,EAAE,GAAG,CAAA,SAAS;IACrB,SAAS,EAAE,UAAU;CACtB,CAAC"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -18,7 +18,8 @@ export interface AccountsTable {
|
|
|
18
18
|
export interface SessionsTable {
|
|
19
19
|
id: string;
|
|
20
20
|
user_id: string;
|
|
21
|
-
|
|
21
|
+
selector: string;
|
|
22
|
+
verifier_hash: string;
|
|
22
23
|
expires_at: ColumnType<Date, Date | string, Date | string>;
|
|
23
24
|
ip_address: string | null;
|
|
24
25
|
user_agent: string | null;
|
|
@@ -32,10 +33,38 @@ export interface LoginAttemptsTable {
|
|
|
32
33
|
success: number | boolean;
|
|
33
34
|
created_at: ColumnType<Date, Date | string, Date | string>;
|
|
34
35
|
}
|
|
36
|
+
export interface EmailVerificationsTable {
|
|
37
|
+
id: string;
|
|
38
|
+
user_id: string;
|
|
39
|
+
selector: string;
|
|
40
|
+
verifier_hash: string;
|
|
41
|
+
expires_at: ColumnType<Date, Date | string, Date | string>;
|
|
42
|
+
created_at: ColumnType<Date, Date | string, Date | string>;
|
|
43
|
+
}
|
|
44
|
+
export interface PasswordResetsTable {
|
|
45
|
+
id: string;
|
|
46
|
+
user_id: string;
|
|
47
|
+
selector: string;
|
|
48
|
+
verifier_hash: string;
|
|
49
|
+
expires_at: ColumnType<Date, Date | string, Date | string>;
|
|
50
|
+
created_at: ColumnType<Date, Date | string, Date | string>;
|
|
51
|
+
}
|
|
52
|
+
export interface OAuthStatesTable {
|
|
53
|
+
id: string;
|
|
54
|
+
provider_id: string;
|
|
55
|
+
state: string;
|
|
56
|
+
code_verifier: string | null;
|
|
57
|
+
redirect_uri: string | null;
|
|
58
|
+
expires_at: ColumnType<Date, Date | string, Date | string>;
|
|
59
|
+
created_at: ColumnType<Date, Date | string, Date | string>;
|
|
60
|
+
}
|
|
35
61
|
export interface Database {
|
|
36
62
|
users: UsersTable;
|
|
37
63
|
accounts: AccountsTable;
|
|
38
64
|
sessions: SessionsTable;
|
|
39
65
|
login_attempts: LoginAttemptsTable;
|
|
66
|
+
email_verifications: EmailVerificationsTable;
|
|
67
|
+
password_resets: PasswordResetsTable;
|
|
68
|
+
oauth_states: OAuthStatesTable;
|
|
40
69
|
}
|
|
41
70
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;IAC3D,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;IAC3D,YAAY,EAAE,UAAU,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fortressauth/adapter-sql",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.9",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
7
10
|
"exports": {
|
|
8
11
|
".": {
|
|
9
12
|
"types": "./dist/index.d.ts",
|
|
@@ -11,23 +14,29 @@
|
|
|
11
14
|
}
|
|
12
15
|
},
|
|
13
16
|
"dependencies": {
|
|
14
|
-
"kysely": "^0.28.
|
|
15
|
-
"@fortressauth/core": "0.1.
|
|
17
|
+
"kysely": "^0.28.9",
|
|
18
|
+
"@fortressauth/core": "0.1.9"
|
|
16
19
|
},
|
|
17
20
|
"devDependencies": {
|
|
18
|
-
"@biomejs/biome": "^2.3.
|
|
21
|
+
"@biomejs/biome": "^2.3.11",
|
|
19
22
|
"@types/better-sqlite3": "^7.6.13",
|
|
20
|
-
"@vitest/coverage-v8": "^4.0.
|
|
23
|
+
"@vitest/coverage-v8": "^4.0.16",
|
|
21
24
|
"better-sqlite3": "^12.5.0",
|
|
25
|
+
"mysql2": "^3.16.0",
|
|
26
|
+
"pg": "^8.17.1",
|
|
27
|
+
"@types/pg": "^8.16.0",
|
|
22
28
|
"typescript": "^5.9.3",
|
|
23
|
-
"vitest": "^4.0.
|
|
29
|
+
"vitest": "^4.0.16"
|
|
24
30
|
},
|
|
25
31
|
"scripts": {
|
|
26
32
|
"build": "tsc",
|
|
33
|
+
"pretest": "pnpm rebuild better-sqlite3",
|
|
27
34
|
"test": "vitest run",
|
|
28
35
|
"test:watch": "vitest",
|
|
36
|
+
"pretest:coverage": "pnpm rebuild better-sqlite3",
|
|
29
37
|
"test:coverage": "vitest run --coverage",
|
|
30
38
|
"lint": "biome check .",
|
|
39
|
+
"lint:fix": "biome check --write .",
|
|
31
40
|
"typecheck": "tsc --noEmit"
|
|
32
41
|
}
|
|
33
42
|
}
|