51 lines
4.5 KiB
TypeScript
51 lines
4.5 KiB
TypeScript
import { contextBridge, ipcRenderer } from "electron";
|
|
import type { CaptureOptions, GoodDatabase, NativeScannerProcessOptions, NativeScannerResultsLoadOptions, NativeScannerReviewArtifactInput, NativeScannerStartCategory, ReviewSamplePayload, ScannerCommand, ScannerStatusPayload, ScannerLearningRulePayload } from "../src/types/global.js";
|
|
import type { StoredArtifactRecord } from "../src/types/storage.js";
|
|
import type { AppSnapshot } from "../src/types/domain.js";
|
|
|
|
contextBridge.exposeInMainWorld("assistantApi", {
|
|
loadSnapshot: () => ipcRenderer.invoke("snapshot:load"),
|
|
saveSnapshot: (snapshot: AppSnapshot) => ipcRenderer.invoke("snapshot:save", snapshot),
|
|
runMockScan: () => ipcRenderer.invoke("scan:runMock"),
|
|
listCaptureSources: () => ipcRenderer.invoke("capture:listSources"),
|
|
captureSource: (sourceId: string, delayMs = 0, focusGenshin = false, options?: CaptureOptions) => ipcRenderer.invoke("capture:captureSource", sourceId, delayMs, focusGenshin, options),
|
|
clickScreen: (x: number, y: number) => ipcRenderer.invoke("automation:clickScreen", x, y),
|
|
scrollScreen: (notches: number, anchorX?: number, anchorY?: number) => ipcRenderer.invoke("automation:scrollScreen", notches, anchorX, anchorY),
|
|
keyPress: (key: string) => ipcRenderer.invoke("automation:keyPress", key),
|
|
getAutomationGuard: () => ipcRenderer.invoke("automation:getGuard"),
|
|
focusMainWindow: () => ipcRenderer.invoke("app:focusMainWindow"),
|
|
focusGenshin: () => ipcRenderer.invoke("automation:focusGenshin"),
|
|
focusGenshinForScanStart: () => ipcRenderer.invoke("automation:focusGenshin"),
|
|
getRuntimeInfo: () => ipcRenderer.invoke("app:getRuntimeInfo"),
|
|
saveReviewSample: (sample: ReviewSamplePayload) => ipcRenderer.invoke("review:saveSample", sample),
|
|
loadReviewSamples: (limit = 50) => ipcRenderer.invoke("review:loadSamples", limit),
|
|
loadScannerLearningRules: () => ipcRenderer.invoke("scanner:loadLearningRules"),
|
|
saveScannerLearningRules: (rules: ScannerLearningRulePayload) => ipcRenderer.invoke("scanner:saveLearningRules", rules),
|
|
loadArtifacts: () => ipcRenderer.invoke("artifacts:load"),
|
|
saveArtifacts: (records: StoredArtifactRecord[]) => ipcRenderer.invoke("artifacts:saveMany", records),
|
|
removeArtifact: (id: string) => ipcRenderer.invoke("artifacts:removeOne", id),
|
|
exportGood: (payload: GoodDatabase) => ipcRenderer.invoke("good:export", payload),
|
|
importGoodFile: () => ipcRenderer.invoke("good:importFile"),
|
|
publishScannerStatus: (status: ScannerStatusPayload) => ipcRenderer.invoke("scanner:publishStatus", status),
|
|
nativeScannerDataStatus: () => ipcRenderer.invoke("scanner:nativeDataStatus"),
|
|
nativeScannerCatalog: () => ipcRenderer.invoke("scanner:nativeCatalog"),
|
|
nativeScannerPreflight: (options?: { category?: NativeScannerStartCategory }) => ipcRenderer.invoke("scanner:nativePreflight", options),
|
|
nativeScannerStart: (options?: { limit?: number; category?: NativeScannerStartCategory }) => ipcRenderer.invoke("scanner:nativeStart", options),
|
|
nativeScannerStop: () => ipcRenderer.invoke("scanner:nativeStop"),
|
|
nativeScannerStatus: () => ipcRenderer.invoke("scanner:nativeStatus"),
|
|
nativeScannerProcessRun: (options?: NativeScannerProcessOptions) => ipcRenderer.invoke("scanner:nativeProcessRun", options),
|
|
nativeScannerProcessingStatus: () => ipcRenderer.invoke("scanner:nativeProcessingStatus"),
|
|
nativeScannerLoadResults: (options?: NativeScannerResultsLoadOptions) => ipcRenderer.invoke("scanner:nativeLoadResults", options),
|
|
nativeScannerPromoteResults: (options: { runDir?: string; resultIds: string[] }) => ipcRenderer.invoke("scanner:nativePromoteResults", options),
|
|
nativeScannerReviewResult: (options: { runDir?: string; resultId: string; action: "approve" | "reject"; artifact?: NativeScannerReviewArtifactInput; note?: string }) => ipcRenderer.invoke("scanner:nativeReviewResult", options),
|
|
nativeScannerDeleteResult: (options: { runDir?: string; resultId: string; removeLinkedStoreRecord?: boolean }) => ipcRenderer.invoke("scanner:nativeDeleteResult", options),
|
|
nativeScannerLoadImage: (options: { runDir?: string; imagePath: string }) => ipcRenderer.invoke("scanner:nativeLoadImage", options),
|
|
showOverlay: () => ipcRenderer.invoke("overlay:show"),
|
|
hideOverlay: () => ipcRenderer.invoke("overlay:hide"),
|
|
onScannerCommand: (callback: (command: ScannerCommand) => void) => {
|
|
const listener = (_event: Electron.IpcRendererEvent, command: ScannerCommand) => callback(command);
|
|
ipcRenderer.on("scanner:command", listener);
|
|
return () => ipcRenderer.removeListener("scanner:command", listener);
|
|
},
|
|
});
|