import type { IPassportCapabilities, TPassportDevicePlatform, TPassportDeviceStatus, TPassportPushEnvironment, TPassportPushProvider, } from '../data/passportdevice.js'; import type { IPassportLocationPolicy, TPassportChallengeDeliveryStatus, TPassportChallengeStatus, TPassportChallengeType, } from '../data/passportchallenge.js'; import type { IAlertDto } from './alert.js'; export interface IPassportDeviceDto { id: string; data: { label: string; platform: TPassportDevicePlatform; status: TPassportDeviceStatus; capabilities: IPassportCapabilities; pushRegistration?: { provider: TPassportPushProvider; topic: string; environment: TPassportPushEnvironment; registeredAt: number; lastDeliveredAt?: number; }; appVersion?: string; createdAt: number; lastSeenAt?: number; lastChallengeAt?: number; }; } export interface IPassportChallengeDto { id: string; data: { type: TPassportChallengeType; status: TPassportChallengeStatus; challenge?: string; metadata: { originHost?: string; audience?: string; notificationTitle?: string; deviceLabel?: string; requireLocation: boolean; requireNfc: boolean; locationPolicy?: IPassportLocationPolicy; requestedCapabilities?: Partial; }; notification?: { status: TPassportChallengeDeliveryStatus; createdAt: number; deliveredAt?: number | null; seenAt?: number | null; }; createdAt: number; expiresAt: number; completedAt?: number | null; }; } export interface IPassportChallengeSigningDto { challenge: IPassportChallengeDto; signingPayload: string; } export interface IPassportDashboardDto { profile: { userId: string; name: string; handle: string; organizations: Array<{ id: string; name: string }>; deviceCount: number; recoverySummary: string; }; devices: IPassportDeviceDto[]; challenges: IPassportChallengeSigningDto[]; alerts: IAlertDto[]; }