import { TraktApiParamsExtended, TraktApiExtended, TraktApiParamsPagination } from './trakt-client.model.js'; import { Any, EntityTypes } from './trakt-entity.model.js'; import { TraktEpisode } from './trakt-episode.model.js'; import { TraktMovie } from './trakt-movie.model.js'; import { TraktSeason } from './trakt-season.model.js'; import { TraktShow } from './trakt-show.model.js'; import { BaseSyncRequestItem, TraktSyncRequest } from './trakt-sync.model.js'; import '@dvcol/base-http-client'; import '@dvcol/common-utils/common/models'; import '@dvcol/common-utils/http/fetch'; import '../api/trakt-api.filters.js'; import './trakt-id.model.js'; import './trakt-image.model.js'; import './trakt-people.model.js'; type TraktHistoryItem = { 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 TraktHistory = { id: number; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ watched_at: string; action: 'scrobble' | 'checkin' | 'watch'; } & TraktHistoryItem; type TraktHistoryRequestItem = { /** * UTC datetime when the item was watched. - Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) * Set to released to automatically use the inital release date + runtime (episodes only)). */ watched_at?: string; } & BaseSyncRequestItem; type TraktHistoryRequest = { movies?: TraktHistoryRequestItem<'movies'>[]; shows?: TraktHistoryRequestItem<'shows'>[]; seasons?: TraktHistoryRequestItem<'seasons'>[]; episodes?: TraktHistoryRequestItem<'episodes'>[]; }; type TraktHistoryAdded = { added: { movies: number; episodes: number; }; not_found: { movies: Pick[]; shows: Pick[]; seasons: Pick[]; episodes: Pick[]; }; }; type TraktHistoryRemovedRequest = TraktSyncRequest & { /** Array of history ids. */ ids?: number[]; }; type TraktHistoryRemoved = { deleted: { movies: number; episodes: number; }; not_found: { movies: Pick[]; shows: Pick[]; seasons: Pick[]; episodes: Pick[]; ids: number[]; }; }; type TraktHistoryGetQuery = { /** Trakt ID for a specific item. */ id?: string; type?: 'movies' | 'shows' | 'seasons' | 'episodes'; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ start_at?: string; /** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */ end_at?: string; } & TraktApiParamsExtended & TraktApiParamsPagination; export type { TraktHistory, TraktHistoryAdded, TraktHistoryGetQuery, TraktHistoryRemoved, TraktHistoryRemovedRequest, TraktHistoryRequest, TraktHistoryRequestItem };