{"version":3,"file":"index.cjs","sources":["finalizationRegistry.js","NonstrictRPC.js","IpcRecordKit.js","Recorder.js","RecordKit.js","Errors.js","WindowLevels.js","WebAudioUtils.js"],"sourcesContent":["export const finalizationRegistry = new FinalizationRegistry(async (destructor) => { await destructor(); });\n//# sourceMappingURL=finalizationRegistry.js.map","import { randomUUID } from \"crypto\";\nimport { finalizationRegistry } from \"./finalizationRegistry.js\";\nexport class NSRPC {\n    logMessages = false;\n    send;\n    responseHandlers = new Map();\n    closureTargets = new Map();\n    terminationError;\n    constructor(send) {\n        this.send = send;\n    }\n    /**\n     * Marks the RPC connection as permanently gone, e.g. because the external process exited.\n     *\n     * All in-flight requests are rejected with the given error and any future request fails\n     * immediately with the same error, instead of waiting forever for a response that can no\n     * longer arrive.\n     */\n    terminate(error) {\n        this.terminationError = error;\n        const pendingHandlers = [...this.responseHandlers.values()];\n        this.responseHandlers.clear();\n        for (const handler of pendingHandlers) {\n            handler.reject(error);\n        }\n    }\n    receive(data) {\n        // TODO: For now we just assume the message is a valid NSRPC message, but we should:\n        // - Check if the nsrpc property is set to a number in the range of 1..<2\n        // - Validate the message against the defined interfaces above\n        let message;\n        try {\n            if (this.logMessages) {\n                console.log(\"RecordKit: [RPC] <\", data.trimEnd());\n            }\n            message = JSON.parse(data);\n        }\n        catch (error) {\n            if (this.logMessages) {\n                console.error(\"RecordKit: [RPC] !! Above message is invalid JSON, will be ignored.\");\n            }\n            return;\n        }\n        if (\"status\" in message) {\n            // This is a response, dispatch it so it can be handled\n            const responseHandler = this.responseHandlers.get(message.id);\n            this.responseHandlers.delete(message.id);\n            if (responseHandler === undefined) {\n                console.error(\"RecordKit: [RPC] !! Got a response for an unknown request.\", message.id);\n                return;\n            }\n            if (\"error\" in message) {\n                responseHandler.reject(message.error);\n            }\n            else {\n                responseHandler.resolve(message.result);\n            }\n        }\n        else {\n            // This is a request\n            const responseBody = this.handleRequest(message);\n            if (responseBody !== undefined) {\n                this.sendResponse(message.id, responseBody);\n            }\n        }\n    }\n    /* Sending helpers */\n    sendMessage(message) {\n        const stringMessage = JSON.stringify(message);\n        if (this.logMessages) {\n            console.log(\"RecordKit: [RPC] >\", stringMessage);\n        }\n        this.send(stringMessage);\n    }\n    sendResponse(id, response) {\n        if (id === undefined) {\n            return;\n        }\n        this.sendMessage({ ...response, nsrpc: 1, id });\n    }\n    async sendRequest(request) {\n        if (this.terminationError !== undefined) {\n            throw this.terminationError;\n        }\n        const id = \"req_\" + randomUUID();\n        const response = new Promise((resolve, reject) => {\n            this.responseHandlers.set(id, { resolve, reject });\n        });\n        this.sendMessage({ ...request, nsrpc: 1, id });\n        return response;\n    }\n    /* Request handling */\n    handleRequest(request) {\n        switch (request.procedure) {\n            case \"init\":\n                return {\n                    status: 501,\n                    error: {\n                        debugDescription: \"Init procedure not implemented.\",\n                        userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n                    },\n                };\n            case \"perform\":\n                if (\"action\" in request) {\n                    return {\n                        status: 501,\n                        error: {\n                            debugDescription: \"Perform procedure for (static) methods not implemented.\",\n                            userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n                        },\n                    };\n                }\n                else {\n                    return this.handleClosureRequest(request);\n                }\n            case \"release\":\n                return {\n                    status: 501,\n                    error: {\n                        debugDescription: \"Release procedure not implemented.\",\n                        userMessage: \"Failed to communicate with external process. (Procedure not implemented)\",\n                    },\n                };\n        }\n    }\n    handleClosureRequest(request) {\n        const handler = this.closureTargets.get(request.target);\n        if (handler === undefined) {\n            return {\n                status: 404,\n                error: {\n                    debugDescription: `Perform target '${request.target}' not found.`,\n                    userMessage: \"Failed to communicate with external process. (Target not found)\",\n                },\n            };\n        }\n        try {\n            const rawresult = handler(request.params ?? {});\n            const result = rawresult === undefined ? undefined : rawresult;\n            return {\n                status: 200,\n                result,\n            };\n        }\n        catch (error) {\n            return {\n                status: 202,\n                // TODO: Would be good to have an error type that we can throw that fills these fields more specifically. (But for now it doesn't matter since this is just communicated back the the CLI and not to the user.)\n                error: {\n                    debugDescription: `${error}`,\n                    userMessage: \"Handler failed to perform request.\",\n                    underlyingError: error,\n                },\n            };\n        }\n    }\n    /* Perform remote procedures */\n    async initialize(args) {\n        await this.sendRequest({\n            target: args.target,\n            type: args.type,\n            params: args.params,\n            procedure: \"init\",\n        });\n        // Register the GC release only after a successful init; registering earlier would later send a\n        // release for a target the external process never knew about.\n        const target = args.target;\n        finalizationRegistry.register(args.lifecycle, () => {\n            // Swallow rejections: the external process may already be gone, in which case there is\n            // nothing left to release.\n            this.release(target).catch(() => { });\n        });\n    }\n    async perform(body) {\n        return await this.sendRequest({\n            ...body,\n            procedure: \"perform\",\n        });\n    }\n    async release(target) {\n        await this.sendRequest({\n            procedure: \"release\",\n            target,\n        });\n    }\n    async manualRelease(target) {\n        await this.sendRequest({\n            procedure: \"manual-release\",\n            target,\n        });\n    }\n    /* Register locally available targets/actions */\n    registerClosure(options) {\n        const target = `target_${options.prefix}_${randomUUID()}`;\n        this.closureTargets.set(target, options.handler);\n        finalizationRegistry.register(options.lifecycle, () => {\n            this.closureTargets.delete(target);\n        });\n        return target;\n    }\n}\n//# sourceMappingURL=NonstrictRPC.js.map","import { spawn } from 'node:child_process';\nimport * as readline from 'readline';\nimport { NSRPC } from \"./NonstrictRPC.js\";\nexport class IpcRecordKit {\n    childProcess;\n    nsrpc;\n    constructor() {\n        this.nsrpc = new NSRPC((message) => this.write(message));\n    }\n    async initialize(recordKitRpcPath, logMessages = false) {\n        if (this.childProcess !== undefined) {\n            throw new Error('RecordKit: [RPC] Already initialized.');\n        }\n        this.nsrpc.logMessages = logMessages;\n        this.childProcess = await new Promise((resolve, reject) => {\n            const childProcess = spawn(recordKitRpcPath, { stdio: ['pipe', 'pipe', logMessages ? 'pipe' : 'ignore'] });\n            childProcess.on('close', (code, signal) => { console.error(`RecordKit: [RPC] Closed with code ${code} and signal ${signal}`); });\n            childProcess.on('error', (error) => { reject(error); });\n            childProcess.on('exit', (code, signal) => { console.error(`RecordKit: [RPC] Exited with code ${code} and signal ${signal}`); });\n            childProcess.on('spawn', () => { resolve(childProcess); });\n        });\n        this.childProcess.on('close', (code, signal) => {\n            // No response can arrive anymore; fail all in-flight and future requests instead of letting\n            // them hang forever.\n            this.nsrpc.terminate(new Error(`RecordKit: [RPC] Process is gone (closed with code ${code} and signal ${signal}).`));\n        });\n        this.childProcess.stdin?.on('error', (error) => {\n            // Without an error listener, a failed write to a dead process would crash Node with an\n            // unhandled 'error' event. The 'close' handler above already fails all requests.\n            console.error(`RecordKit: [RPC] !! Failed to write to RPC process: ${error}`);\n        });\n        const { stdout, stderr } = this.childProcess;\n        if (!stdout) {\n            throw new Error('RecordKit: [RPC] !! No stdout stream on child process.');\n        }\n        readline.createInterface({ input: stdout }).on('line', (line) => {\n            this.nsrpc.receive(line);\n        });\n        if (stderr) {\n            readline.createInterface({ input: stderr }).on('line', (line) => {\n                console.log(`RecordKit: [RPC] Lognoise on stderr: ${line}`);\n            });\n        }\n    }\n    write(message) {\n        const stdin = this.childProcess?.stdin;\n        if (!stdin) {\n            throw new Error('RecordKit: [RPC] !! Missing stdin stream.');\n        }\n        if (stdin.destroyed) {\n            throw new Error('RecordKit: [RPC] !! Process is gone, cannot write to its stdin.');\n        }\n        stdin.write(message + \"\\n\");\n    }\n}\n//# sourceMappingURL=IpcRecordKit.js.map","import { randomUUID } from \"crypto\";\nimport { EventEmitter } from \"events\";\n/**\n * Converts RPC audio buffer data to AudioStreamBuffer format\n * @internal\n */\nfunction convertRPCParamsToAudioStreamBuffer(params) {\n    try {\n        // params is the AudioBufferData directly from Swift\n        const rawAudioBuffer = params;\n        if (!rawAudioBuffer || !Array.isArray(rawAudioBuffer.channelData)) {\n            console.error('RecordKit: Invalid audio buffer received from RPC');\n            return null;\n        }\n        const channelData = [];\n        for (const base64Data of rawAudioBuffer.channelData) {\n            if (typeof base64Data !== 'string') {\n                console.error('RecordKit: Invalid base64 data received');\n                return null;\n            }\n            // Decode base64 to binary data\n            const binaryString = atob(base64Data);\n            const bytes = new Uint8Array(binaryString.length);\n            for (let i = 0; i < binaryString.length; i++) {\n                bytes[i] = binaryString.charCodeAt(i);\n            }\n            // Convert bytes to Float32Array\n            const float32Array = new Float32Array(bytes.buffer);\n            channelData.push(float32Array);\n        }\n        const audioStreamBuffer = {\n            sampleRate: rawAudioBuffer.sampleRate,\n            numberOfChannels: rawAudioBuffer.numberOfChannels,\n            numberOfFrames: rawAudioBuffer.numberOfFrames,\n            channelData: channelData\n        };\n        return audioStreamBuffer;\n    }\n    catch (error) {\n        console.error('RecordKit: Error processing audio stream buffer:', error);\n        return null;\n    }\n}\n/**\n * Registers the per-segment callback of a {@link JSONOutputOptions} (if any) as an RPC closure,\n * replacing the function with the closure target so the options object can be serialized.\n * @internal\n */\nfunction registerJSONOutputSegmentCallback(output, rpc, object, prefix) {\n    if (output && output.output == 'segmented' && output.segmentCallback) {\n        const segmentHandler = output.segmentCallback;\n        output.segmentCallback = rpc.registerClosure({\n            handler: (params) => { segmentHandler(params.path); },\n            prefix,\n            lifecycle: object\n        });\n    }\n}\n/**\n * @group Recording\n */\nexport class Recorder extends EventEmitter {\n    rpc;\n    target;\n    /** @ignore */\n    static async newInstance(rpc, schema) {\n        const target = 'Recorder_' + randomUUID();\n        const object = new Recorder(rpc, target);\n        schema.items.forEach(item => {\n            if (item.type == 'webcam') {\n                if (typeof item.camera != 'string') {\n                    item.camera = item.camera.id;\n                }\n                if (typeof item.microphone != 'string') {\n                    item.microphone = item.microphone.id;\n                }\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'Webcam.onSegment',\n                        lifecycle: object\n                    });\n                }\n            }\n            if (item.type == 'display') {\n                if (typeof item.display != 'number') {\n                    item.display = item.display.id;\n                }\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'Display.onSegment',\n                        lifecycle: object\n                    });\n                }\n                registerJSONOutputSegmentCallback(item.inputEventsOutput, rpc, object, 'Display.onInputEventsSegment');\n            }\n            if (item.type == 'windowBasedCrop') {\n                if (typeof item.window != 'number') {\n                    item.window = item.window.id;\n                }\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'Window.onSegment',\n                        lifecycle: object\n                    });\n                }\n                registerJSONOutputSegmentCallback(item.inputEventsOutput, rpc, object, 'WindowBasedCrop.onInputEventsSegment');\n            }\n            if (item.type == 'desktopIndependentWindow') {\n                if (typeof item.window != 'number') {\n                    item.window = item.window.id;\n                }\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'DesktopIndependentWindow.onSegment',\n                        lifecycle: object\n                    });\n                }\n                registerJSONOutputSegmentCallback(item.inputEventsOutput, rpc, object, 'DesktopIndependentWindow.onInputEventsSegment');\n            }\n            if (item.type == 'appleDeviceStaticOrientation') {\n                if (typeof item.device != 'string') {\n                    item.device = item.device.id;\n                }\n            }\n            if (item.type == 'appleDevice') {\n                if (typeof item.device != 'string') {\n                    item.device = item.device.id;\n                }\n            }\n            if (item.type == 'systemAudio') {\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'SystemAudio.onSegment',\n                        lifecycle: object\n                    });\n                }\n                if (item.output == 'stream' && item.streamCallback) {\n                    const streamHandler = item.streamCallback;\n                    item.streamCallback = rpc.registerClosure({\n                        handler: (params) => {\n                            const audioBuffer = convertRPCParamsToAudioStreamBuffer(params);\n                            if (audioBuffer) {\n                                streamHandler(audioBuffer);\n                            }\n                        },\n                        prefix: 'SystemAudioStream.onAudioBuffer',\n                        lifecycle: object\n                    });\n                }\n            }\n            if (item.type == 'applicationAudio') {\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'ApplicationAudio.onSegment',\n                        lifecycle: object\n                    });\n                }\n                if (item.output == 'stream' && item.streamCallback) {\n                    const streamHandler = item.streamCallback;\n                    item.streamCallback = rpc.registerClosure({\n                        handler: (params) => {\n                            const audioBuffer = convertRPCParamsToAudioStreamBuffer(params);\n                            if (audioBuffer) {\n                                streamHandler(audioBuffer);\n                            }\n                        },\n                        prefix: 'ApplicationAudioStream.onAudioBuffer',\n                        lifecycle: object\n                    });\n                }\n            }\n            if (item.type == 'microphone') {\n                if (typeof item.microphone != 'string') {\n                    item.microphone = item.microphone.id;\n                }\n                if (item.output == 'segmented' && item.segmentCallback) {\n                    const segmentHandler = item.segmentCallback;\n                    item.segmentCallback = rpc.registerClosure({\n                        handler: (params) => { segmentHandler(params.path); },\n                        prefix: 'Microphone.onSegment',\n                        lifecycle: object\n                    });\n                }\n                if (item.output == 'stream' && item.streamCallback) {\n                    const streamHandler = item.streamCallback;\n                    item.streamCallback = rpc.registerClosure({\n                        handler: (params) => {\n                            const audioBuffer = convertRPCParamsToAudioStreamBuffer(params);\n                            if (audioBuffer) {\n                                streamHandler(audioBuffer);\n                            }\n                        },\n                        prefix: 'MicrophoneStream.onAudioBuffer',\n                        lifecycle: object\n                    });\n                }\n            }\n        });\n        const weakRefObject = new WeakRef(object);\n        const onAbortInstance = rpc.registerClosure({\n            handler: (params) => { weakRefObject.deref()?.emit('abort', params); },\n            prefix: 'Recorder.onAbort',\n            lifecycle: object\n        });\n        const onSignalsChangedInstance = rpc.registerClosure({\n            handler: (params) => { weakRefObject.deref()?.emit('signals', params.signals); },\n            prefix: 'Recorder.onSignalsChanged',\n            lifecycle: object\n        });\n        await rpc.initialize({\n            target,\n            type: 'Recorder',\n            params: { schema, onAbortInstance, onSignalsChangedInstance },\n            lifecycle: object\n        });\n        return object;\n    }\n    /** @ignore */\n    constructor(rpc, target) {\n        super();\n        this.rpc = rpc;\n        this.target = target;\n    }\n    /**\n     * Prepares the recording session for instant recording, allocating resources and validating the\n     * configuration.\n     *\n     * Preparing ahead of time lets {@link start} begin recording instantly; without it, starting incurs\n     * a setup delay.\n     *\n     * @returns The expected {@link BundleInfo} describing the file assets that will be produced by this\n     * recording, allowing you to inspect the planned output (filenames, asset types, sizes) before\n     * recording starts.\n     */\n    async prepare() {\n        return await this.rpc.perform({ target: this.target, action: 'prepare' });\n    }\n    /**\n     * Starts recording. If the session was not already {@link prepare}d this performs setup first,\n     * incurring a short delay; call {@link prepare} ahead of time to start instantly.\n     */\n    async start() {\n        await this.rpc.perform({ target: this.target, action: 'start' });\n    }\n    /**\n     * Pauses the recording. The capture hardware remains active so recording can be resumed quickly.\n     *\n     * Call {@link resume} to continue recording, or {@link stop} to finish.\n     */\n    async pause() {\n        await this.rpc.perform({ target: this.target, action: 'pause' });\n    }\n    /**\n     * Resumes a recording that was previously paused with {@link pause}.\n     */\n    async resume() {\n        await this.rpc.perform({ target: this.target, action: 'resume' });\n    }\n    /**\n     * Stops the recording, finalizes the output files, and returns the {@link RecordingResult}\n     * describing the completed bundle. The recorder cannot be reused after stopping.\n     *\n     * @remarks Known limitation: when the recording failed, the returned promise rejects with the\n     * failure but the partial recording result is not available over the RPC bridge (the Swift API\n     * surfaces it as `PartialResultError`). Any partially-written files do remain on disk in the\n     * bundle inside the schema's `output_directory`.\n     */\n    async stop() {\n        return await this.rpc.perform({ target: this.target, action: 'stop' });\n    }\n    /**\n     * Cancels the recording and releases its resources without finalizing output. Use this to discard\n     * an in-progress or prepared recording; call {@link stop} instead to keep the result.\n     */\n    async cancel() {\n        await this.rpc.manualRelease(this.target);\n    }\n}\n//# sourceMappingURL=Recorder.js.map","import { IpcRecordKit } from \"./IpcRecordKit.js\";\nimport { Recorder } from \"./Recorder.js\";\nimport { EventEmitter } from \"events\";\nimport { existsSync } from \"node:fs\";\n/** @internal */\nfunction windowIdOf(window) {\n    return typeof window == 'number' ? window : window.id;\n}\n/** @internal */\nfunction displayIdOf(display) {\n    return display == null ? undefined : (typeof display == 'number' ? display : display.id);\n}\n/** @internal */\nfunction cameraIdOf(camera) {\n    return typeof camera == 'string' ? camera : camera.id;\n}\n/** @internal */\nfunction microphoneIdOf(microphone) {\n    return typeof microphone == 'string' ? microphone : microphone.id;\n}\n/** @internal */\nfunction appleDeviceIdOf(device) {\n    return typeof device == 'string' ? device : device.id;\n}\n/** @internal */\nfunction applicationIdOf(application) {\n    return typeof application == 'number' ? application : application.id;\n}\n/**\n * Entry point for the RecordKit SDK, an instance is available as `recordkit` that can be imported from the module. Do not instantiate this class directly.\n *\n * @groupDescription Discovery\n * Discover the windows and devices that are available to record.\n *\n * @groupDescription Permissions\n * Check and request the apps permission to access the recording devices.\n *\n * @groupDescription Logging\n * Log what's going on to the console for easy debugging and troubleshooting. See the [Logging and Error Handling guide](https://recordkit.dev/guides/logging-and-errors) for more information.\n *\n * @groupDescription Preferred Devices\n * Read and update the user's preferred devices, so you can pre-select sensible defaults in your UI.\n *\n * @groupDescription Window Control\n * Move, resize, center and maximize windows of other applications (requires Accessibility Control permission).\n *\n * @groupDescription Device Control\n * Configure capture devices, such as selecting a camera's active format or fetching an application's icon.\n */\nexport class RecordKit extends EventEmitter {\n    ipcRecordKit = new IpcRecordKit();\n    /** @ignore */\n    constructor() {\n        super();\n    }\n    /**\n     * Initialize the RecordKit SDK.\n     *\n     * ⚠️ Must be called before calling any other RecordKit method.\n     *\n     * @param args\n     */\n    async initialize(args) {\n        let rpcBinaryPath = args.rpcBinaryPath;\n        if (args.fallbackToNodeModules ?? true) {\n            if (!existsSync(rpcBinaryPath)) {\n                rpcBinaryPath = rpcBinaryPath.replace('node_modules/electron/dist/Electron.app/Contents/Resources', 'node_modules/@nonstrict/recordkit/bin');\n                console.error(`RecordKit: [RPC] !! Falling back to RPC binary from node_modules at ${rpcBinaryPath}`);\n            }\n        }\n        await this.ipcRecordKit.initialize(rpcBinaryPath, args.logRpcMessages);\n        const logHandlerInstance = this.ipcRecordKit.nsrpc.registerClosure({\n            handler: (params) => {\n                const message = params;\n                console.log('RecordKit:', message.formattedMessage);\n                this.emit('log', message);\n            },\n            prefix: 'RecordKit.logHandler',\n            lifecycle: this\n        });\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogHandler', params: { logHandlerInstance } });\n        if (args.logLevel) {\n            await this.setLogLevel(args.logLevel);\n        }\n    }\n    /**\n     * Set the global log level. Defaults to `debug`.\n     *\n     * Messages with a lower level than this will be ignored and not passed to any log handlers.\n     *\n     * @group Logging\n     */\n    async setLogLevel(logLevel) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params: { logLevel } });\n    }\n    /**\n     * Overrides the global log level for a specific category. Defaults to the global log level.\n     *\n     * Messages in the given category with a lower level than this will be ignored and not passed to any log handlers.\n     *\n     * @group Logging\n     */\n    async setCategoryLogLevel(params) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Logger', action: 'setLogLevel', params });\n    }\n    /**\n     * A list of Mac displays that can be used for screen recording.\n     *\n     * @group Discovery\n     */\n    async getDisplays() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getDisplays' });\n    }\n    /**\n     * A list of macOS windows that can be used for screen recording.\n     *\n     * @group Discovery\n     */\n    async getWindows() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getWindows' });\n    }\n    /**\n     * A list of cameras that are connected to the system.\n     *\n     * @param params.includeDeskView - Whether to include Desk View cameras in the results\n     * @group Discovery\n     */\n    async getCameras(params) {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getCameras', params: { includeDeskView: params?.includeDeskView ?? false } });\n    }\n    /**\n     * A list of microphones that are connected to the system.\n     *\n     * @group Discovery\n     */\n    async getMicrophones() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getMicrophones' });\n    }\n    /**\n     * A list of iOS devices that are connected to the system.\n     *\n     * @group Discovery\n     */\n    async getAppleDevices() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getAppleDevices' });\n    }\n    /**\n     * A list of currently running applications that can be used for screen or audio recording.\n     *\n     * @group Discovery\n     */\n    async getRunningApplications() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getRunningApplications' });\n    }\n    /**\n     * The user's preferred devices for each source type, ordered most-preferred first.\n     *\n     * RecordKit remembers which devices the user last recorded with (unless disabled via the recorder's\n     * `updatesUserPreferred` setting). Use this to pre-select a sensible default device in your UI.\n     *\n     * @group Preferred Devices\n     */\n    async getUserPreferred() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'UserPreferred', action: 'getPreferred' });\n    }\n    /**\n     * Records the given microphone as the user's most-preferred microphone.\n     *\n     * Call this whenever the user manually selects a microphone, so it can be pre-selected later via\n     * {@link getUserPreferred}. The selection moves to the front of {@link UserPreferred.microphoneIDs}.\n     *\n     * @param microphone - The microphone to prefer, either a {@link Microphone} or its {@link Microphone.id}.\n     * @group Preferred Devices\n     */\n    async updatePreferredMicrophone(microphone) {\n        const id = microphoneIdOf(microphone);\n        await this.ipcRecordKit.nsrpc.perform({ type: 'UserPreferred', action: 'updateMicrophone', params: { id } });\n    }\n    /**\n     * Records the given camera as the user's most-preferred camera.\n     *\n     * Call this whenever the user manually selects a camera, so it can be pre-selected later via\n     * {@link getUserPreferred}. The selection moves to the front of {@link UserPreferred.cameraIDs}.\n     *\n     * @param camera - The camera to prefer, either a {@link Camera} or its {@link Camera.id}.\n     * @group Preferred Devices\n     */\n    async updatePreferredCamera(camera) {\n        const id = cameraIdOf(camera);\n        await this.ipcRecordKit.nsrpc.perform({ type: 'UserPreferred', action: 'updateCamera', params: { id } });\n    }\n    /**\n     * Records the given display as the user's most-preferred display.\n     *\n     * Call this whenever the user manually selects a display, so it can be pre-selected later via\n     * {@link getUserPreferred}. The selection moves to the front of {@link UserPreferred.displayIDs}.\n     *\n     * @param display - The display to prefer, either a {@link Display} or its {@link Display.id}.\n     * @group Preferred Devices\n     */\n    async updatePreferredDisplay(display) {\n        const id = displayIdOf(display);\n        await this.ipcRecordKit.nsrpc.perform({ type: 'UserPreferred', action: 'updateDisplay', params: { id } });\n    }\n    /**\n     * Records the given Apple device as the user's most-preferred Apple device.\n     *\n     * Call this whenever the user manually selects an Apple device, so it can be pre-selected later via\n     * {@link getUserPreferred}. The selection moves to the front of {@link UserPreferred.appleDeviceIDs}.\n     *\n     * @param device - The Apple device to prefer, either an {@link AppleDevice} or its {@link AppleDevice.id}.\n     * @group Preferred Devices\n     */\n    async updatePreferredAppleDevice(device) {\n        const id = appleDeviceIdOf(device);\n        await this.ipcRecordKit.nsrpc.perform({ type: 'UserPreferred', action: 'updateAppleDevice', params: { id } });\n    }\n    /**\n     * Maximizes the given window, resizing it to fill the display's visible area (excluding the menu bar and Dock)\n     * and centering it on that display.\n     *\n     * Requires Accessibility Control permission (see {@link getAccessibilityControlAccess}).\n     *\n     * @remarks\n     * Rejects if the window cannot be maximized — typically because Accessibility permission is missing,\n     * the target display cannot be found, or the window is minimized or closed.\n     *\n     * @param window - The window to maximize, either a {@link Window} or its {@link Window.id}.\n     * @param options.display - The display to maximize onto, either a {@link Display} or its {@link Display.id}. Defaults to the window's current display.\n     * @group Window Control\n     */\n    async maximizeWindow(window, options) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'windowMaximize', params: { window: windowIdOf(window), display: displayIdOf(options?.display) } });\n    }\n    /**\n     * Resizes the given window to the given size (in points), keeping it centered on its display.\n     *\n     * Requires Accessibility Control permission (see {@link getAccessibilityControlAccess}).\n     *\n     * @remarks\n     * The requested size is clipped to the display's visible frame if it would be larger. After resizing,\n     * the window is re-centered so that a window which could not shrink/grow to the requested size still\n     * ends up centered. Rejects if Accessibility permission is missing, the target display cannot be found,\n     * or the window is minimized, closed, or does not support resizing.\n     *\n     * @param window - The window to resize, either a {@link Window} or its {@link Window.id}.\n     * @param size - The new size in points.\n     * @param options.display - The display to center on, either a {@link Display} or its {@link Display.id}. Defaults to the window's current display.\n     * @group Window Control\n     */\n    async resizeWindow(window, size, options) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'windowResize', params: { window: windowIdOf(window), width: size.width, height: size.height, display: displayIdOf(options?.display) } });\n    }\n    /**\n     * Centers the given window within the visible area (excluding the menu bar and Dock) of its display,\n     * keeping its current size.\n     *\n     * Requires Accessibility Control permission (see {@link getAccessibilityControlAccess}).\n     *\n     * @remarks\n     * Rejects if Accessibility permission is missing, the target display cannot be found, or the window is\n     * minimized, closed, or does not support moving.\n     *\n     * @param window - The window to center, either a {@link Window} or its {@link Window.id}.\n     * @param options.display - The display to center on, either a {@link Display} or its {@link Display.id}. Defaults to the window's current display.\n     * @group Window Control\n     */\n    async centerWindow(window, options) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'windowCenter', params: { window: windowIdOf(window), display: displayIdOf(options?.display) } });\n    }\n    /**\n     * Moves the given window so its top-left corner is at the given position (in points, top-left origin).\n     *\n     * Requires Accessibility Control permission (see {@link getAccessibilityControlAccess}).\n     *\n     * @remarks\n     * Rejects if Accessibility permission is missing, or the window is minimized, closed, or does not\n     * support moving.\n     *\n     * @param window - The window to move, either a {@link Window} or its {@link Window.id}.\n     * @param position - The new top-left origin for the window, in points (top-left coordinate space).\n     * @group Window Control\n     */\n    async moveWindow(window, position) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'windowMove', params: { window: windowIdOf(window), x: position.x, y: position.y } });\n    }\n    /**\n     * Selects the camera's active capture format that best matches the given dimensions (in pixels).\n     *\n     * Use this when you want the camera to deliver a specific resolution — typically before recording or\n     * before showing a live preview, so the preview renders at the intended resolution. The format stays\n     * in effect until something else changes it.\n     *\n     * The chosen format is the smallest format whose dimensions are ≥ the target, preferring biplanar YUV\n     * pixel formats, and falling back to the largest available format if nothing meets the target.\n     *\n     * @remarks\n     * Rejects if the camera is unavailable, has no usable video format, or its configuration is locked by\n     * another process.\n     *\n     * @param camera - The camera to configure, either a {@link Camera} or its {@link Camera.id}.\n     * @param dimensions - Target dimensions in pixels.\n     * @group Device Control\n     */\n    async setCameraActiveFormat(camera, dimensions) {\n        await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'cameraSetActiveFormat', params: { camera: cameraIdOf(camera), width: dimensions.width, height: dimensions.height } });\n    }\n    /**\n     * Returns the camera capture format that {@link setCameraActiveFormat} would select for the given\n     * dimensions (in pixels), without applying it. Returns `undefined` if the camera has no suitable format.\n     *\n     * @group Device Control\n     */\n    async getCameraBestFormat(camera, dimensions) {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'cameraBestFormat', params: { camera: cameraIdOf(camera), width: dimensions.width, height: dimensions.height } });\n    }\n    /**\n     * Returns the icon of the given running application as a `data:image/png;base64,...` URL,\n     * usable directly as the `src` of an HTML `<img>` tag.\n     *\n     * @group Device Control\n     */\n    async getApplicationIcon(application) {\n        const id = applicationIdOf(application);\n        const result = await this.ipcRecordKit.nsrpc.perform({ type: 'Recorder', action: 'getApplicationIcon', params: { application: id } });\n        return result.icon;\n    }\n    /**\n     * Indicates if camera can be used.\n     *\n     * Authorization status that indicates whether the user grants the app permission to capture video.\n     *\n     * @group Permissions\n     */\n    async getCameraAuthorizationStatus() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getCameraAuthorizationStatus' });\n    }\n    /**\n     * Indicates if microphone can be used.\n     *\n     * Authorization status that indicates whether the user grants the app permission to capture audio.\n     *\n     * @group Permissions\n     */\n    async getMicrophoneAuthorizationStatus() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getMicrophoneAuthorizationStatus' });\n    }\n    /**\n     * Indicates if screen can be recorded.\n     *\n     * @group Permissions\n     */\n    async getScreenRecordingAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getScreenRecordingAccess' });\n    }\n    /**\n     * Indicates if system audio can be recorded.\n     *\n     * @group Permissions\n     */\n    async getSystemAudioRecordingAccess(options) {\n        return await this.ipcRecordKit.nsrpc.perform({\n            type: 'AuthorizationStatus',\n            action: 'getSystemAudioRecordingAccess',\n            params: {\n                backend: options?.backend ?? 'default'\n            }\n        });\n    }\n    /**\n     * Probes whether system audio can actually be recorded with the given backend by attempting a short silent capture.\n     *\n     * Unlike {@link getSystemAudioRecordingAccess}, which reads the recorded permission state, this verifies the\n     * permission is truly usable, immediately detecting cases where the OS reports a permission as granted but\n     * capture would still fail (e.g. after the user revokes it).\n     *\n     * @remarks If the permission state is still undetermined, this may trigger the system audio permission prompt.\n     * @group Permissions\n     */\n    async probeSystemAudioRecordingAccess(options) {\n        return await this.ipcRecordKit.nsrpc.perform({\n            type: 'AuthorizationStatus',\n            action: 'probeSystemAudioRecordingAccess',\n            params: {\n                backend: options?.backend ?? 'default'\n            }\n        });\n    }\n    /**\n     * Indicates if keystroke events of other apps can be recorded via Input Monitoring.\n     *\n     * @group Permissions\n     */\n    async getInputMonitoringAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getInputMonitoringAccess' });\n    }\n    /**\n     * Indicates if other apps can be controlled via Accessibility.\n     *\n     * @group Permissions\n     */\n    async getAccessibilityControlAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'getAccessibilityControlAccess' });\n    }\n    /**\n     * Requests the user's permission to allow the app to capture the camera.\n     *\n     * Prompts the users if this is the first time requesting access, otherwise immediately returns.\n     *\n     * @returns Boolean value that indicates whether the user granted or denied access to your app.\n     * @group Permissions\n     */\n    async requestCameraAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestCameraAccess' });\n    }\n    /**\n     * Requests the user's permission to allow the app to capture the microphone.\n     *\n     * Prompts the users if this is the first time requesting access, otherwise immediately returns.\n     *\n     * @returns Boolean value that indicates whether the user granted or denied access to your app.\n     * @group Permissions\n     */\n    async requestMicrophoneAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestMicrophoneAccess' });\n    }\n    /**\n     * Requests the user's permission to allow the app to capture the screen.\n     *\n     * Afterwards, the users needs to restart this app, for the permission to become active in the app.\n     *\n     * @group Permissions\n     */\n    async requestScreenRecordingAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestScreenRecordingAccess' });\n    }\n    /**\n     * Requests the user's permission to allow the app to capture system audio.\n     *\n     * Permission path depends on the selected backend:\n     * - `default` and `coreAudio`: system audio capture permission\n     * - `screenCaptureKit`: Screen Recording permission\n     * - `_beta_coreAudio`: deprecated alias for `coreAudio`\n     *\n     * For the `screenCaptureKit` backend the user must restart the app before the granted permission\n     * becomes active. The `default` and `coreAudio` backends return the live granted/denied result\n     * with no restart required (macOS 14.2+).\n     *\n     * @returns Boolean value that indicates whether the user granted or denied access to your app.\n     * @group Permissions\n     */\n    async requestSystemAudioRecordingAccess(options) {\n        return await this.ipcRecordKit.nsrpc.perform({\n            type: 'AuthorizationStatus',\n            action: 'requestSystemAudioRecordingAccess',\n            params: {\n                backend: options?.backend ?? 'default'\n            }\n        });\n    }\n    /**\n     * Requests the users's permission to monitor keystrokes of other apps via Input Monitoring.\n     *\n     * If this is the first time requesting access, this shows dialog that lets th users open System Settings.\n     * In System Settings, the user can allow the app permission to monitor other apps.\n     *\n     * Afterwards, the users needs to restart this app, for the permission to become active in the app.\n     *\n     * @group Permissions\n     */\n    async requestInputMonitoringAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestInputMonitoringAccess' });\n    }\n    /**\n     * Requests the users's permission to control other apps via Accessibility permissions.\n     *\n     * If this is the first time requesting access, this shows dialog that lets th users open System Settings.\n     * In System Settings, the user can allow the app permission to control apps.\n     *\n     * Afterwards, the users needs to restart this app, for the permission to become active in the app.\n     *\n     * @group Permissions\n     */\n    async requestAccessibilityControlAccess() {\n        return await this.ipcRecordKit.nsrpc.perform({ type: 'AuthorizationStatus', action: 'requestAccessibilityControlAccess' });\n    }\n    /**\n     * Creates a {@link Recorder} for the given schema.\n     *\n     * The schema describes what to record (its `items`, e.g. a webcam, display, microphone or system audio),\n     * where to write the resulting RecordKit bundle (`output_directory`), and optional session-wide\n     * {@link RecorderSettings}. Call {@link Recorder.prepare} then {@link Recorder.start} on the returned recorder.\n     *\n     * @remarks The given `schema` is consumed: device/window objects in its `items` are replaced by their IDs and\n     * any callbacks are registered internally. Pass a fresh schema object per call rather than reusing one.\n     *\n     * @group Recording\n     */\n    async createRecorder(schema) {\n        return Recorder.newInstance(this.ipcRecordKit.nsrpc, schema);\n    }\n}\n/** @ignore */\nexport let recordkit = new RecordKit();\n//# sourceMappingURL=RecordKit.js.map","// Error code types mirroring RecordKit's `RKError` / `RKError.Code` Swift enum, JSON-for-JSON, as\n// surfaced over the RPC bridge. `RecordKitError.code` carries the Swift case name (from\n// `RKError.Code.description`) and `RecordKitError.codeNumber` the corresponding `Int` raw value;\n// user-facing text is on `RecordKitError.message`, technical detail on `RecordKitError.debugDescription`.\n// See the RecordKitErrorCode docs below and https://recordkit.dev/guides/logging-and-errors#error-handling\n/**\n * Mapping from each {@link RecordKitErrorCode} name to its numeric raw value.\n *\n * The numbers correspond to the `Int` raw values of the Swift `RKError.Code`\n * enum and to the `RecordKitError.codeNumber` reported over RPC.\n *\n * @group Recording\n */\nexport const RECORDKIT_ERROR_CODE_NUMBERS = {\n    // Configuration Errors\n    invalidLicense: -1001,\n    invalidConfiguration: -1002,\n    // Permission Errors\n    microphonePermissionRequired: -1101,\n    cameraPermissionRequired: -1102,\n    screenRecordingPermissionRequired: -1103,\n    systemAudioPermissionRequired: -1104,\n    // Device Availability Errors\n    microphoneUnavailable: -1201,\n    cameraUnavailable: -1202,\n    displayUnavailable: -1203,\n    windowUnavailable: -1204,\n    systemAudioUnavailable: -1205,\n    appleDeviceUnavailable: -1206,\n    inputRecordingUnavailable: -1207,\n    // Recording State Errors\n    noVideoFramesReceived: -1301,\n    noAudioSamplesReceived: -1302,\n    screenCaptureStoppedLowDiskSpace: -1303,\n    screenCaptureStoppedWithError: -1304,\n    screenCaptureStoppedWithoutError: -1305,\n    insufficientDiskSpace: -1306,\n    // Internal Errors\n    internalError: -1600,\n    uncaughtError: -1601,\n    internalConductorError: -1602,\n    configurationFailed: -1603,\n    configurationNotSupported: -1604,\n    audioFormatError: -1605,\n    videoFormatError: -1606,\n    audioFormatConfigurationFailed: -1607,\n    videoFormatConfigurationFailed: -1608,\n    mediaFormatInitializationFailed: -1609,\n    mediaFormatConfigurationFailed: -1610,\n    audioDeviceInitializationFailed: -1611,\n    audioDeviceConfigurationFailed: -1612,\n    assetWriterFailed: -1613,\n    tccUnavailableError: -1614,\n    // Processing/Operation Errors\n    audioProcessingFailed: -1701,\n    audioBufferProcessingFailed: -1702,\n    audioBufferCreationFailed: -1703,\n    inputEventProcessingFailed: -1704,\n    assetWriterCreationFailed: -1705,\n    fileOperationFailed: -1706,\n    windowOperationFailed: -1707,\n};\n//# sourceMappingURL=Errors.js.map","/**\n * Named macOS window levels, mirroring RecordKit's `RKWindow.Level` Swift type.\n *\n * A {@link Window}'s `level` is a raw integer. macOS assigns windows to a small set of well-known\n * levels; this map lets you compare a window's level against those named values, e.g.\n *\n * ```ts\n * if (window.level === WINDOW_LEVELS.floating) { ... }\n * if (window.level >= WINDOW_LEVELS.mainMenu) { ... } // at or above the menu bar\n * ```\n *\n * Levels are `Comparable` in Swift: a higher number is drawn in front of a lower one. Some names\n * share the same numeric value (e.g. `floating`, `submenu`, `tornOffMenu` are all `3`).\n *\n * @group Discovery\n */\nexport const WINDOW_LEVELS = {\n    baseWindow: -2147483648,\n    minimumWindow: -2147483643,\n    desktopWindow: -2147483623,\n    desktopIconWindow: -2147483603,\n    backstopMenu: -20,\n    normal: 0,\n    floating: 3,\n    submenu: 3,\n    tornOffMenu: 3,\n    modalPanel: 8,\n    utilityWindow: 19,\n    mainMenu: 24,\n    statusBar: 25,\n    popUpMenu: 101,\n    overlayWindow: 102,\n    helpWindow: 200,\n    draggingWindow: 500,\n    screenSaver: 1000,\n    screenSaverWindow: 1000,\n    assistiveTechHighWindow: 1500,\n    cursorWindow: 2147483630,\n    maximumWindow: 2147483631,\n};\n//# sourceMappingURL=WindowLevels.js.map","/**\n * Creates a Web Audio API AudioBuffer from a RecordKit AudioStreamBuffer.\n *\n * This utility converts RecordKit's streaming audio format to the standard Web Audio API format,\n * handling various edge cases and IPC serialization issues that may occur in Electron environments.\n *\n * @param audioStreamBuffer - The RecordKit AudioStreamBuffer to convert\n * @param audioContext - The Web Audio API AudioContext to use for buffer creation\n * @returns The created AudioBuffer, or null if conversion failed\n *\n * @example\n * ```typescript\n * import { createWebAudioBuffer } from '@nonstrict/recordkit';\n *\n * // In your stream callback\n * const streamCallback = (audioBuffer: AudioStreamBuffer) => {\n *   const audioContext = new AudioContext();\n *   const webAudioBuffer = createWebAudioBuffer(audioBuffer, audioContext);\n *\n *   if (webAudioBuffer) {\n *     // Use the buffer with Web Audio API\n *     const source = audioContext.createBufferSource();\n *     source.buffer = webAudioBuffer;\n *     source.connect(audioContext.destination);\n *     source.start();\n *   }\n * };\n * ```\n */\nexport function createWebAudioBuffer(audioStreamBuffer, audioContext) {\n    // Input validation\n    if (!audioStreamBuffer || typeof audioStreamBuffer !== 'object') {\n        return null;\n    }\n    if (!audioContext || typeof audioContext.createBuffer !== 'function') {\n        return null;\n    }\n    try {\n        const { sampleRate, numberOfChannels, numberOfFrames, channelData } = audioStreamBuffer;\n        // Validate required properties\n        if (typeof sampleRate !== 'number' || sampleRate <= 0 || sampleRate > 192000) {\n            return null;\n        }\n        if (typeof numberOfChannels !== 'number' || numberOfChannels <= 0 || numberOfChannels > 32) {\n            return null;\n        }\n        if (typeof numberOfFrames !== 'number' || numberOfFrames <= 0 || numberOfFrames > 1048576) {\n            return null;\n        }\n        if (!Array.isArray(channelData) || channelData.length !== numberOfChannels) {\n            return null;\n        }\n        // Validate channel data arrays\n        for (let i = 0; i < numberOfChannels; i++) {\n            const channel = channelData[i];\n            if (!channel || (!Array.isArray(channel) && !(channel instanceof Float32Array))) {\n                return null;\n            }\n            // Check length matches expected frame count\n            if (channel.length !== numberOfFrames) {\n                return null;\n            }\n        }\n        // Create Web Audio AudioBuffer\n        const audioBuffer = audioContext.createBuffer(numberOfChannels, numberOfFrames, sampleRate);\n        // Copy channel data to AudioBuffer\n        for (let channel = 0; channel < numberOfChannels; channel++) {\n            const outputArray = audioBuffer.getChannelData(channel);\n            const inputArray = channelData[channel];\n            // Handle both Float32Array and regular arrays (from Electron IPC serialization)\n            if (inputArray instanceof Float32Array) {\n                // Direct copy for Float32Array\n                outputArray.set(inputArray);\n            }\n            else if (Array.isArray(inputArray)) {\n                // Convert regular array to Float32Array for better performance\n                const float32Array = new Float32Array(inputArray);\n                outputArray.set(float32Array);\n            }\n            else {\n                // Fallback: manual copy with type conversion\n                for (let i = 0; i < numberOfFrames; i++) {\n                    const sample = inputArray[i];\n                    outputArray[i] = typeof sample === 'number' && isFinite(sample) ? sample : 0;\n                }\n            }\n        }\n        return audioBuffer;\n    }\n    catch (error) {\n        // Return null for any conversion failures - don't throw in streaming contexts\n        return null;\n    }\n}\n/**\n * Computes RMS and peak audio levels from an {@link AudioStreamBuffer}, for rendering a microphone (or\n * system-audio) level meter.\n *\n * Electron has no dedicated microphone-preview component; the supported way to render a live level meter\n * is to use a microphone/system-audio `stream` output and call this helper in your `streamCallback`.\n *\n * @example\n * ```typescript\n * import { computeAudioLevel } from '@nonstrict/recordkit';\n *\n * const streamCallback = (audioBuffer) => {\n *   const { peakDb } = computeAudioLevel(audioBuffer);\n *   meterElement.style.height = `${Math.max(0, 100 + peakDb)}%`; // -100 dB..0 dB -> 0%..100%\n * };\n * ```\n *\n * @group Recording\n */\nexport function computeAudioLevel(audioStreamBuffer) {\n    let sumSquares = 0;\n    let peak = 0;\n    let count = 0;\n    for (const channel of audioStreamBuffer.channelData) {\n        for (let i = 0; i < channel.length; i++) {\n            const sample = channel[i];\n            sumSquares += sample * sample;\n            const abs = Math.abs(sample);\n            if (abs > peak)\n                peak = abs;\n            count++;\n        }\n    }\n    const rms = count > 0 ? Math.sqrt(sumSquares / count) : 0;\n    const toDb = (value) => value > 0 ? 20 * Math.log10(value) : -Infinity;\n    return { rms, peak, rmsDb: toDb(rms), peakDb: toDb(peak) };\n}\n//# sourceMappingURL=WebAudioUtils.js.map"],"names":["randomUUID","spawn","readline","EventEmitter","existsSync"],"mappings":"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"}