better-auth 0.0.9-beta.18 → 0.0.9-beta.2

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
@@ -8,10 +8,9 @@ import { z } from 'zod';
8
8
  import { existsSync } from 'fs';
9
9
  import path2 from 'path';
10
10
  import Database from 'better-sqlite3';
11
- import { Kysely, MysqlDialect, SqliteDialect, PostgresDialect } from 'kysely';
11
+ import { Kysely, MysqlDialect, PostgresDialect, SqliteDialect } from 'kysely';
12
12
  import { createPool } from 'mysql2';
13
- import postgres from 'postgres';
14
- import { PostgresJSDialect } from 'kysely-postgres-js';
13
+ import pg from 'pg';
15
14
  import ora from 'ora';
16
15
  import chalk from 'chalk';
17
16
  import prompts from 'prompts';
@@ -110,11 +109,12 @@ async function getConfig({
110
109
  return null;
111
110
  }
112
111
  }
112
+ var { Pool } = pg;
113
113
  var getDialect = (config) => {
114
114
  if (!config.database) {
115
115
  return null;
116
116
  }
117
- if ("createDriver" in config.database) {
117
+ if (config.database instanceof MysqlDialect || config.database instanceof PostgresDialect || config.database instanceof SqliteDialect) {
118
118
  return config.database;
119
119
  }
120
120
  let dialect = null;
@@ -122,11 +122,11 @@ var getDialect = (config) => {
122
122
  const provider = config.database.provider;
123
123
  const connectionString = config.database?.url?.trim();
124
124
  if (provider === "postgres") {
125
- const pg = postgres(connectionString, {
126
- prepare: false
125
+ const pool = new Pool({
126
+ connectionString
127
127
  });
128
- dialect = new PostgresJSDialect({
129
- postgres: pg
128
+ dialect = new PostgresDialect({
129
+ pool
130
130
  });
131
131
  }
132
132
  if (provider === "mysql") {
@@ -196,8 +196,8 @@ var getAuthTables = (options) => {
196
196
  },
197
197
  {}
198
198
  );
199
- const { user, session, account, ...pluginTables } = pluginSchema || {};
200
199
  return {
200
+ ...pluginSchema,
201
201
  user: {
202
202
  tableName: options.user?.modelName || "user",
203
203
  fields: {
@@ -223,9 +223,8 @@ var getAuthTables = (options) => {
223
223
  type: "date",
224
224
  defaultValue: () => /* @__PURE__ */ new Date()
225
225
  },
226
- ...user?.fields
227
- },
228
- order: 0
226
+ ...pluginSchema?.user?.fields
227
+ }
229
228
  },
230
229
  session: {
231
230
  tableName: options.session?.modelName || "session",
@@ -249,9 +248,8 @@ var getAuthTables = (options) => {
249
248
  onDelete: "cascade"
250
249
  }
251
250
  },
252
- ...session?.fields
253
- },
254
- order: 1
251
+ ...pluginSchema?.session?.fields
252
+ }
255
253
  },
256
254
  account: {
257
255
  tableName: options.account?.modelName || "account",
@@ -294,11 +292,9 @@ var getAuthTables = (options) => {
294
292
  type: "string",
295
293
  required: false
296
294
  },
297
- ...account?.fields
298
- },
299
- order: 2
300
- },
301
- ...pluginTables
295
+ ...pluginSchema?.account?.fields
296
+ }
297
+ }
302
298
  };
303
299
  };
304
300
 
@@ -323,10 +319,10 @@ function getSchema(config) {
323
319
  const baseSchema = getAuthTables(config);
324
320
  const pluginSchema = getPluginTable(config);
325
321
  const schema = [
322
+ ...pluginSchema,
326
323
  baseSchema.user,
327
324
  baseSchema.session,
328
- baseSchema.account,
329
- ...pluginSchema
325
+ baseSchema.account
330
326
  ].reduce((acc, curr) => {
331
327
  acc[curr.tableName] = {
332
328
  fields: {
@@ -401,25 +397,16 @@ async function getMigrations(config) {
401
397
  const table = tableMetadata.find((t) => t.name === key);
402
398
  if (!table) {
403
399
  const tIndex = toBeCreated.findIndex((t) => t.table === key);
404
- const tableData = {
405
- table: key,
406
- fields: value.fields,
407
- order: value.order || Infinity
408
- };
409
- const insertIndex = toBeCreated.findIndex(
410
- (t) => (t.order || Infinity) > tableData.order
411
- );
412
- if (insertIndex === -1) {
413
- if (tIndex === -1) {
414
- toBeCreated.push(tableData);
415
- } else {
416
- toBeCreated[tIndex].fields = {
417
- ...toBeCreated[tIndex].fields,
418
- ...value.fields
419
- };
420
- }
400
+ if (tIndex === -1) {
401
+ toBeCreated.push({
402
+ table: key,
403
+ fields: value.fields
404
+ });
421
405
  } else {
422
- toBeCreated.splice(insertIndex, 0, tableData);
406
+ toBeCreated[tIndex].fields = {
407
+ ...toBeCreated[tIndex].fields,
408
+ ...value.fields
409
+ };
423
410
  }
424
411
  continue;
425
412
  }
@@ -441,8 +428,7 @@ async function getMigrations(config) {
441
428
  if (Object.keys(toBeAddedFields).length > 0) {
442
429
  toBeAdded.push({
443
430
  table: key,
444
- fields: toBeAddedFields,
445
- order: value.order || Infinity
431
+ fields: toBeAddedFields
446
432
  });
447
433
  }
448
434
  }
@@ -455,7 +441,9 @@ async function getMigrations(config) {
455
441
  const migrations = [];
456
442
  if (toBeAdded.length) {
457
443
  for (const table of toBeAdded) {
444
+ logger.info(`Adding fields to table ${table.table}`);
458
445
  for (const [fieldName, field] of Object.entries(table.fields)) {
446
+ logger.info(`Adding field ${fieldName} with type ${field.type}`);
459
447
  const type = typeMap[field.type];
460
448
  const exec = db.schema.alterTable(table.table).addColumn(fieldName, type, (col) => {
461
449
  col = field.required !== false ? col.notNull() : col;
@@ -489,9 +477,7 @@ async function getMigrations(config) {
489
477
  }
490
478
  }
491
479
  async function runMigrations() {
492
- for (const migration of migrations) {
493
- await migration.execute();
494
- }
480
+ return await Promise.all(migrations.map((m) => m.execute()));
495
481
  }
496
482
  return { toBeCreated, toBeAdded, runMigrations };
497
483
  }
@@ -538,7 +524,7 @@ var migrate = new Command("migrate").option(
538
524
  }
539
525
  spinner.stop();
540
526
  logger.info(`\u{1F511} The migration will affect the following:`);
541
- for (const table of [...toBeCreated, ...toBeAdded]) {
527
+ for (const table of [...toBeAdded, ...toBeCreated]) {
542
528
  logger.info(
543
529
  "->",
544
530
  chalk.magenta(Object.keys(table.fields).join(", ")),
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\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-BcDEzS86.js';
6
- export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-BcDEzS86.js';
5
+ import { o as organization, M as Member, I as Invitation, u as username } from '../index-9uJ53v8-.js';
6
+ export { g as getPasskeyActions, c as passkeyClient, a as twoFactorClient } from '../index-9uJ53v8-.js';
7
7
  import '../helper-D8dhRz72.js';
8
- import 'zod';
9
8
  import '../index-CcxejJTH.js';
10
9
  import 'arctic';
10
+ import 'zod';
11
11
  import 'better-call';
12
- import '../internal-adapter-BB8sj8CA.js';
12
+ import '../internal-adapter-C7JihxUL.js';
13
13
  import 'kysely';
14
14
  import '@simplewebauthn/types';
15
15
 
@@ -74,14 +74,7 @@ declare const organizationClient: <O extends OrganizationClientOptions>(options?
74
74
  id: string;
75
75
  name: string;
76
76
  slug: string;
77
- members: (Member & {
78
- user: {
79
- id: string;
80
- name: string;
81
- email: string;
82
- image: string;
83
- };
84
- })[];
77
+ members: Member[];
85
78
  invitations: Invitation[];
86
79
  } | null;
87
80
  error: null | _better_fetch_fetch.BetterFetchError;
@@ -148,7 +148,7 @@ var useAuthQuery = (initializedAtom, path, $fetch, options) => {
148
148
  let firstRun = true;
149
149
  for (const initAtom of initializedAtom) {
150
150
  initAtom.subscribe((value2) => {
151
- if (value2 !== void 0 && !firstRun) {
151
+ if (value2 && !firstRun) {
152
152
  fn();
153
153
  }
154
154
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":";;;;;;;AAEO,IAAM,YAAA,GAAN,cAA2B,KAAM,CAAA;AAAA,EACvB,IAAA,CAAA;AAAA,EAChB,WAAA,CAAY,SAAiB,IAAc,EAAA;AAC1C,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GACb;AACD,CAAA,CAAA;AAIO,IAAM,gBAAN,MAAiE;AAAA,EAEvE,YAA6B,CAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AAAA,GACnB;AAAA,EAHiB,UAAA,CAAA;AAAA,EAIV,QACN,UACC,EAAA;AACD,IAAO,OAAA,IAAI,KAA6B,UAAU,CAAA,CAAA;AAAA,GACnD;AACD,CAAA,CAAA;AAMO,IAAM,IAAA,GAAN,MAAM,KAAqC,CAAA;AAAA,EACjC,UAAA,CAAA;AAAA,EAEhB,YAAY,UAAyB,EAAA;AACpC,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,GACnB;AAAA,EAEO,SAAA,CACN,SACA,SACqB,EAAA;AACrB,IAAA,KAAA,MAAW,CAAC,iBAAA,EAAmB,gBAAgB,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,MAC1D,OAAA;AAAA,KACE,EAAA;AACF,MAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,UAAA,CAAW,iBAAiB,CAAA,CAAA;AACxD,MAAA,IAAI,CAAC,cAAgB,EAAA;AACpB,QAAO,OAAA;AAAA,UACN,OAAS,EAAA,KAAA;AAAA,UACT,KAAA,EAAO,2CAA2C,iBAAiB,CAAA,CAAA;AAAA,SACpE,CAAA;AAAA,OACD;AACA,MAAM,MAAA,OAAA,GACL,SAAc,KAAA,IAAA,GACV,gBAA8B,CAAA,IAAA;AAAA,QAAK,CAAC,eAAA,KACrC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,UAEtC,gBAA8B,CAAA,KAAA;AAAA,QAAM,CAAC,eAAA,KACtC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,OACxC,CAAA;AACH,MAAA,IAAI,OAAS,EAAA;AACZ,QAAA,OAAO,EAAE,OAAQ,EAAA,CAAA;AAAA,OAClB;AACA,MAAO,OAAA;AAAA,QACN,OAAS,EAAA,KAAA;AAAA,QACT,KAAA,EAAO,oCAAoC,iBAAiB,CAAA,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACD;AACA,IAAO,OAAA;AAAA,MACN,OAAS,EAAA,KAAA;AAAA,MACT,KAAO,EAAA,gBAAA;AAAA,KACR,CAAA;AAAA,GACD;AAAA,EAEA,OAAO,WAA2C,CAAW,EAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAE/B,IAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AACnC,MAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,GAAG,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,KAAA,MAAW,CAAC,QAAU,EAAA,OAAO,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AAC7D,MAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AACjC,QAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,QAAQ,CAAA,CAAA;AAAA,OAC/D;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,OAAO,CAAG,EAAA;AAC5B,QAAM,MAAA,IAAI,YAAa,CAAA,yBAAA,EAA2B,QAAQ,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,IAAI,OAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAU,EAAA;AACnC,UAAA,MAAM,IAAI,YAAa,CAAA,wBAAA,EAA0B,GAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SACrE;AAAA,OACD;AAAA,KACD;AACA,IAAO,OAAA,IAAI,MAAkB,UAAU,CAAA,CAAA;AAAA,GACxC;AAAA,EAEO,QAAmB,GAAA;AACzB,IAAO,OAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,GACtC;AACD,CAAA,CAAA;;;AC7FO,IAAM,mBAAA,GAAsB,CAClC,UACI,KAAA;AACJ,EAAO,OAAA,IAAI,cAAiB,UAAU,CAAA,CAAA;AACvC,CAAA,CAAA;AAEO,IAAM,iBAAoB,GAAA;AAAA,EAChC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAA,CAAA;AAEO,IAAM,SAAA,GAAY,oBAAoB,iBAAiB,CAAA,CAAA;AAEvC,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,EACvB,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC/B,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AACtC,CAAC,EAAA;AAEsB,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAC,EAAA;AAEuB,UAAU,OAAQ,CAAA;AAAA,EACzC,cAAc,EAAC;AAAA,EACf,QAAQ,EAAC;AAAA,EACT,YAAY,EAAC;AACd,CAAC,EAAA;AC1BM,IAAM,YAAe,GAAA,CAC3B,eAGA,EAAA,IAAA,EACA,QACA,OACI,KAAA;AACJ,EAAA,MAAM,QAAQ,IAIX,CAAA;AAAA,IACF,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,SAAW,EAAA,KAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,KAAK,MAAM;AAChB,IAAA,MAAM,IAAO,GAAA,OAAO,OAAY,KAAA,UAAA,GAAa,SAAY,GAAA,OAAA,CAAA;AACzD,IAAA,OAAO,OAAU,IAAM,EAAA;AAAA,MACtB,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,OAAO,OAAY,KAAA;AAC7B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,KAAO,EAAA,IAAA;AAAA,UACP,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,MACA,MAAM,QAAQ,OAAS,EAAA;AACtB,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,IAAM,EAAA,IAAA;AAAA,UACN,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,UAAU,OAAO,CAAA,CAAA;AAAA,OAC9B;AAAA,MACA,MAAM,UAAU,OAAS,EAAA;AACxB,QAAM,MAAA,YAAA,GAAe,MAAM,GAAI,EAAA,CAAA;AAC/B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,UACX,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,OAAO,YAAa,CAAA,KAAA;AAAA,SACpB,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,KACA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAG,EAAA,EAAA,CAAA;AACH,EAAA,eAAA,GAAkB,MAAM,OAAQ,CAAA,eAAe,CAC5C,GAAA,eAAA,GACA,CAAC,eAAe,CAAA,CAAA;AACnB,EAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,EAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACvC,IAAS,QAAA,CAAA,SAAA,CAAU,CAACA,MAAU,KAAA;AAC7B,MAAIA,IAAAA,MAAAA,KAAU,KAAa,CAAA,IAAA,CAAC,QAAU,EAAA;AACrC,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AACA,EAAW,QAAA,GAAA,KAAA,CAAA;AACX,EAAO,OAAA,KAAA,CAAA;AACR,CAAA,CAAA;;;AClDa,IAAA,kBAAA,GAAqB,CACjC,OACI,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcC,KAAoB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,QAAA,GAAWA,KAAc,KAAK,CAAA,CAAA;AACpC,EAAM,MAAA,gBAAA,GAAmBA,KAAc,KAAK,CAAA,CAAA;AAC5C,EAAM,MAAA,cAAA,GAAiBA,KAAoB,IAAI,CAAA,CAAA;AAQ/C,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,cAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAA,EAAY,CAAC,MAAY,MAAA;AAAA,MACxB,YAAc,EAAA;AAAA,QACb,UAAU,KAAsB,EAAA;AAC/B,UAAA,WAAA,CAAY,IAAI,KAAK,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,eAAA,EAAiB,CAAC,EAAsB,KAAA;AACvC,UAAA,cAAA,CAAe,IAAI,EAAE,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,OAAO,IAMhB,KAAA;AACL,UAAO,OAAA,MAAM,OAAgB,8BAAgC,EAAA;AAAA,YAC5D,MAAQ,EAAA,MAAA;AAAA,YACR,IAAM,EAAA;AAAA,cACL,YAAY,IAAK,CAAA,UAAA;AAAA,aAClB;AAAA,YACA,GAAG,IAAK,CAAA,OAAA;AAAA,WACR,CAAA,CAAA;AAAA,SACF;AAAA,OACD;AAAA,KACD,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,MAAW,KAAA;AACrB,MAAA,MAAM,UAAa,GAAA,YAAA,CASjB,cAAgB,EAAA,qCAAA,EAAuC,QAAQ,OAAO;AAAA,QACvE,MAAQ,EAAA,KAAA;AAAA,QACR,KAAO,EAAA;AAAA,UACN,EAAA,EAAI,eAAe,GAAI,EAAA;AAAA,SACxB;AAAA,OACC,CAAA,CAAA,CAAA;AAEF,MAAA,MAAM,iBAAoB,GAAA,YAAA;AAAA,QACzB,QAAA;AAAA,QACA,oBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,UACC,MAAQ,EAAA,KAAA;AAAA,SACT;AAAA,OACD,CAAA;AAEA,MAAA,MAAM,kBAAqB,GAAA,YAAA;AAAA,QAe1B,CAAC,aAAa,gBAAgB,CAAA;AAAA,QAC9B,wBAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO;AAAA,UACN,MAAQ,EAAA,MAAA;AAAA,UACR,WAAa,EAAA,SAAA;AAAA,UACb,IAAM,EAAA;AAAA,YACL,KAAA,EAAO,YAAY,GAAI,EAAA;AAAA,WACxB;AAAA,SACD,CAAA;AAAA,OACD,CAAA;AAEA,MAAO,OAAA;AAAA,QACN,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,iBAAA;AAAA,QACA,UAAA;AAAA,OACD,CAAA;AAAA,KACD;AAAA,IACA,aAAe,EAAA;AAAA,MACd;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UACC,OAAA,IAAA,KAAS,0BAA0B,IAAS,KAAA,sBAAA,CAAA;AAAA,SAE9C;AAAA,QACA,MAAQ,EAAA,UAAA;AAAA,OACT;AAAA,MACA;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UAAO,OAAA,IAAA,CAAK,WAAW,eAAe,CAAA,CAAA;AAAA,SACvC;AAAA,QACA,MAAQ,EAAA,kBAAA;AAAA,OACT;AAAA,KACD;AAAA,GACD,CAAA;AACD,EAAA;;;ACzIO,IAAM,iBAAiB,MAAM;AACnC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,GACtB,CAAA;AACD,EAAA;ACOa,IAAA,iBAAA,GAAoB,CAAC,MAAwB,KAAA;AACzD,EAAM,MAAA,aAAA,GAAgB,OAAO,IAIvB,KAAA;AACL,IAAA,MAAM,WAAW,MAAM,MAAA;AAAA,MACtB,wCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA;AAAA,UACL,OAAO,IAAM,EAAA,KAAA;AAAA,SACd;AAAA,OACD;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,MAAO,OAAA,QAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,MAAM,MAAM,mBAAA;AAAA,QACjB,QAAS,CAAA,IAAA;AAAA,QACT,MAAM,QAAY,IAAA,KAAA;AAAA,OACnB,CAAA;AACA,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAGpB,gCAAkC,EAAA;AAAA,QACpC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,cAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA;AAEA,EAAA,MAAM,kBAAkB,YAAY;AACnC,IAAA,MAAM,UAAU,MAAM,MAAA;AAAA,MACrB,oCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,KAAA;AAAA,OACT;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,QAAQ,IAAM,EAAA;AAClB,MAAO,OAAA,OAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,GAAM,GAAA,MAAM,iBAAkB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAChD,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAEpB,8BAAgC,EAAA;AAAA,QAClC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,UAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,IAAI,aAAa,aAAe,EAAA;AAC/B,QAAI,IAAA,CAAA,CAAE,SAAS,2CAA6C,EAAA;AAC3D,UAAO,OAAA;AAAA,YACN,IAAM,EAAA,IAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACN,OAAS,EAAA,uBAAA;AAAA,cACT,MAAQ,EAAA,GAAA;AAAA,cACR,UAAY,EAAA,aAAA;AAAA,aACb;AAAA,WACD,CAAA;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACA,EAAO,OAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACP,OAAS,EAAA,aAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACR,QAAU,EAAA,eAAA;AAAA,KACX;AAAA,GACD,CAAA;AACD,EAAA;AAEO,IAAM,gBAAgB,MAAM;AAClC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,SAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAY,EAAA,CAAC,MAAW,KAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAChD,WAAa,EAAA;AAAA,MACZ,mBAAqB,EAAA,MAAA;AAAA,MACrB,uBAAyB,EAAA,MAAA;AAAA,KAC1B;AAAA,GACD,CAAA;AACD,EAAA;;;AC9Ga,IAAA,eAAA,GAAkB,CAC9B,OAQI,GAAA;AAAA,EACH,QAAU,EAAA,IAAA;AAAA,EACV,aAAe,EAAA,GAAA;AAChB,CACI,KAAA;AACJ,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,YAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,aAAe,EAAA;AAAA,MACd;AAAA,QACC,SAAS,CAAC,IAAA,KACT,SAAS,oBACT,IAAA,IAAA,KAAS,0BACT,IAAS,KAAA,qBAAA;AAAA,QACV,MAAQ,EAAA,gBAAA;AAAA,OACT;AAAA,KACD;AAAA,IACA,WAAa,EAAA;AAAA,MACZ,aAAe,EAAA,MAAA;AAAA,MACf,qBAAuB,EAAA,MAAA;AAAA,MACvB,oBAAsB,EAAA,MAAA;AAAA,MACtB,sBAAwB,EAAA,MAAA;AAAA,KACzB;AAAA,IACA,YAAc,EAAA;AAAA,MACb;AAAA,QACC,EAAI,EAAA,YAAA;AAAA,QACJ,IAAM,EAAA,YAAA;AAAA,QACN,KAAO,EAAA;AAAA,UACN,MAAM,UAAU,OAAS,EAAA;AACxB,YAAI,IAAA,OAAA,CAAQ,MAAM,iBAAmB,EAAA;AACpC,cAAI,IAAA,OAAA,CAAQ,QAAY,IAAA,OAAA,CAAQ,aAAe,EAAA;AAC9C,gBAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,kBAAO,MAAA,CAAA,QAAA,CAAS,OAAO,OAAQ,CAAA,aAAA,CAAA;AAAA,iBAChC;AAAA,eACD;AAAA,aACD;AAAA,WACD;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACD","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value !== undefined && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null>(null);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null>(null);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: (Member & {\n\t\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\t\tid: string;\n\t\t\t\t\t\t\t\tname: string;\n\t\t\t\t\t\t\t\temail: string;\n\t\t\t\t\t\t\t\timage: string;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t})[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}
1
+ {"version":3,"sources":["../../src/plugins/organization/access/src/access.ts","../../src/plugins/organization/access/statement.ts","../../src/client/query.ts","../../src/plugins/organization/client.ts","../../src/plugins/username/client.ts","../../src/plugins/passkey/client.ts","../../src/plugins/two-factor/client.ts"],"names":["value","atom"],"mappings":";;;;;;;AAEO,IAAM,YAAA,GAAN,cAA2B,KAAM,CAAA;AAAA,EACvB,IAAA,CAAA;AAAA,EAChB,WAAA,CAAY,SAAiB,IAAc,EAAA;AAC1C,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AAAA,GACb;AACD,CAAA,CAAA;AAIO,IAAM,gBAAN,MAAiE;AAAA,EAEvE,YAA6B,CAAgB,EAAA;AAAhB,IAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA;AAC5B,IAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AAAA,GACnB;AAAA,EAHiB,UAAA,CAAA;AAAA,EAIV,QACN,UACC,EAAA;AACD,IAAO,OAAA,IAAI,KAA6B,UAAU,CAAA,CAAA;AAAA,GACnD;AACD,CAAA,CAAA;AAMO,IAAM,IAAA,GAAN,MAAM,KAAqC,CAAA;AAAA,EACjC,UAAA,CAAA;AAAA,EAEhB,YAAY,UAAyB,EAAA;AACpC,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAAA,GACnB;AAAA,EAEO,SAAA,CACN,SACA,SACqB,EAAA;AACrB,IAAA,KAAA,MAAW,CAAC,iBAAA,EAAmB,gBAAgB,CAAA,IAAK,MAAO,CAAA,OAAA;AAAA,MAC1D,OAAA;AAAA,KACE,EAAA;AACF,MAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,UAAA,CAAW,iBAAiB,CAAA,CAAA;AACxD,MAAA,IAAI,CAAC,cAAgB,EAAA;AACpB,QAAO,OAAA;AAAA,UACN,OAAS,EAAA,KAAA;AAAA,UACT,KAAA,EAAO,2CAA2C,iBAAiB,CAAA,CAAA;AAAA,SACpE,CAAA;AAAA,OACD;AACA,MAAM,MAAA,OAAA,GACL,SAAc,KAAA,IAAA,GACV,gBAA8B,CAAA,IAAA;AAAA,QAAK,CAAC,eAAA,KACrC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,UAEtC,gBAA8B,CAAA,KAAA;AAAA,QAAM,CAAC,eAAA,KACtC,cAAe,CAAA,QAAA,CAAS,eAAe,CAAA;AAAA,OACxC,CAAA;AACH,MAAA,IAAI,OAAS,EAAA;AACZ,QAAA,OAAO,EAAE,OAAQ,EAAA,CAAA;AAAA,OAClB;AACA,MAAO,OAAA;AAAA,QACN,OAAS,EAAA,KAAA;AAAA,QACT,KAAA,EAAO,oCAAoC,iBAAiB,CAAA,CAAA,CAAA;AAAA,OAC7D,CAAA;AAAA,KACD;AACA,IAAO,OAAA;AAAA,MACN,OAAS,EAAA,KAAA;AAAA,MACT,KAAO,EAAA,gBAAA;AAAA,KACR,CAAA;AAAA,GACD;AAAA,EAEA,OAAO,WAA2C,CAAW,EAAA;AAC5D,IAAM,MAAA,UAAA,GAAa,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAE/B,IAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AACnC,MAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,GAAG,CAAA,CAAA;AAAA,KAC1D;AACA,IAAA,KAAA,MAAW,CAAC,QAAU,EAAA,OAAO,KAAK,MAAO,CAAA,OAAA,CAAQ,UAAU,CAAG,EAAA;AAC7D,MAAI,IAAA,OAAO,aAAa,QAAU,EAAA;AACjC,QAAM,MAAA,IAAI,YAAa,CAAA,6BAAA,EAA+B,QAAQ,CAAA,CAAA;AAAA,OAC/D;AACA,MAAA,IAAI,CAAC,KAAA,CAAM,OAAQ,CAAA,OAAO,CAAG,EAAA;AAC5B,QAAM,MAAA,IAAI,YAAa,CAAA,yBAAA,EAA2B,QAAQ,CAAA,CAAA;AAAA,OAC3D;AACA,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,OAAA,CAAQ,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,IAAI,OAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAU,EAAA;AACnC,UAAA,MAAM,IAAI,YAAa,CAAA,wBAAA,EAA0B,GAAG,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA;AAAA,SACrE;AAAA,OACD;AAAA,KACD;AACA,IAAO,OAAA,IAAI,MAAkB,UAAU,CAAA,CAAA;AAAA,GACxC;AAAA,EAEO,QAAmB,GAAA;AACzB,IAAO,OAAA,IAAA,CAAK,SAAU,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,GACtC;AACD,CAAA,CAAA;;;AC7FO,IAAM,mBAAA,GAAsB,CAClC,UACI,KAAA;AACJ,EAAO,OAAA,IAAI,cAAiB,UAAU,CAAA,CAAA;AACvC,CAAA,CAAA;AAEO,IAAM,iBAAoB,GAAA;AAAA,EAChC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAA,CAAA;AAEO,IAAM,SAAA,GAAY,oBAAoB,iBAAiB,CAAA,CAAA;AAEvC,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAQ,CAAA;AAAA,EACvB,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EAC/B,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AACtC,CAAC,EAAA;AAEsB,UAAU,OAAQ,CAAA;AAAA,EACxC,YAAA,EAAc,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACjC,MAAQ,EAAA,CAAC,QAAU,EAAA,QAAA,EAAU,QAAQ,CAAA;AAAA,EACrC,UAAA,EAAY,CAAC,QAAA,EAAU,QAAQ,CAAA;AAChC,CAAC,EAAA;AAEuB,UAAU,OAAQ,CAAA;AAAA,EACzC,cAAc,EAAC;AAAA,EACf,QAAQ,EAAC;AAAA,EACT,YAAY,EAAC;AACd,CAAC,EAAA;AC1BM,IAAM,YAAe,GAAA,CAC3B,eAGA,EAAA,IAAA,EACA,QACA,OACI,KAAA;AACJ,EAAA,MAAM,QAAQ,IAIX,CAAA;AAAA,IACF,IAAM,EAAA,IAAA;AAAA,IACN,KAAO,EAAA,IAAA;AAAA,IACP,SAAW,EAAA,KAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAA,MAAM,KAAK,MAAM;AAChB,IAAA,MAAM,IAAO,GAAA,OAAO,OAAY,KAAA,UAAA,GAAa,SAAY,GAAA,OAAA,CAAA;AACzD,IAAA,OAAO,OAAU,IAAM,EAAA;AAAA,MACtB,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,OAAO,OAAY,KAAA;AAC7B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,MAAM,OAAQ,CAAA,IAAA;AAAA,UACd,KAAO,EAAA,IAAA;AAAA,UACP,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,MACA,MAAM,QAAQ,OAAS,EAAA;AACtB,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,OAAO,OAAQ,CAAA,KAAA;AAAA,UACf,IAAM,EAAA,IAAA;AAAA,UACN,SAAW,EAAA,KAAA;AAAA,SACX,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,UAAU,OAAO,CAAA,CAAA;AAAA,OAC9B;AAAA,MACA,MAAM,UAAU,OAAS,EAAA;AACxB,QAAM,MAAA,YAAA,GAAe,MAAM,GAAI,EAAA,CAAA;AAC/B,QAAA,KAAA,CAAM,GAAI,CAAA;AAAA,UACT,SAAW,EAAA,IAAA;AAAA,UACX,MAAM,YAAa,CAAA,IAAA;AAAA,UACnB,OAAO,YAAa,CAAA,KAAA;AAAA,SACpB,CAAA,CAAA;AACD,QAAM,MAAA,IAAA,EAAM,YAAY,OAAO,CAAA,CAAA;AAAA,OAChC;AAAA,KACA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAG,EAAA,EAAA,CAAA;AACH,EAAA,eAAA,GAAkB,MAAM,OAAQ,CAAA,eAAe,CAC5C,GAAA,eAAA,GACA,CAAC,eAAe,CAAA,CAAA;AACnB,EAAA,IAAI,QAAW,GAAA,IAAA,CAAA;AACf,EAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACvC,IAAS,QAAA,CAAA,SAAA,CAAU,CAACA,MAAU,KAAA;AAC7B,MAAIA,IAAAA,MAAAA,IAAS,CAAC,QAAU,EAAA;AACvB,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ;AAAA,KACA,CAAA,CAAA;AAAA,GACF;AACA,EAAW,QAAA,GAAA,KAAA,CAAA;AACX,EAAO,OAAA,KAAA,CAAA;AACR,CAAA,CAAA;;;AClDa,IAAA,kBAAA,GAAqB,CACjC,OACI,KAAA;AACJ,EAAM,MAAA,WAAA,GAAcC,KAAoB,IAAI,CAAA,CAAA;AAC5C,EAAM,MAAA,QAAA,GAAWA,KAAc,KAAK,CAAA,CAAA;AACpC,EAAM,MAAA,gBAAA,GAAmBA,KAAc,KAAK,CAAA,CAAA;AAC5C,EAAM,MAAA,cAAA,GAAiBA,KAAoB,IAAI,CAAA,CAAA;AAQ/C,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,cAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAA,EAAY,CAAC,MAAY,MAAA;AAAA,MACxB,YAAc,EAAA;AAAA,QACb,UAAU,KAAsB,EAAA;AAC/B,UAAA,WAAA,CAAY,IAAI,KAAK,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,eAAA,EAAiB,CAAC,EAAsB,KAAA;AACvC,UAAA,cAAA,CAAe,IAAI,EAAE,CAAA,CAAA;AAAA,SACtB;AAAA,QACA,aAAA,EAAe,OAAO,IAMhB,KAAA;AACL,UAAO,OAAA,MAAM,OAAgB,8BAAgC,EAAA;AAAA,YAC5D,MAAQ,EAAA,MAAA;AAAA,YACR,IAAM,EAAA;AAAA,cACL,YAAY,IAAK,CAAA,UAAA;AAAA,aAClB;AAAA,YACA,GAAG,IAAK,CAAA,OAAA;AAAA,WACR,CAAA,CAAA;AAAA,SACF;AAAA,OACD;AAAA,KACD,CAAA;AAAA,IACA,QAAA,EAAU,CAAC,MAAW,KAAA;AACrB,MAAA,MAAM,UAAa,GAAA,YAAA,CASjB,cAAgB,EAAA,qCAAA,EAAuC,QAAQ,OAAO;AAAA,QACvE,MAAQ,EAAA,KAAA;AAAA,QACR,KAAO,EAAA;AAAA,UACN,EAAA,EAAI,eAAe,GAAI,EAAA;AAAA,SACxB;AAAA,OACC,CAAA,CAAA,CAAA;AAEF,MAAA,MAAM,iBAAoB,GAAA,YAAA;AAAA,QACzB,QAAA;AAAA,QACA,oBAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,UACC,MAAQ,EAAA,KAAA;AAAA,SACT;AAAA,OACD,CAAA;AAEA,MAAA,MAAM,kBAAqB,GAAA,YAAA;AAAA,QAQ1B,CAAC,aAAa,gBAAgB,CAAA;AAAA,QAC9B,wBAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAO;AAAA,UACN,MAAQ,EAAA,MAAA;AAAA,UACR,WAAa,EAAA,SAAA;AAAA,UACb,IAAM,EAAA;AAAA,YACL,KAAA,EAAO,YAAY,GAAI,EAAA;AAAA,WACxB;AAAA,SACD,CAAA;AAAA,OACD,CAAA;AAEA,MAAO,OAAA;AAAA,QACN,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,iBAAA;AAAA,QACA,UAAA;AAAA,OACD,CAAA;AAAA,KACD;AAAA,IACA,aAAe,EAAA;AAAA,MACd;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UACC,OAAA,IAAA,KAAS,0BAA0B,IAAS,KAAA,sBAAA,CAAA;AAAA,SAE9C;AAAA,QACA,MAAQ,EAAA,UAAA;AAAA,OACT;AAAA,MACA;AAAA,QACC,QAAQ,IAAM,EAAA;AACb,UAAO,OAAA,IAAA,CAAK,WAAW,eAAe,CAAA,CAAA;AAAA,SACvC;AAAA,QACA,MAAQ,EAAA,kBAAA;AAAA,OACT;AAAA,KACD;AAAA,GACD,CAAA;AACD,EAAA;;;AClIO,IAAM,iBAAiB,MAAM;AACnC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,UAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,GACtB,CAAA;AACD,EAAA;ACOa,IAAA,iBAAA,GAAoB,CAAC,MAAwB,KAAA;AACzD,EAAM,MAAA,aAAA,GAAgB,OAAO,IAIvB,KAAA;AACL,IAAA,MAAM,WAAW,MAAM,MAAA;AAAA,MACtB,wCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,MAAA;AAAA,QACR,IAAM,EAAA;AAAA,UACL,OAAO,IAAM,EAAA,KAAA;AAAA,SACd;AAAA,OACD;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,MAAO,OAAA,QAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,MAAM,MAAM,mBAAA;AAAA,QACjB,QAAS,CAAA,IAAA;AAAA,QACT,MAAM,QAAY,IAAA,KAAA;AAAA,OACnB,CAAA;AACA,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAGpB,gCAAkC,EAAA;AAAA,QACpC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,cAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA;AAAA,KACd;AAAA,GACD,CAAA;AAEA,EAAA,MAAM,kBAAkB,YAAY;AACnC,IAAA,MAAM,UAAU,MAAM,MAAA;AAAA,MACrB,oCAAA;AAAA,MACA;AAAA,QACC,MAAQ,EAAA,KAAA;AAAA,OACT;AAAA,KACD,CAAA;AACA,IAAI,IAAA,CAAC,QAAQ,IAAM,EAAA;AAClB,MAAO,OAAA,OAAA,CAAA;AAAA,KACR;AACA,IAAI,IAAA;AACH,MAAA,MAAM,GAAM,GAAA,MAAM,iBAAkB,CAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAChD,MAAM,MAAA,QAAA,GAAW,MAAM,MAAA,CAEpB,8BAAgC,EAAA;AAAA,QAClC,IAAM,EAAA;AAAA,UACL,QAAU,EAAA,GAAA;AAAA,UACV,IAAM,EAAA,UAAA;AAAA,SACP;AAAA,OACA,CAAA,CAAA;AACD,MAAI,IAAA,CAAC,SAAS,IAAM,EAAA;AACnB,QAAO,OAAA,QAAA,CAAA;AAAA,OACR;AAAA,aACQ,CAAG,EAAA;AACX,MAAA,IAAI,aAAa,aAAe,EAAA;AAC/B,QAAI,IAAA,CAAA,CAAE,SAAS,2CAA6C,EAAA;AAC3D,UAAO,OAAA;AAAA,YACN,IAAM,EAAA,IAAA;AAAA,YACN,KAAO,EAAA;AAAA,cACN,OAAS,EAAA,uBAAA;AAAA,cACT,MAAQ,EAAA,GAAA;AAAA,cACR,UAAY,EAAA,aAAA;AAAA,aACb;AAAA,WACD,CAAA;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACA,EAAO,OAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACP,OAAS,EAAA,aAAA;AAAA,KACV;AAAA,IACA,OAAS,EAAA;AAAA,MACR,QAAU,EAAA,eAAA;AAAA,KACX;AAAA,GACD,CAAA;AACD,EAAA;AAEO,IAAM,gBAAgB,MAAM;AAClC,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,SAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,UAAY,EAAA,CAAC,MAAW,KAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAChD,WAAa,EAAA;AAAA,MACZ,mBAAqB,EAAA,MAAA;AAAA,MACrB,uBAAyB,EAAA,MAAA;AAAA,KAC1B;AAAA,GACD,CAAA;AACD,EAAA;;;AC9Ga,IAAA,eAAA,GAAkB,CAC9B,OAQI,GAAA;AAAA,EACH,QAAU,EAAA,IAAA;AAAA,EACV,aAAe,EAAA,GAAA;AAChB,CACI,KAAA;AACJ,EAAO,OAAA;AAAA,IACN,EAAI,EAAA,YAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IACrB,aAAe,EAAA;AAAA,MACd;AAAA,QACC,SAAS,CAAC,IAAA,KACT,SAAS,oBACT,IAAA,IAAA,KAAS,0BACT,IAAS,KAAA,qBAAA;AAAA,QACV,MAAQ,EAAA,gBAAA;AAAA,OACT;AAAA,KACD;AAAA,IACA,WAAa,EAAA;AAAA,MACZ,aAAe,EAAA,MAAA;AAAA,MACf,qBAAuB,EAAA,MAAA;AAAA,MACvB,oBAAsB,EAAA,MAAA;AAAA,MACtB,sBAAwB,EAAA,MAAA;AAAA,KACzB;AAAA,IACA,YAAc,EAAA;AAAA,MACb;AAAA,QACC,EAAI,EAAA,YAAA;AAAA,QACJ,IAAM,EAAA,YAAA;AAAA,QACN,KAAO,EAAA;AAAA,UACN,MAAM,UAAU,OAAS,EAAA;AACxB,YAAI,IAAA,OAAA,CAAQ,MAAM,iBAAmB,EAAA;AACpC,cAAI,IAAA,OAAA,CAAQ,QAAY,IAAA,OAAA,CAAQ,aAAe,EAAA;AAC9C,gBAAI,IAAA,OAAO,WAAW,WAAa,EAAA;AAClC,kBAAO,MAAA,CAAA,QAAA,CAAS,OAAO,OAAQ,CAAA,aAAA,CAAA;AAAA,iBAChC;AAAA,eACD;AAAA,aACD;AAAA,WACD;AAAA,SACD;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AACD","file":"plugins.js","sourcesContent":["import type { StatementsPrimitive as Statements, Subset } from \"./types\";\n\nexport class ParsingError extends Error {\n\tpublic readonly path: string;\n\tconstructor(message: string, path: string) {\n\t\tsuper(message);\n\t\tthis.path = path;\n\t}\n}\n\ntype Connector = \"OR\" | \"AND\";\n\nexport class AccessControl<TStatements extends Statements = Statements> {\n\tprivate readonly statements: TStatements;\n\tconstructor(private readonly s: TStatements) {\n\t\tthis.statements = s;\n\t}\n\tpublic newRole<K extends keyof TStatements>(\n\t\tstatements: Subset<K, TStatements>,\n\t) {\n\t\treturn new Role<Subset<K, TStatements>>(statements);\n\t}\n}\n\nexport type AuthortizeResponse =\n\t| { success: false; error: string }\n\t| { success: true; error?: never };\n\nexport class Role<TStatements extends Statements> {\n\tpublic readonly statements: TStatements;\n\n\tconstructor(statements: TStatements) {\n\t\tthis.statements = statements;\n\t}\n\n\tpublic authorize<K extends keyof TStatements>(\n\t\trequest: Subset<K, TStatements>,\n\t\tconnector?: Connector,\n\t): AuthortizeResponse {\n\t\tfor (const [requestedResource, requestedActions] of Object.entries(\n\t\t\trequest,\n\t\t)) {\n\t\t\tconst allowedActions = this.statements[requestedResource];\n\t\t\tif (!allowedActions) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `You are not allowed to access resource: ${requestedResource}`,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst success =\n\t\t\t\tconnector === \"OR\"\n\t\t\t\t\t? (requestedActions as string[]).some((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t)\n\t\t\t\t\t: (requestedActions as string[]).every((requestedAction) =>\n\t\t\t\t\t\t\tallowedActions.includes(requestedAction),\n\t\t\t\t\t\t);\n\t\t\tif (success) {\n\t\t\t\treturn { success };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: `unauthorized to access resource \"${requestedResource}\"`,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: \"Not authorized\",\n\t\t};\n\t}\n\n\tstatic fromString<TStatements extends Statements>(s: string) {\n\t\tconst statements = JSON.parse(s) as TStatements;\n\n\t\tif (typeof statements !== \"object\") {\n\t\t\tthrow new ParsingError(\"statements is not an object\", \".\");\n\t\t}\n\t\tfor (const [resource, actions] of Object.entries(statements)) {\n\t\t\tif (typeof resource !== \"string\") {\n\t\t\t\tthrow new ParsingError(\"invalid resource identifier\", resource);\n\t\t\t}\n\t\t\tif (!Array.isArray(actions)) {\n\t\t\t\tthrow new ParsingError(\"actions is not an array\", resource);\n\t\t\t}\n\t\t\tfor (let i = 0; i < actions.length; i++) {\n\t\t\t\tif (typeof actions[i] !== \"string\") {\n\t\t\t\t\tthrow new ParsingError(\"action is not a string\", `${resource}[${i}]`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn new Role<TStatements>(statements);\n\t}\n\n\tpublic toString(): string {\n\t\treturn JSON.stringify(this.statements);\n\t}\n}\n","import { AccessControl } from \"./src/access\";\nimport type { StatementsPrimitive } from \"./src/types\";\n\nexport const createAccessControl = <S extends StatementsPrimitive>(\n\tstatements: S,\n) => {\n\treturn new AccessControl<S>(statements);\n};\n\nexport const defaultStatements = {\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n} as const;\n\nexport const defaultAc = createAccessControl(defaultStatements);\n\nexport const adminAc = defaultAc.newRole({\n\torganization: [\"update\"],\n\tinvitation: [\"create\", \"cancel\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n});\n\nexport const ownerAc = defaultAc.newRole({\n\torganization: [\"update\", \"delete\"],\n\tmember: [\"create\", \"update\", \"delete\"],\n\tinvitation: [\"create\", \"cancel\"],\n});\n\nexport const memberAc = defaultAc.newRole({\n\torganization: [],\n\tmember: [],\n\tinvitation: [],\n});\n\nexport const defaultRoles = {\n\tadmin: adminAc,\n\towner: ownerAc,\n\tmember: memberAc,\n};\n","import {\n\tBetterFetchError,\n\ttype BetterFetch,\n\ttype BetterFetchOption,\n} from \"@better-fetch/fetch\";\nimport { atom, type PreinitializedWritableAtom } from \"nanostores\";\n\nexport const useAuthQuery = <T>(\n\tinitializedAtom:\n\t\t| PreinitializedWritableAtom<any>\n\t\t| PreinitializedWritableAtom<any>[],\n\tpath: string,\n\t$fetch: BetterFetch,\n\toptions?: (() => BetterFetchOption) | BetterFetchOption,\n) => {\n\tconst value = atom<{\n\t\tdata: null | T;\n\t\terror: null | BetterFetchError;\n\t\tisPending: boolean;\n\t}>({\n\t\tdata: null,\n\t\terror: null,\n\t\tisPending: false,\n\t});\n\n\tconst fn = () => {\n\t\tconst opts = typeof options === \"function\" ? options() : options;\n\t\treturn $fetch<T>(path, {\n\t\t\t...opts,\n\t\t\tonSuccess: async (context) => {\n\t\t\t\tvalue.set({\n\t\t\t\t\tdata: context.data,\n\t\t\t\t\terror: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onSuccess?.(context);\n\t\t\t},\n\t\t\tasync onError(context) {\n\t\t\t\tvalue.set({\n\t\t\t\t\terror: context.error,\n\t\t\t\t\tdata: null,\n\t\t\t\t\tisPending: false,\n\t\t\t\t});\n\t\t\t\tawait opts?.onError?.(context);\n\t\t\t},\n\t\t\tasync onRequest(context) {\n\t\t\t\tconst currentValue = value.get();\n\t\t\t\tvalue.set({\n\t\t\t\t\tisPending: true,\n\t\t\t\t\tdata: currentValue.data,\n\t\t\t\t\terror: currentValue.error,\n\t\t\t\t});\n\t\t\t\tawait opts?.onRequest?.(context);\n\t\t\t},\n\t\t});\n\t};\n\tfn();\n\tinitializedAtom = Array.isArray(initializedAtom)\n\t\t? initializedAtom\n\t\t: [initializedAtom];\n\tlet firstRun = true;\n\tfor (const initAtom of initializedAtom) {\n\t\tinitAtom.subscribe((value) => {\n\t\t\tif (value && !firstRun) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t});\n\t}\n\tfirstRun = false;\n\treturn value;\n};\n","import { atom } from \"nanostores\";\nimport type {\n\tInvitation,\n\tMember,\n\tOrganization,\n} from \"../../plugins/organization/schema\";\nimport type { Prettify } from \"../../types/helper\";\nimport { defaultStatements, type AccessControl, type Role } from \"./access\";\nimport type { AuthClientPlugin } from \"../../client/types\";\nimport type { organization } from \"./organization\";\nimport type { BetterFetchOption } from \"@better-fetch/fetch\";\nimport { useAuthQuery } from \"../../client\";\n\ninterface OrganizationClientOptions {\n\tac: AccessControl;\n\troles?: {\n\t\t[key in \"admin\" | \"member\" | \"owner\"]?: Role<any>;\n\t};\n}\n\nexport const organizationClient = <O extends OrganizationClientOptions>(\n\toptions?: O,\n) => {\n\tconst activeOrgId = atom<string | null>(null);\n\tconst _listOrg = atom<boolean>(false);\n\tconst _activeOrgSignal = atom<boolean>(false);\n\tconst _activeISignal = atom<string | null>(null);\n\n\ttype DefaultStatements = typeof defaultStatements;\n\ttype Statements = O[\"ac\"] extends AccessControl<infer S>\n\t\t? S extends Record<string, Array<any>>\n\t\t\t? S & DefaultStatements\n\t\t\t: DefaultStatements\n\t\t: DefaultStatements;\n\treturn {\n\t\tid: \"organization\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof organization>,\n\t\tgetActions: ($fetch) => ({\n\t\t\torganization: {\n\t\t\t\tsetActive(orgId: string | null) {\n\t\t\t\t\tactiveOrgId.set(orgId);\n\t\t\t\t},\n\t\t\t\tsetInvitationId: (id: string | null) => {\n\t\t\t\t\t_activeISignal.set(id);\n\t\t\t\t},\n\t\t\t\thasPermission: async (data: {\n\t\t\t\t\tpermission: Partial<{\n\t\t\t\t\t\t//@ts-expect-error fix this later\n\t\t\t\t\t\t[key in keyof Statements]: Statements[key][number][];\n\t\t\t\t\t}>;\n\t\t\t\t\toptions?: BetterFetchOption;\n\t\t\t\t}) => {\n\t\t\t\t\treturn await $fetch<boolean>(\"/organization/has-permission\", {\n\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\tbody: {\n\t\t\t\t\t\t\tpermission: data.permission,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...data.options,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t}),\n\t\tgetAtoms: ($fetch) => {\n\t\t\tconst invitation = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tInvitation & {\n\t\t\t\t\t\torganizationName: string;\n\t\t\t\t\t\torganizationSlug: string;\n\t\t\t\t\t\tinviterEmail: string;\n\t\t\t\t\t\tinviterName: string;\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(_activeISignal, \"/organization/get-active-invitation\", $fetch, () => ({\n\t\t\t\tmethod: \"GET\",\n\t\t\t\tquery: {\n\t\t\t\t\tid: _activeISignal.get(),\n\t\t\t\t},\n\t\t\t}));\n\n\t\t\tconst listOrganizations = useAuthQuery<Organization[]>(\n\t\t\t\t_listOrg,\n\t\t\t\t\"/organization/list\",\n\t\t\t\t$fetch,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tconst activeOrganization = useAuthQuery<\n\t\t\t\tPrettify<\n\t\t\t\t\tOrganization & {\n\t\t\t\t\t\tmembers: Member[];\n\t\t\t\t\t\tinvitations: Invitation[];\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t>(\n\t\t\t\t[activeOrgId, _activeOrgSignal],\n\t\t\t\t\"/organization/activate\",\n\t\t\t\t$fetch,\n\t\t\t\t() => ({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tcredentials: \"include\",\n\t\t\t\t\tbody: {\n\t\t\t\t\t\torgId: activeOrgId.get(),\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t_listOrg,\n\t\t\t\t_activeOrgSignal,\n\t\t\t\tactiveOrganization,\n\t\t\t\tlistOrganizations,\n\t\t\t\tinvitation,\n\t\t\t};\n\t\t},\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tpath === \"/organization/create\" || path === \"/organization/delete\"\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tsignal: \"_listOrg\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tmatcher(path) {\n\t\t\t\t\treturn path.startsWith(\"/organization\");\n\t\t\t\t},\n\t\t\t\tsignal: \"_activeOrgSignal\",\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n","import type { username } from \".\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const usernameClient = () => {\n\treturn {\n\t\tid: \"username\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof username>,\n\t} satisfies AuthClientPlugin;\n};\n","import type { BetterFetch } from \"@better-fetch/fetch\";\nimport {\n\tWebAuthnError,\n\tstartAuthentication,\n\tstartRegistration,\n} from \"@simplewebauthn/browser\";\nimport type {\n\tPublicKeyCredentialCreationOptionsJSON,\n\tPublicKeyCredentialRequestOptionsJSON,\n} from \"@simplewebauthn/types\";\nimport type { Session } from \"inspector\";\nimport type { User } from \"../../adapters/schema\";\nimport type { passkey as passkeyPl, Passkey } from \"../../plugins\";\nimport type { AuthClientPlugin } from \"../../client/types\";\n\nexport const getPasskeyActions = ($fetch: BetterFetch) => {\n\tconst signInPasskey = async (opts?: {\n\t\tautoFill?: boolean;\n\t\temail?: string;\n\t\tcallbackURL?: string;\n\t}) => {\n\t\tconst response = await $fetch<PublicKeyCredentialRequestOptionsJSON>(\n\t\t\t\"/passkey/generate-authenticate-options\",\n\t\t\t{\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tbody: {\n\t\t\t\t\temail: opts?.email,\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t\tif (!response.data) {\n\t\t\treturn response;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startAuthentication(\n\t\t\t\tresponse.data,\n\t\t\t\topts?.autoFill || false,\n\t\t\t);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tsession: Session;\n\t\t\t\tuser: User;\n\t\t\t}>(\"/passkey/verify-authentication\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"authenticate\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.log(e);\n\t\t}\n\t};\n\n\tconst registerPasskey = async () => {\n\t\tconst options = await $fetch<PublicKeyCredentialCreationOptionsJSON>(\n\t\t\t\"/passkey/generate-register-options\",\n\t\t\t{\n\t\t\t\tmethod: \"GET\",\n\t\t\t},\n\t\t);\n\t\tif (!options.data) {\n\t\t\treturn options;\n\t\t}\n\t\ttry {\n\t\t\tconst res = await startRegistration(options.data);\n\t\t\tconst verified = await $fetch<{\n\t\t\t\tpasskey: Passkey;\n\t\t\t}>(\"/passkey/verify-registration\", {\n\t\t\t\tbody: {\n\t\t\t\t\tresponse: res,\n\t\t\t\t\ttype: \"register\",\n\t\t\t\t},\n\t\t\t});\n\t\t\tif (!verified.data) {\n\t\t\t\treturn verified;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tif (e instanceof WebAuthnError) {\n\t\t\t\tif (e.code === \"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED\") {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: \"previously registered\",\n\t\t\t\t\t\t\tstatus: 400,\n\t\t\t\t\t\t\tstatusText: \"BAD_REQUEST\",\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\treturn {\n\t\tsignIn: {\n\t\t\tpasskey: signInPasskey,\n\t\t},\n\t\tpasskey: {\n\t\t\tregister: registerPasskey,\n\t\t},\n\t};\n};\n\nexport const passkeyClient = () => {\n\treturn {\n\t\tid: \"passkey\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof passkeyPl>,\n\t\tgetActions: ($fetch) => getPasskeyActions($fetch),\n\t\tpathMethods: {\n\t\t\t\"/passkey/register\": \"POST\",\n\t\t\t\"/passkey/authenticate\": \"POST\",\n\t\t},\n\t} satisfies AuthClientPlugin;\n};\n","import type { AuthClientPlugin } from \"../../client/types\";\nimport type { twoFactor as twoFa } from \"../../plugins/two-factor\";\n\nexport const twoFactorClient = (\n\toptions: {\n\t\ttwoFactorPage: string;\n\t\t/**\n\t\t * Redirect to the two factor page. If twoFactorPage\n\t\t * is not set this will redirect to the root path.\n\t\t * @default true\n\t\t */\n\t\tredirect?: boolean;\n\t} = {\n\t\tredirect: true,\n\t\ttwoFactorPage: \"/\",\n\t},\n) => {\n\treturn {\n\t\tid: \"two-factor\",\n\t\t$InferServerPlugin: {} as ReturnType<typeof twoFa>,\n\t\tatomListeners: [\n\t\t\t{\n\t\t\t\tmatcher: (path) =>\n\t\t\t\t\tpath === \"/two-factor/enable\" ||\n\t\t\t\t\tpath === \"/two-factor/send-otp\" ||\n\t\t\t\t\tpath === \"/two-factor/disable\",\n\t\t\t\tsignal: \"_sessionSignal\",\n\t\t\t},\n\t\t],\n\t\tpathMethods: {\n\t\t\t\"enable/totp\": \"POST\",\n\t\t\t\"/two-factor/disable\": \"POST\",\n\t\t\t\"/two-factor/enable\": \"POST\",\n\t\t\t\"/two-factor/send-otp\": \"POST\",\n\t\t},\n\t\tfetchPlugins: [\n\t\t\t{\n\t\t\t\tid: \"two-factor\",\n\t\t\t\tname: \"two-factor\",\n\t\t\t\thooks: {\n\t\t\t\t\tasync onSuccess(context) {\n\t\t\t\t\t\tif (context.data?.twoFactorRedirect) {\n\t\t\t\t\t\t\tif (options.redirect || options.twoFactorPage) {\n\t\t\t\t\t\t\t\tif (typeof window !== \"undefined\") {\n\t\t\t\t\t\t\t\t\twindow.location.href = options.twoFactorPage;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t} satisfies AuthClientPlugin;\n};\n"]}