import type { AccessGrant } from "@opengeni/contracts"; import type { ApiRouteDeps } from "@opengeni/core"; /** * Keep one durable interaction operation—and its sandbox holder when present— * live while a bounded controller mutation is in flight. Browser profile * capture/restore can legitimately take minutes; without this pulse a lifecycle * reaper cannot distinguish that request from a caller that disappeared. */ export declare function withInteractionHolderHeartbeat(deps: ApiRouteDeps, input: { grant: AccessGrant; workspaceId: string; sandboxGroupId: string | null; holderId: string; operationId: string; resourceId: string; controllerGeneration: string; }, run: () => Promise): Promise;