import { registerAppHandlers } from "../ipc/appHandlers.js"; import { registerCaptureHandlers } from "../ipc/captureHandlers.js"; import { registerPersistenceHandlers } from "../ipc/persistenceHandlers.js"; import type { BooleanResult, FocusGenshinResult, RuntimeInfo, LoadScannerLearningRulesResult, SaveScannerLearningRulesResult, ScannerLearningRulePayload, CaptureOptions, CaptureResult, CaptureSourceInfo, ClickResult, AutomationGuard, ScrollResult, KeyPressResult, SaveResultWithPath, SaveSnapshotResult, GoodDatabase, GoodImportFileResult, NativeScannerCatalogStatus, NativeScannerDataStatus, NativeScannerImageLoadStatus, NativeScannerPreflightStatus, NativeScannerProcessStatus, NativeScannerPromotionStatus, NativeScannerReviewArtifactInput, NativeScannerReviewStatus, NativeScannerResultsLoadStatus, NativeScannerRunStatus, NativeScannerStartCategory, ScannerStatusPayload, } from "../../src/types/global.js"; import type { ArtifactStoreRepositoryPort, ReviewSamplesRepositoryPort, ReviewSampleListResult, } from "../repositories/contracts.js"; import type { AppSnapshot } from "../../src/types/domain.js"; interface AppHandlersDependencies { focusMainWindow: () => BooleanResult; moveMainWindowOffGenshin: () => Promise; focusGenshinForScanStart: () => Promise; publishScannerStatus: (status: ScannerStatusPayload) => Promise; nativeScannerDataStatus: () => Promise; nativeScannerCatalog: () => Promise; nativeScannerPreflight: (options?: { category?: NativeScannerStartCategory | string }) => Promise; nativeScannerStart: (options?: { limit?: number; category?: NativeScannerStartCategory }) => Promise; nativeScannerStop: () => Promise; nativeScannerStatus: () => Promise; nativeScannerProcessRun: (options?: { runDir?: string; persist?: boolean; limit?: number }) => Promise; nativeScannerLoadResults: (options?: { runDir?: string; limit?: number }) => Promise; nativeScannerPromoteResults: (options: { runDir?: string; resultIds: string[] }) => Promise; nativeScannerReviewResult: (options: { runDir?: string; resultId: string; action: "approve" | "reject"; artifact?: NativeScannerReviewArtifactInput; note?: string }) => Promise; nativeScannerLoadImage: (options: { runDir?: string; imagePath: string }) => Promise; readRuntimeInfo: () => Promise; loadSnapshotFromDisk: () => Promise; saveSnapshotToDisk: (snapshot: AppSnapshot) => Promise; runMockScan: () => Promise; showOverlayWindow: () => Promise; hideOverlayWindow: () => Promise; } type ArtifactStoreAccessor = () => ArtifactStoreRepositoryPort; type ReviewSamplesAccessor = () => ReviewSamplesRepositoryPort; interface PersistenceHandlersDependencies { getArtifactStoreRepository: ArtifactStoreAccessor; getReviewSamplesRepository: ReviewSamplesAccessor; artifactStorePath: () => string; reviewSamplesPath: () => string; loadReviewSamples: (limit?: number) => Promise; loadScannerLearningRules: () => Promise; writeScannerLearningRules: (rules: ScannerLearningRulePayload) => Promise; exportGood: (payload: GoodDatabase) => Promise; importGoodFile: () => Promise; } interface CaptureHandlersDependencies { listSources: () => Promise; captureSource: (sourceId: string, delayMs?: number, focusGenshin?: boolean, options?: CaptureOptions) => Promise; clickScreen: (x: number, y: number) => Promise; scrollScreen: (notches: number, anchorX?: number, anchorY?: number) => Promise; keyPress: (key: string) => Promise; getAutomationGuard: () => Promise; } interface IpcBootstrapDependencies extends AppHandlersDependencies, PersistenceHandlersDependencies, CaptureHandlersDependencies {} export function registerIpcHandlers(dependencies: IpcBootstrapDependencies) { registerAppHandlers({ focusMainWindow: dependencies.focusMainWindow, moveMainWindowOffGenshin: dependencies.moveMainWindowOffGenshin, focusGenshinForScanStart: dependencies.focusGenshinForScanStart, publishScannerStatus: dependencies.publishScannerStatus, nativeScannerDataStatus: dependencies.nativeScannerDataStatus, nativeScannerCatalog: dependencies.nativeScannerCatalog, nativeScannerPreflight: dependencies.nativeScannerPreflight, nativeScannerStart: dependencies.nativeScannerStart, nativeScannerStop: dependencies.nativeScannerStop, nativeScannerStatus: dependencies.nativeScannerStatus, nativeScannerProcessRun: dependencies.nativeScannerProcessRun, nativeScannerLoadResults: dependencies.nativeScannerLoadResults, nativeScannerPromoteResults: dependencies.nativeScannerPromoteResults, nativeScannerReviewResult: dependencies.nativeScannerReviewResult, nativeScannerLoadImage: dependencies.nativeScannerLoadImage, getRuntimeInfo: dependencies.readRuntimeInfo, loadSnapshot: dependencies.loadSnapshotFromDisk, saveSnapshot: dependencies.saveSnapshotToDisk, runMockScan: dependencies.runMockScan, showOverlay: dependencies.showOverlayWindow, hideOverlay: dependencies.hideOverlayWindow, }); registerPersistenceHandlers({ getArtifactStoreRepository: dependencies.getArtifactStoreRepository, getReviewSamplesRepository: dependencies.getReviewSamplesRepository, artifactStorePath: dependencies.artifactStorePath, reviewSamplesPath: dependencies.reviewSamplesPath, loadReviewSamples: dependencies.loadReviewSamples, loadScannerLearningRules: dependencies.loadScannerLearningRules, writeScannerLearningRules: dependencies.writeScannerLearningRules, exportGood: dependencies.exportGood, importGoodFile: dependencies.importGoodFile, }); registerCaptureHandlers({ listSources: dependencies.listSources, captureSource: dependencies.captureSource, clickScreen: dependencies.clickScreen, scrollScreen: dependencies.scrollScreen, keyPress: dependencies.keyPress, getAutomationGuard: dependencies.getAutomationGuard, }); }