HumanBreak/script/update.ts
2022-11-13 18:02:05 +08:00

92 lines
2.8 KiB
TypeScript

import axios from 'axios';
import fs from 'fs/promises';
import fss from 'fs';
import FormData from 'form-data';
import compressing from 'compressing';
import { hex_md5 } from './md_5.js';
const id = 1000; // 用户id
const password = 'password'; // 密码
(async function () {
// 压缩
await compressing.zip.compressDir('./dist', './dist.zip');
const name = (
(() => {
const data = fss.readFileSync('./public/project/data.js', 'utf-8');
const json = JSON.parse(
data
.split(/(\n|\r\n)/)
.slice(1)
.join('\n')
);
return json;
})() as { firstData: Record<string, string> }
).firstData.name;
const pass = hex_md5(password);
// 登录
const res = await axios.postForm(
'https://h5mota.com/backend/user/login.php',
{
nid: id,
npass: pass
}
);
if (res.data.code === 0) console.log('登录成功');
else return console.log('登录失败');
const data = await axios.post(
'https://h5mota.com/up2cos/getData.php',
void 0,
{
headers: {
'Access-Control-Allow-Origin': '*',
Cookie: `id=${id}; password=${pass}`
}
}
);
if (data.data.code !== 1) return console.log('获取自助更新信息失败');
const tower = data.data.list.find((v: { name: string }) => v.name === name);
if (!tower) return console.log('你还没有发过这个塔');
const stat = await fs.stat('./dist.zip');
let size = '';
size = `${stat.size}B`;
if (stat.size > 1024) size = `${(stat.size / 1024).toFixed(2)}KB`;
if (stat.size > 1024 ** 2) size = `${(stat.size / 1024 ** 2).toFixed(2)}MB`;
if (stat.size > 1024 ** 3) size = `${(stat.size / 1024 ** 3).toFixed(2)}GB`;
const stream = fss.createReadStream('./dist.zip');
const form = new FormData();
form.append('type', 'upload');
form.append('name', name);
form.append('comment', tower.text);
form.append('file', stream);
const headers = form.getHeaders(); // 获取headers
const [err, length] = await new Promise(
(res: (v: [Error | null, number]) => void) =>
form.getLength((e, l) => res([e, l]))
);
if (err) return console.log('获取content-length失败');
headers['content-length'] = length;
headers['cookie'] = `id=${id}; password=${pass}`;
console.log(`开始上传, 文件大小: ${size}`);
const ans = await axios.post(
'https://h5mota.com/up2cos/setData.php',
form,
{
headers
}
);
if (ans.data.error === 0 && ans.data.upload === true && ans.data.code === 1)
console.log('上传成功');
else throw new Error(`上传失败, 失败信息: ${ans.data}`);
})();