File size: 6,747 Bytes
95f4e64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.config = void 0;
exports.search = search;
exports.details = details;
exports.suggestions = suggestions;
exports.comments = comments;
exports.reviews = reviews;
exports.parentals = parentals;
exports.upcomming = upcomming;
const cross_fetch_1 = __importDefault(require("cross-fetch"));
/**
 * TODO: Implement proxy?
 */
exports.config = {
    baseUrl: 'https://yts.mx/api/v2/',
    format: 'json',
    paths: {
        search: '/list_movies',
        details: '/movie_details',
        suggestions: '/movie_suggestions',
        comments: '/movie_comments',
        reviews: '/movie_reviews',
        parentals: '/movie_parental_guides',
        upcomming: '/list_upcoming',
    }
};
/**
 * TypeScript compiler complains about strings only
 * This helper converts all params to strings
 *
 * @param params
 * @returns URLSearchParams
 */
function searchParams(params) {
    Object.keys(params).forEach(param => params[param] = params[param].toString());
    return new URLSearchParams(params);
}
/**
 * Send a request to YTS API
 *
 * @param path      - path to api endpoint
 * @param params    - https://yts.mx/api
 * @param format    - json|jsonp|xml
 * @returns
 */
function doFetch(path_1, params_1) {
    return __awaiter(this, arguments, void 0, function* (path, params, format = exports.config.format) {
        try {
            return yield (0, cross_fetch_1.default)(`${exports.config.baseUrl}/${path}?${params}`.replace('///', '/')).then((response) => __awaiter(this, void 0, void 0, function* () {
                if (format === 'xml') {
                    return yield response.text();
                }
                return yield response.json();
            }));
        }
        catch (e) {
            if (e instanceof Error) {
                throw new YtsApiException(e.message);
            }
            throw new YtsApiException('Could not fullfill request');
        }
    });
}
/**
 * Used to list and search through out all the available movies. Can sort, filter, search and order the results
 *
 * @param params
 * @param format
 * @returns
 */
function search(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.search}.${format || exports.config.format}`, params ? searchParams(params) : undefined, format);
    });
}
/**
 * Returns the information about a specific movie
 *
 * @param params
 * @param format
 * @returns
 */
function details(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        if (typeof params.movie_id === 'string' && params.movie_id.match(/tt/)) {
            return yield doFetch(`${exports.config.paths.details}.${format || exports.config.format}`, searchParams(Object.assign({ imdb_id: params.movie_id }, params)), format);
        }
        return yield doFetch(`${exports.config.paths.details}.${format || exports.config.format}`, searchParams(params), format);
    });
}
/**
 * Returns 4 related movies as suggestions for the user
 *
 * @param params
 * @param format
 * @returns
 */
function suggestions(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.suggestions}.${format || exports.config.format}`, searchParams(params), format);
    });
}
/**
 * Returns all the comments for the specified movie
 *
 * ! NOTE: The API route is broken, this function is non functional for the time being
 * ! Mabye in the future this will be working again. This is a YTS problem and not a package problem
 * ! As soon as these routings are working as intended I will remove the @deprecated marker

 * @deprecated This method is not working, API route is not working on YTS side
 * @param params
 * @param format
 */
function comments(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.comments}.${format || exports.config.format}`, searchParams(params), format);
    });
}
/**
 * Returns all the IMDb movie reviews for the specified movie
 *
 * ! NOTE: The API route is broken, this function is non functional for the time being
 * ! Mabye in the future this will be working again. This is a YTS problem and not a package problem
 * ! As soon as these routings are working as intended I will remove the @deprecated marker

 * @deprecated This method is not working, API route is not working on YTS side
 * @param params
 * @param format
 */
function reviews(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.reviews}.${format || exports.config.format}`, searchParams(params), format);
    });
}
/**
 * Returns all the parental guide ratings for the specified movie
 *
 * ! Apparently this is not yet implemented inside the YTS API
 *
 * @param params
 * @param format
 * @returns
 */
function parentals(params, format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.parentals}.${format || exports.config.format}`, searchParams(params), format);
    });
}
/**
 * Returns the 4 latest upcoming movies
 *
 * ! NOTE: The API route is broken, this function is non functional for the time being
 * ! Mabye in the future this will be working again. This is a YTS problem and not a package problem
 * ! As soon as these routings are working as intended I will remove the @deprecated marker

 * @deprecated This method is not working, API route is not working on YTS side
 * @param format
 * @returns
 */
function upcomming(format) {
    return __awaiter(this, void 0, void 0, function* () {
        return yield doFetch(`${exports.config.paths.upcomming}.${format || exports.config.format}`, undefined, format);
    });
}
class YtsApiException extends Error {
}
//# sourceMappingURL=main.js.map