tiktok-api-dl/src/index.ts
2024-07-08 08:31:48 +07:00

88 lines
3.5 KiB
TypeScript

/** Downloader */
import { MusicalDown } from "./utils/downloader/musicalDown"
import { SSSTik } from "./utils/downloader/ssstik"
import { TiktokAPI } from "./utils/downloader/tiktokApi"
/** Search */
import { StalkUser } from "./utils/search/stalker"
import { SearchUser } from "./utils/search/userSearch"
/** Types */
import { MusicalDownResponse } from "./types/downloader/musicaldown"
import { SSSTikResponse } from "./types/downloader/ssstik"
import { TiktokAPIResponse } from "./types/downloader/tiktokApi"
import { TiktokUserSearchResponse } from "./types/search/userSearch"
import { StalkResult } from "./types/search/stalker"
import { SearchLive } from "./utils/search/liveSearch"
import { TiktokLiveSearchResponse } from "./types/search/liveSearch"
type TiktokDownloaderResponse<T extends "v1" | "v2" | "v3"> = T extends "v1" ? TiktokAPIResponse : T extends "v2" ? SSSTikResponse : T extends "v3" ? MusicalDownResponse : TiktokAPIResponse
type TiktokSearchResponse<T extends "user" | "live"> = T extends "user" ? TiktokUserSearchResponse : T extends "live" ? any : TiktokLiveSearchResponse
export = {
/**
* Tiktok Downloader
* @param {string} url - The Tiktok URL you want to download
* @param {object} options - The options for downloader
* @param {string} options.version - The version of downloader
* @returns {Promise<TiktokDownloaderResponse>}
*/
Downloader: async <T extends "v1" | "v2" | "v3">(url: string, options?: { version: T }): Promise<TiktokDownloaderResponse<T>> => {
switch (options?.version) {
case "v1": {
const response = await TiktokAPI(url)
return response as TiktokDownloaderResponse<T>
}
case "v2": {
const response = await SSSTik(url)
return response as TiktokDownloaderResponse<T>
}
case "v3": {
const response = await MusicalDown(url)
return response as TiktokDownloaderResponse<T>
}
default: {
const response = await TiktokAPI(url)
return response as TiktokDownloaderResponse<T>
}
}
},
/**
* Tiktok Search
* @param {string} query - The query you want to search
* @param {object} options - The options for search
* @param {string} options.type - The type of search
* @param {string} options.cookie - Your Tiktok Cookie (optional)
* @param {number} options.page - The page of search (optional)
* @returns {Promise<TiktokSearchResponse>}
*/
Search: async <T extends "user" | "live">(query: string, options: { type: T; cookie?: string; page?: number }): Promise<TiktokSearchResponse<T>> => {
switch (options?.type) {
case "user": {
const response = await SearchUser(query, options?.cookie, options?.page)
return response as TiktokSearchResponse<T>
}
case "live": {
const response = await SearchLive(query, options?.cookie, options?.page)
return response as TiktokSearchResponse<T>
}
default: {
const response = await SearchUser(query, options?.cookie, options?.page)
return response as TiktokSearchResponse<T>
}
}
},
/**
* Tiktok Stalk User
* @param {string} username - The username you want to stalk
* @param {object} options - The options for stalk
* @param {string} options.cookie - Your Tiktok Cookie (optional)
* @returns {Promise<StalkResult>}
*/
StalkUser: async (username: string, options?: { cookie?: string; postLimit?: number }): Promise<StalkResult> => {
const response = await StalkUser(username, options?.cookie, options?.postLimit)
return response
}
}