Skip to content

Commit 4e5b974

Browse files
committed
feat: adds tvdb api
1 parent e7238be commit 4e5b974

File tree

70 files changed

+3020
-166
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+3020
-166
lines changed

src/models/trakt/trakt-checkin.model.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { TraktSharing } from '~/models/trakt/trakt-entity.model';
1+
import type { TraktSharing, Any } from '~/models/trakt/trakt-entity.model';
22
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
33
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
44
import type { TraktShow } from '~/models/trakt/trakt-show.model';
@@ -9,15 +9,15 @@ type BaseTraktCheckin = {
99
show: TraktShow;
1010
};
1111

12-
export type TypedTraktCheckin<T extends 'any' | 'movie' | 'show' | 'episode'> = T extends 'movie'
12+
export type TypedTraktCheckin<T extends Any | 'movie' | 'show' | 'episode'> = T extends 'movie'
1313
? Pick<BaseTraktCheckin, 'movie'>
1414
: T extends 'show'
1515
? Pick<BaseTraktCheckin, 'show'>
1616
: T extends 'episode'
1717
? Pick<BaseTraktCheckin, 'episode'>
1818
: Partial<BaseTraktCheckin>;
1919

20-
export type TraktCheckin<T extends 'any' | 'movie' | 'show' | 'episode' = 'any'> = {
20+
export type TraktCheckin<T extends Any | 'movie' | 'show' | 'episode' = Any> = {
2121
id: number;
2222
/** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */
2323
watched_at: string;
@@ -49,15 +49,15 @@ type TraktCheckinRequestEpisode = {
4949
episode: Partial<TraktEpisode> & Pick<TraktEpisode, 'ids'>;
5050
};
5151

52-
type TraktCheckinRequestItem<T extends 'movie' | 'show' | 'episode' | 'any' = 'any'> = T extends 'movie'
52+
type TraktCheckinRequestItem<T extends 'movie' | 'show' | 'episode' | Any = Any> = T extends 'movie'
5353
? TraktCheckinRequestMovie
5454
: T extends 'show'
5555
? TraktCheckinRequestShow
5656
: T extends 'episode'
5757
? TraktCheckinRequestEpisode
5858
: TraktCheckinRequestMovie | TraktCheckinRequestEpisode | TraktCheckinRequestShow;
5959

60-
export type TraktCheckinRequest<T extends 'movie' | 'show' | 'episode' | 'any' = 'any'> = {
60+
export type TraktCheckinRequest<T extends 'movie' | 'show' | 'episode' | Any = Any> = {
6161
/**
6262
* Control sharing to any connected social networks.
6363
*

src/models/trakt/trakt-client.model.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type { TraktApiFilters } from '~/services/trakt-client/api/trakt-api.filt
33
import type { Primitive, RecursiveRecord } from '~/utils/typescript.utils';
44

55
import {
6+
BaseApiHeaders,
67
type BaseInit,
78
type BaseOptions,
89
type BaseQuery,
@@ -235,7 +236,9 @@ export const TraktApiHeaders = {
235236
/** Actual sort order asc or desc. */
236237
XAppliedSortHow: 'X-Applied-Sort-How',
237238
/** The user agent of the consumer client */
238-
UserAgent: 'User-Agent',
239+
UserAgent: BaseApiHeaders.UserAgent,
239240
/** The content type of the payload */
240-
ContentType: 'Content-Type',
241+
ContentType: BaseApiHeaders.ContentType,
242+
/** The authorization token bearer */
243+
Authorization: BaseApiHeaders.Authorization,
241244
} as const;

src/models/trakt/trakt-collection.model.ts

+12-22
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Any, EntityTypes, Short } from '~/models/trakt/trakt-entity.model';
12
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
23
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
34
import type { TraktSeason } from '~/models/trakt/trakt-season.model';
@@ -49,60 +50,49 @@ export type TraktCollectionMetadata = {
4950
'3d': boolean;
5051
};
5152

52-
export type TraktCollectionEpisode<M extends 'metadata' | 'short' | 'any' = 'any'> = {
53+
export type TraktCollectionEpisode<M extends 'metadata' | Short | Any = Any> = {
5354
number: number;
5455
/** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */
5556
collected_at: string;
56-
} & (M extends 'metadata'
57-
? { metadata: TraktCollectionMetadata }
58-
: M extends 'short'
59-
? Record<string, never>
60-
: { metadata?: TraktCollectionMetadata });
57+
} & (M extends 'metadata' ? { metadata: TraktCollectionMetadata } : M extends Short ? Record<string, never> : { metadata?: TraktCollectionMetadata });
6158

62-
export type TraktCollectionSeason<M extends 'metadata' | 'short' | 'any' = 'any'> = {
59+
export type TraktCollectionSeason<M extends 'metadata' | Short | Any = Any> = {
6360
number: number;
6461
episodes: TraktCollectionEpisode<M>[];
6562
};
6663

67-
type TraktCollectionShow<M extends 'metadata' | 'short' | 'any' = 'any', E extends 'extended' | 'short' | 'any' = 'any'> = {
64+
type TraktCollectionShow<M extends 'metadata' | Short | Any = Any, E extends EntityTypes = Any> = {
6865
last_collected_at: string;
6966
last_updated_at: string;
7067
show: TraktShow<E>;
7168
seasons: TraktCollectionSeason<M>[];
7269
};
7370

74-
type TraktCollectionMovie<M extends 'metadata' | 'short' | 'any' = 'any', E extends 'extended' | 'short' | 'any' = 'any'> = {
71+
type TraktCollectionMovie<M extends 'metadata' | Short | Any = Any, E extends EntityTypes = Any> = {
7572
collected_at: string;
7673
updated_at: string;
7774
movie: TraktMovie<E>;
78-
} & (M extends 'metadata'
79-
? { metadata: TraktCollectionMetadata }
80-
: M extends 'short'
81-
? Record<string, never>
82-
: { metadata?: TraktCollectionMetadata });
75+
} & (M extends 'metadata' ? { metadata: TraktCollectionMetadata } : M extends Short ? Record<string, never> : { metadata?: TraktCollectionMetadata });
8376

8477
export type TraktCollection<
85-
T extends 'movie' | 'show' | 'any' = 'any',
86-
M extends 'metadata' | 'short' | 'any' = 'any',
87-
E extends 'extended' | 'short' | 'any' = 'any',
78+
T extends 'movie' | 'show' | Any = Any,
79+
M extends 'metadata' | Short | Any = Any,
80+
E extends EntityTypes = Any,
8881
> = T extends 'movie'
8982
? TraktCollectionMovie<M, E>
9083
: T extends 'show'
9184
? TraktCollectionShow<M, E>
9285
: TraktCollectionMovie<M, E> | TraktCollectionShow<M, E>;
9386

94-
export type TraktCollectionRequestItem<
95-
T extends 'movies' | 'shows' | 'seasons' | 'episodes' | 'any' = 'any',
96-
M extends 'metadata' | 'short' = 'short',
97-
> = {
87+
export type TraktCollectionRequestItem<T extends 'movies' | 'shows' | 'seasons' | 'episodes' | Any = Any, M extends 'metadata' | Short = Short> = {
9888
/**
9989
* UTC datetime when the item was collected. - Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ)
10090
* Set to released to automatically use the inital release date + runtime (episodes only)).
10191
*/
10292
collected_at?: string;
10393
} & (M extends 'metadata' ? Partial<TraktCollectionMetadata> & BaseSyncRequestItem<T> : BaseSyncRequestItem<T>);
10494

105-
export type TraktCollectionRequest<T extends 'metadata' | 'short' = 'short'> = {
95+
export type TraktCollectionRequest<T extends 'metadata' | Short = Short> = {
10696
movies?: TraktCollectionRequestItem<'movies', T>[];
10797
shows?: TraktCollectionRequestItem<'shows', T>[];
10898
seasons?: TraktCollectionRequestItem<'seasons', T>[];

src/models/trakt/trakt-comment.model.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { TraktSharing } from '~/models/trakt/trakt-entity.model';
1+
import type { Any, TraktSharing } from '~/models/trakt/trakt-entity.model';
22
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
33
import type { TraktList } from '~/models/trakt/trakt-list.model';
44
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
@@ -36,8 +36,8 @@ type BaseTraktCommentMedia = {
3636
list: TraktList;
3737
};
3838

39-
export type TraktCommentMedia<T extends 'any' | 'movie' | 'show' | 'season' | 'episode' | 'list' = 'any'> = {
40-
type: T extends 'any' ? BaseTraktCommentMedia['type'] : T;
39+
export type TraktCommentMedia<T extends Any | 'movie' | 'show' | 'season' | 'episode' | 'list' = Any> = {
40+
type: T extends Any ? BaseTraktCommentMedia['type'] : T;
4141
} & (T extends 'movie'
4242
? Pick<BaseTraktCommentMedia, 'movie'>
4343
: T extends 'show'
@@ -50,7 +50,7 @@ export type TraktCommentMedia<T extends 'any' | 'movie' | 'show' | 'season' | 'e
5050
? Pick<BaseTraktCommentMedia, 'list'>
5151
: RequireAtLeastOne<BaseTraktCommentMedia>);
5252

53-
export type TraktCommentItem<T extends 'any' | 'movie' | 'show' | 'season' | 'episode' | 'list' = 'any'> = TraktCommentMedia<T> & {
53+
export type TraktCommentItem<T extends Any | 'movie' | 'show' | 'season' | 'episode' | 'list' = Any> = TraktCommentMedia<T> & {
5454
comment: TraktComment;
5555
};
5656

@@ -67,7 +67,7 @@ type BaseTraktCommentRequest = {
6767
list: Pick<TraktList, 'ids'>;
6868
};
6969

70-
export type TraktCommentRequest<T extends 'any' | 'movie' | 'show' | 'season' | 'episode' | 'list' = 'any'> = {
70+
export type TraktCommentRequest<T extends Any | 'movie' | 'show' | 'season' | 'episode' | 'list' = Any> = {
7171
/** Text for the comment. */
7272
comment: string;
7373
/** Is this a spoiler? Defaults to false */

src/models/trakt/trakt-entity.model.ts

+12
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,18 @@ export type StartDateParam = {
7878
start_date?: string;
7979
};
8080

81+
export const EntityType = {
82+
Short: 'short',
83+
Extended: 'extended',
84+
Any: 'any',
85+
} as const;
86+
87+
export type Any = typeof EntityType.Any;
88+
export type Short = typeof EntityType.Short;
89+
export type Extended = typeof EntityType.Extended;
90+
91+
export type EntityTypes = (typeof EntityType)[keyof typeof EntityType];
92+
8193
export const validateStartDate: TraktApiTemplate<StartDateParam>['validate'] = param => {
8294
if (param.start_date) TraktApiValidators.date(param.start_date);
8395
return true;

src/models/trakt/trakt-episode.model.ts

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Any, EntityTypes, Extended, Short } from '~/models/trakt/trakt-entity.model';
12
import type { TraktApiIds } from '~/models/trakt/trakt-id.model';
23
import type { TraktCast } from '~/models/trakt/trakt-people.model';
34

@@ -38,13 +39,13 @@ export type TraktEpisodeExtended = TraktEpisodeShort & {
3839
episode_type: TraktEpisodeTypes;
3940
};
4041

41-
export type TraktEpisode<T extends 'extended' | 'short' | 'any' = 'short'> = T extends 'extended'
42+
export type TraktEpisode<T extends EntityTypes = Short> = T extends Extended
4243
? TraktEpisodeExtended
43-
: T extends 'short'
44+
: T extends Short
4445
? TraktEpisodeShort
4546
: TraktEpisodeShort & Partial<TraktEpisodeExtended>;
4647

47-
export type TraktEpisodeCast = TraktCast<'any', 'short', 'any'>;
48+
export type TraktEpisodeCast = TraktCast<Any, Short, Any>;
4849

4950
export type TraktShowStats = {
5051
watchers: number;

src/models/trakt/trakt-favorite.model.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1+
import type { Any } from '~/models/trakt/trakt-entity.model';
12
import type { TraktList, TraktListItem } from '~/models/trakt/trakt-list.model';
23
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
34
import type { TraktShow } from '~/models/trakt/trakt-show.model';
45
import type { BaseSyncRequestItem } from '~/models/trakt/trakt-sync.model';
56

67
export type TraktFavoriteList = TraktList<'favorites'>;
78

8-
export type TraktFavoriteItem<T extends 'movie' | 'show' | 'any' = 'any'> = T extends 'movie'
9+
export type TraktFavoriteItem<T extends 'movie' | 'show' | Any = Any> = T extends 'movie'
910
? TraktListItem<'movie'>
1011
: T extends 'show'
1112
? TraktListItem<'show'>

src/models/trakt/trakt-history.model.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
1+
import type { Any, EntityTypes } from '~/models/trakt/trakt-entity.model';
12
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
23
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
34
import type { TraktSeason } from '~/models/trakt/trakt-season.model';
45
import type { TraktShow } from '~/models/trakt/trakt-show.model';
56
import type { BaseSyncRequestItem, TraktSyncRequest } from '~/models/trakt/trakt-sync.model';
67

7-
type TraktHistoryItem<T extends 'movie' | 'episode' | 'any' = 'any', E extends 'extended' | 'short' | 'any' = 'any'> = {
8-
type: T extends 'any' ? 'movie' | 'episode' : T;
8+
type TraktHistoryItem<T extends 'movie' | 'episode' | Any = Any, E extends EntityTypes = Any> = {
9+
type: T extends Any ? 'movie' | 'episode' : T;
910
} & (T extends 'movie'
1011
? { movie: TraktMovie<E> }
1112
: T extends 'episode'
1213
? { episode: TraktEpisode<E>; show: TraktShow<E> }
1314
: { movie: TraktMovie<E> } | { episode: TraktEpisode<E>; show: TraktShow<E> });
1415

15-
export type TraktHistory<T extends 'movie' | 'episode' | 'any' = 'any', E extends 'extended' | 'short' | 'any' = 'any'> = {
16+
export type TraktHistory<T extends 'movie' | 'episode' | Any = Any, E extends EntityTypes = Any> = {
1617
id: number;
1718
/** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */
1819
watched_at: string;
1920
action: 'scrobble' | 'checkin' | 'watch';
2021
} & TraktHistoryItem<T, E>;
2122

22-
export type TraktHistoryRequestItem<T extends 'movies' | 'shows' | 'seasons' | 'episodes' | 'any' = 'any'> = {
23+
export type TraktHistoryRequestItem<T extends 'movies' | 'shows' | 'seasons' | 'episodes' | Any = Any> = {
2324
/**
2425
* UTC datetime when the item was watched. - Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ)
2526
* Set to released to automatically use the inital release date + runtime (episodes only)).

src/models/trakt/trakt-list.model.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Any } from '~/models/trakt/trakt-entity.model';
12
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
23
import type { TraktApiIds } from '~/models/trakt/trakt-id.model';
34
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
@@ -68,7 +69,7 @@ export type BaseTraktListMedia = {
6869
person: TraktPerson;
6970
};
7071

71-
export type TraktListItem<T extends 'any' | 'movie' | 'show' | 'season' | 'episode' | 'person' = 'any'> = BaseTraktListItem &
72+
export type TraktListItem<T extends Any | 'movie' | 'show' | 'season' | 'episode' | 'person' = Any> = BaseTraktListItem &
7273
(T extends 'movie'
7374
? Pick<BaseTraktListMedia, 'movie'> & { type: 'movie' }
7475
: T extends 'show'
@@ -89,7 +90,7 @@ export type BaseTraktUserListItemMedia = {
8990
person: Partial<TraktPerson> & Pick<TraktPerson, 'ids'>;
9091
};
9192

92-
export type TraktUserListItem<T extends 'any' | 'movie' | 'show' | 'season' | 'episode' | 'person' = 'any'> = T extends 'movie'
93+
export type TraktUserListItem<T extends Any | 'movie' | 'show' | 'season' | 'episode' | 'person' = Any> = T extends 'movie'
9394
? Pick<BaseTraktUserListItemMedia, 'movie'>
9495
: T extends 'show'
9596
? Pick<BaseTraktUserListItemMedia, 'show'>

src/models/trakt/trakt-movie.model.ts

+10-9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Any, EntityTypes, Extended, Short } from '~/models/trakt/trakt-entity.model';
12
import type { TraktApiIds } from '~/models/trakt/trakt-id.model';
23
import type { TraktCast } from '~/models/trakt/trakt-people.model';
34

@@ -32,40 +33,40 @@ export type TraktMovieExtended = TraktMovieShort & {
3233
certification: string;
3334
};
3435

35-
export type TraktMovie<T extends 'extended' | 'short' | 'any' = 'short'> = T extends 'extended'
36+
export type TraktMovie<T extends EntityTypes = Short> = T extends Extended
3637
? TraktMovieExtended
37-
: T extends 'short'
38+
: T extends Short
3839
? TraktMovieShort
3940
: TraktMovieShort & Partial<TraktMovieExtended>;
4041

41-
export type TraktMovieTrending<T extends 'extended' | 'short' | 'any' = 'any'> = {
42+
export type TraktMovieTrending<T extends EntityTypes = Any> = {
4243
watchers: number;
4344
movie: TraktMovie<T>;
4445
};
4546

46-
export type TraktMovieFavorited<T extends 'extended' | 'short' | 'any' = 'any'> = {
47+
export type TraktMovieFavorited<T extends EntityTypes = Any> = {
4748
user_count: number;
4849
movie: TraktMovie<T>;
4950
};
5051

51-
export type TraktMoviePlayed<T extends 'extended' | 'short' | 'any' = 'any'> = {
52+
export type TraktMoviePlayed<T extends EntityTypes = Any> = {
5253
watcher_count: number;
5354
play_count: number;
5455
collected_count: number;
5556
movie: TraktMovie<T>;
5657
};
5758

58-
export type TraktMovieAnticipated<T extends 'extended' | 'short' | 'any' = 'any'> = {
59+
export type TraktMovieAnticipated<T extends EntityTypes = Any> = {
5960
list_count: number;
6061
movie: TraktMovie<T>;
6162
};
6263

63-
export type TraktMovieBoxOffice<T extends 'extended' | 'short' | 'any' = 'any'> = {
64+
export type TraktMovieBoxOffice<T extends EntityTypes = Any> = {
6465
revenue: number;
6566
movie: TraktMovie<T>;
6667
};
6768

68-
export type TraktMovieUpdate<T extends 'extended' | 'short' | 'any' = 'any'> = {
69+
export type TraktMovieUpdate<T extends EntityTypes = Any> = {
6970
/** Timestamp in ISO 8601 GMT format (YYYY-MM-DD'T'hh:mm:ss.sssZ) */
7071
updated_at: string;
7172
movie: TraktMovie<T>;
@@ -80,7 +81,7 @@ export type TraktMovieRelease = {
8081
note: string;
8182
};
8283

83-
export type TraktMovieCast = TraktCast<'short', 'short', 'any'>;
84+
export type TraktMovieCast = TraktCast<Short, Short, Any>;
8485

8586
export type TraktMovieStats = {
8687
watchers: number;

src/models/trakt/trakt-note.model.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { Any } from '~/models/trakt/trakt-entity.model';
12
import type { TraktEpisode } from '~/models/trakt/trakt-episode.model';
23
import type { TraktMovie } from '~/models/trakt/trakt-movie.model';
34
import type { TraktPerson } from '~/models/trakt/trakt-people.model';
@@ -46,7 +47,7 @@ export const TraktNoteType = {
4647

4748
export type TraktNoteTypes = (typeof TraktNoteType)[keyof typeof TraktNoteType];
4849

49-
type TraktNoteRequestItem<T extends TraktNoteTypes | 'any' = 'any'> = T extends 'movie'
50+
type TraktNoteRequestItem<T extends TraktNoteTypes | Any = Any> = T extends 'movie'
5051
? Pick<BaseTraktNoteRequestItem, 'movie'>
5152
: T extends 'show'
5253
? Pick<BaseTraktNoteRequestItem, 'show'>
@@ -58,7 +59,7 @@ type TraktNoteRequestItem<T extends TraktNoteTypes | 'any' = 'any'> = T extends
5859
? Pick<BaseTraktNoteRequestItem, 'person'>
5960
: RequireAtLeastOne<BaseTraktNoteRequestItem>;
6061

61-
export type TraktNoteRequest<T extends TraktNoteTypes | 'any' = 'any', I extends TraktNoteItemTypes | 'any' = 'any'> = BaseTraktNote &
62+
export type TraktNoteRequest<T extends TraktNoteTypes | Any = Any, I extends TraktNoteItemTypes | Any = Any> = BaseTraktNote &
6263
(T extends 'movie'
6364
? TraktNoteRequestItem<'movie'>
6465
: T extends 'show'
@@ -103,9 +104,9 @@ type BaseTraktNoteItem = {
103104
person: TraktPerson;
104105
};
105106

106-
export type TraktNoteItem<T extends TraktNoteTypes | 'any' = 'any'> = {
107-
type: T extends 'any' ? TraktNoteTypes : T;
108-
attached_to: { type: T extends 'any' ? TraktNoteTypes : T };
107+
export type TraktNoteItem<T extends TraktNoteTypes | Any = Any> = {
108+
type: T extends Any ? TraktNoteTypes : T;
109+
attached_to: { type: T extends Any ? TraktNoteTypes : T };
109110
} & (T extends 'movie'
110111
? Pick<BaseTraktNoteItem, 'movie'>
111112
: T extends 'show'

0 commit comments

Comments
 (0)