mirror of
https://github.com/Kvan7/Exiled-Exchange-2.git
synced 2025-10-30 06:08:00 +00:00
215 lines
4.0 KiB
TypeScript
215 lines
4.0 KiB
TypeScript
export interface HostConfig {
|
|
shortcuts: ShortcutAction[];
|
|
restoreClipboard: boolean;
|
|
clientLog: string | null;
|
|
gameConfig: string | null;
|
|
stashScroll: boolean;
|
|
overlayKey: string;
|
|
logKeys: boolean;
|
|
windowTitle: string;
|
|
language: string;
|
|
}
|
|
|
|
export interface ShortcutAction {
|
|
shortcut: string;
|
|
keepModKeys?: true;
|
|
action:
|
|
| {
|
|
type: "copy-item";
|
|
focusOverlay?: boolean;
|
|
target: string;
|
|
}
|
|
| {
|
|
type: "ocr-text";
|
|
target: "heist-gems";
|
|
}
|
|
| {
|
|
type: "trigger-event";
|
|
target: string;
|
|
}
|
|
| {
|
|
type: "stash-search";
|
|
text: string;
|
|
}
|
|
| {
|
|
type: "toggle-overlay";
|
|
}
|
|
| {
|
|
type: "paste-in-chat";
|
|
text: string;
|
|
send: boolean;
|
|
}
|
|
| {
|
|
type: "test-only";
|
|
};
|
|
}
|
|
|
|
export type UpdateInfo =
|
|
| {
|
|
state: "initial" | "checking-for-update";
|
|
}
|
|
| {
|
|
state: "update-available";
|
|
version: string;
|
|
noDownloadReason: "not-supported" | "disabled-by-flag" | null;
|
|
}
|
|
| {
|
|
state: "update-downloaded";
|
|
version: string;
|
|
}
|
|
| {
|
|
state: "update-not-available" | "error";
|
|
checkedAt: number;
|
|
};
|
|
|
|
export interface HostState {
|
|
contents: string | null;
|
|
version: string;
|
|
updater: UpdateInfo;
|
|
}
|
|
|
|
export type IpcEvent =
|
|
// events that have meaning only in Overlay mode:
|
|
| IpcOverlayAttached
|
|
| IpcFocusChange
|
|
| IpcVisibility
|
|
| IpcFocusGame
|
|
| IpcHideExclusiveWidget
|
|
| IpcTrackArea
|
|
// events used by any type of Client:
|
|
| IpcSaveConfig
|
|
| IpcUpdaterState
|
|
| IpcGameLog
|
|
| IpcClientIsActive
|
|
| IpcLogEntry
|
|
| IpcHostConfig
|
|
| IpcWidgetAction
|
|
| IpcItemText
|
|
| IpcOcrText
|
|
| IpcConfigChanged
|
|
| IpcUserAction;
|
|
|
|
export type IpcEventPayload<
|
|
Name extends IpcEvent["name"],
|
|
T extends IpcEvent = IpcEvent
|
|
> = T extends { name: Name; payload: infer P } ? P : never;
|
|
|
|
type IpcOverlayAttached = Event<"MAIN->OVERLAY::overlay-attached">;
|
|
|
|
type IpcFocusChange = Event<
|
|
"MAIN->OVERLAY::focus-change",
|
|
{
|
|
game: boolean;
|
|
overlay: boolean;
|
|
usingHotkey: boolean;
|
|
}
|
|
>;
|
|
|
|
type IpcVisibility = Event<
|
|
"MAIN->OVERLAY::visibility",
|
|
{
|
|
isVisible: boolean;
|
|
}
|
|
>;
|
|
|
|
type IpcFocusGame = Event<"OVERLAY->MAIN::focus-game">;
|
|
|
|
type IpcHideExclusiveWidget = Event<"MAIN->OVERLAY::hide-exclusive-widget">;
|
|
|
|
type IpcTrackArea = Event<
|
|
"OVERLAY->MAIN::track-area",
|
|
{
|
|
holdKey: string;
|
|
closeThreshold: number;
|
|
from: { x: number; y: number };
|
|
area: { x: number; y: number; width: number; height: number };
|
|
dpr: number;
|
|
}
|
|
>;
|
|
|
|
type IpcHostConfig = Event<"CLIENT->MAIN::update-host-config", HostConfig>;
|
|
|
|
type IpcClientIsActive = Event<
|
|
"CLIENT->MAIN::used-recently",
|
|
{
|
|
isOverlay: boolean;
|
|
}
|
|
>;
|
|
|
|
type IpcSaveConfig = Event<
|
|
"CLIENT->MAIN::save-config",
|
|
{
|
|
contents: string;
|
|
isTemporary: boolean;
|
|
}
|
|
>;
|
|
|
|
type IpcConfigChanged = Event<
|
|
"MAIN->CLIENT::config-changed",
|
|
{
|
|
contents: string;
|
|
}
|
|
>;
|
|
|
|
type IpcLogEntry = Event<
|
|
"MAIN->CLIENT::log-entry",
|
|
{
|
|
message: string;
|
|
}
|
|
>;
|
|
|
|
type IpcWidgetAction = Event<
|
|
"MAIN->CLIENT::widget-action",
|
|
{
|
|
target: string;
|
|
}
|
|
>;
|
|
|
|
type IpcItemText = Event<
|
|
"MAIN->CLIENT::item-text",
|
|
{
|
|
target: string;
|
|
clipboard: string;
|
|
item?: unknown;
|
|
position: { x: number; y: number };
|
|
focusOverlay: boolean;
|
|
}
|
|
>;
|
|
|
|
type IpcOcrText = Event<
|
|
"MAIN->CLIENT::ocr-text",
|
|
{
|
|
target: string;
|
|
pressTime: number;
|
|
ocrTime: number;
|
|
paragraphs: string[];
|
|
}
|
|
>;
|
|
|
|
type IpcGameLog = Event<
|
|
"MAIN->CLIENT::game-log",
|
|
{
|
|
lines: string[];
|
|
}
|
|
>;
|
|
|
|
type IpcUpdaterState = Event<"MAIN->CLIENT::updater-state", UpdateInfo>;
|
|
|
|
// Hotkeyable actions are defined in `ShortcutAction`.
|
|
// Actions below are triggered by user interaction with the UI.
|
|
type IpcUserAction = Event<
|
|
"CLIENT->MAIN::user-action",
|
|
| {
|
|
action: "check-for-update" | "update-and-restart" | "quit";
|
|
}
|
|
| {
|
|
action: "stash-search";
|
|
text: string;
|
|
}
|
|
>;
|
|
|
|
interface Event<TName extends string, TPayload = undefined> {
|
|
name: TName;
|
|
payload: TPayload;
|
|
}
|