mirror of
https://github.com/hansputera/tiktok-dl.git
synced 2026-04-06 04:01:57 +02:00
feat(apps.web.api): use applyRoute
Signed-off-by: Hanif Dwy Putra S <47862061+hansputera@users.noreply.github.com>
This commit is contained in:
@@ -3,86 +3,89 @@ import ow from 'ow';
|
||||
import {getProvider, Providers, BaseProvider} from 'tiktok-dl-core';
|
||||
import {getTikTokURL} from '../../lib';
|
||||
import {rotateProvider} from '../../lib/rotator';
|
||||
import {applyRoute} from '../../middleware/apply';
|
||||
import {ratelimitMiddleware} from '../../middleware/ratelimit';
|
||||
|
||||
export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
try {
|
||||
await ratelimitMiddleware(req, res);
|
||||
if (req.method === 'POST' && typeof req.body === 'string') {
|
||||
req.body = JSON.parse(req.body);
|
||||
export default applyRoute(
|
||||
async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
try {
|
||||
if (req.method === 'POST' && typeof req.body === 'string') {
|
||||
req.body = JSON.parse(req.body);
|
||||
}
|
||||
const providersType = Providers.map((p) => p.resourceName());
|
||||
ow(
|
||||
req.body || req.query,
|
||||
ow.object.partialShape({
|
||||
url: ow.string.url.validate((v) => ({
|
||||
validator: !!getTikTokURL(v),
|
||||
message: 'Expected (.*).tiktok.com',
|
||||
})),
|
||||
type: ow.optional.string.validate((v) => ({
|
||||
validator:
|
||||
typeof v === 'string' &&
|
||||
providersType.includes(v.toLowerCase()),
|
||||
message:
|
||||
'Invalid Provider, available provider is: ' +
|
||||
Providers.map((x) => x.resourceName()).join(', '),
|
||||
})),
|
||||
nocache:
|
||||
req.method === 'POST'
|
||||
? ow.optional.boolean
|
||||
: ow.optional.string,
|
||||
rotateOnError:
|
||||
req.method === 'POST'
|
||||
? ow.optional.boolean
|
||||
: ow.optional.string,
|
||||
}),
|
||||
);
|
||||
|
||||
let provider = getProvider(
|
||||
(req.query.type || req.body.type) ?? 'random',
|
||||
);
|
||||
|
||||
if (!provider) {
|
||||
return res.status(400).json({
|
||||
error: 'Invalid provider',
|
||||
providers: providersType,
|
||||
});
|
||||
}
|
||||
|
||||
const params = provider.getParams();
|
||||
if (
|
||||
params &&
|
||||
provider.resourceName() ===
|
||||
(req.query.type?.toString() || req.body.type)?.toLowerCase()
|
||||
) {
|
||||
ow(req.query || req.body, ow.object.partialShape(params));
|
||||
} else if (params) {
|
||||
provider = getProvider('random');
|
||||
}
|
||||
|
||||
const url = getTikTokURL(req.query.url || req.body.url);
|
||||
|
||||
const result = await rotateProvider(
|
||||
provider as BaseProvider,
|
||||
url!,
|
||||
req.method === 'POST'
|
||||
? req.body.rotateOnError
|
||||
: !!req.query.rotateOnError,
|
||||
params
|
||||
? Object.fromEntries(
|
||||
Object.keys(params!).map((p) => [
|
||||
p,
|
||||
(req.query[p] as string) ?? req.body[p],
|
||||
]),
|
||||
)
|
||||
: {},
|
||||
);
|
||||
return res.status(200).json(result);
|
||||
} catch (e) {
|
||||
return res
|
||||
.status((e as Error).name === 'ArgumentError' ? 400 : 500)
|
||||
.json({
|
||||
error: (e as Error).name + '|' + (e as Error).message,
|
||||
});
|
||||
}
|
||||
const providersType = Providers.map((p) => p.resourceName());
|
||||
ow(
|
||||
req.body || req.query,
|
||||
ow.object.partialShape({
|
||||
url: ow.string.url.validate((v) => ({
|
||||
validator: !!getTikTokURL(v),
|
||||
message: 'Expected (.*).tiktok.com',
|
||||
})),
|
||||
type: ow.optional.string.validate((v) => ({
|
||||
validator:
|
||||
typeof v === 'string' &&
|
||||
providersType.includes(v.toLowerCase()),
|
||||
message:
|
||||
'Invalid Provider, available provider is: ' +
|
||||
Providers.map((x) => x.resourceName()).join(', '),
|
||||
})),
|
||||
nocache:
|
||||
req.method === 'POST'
|
||||
? ow.optional.boolean
|
||||
: ow.optional.string,
|
||||
rotateOnError:
|
||||
req.method === 'POST'
|
||||
? ow.optional.boolean
|
||||
: ow.optional.string,
|
||||
}),
|
||||
);
|
||||
|
||||
let provider = getProvider(
|
||||
(req.query.type || req.body.type) ?? 'random',
|
||||
);
|
||||
|
||||
if (!provider) {
|
||||
return res.status(400).json({
|
||||
error: 'Invalid provider',
|
||||
providers: providersType,
|
||||
});
|
||||
}
|
||||
|
||||
const params = provider.getParams();
|
||||
if (
|
||||
params &&
|
||||
provider.resourceName() ===
|
||||
(req.query.type?.toString() || req.body.type)?.toLowerCase()
|
||||
) {
|
||||
ow(req.query || req.body, ow.object.partialShape(params));
|
||||
} else if (params) {
|
||||
provider = getProvider('random');
|
||||
}
|
||||
|
||||
const url = getTikTokURL(req.query.url || req.body.url);
|
||||
|
||||
const result = await rotateProvider(
|
||||
provider as BaseProvider,
|
||||
url!,
|
||||
req.method === 'POST'
|
||||
? req.body.rotateOnError
|
||||
: !!req.query.rotateOnError,
|
||||
params
|
||||
? Object.fromEntries(
|
||||
Object.keys(params!).map((p) => [
|
||||
p,
|
||||
(req.query[p] as string) ?? req.body[p],
|
||||
]),
|
||||
)
|
||||
: {},
|
||||
);
|
||||
return res.status(200).json(result);
|
||||
} catch (e) {
|
||||
return res
|
||||
.status((e as Error).name === 'ArgumentError' ? 400 : 500)
|
||||
.json({
|
||||
error: (e as Error).name + '|' + (e as Error).message,
|
||||
});
|
||||
}
|
||||
};
|
||||
},
|
||||
[ratelimitMiddleware],
|
||||
);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import type {NextApiRequest, NextApiResponse} from 'next';
|
||||
|
||||
export default async (_: NextApiRequest, res: NextApiResponse) => {
|
||||
res.send('Y');
|
||||
return res.redirect('https://github.com/hansputera/tiktok-dl.git');
|
||||
};
|
||||
|
||||
@@ -2,21 +2,23 @@ import type {NextApiRequest, NextApiResponse} from 'next';
|
||||
import {Providers} from 'tiktok-dl-core';
|
||||
import {ratelimitMiddleware} from '../../middleware/ratelimit';
|
||||
import type {Shape} from 'ow';
|
||||
import {applyRoute} from '../../middleware/apply';
|
||||
|
||||
export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
await ratelimitMiddleware(req, res);
|
||||
export default applyRoute(
|
||||
async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
const providers = Providers.map((p) => ({
|
||||
name: p.resourceName(),
|
||||
url: p.client?.defaults.options.prefixUrl,
|
||||
maintenance: p.maintenance,
|
||||
params: p.getParams()
|
||||
? Object.keys(p.getParams()!).map((x) => ({
|
||||
name: x,
|
||||
type: (p.getParams()![x] as Shape).type,
|
||||
}))
|
||||
: {},
|
||||
}));
|
||||
|
||||
const providers = Providers.map((p) => ({
|
||||
name: p.resourceName(),
|
||||
url: p.client?.defaults.options.prefixUrl,
|
||||
maintenance: p.maintenance,
|
||||
params: p.getParams()
|
||||
? Object.keys(p.getParams()!).map((x) => ({
|
||||
name: x,
|
||||
type: (p.getParams()![x] as Shape).type,
|
||||
}))
|
||||
: {},
|
||||
}));
|
||||
|
||||
return res.send(providers);
|
||||
};
|
||||
return res.send(providers);
|
||||
},
|
||||
[ratelimitMiddleware],
|
||||
);
|
||||
|
||||
@@ -2,9 +2,13 @@ import type {NextApiRequest, NextApiResponse} from 'next';
|
||||
import {client} from '../../lib';
|
||||
import {ratelimitMiddleware} from '../../middleware/ratelimit';
|
||||
import {matchLink} from 'tiktok-dl-core';
|
||||
import {applyRoute} from '../../middleware/apply';
|
||||
|
||||
export default async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
await ratelimitMiddleware(req, res);
|
||||
const keys = await client.keys('*');
|
||||
return res.status(200).json(keys.filter((x) => matchLink(x)));
|
||||
};
|
||||
export default applyRoute(
|
||||
async (req: NextApiRequest, res: NextApiResponse) => {
|
||||
await ratelimitMiddleware(req, res);
|
||||
const keys = await client.keys('*');
|
||||
return res.status(200).json(keys.filter((x) => matchLink(x)));
|
||||
},
|
||||
[ratelimitMiddleware],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user