From d744b80f946a1d2c5500e35f3d245c78bd9bd27b Mon Sep 17 00:00:00 2001 From: Artemy Date: Wed, 9 Aug 2023 10:05:30 +0300 Subject: [PATCH] refactor: add Types --- src/index.ts | 154 +---------------------------------------------- src/piped-api.ts | 152 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 154 insertions(+), 152 deletions(-) create mode 100644 src/piped-api.ts diff --git a/src/index.ts b/src/index.ts index 4543d8b..1a9a150 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,152 +1,2 @@ -import axios from "axios"; -import { - Channel, - Comments, - NextPageChannel, - NextPagePlaylist, - Playlist, - Search, - Sponsors, - Streams, - Video, -} from "./responses.interface"; - -export class PipedAPI { - host: string; - constructor(host: string = "https://pipedapi.kavin.rocks") { - this.host = host; - } - - /** - * Retrieves data from the specified URL. - * - * @param {string} url - The URL from which to retrieve data. - * @return {Promise} - A Promise that resolves to the parsed JSON data. - */ - private async _get(url: string) { - const data = await axios.get(`${this.host}${url}`); - return data.data; - } - - /** - * Retrieves the trending videos for a specific region. - * - * @param {string} region - The region for which to retrieve trending videos. - * @return {Promise} - A promise that resolves to an array of Video objects representing the trending videos. - */ - async trending(region: string): Promise { - return await this._get(`/trending?region=${region}`); - } - - /** - * Retrieves the streams for a given video ID. - * - * @param {string} videoId - The ID of the video. - * @return {Promise} A promise that resolves to the streams for the given video ID. - */ - async streams(videoId: string): Promise { - return await this._get(`/streams/${videoId}`); - } - - /** - * Retrieves comments for a specific video. - * - * @param {string} videoId - The ID of the video for which to retrieve comments. - * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). - * @returns {Promise} A Promise that resolves to the comments for the video. - */ - async comments(videoId: string, nextpage?: string): Promise { - return nextpage - ? await this._get(`/nextpage/comments/${videoId}?nextpage=${nextpage}`) - : await this._get(`/comments/${videoId}`); - } - - /** - * Retrieves a channel by its ID. - * - * @param {string} id - The ID of the channel to retrieve. - * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). - * @return {Promise} A Promise that resolves to the retrieved Channel object. - */ - async channel( - id: string, - nextpage?: string - ): Promise { - return nextpage - ? await this._get(`/nextpage/channel/${id}?nextpage=${nextpage}`) - : await this._get(`/channel/${id}`); - } - - /** - * Retrieves a channel by its name. - * - * @param {string} name - The name of the channel. - * @return {Promise} A promise that resolves to the channel object. - */ - async channelByName(name: string): Promise { - return await this._get(`/c/${name}`); - } - - /** - * Retrieves a user by their name. - * - * @param {string} name - The name of the user. - * @return {Promise} A Promise that resolves to the user's channel. - */ - async user(name: string): Promise { - return await this._get(`/user/${name}`); - } - - /** - * Retrieves a playlist based on its ID. - * - * @param {string} id - The ID of the playlist to retrieve. - * @param {string} nextpage - The token for the next page of results (optional). - * @return {Promise} A Promise that resolves to a Playlist or NextPagePlaylist object. - */ - async playlist( - id: string, - nextpage?: string - ): Promise { - return nextpage - ? await this._get(`/nextpage/playlists/${id}?nextpage=${nextpage}`) - : await this._get(`/playlists/${id}`); - } - - /** - * Retrieves suggestions based on the given query. - * - * @param {string} query - The query string to search for suggestions. - * @return {Promise} A promise that resolves to an array of string suggestions. - */ - async suggestions(query: string): Promise { - return await this._get(`/suggestions?query=${query}`); - } - - /** - * Retrieves sponsors based on the provided ID and category. - * - * @param {string} id - The ID of the video. - * @param {string[]} category - The category of sponsors you would like to skip. Example: ["sponsor"]. - * @return {Promise} A promise that resolves to the sponsors. - */ - async sponsors( - id: string, - category: string[] = ["sponsor"] - ): Promise { - return await this._get( - `/sponsors/${id}?category=${JSON.stringify(category)}` - ); - } - - /** - * Searches videos for a given query with an optional filter. - * - * @param {string} query - The query to search for. - * @param {string} [filter="all"] - The optional filter to apply. - * @returns {Promise} - A Promise that resolves to the search results. - */ - async search(query: string, filter: string = "all"): Promise { - return await this._get(`/search?q=${query}&filter=${filter}`); - } -} +export { PipedAPI } from "./piped-api"; +export * as Types from "./responses.interface"; diff --git a/src/piped-api.ts b/src/piped-api.ts new file mode 100644 index 0000000..4543d8b --- /dev/null +++ b/src/piped-api.ts @@ -0,0 +1,152 @@ +import axios from "axios"; +import { + Channel, + Comments, + NextPageChannel, + NextPagePlaylist, + Playlist, + Search, + Sponsors, + Streams, + Video, +} from "./responses.interface"; + +export class PipedAPI { + host: string; + constructor(host: string = "https://pipedapi.kavin.rocks") { + this.host = host; + } + + /** + * Retrieves data from the specified URL. + * + * @param {string} url - The URL from which to retrieve data. + * @return {Promise} - A Promise that resolves to the parsed JSON data. + */ + private async _get(url: string) { + const data = await axios.get(`${this.host}${url}`); + return data.data; + } + + /** + * Retrieves the trending videos for a specific region. + * + * @param {string} region - The region for which to retrieve trending videos. + * @return {Promise} - A promise that resolves to an array of Video objects representing the trending videos. + */ + async trending(region: string): Promise { + return await this._get(`/trending?region=${region}`); + } + + /** + * Retrieves the streams for a given video ID. + * + * @param {string} videoId - The ID of the video. + * @return {Promise} A promise that resolves to the streams for the given video ID. + */ + async streams(videoId: string): Promise { + return await this._get(`/streams/${videoId}`); + } + + /** + * Retrieves comments for a specific video. + * + * @param {string} videoId - The ID of the video for which to retrieve comments. + * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). + * @returns {Promise} A Promise that resolves to the comments for the video. + */ + async comments(videoId: string, nextpage?: string): Promise { + return nextpage + ? await this._get(`/nextpage/comments/${videoId}?nextpage=${nextpage}`) + : await this._get(`/comments/${videoId}`); + } + + /** + * Retrieves a channel by its ID. + * + * @param {string} id - The ID of the channel to retrieve. + * @param {string} nextpage - The JSON encoded nextpage variable, to be sent as a query string (optional). + * @return {Promise} A Promise that resolves to the retrieved Channel object. + */ + async channel( + id: string, + nextpage?: string + ): Promise { + return nextpage + ? await this._get(`/nextpage/channel/${id}?nextpage=${nextpage}`) + : await this._get(`/channel/${id}`); + } + + /** + * Retrieves a channel by its name. + * + * @param {string} name - The name of the channel. + * @return {Promise} A promise that resolves to the channel object. + */ + async channelByName(name: string): Promise { + return await this._get(`/c/${name}`); + } + + /** + * Retrieves a user by their name. + * + * @param {string} name - The name of the user. + * @return {Promise} A Promise that resolves to the user's channel. + */ + async user(name: string): Promise { + return await this._get(`/user/${name}`); + } + + /** + * Retrieves a playlist based on its ID. + * + * @param {string} id - The ID of the playlist to retrieve. + * @param {string} nextpage - The token for the next page of results (optional). + * @return {Promise} A Promise that resolves to a Playlist or NextPagePlaylist object. + */ + async playlist( + id: string, + nextpage?: string + ): Promise { + return nextpage + ? await this._get(`/nextpage/playlists/${id}?nextpage=${nextpage}`) + : await this._get(`/playlists/${id}`); + } + + /** + * Retrieves suggestions based on the given query. + * + * @param {string} query - The query string to search for suggestions. + * @return {Promise} A promise that resolves to an array of string suggestions. + */ + async suggestions(query: string): Promise { + return await this._get(`/suggestions?query=${query}`); + } + + /** + * Retrieves sponsors based on the provided ID and category. + * + * @param {string} id - The ID of the video. + * @param {string[]} category - The category of sponsors you would like to skip. Example: ["sponsor"]. + * @return {Promise} A promise that resolves to the sponsors. + */ + async sponsors( + id: string, + category: string[] = ["sponsor"] + ): Promise { + return await this._get( + `/sponsors/${id}?category=${JSON.stringify(category)}` + ); + } + + /** + * Searches videos for a given query with an optional filter. + * + * @param {string} query - The query to search for. + * @param {string} [filter="all"] - The optional filter to apply. + * @returns {Promise} - A Promise that resolves to the search results. + */ + async search(query: string, filter: string = "all"): Promise { + return await this._get(`/search?q=${query}&filter=${filter}`); + } +}