import { type UnixTimestamp } from '../_common/unix-timestamp.js';
import { z } from 'zod';
export declare const UniqueSamSchema: z.ZodObject<{
    created_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
    updated_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
} & {
    _id: z.ZodNumber;
    agency_id: z.ZodString;
    device_ids: z.ZodNullable<z.ZodArray<z.ZodString, "many">>;
    latest_apex_version: z.ZodNullable<z.ZodString>;
    remarks: z.ZodNullable<z.ZodString>;
    seen_first_at: z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>;
    seen_last_at: z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>;
    system_status: z.ZodDefault<z.ZodEnum<["waiting", "processing", "complete", "error"]>>;
    transactions_expected: z.ZodNullable<z.ZodNumber>;
    transactions_found: z.ZodNullable<z.ZodNumber>;
    transactions_missing: z.ZodNullable<z.ZodNumber>;
    vehicle_ids: z.ZodNullable<z.ZodArray<z.ZodNumber, "many">>;
}, "strict", z.ZodTypeAny, {
    _id: number;
    agency_id: string;
    seen_first_at: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null;
    seen_last_at: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null;
    system_status: "waiting" | "processing" | "complete" | "error";
    vehicle_ids: number[] | null;
    device_ids: string[] | null;
    latest_apex_version: string | null;
    remarks: string | null;
    transactions_expected: number | null;
    transactions_found: number | null;
    transactions_missing: number | null;
    created_at?: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null | undefined;
    updated_at?: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null | undefined;
}, {
    _id: number;
    agency_id: string;
    seen_first_at: number | null;
    seen_last_at: number | null;
    vehicle_ids: number[] | null;
    device_ids: string[] | null;
    latest_apex_version: string | null;
    remarks: string | null;
    transactions_expected: number | null;
    transactions_found: number | null;
    transactions_missing: number | null;
    created_at?: number | null | undefined;
    updated_at?: number | null | undefined;
    system_status?: "waiting" | "processing" | "complete" | "error" | undefined;
}>;
export declare const CreateUniqueSamSchema: z.ZodObject<Omit<{
    created_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
    updated_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
} & {
    _id: z.ZodNumber;
    agency_id: z.ZodString;
    device_ids: z.ZodNullable<z.ZodArray<z.ZodString, "many">>;
    latest_apex_version: z.ZodNullable<z.ZodString>;
    remarks: z.ZodNullable<z.ZodString>;
    seen_first_at: z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>;
    seen_last_at: z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>;
    system_status: z.ZodDefault<z.ZodEnum<["waiting", "processing", "complete", "error"]>>;
    transactions_expected: z.ZodNullable<z.ZodNumber>;
    transactions_found: z.ZodNullable<z.ZodNumber>;
    transactions_missing: z.ZodNullable<z.ZodNumber>;
    vehicle_ids: z.ZodNullable<z.ZodArray<z.ZodNumber, "many">>;
}, "created_at" | "updated_at">, "strict", z.ZodTypeAny, {
    _id: number;
    agency_id: string;
    seen_first_at: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null;
    seen_last_at: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null;
    system_status: "waiting" | "processing" | "complete" | "error";
    vehicle_ids: number[] | null;
    device_ids: string[] | null;
    latest_apex_version: string | null;
    remarks: string | null;
    transactions_expected: number | null;
    transactions_found: number | null;
    transactions_missing: number | null;
}, {
    _id: number;
    agency_id: string;
    seen_first_at: number | null;
    seen_last_at: number | null;
    vehicle_ids: number[] | null;
    device_ids: string[] | null;
    latest_apex_version: string | null;
    remarks: string | null;
    transactions_expected: number | null;
    transactions_found: number | null;
    transactions_missing: number | null;
    system_status?: "waiting" | "processing" | "complete" | "error" | undefined;
}>;
export declare const UpdateUniqueSamSchema: z.ZodObject<{
    _id: z.ZodOptional<z.ZodNumber>;
    agency_id: z.ZodOptional<z.ZodString>;
    seen_first_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
    seen_last_at: z.ZodOptional<z.ZodNullable<z.ZodBranded<z.ZodEffects<z.ZodNumber, UnixTimestamp, number>, "UnixTimestamp">>>;
    system_status: z.ZodOptional<z.ZodDefault<z.ZodEnum<["waiting", "processing", "complete", "error"]>>>;
    vehicle_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodNumber, "many">>>;
    device_ids: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodString, "many">>>;
    latest_apex_version: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    remarks: z.ZodOptional<z.ZodNullable<z.ZodString>>;
    transactions_expected: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
    transactions_found: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
    transactions_missing: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
}, "strict", z.ZodTypeAny, {
    _id?: number | undefined;
    agency_id?: string | undefined;
    seen_first_at?: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null | undefined;
    seen_last_at?: (number & {
        __brand: "UnixTimestamp";
    } & z.BRAND<"UnixTimestamp">) | null | undefined;
    system_status?: "waiting" | "processing" | "complete" | "error" | undefined;
    vehicle_ids?: number[] | null | undefined;
    device_ids?: string[] | null | undefined;
    latest_apex_version?: string | null | undefined;
    remarks?: string | null | undefined;
    transactions_expected?: number | null | undefined;
    transactions_found?: number | null | undefined;
    transactions_missing?: number | null | undefined;
}, {
    _id?: number | undefined;
    agency_id?: string | undefined;
    seen_first_at?: number | null | undefined;
    seen_last_at?: number | null | undefined;
    system_status?: "waiting" | "processing" | "complete" | "error" | undefined;
    vehicle_ids?: number[] | null | undefined;
    device_ids?: string[] | null | undefined;
    latest_apex_version?: string | null | undefined;
    remarks?: string | null | undefined;
    transactions_expected?: number | null | undefined;
    transactions_found?: number | null | undefined;
    transactions_missing?: number | null | undefined;
}>;
/**
 * SAMs are the chips that contain the keys used to sign APEX transactions.
 * They live in the validator machines and produce an incrementing counter value
 * every time a transaction is signed. This counter value is used to ensure that
 * the transactions are real, unique and incremental. This allows the system to
 * detect if a transaction has been tampered with or if any transactions are missing.
 */
export interface UniqueSam extends Omit<z.infer<typeof UniqueSamSchema>, 'created_at' | 'seen_first_at' | 'seen_last_at' | 'updated_at'> {
    created_at: UnixTimestamp;
    seen_first_at: null | UnixTimestamp;
    seen_last_at: null | UnixTimestamp;
    updated_at: UnixTimestamp;
}
export interface CreateUniqueSamDto extends Omit<z.infer<typeof CreateUniqueSamSchema>, 'seen_first_at' | 'seen_last_at'> {
    seen_first_at: null | UnixTimestamp;
    seen_last_at: null | UnixTimestamp;
}
export type UpdateUniqueSamDto = Partial<CreateUniqueSamDto>;
