@nickbusey/thelounge
Version:
The self-hosted Web IRC client
121 lines (120 loc) • 3.71 kB
TypeScript
import _ from "lodash";
import Chan from "./models/chan";
import Msg, { MessageType, UserInMessage } from "./models/msg";
import SqliteMessageStorage from "./plugins/messageStorage/sqlite";
import Network, { NetworkWithIrcFramework } from "./models/network";
import ClientManager from "./clientManager";
import { MessageStorage, SearchQuery } from "./plugins/messageStorage/types";
declare type OrderItem = Chan["id"] | Network["uuid"];
declare type Order = OrderItem[];
declare type ClientPushSubscription = {
endpoint: string;
keys: {
p256dh: string;
auth: string;
};
};
export declare type UserConfig = {
log: boolean;
password: string;
sessions: {
[token: string]: {
lastUse: number;
ip: string;
agent: string;
pushSubscription?: ClientPushSubscription;
};
};
clientSettings: {
[key: string]: any;
};
browser?: {
language?: string;
ip?: string;
hostname?: string;
isSecure?: boolean;
};
};
export declare type Mention = {
chanId: number;
msgId: number;
type: MessageType;
time: Date;
text: string;
from: UserInMessage;
};
declare class Client {
awayMessage: string;
lastActiveChannel: number;
attachedClients: {
[socketId: string]: {
token: string;
openChannel: number;
};
};
config: UserConfig & {
networks?: Network[];
};
id: number;
idMsg: number;
idChan: number;
name: string;
networks: Network[];
mentions: Mention[];
manager: ClientManager;
messageStorage: MessageStorage[];
highlightRegex: RegExp | null;
highlightExceptionRegex: RegExp | null;
messageProvider?: SqliteMessageStorage;
fileHash: string;
constructor(manager: ClientManager, name?: string, config?: UserConfig);
createChannel(attr: Partial<Chan>): Chan;
emit(event: string, data?: any): void;
find(channelId: number): false | {
network: Network;
chan: Chan;
};
connect(args: Record<string, any>, isStartup?: boolean): void;
generateToken(callback: (token: string) => void): void;
calculateTokenHash(token: string): string;
updateSession(token: string, ip: string, request: any): void;
setPassword(hash: string, callback: (success: boolean) => void): void;
input(data: any): void;
inputLine(data: any): void;
compileCustomHighlights(): void;
more(data: any): {
chan: number;
messages: Msg[];
totalMessages: number;
} | null;
clearHistory(data: any): void;
search(query: SearchQuery): Promise<Omit<SearchQuery, "channelName" | "offset"> & {
results: Message[];
target: string;
offset: number;
}>;
open(socketId: string, target: number): void;
sort(data: {
order: Order;
type: "networks" | "channels";
target: string;
}): void;
names(data: {
target: number;
}): void;
part(network: Network, chan: Chan): void;
quit(signOut?: boolean): void;
clientAttach(socketId: string, token: string): void;
clientDetach(socketId: string): void;
registerPushSubscription(session: any, subscription: ClientPushSubscription, noSave?: boolean): {
endpoint: string;
keys: {
p256dh: string;
auth: string;
};
} | undefined;
unregisterPushSubscription(token: string): void;
save: _.DebouncedFunc<(this: Client) => void>;
}
export default Client;
export declare type IrcEventHandler = (this: Client, irc: NetworkWithIrcFramework["irc"], network: NetworkWithIrcFramework) => void;