first commit
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { contextBridge, ipcRenderer } from 'electron'
|
||||
import {
|
||||
IPC,
|
||||
IPC_EVENT,
|
||||
type PlayerProfile,
|
||||
type ProgressEvent,
|
||||
type GameLogLine,
|
||||
type UserSettings,
|
||||
type DeviceCodeInfo,
|
||||
type UpdateStatus
|
||||
} from '../shared/ipc'
|
||||
|
||||
/** API typée exposée au renderer via window.api. */
|
||||
const api = {
|
||||
// --- Auth ---
|
||||
login: (): Promise<PlayerProfile> => ipcRenderer.invoke(IPC.authLogin),
|
||||
logout: (): Promise<void> => ipcRenderer.invoke(IPC.authLogout),
|
||||
getProfile: (): Promise<PlayerProfile | null> => ipcRenderer.invoke(IPC.authGetProfile),
|
||||
|
||||
// --- Jouer (install + sync + launch) ---
|
||||
play: (): Promise<void> => ipcRenderer.invoke(IPC.play),
|
||||
|
||||
// --- Réglages ---
|
||||
getSettings: (): Promise<UserSettings> => ipcRenderer.invoke(IPC.settingsGet),
|
||||
setSettings: (s: UserSettings): Promise<UserSettings> => ipcRenderer.invoke(IPC.settingsSet, s),
|
||||
|
||||
getAppVersion: (): Promise<string> => ipcRenderer.invoke(IPC.appVersion),
|
||||
|
||||
/** Ouvre le dossier d'instance (mods/config/saves) dans l'explorateur. */
|
||||
openInstanceDir: (): Promise<string> => ipcRenderer.invoke(IPC.openInstanceDir),
|
||||
|
||||
/** Quitte et installe la mise à jour téléchargée. */
|
||||
installUpdate: (): Promise<void> => ipcRenderer.invoke(IPC.updateInstall),
|
||||
|
||||
// --- Abonnements aux événements (retournent une fonction de désabonnement) ---
|
||||
onProgress: (cb: (e: ProgressEvent) => void): (() => void) => {
|
||||
const handler = (_: unknown, e: ProgressEvent): void => cb(e)
|
||||
ipcRenderer.on(IPC_EVENT.progress, handler)
|
||||
return () => ipcRenderer.removeListener(IPC_EVENT.progress, handler)
|
||||
},
|
||||
onGameLog: (cb: (l: GameLogLine) => void): (() => void) => {
|
||||
const handler = (_: unknown, l: GameLogLine): void => cb(l)
|
||||
ipcRenderer.on(IPC_EVENT.gameLog, handler)
|
||||
return () => ipcRenderer.removeListener(IPC_EVENT.gameLog, handler)
|
||||
},
|
||||
onGameClosed: (cb: (code: number | null) => void): (() => void) => {
|
||||
const handler = (_: unknown, code: number | null): void => cb(code)
|
||||
ipcRenderer.on(IPC_EVENT.gameClosed, handler)
|
||||
return () => ipcRenderer.removeListener(IPC_EVENT.gameClosed, handler)
|
||||
},
|
||||
onAuthCode: (cb: (info: DeviceCodeInfo) => void): (() => void) => {
|
||||
const handler = (_: unknown, info: DeviceCodeInfo): void => cb(info)
|
||||
ipcRenderer.on(IPC_EVENT.authCode, handler)
|
||||
return () => ipcRenderer.removeListener(IPC_EVENT.authCode, handler)
|
||||
},
|
||||
onUpdateStatus: (cb: (s: UpdateStatus) => void): (() => void) => {
|
||||
const handler = (_: unknown, s: UpdateStatus): void => cb(s)
|
||||
ipcRenderer.on(IPC_EVENT.updateStatus, handler)
|
||||
return () => ipcRenderer.removeListener(IPC_EVENT.updateStatus, handler)
|
||||
}
|
||||
}
|
||||
|
||||
export type LauncherApi = typeof api
|
||||
|
||||
contextBridge.exposeInMainWorld('api', api)
|
||||
Reference in New Issue
Block a user