btch-downloader
Version:
A lightweight TypeScript/JavaScript library for downloading media from social media platforms
502 lines • 15.5 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.issues = exports.developer = exports.VERSION = void 0;
exports.fbdown = fbdown;
exports.igdl = igdl;
exports.ttdl = ttdl;
exports.twitter = twitter;
exports.youtube = youtube;
exports.mediafire = mediafire;
exports.capcut = capcut;
exports.gdrive = gdrive;
exports.pinterest = pinterest;
exports.aio = aio;
exports.xiaohongshu = xiaohongshu;
exports.douyin = douyin;
exports.snackvideo = snackvideo;
exports.cocofun = cocofun;
exports.spotify = spotify;
exports.yts = yts;
exports.soundcloud = soundcloud;
exports.threads = threads;
const site_1 = __importDefault(require("./Defaults/site"));
const config_1 = __importDefault(require("./Watermark/config"));
const package_json_1 = __importDefault(require("../package.json"));
const btch_http_1 = require("btch-http");
const { config, issues } = site_1.default;
exports.issues = issues;
const wm = config_1.default.dev;
exports.developer = wm;
const timeout = 60000;
const version = package_json_1.default.version;
exports.VERSION = version;
// Generic error response formatter
const formatErrorResponse = (error) => ({
developer: wm,
status: false,
message: error instanceof Error ? error.message : 'Unknown error',
note: `Please report issues to ${issues}`
});
/**
* TikTok video downloader
* @async
* @function ttdl
* @param {string} url - TikTok video URL
* @returns {Promise<TikTokResponse>} Object containing video info and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await ttdl('https://tiktok.com/@user/video/123');
* console.log(result.video[0]); // Video download URL
*/
async function ttdl(url) {
try {
const data = await (0, btch_http_1.HttpGet)('ttdl', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
title: data.title,
title_audio: data.title_audio,
thumbnail: data.thumbnail,
video: data.video,
audio: data.audio
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Instagram content downloader
* @async
* @function igdl
* @param {string} url - Instagram post URL (reels/posts/stories)
* @returns {Promise<InstagramResponse>} Array of media items with download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await igdl('https://instagram.com/p/Cxyz...');
* result.forEach(item => console.log(item.url));
*/
async function igdl(url) {
try {
const data = await (0, btch_http_1.HttpGet)('igdl', url, version, timeout, config.baseUrl);
if (!data || data.length === 0) {
return {
...formatErrorResponse(new Error('No results found')),
status: false
};
}
const result = [];
for (const item of data) {
result.push({
thumbnail: item.thumbnail,
url: item.url
});
}
return {
developer: wm,
status: true,
result
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Twitter video downloader
* @async
* @function twitter
* @param {string} url - Twitter video URL
* @returns {Promise<TwitterResponse>} Object containing video info
* @throws {Error} When invalid URL or request fails
* @example
* const result = await twitter('https://twitter.com/user/status/123');
*/
async function twitter(url) {
try {
const data = await (0, btch_http_1.HttpGet)('twitter', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
title: data.title,
url: data.url
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* YouTube video downloader
* @async
* @function youtube
* @param {string} url - YouTube video URL
* @returns {Promise<YouTubeResponse>} Object containing video and audio download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await youtube('https://youtube.com/watch?v=123');
* console.log(result.mp4); // Video download URL
*/
async function youtube(url) {
try {
const data = await (0, btch_http_1.HttpGet)('youtube', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
title: data.title,
thumbnail: data.thumbnail,
author: data.author,
mp3: data.mp3,
mp4: data.mp4
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Facebook video downloader
* @async
* @function fbdown
* @param {string} url - Facebook video URL
* @returns {Promise<FacebookResponse>} Object containing video quality options
* @throws {Error} When invalid URL or request fails
* @example
* const result = await fbdown('https://facebook.com/watch/?v=123');
* console.log(result.HD); // HD quality URL
*/
async function fbdown(url) {
try {
const data = await (0, btch_http_1.HttpGet)('fbdown', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
Normal_video: data.Normal_video,
HD: data.HD
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* MediaFire file downloader
* @async
* @function mediafire
* @param {string} url - MediaFire file URL
* @returns {Promise<MediaFireResponse>} Object containing file info
* @throws {Error} When invalid URL or request fails
* @example
* const result = await mediafire('https://mediafire.com/file/123');
* console.log(result.result.filename); // Downloaded filename
*/
async function mediafire(url) {
try {
const data = await (0, btch_http_1.HttpGet)('mediafire', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* CapCut template downloader
* @async
* @function capcut
* @param {string} url - CapCut template URL
* @returns {Promise<CapCutResponse>} Object containing template info
* @throws {Error} When invalid URL or request fails
* @example
* const result = await capcut('https://capcut.com/template/123');
*/
async function capcut(url) {
try {
const data = await (0, btch_http_1.HttpGet)('capcut', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
...data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* All In One Downloader
* @async
* @function aio
* @param {string} url - Video URL
* @returns {Promise<AioApiResponse>} Object containing video info
* @throws {Error} When invalid URL or request fails
* @example
* const result = await aio('https://tiktok.com/@user/video/123');
*/
async function aio(url) {
try {
const data = await (0, btch_http_1.HttpGet)('aio', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
...data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Google Drive file downloader
* @async
* @function gdrive
* @param {string} url - Google Drive file URL
* @returns {Promise<GoogleDriveResponse>} Object containing file info
* @throws {Error} When invalid URL or request fails
* @example
* const result = await gdrive('https://drive.google.com/file/d/123');
* console.log(result.result.downloadUrl); // Download URL
*/
async function gdrive(url) {
try {
const data = await (0, btch_http_1.HttpGet)('gdrive', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Pinterest content downloader
* @async
* @function pinterest
* @param {string} query - Pinterest URL or search query
* @returns {Promise<PinterestResponse>} Object containing pin info or search results
* @throws {Error} When invalid URL/query or request fails
* @example
* // For URL
* const result = await pinterest('https://pin.it/123');
* // For search
* const results = await pinterest('Zhao Lusi');
*/
async function pinterest(query) {
try {
const data = await (0, btch_http_1.HttpGet)('pinterest', query, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Xiaohongshu downloader
* @async
* @function xiaohongshu
* @param {string} url - Xiaohongshu post URL
* @returns {Promise<XiaohongshuResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await xiaohongshu('https://xhslink.com/o/123456');
*/
async function xiaohongshu(url) {
try {
const data = await (0, btch_http_1.HttpGet)('rednote', url, version, timeout, config.baseUrl);
if (!data || !data.noteId) {
return {
...formatErrorResponse(new Error('No results found')),
status: false
};
}
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Douyin content downloader
* @async
* @function douyin
* @param {string} url - Douyin post URL
* @returns {Promise<DouyinResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await douyin('https://v.douyin.com/1234');
*/
async function douyin(url) {
try {
const data = await (0, btch_http_1.HttpGet)('douyin', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* SnackVideo content downloader
* @async
* @function snackvideo
* @param {string} url - SnackVideo post URL
* @returns {Promise<SnackVideoResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await snackvideo('https://www.snackvideo.com/@seponsbobofficial/video/5251628748119377077');
*/
async function snackvideo(url) {
try {
const data = await (0, btch_http_1.HttpGet)('snackvideo', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Cocofun content downloader
* @async
* @function cocofun
* @param {string} url - SnackVideo post URL
* @returns {Promise<CocofunResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await cocofun('https://www.icocofun.com/share/post/588965339175?lang=id&pkg=id&share_to=copy_link&m=81638cf44ba27b2ffa708f3410a4e6c2&d=63cd2733d8d258facd28d44fde5198d4cea826e89af7efc4238ada620140eea3&nt=1');
*/
async function cocofun(url) {
try {
const data = await (0, btch_http_1.HttpGet)('cocofun', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Spotify content downloader
* @async
* @function spotify
* @param {string} url - Spotify track URL
* @returns {Promise<SpotifyResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await spotify('https://open.spotify.com/track/3zakx7RAwdkUQlOoQ7SJRt');
*/
async function spotify(url) {
try {
const data = await (0, btch_http_1.HttpGet)('spotify', url, version, timeout, config.baseUrl);
if (data?.res_data) {
delete data.message;
if (data.res_data.server === 'rapidapi')
delete data.res_data.server;
if (data.res_data.message === 'success')
delete data.res_data.message;
}
return {
developer: wm,
status: true,
result: data.res_data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* YouTube search
* @async
* @function yts
* @param {string} query - YouTube search query
* @returns {Promise<YtsResponse>} Object containing search results
* @throws {Error} When invalid query or request fails
* @example
* const result = await yts('Somewhere Only We Know');
*/
async function yts(query) {
try {
const data = await (0, btch_http_1.HttpGet)('yts', query, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* SoundCloud content downloader
* @async
* @function soundcloud
* @param {string} url - SoundCloud track URL
* @returns {Promise<SoundCloudResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await soundcloud('https://soundcloud.com/artist-name/track-name');
*/
async function soundcloud(url) {
try {
const data = await (0, btch_http_1.HttpGet)('soundcloud', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
/**
* Threads content downloader
* @async
* @function threads
* @param {string} url - Threads post URL
* @returns {Promise<ThreadsResponse>} Object containing media details and download links
* @throws {Error} When invalid URL or request fails
* @example
* const result = await threads('https://www.threads.net/@cindyyuvia/post/C_Nqx3khgkI');
*/
async function threads(url) {
try {
const data = await (0, btch_http_1.HttpGet)('threads', url, version, timeout, config.baseUrl);
return {
developer: wm,
status: true,
result: data
};
}
catch (error) {
return { ...formatErrorResponse(error), status: false };
}
}
//# sourceMappingURL=index.js.map