/**
 * QR Code Connect — 核心对外接口
 *
 * 支持两种使用模式：
 * 1. Promise 风格：始终在控制台打印二维码，等待扫码后 resolve
 * 2. 回调风格：可通过 displayQrCodeToConsole 控制是否在控制台打印二维码，
 *    无论是否打印，onQrDisplayed 都会在轮询开始前回调二维码 URL
 */
export interface QrConnectCredentials {
    appId: string;
    appSecret: string;
}
export interface QrConnectCallbacks {
    /** 扫码成功，返回凭据 */
    onSuccess: (credentials: QrConnectCredentials[]) => void;
    /** 流程失败或被取消 */
    onFailure: (error: Error) => void;
    /** 二维码 URL 就绪，在轮询开始前始终触发 */
    onQrDisplayed?: (url: string) => void;
    /** 二维码已过期，即将刷新（可选回调） */
    onQrExpired?: () => void;
}
export interface QrConnectOptions {
    /**
     * 是否在控制台打印二维码，默认 true。
     * 在 Promise 风格（qrConnect）下此参数始终为 true，不可关闭。
     */
    displayQrCodeToConsole?: boolean;
    /**
     * AbortSignal，支持外部取消。
     * 传入后可通过 AbortController.abort() 中止扫码轮询流程。
     */
    signal?: AbortSignal;
    /** 调用来源标识，会拼接到二维码 URL 中 */
    source?: string;
}
/**
 * 轮询等待扫码结果（回调风格）。
 *
 * 可通过 `options.displayQrCodeToConsole` 控制是否在控制台打印二维码（默认 true）。
 * 无论是否打印，`onQrDisplayed` 都会在轮询开始前回调二维码 URL。
 *
 * @returns 一个 dispose 函数，调用后可中止轮询流程
 *
 * @example
 * ```ts
 * const stop = startQrConnect({
 *   onSuccess([{ appId, appSecret }]) {
 *     console.log('成功', appId, appSecret);
 *   },
 *   onFailure(err) {
 *     console.error('失败', err.message);
 *   },
 *   onQrDisplayed(url) {
 *     // 自行处理二维码 URL，例如生成图片发送给用户
 *   },
 * });
 *
 * // 需要取消时：
 * stop();
 * ```
 */
export declare function startQrConnect(callbacks: QrConnectCallbacks, options?: QrConnectOptions): () => void;
/**
 * 在控制台展示二维码并轮询等待扫码结果（Promise 风格）。
 *
 * 始终在控制台打印二维码（displayQrCodeToConsole 固定为 true）。
 * 如果需要自行处理二维码 URL（不打印），请使用 {@link startQrConnect} 回调风格。
 *
 * @returns Promise 解析为 `QrConnectCredentials[]` 或 reject Error
 *
 * @example
 * ```ts
 * try {
 *   const [{ appId, appSecret }] = await qrConnect();
 *   console.log('成功', appId, appSecret);
 * } catch (err) {
 *   console.error('失败', err.message);
 * }
 * ```
 */
export declare function qrConnect(options?: Omit<QrConnectOptions, 'displayQrCodeToConsole'>): Promise<QrConnectCredentials[]>;
//# sourceMappingURL=qr-connect.d.ts.map