first commit

This commit is contained in:
lucasdpt
2026-06-14 12:32:29 +02:00
commit cc4f90e840
32 changed files with 9729 additions and 0 deletions
+65
View File
@@ -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)