export interface Env { [key: string]: Promise; (name: string, value?: T | undefined, error?: string): Promise; } export const env = new Proxy(_env, { get: (_, name: string) => _env(name), apply: (_, __, args: [string, any?, string?]) => _env(...args), }) as Env; async function _env( name: string, value?: T | undefined, error?: string ): Promise { if (value !== undefined) { return value; } else if (typeof process !== undefined) { // we are in a node environment return process.env[name]! as T; } else { // we are in a browser environment try { const { env } = await import("cloudflare:workers"); if (name in env) { return env[name as keyof typeof env] as T; } } catch (error) {} } throw new Error(error ?? `Environment variable ${name} is not set`); }