import type { Connection } from "../../App/Connection"; import { Permissions } from "../../App/Permissions"; import { SessionStorage } from "../../App/SessionStorage"; import type { Storage } from "../../App/Storage"; import { authApi, billingApi, HTTPResponse, usersApi } from "../../shared/api"; import { UniqueString } from "../../shared/api/auth"; import { CryptoCheckout } from "../../shared/api/billing"; import { MessageResponse } from "../../shared/api/types"; import { Subject } from "../../shared/Subject"; export declare enum UserRoles { ADMIN = "ADMIN", USER = "USER" } type AccountInfo = { id: number; email?: string; address?: string; name: string; avatar: string; avatarGenerated: boolean; newsletter: boolean; }; type TokenData = { sub: string; exp: number; nbf?: number; iat: number; jti: string; aud: string; iss: string; role?: UserRoles; }; type AccountEvent = "logout"; type ChannelMsg = { event: AccountEvent; account: AccountInfo | null; }; export declare class Account { private readonly storage; private readonly sessionStorage; private readonly connection; subject: Subject; info: null | AccountInfo; billingInfo: null | billingApi.UserLimits; billingHistory: billingApi.HistoryRecord[]; cryptoRates: billingApi.CryptoRates; isTokenLoading: boolean; isInitialized: boolean; tokenData: TokenData | null; onSessionExpired: (() => void) | null; readonly permissions: Permissions; private _accessToken; private annualPayment; private storageLimitNotificationShown; onLogout: (() => Promise) | null; onLogin: (() => Promise) | null; onInit: (() => Promise) | null; broadcastChannel: BroadcastChannel; constructor(storage: Storage, sessionStorage: SessionStorage, connection: Connection); init(): Promise; private cleanup; get accessToken(): string | null; get isLoggedIn(): boolean; get isTokenExpired(): boolean; setOnSessionExpired(callback: () => void): void; setOnInit(callback: () => Promise): void; updateTokenData(): void; setIsAnnualPayment(isAnnual: boolean): void; toggleIsAnnualPayment(): void; getIsAnnualPayment(): boolean; fetchBillingInfo(): Promise; unsubscribe(): Promise; fetchAccountInfo(): Promise; fetchBillingHistory(): Promise; fetchCryptoRates(): Promise; uploadAvatar(avatar: File): Promise; removeAvatar(): Promise; login(email: string, password: string): Promise; register(email: string, password: string, name: string, newsletter: boolean): Promise>; private refreshTokensPromise; refreshTokens(): Promise; logout(): Promise; verifyMail: (email: string, passcode: string) => Promise; resendMail(email: string): Promise>; checkVerificationCodes(email: string): Promise; getNonce(address: UniqueString): Promise; verifySignature(address: UniqueString, signature: UniqueString): Promise; addEmail(email: string): Promise; verifyAddedEmail(email: string, passcode: string): Promise; changePassword(oldPassword: string, newPassword: string): Promise; forgotPassword(email: string): Promise; restorePassword(token: string, newPassword: string): Promise; changeInfo(payload: usersApi.UpdateUserPayload, signal: AbortSignal): Promise; changeNewsletter(payload: usersApi.UpdateUserNewsletter, signal: AbortSignal): Promise; createCheckout(planId: string): Promise; createCryptoCheckout(currency: string, chain: string, sender: string, planId: string): Promise; purchaseTokens(amount: number, paymentMethod: "stripe" | "crypto", successUrl?: string, cancelUrl?: string): Promise; setOnLogout(cb: () => Promise): void; setOnLogin(cb: () => Promise): void; postMsg(evt: AccountEvent): void; handleBroadcastEvent: (msg: ChannelMsg) => Promise; setupBroadcastChannel(): void; } export {};