import type { OverlayHostedModal } from '../../shared/ipc/contracts'; export function openOverlayHostedModal( deps: { ensureOverlayStartupPrereqs: () => void; ensureOverlayWindowsReadyForVisibilityActions: () => void; sendToActiveOverlayWindow: ( channel: string, payload?: unknown, runtimeOptions?: { restoreOnModalClose?: OverlayHostedModal; preferModalWindow?: boolean; }, ) => boolean; }, input: { channel: string; modal: OverlayHostedModal; payload?: unknown; preferModalWindow?: boolean; }, ): boolean { deps.ensureOverlayStartupPrereqs(); deps.ensureOverlayWindowsReadyForVisibilityActions(); return deps.sendToActiveOverlayWindow(input.channel, input.payload, { restoreOnModalClose: input.modal, preferModalWindow: input.preferModalWindow, }); } export async function retryOverlayModalOpen( deps: { waitForModalOpen: (modal: OverlayHostedModal, timeoutMs: number) => Promise; logWarn: (message: string) => void; }, input: { modal: OverlayHostedModal; timeoutMs: number; retryWarning: string; sendOpen: () => boolean; signal?: AbortSignal; }, ): Promise { if (input.signal?.aborted || !input.sendOpen()) { return false; } const opened = await deps.waitForModalOpen(input.modal, input.timeoutMs); if (input.signal?.aborted) return false; if (opened) { return true; } deps.logWarn(input.retryWarning); if (input.signal?.aborted || !input.sendOpen()) { return false; } const retryOpened = await deps.waitForModalOpen(input.modal, input.timeoutMs); return !input.signal?.aborted && retryOpened; }