/// import EventEmitter from "eventemitter3"; import { API, DataChangeUsername, DataCreateGroup, DataCreateServer, DataEditUser, DataLogin, Emoji, MFAMethod, MFAResponse, RevoltConfig } from "revolt-api"; import { ChannelManager } from "./managers/ChannelManager"; import { EmojiManager } from "./managers/EmojiManager"; import { ServerManager } from "./managers/ServerManager"; import { UnreadManager } from "./managers/UnreadManager"; import { UserManager } from "./managers/UserManager"; import { AttachmentBucket } from "./objects/Attachment"; import { BaseMessage } from "./objects/BaseMessage"; import { Channel } from "./objects/Channel"; import { GlobalInvite } from "./objects/GlobalInvite"; import { GroupDMChannel } from "./objects/GroupDMChannel"; import { Member } from "./objects/Member"; import { Role } from "./objects/Role"; import { Server } from "./objects/Server"; import { ServerInvite } from "./objects/ServerInvite"; import { User } from "./objects/User"; import { AutumnConfig, JanuaryConfig, VortexConfig } from "./utils/ServiceConfig"; import { WebSocketClient } from "./websocket"; import { ClientboundNotification } from "./websocketNotifications"; export interface ClientOptions { apiURL: string; debug: boolean; heartbeat: number; reconnect: boolean; pingTimeout?: number; exitOnTimeout?: boolean; } export interface ClientSession { id: string; name: string; token: string; type: "user" | "bot"; } export type ClientEvents = "ready" | "connecting" | "connected" | "disconnected" | "destroyed" | "packet" | "channelCreate" | "channelUpdate" | "channelDelete" | "channelStartTyping" | "channelStopTyping" | "emojiCreate" | "emojiDelete" | "groupMemberJoin" | "groupMemberLeave" | "groupExited" | "message" | "messageUpdate" | "messageDelete" | "serverCreate" | "serverUpdate" | "serverExited" | "serverMemberJoin" | "serverMemberLeave" | "serverMemberUpdate" | "serverRoleCreate" | "serverRoleUpdate" | "serverRoleDelete" | "userRelationshipUpdate" | "userUpdate"; export declare class Client extends EventEmitter { api: API; options: ClientOptions; config: RevoltConfig; session: ClientSession; ws: WebSocketClient; channels: ChannelManager; emojis: EmojiManager; servers: ServerManager; unreads: UnreadManager; users: UserManager; get user(): User; constructor(options?: Partial); /** Upload an attachment to Autumn. */ uploadAttachment(filename: string, data: Buffer | Blob, type?: AttachmentBucket): Promise; /** Proxies a file URL through january. (if enabled) */ proxyFile(url: string): string | null; /** Create a new server. */ createServer(data: DataCreateServer): Promise; /** Create a new group. */ createGroup(data: DataCreateGroup): Promise; /** Edit the client User's profile information. */ editUser(details: DataEditUser): Promise; /** Change the client User's username. */ changeUsername(details: DataChangeUsername): Promise; /** Fetch an existing invite. */ fetchInvite(code: string): Promise; /** Accept an invite. (Group DMs not supported yet) */ acceptInvite(invite: string | GlobalInvite | ServerInvite): Promise; /** Log in using an existing session or bot token. */ login(token: string, type: "user" | "bot", connect?: boolean, details?: Partial, "type">>): Promise; /** * Log in with a username and password. * @returns Returns a response being one of `none`, `onboard`, or `mfa`. Onboarding and MFA both require a response. */ authenticate(details: DataLogin): Promise<{ type: "none"; } | { type: "onboard"; respond(username: string, loginAfterSuccess: boolean): Promise; } | { type: "mfa"; ticket: string; methods: MFAMethod[]; respond(totp_code: string): ReturnType; }>; get mfa(): { /** MFA status. */ status(): Promise<{ hasRecovery: boolean; }>; /** Allowed ticket methods for account. */ allowedMethods(): Promise<("Password" | "Recovery" | "Totp")[]>; /** Generate an MFA ticket for later use. */ generateTicket(code: MFAResponse): Promise<{ id: string; accountID: string; token: string; validated: boolean; authorized: boolean; lastTOTPCode: string; }>; /** Generate the TOTP secret for MFA app. */ generateTOTPSecret(ticketToken: string): Promise; /** Enable TOTP with the code from MFA app. */ enableTOTP(ticketToken: string, totp_code: string): Promise; /** Disable TOTP. */ disableTOTP(ticketToken: string): Promise; /** Fetch recovery codes. (or generate/enable them if not enabled) */ fetchRecoveryCodes(ticketToken: string): Promise; /** Generate new recovery codes. */ generateRecoveryCodes(ticketToken: string): Promise; }; /** Compatibility layer. Do not use in prod. */ syncFetchSettings(keys: string[]): Promise<{ [key: string]: [number, string]; }>; /** Compatibility layer. Do not use in prod. */ syncSetSettings(data: { [key: string]: object | string; }, timestamp?: number): Promise; fetchConfiguration(force?: boolean): Promise; fetchAutumnConfiguration(): Promise; fetchJanuaryConfiguration(): Promise; fetchVortexConfiguration(): Promise; setup(): void; destroy(destroySession?: boolean): Promise; on(event: "ready", listener: () => any): this; on(event: "connecting", listener: () => any): this; on(event: "connected", listener: () => any): this; on(event: "disconnected", listener: () => any): this; on(event: "destroyed", listener: () => any): this; on(event: "packet", listener: (packet: ClientboundNotification) => any): this; on(event: "channelCreate", listener: (channel: Channel) => any): this; on(event: "channelUpdate", listener: (channel: Channel) => any): this; on(event: "channelDelete", listener: (id: string, channel?: Channel) => any): this; on(event: "channelStartTyping", listener: (user: User, channel: Channel) => any): this; on(event: "channelStopTyping", listener: (user: User, channel: Channel) => any): this; on(event: "emojiCreate", listener: (emoji: Emoji) => void): this; on(event: "emojiDelete", listener: (id: string, emoji?: Emoji) => void): this; on(event: "groupMemberJoin", listener: (group: GroupDMChannel, user: User) => any): this; on(event: "groupMemberLeave", listener: (group: GroupDMChannel, user: User) => any): this; on(event: "groupExited", listener: (group: GroupDMChannel) => any): this; on(event: "message", listener: (message: BaseMessage) => any): this; on(event: "messageUpdate", listener: (message: BaseMessage) => any): this; on(event: "messageDelete", listener: (id: string, message?: BaseMessage) => any): this; on(event: "serverCreate", listener: (server: Server) => any): this; on(event: "serverUpdate", listener: (server: Server) => any): this; on(event: "serverExited", listener: (id: string, server?: Server) => any): this; on(event: "serverMemberJoin", listener: (member: Member) => any): this; on(event: "serverMemberLeave", listener: (server: Server, user: User) => any): this; on(event: "serverMemberUpdate", listener: (member: Member) => any): this; on(event: "serverRoleCreate", listener: (role: Role) => any): this; on(event: "serverRoleUpdate", listener: (role: Role) => any): this; on(event: "serverRoleDelete", listener: (role: Role) => any): this; on(event: "userRelationshipUpdate", listener: (user: User) => any): this; on(event: "userUpdate", listener: (user: User) => any): this; once(event: "ready", listener: () => any): this; once(event: "connecting", listener: () => any): this; once(event: "connected", listener: () => any): this; once(event: "disconnected", listener: () => any): this; once(event: "destroyed", listener: () => any): this; once(event: "packet", listener: (packet: ClientboundNotification) => any): this; once(event: "channelCreate", listener: (channel: Channel) => any): this; once(event: "channelUpdate", listener: (channel: Channel) => any): this; once(event: "channelDelete", listener: (id: string, channel?: Channel) => any): this; once(event: "channelStartTyping", listener: (user: User, channel: Channel) => any): this; once(event: "channelStopTyping", listener: (user: User, channel: Channel) => any): this; once(event: "emojiCreate", listener: (emoji: Emoji) => void): this; once(event: "emojiDelete", listener: (id: string, emoji?: Emoji) => void): this; once(event: "groupMemberJoin", listener: (group: GroupDMChannel, user: User) => any): this; once(event: "groupMemberLeave", listener: (group: GroupDMChannel, user: User) => any): this; once(event: "groupExited", listener: (group: GroupDMChannel) => any): this; once(event: "message", listener: (message: BaseMessage) => any): this; once(event: "messageUpdate", listener: (message: BaseMessage) => any): this; once(event: "messageDelete", listener: (id: string, message?: BaseMessage) => any): this; once(event: "serverCreate", listener: (server: Server) => any): this; once(event: "serverUpdate", listener: (server: Server) => any): this; once(event: "serverExited", listener: (id: string, server?: Server) => any): this; once(event: "serverMemberJoin", listener: (member: Member) => any): this; once(event: "serverMemberLeave", listener: (server: Server, user: User) => any): this; once(event: "serverMemberUpdate", listener: (member: Member) => any): this; once(event: "serverRoleCreate", listener: (role: Role) => any): this; once(event: "serverRoleUpdate", listener: (role: Role) => any): this; once(event: "serverRoleDelete", listener: (role: Role) => any): this; once(event: "userRelationshipUpdate", listener: (user: User) => any): this; once(event: "userUpdate", listener: (user: User) => any): this; }