import { Any, TraktSharing } from './trakt-entity.model.js'; import { TraktEpisode } from './trakt-episode.model.js'; import { TraktMovie } from './trakt-movie.model.js'; import { TraktShow } from './trakt-show.model.js'; import '@dvcol/common-utils/common/models'; import './trakt-client.model.js'; import '@dvcol/base-http-client'; 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 TraktScrobbleRequestMovie = { /** Movie to be checked-in */ movie: TraktMovie; }; type TraktScrobbleRequestShow = { /** Show to be checked-in */ show: TraktShow; /** Episode to be checked-in. If no traktv ids is provided, either episode's season & number or number_abs is required */ episode: Partial & (Pick | { number_abs: number; }); }; type TraktScrobbleRequestEpisode = { /** Episode to be checked-in. If no show is provided, traktv ids are required */ episode: Partial & Pick; }; type TraktScrobbleRequestItem = T extends 'movie' ? TraktScrobbleRequestMovie : T extends 'show' ? TraktScrobbleRequestShow : T extends 'episode' ? TraktScrobbleRequestEpisode : TraktScrobbleRequestMovie | TraktScrobbleRequestShow | TraktScrobbleRequestEpisode; type TraktScrobbleRequest = { /** Progress percentage between 0 and 100. */ progress: number; } & TraktScrobbleRequestItem; type TraktScrobbleItem = T extends 'movie' ? { movie: TraktMovie; } : T extends 'episode' ? { show: TraktShow; episode: TraktEpisode; } : { movie: TraktMovie; } | { show: TraktShow; episode: TraktEpisode; }; type TraktScrobbleAction = A extends 'start' ? { action: 'start'; } : A extends 'pause' ? { action: 'pause'; } : A extends 'stop' ? { action: 'scrobble' | 'pause'; } : { action: 'start' | 'pause' | 'scrobble'; }; type TraktScrobble = { id: number; progress: number; sharing: TraktSharing; } & TraktScrobbleAction & TraktScrobbleItem; type TraktScrobbleError = { /** 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) */ expires_at: string; }; export type { TraktScrobble, TraktScrobbleError, TraktScrobbleRequest };