/** 单次点击事件（eventType=1）数据包 */
export interface ClickEventPacket {
    userId: string;
    projectId: number | null;
    traceId: string;
    currentAt: number;
    [key: string]: unknown;
}
/** 时长事件（eventType=2）数据包 */
export interface DurationEventPacket {
    userId: string;
    projectId: number | null;
    traceId: string;
    beginAt: number;
    endAt: number;
    duration: number;
    [key: string]: unknown;
}
export type EventPacket = ClickEventPacket | DurationEventPacket;
/** sendEvent 的参数结构 */
export interface EventData {
    /** 事件分类（如 'new-behavior'） */
    category: string;
    /** 事件动作（如 'duration.world.stay'） */
    action: string;
    /** 事件数据负载 */
    data: EventPacket;
}
/** send() 的 extra 参数 */
export interface SendExtra {
    /** 时长事件开始标志 */
    started?: boolean;
    /** 时长事件结束标志 */
    ended?: boolean;
    /** 是否使用匿名 ID */
    useNoId?: boolean;
    [key: string]: unknown;
}
/** SDK 实例的最小接口（避免循环引用） */
interface SDKRef {
    token: string | null;
    getUsername(): Promise<string | null>;
}
declare class RemoteLog {
    private apiEndpoint;
    private sdk;
    private maxRetries;
    private retryDelay;
    /** 进行中的时长事件缓存，key = `${userId}_${action}` */
    private pendingEvents;
    /** 缓存的请求头（含 User-Agent / Referer，首次调用后复用） */
    private headers;
    constructor(sdk: SDKRef);
    /**
     * 从 hostname 提取主域名（保持与重构前 RemoteLog.js 一致的原型方法表面）。
     * 委托给 WxUtils.extractMainDomain，逻辑等价。
     */
    extractMainDomain(hostname: string): string;
    /**
     * 获取当前时间戳（毫秒），对应 Lua 的 `GetServerTime`。
     */
    getServerTime(): number;
    /**
     * 生成 UUID v4 格式的 traceId，用于追踪单条事件链路。
     */
    generateTraceId(): string;
    /**
     * 生成事件数据包（对应 Lua `GenerateDataPacket`）。
     *
     * - type=1（单次事件）：立即构建含 `currentAt` 的包
     * - type=2（时长事件）：首次调用记录开始时间；再次调用计算 duration
     *
     * @param eventType - 1 单次事件，2 时长事件
     * @param userId    - 用户 ID
     * @param action    - 动作名称
     * @param started   - 时长事件专用：true 表示事件已在计时中
     * @param projectId - 项目 ID（可选）
     */
    generateDataPacket(eventType: 1 | 2, userId: string, action: string, started?: boolean, projectId?: number | null): EventPacket | null;
    /**
     * 发送事件（对应 Lua `EventTrackingService:Send`）。
     *
     * 自动从 SDK 实例获取用户 ID（若调用方未提供）。
     * 时长事件未正确结束时会跳过发送，避免写入无效数据。
     *
     * @param eventType    - 1 单次事件，2 时长事件
     * @param action       - 动作名称
     * @param extra        - 附加数据（started/ended 标志 + 业务字段）
     * @param offlineMode  - 是否离线模式（当前未实现，预留）
     * @param useNewCatalog - 是否使用新分类（决定 category 前缀）
     * @param userId       - 用户 ID（可选，为空时从 SDK 获取）
     * @param projectId    - 项目 ID（可选）
     * @returns 成功返回事件包，失败返回 false
     */
    send(eventType: 1 | 2, action: string, extra?: SendExtra, offlineMode?: boolean, useNewCatalog?: boolean, userId?: string | null, projectId?: number | null): Promise<EventPacket | false>;
    /**
     * 构建浏览器特征请求头（首次调用后缓存，避免重复构建）。
     * @internal
     */
    getBrowserHeaders(): Record<string, string>;
    /**
     * 向远端发送事件日志，失败后按指数退避重试。
     *
     * @param eventData   - 事件数据对象
     * @param retryCount  - 当前已重试次数（内部递归使用）
     */
    sendEvent(eventData: EventData, retryCount?: number): Promise<unknown>;
    /**
     * 获取当前登录用户的用户名（代理到 sdk.getUsername）。
     */
    getUserId(): Promise<string | null>;
    /**
     * 上报自由格式的行为事件（直接构建事件包，不经过 generateDataPacket）。
     *
     * @param action   - 动作名称
     * @param data     - 事件数据（会附加 traceId 和 currentAt）
     * @param category - 事件分类（默认 'new-behavior'）
     */
    logBehavior(action: string, data: Record<string, unknown>, category?: string): Promise<unknown>;
    /**
     * 上报单次点击事件（eventType=1 的便捷封装）。
     *
     * @param action       - 动作名称
     * @param extra        - 附加业务数据
     * @param useNewCatalog - 是否使用新分类
     * @param userId       - 用户 ID（可选）
     * @param projectId    - 项目 ID（可选）
     */
    logClick(action: string, extra?: SendExtra, useNewCatalog?: boolean, userId?: string | null, projectId?: number | null): Promise<EventPacket | false>;
}
export default RemoteLog;
//# sourceMappingURL=RemoteLog.d.ts.map