169 lines
5.1 KiB
TypeScript
169 lines
5.1 KiB
TypeScript
/// <reference types="vite-plugin-electron/electron-env" />
|
|
|
|
declare namespace NodeJS {
|
|
interface ProcessEnv {
|
|
/**
|
|
* The built directory structure
|
|
*
|
|
* ```tree
|
|
* ├─┬─┬ dist
|
|
* │ │ └── index.html
|
|
* │ │
|
|
* │ ├─┬ dist-electron
|
|
* │ │ ├── main.js
|
|
* │ │ └── preload.js
|
|
* │
|
|
* ```
|
|
*/
|
|
APP_ROOT: string;
|
|
/** /dist/ or /public/ */
|
|
VITE_PUBLIC: string;
|
|
}
|
|
}
|
|
|
|
// Used in Renderer process, expose in `preload.ts`
|
|
interface Window {
|
|
electronAPI: {
|
|
getSources: (opts: Electron.SourcesOptions) => Promise<ProcessedDesktopSource[]>;
|
|
switchToEditor: () => Promise<void>;
|
|
switchToHud: () => Promise<void>;
|
|
startNewRecording: () => Promise<{ success: boolean; error?: string }>;
|
|
openSourceSelector: () => Promise<void>;
|
|
selectSource: (source: ProcessedDesktopSource) => Promise<ProcessedDesktopSource | null>;
|
|
getSelectedSource: () => Promise<ProcessedDesktopSource | null>;
|
|
requestCameraAccess: () => Promise<{
|
|
success: boolean;
|
|
granted: boolean;
|
|
status: string;
|
|
error?: string;
|
|
}>;
|
|
requestAccessibilityAccess: () => Promise<{
|
|
success: boolean;
|
|
granted: boolean;
|
|
error?: string;
|
|
}>;
|
|
assetBaseUrl: string;
|
|
storeRecordedVideo: (
|
|
videoData: ArrayBuffer,
|
|
fileName: string,
|
|
) => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
session?: import("../src/lib/recordingSession").RecordingSession;
|
|
message?: string;
|
|
error?: string;
|
|
}>;
|
|
storeRecordedSession: (
|
|
payload: import("../src/lib/recordingSession").StoreRecordedSessionInput,
|
|
) => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
session?: import("../src/lib/recordingSession").RecordingSession;
|
|
message?: string;
|
|
error?: string;
|
|
}>;
|
|
getRecordedVideoPath: () => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
message?: string;
|
|
error?: string;
|
|
}>;
|
|
setRecordingState: (recording: boolean, recordingId?: number) => Promise<void>;
|
|
discardCursorTelemetry: (recordingId: number) => Promise<void>;
|
|
getCursorTelemetry: (videoPath?: string) => Promise<{
|
|
success: boolean;
|
|
samples: CursorTelemetryPoint[];
|
|
clicks: number[];
|
|
message?: string;
|
|
error?: string;
|
|
}>;
|
|
onStopRecordingFromTray: (callback: () => void) => () => void;
|
|
openExternalUrl: (url: string) => Promise<{ success: boolean; error?: string }>;
|
|
saveExportedVideo: (
|
|
videoData: ArrayBuffer,
|
|
fileName: string,
|
|
) => Promise<{ success: boolean; path?: string; message?: string; canceled?: boolean }>;
|
|
openVideoFilePicker: () => Promise<{ success: boolean; path?: string; canceled?: boolean }>;
|
|
setCurrentVideoPath: (path: string) => Promise<{ success: boolean }>;
|
|
setCurrentRecordingSession: (
|
|
session: import("../src/lib/recordingSession").RecordingSession | null,
|
|
) => Promise<{
|
|
success: boolean;
|
|
session?: import("../src/lib/recordingSession").RecordingSession;
|
|
}>;
|
|
getCurrentVideoPath: () => Promise<{ success: boolean; path?: string }>;
|
|
getCurrentRecordingSession: () => Promise<{
|
|
success: boolean;
|
|
session?: import("../src/lib/recordingSession").RecordingSession;
|
|
}>;
|
|
readBinaryFile: (filePath: string) => Promise<{
|
|
success: boolean;
|
|
data?: ArrayBuffer;
|
|
path?: string;
|
|
message?: string;
|
|
error?: string;
|
|
}>;
|
|
clearCurrentVideoPath: () => Promise<{ success: boolean }>;
|
|
saveProjectFile: (
|
|
projectData: unknown,
|
|
suggestedName?: string,
|
|
existingProjectPath?: string,
|
|
) => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
message?: string;
|
|
canceled?: boolean;
|
|
error?: string;
|
|
}>;
|
|
loadProjectFile: () => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
project?: unknown;
|
|
message?: string;
|
|
canceled?: boolean;
|
|
error?: string;
|
|
}>;
|
|
loadCurrentProjectFile: () => Promise<{
|
|
success: boolean;
|
|
path?: string;
|
|
project?: unknown;
|
|
message?: string;
|
|
canceled?: boolean;
|
|
error?: string;
|
|
}>;
|
|
onMenuLoadProject: (callback: () => void) => () => void;
|
|
onMenuSaveProject: (callback: () => void) => () => void;
|
|
onMenuSaveProjectAs: (callback: () => void) => () => void;
|
|
getPlatform: () => Promise<string>;
|
|
revealInFolder: (
|
|
filePath: string,
|
|
) => Promise<{ success: boolean; error?: string; message?: string }>;
|
|
getShortcuts: () => Promise<Record<string, unknown> | null>;
|
|
saveShortcuts: (shortcuts: unknown) => Promise<{ success: boolean; error?: string }>;
|
|
hudOverlayHide: () => void;
|
|
hudOverlayClose: () => void;
|
|
showCountdownOverlay: (value: number, runId: number) => Promise<void>;
|
|
setCountdownOverlayValue: (value: number, runId: number) => Promise<void>;
|
|
hideCountdownOverlay: (runId: number) => Promise<void>;
|
|
onCountdownOverlayValue: (callback: (value: number | null) => void) => () => void;
|
|
setMicrophoneExpanded: (expanded: boolean) => void;
|
|
setHasUnsavedChanges: (hasChanges: boolean) => void;
|
|
onRequestSaveBeforeClose: (callback: () => Promise<boolean> | boolean) => () => void;
|
|
setLocale: (locale: string) => Promise<void>;
|
|
};
|
|
}
|
|
|
|
interface ProcessedDesktopSource {
|
|
id: string;
|
|
name: string;
|
|
display_id: string;
|
|
thumbnail: string | null;
|
|
appIcon: string | null;
|
|
}
|
|
|
|
interface CursorTelemetryPoint {
|
|
timeMs: number;
|
|
cx: number;
|
|
cy: number;
|
|
}
|