better-auth 0.0.8 → 0.0.9-beta.10

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
@@ -56,7 +56,7 @@ var createLogger = (options) => {
56
56
  var logger = createLogger();
57
57
 
58
58
  // src/cli/get-config.ts
59
- var possiblePaths = ["auth.ts", "auth.config.ts"];
59
+ var possiblePaths = ["auth.ts"];
60
60
  possiblePaths = [
61
61
  ...possiblePaths,
62
62
  ...possiblePaths.map((it) => `lib/${it}`),
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\", \"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"]}
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 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-CNp7-qQI.js';
6
- export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-CNp7-qQI.js';
5
+ import { o as organization, M as Member, I as Invitation, u as username } from '../index-B_EUkkij.js';
6
+ export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-B_EUkkij.js';
7
7
  import '../helper-D8dhRz72.js';
8
8
  import '../index-CcxejJTH.js';
9
9
  import 'arctic';
10
10
  import 'zod';
11
11
  import 'better-call';
12
- import '../internal-adapter-CFONjGd0.js';
12
+ import '../internal-adapter-BchF0q5d.js';
13
13
  import 'kysely';
14
14
  import '@simplewebauthn/types';
15
15
 
package/dist/client.d.ts CHANGED
@@ -3,14 +3,14 @@ import * as nanostores from 'nanostores';
3
3
  import { PreinitializedWritableAtom } from 'nanostores';
4
4
  import * as _better_fetch_fetch from '@better-fetch/fetch';
5
5
  import { BetterFetch, BetterFetchOption, BetterFetchError } from '@better-fetch/fetch';
6
- import { B as BetterAuthOptions, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-CFONjGd0.js';
7
- import { Auth } from './index.js';
6
+ import { B as BetterAuthPlugin, F as FieldAttribute, I as InferFieldOutput } from './internal-adapter-BchF0q5d.js';
8
7
  import { U as UnionToIntersection } from './helper-D8dhRz72.js';
9
- import { C as ClientOptions, I as InferClientAPI, a as InferActions, A as AuthClientPlugin, b as IsSignal } from './types-Bz2ECI1C.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-DnNJle5Q.js';
10
9
  import 'kysely';
11
10
  import './index-CcxejJTH.js';
12
11
  import 'arctic';
13
12
  import 'better-call';
13
+ import './index-YgJPWbCN.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];
@@ -26,47 +26,13 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
26
26
  createdAt: Date;
27
27
  updatedAt: Date;
28
28
  image?: string | undefined;
29
- } & (({
30
- handler: any;
31
- api: any;
32
- options: {
33
- database: any;
34
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
35
- };
36
- } extends Auth ? Auth & {
37
- handler: any;
38
- api: any;
39
- options: {
40
- database: any;
41
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
42
- };
43
- } : never) extends infer T_1 ? T_1 extends ({
44
- handler: any;
45
- api: any;
46
- options: {
47
- database: any;
48
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
49
- };
50
- } extends Auth ? Auth & {
51
- handler: any;
52
- api: any;
53
- options: {
54
- database: any;
55
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
56
- };
57
- } : never) ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
58
- schema: {
59
- user: {
60
- fields: infer Field;
61
- };
62
- };
63
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
29
+ } & ((Option["plugins"] extends AuthClientPlugin[] ? (Option["plugins"][number] extends infer T_1 ? T_1 extends AuthClientPlugin ? T_1["$InferServerPlugin"] extends infer U ? U extends BetterAuthPlugin ? U : never : never : never : never)[] : never) extends (infer T_2)[] ? T_2 extends {
64
30
  schema: {
65
31
  user: {
66
32
  fields: infer Field;
67
33
  };
68
34
  };
69
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)> extends infer T ? { [key in keyof T]: UnionToIntersection<{
35
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {})> extends infer T ? { [key in keyof T]: UnionToIntersection<{
70
36
  id: string;
71
37
  email: string;
72
38
  emailVerified: boolean;
@@ -74,96 +40,38 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
74
40
  createdAt: Date;
75
41
  updatedAt: Date;
76
42
  image?: string | undefined;
77
- } & (({
78
- handler: any;
79
- api: any;
80
- options: {
81
- database: any;
82
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
83
- };
84
- } extends Auth ? Auth & {
85
- handler: any;
86
- api: any;
87
- options: {
88
- database: any;
89
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
90
- };
91
- } : never) extends infer T_1 ? T_1 extends ({
92
- handler: any;
93
- api: any;
94
- options: {
95
- database: any;
96
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
97
- };
98
- } extends Auth ? Auth & {
99
- handler: any;
100
- api: any;
101
- options: {
102
- database: any;
103
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
104
- };
105
- } : never) ? T_1 extends BetterAuthOptions ? T_1["plugins"] extends (infer T_2)[] ? T_2 extends {
43
+ } & ((Option["plugins"] extends AuthClientPlugin[] ? (Option["plugins"][number] extends infer T_1 ? T_1 extends AuthClientPlugin ? T_1["$InferServerPlugin"] extends infer U ? U extends BetterAuthPlugin ? U : never : never : never : never)[] : never) extends (infer T_2)[] ? T_2 extends {
106
44
  schema: {
107
45
  user: {
108
46
  fields: infer Field;
109
47
  };
110
48
  };
111
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : T_1 extends Auth ? T_1["options"]["plugins"] extends (infer T_2)[] ? T_2 extends {
112
- schema: {
113
- user: {
114
- fields: infer Field;
115
- };
116
- };
117
- } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {} : {} : never : never)>[key]; } : never;
49
+ } ? Field extends Record<infer Key extends string | number | symbol, FieldAttribute> ? { [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; } extends infer T_3 ? { [key_1 in keyof T_3]: ({ [key_2 in Key as Field[key_2]["required"] extends false ? never : Field[key_2]["defaultValue"] extends string | number | boolean | Function | Date ? key_2 : never]: InferFieldOutput<Field[key_2]>; } & { [key_3 in Key as Field[key_3]["returned"] extends false ? never : key_3]?: InferFieldOutput<Field[key_3]> | undefined; })[key_1]; } : never : {} : {} : {})>[key]; } : never;
118
50
  session: UnionToIntersection<{
119
51
  id: string;
120
52
  userId: string;
121
53
  expiresAt: Date;
122
54
  ipAddress?: string | undefined;
123
55
  userAgent?: string | undefined;
124
- } & ({
125
- database: any;
126
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
127
- } extends infer T_5 ? T_5 extends {
128
- database: any;
129
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
130
- } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
131
- schema: {
132
- session: {
133
- fields: infer Field_1;
134
- };
135
- };
136
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
56
+ } & ((Option["plugins"] extends AuthClientPlugin[] ? (Option["plugins"][number] extends infer T_1 ? T_1 extends AuthClientPlugin ? T_1["$InferServerPlugin"] extends infer U ? U extends BetterAuthPlugin ? U : never : never : never : never)[] : never) extends (infer T_5)[] ? T_5 extends {
137
57
  schema: {
138
58
  session: {
139
59
  fields: infer Field_1;
140
60
  };
141
61
  };
142
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)> extends infer T_4 ? { [key_4 in keyof T_4]: UnionToIntersection<{
62
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {})> extends infer T_4 ? { [key_4 in keyof T_4]: UnionToIntersection<{
143
63
  id: string;
144
64
  userId: string;
145
65
  expiresAt: Date;
146
66
  ipAddress?: string | undefined;
147
67
  userAgent?: string | undefined;
148
- } & ({
149
- database: any;
150
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
151
- } extends infer T_5 ? T_5 extends {
152
- database: any;
153
- plugins: Option["plugins"] extends AuthClientPlugin[] ? Option["plugins"][number]["$InferServerPlugin"][] : undefined;
154
- } ? T_5 extends BetterAuthOptions ? T_5["plugins"] extends (infer T_6)[] ? T_6 extends {
155
- schema: {
156
- session: {
157
- fields: infer Field_1;
158
- };
159
- };
160
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : T_5 extends Auth ? T_5["options"]["plugins"] extends (infer T_6)[] ? T_6 extends {
68
+ } & ((Option["plugins"] extends AuthClientPlugin[] ? (Option["plugins"][number] extends infer T_1 ? T_1 extends AuthClientPlugin ? T_1["$InferServerPlugin"] extends infer U ? U extends BetterAuthPlugin ? U : never : never : never : never)[] : never) extends (infer T_5)[] ? T_5 extends {
161
69
  schema: {
162
70
  session: {
163
71
  fields: infer Field_1;
164
72
  };
165
73
  };
166
- } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {} : {} : never : never)>[key_4]; } : never;
74
+ } ? Field_1 extends Record<string, FieldAttribute> ? { [key_5 in keyof Field_1]: InferFieldOutput<Field_1[key_5]>; } : {} : {} : {})>[key_4]; } : never;
167
75
  } | null;
168
76
  error: null | _better_fetch_fetch.BetterFetchError;
169
77
  isPending: boolean;
@@ -179,7 +87,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
179
87
  id: string;
180
88
  name: string;
181
89
  hooks: {
182
- onRequest<T_7 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_7>): _better_fetch_fetch.RequestContext<T_7>;
90
+ onRequest<T_6 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_6>): _better_fetch_fetch.RequestContext<T_6>;
183
91
  };
184
92
  } | {
185
93
  id: string;
@@ -202,7 +110,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
202
110
  referrerPolicy?: ReferrerPolicy | undefined;
203
111
  signal?: (AbortSignal | null) | undefined;
204
112
  window?: null | undefined;
205
- onRequest?: (<T_7 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_7>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void) | undefined;
113
+ onRequest?: (<T_6 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_6>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void) | undefined;
206
114
  onResponse?: ((context: _better_fetch_fetch.ResponseContext) => Promise<Response | void | _better_fetch_fetch.ResponseContext> | Response | _better_fetch_fetch.ResponseContext | void) | undefined;
207
115
  onSuccess?: ((context: _better_fetch_fetch.SuccessContext) => Promise<void> | void) | undefined;
208
116
  onError?: ((context: _better_fetch_fetch.ErrorContext) => Promise<void> | void) | undefined;
@@ -231,7 +139,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
231
139
  query?: any;
232
140
  params?: any;
233
141
  duplex?: ("full" | "half") | undefined;
234
- jsonParser?: (<T_7>(text: string) => Promise<T_7 | undefined>) | undefined;
142
+ jsonParser?: (<T_6>(text: string) => Promise<T_6 | undefined>) | undefined;
235
143
  retry?: (number | {
236
144
  type: "linear";
237
145
  attempts: number;
@@ -268,7 +176,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
268
176
  referrerPolicy?: ReferrerPolicy | undefined;
269
177
  signal?: (AbortSignal | null) | undefined;
270
178
  window?: null | undefined;
271
- onRequest?: (<T_7 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_7>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void) | undefined;
179
+ onRequest?: (<T_6 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_6>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void) | undefined;
272
180
  onResponse?: ((context: _better_fetch_fetch.ResponseContext) => Promise<Response | void | _better_fetch_fetch.ResponseContext> | Response | _better_fetch_fetch.ResponseContext | void) | undefined;
273
181
  onSuccess?: ((context: _better_fetch_fetch.SuccessContext) => Promise<void> | void) | undefined;
274
182
  onError?: ((context: _better_fetch_fetch.ErrorContext) => Promise<void> | void) | undefined;
@@ -297,7 +205,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
297
205
  query?: any;
298
206
  params?: any;
299
207
  duplex?: ("full" | "half") | undefined;
300
- jsonParser?: (<T_7>(text: string) => Promise<T_7 | undefined>) | undefined;
208
+ jsonParser?: (<T_6>(text: string) => Promise<T_6 | undefined>) | undefined;
301
209
  retry?: (number | {
302
210
  type: "linear";
303
211
  attempts: number;
@@ -334,7 +242,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
334
242
  referrerPolicy?: ReferrerPolicy;
335
243
  signal?: AbortSignal | null;
336
244
  window?: null;
337
- onRequest?: <T_7 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_7>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void;
245
+ onRequest?: <T_6 extends Record<string, any>>(context: _better_fetch_fetch.RequestContext<T_6>) => Promise<_better_fetch_fetch.RequestContext | void> | _better_fetch_fetch.RequestContext | void;
338
246
  onResponse?: (context: _better_fetch_fetch.ResponseContext) => Promise<Response | void | _better_fetch_fetch.ResponseContext> | Response | _better_fetch_fetch.ResponseContext | void;
339
247
  onSuccess?: (context: _better_fetch_fetch.SuccessContext) => Promise<void> | void;
340
248
  onError?: (context: _better_fetch_fetch.ErrorContext) => Promise<void> | void;
@@ -362,7 +270,7 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
362
270
  query?: any;
363
271
  params?: any;
364
272
  duplex?: "full" | "half";
365
- jsonParser?: <T_7>(text: string) => Promise<T_7 | undefined>;
273
+ jsonParser?: <T_6>(text: string) => Promise<T_6 | undefined>;
366
274
  retry?: number | {
367
275
  type: "linear";
368
276
  attempts: number;
@@ -380,6 +288,10 @@ declare function createAuthClient<Option extends ClientOptions>(options?: Option
380
288
  errorSchema?: zod.ZodType;
381
289
  disableValidation?: boolean;
382
290
  }, unknown, unknown, {}>;
291
+ $infer: {
292
+ session: InferSessionFromClient<Option>;
293
+ user: InferUserFromClient<Option>;
294
+ };
383
295
  };
384
296
 
385
297
  declare const useAuthQuery: <T>(initializedAtom: PreinitializedWritableAtom<any> | PreinitializedWritableAtom<any>[], path: string, $fetch: BetterFetch, options?: (() => BetterFetchOption) | BetterFetchOption) => PreinitializedWritableAtom<{
package/dist/client.js CHANGED
@@ -124,13 +124,14 @@ var getClientConfig = (options) => {
124
124
  let pluginsActions = {};
125
125
  let pluginsAtoms = {};
126
126
  let pluginPathMethods = {
127
- "/sign-out": "POST"
127
+ "/sign-out": "POST",
128
+ "/user/revoke-sessions": "POST"
128
129
  };
129
130
  const atomListeners = [
130
131
  {
131
132
  signal: "_sessionSignal",
132
133
  matcher(path) {
133
- return path === "/sign-out" || path === "sign-up/email";
134
+ return path === "/sign-out" || path === "sign-up/email" || path === "/user/update";
134
135
  }
135
136
  }
136
137
  ];
@@ -218,7 +219,10 @@ function createDynamicPathProxy(routes, client, knownPathMethods, atoms, atomLis
218
219
  if (!matches) return;
219
220
  const signal = atoms[matches.signal];
220
221
  if (!signal) return;
221
- signal.set(!signal.get());
222
+ const val = signal.get();
223
+ setTimeout(() => {
224
+ signal.set(!val);
225
+ }, 0);
222
226
  }
223
227
  });
224
228
  }
@@ -283,7 +287,11 @@ function getSessionAtom(client) {
283
287
  const session = useAuthQuery($signal, "/session", client, {
284
288
  method: "GET"
285
289
  });
286
- return { $session: session, _sessionSignal: $signal };
290
+ return {
291
+ $session: session,
292
+ _sessionSignal: $signal,
293
+ $infer: {}
294
+ };
287
295
  }
288
296
 
289
297
  // src/client/vanilla.ts