movie-agent 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +464 -0
- package/bin/movie-agent +209 -0
- package/dist/agent.d.ts +89 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +365 -0
- package/dist/agent.js.map +1 -0
- package/dist/cache.d.ts +75 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +133 -0
- package/dist/cache.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -0
- package/dist/discover.d.ts +38 -0
- package/dist/discover.d.ts.map +1 -0
- package/dist/discover.js +121 -0
- package/dist/discover.js.map +1 -0
- package/dist/factory.d.ts +87 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +118 -0
- package/dist/factory.js.map +1 -0
- package/dist/filters.d.ts +61 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +97 -0
- package/dist/filters.js.map +1 -0
- package/dist/format.d.ts +33 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +85 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/mood.d.ts +7 -0
- package/dist/mood.d.ts.map +1 -0
- package/dist/mood.js +21 -0
- package/dist/mood.js.map +1 -0
- package/dist/providers.d.ts +10 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +70 -0
- package/dist/providers.js.map +1 -0
- package/dist/ranking.d.ts +57 -0
- package/dist/ranking.d.ts.map +1 -0
- package/dist/ranking.js +198 -0
- package/dist/ranking.js.map +1 -0
- package/dist/tmdbApi.d.ts +79 -0
- package/dist/tmdbApi.d.ts.map +1 -0
- package/dist/tmdbApi.js +88 -0
- package/dist/tmdbApi.js.map +1 -0
- package/dist/types.d.ts +99 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validate.d.ts +13 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +47 -0
- package/dist/validate.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ranking.js","sourceRoot":"","sources":["../src/ranking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export interface MovieSummary {
|
|
2
|
+
id: number;
|
|
3
|
+
title: string;
|
|
4
|
+
overview?: string;
|
|
5
|
+
release_date?: string;
|
|
6
|
+
genre_ids?: number[];
|
|
7
|
+
vote_average?: number;
|
|
8
|
+
popularity?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface DiscoverMoviesParams {
|
|
11
|
+
sort_by?: string;
|
|
12
|
+
with_genres?: string;
|
|
13
|
+
page?: number;
|
|
14
|
+
year?: number;
|
|
15
|
+
'primary_release_date.gte'?: string;
|
|
16
|
+
'primary_release_date.lte'?: string;
|
|
17
|
+
'with_runtime.gte'?: number;
|
|
18
|
+
'with_runtime.lte'?: number;
|
|
19
|
+
region?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DiscoverMoviesResponse {
|
|
22
|
+
page: number;
|
|
23
|
+
results: MovieSummary[];
|
|
24
|
+
total_pages: number;
|
|
25
|
+
total_results: number;
|
|
26
|
+
}
|
|
27
|
+
export interface MovieDetails extends MovieSummary {
|
|
28
|
+
genres?: {
|
|
29
|
+
id: number;
|
|
30
|
+
name: string;
|
|
31
|
+
}[];
|
|
32
|
+
runtime?: number;
|
|
33
|
+
tagline?: string;
|
|
34
|
+
homepage?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface SearchMoviesResponse extends DiscoverMoviesResponse {
|
|
37
|
+
}
|
|
38
|
+
export interface Genre {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
}
|
|
42
|
+
export interface GenresResponse {
|
|
43
|
+
genres: Genre[];
|
|
44
|
+
}
|
|
45
|
+
export interface WatchProvidersResponse {
|
|
46
|
+
id: number;
|
|
47
|
+
results: {
|
|
48
|
+
[countryCode: string]: {
|
|
49
|
+
link?: string;
|
|
50
|
+
flatrate?: {
|
|
51
|
+
provider_id: number;
|
|
52
|
+
provider_name: string;
|
|
53
|
+
}[];
|
|
54
|
+
rent?: {
|
|
55
|
+
provider_id: number;
|
|
56
|
+
provider_name: string;
|
|
57
|
+
}[];
|
|
58
|
+
buy?: {
|
|
59
|
+
provider_id: number;
|
|
60
|
+
provider_name: string;
|
|
61
|
+
}[];
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export declare class TmdbApiClient {
|
|
66
|
+
private readonly baseUrl;
|
|
67
|
+
private readonly apiKey;
|
|
68
|
+
private readonly region;
|
|
69
|
+
constructor(baseUrl?: string, apiKey?: string, region?: string);
|
|
70
|
+
private buildUrl;
|
|
71
|
+
private doFetch;
|
|
72
|
+
discoverMovies(params?: DiscoverMoviesParams): Promise<DiscoverMoviesResponse>;
|
|
73
|
+
getMovieDetails(movieId: number): Promise<MovieDetails>;
|
|
74
|
+
searchMovies(query: string, page?: number): Promise<SearchMoviesResponse>;
|
|
75
|
+
getGenres(): Promise<GenresResponse>;
|
|
76
|
+
getWatchProviders(movieId: number): Promise<WatchProvidersResponse>;
|
|
77
|
+
}
|
|
78
|
+
export default TmdbApiClient;
|
|
79
|
+
//# sourceMappingURL=tmdbApi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmdbApi.d.ts","sourceRoot":"","sources":["../src/tmdbApi.ts"],"names":[],"mappings":"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"}
|
package/dist/tmdbApi.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TmdbApiClient = void 0;
|
|
7
|
+
const config_1 = __importDefault(require("./config"));
|
|
8
|
+
class TmdbApiClient {
|
|
9
|
+
constructor(baseUrl, apiKey, region) {
|
|
10
|
+
this.baseUrl = baseUrl ?? config_1.default.TMDB_BASE_URL;
|
|
11
|
+
this.apiKey = apiKey ?? config_1.default.TMDB_API_KEY;
|
|
12
|
+
this.region = region ?? config_1.default.TMDB_REGION;
|
|
13
|
+
}
|
|
14
|
+
buildUrl(path, params) {
|
|
15
|
+
const normalizedBase = this.baseUrl.endsWith('/')
|
|
16
|
+
? this.baseUrl
|
|
17
|
+
: this.baseUrl + '/';
|
|
18
|
+
const url = new URL(path, normalizedBase);
|
|
19
|
+
// TMDb v3 supports API key via query string
|
|
20
|
+
url.searchParams.set('api_key', this.apiKey);
|
|
21
|
+
if (params) {
|
|
22
|
+
for (const [k, v] of Object.entries(params)) {
|
|
23
|
+
if (v !== undefined && v !== null) {
|
|
24
|
+
url.searchParams.set(k, String(v));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return url.toString();
|
|
29
|
+
}
|
|
30
|
+
async doFetch(url) {
|
|
31
|
+
let resp;
|
|
32
|
+
try {
|
|
33
|
+
resp = await fetch(url, {
|
|
34
|
+
headers: { Accept: 'application/json' },
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
throw new Error(`Network error calling TMDb API: ${err?.message ?? String(err)}`);
|
|
39
|
+
}
|
|
40
|
+
if (!resp.ok) {
|
|
41
|
+
const text = await resp.text().catch(() => '');
|
|
42
|
+
throw new Error(`TMDb API error ${resp.status}: ${text || resp.statusText}`);
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
return (await resp.json());
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
throw new Error(`Invalid JSON from TMDb API: ${err?.message ?? String(err)}`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async discoverMovies(params = {}) {
|
|
52
|
+
const url = this.buildUrl('discover/movie', {
|
|
53
|
+
sort_by: params.sort_by,
|
|
54
|
+
with_genres: params.with_genres,
|
|
55
|
+
page: params.page,
|
|
56
|
+
year: params.year,
|
|
57
|
+
'primary_release_date.gte': params['primary_release_date.gte'],
|
|
58
|
+
'primary_release_date.lte': params['primary_release_date.lte'],
|
|
59
|
+
'with_runtime.gte': params['with_runtime.gte'],
|
|
60
|
+
'with_runtime.lte': params['with_runtime.lte'],
|
|
61
|
+
region: params.region ?? this.region,
|
|
62
|
+
});
|
|
63
|
+
return this.doFetch(url);
|
|
64
|
+
}
|
|
65
|
+
async getMovieDetails(movieId) {
|
|
66
|
+
const url = this.buildUrl(`movie/${movieId}`, { region: this.region });
|
|
67
|
+
return this.doFetch(url);
|
|
68
|
+
}
|
|
69
|
+
async searchMovies(query, page) {
|
|
70
|
+
const url = this.buildUrl('search/movie', {
|
|
71
|
+
query,
|
|
72
|
+
page,
|
|
73
|
+
region: this.region,
|
|
74
|
+
});
|
|
75
|
+
return this.doFetch(url);
|
|
76
|
+
}
|
|
77
|
+
async getGenres() {
|
|
78
|
+
const url = this.buildUrl('genre/movie/list', { region: this.region });
|
|
79
|
+
return this.doFetch(url);
|
|
80
|
+
}
|
|
81
|
+
async getWatchProviders(movieId) {
|
|
82
|
+
const url = this.buildUrl(`movie/${movieId}/watch/providers`);
|
|
83
|
+
return this.doFetch(url);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
exports.TmdbApiClient = TmdbApiClient;
|
|
87
|
+
exports.default = TmdbApiClient;
|
|
88
|
+
//# sourceMappingURL=tmdbApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmdbApi.js","sourceRoot":"","sources":["../src/tmdbApi.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming platform information for a movie
|
|
3
|
+
*/
|
|
4
|
+
export interface StreamingPlatform {
|
|
5
|
+
/** Platform name (e.g., "Netflix", "Prime Video") */
|
|
6
|
+
name: string;
|
|
7
|
+
/** Type of access (e.g., "subscription", "free", "ads") */
|
|
8
|
+
type: string;
|
|
9
|
+
/** Whether the movie is currently available on this platform */
|
|
10
|
+
available: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Runtime constraints for movie filtering
|
|
14
|
+
*/
|
|
15
|
+
export interface RuntimeConstraints {
|
|
16
|
+
/** Minimum runtime in minutes */
|
|
17
|
+
min?: number;
|
|
18
|
+
/** Maximum runtime in minutes */
|
|
19
|
+
max?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Release year range for movie filtering
|
|
23
|
+
*/
|
|
24
|
+
export interface ReleaseYearRange {
|
|
25
|
+
/** Start year (inclusive) */
|
|
26
|
+
from: number;
|
|
27
|
+
/** End year (inclusive) */
|
|
28
|
+
to: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* User input parameters for movie recommendations
|
|
32
|
+
*/
|
|
33
|
+
export interface UserInput {
|
|
34
|
+
/** User's emotional state or desired feeling */
|
|
35
|
+
mood?: string;
|
|
36
|
+
/** Streaming platforms user has access to */
|
|
37
|
+
platforms?: string[];
|
|
38
|
+
/** Preferred genre(s) */
|
|
39
|
+
genre?: string | string[];
|
|
40
|
+
/** Runtime constraints in minutes */
|
|
41
|
+
runtime?: RuntimeConstraints;
|
|
42
|
+
/** Release year or year range */
|
|
43
|
+
releaseYear?: number | ReleaseYearRange;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Individual movie recommendation
|
|
47
|
+
*/
|
|
48
|
+
export interface MovieRecommendation {
|
|
49
|
+
/** Movie title */
|
|
50
|
+
title: string;
|
|
51
|
+
/** Year of release */
|
|
52
|
+
releaseYear: number;
|
|
53
|
+
/** Runtime in minutes */
|
|
54
|
+
runtime: number;
|
|
55
|
+
/** Non-spoiler description (50-100 words) */
|
|
56
|
+
description: string;
|
|
57
|
+
/** List of genres */
|
|
58
|
+
genres: string[];
|
|
59
|
+
/** Available streaming platforms */
|
|
60
|
+
streamingPlatforms: StreamingPlatform[];
|
|
61
|
+
/** Explanation of why this movie was recommended */
|
|
62
|
+
matchReason: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Metadata about the recommendation request
|
|
66
|
+
*/
|
|
67
|
+
export interface ResponseMetadata {
|
|
68
|
+
/** ISO timestamp of when the request was made */
|
|
69
|
+
requestTimestamp: string;
|
|
70
|
+
/** Total number of recommendations returned */
|
|
71
|
+
totalResults: number;
|
|
72
|
+
/** Input parameters used for the request */
|
|
73
|
+
inputParameters: UserInput;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Complete agent response with recommendations and metadata
|
|
77
|
+
*/
|
|
78
|
+
export interface AgentResponse {
|
|
79
|
+
/** List of 3-5 movie recommendations */
|
|
80
|
+
recommendations: MovieRecommendation[];
|
|
81
|
+
/** Request metadata */
|
|
82
|
+
metadata: ResponseMetadata;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Error response structure for handling failures
|
|
86
|
+
*/
|
|
87
|
+
export interface ErrorResponse {
|
|
88
|
+
/** Error indicator */
|
|
89
|
+
error: true;
|
|
90
|
+
/** Error type category */
|
|
91
|
+
errorType: 'MCP_UNAVAILABLE' | 'INVALID_API_KEY' | 'RATE_LIMIT_EXCEEDED' | 'VALIDATION_ERROR' | 'NO_RESULTS' | 'UNKNOWN_ERROR';
|
|
92
|
+
/** Human-readable error message */
|
|
93
|
+
message: string;
|
|
94
|
+
/** ISO timestamp of when the error occurred */
|
|
95
|
+
timestamp: string;
|
|
96
|
+
/** Optional details for debugging */
|
|
97
|
+
details?: string;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,yBAAyB;IACzB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,oCAAoC;IACpC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,eAAe,EAAE,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,uBAAuB;IACvB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,KAAK,EAAE,IAAI,CAAC;IACZ,0BAA0B;IAC1B,SAAS,EACL,iBAAiB,GACjB,iBAAiB,GACjB,qBAAqB,GACrB,kBAAkB,GAClB,YAAY,GACZ,eAAe,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const ALLOWED_PLATFORMS: string[];
|
|
2
|
+
export declare function isValidPlatform(name: string): boolean;
|
|
3
|
+
export declare function validatePlatforms(platforms: string[]): void;
|
|
4
|
+
export declare function validateRuntime({ min, max, }: {
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
}): void;
|
|
8
|
+
export declare function validateYear(year: number): void;
|
|
9
|
+
export declare function validateYearRange({ from, to, }: {
|
|
10
|
+
from: number;
|
|
11
|
+
to: number;
|
|
12
|
+
}): void;
|
|
13
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,UAU7B,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAK3D;AAED,wBAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,GAAG,GACJ,EAAE;IACD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,IAAI,CAMP;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,EAAE,GACH,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ,GAAG,IAAI,CAMP"}
|
package/dist/validate.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Input validation utilities for movie-agent
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ALLOWED_PLATFORMS = void 0;
|
|
5
|
+
exports.isValidPlatform = isValidPlatform;
|
|
6
|
+
exports.validatePlatforms = validatePlatforms;
|
|
7
|
+
exports.validateRuntime = validateRuntime;
|
|
8
|
+
exports.validateYear = validateYear;
|
|
9
|
+
exports.validateYearRange = validateYearRange;
|
|
10
|
+
exports.ALLOWED_PLATFORMS = [
|
|
11
|
+
'Netflix',
|
|
12
|
+
'Prime Video',
|
|
13
|
+
'Crave',
|
|
14
|
+
'Disney+',
|
|
15
|
+
'Apple TV+',
|
|
16
|
+
'Paramount+',
|
|
17
|
+
'Hayu',
|
|
18
|
+
'Tubi',
|
|
19
|
+
'Pluto TV',
|
|
20
|
+
];
|
|
21
|
+
function isValidPlatform(name) {
|
|
22
|
+
return exports.ALLOWED_PLATFORMS.includes(name);
|
|
23
|
+
}
|
|
24
|
+
function validatePlatforms(platforms) {
|
|
25
|
+
const invalid = platforms.filter(p => !isValidPlatform(p));
|
|
26
|
+
if (invalid.length > 0) {
|
|
27
|
+
throw new Error(`Invalid platform(s): ${invalid.join(', ')}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function validateRuntime({ min, max, }) {
|
|
31
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
32
|
+
throw new Error(`min runtime (${min}) cannot be greater than max runtime (${max})`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function validateYear(year) {
|
|
36
|
+
if (!Number.isInteger(year) || year < 1800 || year > 2100) {
|
|
37
|
+
throw new Error(`Invalid year: ${year}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function validateYearRange({ from, to, }) {
|
|
41
|
+
validateYear(from);
|
|
42
|
+
validateYear(to);
|
|
43
|
+
if (from > to) {
|
|
44
|
+
throw new Error(`Year range invalid: from (${from}) > to (${to})`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":";AAAA,6CAA6C;;;AAc7C,0CAEC;AAED,8CAKC;AAED,0CAYC;AAED,oCAIC;AAED,8CAYC;AAvDY,QAAA,iBAAiB,GAAG;IAC/B,SAAS;IACT,aAAa;IACb,OAAO;IACP,SAAS;IACT,WAAW;IACX,YAAY;IACZ,MAAM;IACN,MAAM;IACN,UAAU;CACX,CAAC;AAEF,SAAgB,eAAe,CAAC,IAAY;IAC1C,OAAO,yBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAmB;IACnD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAAC,EAC9B,GAAG,EACH,GAAG,GAIJ;IACC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,gBAAgB,GAAG,yCAAyC,GAAG,GAAG,CACnE,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,EAAE,GAIH;IACC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,WAAW,EAAE,GAAG,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "movie-agent",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Movie Agent - A TypeScript-based movie recommendation agent",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"movie-agent": "./bin/movie-agent"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"bin",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"dev": "dotenv -e .env.development -- ts-node src/index.ts",
|
|
19
|
+
"start": "node bin/movie-agent",
|
|
20
|
+
"start:prod": "dotenv -e .env.production -- node dist/index.js",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test:unit": "jest --testPathIgnorePatterns=e2e.test.ts --testPathIgnorePatterns=live.test.ts",
|
|
23
|
+
"test:integration": "jest --testPathPattern=live.test.ts",
|
|
24
|
+
"test:e2e": "jest --testPathPattern=e2e.test.ts",
|
|
25
|
+
"test:coverage": "jest --coverage --testPathIgnorePatterns=live.test.ts",
|
|
26
|
+
"test:watch": "jest --watch --testPathIgnorePatterns=live.test.ts",
|
|
27
|
+
"test:ci": "jest --coverage --ci --runInBand --testPathIgnorePatterns=live.test.ts",
|
|
28
|
+
"lint": "eslint . --ext .ts",
|
|
29
|
+
"lint:fix": "eslint . --ext .ts --fix",
|
|
30
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
31
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
32
|
+
"type-check": "tsc --noEmit",
|
|
33
|
+
"validate": "npm run type-check && npm run lint && npm run test:coverage",
|
|
34
|
+
"validate:ci": "npm run type-check && npm run lint && npm run format:check && npm run test:ci && npm run build",
|
|
35
|
+
"clean": "rm -rf dist coverage",
|
|
36
|
+
"prebuild": "npm run clean",
|
|
37
|
+
"prepublishOnly": "npm run validate:ci",
|
|
38
|
+
"prepare": "husky"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"movie",
|
|
42
|
+
"agent",
|
|
43
|
+
"typescript"
|
|
44
|
+
],
|
|
45
|
+
"author": "imWayneWY",
|
|
46
|
+
"license": "ISC",
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "git+https://github.com/imWayneWY/movie-agent.git"
|
|
50
|
+
},
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/imWayneWY/movie-agent/issues"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://github.com/imWayneWY/movie-agent#readme",
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/jest": "^29.5.11",
|
|
57
|
+
"@types/node": "^20.10.6",
|
|
58
|
+
"@typescript-eslint/eslint-plugin": "^6.17.0",
|
|
59
|
+
"@typescript-eslint/parser": "^6.17.0",
|
|
60
|
+
"dotenv-cli": "^7.1.0",
|
|
61
|
+
"eslint": "^8.56.0",
|
|
62
|
+
"husky": "^9.1.7",
|
|
63
|
+
"jest": "^29.7.0",
|
|
64
|
+
"prettier": "^3.1.1",
|
|
65
|
+
"ts-jest": "^29.1.1",
|
|
66
|
+
"ts-node": "^10.9.2",
|
|
67
|
+
"typescript": "^5.3.3"
|
|
68
|
+
},
|
|
69
|
+
"dependencies": {
|
|
70
|
+
"dotenv": "^16.4.5"
|
|
71
|
+
}
|
|
72
|
+
}
|