import type { NormalizedBleError } from '../backend-contract/errors.js'; import type { StreamTerminalNotice } from '../backend-contract/streams.js'; import type { ScanStateEvent } from './ble-manager.js'; type ScanSourceTerminalError = NormalizedBleError | null | undefined; type ScanSourceTerminalObserver = (reason: StreamTerminalNotice['reason'], error?: ScanSourceTerminalError) => void; export interface ScanStateController { readonly stream: AsyncIterable; emit(event: ScanStateEvent): void; close(): void; } /** * Projects a source/host terminal into public scan state. * * This is ended delivery, not physical cleanup: `source-failed`, * `connection-lost`, and `overflow` become `failed`; ordinary close becomes * `stopped`. `stop()` still reports remaining native/session cleanup. */ export declare function projectScanDeliveryTerminal(reason: StreamTerminalNotice['reason']): ScanStateEvent; /** Observes producer-side terminal methods so state updates without an iterator. */ export declare function bindScanSourceTerminal(source: object, onTerminal: ScanSourceTerminalObserver): void; export declare function createScanState(): ScanStateController; export {}; //# sourceMappingURL=scan-state.d.ts.map