/** Shared or per-chain credentials. */ export type ChainCredential = string | Record /** Parses shared or per-chain credentials from an environment value. */ export function parseCredential(value: ChainCredential | undefined): parseCredential.ReturnType { if (!value) return undefined if (typeof value !== 'string') return value const credentials = (() => { try { return JSON.parse(value) as unknown } catch { return value } })() if (typeof credentials === 'string') return credentials if ( !credentials || typeof credentials !== 'object' || Array.isArray(credentials) || Object.values(credentials).some((credential) => typeof credential !== 'string') ) throw new Error('Expected a credential or a chain-id-to-credential JSON object.') return credentials as Record } export declare namespace parseCredential { /** Parsed shared or per-chain credentials. */ type ReturnType = ChainCredential | undefined } /** Resolves a chain credential and infers its HTTP authorization scheme. */ export function resolveCredential( options: resolveCredential.Options, ): resolveCredential.ReturnType { const credentials = parseCredential(options.value) const credential = typeof credentials === 'string' ? credentials : credentials?.[options.chainId] if (!credential) return { basicAuth: undefined } if (credential.includes(':')) return { basicAuth: credential } return { basicAuth: undefined, bearerAuth: credential } } export declare namespace resolveCredential { /** Options for resolving a chain credential. */ type Options = { /** Chain id selecting a per-chain credential. */ chainId: number /** Shared or per-chain credentials. */ value?: ChainCredential | undefined } /** Resolved HTTP authorization credentials. */ type ReturnType = { /** Basic credentials inferred from a value containing a colon. */ basicAuth: string | undefined /** Bearer credential inferred from a value without a colon. */ bearerAuth?: string | undefined } }