import { z } from "zod";
export declare const idSchema: z.ZodString;
export type Id = z.infer<typeof idSchema>;
export declare const emailSchema: z.ZodString;
export declare const emojiSchema: z.ZodString;
/** Rôle dans la famille — source unique consommée par serveur et mobile. */
export declare const roleSchema: z.ZodEnum<["admin", "coadmin", "viewer"]>;
export type Role = z.infer<typeof roleSchema>;
/**
 * Droits d'un viewer : la visu est toujours acquise (« view »), les options
 * + Réactions / + Téléchargement sont cumulables (choix multiple).
 * `full` = les deux options (ancien statut plein). Réglé uniquement sur les
 * viewers — les gestionnaires sont toujours en `full` implicitement.
 */
export declare const permissionSchema: z.ZodEnum<["full", "download", "reactions", "view"]>;
export type Permission = z.infer<typeof permissionSchema>;
/** `true` si `r` vaut au moins `min` dans la hiérarchie viewer < coadmin < admin. */
export declare const hasRole: (r: Role, min: Role) => boolean;
/** admin OU coadmin — gère la famille (réglages, invitations, médias…). */
export declare const canManage: (r: Role) => boolean;
/**
 * Peut télécharger / partager un média. Les gestionnaires oui, les viewers
 * uniquement si l'option « + Téléchargement » est active (`download`/`full`).
 */
export declare const canDownload: (r: Role, p: Permission) => boolean;
/**
 * Peut réagir / commenter. Les gestionnaires oui, les viewers uniquement si
 * l'option « + Réactions » est active (`reactions`/`full`).
 */
export declare const canSocial: (r: Role, p: Permission) => boolean;
export declare const authTokenPairSchema: z.ZodObject<{
    accessToken: z.ZodString;
    refreshToken: z.ZodString;
}, "strip", z.ZodTypeAny, {
    accessToken: string;
    refreshToken: string;
}, {
    accessToken: string;
    refreshToken: string;
}>;
export type AuthTokenPair = z.infer<typeof authTokenPairSchema>;
export declare const userSchema: z.ZodObject<{
    id: z.ZodString;
    email: z.ZodNullable<z.ZodString>;
    displayName: z.ZodString;
    createdAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    id: string;
    email: string | null;
    displayName: string;
    createdAt: string;
}, {
    id: string;
    email: string | null;
    displayName: string;
    createdAt: string;
}>;
export type User = z.infer<typeof userSchema>;
export declare const familySchema: z.ZodObject<{
    id: z.ZodString;
    name: z.ZodString;
    createdAt: z.ZodString;
    role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
    /** Statut du membre courant dans cette famille (réglé sur les viewers). */
    permission: z.ZodEnum<["full", "download", "reactions", "view"]>;
    /** Réglages famille (posés par admin/coadmin) — réactions & commentaires. */
    reactionsEnabled: z.ZodBoolean;
    commentsEnabled: z.ZodBoolean;
    /** Créateur de la famille (permet de dériver isOwner côté client). */
    createdBy: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    createdAt: string;
    name: string;
    role: "admin" | "coadmin" | "viewer";
    permission: "full" | "download" | "reactions" | "view";
    reactionsEnabled: boolean;
    commentsEnabled: boolean;
    createdBy: string | null;
}, {
    id: string;
    createdAt: string;
    name: string;
    role: "admin" | "coadmin" | "viewer";
    permission: "full" | "download" | "reactions" | "view";
    reactionsEnabled: boolean;
    commentsEnabled: boolean;
    createdBy: string | null;
}>;
export type Family = z.infer<typeof familySchema>;
export declare const registerRequestSchema: z.ZodObject<{
    email: z.ZodString;
    password: z.ZodString;
    displayName: z.ZodString;
    familyName: z.ZodString;
}, "strip", z.ZodTypeAny, {
    email: string;
    displayName: string;
    password: string;
    familyName: string;
}, {
    email: string;
    displayName: string;
    password: string;
    familyName: string;
}>;
export type RegisterRequest = z.infer<typeof registerRequestSchema>;
export declare const loginRequestSchema: z.ZodObject<{
    email: z.ZodString;
    password: z.ZodString;
}, "strip", z.ZodTypeAny, {
    email: string;
    password: string;
}, {
    email: string;
    password: string;
}>;
export type LoginRequest = z.infer<typeof loginRequestSchema>;
export declare const forgotPasswordRequestSchema: z.ZodObject<{
    email: z.ZodString;
}, "strip", z.ZodTypeAny, {
    email: string;
}, {
    email: string;
}>;
export type ForgotPasswordRequest = z.infer<typeof forgotPasswordRequestSchema>;
/** Renvoie l'URL du Nextcloud familial à prouver — 404 générique sinon. */
export declare const forgotPasswordResponseSchema: z.ZodObject<{
    baseUrl: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
}, {
    baseUrl: string;
}>;
export type ForgotPasswordResponse = z.infer<typeof forgotPasswordResponseSchema>;
/** Étape 1 du relais : l'URL doit correspondre à la connexion stockée (anti-SSRF). */
export declare const forgotPasswordLoginFlowStartRequestSchema: z.ZodObject<{
    email: z.ZodString;
    baseUrl: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    email: string;
}, {
    baseUrl: string;
    email: string;
}>;
export type ForgotPasswordLoginFlowStartRequest = z.infer<typeof forgotPasswordLoginFlowStartRequestSchema>;
/** Étape 2 du relais : à la validation, renvoie un jeton de reset à usage unique. */
export declare const forgotPasswordLoginFlowPollRequestSchema: z.ZodObject<{
    email: z.ZodString;
    baseUrl: z.ZodString;
    endpoint: z.ZodString;
    token: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    email: string;
    endpoint: string;
    token: string;
}, {
    baseUrl: string;
    email: string;
    endpoint: string;
    token: string;
}>;
export type ForgotPasswordLoginFlowPollRequest = z.infer<typeof forgotPasswordLoginFlowPollRequestSchema>;
export declare const resetPasswordRequestSchema: z.ZodObject<{
    resetToken: z.ZodString;
    password: z.ZodString;
}, "strip", z.ZodTypeAny, {
    password: string;
    resetToken: string;
}, {
    password: string;
    resetToken: string;
}>;
export type ResetPasswordRequest = z.infer<typeof resetPasswordRequestSchema>;
export declare const refreshRequestSchema: z.ZodObject<{
    refreshToken: z.ZodString;
}, "strip", z.ZodTypeAny, {
    refreshToken: string;
}, {
    refreshToken: string;
}>;
export type RefreshRequest = z.infer<typeof refreshRequestSchema>;
export declare const logoutRequestSchema: z.ZodObject<{
    refreshToken: z.ZodString;
}, "strip", z.ZodTypeAny, {
    refreshToken: string;
}, {
    refreshToken: string;
}>;
export type LogoutRequest = z.infer<typeof logoutRequestSchema>;
export declare const authResponseSchema: z.ZodObject<{
    user: z.ZodObject<{
        id: z.ZodString;
        email: z.ZodNullable<z.ZodString>;
        displayName: z.ZodString;
        createdAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }>;
    families: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        name: z.ZodString;
        createdAt: z.ZodString;
        role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
        /** Statut du membre courant dans cette famille (réglé sur les viewers). */
        permission: z.ZodEnum<["full", "download", "reactions", "view"]>;
        /** Réglages famille (posés par admin/coadmin) — réactions & commentaires. */
        reactionsEnabled: z.ZodBoolean;
        commentsEnabled: z.ZodBoolean;
        /** Créateur de la famille (permet de dériver isOwner côté client). */
        createdBy: z.ZodNullable<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }>, "many">;
    tokens: z.ZodObject<{
        accessToken: z.ZodString;
        refreshToken: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        accessToken: string;
        refreshToken: string;
    }, {
        accessToken: string;
        refreshToken: string;
    }>;
}, "strip", z.ZodTypeAny, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    families: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }[];
    tokens: {
        accessToken: string;
        refreshToken: string;
    };
}, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    families: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }[];
    tokens: {
        accessToken: string;
        refreshToken: string;
    };
}>;
export type AuthResponse = z.infer<typeof authResponseSchema>;
export declare const meResponseSchema: z.ZodObject<{
    user: z.ZodObject<{
        id: z.ZodString;
        email: z.ZodNullable<z.ZodString>;
        displayName: z.ZodString;
        createdAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }>;
    families: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        name: z.ZodString;
        createdAt: z.ZodString;
        role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
        /** Statut du membre courant dans cette famille (réglé sur les viewers). */
        permission: z.ZodEnum<["full", "download", "reactions", "view"]>;
        /** Réglages famille (posés par admin/coadmin) — réactions & commentaires. */
        reactionsEnabled: z.ZodBoolean;
        commentsEnabled: z.ZodBoolean;
        /** Créateur de la famille (permet de dériver isOwner côté client). */
        createdBy: z.ZodNullable<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }>, "many">;
}, "strip", z.ZodTypeAny, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    families: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }[];
}, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    families: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }[];
}>;
export type MeResponse = z.infer<typeof meResponseSchema>;
export declare const familyMemberSchema: z.ZodObject<{
    userId: z.ZodString;
    displayName: z.ZodString;
    role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
    permission: z.ZodEnum<["full", "download", "reactions", "view"]>;
    /** Le membre est le créateur de la famille (intouchable). */
    isOwner: z.ZodBoolean;
    joinedAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    displayName: string;
    role: "admin" | "coadmin" | "viewer";
    permission: "full" | "download" | "reactions" | "view";
    userId: string;
    isOwner: boolean;
    joinedAt: string;
}, {
    displayName: string;
    role: "admin" | "coadmin" | "viewer";
    permission: "full" | "download" | "reactions" | "view";
    userId: string;
    isOwner: boolean;
    joinedAt: string;
}>;
export type FamilyMember = z.infer<typeof familyMemberSchema>;
/** Corps de PATCH /families/:familyId/members/:userId. */
export declare const updateMemberRequestSchema: z.ZodObject<{
    role: z.ZodOptional<z.ZodEnum<["admin", "coadmin", "viewer"]>>;
    permission: z.ZodOptional<z.ZodEnum<["full", "download", "reactions", "view"]>>;
}, "strip", z.ZodTypeAny, {
    role?: "admin" | "coadmin" | "viewer" | undefined;
    permission?: "full" | "download" | "reactions" | "view" | undefined;
}, {
    role?: "admin" | "coadmin" | "viewer" | undefined;
    permission?: "full" | "download" | "reactions" | "view" | undefined;
}>;
export type UpdateMemberRequest = z.infer<typeof updateMemberRequestSchema>;
/** Corps de PATCH /families/:familyId/social (réglages famille). */
export declare const updateSocialSettingsRequestSchema: z.ZodObject<{
    reactionsEnabled: z.ZodOptional<z.ZodBoolean>;
    commentsEnabled: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    reactionsEnabled?: boolean | undefined;
    commentsEnabled?: boolean | undefined;
}, {
    reactionsEnabled?: boolean | undefined;
    commentsEnabled?: boolean | undefined;
}>;
export type UpdateSocialSettingsRequest = z.infer<typeof updateSocialSettingsRequestSchema>;
/** Préférences de notification du membre courant. */
export declare const notificationSettingsSchema: z.ZodObject<{
    newMedia: z.ZodBoolean;
    comments: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    newMedia: boolean;
    comments: boolean;
}, {
    newMedia: boolean;
    comments: boolean;
}>;
export type NotificationSettings = z.infer<typeof notificationSettingsSchema>;
export declare const updateNotificationSettingsRequestSchema: z.ZodObject<{
    newMedia: z.ZodOptional<z.ZodBoolean>;
    comments: z.ZodOptional<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    newMedia?: boolean | undefined;
    comments?: boolean | undefined;
}, {
    newMedia?: boolean | undefined;
    comments?: boolean | undefined;
}>;
export type UpdateNotificationSettingsRequest = z.infer<typeof updateNotificationSettingsRequestSchema>;
export declare const createFamilyRequestSchema: z.ZodObject<{
    name: z.ZodString;
}, "strip", z.ZodTypeAny, {
    name: string;
}, {
    name: string;
}>;
export type CreateFamilyRequest = z.infer<typeof createFamilyRequestSchema>;
export declare const invitationCodeSchema: z.ZodString;
export declare const createInvitationRequestSchema: z.ZodObject<{
    role: z.ZodDefault<z.ZodEnum<["admin", "coadmin", "viewer"]>>;
    maxUses: z.ZodDefault<z.ZodNumber>;
    expiresInDays: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    role: "admin" | "coadmin" | "viewer";
    maxUses: number;
    expiresInDays: number;
}, {
    role?: "admin" | "coadmin" | "viewer" | undefined;
    maxUses?: number | undefined;
    expiresInDays?: number | undefined;
}>;
export type CreateInvitationRequest = z.infer<typeof createInvitationRequestSchema>;
export declare const invitationSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
    code: z.ZodString;
    expiresAt: z.ZodString;
    maxUses: z.ZodNumber;
    usedCount: z.ZodNumber;
    revokedAt: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    code: string;
    id: string;
    role: "admin" | "coadmin" | "viewer";
    maxUses: number;
    familyId: string;
    expiresAt: string;
    usedCount: number;
    revokedAt: string | null;
}, {
    code: string;
    id: string;
    role: "admin" | "coadmin" | "viewer";
    maxUses: number;
    familyId: string;
    expiresAt: string;
    usedCount: number;
    revokedAt: string | null;
}>;
export type Invitation = z.infer<typeof invitationSchema>;
export declare const joinRequestSchema: z.ZodObject<{
    code: z.ZodString;
    displayName: z.ZodString;
}, "strip", z.ZodTypeAny, {
    code: string;
    displayName: string;
}, {
    code: string;
    displayName: string;
}>;
export type JoinRequest = z.infer<typeof joinRequestSchema>;
export declare const joinResponseSchema: z.ZodObject<{
    user: z.ZodObject<{
        id: z.ZodString;
        email: z.ZodNullable<z.ZodString>;
        displayName: z.ZodString;
        createdAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }, {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    }>;
    family: z.ZodObject<{
        id: z.ZodString;
        name: z.ZodString;
        createdAt: z.ZodString;
        role: z.ZodEnum<["admin", "coadmin", "viewer"]>;
        /** Statut du membre courant dans cette famille (réglé sur les viewers). */
        permission: z.ZodEnum<["full", "download", "reactions", "view"]>;
        /** Réglages famille (posés par admin/coadmin) — réactions & commentaires. */
        reactionsEnabled: z.ZodBoolean;
        commentsEnabled: z.ZodBoolean;
        /** Créateur de la famille (permet de dériver isOwner côté client). */
        createdBy: z.ZodNullable<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }, {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    }>;
    tokens: z.ZodObject<{
        accessToken: z.ZodString;
        refreshToken: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        accessToken: string;
        refreshToken: string;
    }, {
        accessToken: string;
        refreshToken: string;
    }>;
}, "strip", z.ZodTypeAny, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    tokens: {
        accessToken: string;
        refreshToken: string;
    };
    family: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    };
}, {
    user: {
        id: string;
        email: string | null;
        displayName: string;
        createdAt: string;
    };
    tokens: {
        accessToken: string;
        refreshToken: string;
    };
    family: {
        id: string;
        createdAt: string;
        name: string;
        role: "admin" | "coadmin" | "viewer";
        permission: "full" | "download" | "reactions" | "view";
        reactionsEnabled: boolean;
        commentsEnabled: boolean;
        createdBy: string | null;
    };
}>;
export type JoinResponse = z.infer<typeof joinResponseSchema>;
export declare const connectionStatusSchema: z.ZodEnum<["active", "needs_reauth", "error"]>;
export type ConnectionStatus = z.infer<typeof connectionStatusSchema>;
export declare const nextcloudLoginV2StartSchema: z.ZodObject<{
    baseUrl: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
}, {
    baseUrl: string;
}>;
export type NextcloudLoginV2Start = z.infer<typeof nextcloudLoginV2StartSchema>;
export declare const nextcloudLoginV2ResponseSchema: z.ZodObject<{
    login: z.ZodString;
    poll: z.ZodObject<{
        token: z.ZodString;
        endpoint: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        endpoint: string;
        token: string;
    }, {
        endpoint: string;
        token: string;
    }>;
}, "strip", z.ZodTypeAny, {
    login: string;
    poll: {
        endpoint: string;
        token: string;
    };
}, {
    login: string;
    poll: {
        endpoint: string;
        token: string;
    };
}>;
export type NextcloudLoginV2Response = z.infer<typeof nextcloudLoginV2ResponseSchema>;
export declare const nextcloudLoginV2PollSchema: z.ZodObject<{
    server: z.ZodString;
    loginName: z.ZodString;
    appPassword: z.ZodString;
}, "strip", z.ZodTypeAny, {
    loginName: string;
    appPassword: string;
    server: string;
}, {
    loginName: string;
    appPassword: string;
    server: string;
}>;
export type NextcloudLoginV2Poll = z.infer<typeof nextcloudLoginV2PollSchema>;
/** Relaie du poll : l'endpoint vient de la réponse start (même origine). */
export declare const nextcloudLoginV2PollRequestSchema: z.ZodObject<{
    baseUrl: z.ZodString;
    endpoint: z.ZodString;
    token: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    endpoint: string;
    token: string;
}, {
    baseUrl: string;
    endpoint: string;
    token: string;
}>;
export type NextcloudLoginV2PollRequest = z.infer<typeof nextcloudLoginV2PollRequestSchema>;
export declare const connectRequestSchema: z.ZodObject<{
    baseUrl: z.ZodString;
    loginName: z.ZodString;
    appPassword: z.ZodString;
    folderName: z.ZodEffects<z.ZodOptional<z.ZodString>, string | undefined, unknown>;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
    folderName?: string | undefined;
}, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
    folderName?: unknown;
}>;
export type ConnectRequest = z.infer<typeof connectRequestSchema>;
export declare const connectionSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    baseUrl: z.ZodString;
    loginName: z.ZodString;
    status: z.ZodEnum<["active", "needs_reauth", "error"]>;
    rootFolder: z.ZodNullable<z.ZodString>;
    rootFolderFileId: z.ZodNullable<z.ZodNumber>;
    lastSyncAt: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    loginName: string;
    rootFolder: string | null;
    status: "active" | "needs_reauth" | "error";
    id: string;
    familyId: string;
    rootFolderFileId: number | null;
    lastSyncAt: string | null;
}, {
    baseUrl: string;
    loginName: string;
    rootFolder: string | null;
    status: "active" | "needs_reauth" | "error";
    id: string;
    familyId: string;
    rootFolderFileId: number | null;
    lastSyncAt: string | null;
}>;
export type Connection = z.infer<typeof connectionSchema>;
/** Credentials Nextcloud renvoyés à l'admin pour l'upload direct téléphone → serveur. */
export declare const nextcloudCredentialsResponseSchema: z.ZodObject<{
    baseUrl: z.ZodString;
    loginName: z.ZodString;
    appPassword: z.ZodString;
    rootFolder: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
    rootFolder: string | null;
}, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
    rootFolder: string | null;
}>;
export type NextcloudCredentialsResponse = z.infer<typeof nextcloudCredentialsResponseSchema>;
export declare const probeRequestSchema: z.ZodObject<{
    baseUrl: z.ZodString;
    loginName: z.ZodString;
    appPassword: z.ZodString;
}, "strip", z.ZodTypeAny, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
}, {
    baseUrl: string;
    loginName: string;
    appPassword: string;
}>;
export type ProbeRequest = z.infer<typeof probeRequestSchema>;
export declare const capabilitiesSchema: z.ZodObject<{
    version: z.ZodString;
    product: z.ZodString;
    chunking: z.ZodBoolean;
    bigFileChunking: z.ZodBoolean;
    supportsSyncCollection: z.ZodBoolean;
    webhookListeners: z.ZodBoolean;
}, "strip", z.ZodTypeAny, {
    version: string;
    product: string;
    chunking: boolean;
    bigFileChunking: boolean;
    supportsSyncCollection: boolean;
    webhookListeners: boolean;
}, {
    version: string;
    product: string;
    chunking: boolean;
    bigFileChunking: boolean;
    supportsSyncCollection: boolean;
    webhookListeners: boolean;
}>;
export type Capabilities = z.infer<typeof capabilitiesSchema>;
export declare const probeResponseSchema: z.ZodObject<{
    server: z.ZodObject<{
        baseUrl: z.ZodString;
        loginName: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        baseUrl: string;
        loginName: string;
    }, {
        baseUrl: string;
        loginName: string;
    }>;
    capabilities: z.ZodObject<{
        version: z.ZodString;
        product: z.ZodString;
        chunking: z.ZodBoolean;
        bigFileChunking: z.ZodBoolean;
        supportsSyncCollection: z.ZodBoolean;
        webhookListeners: z.ZodBoolean;
    }, "strip", z.ZodTypeAny, {
        version: string;
        product: string;
        chunking: boolean;
        bigFileChunking: boolean;
        supportsSyncCollection: boolean;
        webhookListeners: boolean;
    }, {
        version: string;
        product: string;
        chunking: boolean;
        bigFileChunking: boolean;
        supportsSyncCollection: boolean;
        webhookListeners: boolean;
    }>;
}, "strip", z.ZodTypeAny, {
    server: {
        baseUrl: string;
        loginName: string;
    };
    capabilities: {
        version: string;
        product: string;
        chunking: boolean;
        bigFileChunking: boolean;
        supportsSyncCollection: boolean;
        webhookListeners: boolean;
    };
}, {
    server: {
        baseUrl: string;
        loginName: string;
    };
    capabilities: {
        version: string;
        product: string;
        chunking: boolean;
        bigFileChunking: boolean;
        supportsSyncCollection: boolean;
        webhookListeners: boolean;
    };
}>;
export type ProbeResponse = z.infer<typeof probeResponseSchema>;
export declare const nextcloudFolderSchema: z.ZodObject<{
    name: z.ZodString;
    fileId: z.ZodNumber;
    path: z.ZodString;
}, "strip", z.ZodTypeAny, {
    path: string;
    name: string;
    fileId: number;
}, {
    path: string;
    name: string;
    fileId: number;
}>;
export type NextcloudFolder = z.infer<typeof nextcloudFolderSchema>;
export declare const connectResponseSchema: z.ZodObject<{
    connection: z.ZodObject<{
        id: z.ZodString;
        familyId: z.ZodString;
        baseUrl: z.ZodString;
        loginName: z.ZodString;
        status: z.ZodEnum<["active", "needs_reauth", "error"]>;
        rootFolder: z.ZodNullable<z.ZodString>;
        rootFolderFileId: z.ZodNullable<z.ZodNumber>;
        lastSyncAt: z.ZodNullable<z.ZodString>;
    }, "strip", z.ZodTypeAny, {
        baseUrl: string;
        loginName: string;
        rootFolder: string | null;
        status: "active" | "needs_reauth" | "error";
        id: string;
        familyId: string;
        rootFolderFileId: number | null;
        lastSyncAt: string | null;
    }, {
        baseUrl: string;
        loginName: string;
        rootFolder: string | null;
        status: "active" | "needs_reauth" | "error";
        id: string;
        familyId: string;
        rootFolderFileId: number | null;
        lastSyncAt: string | null;
    }>;
    folder: z.ZodObject<{
        name: z.ZodString;
        fileId: z.ZodNumber;
        path: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        path: string;
        name: string;
        fileId: number;
    }, {
        path: string;
        name: string;
        fileId: number;
    }>;
}, "strip", z.ZodTypeAny, {
    connection: {
        baseUrl: string;
        loginName: string;
        rootFolder: string | null;
        status: "active" | "needs_reauth" | "error";
        id: string;
        familyId: string;
        rootFolderFileId: number | null;
        lastSyncAt: string | null;
    };
    folder: {
        path: string;
        name: string;
        fileId: number;
    };
}, {
    connection: {
        baseUrl: string;
        loginName: string;
        rootFolder: string | null;
        status: "active" | "needs_reauth" | "error";
        id: string;
        familyId: string;
        rootFolderFileId: number | null;
        lastSyncAt: string | null;
    };
    folder: {
        path: string;
        name: string;
        fileId: number;
    };
}>;
export type ConnectResponse = z.infer<typeof connectResponseSchema>;
export declare const capturedAtSourceSchema: z.ZodEnum<["filename", "mtime", "exif", "client"]>;
export type CapturedAtSource = z.infer<typeof capturedAtSourceSchema>;
export declare const mediaSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    ncFileId: z.ZodNumber;
    path: z.ZodString;
    name: z.ZodString;
    etag: z.ZodString;
    size: z.ZodNumber;
    mime: z.ZodString;
    capturedAt: z.ZodString;
    capturedAtSource: z.ZodEnum<["filename", "mtime", "exif", "client"]>;
    width: z.ZodNullable<z.ZodNumber>;
    height: z.ZodNullable<z.ZodNumber>;
    durationMs: z.ZodNullable<z.ZodNumber>;
    hasPreview: z.ZodBoolean;
    uploadedBy: z.ZodNullable<z.ZodString>;
    caption: z.ZodNullable<z.ZodString>;
    /** Jeton de cache-busting après édition photo (`&v=<updatedAt>`). */
    updatedAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    capturedAt: string;
    path: string;
    id: string;
    name: string;
    familyId: string;
    ncFileId: number;
    etag: string;
    size: number;
    mime: string;
    capturedAtSource: "filename" | "mtime" | "exif" | "client";
    width: number | null;
    height: number | null;
    durationMs: number | null;
    hasPreview: boolean;
    uploadedBy: string | null;
    caption: string | null;
    updatedAt: string;
}, {
    capturedAt: string;
    path: string;
    id: string;
    name: string;
    familyId: string;
    ncFileId: number;
    etag: string;
    size: number;
    mime: string;
    capturedAtSource: "filename" | "mtime" | "exif" | "client";
    width: number | null;
    height: number | null;
    durationMs: number | null;
    hasPreview: boolean;
    uploadedBy: string | null;
    caption: string | null;
    updatedAt: string;
}>;
export type Media = z.infer<typeof mediaSchema>;
/** Corps de PATCH /media/:mediaId/caption — null ou chaîne vide = efface. */
export declare const mediaCaptionUpdateSchema: z.ZodObject<{
    caption: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    caption: string | null;
}, {
    caption: string | null;
}>;
export type MediaCaptionUpdate = z.infer<typeof mediaCaptionUpdateSchema>;
export declare const mediaListQuerySchema: z.ZodObject<{
    before: z.ZodOptional<z.ZodString>;
    limit: z.ZodDefault<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    limit: number;
    before?: string | undefined;
}, {
    before?: string | undefined;
    limit?: number | undefined;
}>;
export type MediaListQuery = z.infer<typeof mediaListQuerySchema>;
export declare const mediaListResponseSchema: z.ZodObject<{
    items: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        familyId: z.ZodString;
        ncFileId: z.ZodNumber;
        path: z.ZodString;
        name: z.ZodString;
        etag: z.ZodString;
        size: z.ZodNumber;
        mime: z.ZodString;
        capturedAt: z.ZodString;
        capturedAtSource: z.ZodEnum<["filename", "mtime", "exif", "client"]>;
        width: z.ZodNullable<z.ZodNumber>;
        height: z.ZodNullable<z.ZodNumber>;
        durationMs: z.ZodNullable<z.ZodNumber>;
        hasPreview: z.ZodBoolean;
        uploadedBy: z.ZodNullable<z.ZodString>;
        caption: z.ZodNullable<z.ZodString>;
        /** Jeton de cache-busting après édition photo (`&v=<updatedAt>`). */
        updatedAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        capturedAt: string;
        path: string;
        id: string;
        name: string;
        familyId: string;
        ncFileId: number;
        etag: string;
        size: number;
        mime: string;
        capturedAtSource: "filename" | "mtime" | "exif" | "client";
        width: number | null;
        height: number | null;
        durationMs: number | null;
        hasPreview: boolean;
        uploadedBy: string | null;
        caption: string | null;
        updatedAt: string;
    }, {
        capturedAt: string;
        path: string;
        id: string;
        name: string;
        familyId: string;
        ncFileId: number;
        etag: string;
        size: number;
        mime: string;
        capturedAtSource: "filename" | "mtime" | "exif" | "client";
        width: number | null;
        height: number | null;
        durationMs: number | null;
        hasPreview: boolean;
        uploadedBy: string | null;
        caption: string | null;
        updatedAt: string;
    }>, "many">;
    nextCursor: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    items: {
        capturedAt: string;
        path: string;
        id: string;
        name: string;
        familyId: string;
        ncFileId: number;
        etag: string;
        size: number;
        mime: string;
        capturedAtSource: "filename" | "mtime" | "exif" | "client";
        width: number | null;
        height: number | null;
        durationMs: number | null;
        hasPreview: boolean;
        uploadedBy: string | null;
        caption: string | null;
        updatedAt: string;
    }[];
    nextCursor: string | null;
}, {
    items: {
        capturedAt: string;
        path: string;
        id: string;
        name: string;
        familyId: string;
        ncFileId: number;
        etag: string;
        size: number;
        mime: string;
        capturedAtSource: "filename" | "mtime" | "exif" | "client";
        width: number | null;
        height: number | null;
        durationMs: number | null;
        hasPreview: boolean;
        uploadedBy: string | null;
        caption: string | null;
        updatedAt: string;
    }[];
    nextCursor: string | null;
}>;
export type MediaListResponse = z.infer<typeof mediaListResponseSchema>;
/** Mois disponibles de la timeline (« 2026-08 ») + nombre de médias, tri DESC. */
export declare const mediaMonthsResponseSchema: z.ZodArray<z.ZodObject<{
    month: z.ZodString;
    count: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
    month: string;
    count: number;
}, {
    month: string;
    count: number;
}>, "many">;
export type MediaMonths = z.infer<typeof mediaMonthsResponseSchema>;
export declare const mediaNotifyRequestSchema: z.ZodObject<{
    paths: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
    paths: string[];
}, {
    paths: string[];
}>;
export type MediaNotifyRequest = z.infer<typeof mediaNotifyRequestSchema>;
export declare const commentSchema: z.ZodObject<{
    id: z.ZodString;
    mediaId: z.ZodString;
    authorId: z.ZodString;
    authorName: z.ZodString;
    body: z.ZodString;
    createdAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    body: string;
    id: string;
    createdAt: string;
    mediaId: string;
    authorId: string;
    authorName: string;
}, {
    body: string;
    id: string;
    createdAt: string;
    mediaId: string;
    authorId: string;
    authorName: string;
}>;
export type Comment = z.infer<typeof commentSchema>;
export declare const createCommentRequestSchema: z.ZodObject<{
    mediaId: z.ZodOptional<z.ZodString>;
    body: z.ZodString;
}, "strip", z.ZodTypeAny, {
    body: string;
    mediaId?: string | undefined;
}, {
    body: string;
    mediaId?: string | undefined;
}>;
export type CreateCommentRequest = z.infer<typeof createCommentRequestSchema>;
export declare const reactionSchema: z.ZodObject<{
    mediaId: z.ZodString;
    userId: z.ZodString;
    emoji: z.ZodString;
}, "strip", z.ZodTypeAny, {
    userId: string;
    mediaId: string;
    emoji: string;
}, {
    userId: string;
    mediaId: string;
    emoji: string;
}>;
export type Reaction = z.infer<typeof reactionSchema>;
export declare const setReactionRequestSchema: z.ZodObject<{
    mediaId: z.ZodOptional<z.ZodString>;
    emoji: z.ZodString;
    remove: z.ZodDefault<z.ZodBoolean>;
}, "strip", z.ZodTypeAny, {
    emoji: string;
    remove: boolean;
    mediaId?: string | undefined;
}, {
    emoji: string;
    mediaId?: string | undefined;
    remove?: boolean | undefined;
}>;
export type SetReactionRequest = z.infer<typeof setReactionRequestSchema>;
export declare const markViewedRequestSchema: z.ZodObject<{
    mediaId: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    mediaId?: string | undefined;
}, {
    mediaId?: string | undefined;
}>;
export type MarkViewedRequest = z.infer<typeof markViewedRequestSchema>;
export declare const viewerSchema: z.ZodObject<{
    userId: z.ZodString;
    displayName: z.ZodString;
    firstViewedAt: z.ZodString;
}, "strip", z.ZodTypeAny, {
    displayName: string;
    userId: string;
    firstViewedAt: string;
}, {
    displayName: string;
    userId: string;
    firstViewedAt: string;
}>;
export type Viewer = z.infer<typeof viewerSchema>;
export declare const mediaDetailSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    ncFileId: z.ZodNumber;
    path: z.ZodString;
    name: z.ZodString;
    etag: z.ZodString;
    size: z.ZodNumber;
    mime: z.ZodString;
    capturedAt: z.ZodString;
    capturedAtSource: z.ZodEnum<["filename", "mtime", "exif", "client"]>;
    width: z.ZodNullable<z.ZodNumber>;
    height: z.ZodNullable<z.ZodNumber>;
    durationMs: z.ZodNullable<z.ZodNumber>;
    hasPreview: z.ZodBoolean;
    uploadedBy: z.ZodNullable<z.ZodString>;
    caption: z.ZodNullable<z.ZodString>;
    /** Jeton de cache-busting après édition photo (`&v=<updatedAt>`). */
    updatedAt: z.ZodString;
} & {
    comments: z.ZodArray<z.ZodObject<{
        id: z.ZodString;
        mediaId: z.ZodString;
        authorId: z.ZodString;
        authorName: z.ZodString;
        body: z.ZodString;
        createdAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        body: string;
        id: string;
        createdAt: string;
        mediaId: string;
        authorId: string;
        authorName: string;
    }, {
        body: string;
        id: string;
        createdAt: string;
        mediaId: string;
        authorId: string;
        authorName: string;
    }>, "many">;
    reactions: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>;
    viewers: z.ZodArray<z.ZodObject<{
        userId: z.ZodString;
        displayName: z.ZodString;
        firstViewedAt: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        displayName: string;
        userId: string;
        firstViewedAt: string;
    }, {
        displayName: string;
        userId: string;
        firstViewedAt: string;
    }>, "many">;
}, "strip", z.ZodTypeAny, {
    capturedAt: string;
    path: string;
    reactions: Record<string, string[]>;
    id: string;
    name: string;
    comments: {
        body: string;
        id: string;
        createdAt: string;
        mediaId: string;
        authorId: string;
        authorName: string;
    }[];
    familyId: string;
    ncFileId: number;
    etag: string;
    size: number;
    mime: string;
    capturedAtSource: "filename" | "mtime" | "exif" | "client";
    width: number | null;
    height: number | null;
    durationMs: number | null;
    hasPreview: boolean;
    uploadedBy: string | null;
    caption: string | null;
    updatedAt: string;
    viewers: {
        displayName: string;
        userId: string;
        firstViewedAt: string;
    }[];
}, {
    capturedAt: string;
    path: string;
    reactions: Record<string, string[]>;
    id: string;
    name: string;
    comments: {
        body: string;
        id: string;
        createdAt: string;
        mediaId: string;
        authorId: string;
        authorName: string;
    }[];
    familyId: string;
    ncFileId: number;
    etag: string;
    size: number;
    mime: string;
    capturedAtSource: "filename" | "mtime" | "exif" | "client";
    width: number | null;
    height: number | null;
    durationMs: number | null;
    hasPreview: boolean;
    uploadedBy: string | null;
    caption: string | null;
    updatedAt: string;
    viewers: {
        displayName: string;
        userId: string;
        firstViewedAt: string;
    }[];
}>;
export type MediaDetail = z.infer<typeof mediaDetailSchema>;
export declare const albumSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    name: z.ZodString;
    createdAt: z.ZodString;
    coverMediaId: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    createdAt: string;
    name: string;
    familyId: string;
    coverMediaId: string | null;
}, {
    id: string;
    createdAt: string;
    name: string;
    familyId: string;
    coverMediaId: string | null;
}>;
export type Album = z.infer<typeof albumSchema>;
export declare const createAlbumRequestSchema: z.ZodObject<{
    familyId: z.ZodOptional<z.ZodString>;
    name: z.ZodString;
}, "strip", z.ZodTypeAny, {
    name: string;
    familyId?: string | undefined;
}, {
    name: string;
    familyId?: string | undefined;
}>;
export type CreateAlbumRequest = z.infer<typeof createAlbumRequestSchema>;
export declare const albumDetailSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    name: z.ZodString;
    createdAt: z.ZodString;
    coverMediaId: z.ZodNullable<z.ZodString>;
} & {
    mediaIds: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
    id: string;
    createdAt: string;
    name: string;
    familyId: string;
    coverMediaId: string | null;
    mediaIds: string[];
}, {
    id: string;
    createdAt: string;
    name: string;
    familyId: string;
    coverMediaId: string | null;
    mediaIds: string[];
}>;
export type AlbumDetail = z.infer<typeof albumDetailSchema>;
export declare const addMediaToAlbumRequestSchema: z.ZodObject<{
    mediaIds: z.ZodArray<z.ZodString, "many">;
}, "strip", z.ZodTypeAny, {
    mediaIds: string[];
}, {
    mediaIds: string[];
}>;
export type AddMediaToAlbumRequest = z.infer<typeof addMediaToAlbumRequestSchema>;
export declare const childSchema: z.ZodObject<{
    id: z.ZodString;
    familyId: z.ZodString;
    name: z.ZodString;
    birthDate: z.ZodString;
    avatarMediaId: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    name: string;
    familyId: string;
    birthDate: string;
    avatarMediaId: string | null;
}, {
    id: string;
    name: string;
    familyId: string;
    birthDate: string;
    avatarMediaId: string | null;
}>;
export type Child = z.infer<typeof childSchema>;
export declare const createChildRequestSchema: z.ZodObject<{
    familyId: z.ZodOptional<z.ZodString>;
    name: z.ZodString;
    birthDate: z.ZodString;
}, "strip", z.ZodTypeAny, {
    name: string;
    birthDate: string;
    familyId?: string | undefined;
}, {
    name: string;
    birthDate: string;
    familyId?: string | undefined;
}>;
export type CreateChildRequest = z.infer<typeof createChildRequestSchema>;
export declare const updateChildRequestSchema: z.ZodObject<{
    name: z.ZodOptional<z.ZodString>;
    birthDate: z.ZodOptional<z.ZodString>;
    avatarMediaId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
}, "strip", z.ZodTypeAny, {
    name?: string | undefined;
    birthDate?: string | undefined;
    avatarMediaId?: string | null | undefined;
}, {
    name?: string | undefined;
    birthDate?: string | undefined;
    avatarMediaId?: string | null | undefined;
}>;
export type UpdateChildRequest = z.infer<typeof updateChildRequestSchema>;
export declare const growthEntrySchema: z.ZodObject<{
    id: z.ZodString;
    childId: z.ZodString;
    measuredOn: z.ZodString;
    heightCm: z.ZodNullable<z.ZodNumber>;
    weightKg: z.ZodNullable<z.ZodNumber>;
    note: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    childId: string;
    measuredOn: string;
    heightCm: number | null;
    weightKg: number | null;
    note: string | null;
}, {
    id: string;
    childId: string;
    measuredOn: string;
    heightCm: number | null;
    weightKg: number | null;
    note: string | null;
}>;
export type GrowthEntry = z.infer<typeof growthEntrySchema>;
export declare const createGrowthEntryRequestSchema: z.ZodObject<{
    childId: z.ZodOptional<z.ZodString>;
    measuredOn: z.ZodString;
    heightCm: z.ZodOptional<z.ZodNumber>;
    weightKg: z.ZodOptional<z.ZodNumber>;
    note: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    measuredOn: string;
    childId?: string | undefined;
    heightCm?: number | undefined;
    weightKg?: number | undefined;
    note?: string | undefined;
}, {
    measuredOn: string;
    childId?: string | undefined;
    heightCm?: number | undefined;
    weightKg?: number | undefined;
    note?: string | undefined;
}>;
export type CreateGrowthEntryRequest = z.infer<typeof createGrowthEntryRequestSchema>;
export declare const milestoneSchema: z.ZodObject<{
    id: z.ZodString;
    childId: z.ZodString;
    happenedOn: z.ZodString;
    title: z.ZodString;
    note: z.ZodNullable<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    id: string;
    childId: string;
    note: string | null;
    happenedOn: string;
    title: string;
}, {
    id: string;
    childId: string;
    note: string | null;
    happenedOn: string;
    title: string;
}>;
export type Milestone = z.infer<typeof milestoneSchema>;
export declare const createMilestoneRequestSchema: z.ZodObject<{
    childId: z.ZodOptional<z.ZodString>;
    happenedOn: z.ZodString;
    title: z.ZodString;
    note: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    happenedOn: string;
    title: string;
    childId?: string | undefined;
    note?: string | undefined;
}, {
    happenedOn: string;
    title: string;
    childId?: string | undefined;
    note?: string | undefined;
}>;
export type CreateMilestoneRequest = z.infer<typeof createMilestoneRequestSchema>;
export declare const registerDeviceRequestSchema: z.ZodObject<{
    expoPushToken: z.ZodString;
    platform: z.ZodOptional<z.ZodEnum<["ios", "android"]>>;
    /** BCP 47 du device (ex. "fr", "pt-BR") — sert au push localisé. */
    locale: z.ZodOptional<z.ZodString>;
}, "strip", z.ZodTypeAny, {
    expoPushToken: string;
    platform?: "ios" | "android" | undefined;
    locale?: string | undefined;
}, {
    expoPushToken: string;
    platform?: "ios" | "android" | undefined;
    locale?: string | undefined;
}>;
export type RegisterDeviceRequest = z.infer<typeof registerDeviceRequestSchema>;
export * from "./uploader.js";
export * from "./age.js";
export declare const apiErrorSchema: z.ZodObject<{
    error: z.ZodObject<{
        code: z.ZodString;
        message: z.ZodString;
    }, "strip", z.ZodTypeAny, {
        code: string;
        message: string;
    }, {
        code: string;
        message: string;
    }>;
}, "strip", z.ZodTypeAny, {
    error: {
        code: string;
        message: string;
    };
}, {
    error: {
        code: string;
        message: string;
    };
}>;
export type ApiError = z.infer<typeof apiErrorSchema>;
