/**
 * Erros tipados do SDK.
 *
 * Todo erro lanÃ§ado pelo SDK estende `NeetruError` â€” caller pode discriminar
 * por `.code` (string estÃ¡vel) sem parsing de message.
 */
/** CÃ³digos de erro estÃ¡veis do SDK. Adicionar aqui requer minor bump. */
type NeetruErrorCode = 'invalid_config' | 'missing_api_key' | 'unauthorized' | 'forbidden' | 'not_found' | 'rate_limited' | 'validation_failed' | 'network_error' | 'invalid_response' | 'server_error' | 'token_expired' | 'token_invalid_signature' | 'token_invalid_audience' | 'token_invalid_issuer'
/** 3.0: runtime nÃ£o expÃµe API necessÃ¡ria (ex: WebCrypto ausente). */
 | 'runtime_unsupported'
/**
 * 3.1.3 (bug_c1c96a00): o `state` retornado pelo IdP no callback OIDC nÃ£o bate com o gerado em
 * `signIn` (CSRF). TambÃ©m usado quando nÃ£o hÃ¡ transaÃ§Ã£o OIDC pendente.
 */
 | 'oidc_state_mismatch'
/** HTTP 409 â€” colisÃ£o de idempotÃªncia ou conflito de recurso. */
 | 'conflict' | 'unknown';
/**
 * Erro tipado padrÃ£o do SDK. Sempre lanÃ§ado em vez de Error genÃ©rico.
 *
 * @example
 * ```ts
 * try { await client.catalog.list(); }
 * catch (e) {
 *   if (e instanceof NeetruError && e.code === 'rate_limited') retry();
 * }
 * ```
 */
declare class NeetruError extends Error {
    readonly code: NeetruErrorCode | string;
    readonly status?: number;
    readonly requestId?: string;
    constructor(code: NeetruErrorCode | string, message: string, status?: number, requestId?: string);
}

export { NeetruError, type NeetruErrorCode };
