import { Any } from './trakt-entity.model.cjs'; import { TraktEpisode } from './trakt-episode.model.cjs'; import { TraktMovie } from './trakt-movie.model.cjs'; import { TraktSeason } from './trakt-season.model.cjs'; import { TraktShow } from './trakt-show.model.cjs'; import '@dvcol/common-utils/common/models'; import './trakt-client.model.cjs'; import '@dvcol/base-http-client'; import '@dvcol/common-utils/http/fetch'; import '../api/trakt-api.filters.cjs'; import './trakt-id.model.cjs'; import './trakt-image.model.cjs'; import './trakt-people.model.cjs'; type TraktSyncActivity = { /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ watched_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ collected_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ rated_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ watchlisted_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ favorited_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ commented_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ paused_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ hidden_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ liked_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ blocked_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ updated_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ settings_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ followed_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ following_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ pending_at: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ requested_at: string; }; type TraktSyncActivities = { /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ all: string; collaborations: Pick; recommendations: Pick; movies: Pick; episodes: Pick; shows: Pick; seasons: Pick; comments: Pick; lists: Pick; watchlist: Pick; favorites: Pick; account: Pick; saved_filters: Pick; notes: Pick; }; type TraktSyncProgress = { progress: number; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ paused_at: number; id: number; } & { type: T extends Any ? 'movie' | 'episode' : T; } & (T extends 'movie' ? { movie: TraktMovie; } : T extends 'episode' ? { episode: TraktEpisode; show: TraktShow; } : { movie: TraktMovie; } | { episode: TraktEpisode; show: TraktShow; }); type BaseSyncRequestItem = T extends 'movies' ? Partial & Pick : T extends 'shows' ? Partial & Pick & { seasons?: Pick & Partial>[]; } : T extends 'seasons' ? Partial & Pick : T extends 'episodes' ? Partial & Pick : (Partial & Pick) | (Partial & { seasons?: Pick & Partial>[]; }) | (Partial & Pick) | (Partial & Pick); type TraktSyncRequest = { movies?: BaseSyncRequestItem<'movies'>[]; shows?: BaseSyncRequestItem<'shows'>[]; seasons?: BaseSyncRequestItem<'seasons'>[]; episodes?: BaseSyncRequestItem<'episodes'>[]; }; type TraktSyncUpdateRequest = { description?: string; sort_by?: 'rank' | 'added' | 'title' | 'released' | 'runtime' | 'popularity' | 'percentage' | 'votes' | 'my_rating' | 'random' | 'watched' | 'collected'; sort_how?: 'asc' | 'desc'; }; export type { BaseSyncRequestItem, TraktSyncActivities, TraktSyncActivity, TraktSyncProgress, TraktSyncRequest, TraktSyncUpdateRequest };