better-auth 0.0.8-beta.8 → 0.0.8

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.
Files changed (48) hide show
  1. package/dist/access.js +3 -13
  2. package/dist/access.js.map +1 -1
  3. package/dist/cli.js +57 -56
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client/plugins.d.ts +28 -33
  6. package/dist/client/plugins.js +84 -66
  7. package/dist/client/plugins.js.map +1 -1
  8. package/dist/client.d.ts +155 -143
  9. package/dist/client.js +70 -39
  10. package/dist/client.js.map +1 -1
  11. package/dist/{index-Cw3RPThC.d.ts → index-CNp7-qQI.d.ts} +369 -70
  12. package/dist/index.d.ts +47 -77
  13. package/dist/index.js +321 -372
  14. package/dist/index.js.map +1 -1
  15. package/dist/{internal-adapter-DVxOAfxa.d.ts → internal-adapter-CFONjGd0.d.ts} +140 -51
  16. package/dist/next-js.d.ts +13 -4
  17. package/dist/next-js.js +20 -3
  18. package/dist/next-js.js.map +1 -1
  19. package/dist/plugins.d.ts +9 -4
  20. package/dist/plugins.js +454 -534
  21. package/dist/plugins.js.map +1 -1
  22. package/dist/react.d.ts +148 -142
  23. package/dist/react.js +78 -45
  24. package/dist/react.js.map +1 -1
  25. package/dist/social.d.ts +1 -1
  26. package/dist/social.js +29 -80
  27. package/dist/social.js.map +1 -1
  28. package/dist/solid-start.d.ts +3 -3
  29. package/dist/solid-start.js +3 -3
  30. package/dist/solid-start.js.map +1 -1
  31. package/dist/solid.d.ts +148 -144
  32. package/dist/solid.js +70 -41
  33. package/dist/solid.js.map +1 -1
  34. package/dist/svelte-kit.d.ts +3 -3
  35. package/dist/svelte-kit.js +5 -7
  36. package/dist/svelte-kit.js.map +1 -1
  37. package/dist/svelte.d.ts +149 -145
  38. package/dist/svelte.js +70 -39
  39. package/dist/svelte.js.map +1 -1
  40. package/dist/{types-DT41oqcm.d.ts → types-Bz2ECI1C.d.ts} +2 -2
  41. package/dist/types.d.ts +3 -3
  42. package/dist/types.js +2 -0
  43. package/dist/types.js.map +1 -1
  44. package/dist/vue.d.ts +291 -283
  45. package/dist/vue.js +70 -41
  46. package/dist/vue.js.map +1 -1
  47. package/package.json +6 -4
  48. package/dist/{index-Dzn4azgH.d.ts → index-CcxejJTH.d.ts} +8 -8
package/dist/access.js CHANGED
@@ -110,17 +110,7 @@ var defaultRoles = {
110
110
  var permissionFromString = (permission) => {
111
111
  return Role.fromString(permission ?? "");
112
112
  };
113
- export {
114
- AccessControl,
115
- ParsingError,
116
- Role,
117
- adminAc,
118
- createAccessControl,
119
- defaultAc,
120
- defaultRoles,
121
- defaultStatements,
122
- memberAc,
123
- ownerAc,
124
- permissionFromString
125
- };
113
+
114
+ export { AccessControl, ParsingError, Role, adminAc, createAccessControl, defaultAc, defaultRoles, defaultStatements, memberAc, ownerAc, permissionFromString };
115
+ //# sourceMappingURL=access.js.map
126
116
  //# sourceMappingURL=access.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/organization/access/src/access.ts","../src/plugins/organization/access/statement.ts","../src/plugins/organization/access/utils.ts"],"sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import { Role } from \"./src/access\";\n\nexport const permissionFromString = (permission?: string) => {\n\treturn Role.fromString(permission ?? \"\");\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/plugins/organization/access/src/access.ts","../src/plugins/organization/access/statement.ts","../src/plugins/organization/access/utils.ts"],"names":[],"mappings":"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","file":"access.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import { Role } from \"./src/access\";\n\nexport const permissionFromString = (permission?: string) => {\n\treturn Role.fromString(permission ?? \"\");\n};\n"]}
package/dist/cli.js CHANGED
@@ -1,18 +1,20 @@
1
1
  #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import 'dotenv/config';
4
+ import path from 'node:path';
5
+ import jiti from 'jiti';
6
+ import { createConsola } from 'consola';
7
+ import { z } from 'zod';
8
+ import { existsSync } from 'fs';
9
+ import path2 from 'path';
10
+ import Database from 'better-sqlite3';
11
+ import { Kysely, MysqlDialect, PostgresDialect, SqliteDialect } from 'kysely';
12
+ import { createPool } from 'mysql2';
13
+ import pg from 'pg';
14
+ import ora from 'ora';
15
+ import chalk from 'chalk';
16
+ import prompts from 'prompts';
2
17
 
3
- // src/cli/index.ts
4
- import { Command as Command2 } from "commander";
5
- import "dotenv/config";
6
-
7
- // src/cli/commands/migrate.ts
8
- import { Command } from "commander";
9
-
10
- // src/cli/get-config.ts
11
- import path from "node:path";
12
- import jiti from "jiti";
13
-
14
- // src/utils/logger.ts
15
- import { createConsola } from "consola";
16
18
  var consola = createConsola({
17
19
  formatOptions: {
18
20
  date: false,
@@ -20,34 +22,34 @@ var consola = createConsola({
20
22
  compact: true
21
23
  },
22
24
  defaults: {
23
- tag: "[Better Auth]"
25
+ tag: "Better Auth"
24
26
  }
25
27
  });
26
28
  var createLogger = (options) => {
27
29
  return {
28
30
  log: (...args) => {
29
- !options?.disabled && consola.log("", ...args);
31
+ consola.log("", ...args);
30
32
  },
31
33
  error: (...args) => {
32
- !options?.disabled && consola.error("", ...args);
34
+ consola.error("", ...args);
33
35
  },
34
36
  warn: (...args) => {
35
- !options?.disabled && consola.warn("", ...args);
37
+ consola.warn("", ...args);
36
38
  },
37
39
  info: (...args) => {
38
- !options?.disabled && consola.info("", ...args);
40
+ consola.info("", ...args);
39
41
  },
40
42
  debug: (...args) => {
41
- !options?.disabled && consola.debug("", ...args);
43
+ consola.debug("", ...args);
42
44
  },
43
45
  box: (...args) => {
44
- !options?.disabled && consola.box("", ...args);
46
+ consola.box("", ...args);
45
47
  },
46
48
  success: (...args) => {
47
- !options?.disabled && consola.success("", ...args);
49
+ consola.success("", ...args);
48
50
  },
49
51
  break: (...args) => {
50
- !options?.disabled && console.log("\n");
52
+ console.log("\n");
51
53
  }
52
54
  };
53
55
  };
@@ -107,31 +109,18 @@ async function getConfig({
107
109
  return null;
108
110
  }
109
111
  }
110
-
111
- // src/cli/commands/migrate.ts
112
- import { z } from "zod";
113
- import { existsSync } from "fs";
114
- import path2 from "path";
115
-
116
- // src/adapters/kysely.ts
117
- import Database from "better-sqlite3";
118
- import { Kysely } from "kysely";
119
- import {
120
- MysqlDialect,
121
- PostgresDialect,
122
- SqliteDialect
123
- } from "kysely";
124
- import { createPool } from "mysql2";
125
- import pg from "pg";
126
112
  var { Pool } = pg;
127
113
  var getDialect = (config) => {
128
114
  if (!config.database) {
129
115
  return null;
130
116
  }
117
+ if (config.database instanceof MysqlDialect || config.database instanceof PostgresDialect || config.database instanceof SqliteDialect) {
118
+ return config.database;
119
+ }
131
120
  let dialect = null;
132
121
  if ("provider" in config.database) {
133
122
  const provider = config.database.provider;
134
- const connectionString = config.database.url.trim();
123
+ const connectionString = config.database?.url?.trim();
135
124
  if (provider === "postgres") {
136
125
  const pool = new Pool({
137
126
  connectionString
@@ -188,20 +177,25 @@ var getDatabaseType = (config) => {
188
177
  return "sqlite";
189
178
  };
190
179
 
191
- // src/cli/commands/migrate.ts
192
- import ora from "ora";
193
- import chalk from "chalk";
194
- import prompts from "prompts";
195
-
196
180
  // src/adapters/get-tables.ts
197
181
  var getAuthTables = (options) => {
198
- const pluginSchema = options.plugins?.reduce((acc, plugin) => {
199
- const schema = plugin.schema;
200
- return {
201
- ...acc,
202
- ...schema
203
- };
204
- }, {});
182
+ const pluginSchema = options.plugins?.reduce(
183
+ (acc, plugin) => {
184
+ const schema = plugin.schema;
185
+ if (!schema) return acc;
186
+ for (const [key, value] of Object.entries(schema)) {
187
+ acc[key] = {
188
+ fields: {
189
+ ...acc[key]?.fields,
190
+ ...value.fields
191
+ },
192
+ tableName: key
193
+ };
194
+ }
195
+ return acc;
196
+ },
197
+ {}
198
+ );
205
199
  return {
206
200
  ...pluginSchema,
207
201
  user: {
@@ -228,7 +222,8 @@ var getAuthTables = (options) => {
228
222
  updatedAt: {
229
223
  type: "date",
230
224
  defaultValue: () => /* @__PURE__ */ new Date()
231
- }
225
+ },
226
+ ...pluginSchema?.user?.fields
232
227
  }
233
228
  },
234
229
  session: {
@@ -252,7 +247,8 @@ var getAuthTables = (options) => {
252
247
  field: "id",
253
248
  onDelete: "cascade"
254
249
  }
255
- }
250
+ },
251
+ ...pluginSchema?.session?.fields
256
252
  }
257
253
  },
258
254
  account: {
@@ -295,7 +291,8 @@ var getAuthTables = (options) => {
295
291
  password: {
296
292
  type: "string",
297
293
  required: false
298
- }
294
+ },
295
+ ...pluginSchema?.account?.fields
299
296
  }
300
297
  }
301
298
  };
@@ -342,6 +339,7 @@ function getSchema(config) {
342
339
  var postgresMap = {
343
340
  string: ["character varying", "text"],
344
341
  number: [
342
+ "int4",
345
343
  "integer",
346
344
  "bigint",
347
345
  "smallint",
@@ -507,7 +505,9 @@ var migrate = new Command("migrate").option(
507
505
  configPath: options.config
508
506
  });
509
507
  if (!config) {
510
- logger.error("No configuration file found.");
508
+ logger.error(
509
+ "No configuration file found. Add a `auth.ts` or `auth.config.ts` file to your project."
510
+ );
511
511
  return;
512
512
  }
513
513
  const db = createKyselyAdapter(config);
@@ -552,9 +552,10 @@ var migrate = new Command("migrate").option(
552
552
 
553
553
  // src/cli/index.ts
554
554
  async function main() {
555
- const program = new Command2().name("better-auth");
555
+ const program = new Command().name("better-auth");
556
556
  program.addCommand(migrate);
557
557
  program.parse();
558
558
  }
559
559
  main();
560
+ //# sourceMappingURL=cli.js.map
560
561
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts","../src/cli/commands/migrate.ts","../src/cli/get-config.ts","../src/utils/logger.ts","../src/adapters/kysely.ts","../src/adapters/get-tables.ts","../src/cli/utils/get-schema.ts","../src/cli/utils/get-migration.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { migrate } from \"./commands/migrate\";\nasync function main() {\n\tconst program = new Command().name(\"better-auth\");\n\tprogram.addCommand(migrate);\n\tprogram.parse();\n}\n\nmain();\n","import { Command } from \"commander\";\nimport { getConfig } from \"../get-config\";\nimport { z } from \"zod\";\nimport { existsSync } from \"fs\";\nimport path from \"path\";\nimport { logger } from \"../../utils/logger\";\nimport { createKyselyAdapter } from \"../../adapters/kysely\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport { getMigrations } from \"../utils/get-migration\";\n\nexport const migrate = new Command(\"migrate\")\n\t.option(\n\t\t\"-c, --cwd <cwd>\",\n\t\t\"the working directory. defaults to the current directory.\",\n\t\tprocess.cwd(),\n\t)\n\t.option(\n\t\t\"--config <config>\",\n\t\t\"the path to the configuration file. defaults to the first configuration file found.\",\n\t)\n\t.action(async (opts) => {\n\t\tconst options = z\n\t\t\t.object({\n\t\t\t\tcwd: z.string(),\n\t\t\t\tconfig: z.string().optional(),\n\t\t\t})\n\t\t\t.parse(opts);\n\t\tconst cwd = path.resolve(options.cwd);\n\t\tif (!existsSync(cwd)) {\n\t\t\tlogger.error(`The directory \"${cwd}\" does not exist.`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconst config = await getConfig({\n\t\t\tcwd,\n\t\t\tconfigPath: options.config,\n\t\t});\n\t\tif (!config) {\n\t\t\tlogger.error(\"No configuration file found.\");\n\t\t\treturn;\n\t\t}\n\t\tconst db = createKyselyAdapter(config);\n\t\tif (!db) {\n\t\t\tlogger.error(\"Invalid database configuration.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconst spinner = ora(\"preparing migration...\").start();\n\n\t\tconst { toBeAdded, toBeCreated, runMigrations } =\n\t\t\tawait getMigrations(config);\n\n\t\tif (!toBeAdded.length && !toBeCreated.length) {\n\t\t\tspinner.stop();\n\t\t\tlogger.success(\"🚀 No migrations needed.\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tspinner.stop();\n\t\tlogger.info(`🔑 The migration will affect the following:`);\n\n\t\tfor (const table of [...toBeAdded, ...toBeCreated]) {\n\t\t\tlogger.info(\n\t\t\t\t\"->\",\n\t\t\t\tchalk.magenta(Object.keys(table.fields).join(\", \")),\n\t\t\t\tchalk.white(\"fields on\"),\n\t\t\t\tchalk.yellow(`${table.table}`),\n\t\t\t\tchalk.white(\"table.\"),\n\t\t\t);\n\t\t}\n\t\tconst { migrate } = await prompts({\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"migrate\",\n\t\t\tmessage: \"Are you sure you want to run these migrations?\",\n\t\t\tinitial: false,\n\t\t});\n\t\tif (!migrate) {\n\t\t\tlogger.info(\"Migration cancelled.\");\n\t\t\tprocess.exit(0);\n\t\t}\n\t\tspinner?.start(\"migrating...\");\n\t\tawait runMigrations();\n\t\tspinner.stop();\n\t\tlogger.success(\"🚀 migration was completed successfully!\");\n\t\tprocess.exit(0);\n\t});\n","import path from \"node:path\";\nimport jiti from \"jiti\";\nimport type { BetterAuthOptions } from \"../types\";\nimport { logger } from \"../utils/logger\";\n\nlet possiblePaths = [\"auth.ts\", \"auth.config.ts\"];\n\npossiblePaths = [\n\t...possiblePaths,\n\t...possiblePaths.map((it) => `lib/${it}`),\n\t...possiblePaths.map((it) => `utils/${it}`),\n];\npossiblePaths = [...possiblePaths, ...possiblePaths.map((it) => `src/${it}`)];\n\nexport async function getConfig({\n\tcwd,\n\tconfigPath,\n}: {\n\tcwd: string;\n\tconfigPath?: string;\n}) {\n\ttry {\n\t\tlet configFile: BetterAuthOptions | null = null;\n\t\tif (configPath) {\n\t\t\tconst config = (await jiti(cwd).import(\n\t\t\t\tpath.join(cwd, configPath),\n\t\t\t\t{},\n\t\t\t)) as {\n\t\t\t\tauth: {\n\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t};\n\t\t\t};\n\t\t\tif (!config) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconfigFile = config.auth.options;\n\t\t}\n\n\t\tfor (const possiblePath of possiblePaths) {\n\t\t\ttry {\n\t\t\t\tconst config = (await jiti(path.join(cwd, possiblePath)).import(\n\t\t\t\t\tpath.join(cwd, possiblePath),\n\t\t\t\t\t{},\n\t\t\t\t)) as {\n\t\t\t\t\tauth?: {\n\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t};\n\t\t\t\t\tdefault?: {\n\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tif (config) {\n\t\t\t\t\tconfigFile = config.auth?.options || config.default?.options || null;\n\t\t\t\t\tif (!configFile) {\n\t\t\t\t\t\tlogger.error(\"[#better-auth]: Couldn't read your auth config.\");\n\t\t\t\t\t\tlogger.break();\n\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\"[#better-auth]: Make sure to default export your auth instance or to export as a variable named auth.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (!(e instanceof Error && e.message.includes(\"Cannot find module\"))) {\n\t\t\t\t\tlogger.error(e);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn configFile;\n\t} catch (e) {\n\t\treturn null;\n\t}\n}\n\nexport { possiblePaths };\n","import { createConsola } from \"consola\";\n\nconst consola = createConsola({\n\tformatOptions: {\n\t\tdate: false,\n\t\tcolors: true,\n\t\tcompact: true,\n\t},\n\tdefaults: {\n\t\ttag: \"[Better Auth]\",\n\t},\n});\n\nexport const createLogger = (options?: {\n\tdisabled?: boolean;\n}) => {\n\treturn {\n\t\tlog: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.log(\"\", ...args);\n\t\t},\n\t\terror: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.error(\"\", ...args);\n\t\t},\n\t\twarn: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.warn(\"\", ...args);\n\t\t},\n\t\tinfo: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.info(\"\", ...args);\n\t\t},\n\t\tdebug: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.debug(\"\", ...args);\n\t\t},\n\t\tbox: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.box(\"\", ...args);\n\t\t},\n\t\tsuccess: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.success(\"\", ...args);\n\t\t},\n\t\tbreak: (...args: any[]) => {\n\t\t\t!options?.disabled && console.log(\"\\n\");\n\t\t},\n\t};\n};\n\nexport const logger = createLogger();\n","import Database from \"better-sqlite3\";\nimport { Kysely } from \"kysely\";\nimport {\n\ttype Dialect,\n\tMysqlDialect,\n\tPostgresDialect,\n\tSqliteDialect,\n} from \"kysely\";\nimport { createPool } from \"mysql2\";\nimport pg from \"pg\";\nimport type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\nimport type { Adapter, Where } from \"../types/adapter\";\n\nconst { Pool } = pg;\n\nfunction convertWhere(w?: Where[]) {\n\tif (!w)\n\t\treturn {\n\t\t\tand: null,\n\t\t\tor: null,\n\t\t};\n\tconst and = w\n\t\t?.filter((w) => w.connector === \"AND\" || !w.connector)\n\t\t.reduce(\n\t\t\t(acc, w) =>\n\t\t\t\t({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[w.field]: w.value,\n\t\t\t\t}) as any,\n\t\t\t{},\n\t\t);\n\tconst or = w\n\t\t?.filter((w) => w.connector === \"OR\")\n\t\t.reduce(\n\t\t\t(acc, w) =>\n\t\t\t\t({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[w.field]: w.value,\n\t\t\t\t}) as any,\n\t\t\t{},\n\t\t);\n\treturn {\n\t\tand: Object.keys(and).length ? and : null,\n\t\tor: Object.keys(or).length ? or : null,\n\t};\n}\n\nfunction transformTo(\n\tval: any,\n\tfields: Record<string, FieldAttribute>,\n\ttransform: KyselyAdapterConfig[\"transform\"],\n) {\n\tfor (const key in val) {\n\t\tif (\n\t\t\tval[key] === 0 &&\n\t\t\tfields[key]?.type === \"boolean\" &&\n\t\t\ttransform?.boolean\n\t\t) {\n\t\t\tval[key] = false;\n\t\t}\n\t\tif (\n\t\t\tval[key] === 1 &&\n\t\t\tfields[key]?.type === \"boolean\" &&\n\t\t\ttransform?.boolean\n\t\t) {\n\t\t\tval[key] = true;\n\t\t}\n\t\tif (fields[key]?.type === \"date\") {\n\t\t\tif (!(val[key] instanceof Date)) {\n\t\t\t\tval[key] = new Date(val[key]);\n\t\t\t}\n\t\t}\n\t}\n\treturn val;\n}\n\nfunction transformFrom(val: any, transform: KyselyAdapterConfig[\"transform\"]) {\n\tfor (const key in val) {\n\t\tif (typeof val[key] === \"boolean\" && transform?.boolean) {\n\t\t\tval[key] = val[key] ? 1 : 0;\n\t\t}\n\t\tif (val[key] instanceof Date) {\n\t\t\tval[key] = val[key].toISOString();\n\t\t}\n\t}\n\treturn val;\n}\n\nexport interface KyselyAdapterConfig {\n\t/**\n\t * Transform dates and booleans for sqlite.\n\t */\n\ttransform?: {\n\t\tschema: {\n\t\t\t[table: string]: Record<string, FieldAttribute>;\n\t\t};\n\t\tboolean: boolean;\n\t\tdate: boolean;\n\t};\n}\n\nexport const kyselyAdapter = (\n\tdb: Kysely<any>,\n\tconfig?: KyselyAdapterConfig,\n): Adapter => {\n\treturn {\n\t\tasync create(data) {\n\t\t\tlet { model, data: val, select } = data;\n\t\t\tif (config?.transform) {\n\t\t\t\tval = transformFrom(val, config.transform);\n\t\t\t}\n\t\t\tlet res = await db\n\t\t\t\t.insertInto(model)\n\t\t\t\t.values(val as any)\n\t\t\t\t.returningAll()\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\tres = schema ? transformTo(val, schema, config.transform) : res;\n\t\t\t}\n\n\t\t\tif (select?.length) {\n\t\t\t\tconst data = res\n\t\t\t\t\t? select.reduce((acc, cur) => {\n\t\t\t\t\t\t\tif (res?.[cur]) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t[cur]: res[cur],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {} as any)\n\t\t\t\t\t: null;\n\t\t\t\tres = data;\n\t\t\t}\n\n\t\t\treturn res as any;\n\t\t},\n\t\tasync findOne(data) {\n\t\t\tconst { model, where, select } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tlet query = db.selectFrom(model).selectAll();\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tlet res = await query.executeTakeFirst();\n\t\t\tif (select?.length) {\n\t\t\t\tconst data = res\n\t\t\t\t\t? select.reduce((acc, cur) => {\n\t\t\t\t\t\t\tif (res?.[cur]) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t[cur]: res[cur],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {} as any)\n\t\t\t\t\t: null;\n\t\t\t\tres = data;\n\t\t\t}\n\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\tres = res && schema ? transformTo(res, schema, config.transform) : res;\n\n\t\t\t\treturn res || null;\n\t\t\t}\n\t\t\treturn (res || null) as any;\n\t\t},\n\t\tasync findMany(data) {\n\t\t\tconst { model, where } = data;\n\t\t\tlet query = db.selectFrom(model);\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tconst res = await query.selectAll().execute();\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\treturn schema\n\t\t\t\t\t? res.map((v) => transformTo(v, schema, config.transform))\n\t\t\t\t\t: res;\n\t\t\t}\n\t\t\treturn res as any;\n\t\t},\n\t\tasync update(data) {\n\t\t\tlet { model, where, update: val } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\n\t\t\tif (config?.transform) {\n\t\t\t\tval = transformFrom(val, config.transform);\n\t\t\t}\n\n\t\t\tlet query = db.updateTable(model).set(val);\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tconst res = (await query.returningAll().executeTakeFirst()) || null;\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\treturn schema ? transformTo(res, schema, config.transform) : res;\n\t\t\t}\n\n\t\t\treturn res as any;\n\t\t},\n\t\tasync delete(data) {\n\t\t\tconst { model, where } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tlet query = db.deleteFrom(model);\n\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\n\t\t\tawait query.execute();\n\t\t},\n\t};\n};\n\nexport const getDialect = (config: BetterAuthOptions) => {\n\tif (!config.database) {\n\t\treturn null;\n\t}\n\tlet dialect: Dialect | null = null;\n\tif (\"provider\" in config.database) {\n\t\tconst provider = config.database.provider;\n\t\tconst connectionString = config.database.url.trim();\n\t\tif (provider === \"postgres\") {\n\t\t\tconst pool = new Pool({\n\t\t\t\tconnectionString,\n\t\t\t});\n\t\t\tdialect = new PostgresDialect({\n\t\t\t\tpool,\n\t\t\t});\n\t\t}\n\t\tif (provider === \"mysql\") {\n\t\t\tconst params = new URL(connectionString);\n\t\t\tconst pool = createPool({\n\t\t\t\thost: params.hostname,\n\t\t\t\tuser: params.username,\n\t\t\t\tpassword: params.password,\n\t\t\t\tdatabase: params.pathname.split(\"/\")[1],\n\t\t\t\tport: Number(params.port),\n\t\t\t});\n\t\t\tdialect = new MysqlDialect({ pool });\n\t\t}\n\n\t\tif (provider === \"sqlite\") {\n\t\t\tconst db = new Database(connectionString);\n\t\t\tdialect = new SqliteDialect({\n\t\t\t\tdatabase: db,\n\t\t\t});\n\t\t}\n\t}\n\treturn dialect;\n};\n\nexport const createKyselyAdapter = (config: BetterAuthOptions) => {\n\tconst dialect = getDialect(config);\n\tif (!dialect) {\n\t\treturn null;\n\t}\n\tconst db = new Kysely<any>({\n\t\tdialect,\n\t});\n\treturn db;\n};\n\nexport const getDatabaseType = (config: BetterAuthOptions) => {\n\tif (\"provider\" in config.database) {\n\t\treturn config.database.provider;\n\t}\n\tif (\"dialect\" in config.database) {\n\t\tif (config.database.dialect instanceof PostgresDialect) {\n\t\t\treturn \"postgres\";\n\t\t}\n\t\tif (config.database.dialect instanceof MysqlDialect) {\n\t\t\treturn \"mysql\";\n\t\t}\n\t\tif (config.database.dialect instanceof SqliteDialect) {\n\t\t\treturn \"sqlite\";\n\t\t}\n\t}\n\treturn \"sqlite\";\n};\n","import type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\n\nexport type BetterAuthDbSchema = Record<\n\tstring,\n\t{\n\t\ttableName: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t\tdisableMigrations?: boolean;\n\t}\n>;\n\nexport const getAuthTables = (options: BetterAuthOptions) => {\n\tconst pluginSchema = options.plugins?.reduce((acc, plugin) => {\n\t\tconst schema = plugin.schema;\n\t\treturn {\n\t\t\t...acc,\n\t\t\t...schema,\n\t\t};\n\t}, {});\n\n\treturn {\n\t\t...pluginSchema,\n\t\tuser: {\n\t\t\ttableName: options.user?.modelName || \"user\",\n\t\t\tfields: {\n\t\t\t\tname: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\temailVerified: {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefaultValue: () => false,\n\t\t\t\t},\n\t\t\t\timage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tcreatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\tdefaultValue: () => new Date(),\n\t\t\t\t},\n\t\t\t\tupdatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\tdefaultValue: () => new Date(),\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\tsession: {\n\t\t\ttableName: options.session?.modelName || \"session\",\n\t\t\tfields: {\n\t\t\t\texpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t},\n\t\t\t\tipAddress: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tuserAgent: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\treferences: {\n\t\t\t\t\t\tmodel: \"user\",\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tonDelete: \"cascade\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\taccount: {\n\t\t\ttableName: options.account?.modelName || \"account\",\n\t\t\tfields: {\n\t\t\t\taccountId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\tproviderId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\treferences: {\n\t\t\t\t\t\tmodel: \"user\",\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tonDelete: \"cascade\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccessToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\trefreshToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tidToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\taccessTokenExpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\trefreshTokenExpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t} satisfies BetterAuthDbSchema;\n};\n","import {\n\tgetAuthTables,\n\ttype BetterAuthDbSchema,\n} from \"../../adapters/get-tables\";\nimport type { FieldAttribute } from \"../../db\";\nimport type { BetterAuthOptions } from \"../../types\";\n\nexport function getPluginTable(config: BetterAuthOptions) {\n\tconst pluginsMigrations =\n\t\tconfig.plugins?.flatMap((plugin) =>\n\t\t\tObject.keys(plugin.schema || {})\n\t\t\t\t.map((key) => {\n\t\t\t\t\tconst schema = plugin.schema || {};\n\t\t\t\t\tconst table = schema[key]!;\n\t\t\t\t\tif (table?.disableMigration) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttableName: key,\n\t\t\t\t\t\tfields: table?.fields as Record<string, FieldAttribute>,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((value) => value !== undefined),\n\t\t) || [];\n\treturn pluginsMigrations;\n}\nexport function getSchema(config: BetterAuthOptions) {\n\tconst baseSchema = getAuthTables(config);\n\tconst pluginSchema = getPluginTable(config);\n\tconst schema = [\n\t\t...pluginSchema,\n\t\tbaseSchema.user,\n\t\tbaseSchema.session,\n\t\tbaseSchema.account,\n\t].reduce((acc, curr) => {\n\t\t//@ts-expect-error\n\t\tacc[curr.tableName] = {\n\t\t\tfields: {\n\t\t\t\t...acc[curr.tableName]?.fields,\n\t\t\t\t...curr.fields,\n\t\t\t},\n\t\t};\n\t\treturn acc;\n\t}, {} as BetterAuthDbSchema);\n\treturn schema;\n}\n","import type {\n\tAlterTableColumnAlteringBuilder,\n\tCreateTableBuilder,\n} from \"kysely\";\nimport type { FieldAttribute, FieldType } from \"../../db\";\nimport { logger } from \"../../utils/logger\";\nimport type { BetterAuthOptions } from \"../../types\";\nimport { getSchema } from \"./get-schema\";\nimport { createKyselyAdapter, getDatabaseType } from \"../../adapters/kysely\";\n\nconst postgresMap = {\n\tstring: [\"character varying\", \"text\"],\n\tnumber: [\n\t\t\"integer\",\n\t\t\"bigint\",\n\t\t\"smallint\",\n\t\t\"numeric\",\n\t\t\"real\",\n\t\t\"double precision\",\n\t],\n\tboolean: [\"bool\", \"boolean\"],\n\tdate: [\"timestamp\", \"date\"],\n};\nconst mysqlMap = {\n\tstring: [\"varchar\", \"text\"],\n\tnumber: [\n\t\t\"integer\",\n\t\t\"int\",\n\t\t\"bigint\",\n\t\t\"smallint\",\n\t\t\"decimal\",\n\t\t\"float\",\n\t\t\"double\",\n\t],\n\tboolean: [\"boolean\"],\n\tdate: [\"date\", \"datetime\"],\n};\n\nconst sqliteMap = {\n\tstring: [\"TEXT\"],\n\tnumber: [\"INTEGER\", \"REAL\"],\n\tboolean: [\"INTEGER\", \"BOOLEAN\"], // 0 or 1\n\tdate: [\"DATE\", \"INTEGER\"],\n};\n\nconst map = {\n\tpostgres: postgresMap,\n\tmysql: mysqlMap,\n\tsqlite: sqliteMap,\n};\n\nexport function matchType(\n\tcolumnDataType: string,\n\tfieldType: FieldType,\n\tdbType: \"postgres\" | \"sqlite\" | \"mysql\",\n) {\n\tconst types = map[dbType];\n\tconst type = types[fieldType].map((t) => t.toLowerCase());\n\tconst matches = type.includes(columnDataType.toLowerCase());\n\treturn matches;\n}\n\nexport async function getMigrations(config: BetterAuthOptions) {\n\tconst betterAuthSchema = getSchema(config);\n\tconst dbType = getDatabaseType(config);\n\tconst db = createKyselyAdapter(config);\n\tif (!db) {\n\t\tlogger.error(\"Invalid database configuration.\");\n\t\tprocess.exit(1);\n\t}\n\tconst tableMetadata = await db.introspection.getTables();\n\tconst toBeCreated: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t}[] = [];\n\tconst toBeAdded: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t}[] = [];\n\tfor (const [key, value] of Object.entries(betterAuthSchema)) {\n\t\tconst table = tableMetadata.find((t) => t.name === key);\n\t\tif (!table) {\n\t\t\tconst tIndex = toBeCreated.findIndex((t) => t.table === key);\n\t\t\tif (tIndex === -1) {\n\t\t\t\ttoBeCreated.push({\n\t\t\t\t\ttable: key,\n\t\t\t\t\tfields: value.fields,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoBeCreated[tIndex].fields = {\n\t\t\t\t\t...toBeCreated[tIndex].fields,\n\t\t\t\t\t...value.fields,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tlet toBeAddedFields: Record<string, FieldAttribute> = {};\n\t\tfor (const [fieldName, field] of Object.entries(value.fields)) {\n\t\t\tconst column = table.columns.find((c) => c.name === fieldName);\n\t\t\tif (!column) {\n\t\t\t\ttoBeAddedFields[fieldName] = field;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(column.dataType, field.type, dbType)) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t`Field ${fieldName} in table ${key} has a different type in the database. Expected ${field.type} but got ${column.dataType}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(toBeAddedFields).length > 0) {\n\t\t\ttoBeAdded.push({\n\t\t\t\ttable: key,\n\t\t\t\tfields: toBeAddedFields,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst typeMap = {\n\t\tstring: \"text\",\n\t\tboolean: \"boolean\",\n\t\tnumber: \"integer\",\n\t\tdate: \"date\",\n\t} as const;\n\tconst migrations: (\n\t\t| AlterTableColumnAlteringBuilder\n\t\t| CreateTableBuilder<string, string>\n\t)[] = [];\n\n\tif (toBeAdded.length) {\n\t\tfor (const table of toBeAdded) {\n\t\t\tlogger.info(`Adding fields to table ${table.table}`);\n\t\t\tfor (const [fieldName, field] of Object.entries(table.fields)) {\n\t\t\t\tlogger.info(`Adding field ${fieldName} with type ${field.type}`);\n\n\t\t\t\tconst type = typeMap[field.type];\n\t\t\t\tconst exec = db.schema\n\t\t\t\t\t.alterTable(table.table)\n\t\t\t\t\t.addColumn(fieldName, type, (col) => {\n\t\t\t\t\t\tcol = field.required !== false ? col.notNull() : col;\n\t\t\t\t\t\tif (field.references) {\n\t\t\t\t\t\t\tcol = col.references(\n\t\t\t\t\t\t\t\t`${field.references.model}.${field.references.field}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn col;\n\t\t\t\t\t});\n\t\t\t\tmigrations.push(exec);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (toBeCreated.length) {\n\t\tfor (const table of toBeCreated) {\n\t\t\tlet dbT = db.schema\n\t\t\t\t.createTable(table.table)\n\t\t\t\t.addColumn(\"id\", \"text\", (col) => col.primaryKey());\n\t\t\tfor (const [fieldName, field] of Object.entries(table.fields)) {\n\t\t\t\tconst type = typeMap[field.type];\n\t\t\t\tdbT = dbT.addColumn(fieldName, type, (col) => {\n\t\t\t\t\tcol = field.required !== false ? col.notNull() : col;\n\t\t\t\t\tif (field.references) {\n\t\t\t\t\t\tcol = col.references(\n\t\t\t\t\t\t\t`${field.references.model}.${field.references.field}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn col;\n\t\t\t\t});\n\t\t\t}\n\t\t\tmigrations.push(dbT);\n\t\t}\n\t}\n\tasync function runMigrations() {\n\t\treturn await Promise.all(migrations.map((m) => m.execute()));\n\t}\n\treturn { toBeCreated, toBeAdded, runMigrations };\n}\n"],"mappings":"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","names":["Command","path","path","migrate","Command"]}
1
+ {"version":3,"sources":["../src/utils/logger.ts","../src/cli/get-config.ts","../src/adapters/kysely.ts","../src/adapters/get-tables.ts","../src/cli/utils/get-schema.ts","../src/cli/utils/get-migration.ts","../src/cli/commands/migrate.ts","../src/cli/index.ts"],"names":["path","migrate","Command"],"mappings":"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","file":"cli.js","sourcesContent":["import { createConsola } from \"consola\";\n\nconst consola = createConsola({\n\tformatOptions: {\n\t\tdate: false,\n\t\tcolors: true,\n\t\tcompact: true,\n\t},\n\tdefaults: {\n\t\ttag: \"Better Auth\",\n\t},\n});\n\nexport const createLogger = (options?: {\n\tdisabled?: boolean;\n}) => {\n\treturn {\n\t\tlog: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.log(\"\", ...args);\n\t\t},\n\t\terror: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.error(\"\", ...args);\n\t\t},\n\t\twarn: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.warn(\"\", ...args);\n\t\t},\n\t\tinfo: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.info(\"\", ...args);\n\t\t},\n\t\tdebug: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.debug(\"\", ...args);\n\t\t},\n\t\tbox: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.box(\"\", ...args);\n\t\t},\n\t\tsuccess: (...args: any[]) => {\n\t\t\t!options?.disabled && consola.success(\"\", ...args);\n\t\t},\n\t\tbreak: (...args: any[]) => {\n\t\t\t!options?.disabled && console.log(\"\\n\");\n\t\t},\n\t};\n};\n\nexport const logger = createLogger();\n","import path from \"node:path\";\nimport jiti from \"jiti\";\nimport type { BetterAuthOptions } from \"../types\";\nimport { logger } from \"../utils/logger\";\n\nlet possiblePaths = [\"auth.ts\", \"auth.config.ts\"];\n\npossiblePaths = [\n\t...possiblePaths,\n\t...possiblePaths.map((it) => `lib/${it}`),\n\t...possiblePaths.map((it) => `utils/${it}`),\n];\npossiblePaths = [...possiblePaths, ...possiblePaths.map((it) => `src/${it}`)];\n\nexport async function getConfig({\n\tcwd,\n\tconfigPath,\n}: {\n\tcwd: string;\n\tconfigPath?: string;\n}) {\n\ttry {\n\t\tlet configFile: BetterAuthOptions | null = null;\n\t\tif (configPath) {\n\t\t\tconst config = (await jiti(cwd).import(\n\t\t\t\tpath.join(cwd, configPath),\n\t\t\t\t{},\n\t\t\t)) as {\n\t\t\t\tauth: {\n\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t};\n\t\t\t};\n\t\t\tif (!config) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconfigFile = config.auth.options;\n\t\t}\n\n\t\tfor (const possiblePath of possiblePaths) {\n\t\t\ttry {\n\t\t\t\tconst config = (await jiti(path.join(cwd, possiblePath)).import(\n\t\t\t\t\tpath.join(cwd, possiblePath),\n\t\t\t\t\t{},\n\t\t\t\t)) as {\n\t\t\t\t\tauth?: {\n\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t};\n\t\t\t\t\tdefault?: {\n\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t\tif (config) {\n\t\t\t\t\tconfigFile = config.auth?.options || config.default?.options || null;\n\t\t\t\t\tif (!configFile) {\n\t\t\t\t\t\tlogger.error(\"[#better-auth]: Couldn't read your auth config.\");\n\t\t\t\t\t\tlogger.break();\n\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t\"[#better-auth]: Make sure to default export your auth instance or to export as a variable named auth.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tif (!(e instanceof Error && e.message.includes(\"Cannot find module\"))) {\n\t\t\t\t\tlogger.error(e);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn configFile;\n\t} catch (e) {\n\t\treturn null;\n\t}\n}\n\nexport { possiblePaths };\n","import Database from \"better-sqlite3\";\nimport { Kysely } from \"kysely\";\nimport {\n\ttype Dialect,\n\tMysqlDialect,\n\tPostgresDialect,\n\tSqliteDialect,\n} from \"kysely\";\nimport { createPool } from \"mysql2\";\nimport pg from \"pg\";\nimport type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\nimport type { Adapter, Where } from \"../types/adapter\";\n\nconst { Pool } = pg;\n\nfunction convertWhere(w?: Where[]) {\n\tif (!w)\n\t\treturn {\n\t\t\tand: null,\n\t\t\tor: null,\n\t\t};\n\tconst and = w\n\t\t?.filter((w) => w.connector === \"AND\" || !w.connector)\n\t\t.reduce(\n\t\t\t(acc, w) =>\n\t\t\t\t({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[w.field]: w.value,\n\t\t\t\t}) as any,\n\t\t\t{},\n\t\t);\n\tconst or = w\n\t\t?.filter((w) => w.connector === \"OR\")\n\t\t.reduce(\n\t\t\t(acc, w) =>\n\t\t\t\t({\n\t\t\t\t\t...acc,\n\t\t\t\t\t[w.field]: w.value,\n\t\t\t\t}) as any,\n\t\t\t{},\n\t\t);\n\treturn {\n\t\tand: Object.keys(and).length ? and : null,\n\t\tor: Object.keys(or).length ? or : null,\n\t};\n}\n\nfunction transformTo(\n\tval: any,\n\tfields: Record<string, FieldAttribute>,\n\ttransform: KyselyAdapterConfig[\"transform\"],\n) {\n\tfor (const key in val) {\n\t\tif (\n\t\t\tval[key] === 0 &&\n\t\t\tfields[key]?.type === \"boolean\" &&\n\t\t\ttransform?.boolean\n\t\t) {\n\t\t\tval[key] = false;\n\t\t}\n\t\tif (\n\t\t\tval[key] === 1 &&\n\t\t\tfields[key]?.type === \"boolean\" &&\n\t\t\ttransform?.boolean\n\t\t) {\n\t\t\tval[key] = true;\n\t\t}\n\t\tif (fields[key]?.type === \"date\") {\n\t\t\tif (!(val[key] instanceof Date)) {\n\t\t\t\tval[key] = new Date(val[key]);\n\t\t\t}\n\t\t}\n\t}\n\treturn val;\n}\n\nfunction transformFrom(val: any, transform: KyselyAdapterConfig[\"transform\"]) {\n\tfor (const key in val) {\n\t\tif (typeof val[key] === \"boolean\" && transform?.boolean) {\n\t\t\tval[key] = val[key] ? 1 : 0;\n\t\t}\n\t\tif (val[key] instanceof Date) {\n\t\t\tval[key] = val[key].toISOString();\n\t\t}\n\t}\n\treturn val;\n}\n\nexport interface KyselyAdapterConfig {\n\t/**\n\t * Transform dates and booleans for sqlite.\n\t */\n\ttransform?: {\n\t\tschema: {\n\t\t\t[table: string]: Record<string, FieldAttribute>;\n\t\t};\n\t\tboolean: boolean;\n\t\tdate: boolean;\n\t};\n}\n\nexport const kyselyAdapter = (\n\tdb: Kysely<any>,\n\tconfig?: KyselyAdapterConfig,\n): Adapter => {\n\treturn {\n\t\tasync create(data) {\n\t\t\tlet { model, data: val, select } = data;\n\t\t\tif (config?.transform) {\n\t\t\t\tval = transformFrom(val, config.transform);\n\t\t\t}\n\t\t\tlet res = await db\n\t\t\t\t.insertInto(model)\n\t\t\t\t.values(val as any)\n\t\t\t\t.returningAll()\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\tres = schema ? transformTo(val, schema, config.transform) : res;\n\t\t\t}\n\n\t\t\tif (select?.length) {\n\t\t\t\tconst data = res\n\t\t\t\t\t? select.reduce((acc, cur) => {\n\t\t\t\t\t\t\tif (res?.[cur]) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t[cur]: res[cur],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {} as any)\n\t\t\t\t\t: null;\n\t\t\t\tres = data;\n\t\t\t}\n\n\t\t\treturn res as any;\n\t\t},\n\t\tasync findOne(data) {\n\t\t\tconst { model, where, select } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tlet query = db.selectFrom(model).selectAll();\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tlet res = await query.executeTakeFirst();\n\t\t\tif (select?.length) {\n\t\t\t\tconst data = res\n\t\t\t\t\t? select.reduce((acc, cur) => {\n\t\t\t\t\t\t\tif (res?.[cur]) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t[cur]: res[cur],\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, {} as any)\n\t\t\t\t\t: null;\n\t\t\t\tres = data;\n\t\t\t}\n\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\tres = res && schema ? transformTo(res, schema, config.transform) : res;\n\n\t\t\t\treturn res || null;\n\t\t\t}\n\t\t\treturn (res || null) as any;\n\t\t},\n\t\tasync findMany(data) {\n\t\t\tconst { model, where } = data;\n\t\t\tlet query = db.selectFrom(model);\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tconst res = await query.selectAll().execute();\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\treturn schema\n\t\t\t\t\t? res.map((v) => transformTo(v, schema, config.transform))\n\t\t\t\t\t: res;\n\t\t\t}\n\t\t\treturn res as any;\n\t\t},\n\t\tasync update(data) {\n\t\t\tlet { model, where, update: val } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\n\t\t\tif (config?.transform) {\n\t\t\t\tval = transformFrom(val, config.transform);\n\t\t\t}\n\n\t\t\tlet query = db.updateTable(model).set(val);\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\t\t\tconst res = (await query.returningAll().executeTakeFirst()) || null;\n\t\t\tif (config?.transform) {\n\t\t\t\tconst schema = config.transform.schema[model];\n\t\t\t\treturn schema ? transformTo(res, schema, config.transform) : res;\n\t\t\t}\n\n\t\t\treturn res as any;\n\t\t},\n\t\tasync delete(data) {\n\t\t\tconst { model, where } = data;\n\t\t\tconst { and, or } = convertWhere(where);\n\t\t\tlet query = db.deleteFrom(model);\n\n\t\t\tif (and) {\n\t\t\t\tquery = query.where((eb) => eb.and(and));\n\t\t\t}\n\t\t\tif (or) {\n\t\t\t\tquery = query.where((eb) => eb.or(or));\n\t\t\t}\n\n\t\t\tawait query.execute();\n\t\t},\n\t};\n};\n\nexport const getDialect = (config: BetterAuthOptions) => {\n\tif (!config.database) {\n\t\treturn null;\n\t}\n\tif (\n\t\tconfig.database instanceof MysqlDialect ||\n\t\tconfig.database instanceof PostgresDialect ||\n\t\tconfig.database instanceof SqliteDialect\n\t) {\n\t\treturn config.database;\n\t}\n\tlet dialect: Dialect | null = null;\n\tif (\"provider\" in config.database) {\n\t\tconst provider = config.database.provider;\n\t\tconst connectionString = config.database?.url?.trim();\n\t\tif (provider === \"postgres\") {\n\t\t\tconst pool = new Pool({\n\t\t\t\tconnectionString,\n\t\t\t});\n\t\t\tdialect = new PostgresDialect({\n\t\t\t\tpool,\n\t\t\t});\n\t\t}\n\t\tif (provider === \"mysql\") {\n\t\t\tconst params = new URL(connectionString);\n\t\t\tconst pool = createPool({\n\t\t\t\thost: params.hostname,\n\t\t\t\tuser: params.username,\n\t\t\t\tpassword: params.password,\n\t\t\t\tdatabase: params.pathname.split(\"/\")[1],\n\t\t\t\tport: Number(params.port),\n\t\t\t});\n\t\t\tdialect = new MysqlDialect({ pool });\n\t\t}\n\n\t\tif (provider === \"sqlite\") {\n\t\t\tconst db = new Database(connectionString);\n\t\t\tdialect = new SqliteDialect({\n\t\t\t\tdatabase: db,\n\t\t\t});\n\t\t}\n\t}\n\treturn dialect;\n};\n\nexport const createKyselyAdapter = (config: BetterAuthOptions) => {\n\tconst dialect = getDialect(config);\n\tif (!dialect) {\n\t\treturn null;\n\t}\n\tconst db = new Kysely<any>({\n\t\tdialect,\n\t});\n\treturn db;\n};\n\nexport const getDatabaseType = (config: BetterAuthOptions) => {\n\tif (\"provider\" in config.database) {\n\t\treturn config.database.provider;\n\t}\n\tif (\"dialect\" in config.database) {\n\t\tif (config.database.dialect instanceof PostgresDialect) {\n\t\t\treturn \"postgres\";\n\t\t}\n\t\tif (config.database.dialect instanceof MysqlDialect) {\n\t\t\treturn \"mysql\";\n\t\t}\n\t\tif (config.database.dialect instanceof SqliteDialect) {\n\t\t\treturn \"sqlite\";\n\t\t}\n\t}\n\treturn \"sqlite\";\n};\n","import type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\n\nexport type BetterAuthDbSchema = Record<\n\tstring,\n\t{\n\t\ttableName: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t\tdisableMigrations?: boolean;\n\t}\n>;\n\nexport const getAuthTables = (options: BetterAuthOptions) => {\n\tconst pluginSchema = options.plugins?.reduce(\n\t\t(acc, plugin) => {\n\t\t\tconst schema = plugin.schema;\n\t\t\tif (!schema) return acc;\n\t\t\tfor (const [key, value] of Object.entries(schema)) {\n\t\t\t\tacc[key] = {\n\t\t\t\t\tfields: {\n\t\t\t\t\t\t...acc[key]?.fields,\n\t\t\t\t\t\t...value.fields,\n\t\t\t\t\t},\n\t\t\t\t\ttableName: key,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<\n\t\t\tstring,\n\t\t\t{ fields: Record<string, FieldAttribute>; tableName: string }\n\t\t>,\n\t);\n\n\treturn {\n\t\t...pluginSchema,\n\t\tuser: {\n\t\t\ttableName: options.user?.modelName || \"user\",\n\t\t\tfields: {\n\t\t\t\tname: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\temail: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\temailVerified: {\n\t\t\t\t\ttype: \"boolean\",\n\t\t\t\t\tdefaultValue: () => false,\n\t\t\t\t},\n\t\t\t\timage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tcreatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\tdefaultValue: () => new Date(),\n\t\t\t\t},\n\t\t\t\tupdatedAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\tdefaultValue: () => new Date(),\n\t\t\t\t},\n\t\t\t\t...pluginSchema?.user?.fields,\n\t\t\t},\n\t\t},\n\t\tsession: {\n\t\t\ttableName: options.session?.modelName || \"session\",\n\t\t\tfields: {\n\t\t\t\texpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t},\n\t\t\t\tipAddress: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tuserAgent: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\treferences: {\n\t\t\t\t\t\tmodel: \"user\",\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tonDelete: \"cascade\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t...pluginSchema?.session?.fields,\n\t\t\t},\n\t\t},\n\t\taccount: {\n\t\t\ttableName: options.account?.modelName || \"account\",\n\t\t\tfields: {\n\t\t\t\taccountId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\tproviderId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t},\n\t\t\t\tuserId: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\treferences: {\n\t\t\t\t\t\tmodel: \"user\",\n\t\t\t\t\t\tfield: \"id\",\n\t\t\t\t\t\tonDelete: \"cascade\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\taccessToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\trefreshToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tidToken: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\taccessTokenExpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\trefreshTokenExpiresAt: {\n\t\t\t\t\ttype: \"date\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\tpassword: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\trequired: false,\n\t\t\t\t},\n\t\t\t\t...pluginSchema?.account?.fields,\n\t\t\t},\n\t\t},\n\t} satisfies BetterAuthDbSchema;\n};\n","import {\n\tgetAuthTables,\n\ttype BetterAuthDbSchema,\n} from \"../../adapters/get-tables\";\nimport type { FieldAttribute } from \"../../db\";\nimport type { BetterAuthOptions } from \"../../types\";\n\nexport function getPluginTable(config: BetterAuthOptions) {\n\tconst pluginsMigrations =\n\t\tconfig.plugins?.flatMap((plugin) =>\n\t\t\tObject.keys(plugin.schema || {})\n\t\t\t\t.map((key) => {\n\t\t\t\t\tconst schema = plugin.schema || {};\n\t\t\t\t\tconst table = schema[key]!;\n\t\t\t\t\tif (table?.disableMigration) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttableName: key,\n\t\t\t\t\t\tfields: table?.fields as Record<string, FieldAttribute>,\n\t\t\t\t\t};\n\t\t\t\t})\n\t\t\t\t.filter((value) => value !== undefined),\n\t\t) || [];\n\treturn pluginsMigrations;\n}\nexport function getSchema(config: BetterAuthOptions) {\n\tconst baseSchema = getAuthTables(config);\n\tconst pluginSchema = getPluginTable(config);\n\tconst schema = [\n\t\t...pluginSchema,\n\t\tbaseSchema.user,\n\t\tbaseSchema.session,\n\t\tbaseSchema.account,\n\t].reduce((acc, curr) => {\n\t\t//@ts-expect-error\n\t\tacc[curr.tableName] = {\n\t\t\tfields: {\n\t\t\t\t...acc[curr.tableName]?.fields,\n\t\t\t\t...curr.fields,\n\t\t\t},\n\t\t};\n\t\treturn acc;\n\t}, {} as BetterAuthDbSchema);\n\treturn schema;\n}\n","import type {\n\tAlterTableColumnAlteringBuilder,\n\tCreateTableBuilder,\n} from \"kysely\";\nimport type { FieldAttribute, FieldType } from \"../../db\";\nimport { logger } from \"../../utils/logger\";\nimport type { BetterAuthOptions } from \"../../types\";\nimport { getSchema } from \"./get-schema\";\nimport { createKyselyAdapter, getDatabaseType } from \"../../adapters/kysely\";\n\nconst postgresMap = {\n\tstring: [\"character varying\", \"text\"],\n\tnumber: [\n\t\t\"int4\",\n\t\t\"integer\",\n\t\t\"bigint\",\n\t\t\"smallint\",\n\t\t\"numeric\",\n\t\t\"real\",\n\t\t\"double precision\",\n\t],\n\tboolean: [\"bool\", \"boolean\"],\n\tdate: [\"timestamp\", \"date\"],\n};\nconst mysqlMap = {\n\tstring: [\"varchar\", \"text\"],\n\tnumber: [\n\t\t\"integer\",\n\t\t\"int\",\n\t\t\"bigint\",\n\t\t\"smallint\",\n\t\t\"decimal\",\n\t\t\"float\",\n\t\t\"double\",\n\t],\n\tboolean: [\"boolean\"],\n\tdate: [\"date\", \"datetime\"],\n};\n\nconst sqliteMap = {\n\tstring: [\"TEXT\"],\n\tnumber: [\"INTEGER\", \"REAL\"],\n\tboolean: [\"INTEGER\", \"BOOLEAN\"], // 0 or 1\n\tdate: [\"DATE\", \"INTEGER\"],\n};\n\nconst map = {\n\tpostgres: postgresMap,\n\tmysql: mysqlMap,\n\tsqlite: sqliteMap,\n};\n\nexport function matchType(\n\tcolumnDataType: string,\n\tfieldType: FieldType,\n\tdbType: \"postgres\" | \"sqlite\" | \"mysql\",\n) {\n\tconst types = map[dbType];\n\tconst type = types[fieldType].map((t) => t.toLowerCase());\n\tconst matches = type.includes(columnDataType.toLowerCase());\n\treturn matches;\n}\n\nexport async function getMigrations(config: BetterAuthOptions) {\n\tconst betterAuthSchema = getSchema(config);\n\tconst dbType = getDatabaseType(config);\n\tconst db = createKyselyAdapter(config);\n\tif (!db) {\n\t\tlogger.error(\"Invalid database configuration.\");\n\t\tprocess.exit(1);\n\t}\n\tconst tableMetadata = await db.introspection.getTables();\n\tconst toBeCreated: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t}[] = [];\n\tconst toBeAdded: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t}[] = [];\n\tfor (const [key, value] of Object.entries(betterAuthSchema)) {\n\t\tconst table = tableMetadata.find((t) => t.name === key);\n\t\tif (!table) {\n\t\t\tconst tIndex = toBeCreated.findIndex((t) => t.table === key);\n\t\t\tif (tIndex === -1) {\n\t\t\t\ttoBeCreated.push({\n\t\t\t\t\ttable: key,\n\t\t\t\t\tfields: value.fields,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\ttoBeCreated[tIndex].fields = {\n\t\t\t\t\t...toBeCreated[tIndex].fields,\n\t\t\t\t\t...value.fields,\n\t\t\t\t};\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tlet toBeAddedFields: Record<string, FieldAttribute> = {};\n\t\tfor (const [fieldName, field] of Object.entries(value.fields)) {\n\t\t\tconst column = table.columns.find((c) => c.name === fieldName);\n\t\t\tif (!column) {\n\t\t\t\ttoBeAddedFields[fieldName] = field;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(column.dataType, field.type, dbType)) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t`Field ${fieldName} in table ${key} has a different type in the database. Expected ${field.type} but got ${column.dataType}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (Object.keys(toBeAddedFields).length > 0) {\n\t\t\ttoBeAdded.push({\n\t\t\t\ttable: key,\n\t\t\t\tfields: toBeAddedFields,\n\t\t\t});\n\t\t}\n\t}\n\n\tconst typeMap = {\n\t\tstring: \"text\",\n\t\tboolean: \"boolean\",\n\t\tnumber: \"integer\",\n\t\tdate: \"date\",\n\t} as const;\n\tconst migrations: (\n\t\t| AlterTableColumnAlteringBuilder\n\t\t| CreateTableBuilder<string, string>\n\t)[] = [];\n\n\tif (toBeAdded.length) {\n\t\tfor (const table of toBeAdded) {\n\t\t\tlogger.info(`Adding fields to table ${table.table}`);\n\t\t\tfor (const [fieldName, field] of Object.entries(table.fields)) {\n\t\t\t\tlogger.info(`Adding field ${fieldName} with type ${field.type}`);\n\n\t\t\t\tconst type = typeMap[field.type];\n\t\t\t\tconst exec = db.schema\n\t\t\t\t\t.alterTable(table.table)\n\t\t\t\t\t.addColumn(fieldName, type, (col) => {\n\t\t\t\t\t\tcol = field.required !== false ? col.notNull() : col;\n\t\t\t\t\t\tif (field.references) {\n\t\t\t\t\t\t\tcol = col.references(\n\t\t\t\t\t\t\t\t`${field.references.model}.${field.references.field}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn col;\n\t\t\t\t\t});\n\t\t\t\tmigrations.push(exec);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (toBeCreated.length) {\n\t\tfor (const table of toBeCreated) {\n\t\t\tlet dbT = db.schema\n\t\t\t\t.createTable(table.table)\n\t\t\t\t.addColumn(\"id\", \"text\", (col) => col.primaryKey());\n\t\t\tfor (const [fieldName, field] of Object.entries(table.fields)) {\n\t\t\t\tconst type = typeMap[field.type];\n\t\t\t\tdbT = dbT.addColumn(fieldName, type, (col) => {\n\t\t\t\t\tcol = field.required !== false ? col.notNull() : col;\n\t\t\t\t\tif (field.references) {\n\t\t\t\t\t\tcol = col.references(\n\t\t\t\t\t\t\t`${field.references.model}.${field.references.field}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn col;\n\t\t\t\t});\n\t\t\t}\n\t\t\tmigrations.push(dbT);\n\t\t}\n\t}\n\tasync function runMigrations() {\n\t\treturn await Promise.all(migrations.map((m) => m.execute()));\n\t}\n\treturn { toBeCreated, toBeAdded, runMigrations };\n}\n","import { Command } from \"commander\";\nimport { getConfig } from \"../get-config\";\nimport { z } from \"zod\";\nimport { existsSync } from \"fs\";\nimport path from \"path\";\nimport { logger } from \"../../utils/logger\";\nimport { createKyselyAdapter } from \"../../adapters/kysely\";\nimport ora from \"ora\";\nimport chalk from \"chalk\";\nimport prompts from \"prompts\";\nimport { getMigrations } from \"../utils/get-migration\";\n\nexport const migrate = new Command(\"migrate\")\n\t.option(\n\t\t\"-c, --cwd <cwd>\",\n\t\t\"the working directory. defaults to the current directory.\",\n\t\tprocess.cwd(),\n\t)\n\t.option(\n\t\t\"--config <config>\",\n\t\t\"the path to the configuration file. defaults to the first configuration file found.\",\n\t)\n\t.action(async (opts) => {\n\t\tconst options = z\n\t\t\t.object({\n\t\t\t\tcwd: z.string(),\n\t\t\t\tconfig: z.string().optional(),\n\t\t\t})\n\t\t\t.parse(opts);\n\t\tconst cwd = path.resolve(options.cwd);\n\t\tif (!existsSync(cwd)) {\n\t\t\tlogger.error(`The directory \"${cwd}\" does not exist.`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconst config = await getConfig({\n\t\t\tcwd,\n\t\t\tconfigPath: options.config,\n\t\t});\n\t\tif (!config) {\n\t\t\tlogger.error(\n\t\t\t\t\"No configuration file found. Add a `auth.ts` or `auth.config.ts` file to your project.\",\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconst db = createKyselyAdapter(config);\n\t\tif (!db) {\n\t\t\tlogger.error(\"Invalid database configuration.\");\n\t\t\tprocess.exit(1);\n\t\t}\n\t\tconst spinner = ora(\"preparing migration...\").start();\n\n\t\tconst { toBeAdded, toBeCreated, runMigrations } =\n\t\t\tawait getMigrations(config);\n\n\t\tif (!toBeAdded.length && !toBeCreated.length) {\n\t\t\tspinner.stop();\n\t\t\tlogger.success(\"🚀 No migrations needed.\");\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tspinner.stop();\n\t\tlogger.info(`🔑 The migration will affect the following:`);\n\n\t\tfor (const table of [...toBeAdded, ...toBeCreated]) {\n\t\t\tlogger.info(\n\t\t\t\t\"->\",\n\t\t\t\tchalk.magenta(Object.keys(table.fields).join(\", \")),\n\t\t\t\tchalk.white(\"fields on\"),\n\t\t\t\tchalk.yellow(`${table.table}`),\n\t\t\t\tchalk.white(\"table.\"),\n\t\t\t);\n\t\t}\n\t\tconst { migrate } = await prompts({\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"migrate\",\n\t\t\tmessage: \"Are you sure you want to run these migrations?\",\n\t\t\tinitial: false,\n\t\t});\n\t\tif (!migrate) {\n\t\t\tlogger.info(\"Migration cancelled.\");\n\t\t\tprocess.exit(0);\n\t\t}\n\t\tspinner?.start(\"migrating...\");\n\t\tawait runMigrations();\n\t\tspinner.stop();\n\t\tlogger.success(\"🚀 migration was completed successfully!\");\n\t\tprocess.exit(0);\n\t});\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport \"dotenv/config\";\nimport { migrate } from \"./commands/migrate\";\nasync function main() {\n\tconst program = new Command().name(\"better-auth\");\n\tprogram.addCommand(migrate);\n\tprogram.parse();\n}\n\nmain();\n"]}
@@ -2,14 +2,14 @@ import * as nanostores from 'nanostores';
2
2
  import { A as AccessControl, S as StatementsPrimitive, R as Role } from '../statement-D6SPoYOh.js';
3
3
  import * as _better_fetch_fetch from '@better-fetch/fetch';
4
4
  import { BetterFetchOption } from '@better-fetch/fetch';
5
- import { o as organization, M as Member, I as Invitation, u as username } from '../index-Cw3RPThC.js';
6
- export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-Cw3RPThC.js';
5
+ import { o as organization, M as Member, I as Invitation, u as username } from '../index-CNp7-qQI.js';
6
+ export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-CNp7-qQI.js';
7
7
  import '../helper-D8dhRz72.js';
8
- import '../index-Dzn4azgH.js';
8
+ import '../index-CcxejJTH.js';
9
9
  import 'arctic';
10
10
  import 'zod';
11
11
  import 'better-call';
12
- import '../internal-adapter-DVxOAfxa.js';
12
+ import '../internal-adapter-CFONjGd0.js';
13
13
  import 'kysely';
14
14
  import '@simplewebauthn/types';
15
15
 
@@ -69,33 +69,27 @@ declare const organizationClient: <O extends OrganizationClientOptions>(options?
69
69
  getAtoms: ($fetch: _better_fetch_fetch.BetterFetch) => {
70
70
  _listOrg: nanostores.PreinitializedWritableAtom<boolean>;
71
71
  _activeOrgSignal: nanostores.PreinitializedWritableAtom<boolean>;
72
- activeOrganization: nanostores.ReadableAtom<{
73
- id: string;
74
- name: string;
75
- slug: string;
76
- members: Member[];
77
- invitations: Invitation[];
78
- } | null>;
79
- listOrganizations: nanostores.ReadableAtom<{
80
- id: string;
81
- name: string;
82
- slug: string;
83
- }[] | null>;
84
- invitation: nanostores.ReadableAtom<{
85
- data: null;
86
- error: {
87
- message?: string | undefined;
88
- status: number;
89
- statusText: string;
90
- };
91
- } | {
92
- error: {
93
- message: string;
94
- status: number;
95
- data: null;
96
- };
97
- data: null;
98
- } | {
72
+ activeOrganization: nanostores.PreinitializedWritableAtom<{
73
+ data: {
74
+ id: string;
75
+ name: string;
76
+ slug: string;
77
+ members: Member[];
78
+ invitations: Invitation[];
79
+ } | null;
80
+ error: null | _better_fetch_fetch.BetterFetchError;
81
+ isPending: boolean;
82
+ }>;
83
+ listOrganizations: nanostores.PreinitializedWritableAtom<{
84
+ data: {
85
+ id: string;
86
+ name: string;
87
+ slug: string;
88
+ }[] | null;
89
+ error: null | _better_fetch_fetch.BetterFetchError;
90
+ isPending: boolean;
91
+ }>;
92
+ invitation: nanostores.PreinitializedWritableAtom<{
99
93
  data: {
100
94
  id: string;
101
95
  status: "pending" | "accepted" | "rejected" | "canceled";
@@ -108,8 +102,9 @@ declare const organizationClient: <O extends OrganizationClientOptions>(options?
108
102
  organizationSlug: string;
109
103
  inviterEmail: string;
110
104
  inviterName: string;
111
- };
112
- error: null;
105
+ } | null;
106
+ error: null | _better_fetch_fetch.BetterFetchError;
107
+ isPending: boolean;
113
108
  }>;
114
109
  };
115
110
  atomListeners: {