/// <reference types="node" />
import Achievements from "./modules/achievements";
import { LiveCache, XboxLiveToken } from "./types";
import authPkg from "prismarine-auth";
import EventEmitter from "events";
import SessionDirectory from "./modules/sessionDirectory";
import Social from "./modules/social";
import PeopleHub from "./modules/peopleHub";
interface XboxLiveTokenProvider {
    userXuid: string;
    userHash: string;
    xstsToken: string;
    expiresOn: number;
    isRefreshing: boolean;
    reset(): void;
    refresh(): Promise<XboxLiveToken>;
}
export declare class LinkCodeTokenProvider extends EventEmitter implements XboxLiveTokenProvider {
    #private;
    get userXuid(): string;
    get userHash(): string;
    get xstsToken(): string;
    get expiresOn(): number;
    email: string;
    authOptions: authPkg.MicrosoftAuthFlowOptions;
    cachePath: string;
    emailHash: string;
    clientId: string;
    liveCache: LiveCache;
    firstTokenAcquired: boolean;
    static readonly uri = "https://login.live.com/oauth20_token.srf";
    get isRefreshing(): boolean;
    constructor(email: string, tokenPath: string, options?: authPkg.MicrosoftAuthFlowOptions, codeCallback?: (res: {
        userCode: string;
        deviceCode: string;
        verificationUri: string;
        expiresIn: number;
        interval: number;
        message: string;
    }) => void);
    reset(): void;
    refresh(): Promise<XboxLiveToken>;
    private setRefreshInterval;
    get(): Promise<XboxLiveToken>;
}
export declare class XboxClient extends EventEmitter {
    token: XboxLiveTokenProvider;
    get xuid(): string;
    get authorizationHeader(): string;
    readonly social: Social;
    readonly sessionDirectory: SessionDirectory;
    readonly achievements: Achievements;
    readonly peopleHub: PeopleHub;
    constructor(tokenProvider: XboxLiveTokenProvider);
}
export {};
