import { z } from 'zod';
import { type InferProvider } from './capability-definition.js';
import { DeviceType } from '../device/device-type.js';
/**
 * camera-credentials — device-scoped cap exposing the camera's network
 * + auth surface in a vendor-neutral shape.
 *
 * Why it exists: cross-vendor wrappers (the planned ONVIF generic addon
 * for PTZ / intercom / events; future homekit / mqtt bridges) need the
 * camera's IP + port + creds without each wrapper re-implementing
 * vendor-specific config-blob extraction. With this cap, every camera
 * provider returns a uniform CameraCredentials and consumers stay
 * vendor-agnostic.
 *
 * Implementations:
 *   - Each camera-providing addon registers this cap natively per
 *     device (Reolink, Hikvision, RTSP, Frigate, ONVIF self).
 *   - Returns a snapshot from the persisted device config blob — no
 *     extra round-trip to the camera, no probing.
 *   - The cap is admin-only (`auth: 'admin'`) — credentials must not
 *     leak through user-scoped paths.
 *
 * Sensitive data handling:
 *   - getCredentials returns the full snapshot to admin callers only.
 *   - Wrappers are expected to use the value to construct a per-call
 *     client and NOT to log / event-bus-emit the password field.
 *   - The cap status payload (mirrored to runtime-state) carries
 *     non-sensitive metadata only — host + ports + protocol hints. The
 *     password / username live on `getCredentials` exclusively.
 *
 * See `docs/onvif-generic-addon-plan.md` for the consuming wrapper
 * design.
 */
export declare const CameraCredentialsSchema: z.ZodObject<{
    host: z.ZodString;
    port: z.ZodOptional<z.ZodNumber>;
    onvifPort: z.ZodOptional<z.ZodNumber>;
    rtspPort: z.ZodOptional<z.ZodNumber>;
    https: z.ZodOptional<z.ZodBoolean>;
    username: z.ZodOptional<z.ZodString>;
    password: z.ZodOptional<z.ZodString>;
    onvifProfile: z.ZodOptional<z.ZodString>;
}, z.core.$strip>;
export type CameraCredentials = z.infer<typeof CameraCredentialsSchema>;
/**
 * Non-sensitive camera-credentials status — host + ports + protocol
 * hints only. Mirrors what shows up in the bindings UI / device
 * aggregate. The full credentials (with password) are exposed only via
 * `getCredentials` to admin callers.
 */
export declare const CameraCredentialsStatusSchema: z.ZodObject<{
    host: z.ZodString;
    port: z.ZodNullable<z.ZodNumber>;
    onvifPort: z.ZodNullable<z.ZodNumber>;
    rtspPort: z.ZodNullable<z.ZodNumber>;
    https: z.ZodNullable<z.ZodBoolean>;
    hasUsername: z.ZodBoolean;
    hasPassword: z.ZodBoolean;
    onvifProfile: z.ZodNullable<z.ZodString>;
}, z.core.$strip>;
export type CameraCredentialsStatus = z.infer<typeof CameraCredentialsStatusSchema>;
export declare const cameraCredentialsCapability: {
    readonly name: "camera-credentials";
    readonly scope: "device";
    readonly mode: "singleton";
    readonly deviceTypes: readonly [DeviceType.Camera];
    readonly methods: {
        /**
         * Return the camera's full credential bundle for admin consumers.
         * Each provider implementation returns a snapshot of its persisted
         * config — no I/O to the camera. Returns null when the device is
         * not owned by this addon (deviceId mismatch).
         */
        readonly getCredentials: import("./capability-definition.js").CapabilityMethodSchema<z.ZodObject<{
            deviceId: z.ZodNumber;
        }, z.core.$strip>, z.ZodNullable<z.ZodObject<{
            host: z.ZodString;
            port: z.ZodOptional<z.ZodNumber>;
            onvifPort: z.ZodOptional<z.ZodNumber>;
            rtspPort: z.ZodOptional<z.ZodNumber>;
            https: z.ZodOptional<z.ZodBoolean>;
            username: z.ZodOptional<z.ZodString>;
            password: z.ZodOptional<z.ZodString>;
            onvifProfile: z.ZodOptional<z.ZodString>;
        }, z.core.$strip>>, "query">;
    };
    readonly status: {
        readonly schema: z.ZodObject<{
            host: z.ZodString;
            port: z.ZodNullable<z.ZodNumber>;
            onvifPort: z.ZodNullable<z.ZodNumber>;
            rtspPort: z.ZodNullable<z.ZodNumber>;
            https: z.ZodNullable<z.ZodBoolean>;
            hasUsername: z.ZodBoolean;
            hasPassword: z.ZodBoolean;
            onvifProfile: z.ZodNullable<z.ZodString>;
        }, z.core.$strip>;
        readonly kind: "command-driven";
    };
};
export type ICameraCredentialsProvider = InferProvider<typeof cameraCredentialsCapability>;
//# sourceMappingURL=camera-credentials.cap.d.ts.map