import type { AuthContext } from "./types.ts"; interface NodeFsModule { access(path: string): Promise; } interface NodeOsModule { homedir(): string; } // Variable specifier so browser bundlers do not try to resolve node builtins. const importNodeModule = (specifier: string): Promise => import(specifier); function getProcessEnv(): Record | undefined { const proc = (globalThis as { process?: { env?: Record } }).process; return proc?.env; } /** * Default auth context: env vars from `process.env` (undefined in browsers), * file existence via node:fs (always false in browsers). */ export function defaultProviderAuthContext(): AuthContext { return { async env(name: string): Promise { const value = getProcessEnv()?.[name]; return typeof value === "string" && value.trim().length > 0 ? value : undefined; }, async fileExists(path: string): Promise { try { const fs = (await importNodeModule("node:fs/promises")) as NodeFsModule; let resolved = path; if (resolved.startsWith("~")) { const os = (await importNodeModule("node:os")) as NodeOsModule; resolved = os.homedir() + resolved.slice(1); } await fs.access(resolved); return true; } catch { return false; } }, }; }