import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import { DeviceType } from '../device/device-type.js';
/**
 * A single device snapshot returned as base64 JPEG/PNG.
 *
 * Shared with the `snapshot-provider` collection cap — the orchestrator
 * receives the same shape from each native provider and from the
 * broker-based fallback.
 */
declare const SnapshotImageSchema: z.ZodObject<{
    base64: z.ZodString;
    contentType: z.ZodString;
}, z.core.$strip>;
/**
 * snapshot — device-scoped capability for camera image capture.
 *
 * Two kinds of providers coexist behind this cap name:
 *
 *   - **Native** providers (kind:'native'): registered per-device by
 *     device-driver addons (RtspCamera, OnvifCamera, …) via
 *     `DeviceContext.registerNativeCap`. Each knows how to fetch a frame
 *     straight from the camera (HTTP snapshot URL, ONVIF action, etc.).
 *
 *   - **Wrapper** providers (kind:'wrapper'): register as a system
 *     provider (SnapshotAddon in `@camstack/core/builtins/snapshot`). The
 *     wrapper owns the cache and invokes the native via
 *     `ctx.getNativeProvider(snapshotCapability, deviceId)` on miss.
 *
 * Device-scoped routing: callers use `ctx.fetchDevice(id).snapshot.*`;
 * the DeviceProxy auto-injects `deviceId` + `nodeId` and dispatches to
 * the provider currently active for that device (wrapper wins when
 * activated via `setWrapperActive`, otherwise the native).
 */
/**
 * Live readable snapshot state — diagnostic info that a consumer can
 * pull to know when the last image was captured, how stale the cache
 * is, and which stream was used. Distinct from `getSnapshot` which
 * returns the JPEG itself.
 */
declare const SnapshotStatusSchema: z.ZodObject<{
    lastCapturedAt: z.ZodNullable<z.ZodNumber>;
    cacheAgeMs: z.ZodNullable<z.ZodNumber>;
    lastBytes: z.ZodNullable<z.ZodNumber>;
    lastStreamId: z.ZodNullable<z.ZodString>;
}, z.core.$strip>;
export declare const snapshotCapability: {
    readonly name: "snapshot";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly deviceTypes: readonly [DeviceType.Camera];
    readonly exposesDeviceSettings: true;
    readonly methods: {
        readonly getSnapshot: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
            streamId: z.ZodOptional<z.ZodString>;
            force: z.ZodOptional<z.ZodBoolean>;
        }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
            base64: z.ZodString;
            contentType: z.ZodString;
        }, z.core.$strip>>, import("./capability-definition.js").CapabilityMethodKind>;
        readonly invalidateCache: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
        }, z.core.$strip>, z.ZodVoid, "mutation">;
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            lastCapturedAt: z.ZodNullable<z.ZodNumber>;
            cacheAgeMs: z.ZodNullable<z.ZodNumber>;
            lastBytes: z.ZodNullable<z.ZodNumber>;
            lastStreamId: z.ZodNullable<z.ZodString>;
        }, z.core.$strip>;
        readonly kind: "poll";
    };
};
export type ISnapshotOrchestrator = InferProvider<typeof snapshotCapability>;
export { SnapshotImageSchema, SnapshotStatusSchema };
//# sourceMappingURL=snapshot.cap.d.ts.map