better-auth 0.0.9-beta.26 → 0.0.9-beta.28

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/dist/cli.js CHANGED
@@ -71,43 +71,56 @@ async function getConfig({
71
71
  try {
72
72
  let configFile = null;
73
73
  if (configPath) {
74
- const config = await jiti(cwd).import(
75
- path.join(cwd, configPath),
76
- {}
77
- );
78
- if (!config) {
79
- return null;
80
- }
81
- configFile = config.auth.options;
82
- }
83
- for (const possiblePath of possiblePaths) {
84
- try {
85
- const config = await jiti(path.join(cwd, possiblePath)).import(
86
- path.join(cwd, possiblePath),
74
+ if (configPath.endsWith(".tsx")) {
75
+ logger.error(
76
+ "[#better-auth]: Only .ts files are supported for custom config paths."
77
+ );
78
+ process.exit(1);
79
+ } else {
80
+ const config = await jiti(cwd).import(
81
+ path.join(cwd, configPath),
87
82
  {}
88
83
  );
89
- if (config) {
90
- configFile = config.auth?.options || config.default?.options || null;
91
- if (!configFile) {
92
- logger.error("[#better-auth]: Couldn't read your auth config.");
93
- logger.break();
94
- logger.info(
95
- "[#better-auth]: Make sure to default export your auth instance or to export as a variable named auth."
96
- );
84
+ if (!config.auth && !config.default) {
85
+ logger.error(
86
+ "[#better-auth]: Couldn't read your auth config. Make sure to default export your auth instance or to export as a variable named auth."
87
+ );
88
+ process.exit(1);
89
+ }
90
+ configFile = config.auth?.options || config.default?.options || null;
91
+ }
92
+ }
93
+ if (!configFile) {
94
+ for (const possiblePath of possiblePaths) {
95
+ try {
96
+ const config = await jiti(path.join(cwd, possiblePath)).import(
97
+ path.join(cwd, possiblePath),
98
+ {}
99
+ );
100
+ if (config) {
101
+ configFile = config.auth?.options || config.default?.options || null;
102
+ if (!configFile) {
103
+ logger.error("[#better-auth]: Couldn't read your auth config.");
104
+ logger.break();
105
+ logger.info(
106
+ "[#better-auth]: Make sure to default export your auth instance or to export as a variable named auth."
107
+ );
108
+ process.exit(1);
109
+ }
110
+ break;
111
+ }
112
+ } catch (e) {
113
+ if (!(e instanceof Error && e.message.includes("Cannot find module"))) {
114
+ logger.error(e);
97
115
  process.exit(1);
98
116
  }
99
- break;
100
- }
101
- } catch (e) {
102
- if (!(e instanceof Error && e.message.includes("Cannot find module"))) {
103
- logger.error(e);
104
- process.exit(1);
105
117
  }
106
118
  }
107
119
  }
108
120
  return configFile;
109
121
  } catch (e) {
110
- return null;
122
+ logger.error("Error while reading your auth config.", e);
123
+ process.exit(1);
111
124
  }
112
125
  }
113
126
  var getDialect = (config) => {
@@ -520,7 +533,7 @@ var migrate = new Command("migrate").option(
520
533
  });
521
534
  if (!config) {
522
535
  logger.error(
523
- "No configuration file found. Add a `auth.ts` or `auth.config.ts` file to your project."
536
+ "No configuration file found. Add a `auth.ts` file to your project or pass the path to the configuration file using the `--config` flag."
524
537
  );
525
538
  return;
526
539
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
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\"];\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 postgres from \"postgres\";\nimport type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\nimport type { Adapter, Where } from \"../types/adapter\";\nimport { PostgresJSDialect } from \"kysely-postgres-js\";\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 (\"createDriver\" in config.database) {\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 pg = postgres(connectionString, {\n\t\t\t\tprepare: false,\n\t\t\t});\n\t\t\tdialect = new PostgresJSDialect({\n\t\t\t\tpostgres: pg,\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\torder?: number;\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\tconst { user, session, account, ...pluginTables } = pluginSchema || {};\n\n\treturn {\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...user?.fields,\n\t\t\t},\n\t\t\torder: 0,\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...session?.fields,\n\t\t\t},\n\t\t\torder: 1,\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...account?.fields,\n\t\t\t},\n\t\t\torder: 2,\n\t\t},\n\t\t...pluginTables,\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\tbaseSchema.user,\n\t\tbaseSchema.session,\n\t\tbaseSchema.account,\n\t\t...pluginSchema,\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\torder: number;\n\t}[] = [];\n\tconst toBeAdded: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t\torder: number;\n\t}[] = [];\n\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\tconst tableData = {\n\t\t\t\ttable: key,\n\t\t\t\tfields: value.fields,\n\t\t\t\torder: value.order || Infinity,\n\t\t\t};\n\n\t\t\tconst insertIndex = toBeCreated.findIndex(\n\t\t\t\t(t) => (t.order || Infinity) > tableData.order,\n\t\t\t);\n\n\t\t\tif (insertIndex === -1) {\n\t\t\t\tif (tIndex === -1) {\n\t\t\t\t\ttoBeCreated.push(tableData);\n\t\t\t\t} else {\n\t\t\t\t\ttoBeCreated[tIndex].fields = {\n\t\t\t\t\t\t...toBeCreated[tIndex].fields,\n\t\t\t\t\t\t...value.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttoBeCreated.splice(insertIndex, 0, tableData);\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\torder: value.order || Infinity,\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\tfor (const [fieldName, field] of Object.entries(table.fields)) {\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\tfor (const migration of migrations) {\n\t\t\tawait migration.execute();\n\t\t}\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 [...toBeCreated, ...toBeAdded]) {\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"]}
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\"];\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\tif (configPath.endsWith(\".tsx\")) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t\"[#better-auth]: Only .ts files are supported for custom config paths.\",\n\t\t\t\t);\n\t\t\t\tprocess.exit(1);\n\t\t\t} else {\n\t\t\t\tconst config = (await jiti(cwd).import(\n\t\t\t\t\tpath.join(cwd, configPath),\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.auth && !config.default) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t\"[#better-auth]: Couldn't read your auth config. Make sure to default export your auth instance or to export as a variable named auth.\",\n\t\t\t\t\t);\n\t\t\t\t\tprocess.exit(1);\n\t\t\t\t}\n\t\t\t\tconfigFile = config.auth?.options || config.default?.options || null;\n\t\t\t}\n\t\t}\n\n\t\tif (!configFile) {\n\t\t\tfor (const possiblePath of possiblePaths) {\n\t\t\t\ttry {\n\t\t\t\t\tconst config = (await jiti(path.join(cwd, possiblePath)).import(\n\t\t\t\t\t\tpath.join(cwd, possiblePath),\n\t\t\t\t\t\t{},\n\t\t\t\t\t)) as {\n\t\t\t\t\t\tauth?: {\n\t\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdefault?: {\n\t\t\t\t\t\t\toptions: BetterAuthOptions;\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\tif (config) {\n\t\t\t\t\t\tconfigFile =\n\t\t\t\t\t\t\tconfig.auth?.options || config.default?.options || null;\n\t\t\t\t\t\tif (!configFile) {\n\t\t\t\t\t\t\tlogger.error(\"[#better-auth]: Couldn't read your auth config.\");\n\t\t\t\t\t\t\tlogger.break();\n\t\t\t\t\t\t\tlogger.info(\n\t\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\t);\n\t\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!(e instanceof Error && e.message.includes(\"Cannot find module\"))\n\t\t\t\t\t) {\n\t\t\t\t\t\tlogger.error(e);\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn configFile;\n\t} catch (e) {\n\t\tlogger.error(\"Error while reading your auth config.\", e);\n\t\tprocess.exit(1);\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 postgres from \"postgres\";\nimport type { FieldAttribute } from \"../db\";\nimport type { BetterAuthOptions } from \"../types\";\nimport type { Adapter, Where } from \"../types/adapter\";\nimport { PostgresJSDialect } from \"kysely-postgres-js\";\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 (\"createDriver\" in config.database) {\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 pg = postgres(connectionString, {\n\t\t\t\tprepare: false,\n\t\t\t});\n\t\t\tdialect = new PostgresJSDialect({\n\t\t\t\tpostgres: pg,\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\torder?: number;\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\tconst { user, session, account, ...pluginTables } = pluginSchema || {};\n\n\treturn {\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...user?.fields,\n\t\t\t},\n\t\t\torder: 0,\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...session?.fields,\n\t\t\t},\n\t\t\torder: 1,\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...account?.fields,\n\t\t\t},\n\t\t\torder: 2,\n\t\t},\n\t\t...pluginTables,\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\tbaseSchema.user,\n\t\tbaseSchema.session,\n\t\tbaseSchema.account,\n\t\t...pluginSchema,\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\torder: number;\n\t}[] = [];\n\tconst toBeAdded: {\n\t\ttable: string;\n\t\tfields: Record<string, FieldAttribute>;\n\t\torder: number;\n\t}[] = [];\n\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\tconst tableData = {\n\t\t\t\ttable: key,\n\t\t\t\tfields: value.fields,\n\t\t\t\torder: value.order || Infinity,\n\t\t\t};\n\n\t\t\tconst insertIndex = toBeCreated.findIndex(\n\t\t\t\t(t) => (t.order || Infinity) > tableData.order,\n\t\t\t);\n\n\t\t\tif (insertIndex === -1) {\n\t\t\t\tif (tIndex === -1) {\n\t\t\t\t\ttoBeCreated.push(tableData);\n\t\t\t\t} else {\n\t\t\t\t\ttoBeCreated[tIndex].fields = {\n\t\t\t\t\t\t...toBeCreated[tIndex].fields,\n\t\t\t\t\t\t...value.fields,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttoBeCreated.splice(insertIndex, 0, tableData);\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\torder: value.order || Infinity,\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\tfor (const [fieldName, field] of Object.entries(table.fields)) {\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\tfor (const migration of migrations) {\n\t\t\tawait migration.execute();\n\t\t}\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` file to your project or pass the path to the configuration file using the `--config` flag.\",\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 [...toBeCreated, ...toBeAdded]) {\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"]}
package/dist/client.d.ts CHANGED
@@ -5,12 +5,12 @@ import * as _better_fetch_fetch from '@better-fetch/fetch';
5
5
  import { BetterFetch, BetterFetchError, BetterFetchOption } from '@better-fetch/fetch';
6
6
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
7
7
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
8
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, c as InferSessionFromClient, d as InferUserFromClient, b as IsSignal } from './types-B34P_dp5.js';
8
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, c as InferSessionFromClient, d as InferUserFromClient, b as IsSignal } from './types-j-TVPVHI.js';
9
9
  import 'kysely';
10
10
  import './index-CcxejJTH.js';
11
11
  import 'arctic';
12
12
  import 'better-call';
13
- import './index-CZZTCNT5.js';
13
+ import './index-9APve6Jz.js';
14
14
 
15
15
  type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<infer Plugin> ? Plugin extends AuthClientPlugin ? Plugin["getAtoms"] extends (fetch: any) => infer Atoms ? Atoms extends Record<string, any> ? {
16
16
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: Atoms[key];
@@ -80,14 +80,14 @@ declare const router: <C extends AuthContext, Option extends BetterAuthOptions>(
80
80
  }>>;
81
81
  body: zod.ZodObject<{
82
82
  callbackURL: zod.ZodOptional<zod.ZodString>;
83
- provider: zod.ZodEnum<["github", ...("apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter")[]]>;
83
+ provider: zod.ZodEnum<["github", ...("github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter")[]]>;
84
84
  dontRememberMe: zod.ZodOptional<zod.ZodDefault<zod.ZodBoolean>>;
85
85
  }, "strip", zod.ZodTypeAny, {
86
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
86
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
87
87
  callbackURL?: string | undefined;
88
88
  dontRememberMe?: boolean | undefined;
89
89
  }, {
90
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
90
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
91
91
  callbackURL?: string | undefined;
92
92
  dontRememberMe?: boolean | undefined;
93
93
  }>;
@@ -110,14 +110,14 @@ declare const router: <C extends AuthContext, Option extends BetterAuthOptions>(
110
110
  }>>;
111
111
  body: zod.ZodObject<{
112
112
  callbackURL: zod.ZodOptional<zod.ZodString>;
113
- provider: zod.ZodEnum<["github", ...("apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter")[]]>;
113
+ provider: zod.ZodEnum<["github", ...("github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter")[]]>;
114
114
  dontRememberMe: zod.ZodOptional<zod.ZodDefault<zod.ZodBoolean>>;
115
115
  }, "strip", zod.ZodTypeAny, {
116
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
116
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
117
117
  callbackURL?: string | undefined;
118
118
  dontRememberMe?: boolean | undefined;
119
119
  }, {
120
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
120
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
121
121
  callbackURL?: string | undefined;
122
122
  dontRememberMe?: boolean | undefined;
123
123
  }>;
@@ -979,14 +979,14 @@ declare const betterAuth: <O extends BetterAuthOptions>(options: O) => {
979
979
  }>>;
980
980
  body: zod.ZodObject<{
981
981
  callbackURL: zod.ZodOptional<zod.ZodString>;
982
- provider: zod.ZodEnum<["github", ...("apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter")[]]>;
982
+ provider: zod.ZodEnum<["github", ...("github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter")[]]>;
983
983
  dontRememberMe: zod.ZodOptional<zod.ZodDefault<zod.ZodBoolean>>;
984
984
  }, "strip", zod.ZodTypeAny, {
985
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
985
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
986
986
  callbackURL?: string | undefined;
987
987
  dontRememberMe?: boolean | undefined;
988
988
  }, {
989
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
989
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
990
990
  callbackURL?: string | undefined;
991
991
  dontRememberMe?: boolean | undefined;
992
992
  }>;
@@ -1009,14 +1009,14 @@ declare const betterAuth: <O extends BetterAuthOptions>(options: O) => {
1009
1009
  }>>;
1010
1010
  body: zod.ZodObject<{
1011
1011
  callbackURL: zod.ZodOptional<zod.ZodString>;
1012
- provider: zod.ZodEnum<["github", ...("apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter")[]]>;
1012
+ provider: zod.ZodEnum<["github", ...("github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter")[]]>;
1013
1013
  dontRememberMe: zod.ZodOptional<zod.ZodDefault<zod.ZodBoolean>>;
1014
1014
  }, "strip", zod.ZodTypeAny, {
1015
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
1015
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
1016
1016
  callbackURL?: string | undefined;
1017
1017
  dontRememberMe?: boolean | undefined;
1018
1018
  }, {
1019
- provider: "apple" | "discord" | "facebook" | "github" | "google" | "spotify" | "twitch" | "twitter";
1019
+ provider: "github" | "apple" | "discord" | "facebook" | "google" | "spotify" | "twitch" | "twitter";
1020
1020
  callbackURL?: string | undefined;
1021
1021
  dontRememberMe?: boolean | undefined;
1022
1022
  }>;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as Auth, b as betterAuth } from './index-CZZTCNT5.js';
1
+ export { A as Auth, b as betterAuth } from './index-9APve6Jz.js';
2
2
  import './internal-adapter-BB8sj8CA.js';
3
3
  import 'kysely';
4
4
  import './index-CcxejJTH.js';
package/dist/next-js.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { A as Auth } from './index-CZZTCNT5.js';
1
+ import { A as Auth } from './index-9APve6Jz.js';
2
2
  import { NextResponse } from 'next/server';
3
3
  import './internal-adapter-BB8sj8CA.js';
4
4
  import 'kysely';
package/dist/react.d.ts CHANGED
@@ -2,14 +2,14 @@ import * as _better_fetch_fetch from '@better-fetch/fetch';
2
2
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
3
3
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
4
4
  import { useStore } from '@nanostores/react';
5
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-B34P_dp5.js';
5
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-j-TVPVHI.js';
6
6
  import 'kysely';
7
7
  import './index-CcxejJTH.js';
8
8
  import 'arctic';
9
9
  import 'zod';
10
10
  import 'better-call';
11
11
  import 'nanostores';
12
- import './index-CZZTCNT5.js';
12
+ import './index-9APve6Jz.js';
13
13
 
14
14
  type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<infer Plugin> ? Plugin extends AuthClientPlugin ? Plugin["getAtoms"] extends (fetch: any) => infer Atoms ? Atoms extends Record<string, any> ? {
15
15
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => ReturnType<Atoms[key]["get"]>;
@@ -1,4 +1,4 @@
1
- import { A as Auth } from './index-CZZTCNT5.js';
1
+ import { A as Auth } from './index-9APve6Jz.js';
2
2
  import './internal-adapter-BB8sj8CA.js';
3
3
  import 'kysely';
4
4
  import './index-CcxejJTH.js';
package/dist/solid.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _better_fetch_fetch from '@better-fetch/fetch';
2
2
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
3
3
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
4
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-B34P_dp5.js';
4
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-j-TVPVHI.js';
5
5
  import { Accessor } from 'solid-js';
6
6
  import 'kysely';
7
7
  import './index-CcxejJTH.js';
@@ -9,7 +9,7 @@ import 'arctic';
9
9
  import 'zod';
10
10
  import 'better-call';
11
11
  import 'nanostores';
12
- import './index-CZZTCNT5.js';
12
+ import './index-9APve6Jz.js';
13
13
 
14
14
  type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<infer Plugin> ? Plugin extends AuthClientPlugin ? Plugin["getAtoms"] extends (fetch: any) => infer Atoms ? Atoms extends Record<string, any> ? {
15
15
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => Accessor<ReturnType<Atoms[key]["get"]>>;
@@ -1,4 +1,4 @@
1
- import { A as Auth } from './index-CZZTCNT5.js';
1
+ import { A as Auth } from './index-9APve6Jz.js';
2
2
  import { a as BetterAuthOptions } from './internal-adapter-BB8sj8CA.js';
3
3
  import './helper-D8dhRz72.js';
4
4
  import './index-CcxejJTH.js';
package/dist/svelte.d.ts CHANGED
@@ -2,13 +2,13 @@ import * as nanostores from 'nanostores';
2
2
  import * as _better_fetch_fetch from '@better-fetch/fetch';
3
3
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
4
4
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
5
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-B34P_dp5.js';
5
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-j-TVPVHI.js';
6
6
  import 'kysely';
7
7
  import './index-CcxejJTH.js';
8
8
  import 'arctic';
9
9
  import 'zod';
10
10
  import 'better-call';
11
- import './index-CZZTCNT5.js';
11
+ import './index-9APve6Jz.js';
12
12
 
13
13
  type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<infer Plugin> ? Plugin extends AuthClientPlugin ? Plugin["getAtoms"] extends (fetch: any) => infer Atoms ? Atoms extends Record<string, any> ? {
14
14
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: Atoms[key];
@@ -2,7 +2,7 @@ import { BetterFetchResponse, BetterFetchOption, BetterFetch, BetterFetchPlugin
2
2
  import { B as BetterAuthPlugin } from './internal-adapter-BB8sj8CA.js';
3
3
  import { Atom } from 'nanostores';
4
4
  import { U as UnionToIntersection, H as HasRequiredKeys, P as Prettify, L as LiteralString } from './helper-D8dhRz72.js';
5
- import { A as Auth, I as InferSession, a as InferUser } from './index-CZZTCNT5.js';
5
+ import { A as Auth, I as InferSession, a as InferUser } from './index-9APve6Jz.js';
6
6
  import { Endpoint, Context } from 'better-call';
7
7
 
8
8
  type CamelCase<S extends string> = S extends `${infer P1}-${infer P2}${infer P3}` ? `${Lowercase<P1>}${Uppercase<P2>}${CamelCase<P3>}` : Lowercase<S>;
package/dist/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { a as BetterAuthOptions } from './internal-adapter-BB8sj8CA.js';
2
- export { I as InferSession, a as InferUser } from './index-CZZTCNT5.js';
2
+ export { I as InferSession, a as InferUser } from './index-9APve6Jz.js';
3
3
  import 'kysely';
4
4
  import './index-CcxejJTH.js';
5
5
  import 'arctic';
package/dist/vue.d.ts CHANGED
@@ -2,14 +2,14 @@ import * as _better_fetch_fetch from '@better-fetch/fetch';
2
2
  import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BB8sj8CA.js';
3
3
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
4
4
  import { Ref, DeepReadonly } from 'vue';
5
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-B34P_dp5.js';
5
+ import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-j-TVPVHI.js';
6
6
  import 'kysely';
7
7
  import './index-CcxejJTH.js';
8
8
  import 'arctic';
9
9
  import 'zod';
10
10
  import 'better-call';
11
11
  import 'nanostores';
12
- import './index-CZZTCNT5.js';
12
+ import './index-9APve6Jz.js';
13
13
 
14
14
  type InferResolvedHooks<O extends ClientOptions> = O["plugins"] extends Array<infer Plugin> ? Plugin extends AuthClientPlugin ? Plugin["getAtoms"] extends (fetch: any) => infer Atoms ? Atoms extends Record<string, any> ? {
15
15
  [key in keyof Atoms as IsSignal<key> extends true ? never : key extends string ? `use${Capitalize<key>}` : never]: () => DeepReadonly<Ref<ReturnType<Atoms[key]["get"]>>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "better-auth",
3
- "version": "0.0.9-beta.26",
3
+ "version": "0.0.9-beta.28",
4
4
  "description": "Framework-agnostic, batteries included authentication library for typescript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",