{"version":3,"file":"helpers.mjs","names":["defu"],"sources":["../../src/context/helpers.ts"],"sourcesContent":["import type {\n\tAuthContext,\n\tAwaitableFunction,\n\tBetterAuthOptions,\n\tBetterAuthPlugin,\n} from \"@better-auth/core\";\nimport { env } from \"@better-auth/core/env\";\nimport { defu } from \"defu\";\nimport { createInternalAdapter } from \"../db\";\nimport { isPromise } from \"../utils/is-promise\";\nimport { getBaseURL, isDynamicBaseURLConfig } from \"../utils/url\";\n\nexport async function runPluginInit(context: AuthContext) {\n\tlet options = context.options;\n\tconst plugins = options.plugins || [];\n\tconst pluginTrustedOrigins: NonNullable<\n\t\tBetterAuthOptions[\"trustedOrigins\"]\n\t>[] = [];\n\tconst dbHooks: {\n\t\tsource: string;\n\t\thooks: Exclude<BetterAuthOptions[\"databaseHooks\"], undefined>;\n\t}[] = [];\n\tfor (const plugin of plugins) {\n\t\tif (plugin.init) {\n\t\t\tconst initPromise = plugin.init(context);\n\t\t\tlet result: ReturnType<Required<BetterAuthPlugin>[\"init\"]>;\n\t\t\tif (isPromise(initPromise)) {\n\t\t\t\tresult = await initPromise;\n\t\t\t} else {\n\t\t\t\tresult = initPromise;\n\t\t\t}\n\t\t\tif (typeof result === \"object\") {\n\t\t\t\tif (result.options) {\n\t\t\t\t\tconst { databaseHooks, trustedOrigins, ...restOpts } = result.options;\n\t\t\t\t\tif (databaseHooks) {\n\t\t\t\t\t\tdbHooks.push({\n\t\t\t\t\t\t\tsource: `plugin:${plugin.id}`,\n\t\t\t\t\t\t\thooks: databaseHooks,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (trustedOrigins) {\n\t\t\t\t\t\tpluginTrustedOrigins.push(trustedOrigins);\n\t\t\t\t\t}\n\t\t\t\t\toptions = defu(options, restOpts);\n\t\t\t\t}\n\t\t\t\tif (result.context) {\n\t\t\t\t\t// Use Object.assign to keep the reference to the original context\n\t\t\t\t\tObject.assign(context, result.context);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tif (pluginTrustedOrigins.length > 0) {\n\t\tconst allSources = [\n\t\t\t...(options.trustedOrigins ? [options.trustedOrigins] : []),\n\t\t\t...pluginTrustedOrigins,\n\t\t];\n\t\tconst staticOrigins = allSources.filter(Array.isArray).flat();\n\t\tconst dynamicOrigins = allSources.filter(\n\t\t\t(s): s is Exclude<typeof s, string[]> => typeof s === \"function\",\n\t\t);\n\t\tif (dynamicOrigins.length > 0) {\n\t\t\toptions.trustedOrigins = async (request) => {\n\t\t\t\tconst resolved = await Promise.all(\n\t\t\t\t\tdynamicOrigins.map((fn) => fn(request)),\n\t\t\t\t);\n\t\t\t\treturn [...staticOrigins, ...resolved.flat()].filter(\n\t\t\t\t\t(v): v is string => typeof v === \"string\" && v !== \"\",\n\t\t\t\t);\n\t\t\t};\n\t\t} else {\n\t\t\toptions.trustedOrigins = staticOrigins;\n\t\t}\n\t}\n\n\t// Add the global database hooks last\n\tif (options.databaseHooks) {\n\t\tdbHooks.push({ source: \"user\", hooks: options.databaseHooks });\n\t}\n\n\tcontext.internalAdapter = createInternalAdapter(context.adapter, {\n\t\toptions,\n\t\tlogger: context.logger,\n\t\thooks: dbHooks,\n\t\tgenerateId: context.generateId,\n\t});\n\tcontext.options = options;\n}\n\nexport function getInternalPlugins(options: BetterAuthOptions) {\n\tconst plugins: BetterAuthPlugin[] = [];\n\tif (options.advanced?.crossSubDomainCookies?.enabled) {\n\t\t// TODO: add internal plugin\n\t}\n\treturn plugins;\n}\n\nexport async function getTrustedOrigins(\n\toptions: BetterAuthOptions,\n\trequest?: Request,\n): Promise<string[]> {\n\tconst trustedOrigins: (string | undefined | null)[] = [];\n\n\tif (isDynamicBaseURLConfig(options.baseURL)) {\n\t\tconst allowedHosts = options.baseURL.allowedHosts;\n\t\tfor (const host of allowedHosts) {\n\t\t\tif (!host.includes(\"://\")) {\n\t\t\t\ttrustedOrigins.push(`https://${host}`);\n\t\t\t\tif (host.includes(\"localhost\") || host.includes(\"127.0.0.1\")) {\n\t\t\t\t\ttrustedOrigins.push(`http://${host}`);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttrustedOrigins.push(host);\n\t\t\t}\n\t\t}\n\n\t\tif (options.baseURL.fallback) {\n\t\t\ttry {\n\t\t\t\ttrustedOrigins.push(new URL(options.baseURL.fallback).origin);\n\t\t\t} catch {}\n\t\t}\n\t} else {\n\t\tconst baseURL = getBaseURL(\n\t\t\ttypeof options.baseURL === \"string\" ? options.baseURL : undefined,\n\t\t\toptions.basePath,\n\t\t\trequest,\n\t\t);\n\t\tif (baseURL) {\n\t\t\ttrustedOrigins.push(new URL(baseURL).origin);\n\t\t}\n\t}\n\n\tif (options.trustedOrigins) {\n\t\tif (Array.isArray(options.trustedOrigins)) {\n\t\t\ttrustedOrigins.push(...options.trustedOrigins);\n\t\t}\n\t\tif (typeof options.trustedOrigins === \"function\") {\n\t\t\tconst validOrigins = await options.trustedOrigins(request);\n\t\t\ttrustedOrigins.push(...validOrigins);\n\t\t}\n\t}\n\tconst envTrustedOrigins = env.BETTER_AUTH_TRUSTED_ORIGINS;\n\tif (envTrustedOrigins) {\n\t\ttrustedOrigins.push(...envTrustedOrigins.split(\",\"));\n\t}\n\treturn trustedOrigins.filter((v): v is string => Boolean(v));\n}\n\nexport async function getAwaitableValue<T extends Record<string, any>>(\n\tarr: AwaitableFunction<T>[] | undefined,\n\titem: { field?: string; value: string },\n): Promise<T | undefined> {\n\tif (!arr) return undefined;\n\tfor (const val of arr) {\n\t\tconst value = typeof val === \"function\" ? await val() : val;\n\t\tif (value[item.field ?? \"id\"] === item.value) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function getTrustedProviders(\n\toptions: BetterAuthOptions,\n\trequest?: Request,\n): Promise<string[]> {\n\tconst trustedProviders = options.account?.accountLinking?.trustedProviders;\n\tif (!trustedProviders) {\n\t\treturn [];\n\t}\n\tif (Array.isArray(trustedProviders)) {\n\t\treturn trustedProviders.filter((v): v is string => Boolean(v));\n\t}\n\tconst resolved = await trustedProviders(request);\n\treturn (resolved ?? []).filter((v): v is string => Boolean(v));\n}\n"],"mappings":";;;;;;;;AAYA,eAAsB,cAAc,SAAsB;CACzD,IAAI,UAAU,QAAQ;CACtB,MAAM,UAAU,QAAQ,WAAW,EAAE;CACrC,MAAM,uBAEA,EAAE;CACR,MAAM,UAGA,EAAE;AACR,MAAK,MAAM,UAAU,QACpB,KAAI,OAAO,MAAM;EAChB,MAAM,cAAc,OAAO,KAAK,QAAQ;EACxC,IAAI;AACJ,MAAI,UAAU,YAAY,CACzB,UAAS,MAAM;MAEf,UAAS;AAEV,MAAI,OAAO,WAAW,UAAU;AAC/B,OAAI,OAAO,SAAS;IACnB,MAAM,EAAE,eAAe,gBAAgB,GAAG,aAAa,OAAO;AAC9D,QAAI,cACH,SAAQ,KAAK;KACZ,QAAQ,UAAU,OAAO;KACzB,OAAO;KACP,CAAC;AAEH,QAAI,eACH,sBAAqB,KAAK,eAAe;AAE1C,cAAUA,OAAK,SAAS,SAAS;;AAElC,OAAI,OAAO,QAEV,QAAO,OAAO,SAAS,OAAO,QAAQ;;;AAK1C,KAAI,qBAAqB,SAAS,GAAG;EACpC,MAAM,aAAa,CAClB,GAAI,QAAQ,iBAAiB,CAAC,QAAQ,eAAe,GAAG,EAAE,EAC1D,GAAG,qBACH;EACD,MAAM,gBAAgB,WAAW,OAAO,MAAM,QAAQ,CAAC,MAAM;EAC7D,MAAM,iBAAiB,WAAW,QAChC,MAAwC,OAAO,MAAM,WACtD;AACD,MAAI,eAAe,SAAS,EAC3B,SAAQ,iBAAiB,OAAO,YAAY;GAC3C,MAAM,WAAW,MAAM,QAAQ,IAC9B,eAAe,KAAK,OAAO,GAAG,QAAQ,CAAC,CACvC;AACD,UAAO,CAAC,GAAG,eAAe,GAAG,SAAS,MAAM,CAAC,CAAC,QAC5C,MAAmB,OAAO,MAAM,YAAY,MAAM,GACnD;;MAGF,SAAQ,iBAAiB;;AAK3B,KAAI,QAAQ,cACX,SAAQ,KAAK;EAAE,QAAQ;EAAQ,OAAO,QAAQ;EAAe,CAAC;AAG/D,SAAQ,kBAAkB,sBAAsB,QAAQ,SAAS;EAChE;EACA,QAAQ,QAAQ;EAChB,OAAO;EACP,YAAY,QAAQ;EACpB,CAAC;AACF,SAAQ,UAAU;;AAGnB,SAAgB,mBAAmB,SAA4B;CAC9D,MAAM,UAA8B,EAAE;AACtC,KAAI,QAAQ,UAAU,uBAAuB,SAAS;AAGtD,QAAO;;AAGR,eAAsB,kBACrB,SACA,SACoB;CACpB,MAAM,iBAAgD,EAAE;AAExD,KAAI,uBAAuB,QAAQ,QAAQ,EAAE;EAC5C,MAAM,eAAe,QAAQ,QAAQ;AACrC,OAAK,MAAM,QAAQ,aAClB,KAAI,CAAC,KAAK,SAAS,MAAM,EAAE;AAC1B,kBAAe,KAAK,WAAW,OAAO;AACtC,OAAI,KAAK,SAAS,YAAY,IAAI,KAAK,SAAS,YAAY,CAC3D,gBAAe,KAAK,UAAU,OAAO;QAGtC,gBAAe,KAAK,KAAK;AAI3B,MAAI,QAAQ,QAAQ,SACnB,KAAI;AACH,kBAAe,KAAK,IAAI,IAAI,QAAQ,QAAQ,SAAS,CAAC,OAAO;UACtD;QAEH;EACN,MAAM,UAAU,WACf,OAAO,QAAQ,YAAY,WAAW,QAAQ,UAAU,QACxD,QAAQ,UACR,QACA;AACD,MAAI,QACH,gBAAe,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO;;AAI9C,KAAI,QAAQ,gBAAgB;AAC3B,MAAI,MAAM,QAAQ,QAAQ,eAAe,CACxC,gBAAe,KAAK,GAAG,QAAQ,eAAe;AAE/C,MAAI,OAAO,QAAQ,mBAAmB,YAAY;GACjD,MAAM,eAAe,MAAM,QAAQ,eAAe,QAAQ;AAC1D,kBAAe,KAAK,GAAG,aAAa;;;CAGtC,MAAM,oBAAoB,IAAI;AAC9B,KAAI,kBACH,gBAAe,KAAK,GAAG,kBAAkB,MAAM,IAAI,CAAC;AAErD,QAAO,eAAe,QAAQ,MAAmB,QAAQ,EAAE,CAAC;;AAG7D,eAAsB,kBACrB,KACA,MACyB;AACzB,KAAI,CAAC,IAAK,QAAO;AACjB,MAAK,MAAM,OAAO,KAAK;EACtB,MAAM,QAAQ,OAAO,QAAQ,aAAa,MAAM,KAAK,GAAG;AACxD,MAAI,MAAM,KAAK,SAAS,UAAU,KAAK,MACtC,QAAO;;;AAMV,eAAsB,oBACrB,SACA,SACoB;CACpB,MAAM,mBAAmB,QAAQ,SAAS,gBAAgB;AAC1D,KAAI,CAAC,iBACJ,QAAO,EAAE;AAEV,KAAI,MAAM,QAAQ,iBAAiB,CAClC,QAAO,iBAAiB,QAAQ,MAAmB,QAAQ,EAAE,CAAC;AAG/D,SADiB,MAAM,iBAAiB,QAAQ,IAC5B,EAAE,EAAE,QAAQ,MAAmB,QAAQ,EAAE,CAAC"}