mirror of
https://github.com/p-stream/providers.git
synced 2026-05-03 09:49:14 +00:00
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import CryptoJS from 'crypto-js';
|
|
import randomBytes from 'randombytes';
|
|
|
|
import type { ScrapeContext } from '@/utils/context';
|
|
|
|
import { apiUrls, appId, appKey, key } from './common';
|
|
import { encrypt, getVerify } from './crypto';
|
|
|
|
const expiry = () => Math.floor(Date.now() / 1000 + 60 * 60 * 12);
|
|
|
|
export const sendRequest = async (ctx: ScrapeContext, data: object, altApi = false) => {
|
|
const defaultData = {
|
|
childmode: '0',
|
|
app_version: '11.5',
|
|
appid: appId,
|
|
lang: 'en',
|
|
expired_date: `${expiry()}`,
|
|
platform: 'android',
|
|
channel: 'Website',
|
|
};
|
|
const encryptedData = encrypt(
|
|
JSON.stringify({
|
|
...defaultData,
|
|
...data,
|
|
}),
|
|
);
|
|
const appKeyHash = CryptoJS.MD5(appKey).toString();
|
|
const verify = getVerify(encryptedData, appKey, key);
|
|
const body = JSON.stringify({
|
|
app_key: appKeyHash,
|
|
verify,
|
|
encrypt_data: encryptedData,
|
|
});
|
|
const base64body = btoa(body);
|
|
|
|
const formatted = new URLSearchParams();
|
|
formatted.append('data', base64body);
|
|
formatted.append('appid', '27');
|
|
formatted.append('platform', 'android');
|
|
formatted.append('version', '129');
|
|
formatted.append('medium', 'Website');
|
|
formatted.append('token', randomBytes(16).toString('hex'));
|
|
|
|
const requestUrl = altApi ? apiUrls[1] : apiUrls[0];
|
|
|
|
const response = await ctx.proxiedFetcher<string>(requestUrl, {
|
|
method: 'POST',
|
|
headers: {
|
|
Platform: 'android',
|
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
},
|
|
body: formatted,
|
|
});
|
|
|
|
return JSON.parse(response);
|
|
};
|