@nger/fk-upload 1.0.202 → 1.0.203
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/{templates → controllers}/code.d.ts +0 -0
- package/dist/{templates → controllers}/code.js +2 -1
- package/dist/controllers/relogin.d.ts +8 -0
- package/dist/controllers/relogin.js +42 -0
- package/dist/{templates → controllers}/verify.d.ts +0 -0
- package/dist/{templates → controllers}/verify.js +0 -0
- package/dist/entities/check-task.d.ts +13 -0
- package/dist/entities/check-task.js +221 -0
- package/dist/entities/download-task.d.ts +23 -0
- package/dist/entities/download-task.js +445 -0
- package/dist/entities/effect-task.d.ts +12 -0
- package/dist/entities/effect-task.js +207 -0
- package/dist/entities/fk-account.d.ts +16 -0
- package/dist/entities/fk-account.js +295 -0
- package/dist/entities/fk-jiqun.d.ts +5 -0
- package/dist/entities/fk-jiqun.js +56 -0
- package/dist/entities/upload-task.d.ts +15 -0
- package/dist/entities/upload-task.js +333 -0
- package/dist/entities/w7-account.d.ts +11 -0
- package/dist/entities/w7-account.js +126 -0
- package/dist/entities/w7.d.ts +10 -0
- package/dist/entities/w7.js +107 -0
- package/dist/entities/w7_chat_topic.d.ts +9 -0
- package/dist/entities/w7_chat_topic.js +58 -0
- package/dist/entities/w7_uni_account.d.ts +4 -0
- package/dist/entities/w7_uni_account.js +23 -0
- package/dist/fk-upload.module.d.ts +5 -0
- package/dist/fk-upload.module.js +76 -43
- package/dist/main.d.ts +1 -0
- package/dist/main.js +18 -29
- package/dist/services/check.service.d.ts +6 -0
- package/dist/services/check.service.js +32 -0
- package/dist/services/client.service.d.ts +6 -0
- package/dist/services/client.service.js +29 -0
- package/dist/services/download.service.d.ts +15 -0
- package/dist/services/download.service.js +139 -0
- package/dist/services/effect.service.d.ts +7 -0
- package/dist/services/effect.service.js +34 -0
- package/dist/services/fk.service.d.ts +24 -0
- package/dist/services/fk.service.js +323 -0
- package/dist/services/login.service.d.ts +17 -0
- package/dist/services/login.service.js +95 -0
- package/dist/services/upload.service.d.ts +13 -0
- package/dist/services/upload.service.js +100 -0
- package/dist/tasks/actions.d.ts +28 -0
- package/dist/tasks/actions.js +12 -0
- package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
- package/dist/tasks/check-task.js +205 -0
- package/dist/tasks/download-continue-task.d.ts +9 -0
- package/dist/tasks/download-continue-task.js +127 -0
- package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
- package/dist/tasks/download-task.js +128 -0
- package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
- package/dist/tasks/effect-task.js +111 -0
- package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
- package/dist/{templates/tasks → tasks}/providers.js +11 -5
- package/dist/tasks/upload-continue-task.d.ts +8 -0
- package/dist/tasks/upload-continue-task.js +114 -0
- package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
- package/dist/tasks/upload-task.js +114 -0
- package/package.json +17 -14
- package/pnpm-lock.yaml +34 -1435
- package/dist/electon.d.ts +0 -3
- package/dist/electon.js +0 -80
- package/dist/entities/fk-download-task.entity.d.ts +0 -18
- package/dist/entities/fk-download-task.entity.js +0 -142
- package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
- package/dist/entities/fk-login-cookie.entity.js +0 -46
- package/dist/entities/fk-login.entity.d.ts +0 -12
- package/dist/entities/fk-login.entity.js +0 -80
- package/dist/entities/index.d.ts +0 -3
- package/dist/entities/index.js +0 -6
- package/dist/login.controller.d.ts +0 -14
- package/dist/login.controller.js +0 -197
- package/dist/mq-runner.d.ts +0 -5
- package/dist/mq-runner.js +0 -19
- package/dist/static/task-manage.d.ts +0 -6
- package/dist/static/task-manage.js +0 -34
- package/dist/templates/add-fk-login.d.ts +0 -12
- package/dist/templates/add-fk-login.js +0 -93
- package/dist/templates/add-task.d.ts +0 -13
- package/dist/templates/add-task.js +0 -78
- package/dist/templates/check-upload.d.ts +0 -38
- package/dist/templates/check-upload.js +0 -195
- package/dist/templates/component.d.ts +0 -10
- package/dist/templates/component.js +0 -39
- package/dist/templates/error.d.ts +0 -4
- package/dist/templates/error.js +0 -27
- package/dist/templates/help.d.ts +0 -7
- package/dist/templates/help.js +0 -52
- package/dist/templates/player.d.ts +0 -4
- package/dist/templates/player.js +0 -23
- package/dist/templates/setting.d.ts +0 -13
- package/dist/templates/setting.js +0 -65
- package/dist/templates/task-manage.d.ts +0 -21
- package/dist/templates/task-manage.js +0 -314
- package/dist/templates/tasks/actions.d.ts +0 -44
- package/dist/templates/tasks/actions.js +0 -9
- package/dist/templates/tasks/check-task.d.ts +0 -8
- package/dist/templates/tasks/check-task.js +0 -89
- package/dist/templates/tasks/download-task.js +0 -130
- package/dist/templates/tasks/effect-task.js +0 -76
- package/dist/templates/tasks/fk.service.d.ts +0 -28
- package/dist/templates/tasks/fk.service.js +0 -256
- package/dist/templates/tasks/schedule-task.js +0 -94
- package/dist/templates/tasks/task.service.d.ts +0 -11
- package/dist/templates/tasks/task.service.js +0 -114
- package/dist/templates/tasks/upload-task.js +0 -97
- package/dist/templates/tasks/yasuo-task.d.ts +0 -0
- package/dist/templates/tasks/yasuo-task.js +0 -0
- package/dist/templates/upload-task.d.ts +0 -9
- package/dist/templates/upload-task.js +0 -141
- package/dist/templates/upload.d.ts +0 -16
- package/dist/templates/upload.js +0 -232
- package/dist/urlSafeBase64Decode.d.ts +0 -3
- package/dist/urlSafeBase64Decode.js +0 -32
- package/electron/.env +0 -32
- package/electron/package.json +0 -31
- package/electron/pnpm-lock.yaml +0 -2878
- package/fk-upload-pc/.vscode/extensions.json +0 -3
- package/fk-upload-pc/README.md +0 -16
- package/fk-upload-pc/index.html +0 -13
- package/fk-upload-pc/package.json +0 -19
- package/fk-upload-pc/pnpm-lock.yaml +0 -489
- package/fk-upload-pc/public/favicon.ico +0 -0
- package/fk-upload-pc/tsconfig.json +0 -18
- package/fk-upload-pc/tsconfig.node.json +0 -8
- package/fk-upload-pc/vite.config.ts +0 -7
@@ -1,130 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.DownloadTask = void 0;
|
4
|
-
const tslib_1 = require("tslib");
|
5
|
-
const rabbitmq_1 = require("@nger/rabbitmq");
|
6
|
-
const core_1 = require("@nger/core");
|
7
|
-
const actions_1 = require("./actions");
|
8
|
-
const request_1 = require("request");
|
9
|
-
const fs_1 = require("fs");
|
10
|
-
const fk_service_1 = require("./fk.service");
|
11
|
-
const md5_file_1 = tslib_1.__importDefault(require("md5-file"));
|
12
|
-
const fs_extra_1 = require("fs-extra");
|
13
|
-
const path_1 = require("path");
|
14
|
-
const typeorm_1 = require("@nger/typeorm");
|
15
|
-
const entities_1 = require("../../entities");
|
16
|
-
const rxjs_1 = require("rxjs");
|
17
|
-
const operators_1 = require("rxjs/operators");
|
18
|
-
const path_2 = require("path");
|
19
|
-
/**
|
20
|
-
* upload and task
|
21
|
-
*/
|
22
|
-
class DownloadTask extends rabbitmq_1.Task {
|
23
|
-
constructor() {
|
24
|
-
super(actions_1.DOWNLOAD_ACTION);
|
25
|
-
}
|
26
|
-
async handle(injector, next) {
|
27
|
-
const db = injector.get(typeorm_1.Db);
|
28
|
-
const task = injector.get(rabbitmq_1.DATA);
|
29
|
-
const complete = injector.get(rabbitmq_1.COMPLETE);
|
30
|
-
const root = injector.get(core_1.APP_ROOT);
|
31
|
-
const fail = injector.get(rabbitmq_1.FAIL);
|
32
|
-
const download = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
33
|
-
if (!download || (download && download.status !== 0)) {
|
34
|
-
await complete();
|
35
|
-
return next && next();
|
36
|
-
}
|
37
|
-
const filePath = (0, path_2.join)(root, task.path);
|
38
|
-
(0, fs_extra_1.ensureDir)((0, path_1.dirname)(filePath));
|
39
|
-
const writeStream = (0, fs_1.createWriteStream)(filePath);
|
40
|
-
const manager = injector.get(rabbitmq_1.TaskManager);
|
41
|
-
const url = task.url.startsWith('http') ? task.url : `https://${task.url}`;
|
42
|
-
const req = (0, request_1.get)(url, {
|
43
|
-
headers: {
|
44
|
-
'Content-Type': 'application/octet-stream'
|
45
|
-
}
|
46
|
-
});
|
47
|
-
let total = 0;
|
48
|
-
let length = 0;
|
49
|
-
const sub = new rxjs_1.Subject();
|
50
|
-
sub.pipe((0, operators_1.throttleTime)(1000), (0, operators_1.switchMap)((size) => {
|
51
|
-
return db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { totalSize: total, size });
|
52
|
-
})).subscribe({
|
53
|
-
next: () => { },
|
54
|
-
complete: () => {
|
55
|
-
}
|
56
|
-
});
|
57
|
-
// get split size
|
58
|
-
req.on('data', (buf) => {
|
59
|
-
length += buf.length;
|
60
|
-
sub.next(length);
|
61
|
-
writeStream.write(buf, (err) => {
|
62
|
-
if (err)
|
63
|
-
fail();
|
64
|
-
});
|
65
|
-
});
|
66
|
-
req.on('end', async () => {
|
67
|
-
writeStream.end();
|
68
|
-
sub.complete();
|
69
|
-
const fileMd5 = await (0, md5_file_1.default)(filePath);
|
70
|
-
console.log(`file download success ${task.filename}: ${fileMd5}`);
|
71
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { totalSize: total, fileMd5: fileMd5, status: 1, size: total });
|
72
|
-
const fk = injector.get(fk_service_1.FkService);
|
73
|
-
const shouldSize = await fk.getSize(task.url);
|
74
|
-
const localSize = await fk.getLocalSize(filePath);
|
75
|
-
if (shouldSize != localSize) {
|
76
|
-
// re download
|
77
|
-
await fail();
|
78
|
-
return next && next();
|
79
|
-
}
|
80
|
-
const uploadTask = await this.createUploadTask(task, total, fileMd5, injector);
|
81
|
-
await manager.send(uploadTask);
|
82
|
-
await complete();
|
83
|
-
});
|
84
|
-
req.on('error', async () => {
|
85
|
-
await fail();
|
86
|
-
});
|
87
|
-
req.on('response', async (resp) => {
|
88
|
-
const headers = resp.headers;
|
89
|
-
total = Number(headers["content-length"]);
|
90
|
-
console.log(`${task.filename} total is ${total}b`);
|
91
|
-
if (total > 1024 * 1024 * 1024) {
|
92
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { isBigFile: true });
|
93
|
-
req.destroy();
|
94
|
-
await complete();
|
95
|
-
}
|
96
|
-
});
|
97
|
-
if (next)
|
98
|
-
await next();
|
99
|
-
}
|
100
|
-
async createUploadTask(download, total, md5, injector) {
|
101
|
-
const fk = injector.get(fk_service_1.FkService);
|
102
|
-
const info = await fk.getUploadInfo(download.loginId, download.filename, md5, total);
|
103
|
-
if (info) {
|
104
|
-
const totalChunks = Math.ceil(total / info.splitSize) - 1;
|
105
|
-
const uploadTask = new rabbitmq_1.TaskEntity();
|
106
|
-
uploadTask.topic = actions_1.UPLOAD_ACTION;
|
107
|
-
const data = {
|
108
|
-
filename: download.filename,
|
109
|
-
path: download.path,
|
110
|
-
total: total,
|
111
|
-
splitSize: info.splitSize,
|
112
|
-
totalChunks,
|
113
|
-
uploadUrl: info.uploadUrl,
|
114
|
-
cookies: info.cookies,
|
115
|
-
topicId: download.topicId,
|
116
|
-
token: info.token,
|
117
|
-
aid: info.aid,
|
118
|
-
folderId: info.uploadGroupId,
|
119
|
-
fileMd5: md5,
|
120
|
-
start: info.uploadedSize,
|
121
|
-
loginId: download.loginId,
|
122
|
-
index: Math.ceil(info.uploadedSize / info.splitSize)
|
123
|
-
};
|
124
|
-
uploadTask.data = data;
|
125
|
-
return uploadTask;
|
126
|
-
}
|
127
|
-
throw new Error(`get upload info fail`);
|
128
|
-
}
|
129
|
-
}
|
130
|
-
exports.DownloadTask = DownloadTask;
|
@@ -1,76 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.EffectTask = void 0;
|
4
|
-
const rabbitmq_1 = require("@nger/rabbitmq");
|
5
|
-
const core_1 = require("@nger/core");
|
6
|
-
const actions_1 = require("./actions");
|
7
|
-
const typeorm_1 = require("@nger/typeorm");
|
8
|
-
const w7_1 = require("@nger/w7");
|
9
|
-
const entities_1 = require("../../entities");
|
10
|
-
const fs_extra_1 = require("fs-extra");
|
11
|
-
const path_1 = require("path");
|
12
|
-
class EffectTask extends rabbitmq_1.Task {
|
13
|
-
constructor() {
|
14
|
-
super(actions_1.EFFECT_ACTION);
|
15
|
-
}
|
16
|
-
async handle(injector, next) {
|
17
|
-
const db = injector.get(typeorm_1.Db);
|
18
|
-
const task = injector.get(rabbitmq_1.DATA);
|
19
|
-
const complete = injector.get(rabbitmq_1.COMPLETE);
|
20
|
-
const manager = injector.get(rabbitmq_1.TaskManager);
|
21
|
-
const root = injector.get(core_1.APP_ROOT);
|
22
|
-
console.log(`effect`, task.filename);
|
23
|
-
try {
|
24
|
-
const item = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: task.filename } });
|
25
|
-
if (task.uploadUrl.startsWith('https://site')) {
|
26
|
-
// redownload
|
27
|
-
if (item) {
|
28
|
-
const download = {
|
29
|
-
filename: item.filename,
|
30
|
-
path: item.path,
|
31
|
-
url: item.url,
|
32
|
-
topicId: item.topicId,
|
33
|
-
loginId: item.loginId
|
34
|
-
};
|
35
|
-
const downloadTask = new rabbitmq_1.TaskEntity();
|
36
|
-
downloadTask.topic = actions_1.DOWNLOAD_ACTION;
|
37
|
-
downloadTask.data = download;
|
38
|
-
await manager.send(downloadTask);
|
39
|
-
}
|
40
|
-
await complete();
|
41
|
-
return next && next();
|
42
|
-
}
|
43
|
-
const w7 = injector.get(w7_1.W7DataSource);
|
44
|
-
let uploadUrl = task.uploadUrl;
|
45
|
-
if (!(uploadUrl && uploadUrl.length > 0)) {
|
46
|
-
await complete();
|
47
|
-
return next && next();
|
48
|
-
}
|
49
|
-
if (uploadUrl.includes('s21i.faiusr.com')) {
|
50
|
-
uploadUrl = uploadUrl.replace('s21i.faiusr.com', 's21v.faiusr.com');
|
51
|
-
}
|
52
|
-
if (uploadUrl.includes('s21d.faiusrd.com')) {
|
53
|
-
uploadUrl = uploadUrl.replace('s21d.faiusrd.com', 's21v.faiusr.com');
|
54
|
-
}
|
55
|
-
await db.manager.update(entities_1.FkDownloadTaskEntity, task.filename, { status: 3, uploadUrl });
|
56
|
-
if (task.topicId) {
|
57
|
-
try {
|
58
|
-
const filePath = (0, path_1.join)(root, task.path);
|
59
|
-
await (0, fs_extra_1.unlink)(filePath);
|
60
|
-
}
|
61
|
-
catch (e) { }
|
62
|
-
await w7.manager.update(w7_1.W7ChatTopicEntity, task.topicId, { topicStyle: 7, thirdUrl: item.url, foreverUrl: uploadUrl });
|
63
|
-
await complete();
|
64
|
-
}
|
65
|
-
else {
|
66
|
-
await complete();
|
67
|
-
}
|
68
|
-
}
|
69
|
-
catch (e) {
|
70
|
-
console.log(`effect error`, e.message);
|
71
|
-
}
|
72
|
-
if (next)
|
73
|
-
await next();
|
74
|
-
}
|
75
|
-
}
|
76
|
-
exports.EffectTask = EffectTask;
|
@@ -1,28 +0,0 @@
|
|
1
|
-
import { Db } from "@nger/typeorm";
|
2
|
-
import { FkLoginCookieEntity, FkLoginEntity } from "../../entities";
|
3
|
-
import { IUploadTask } from "./actions";
|
4
|
-
export declare class FkService {
|
5
|
-
private db;
|
6
|
-
constructor(db: Db);
|
7
|
-
getLocalSize(path: string): number;
|
8
|
-
getFkLogin(loginId: number): Promise<FkLoginEntity>;
|
9
|
-
getFkLoginCookie(loginId: number): Promise<FkLoginCookieEntity[]>;
|
10
|
-
createCookieStr(cookies: FkLoginCookieEntity[]): string;
|
11
|
-
getCookieStr(loginId: number): Promise<string>;
|
12
|
-
getToken(cookie: string): Promise<string>;
|
13
|
-
getAccessToken(token: string): Promise<any>;
|
14
|
-
private encodeURIComponent;
|
15
|
-
getUploadUrl(token: any, forceDirect?: boolean): string;
|
16
|
-
getUploadInfo(loginId: number, filename: string, fileMd5: string, totalSize: number): Promise<any>;
|
17
|
-
startUploadFile(task: IUploadTask): Promise<IUploadTask>;
|
18
|
-
getSize(url: string): Promise<number>;
|
19
|
-
uploadFile(task: IUploadTask): Promise<IUploadTask>;
|
20
|
-
getBssInfo(): {
|
21
|
-
fromSite: boolean;
|
22
|
-
siteId: number;
|
23
|
-
groupId: number;
|
24
|
-
fileSizeLimit: number;
|
25
|
-
};
|
26
|
-
getUploadInfourl(accessToken: any): string;
|
27
|
-
private decode;
|
28
|
-
}
|
@@ -1,256 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.FkService = void 0;
|
4
|
-
const tslib_1 = require("tslib");
|
5
|
-
const typeorm_1 = require("@nger/typeorm");
|
6
|
-
const entities_1 = require("../../entities");
|
7
|
-
const axios_1 = tslib_1.__importDefault(require("axios"));
|
8
|
-
const core_1 = require("@nger/core");
|
9
|
-
const fs_extra_1 = require("fs-extra");
|
10
|
-
const form_data_1 = tslib_1.__importDefault(require("form-data"));
|
11
|
-
const request_1 = require("request");
|
12
|
-
let FkService = class FkService {
|
13
|
-
db;
|
14
|
-
constructor(db) {
|
15
|
-
this.db = db;
|
16
|
-
}
|
17
|
-
getLocalSize(path) {
|
18
|
-
try {
|
19
|
-
const stat = (0, fs_extra_1.statSync)(path);
|
20
|
-
return stat.size;
|
21
|
-
}
|
22
|
-
catch (e) {
|
23
|
-
return 0;
|
24
|
-
}
|
25
|
-
}
|
26
|
-
async getFkLogin(loginId) {
|
27
|
-
return await this.db.manager.findOneOrFail(entities_1.FkLoginEntity, { where: { fkLoginId: loginId } });
|
28
|
-
}
|
29
|
-
async getFkLoginCookie(loginId) {
|
30
|
-
return await this.db.manager.find(entities_1.FkLoginCookieEntity, { where: { fkLoginId: loginId } });
|
31
|
-
}
|
32
|
-
createCookieStr(cookies) {
|
33
|
-
return cookies.map(cookie => `${cookie.key}=${cookie.value}`).join(';');
|
34
|
-
}
|
35
|
-
async getCookieStr(loginId) {
|
36
|
-
const cookies = await this.getFkLoginCookie(loginId);
|
37
|
-
const cookie = this.createCookieStr(cookies);
|
38
|
-
return cookie;
|
39
|
-
}
|
40
|
-
async getToken(cookie) {
|
41
|
-
const url = `https://i.vip.webportal.top/`;
|
42
|
-
const iVipWebPortal = await axios_1.default.get(url, {
|
43
|
-
headers: {
|
44
|
-
Cookie: cookie
|
45
|
-
}
|
46
|
-
}).then(res => res.data);
|
47
|
-
const items = iVipWebPortal.match(/<meta id='_TOKEN' value='(.*?)'\/>/);
|
48
|
-
let token = ``;
|
49
|
-
if (items && items.length === 2) {
|
50
|
-
token = items[1];
|
51
|
-
}
|
52
|
-
return token;
|
53
|
-
}
|
54
|
-
async getAccessToken(token) {
|
55
|
-
const url = `https://smr00.vip.webportal.top/cn/api/manage/advanceUpload/genAccessKey?_v=${new Date().getTime()}&_TOKEN=${token}`;
|
56
|
-
const accessKey = await axios_1.default.get(url).then(res => res.data);
|
57
|
-
if (accessKey.success) {
|
58
|
-
const accessTokenString = this.decode(accessKey.accessKey);
|
59
|
-
if (accessTokenString) {
|
60
|
-
const accessToken = JSON.parse(accessTokenString);
|
61
|
-
return accessToken;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
}
|
65
|
-
encodeURIComponent(data) {
|
66
|
-
if ((0, core_1.isPrimitive)(data)) {
|
67
|
-
return encodeURIComponent(data);
|
68
|
-
}
|
69
|
-
return Object.keys(data).map(key => {
|
70
|
-
const value = Reflect.get(data, key);
|
71
|
-
return `${key}=${encodeURIComponent(value)}`;
|
72
|
-
}).join('&');
|
73
|
-
}
|
74
|
-
getUploadUrl(token, forceDirect = true) {
|
75
|
-
if (forceDirect) {
|
76
|
-
return `https://${token.url}/${token.visitType}/${token.app}/upload?cmd=${token.cmd}&token=${token.token}`;
|
77
|
-
}
|
78
|
-
else {
|
79
|
-
return `https://${token.url}/${token.visitType}/${token.app}/advance?cmd=${token.cmd}&token=${token.token}`;
|
80
|
-
}
|
81
|
-
}
|
82
|
-
async getUploadInfo(loginId, filename, fileMd5, totalSize) {
|
83
|
-
// TODO: from redis cache
|
84
|
-
const login = await this.getFkLogin(loginId);
|
85
|
-
const cookies = await this.getCookieStr(loginId);
|
86
|
-
const bssInfo = this.getBssInfo();
|
87
|
-
const token = await this.getToken(cookies);
|
88
|
-
const accessToken = await this.getAccessToken(token);
|
89
|
-
const uploadInfoUrl = this.getUploadInfourl(accessToken);
|
90
|
-
const uploadUrl = this.getUploadUrl(accessToken, false);
|
91
|
-
const info = await axios_1.default.post(uploadInfoUrl, this.encodeURIComponent({
|
92
|
-
fileMd5: fileMd5,
|
93
|
-
fileSize: totalSize,
|
94
|
-
isFreeVer: false,
|
95
|
-
aid: login.aid,
|
96
|
-
folderId: login.uploadGroupId,
|
97
|
-
bssInfo: JSON.stringify(bssInfo),
|
98
|
-
fileName: filename
|
99
|
-
}), { headers: { cookie: cookies } }).then(res => res.data);
|
100
|
-
if (info.code === 200) {
|
101
|
-
return { ...info.data, uploadUrl, cookies, token, aid: login.aid, uploadGroupId: login.uploadGroupId };
|
102
|
-
}
|
103
|
-
}
|
104
|
-
async startUploadFile(task) {
|
105
|
-
const info = await this.getUploadInfo(task.loginId, task.filename, task.fileMd5, task.total);
|
106
|
-
if (info) {
|
107
|
-
task.cookies = info.cookies;
|
108
|
-
task.splitSize = info.splitSize;
|
109
|
-
task.start = info.uploadedSize;
|
110
|
-
task.uploadUrl = info.uploadUrl;
|
111
|
-
task.index = Math.ceil(info.uploadedSize / info.splitSize);
|
112
|
-
return await this.uploadFile(task);
|
113
|
-
}
|
114
|
-
}
|
115
|
-
async getSize(url) {
|
116
|
-
const size = (0, core_1.defer)();
|
117
|
-
const req = (0, request_1.get)(url, {
|
118
|
-
headers: {
|
119
|
-
'Content-Type': 'application/octet-stream'
|
120
|
-
}
|
121
|
-
});
|
122
|
-
req.on('response', async (resp) => {
|
123
|
-
const headers = resp.headers;
|
124
|
-
size.resolve(Number(headers["content-length"]));
|
125
|
-
req.destroy();
|
126
|
-
});
|
127
|
-
return size;
|
128
|
-
}
|
129
|
-
async uploadFile(task) {
|
130
|
-
const upload = async () => {
|
131
|
-
const info = await this.getUploadInfo(task.loginId, task.filename, task.fileMd5, task.total);
|
132
|
-
task.cookies = info.cookies;
|
133
|
-
task.splitSize = info.splitSize;
|
134
|
-
task.start = info.uploadedSize;
|
135
|
-
task.uploadUrl = info.uploadUrl;
|
136
|
-
task.index = Math.ceil(info.uploadedSize / info.splitSize);
|
137
|
-
let complete = false;
|
138
|
-
const max = task.total - 1;
|
139
|
-
let index = task.index || 0;
|
140
|
-
let uploadResult;
|
141
|
-
do {
|
142
|
-
let start = index * task.splitSize;
|
143
|
-
let _end = start + task.splitSize - 1;
|
144
|
-
let end = _end > max ? max : _end;
|
145
|
-
if (end >= max) {
|
146
|
-
complete = true;
|
147
|
-
}
|
148
|
-
const fileStream = (0, fs_extra_1.createReadStream)(task.path, { start: start, end: end });
|
149
|
-
const formdata = new form_data_1.default();
|
150
|
-
formdata.append('ctrl', fileStream);
|
151
|
-
formdata.append('isFreeVer', this.encodeURIComponent(false));
|
152
|
-
formdata.append('aid', this.encodeURIComponent(task.aid));
|
153
|
-
formdata.append('folderId', this.encodeURIComponent(task.folderId));
|
154
|
-
formdata.append('fileName', task.filename);
|
155
|
-
formdata.append(`totalSize`, this.encodeURIComponent(task.total));
|
156
|
-
formdata.append(`fileMd5`, task.fileMd5);
|
157
|
-
formdata.append('index', this.encodeURIComponent(index));
|
158
|
-
formdata.append('chunkSize', this.encodeURIComponent(task.splitSize));
|
159
|
-
formdata.append('totalChunks', this.encodeURIComponent(task.totalChunks));
|
160
|
-
formdata.append(`complete`, this.encodeURIComponent(complete));
|
161
|
-
const bssInfo = {
|
162
|
-
fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
|
163
|
-
};
|
164
|
-
formdata.append('bssInfo', JSON.stringify(bssInfo));
|
165
|
-
const headers = formdata.getHeaders();
|
166
|
-
uploadResult = await axios_1.default.post(task.uploadUrl, formdata, {
|
167
|
-
headers: {
|
168
|
-
...headers,
|
169
|
-
Cookie: task.cookies
|
170
|
-
},
|
171
|
-
timeout: 18000
|
172
|
-
}).then(res => {
|
173
|
-
return res.data;
|
174
|
-
}).catch((e) => {
|
175
|
-
console.log(`upload error`, e.message);
|
176
|
-
return upload();
|
177
|
-
});
|
178
|
-
if (uploadResult.code !== 200) {
|
179
|
-
if (uploadResult.data) {
|
180
|
-
const data = uploadResult.data;
|
181
|
-
if (data.limit) {
|
182
|
-
// to big
|
183
|
-
throw new Error(`to big`);
|
184
|
-
}
|
185
|
-
}
|
186
|
-
throw new Error(`${task.filename}--${uploadResult.msg}`);
|
187
|
-
}
|
188
|
-
console.log(`upload ----- `, { index, max, start, end });
|
189
|
-
if (uploadResult) {
|
190
|
-
const data = uploadResult.data;
|
191
|
-
const downUrl = data.fullDownUrl;
|
192
|
-
if (downUrl) {
|
193
|
-
if (downUrl.startsWith('https://site-upload')) {
|
194
|
-
console.log(`upload fail`);
|
195
|
-
throw new Error(`need re bind`);
|
196
|
-
}
|
197
|
-
const fullUrl = downUrl.startsWith('http') ? downUrl : `https:` + downUrl;
|
198
|
-
task.uploadUrl = fullUrl;
|
199
|
-
}
|
200
|
-
}
|
201
|
-
index = index + 1;
|
202
|
-
} while (!complete);
|
203
|
-
return uploadResult;
|
204
|
-
};
|
205
|
-
const result = await upload();
|
206
|
-
console.log(`upload result: -----> `, result);
|
207
|
-
// upload complete
|
208
|
-
axios_1.default.post(`https://smr00.vip.webportal.top/ajax/advanceUpload.jsp?cmd=_report&_TOKEN=${task.token}`, this.encodeURIComponent({
|
209
|
-
type: 1,
|
210
|
-
size: task.total,
|
211
|
-
time: NaN,
|
212
|
-
flag: true,
|
213
|
-
name: task.filename
|
214
|
-
}), {
|
215
|
-
headers: {
|
216
|
-
[`Content-Type`]: `application/x-www-form-urlencoded; charset=UTF-8`,
|
217
|
-
Cookie: task.cookies
|
218
|
-
}
|
219
|
-
});
|
220
|
-
return task;
|
221
|
-
}
|
222
|
-
getBssInfo() {
|
223
|
-
return {
|
224
|
-
fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
|
225
|
-
};
|
226
|
-
}
|
227
|
-
getUploadInfourl(accessToken) {
|
228
|
-
return `https://${accessToken.url}/${accessToken.visitType}/${accessToken.app}/advance/info?cmd=${accessToken.cmd}&token=${accessToken.token}`;
|
229
|
-
}
|
230
|
-
decode(base64Str) {
|
231
|
-
if (!base64Str)
|
232
|
-
return;
|
233
|
-
const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
|
234
|
-
const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
235
|
-
let l = 0;
|
236
|
-
let p = 0;
|
237
|
-
let h = [];
|
238
|
-
do {
|
239
|
-
const o = f.indexOf(t.charAt(l++));
|
240
|
-
const u = f.indexOf(t.charAt(l++));
|
241
|
-
const a = f.indexOf(t.charAt(l++));
|
242
|
-
const c = f.indexOf(t.charAt(l++));
|
243
|
-
const s = o << 18 | u << 12 | a << 6 | c;
|
244
|
-
const e = s >> 16 & 255;
|
245
|
-
const r = s >> 8 & 255;
|
246
|
-
const n = 255 & s;
|
247
|
-
h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
|
248
|
-
} while (l < t.length);
|
249
|
-
return h.join('');
|
250
|
-
}
|
251
|
-
};
|
252
|
-
FkService = tslib_1.__decorate([
|
253
|
-
(0, core_1.Injectable)(),
|
254
|
-
tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
|
255
|
-
], FkService);
|
256
|
-
exports.FkService = FkService;
|
@@ -1,94 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.ScheduleTask = void 0;
|
4
|
-
const rabbitmq_1 = require("@nger/rabbitmq");
|
5
|
-
const actions_1 = require("./actions");
|
6
|
-
const schedule_1 = require("@nger/schedule");
|
7
|
-
const typeorm_1 = require("@nger/typeorm");
|
8
|
-
const entities_1 = require("../../entities");
|
9
|
-
const w7_1 = require("@nger/w7");
|
10
|
-
const typeorm_2 = require("typeorm");
|
11
|
-
const task_service_1 = require("./task.service");
|
12
|
-
/**
|
13
|
-
* finish
|
14
|
-
*/
|
15
|
-
class ScheduleTask extends rabbitmq_1.Task {
|
16
|
-
constructor() {
|
17
|
-
super(actions_1.SCHEDULE_ACTION);
|
18
|
-
}
|
19
|
-
async handle(injector, next) {
|
20
|
-
const task = injector.get(rabbitmq_1.DATA);
|
21
|
-
const schedule = injector.get(schedule_1.ScheduleService);
|
22
|
-
const db = injector.get(typeorm_1.Db);
|
23
|
-
const w7 = injector.get(w7_1.W7DataSource);
|
24
|
-
const manager = injector.get(rabbitmq_1.TaskManager);
|
25
|
-
const taskService = injector.get(task_service_1.TaskService);
|
26
|
-
const run = async () => {
|
27
|
-
const accounts = await db.manager.find(entities_1.FkLoginEntity, {});
|
28
|
-
const w7Usernames = accounts.map(account => account.w7Username);
|
29
|
-
const users = await w7.manager.find(w7_1.W7UsersEntity, { where: { username: (0, typeorm_2.In)(w7Usernames) } });
|
30
|
-
const uids = users.map(user => user.uid);
|
31
|
-
const uniAccounts = await w7.manager.find(w7_1.W7UniAccountEntity, { where: { createUid: (0, typeorm_2.In)(uids) } });
|
32
|
-
const uniacids = uniAccounts.map(a => a.uniacid);
|
33
|
-
const tasks = await db.manager.find(entities_1.FkDownloadTaskEntity, { select: ['topicId'] });
|
34
|
-
const ids = tasks.map(task => task.topicId);
|
35
|
-
const now = new Date().getTime() - 1000 * 60 * 60 * 24;
|
36
|
-
const nowTime = Math.floor(now / 1000);
|
37
|
-
const where = {
|
38
|
-
uniacid: (0, typeorm_2.In)(uniacids),
|
39
|
-
createTime: (0, typeorm_2.MoreThan)(nowTime)
|
40
|
-
};
|
41
|
-
if (ids && ids.length > 0) {
|
42
|
-
where.id = (0, typeorm_2.Not)((0, typeorm_2.In)(ids));
|
43
|
-
}
|
44
|
-
const topics = await w7.manager.find(w7_1.W7ChatTopicEntity, { where });
|
45
|
-
console.log(`topics`, topics.length);
|
46
|
-
topics.filter(it => it.thirdUrl && it.thirdUrl.length > 0 && it.thirdUrl.endsWith('.mp4')).map(async (topic) => {
|
47
|
-
if (topic.thirdUrl) {
|
48
|
-
const uniacid = topic.uniacid;
|
49
|
-
const account = uniAccounts.find(a => a.uniacid === uniacid);
|
50
|
-
const user = users.find(u => u.uid === account.createUid);
|
51
|
-
const login = accounts.find(a => a.w7Username === user.username);
|
52
|
-
const task = await taskService.createDownLoadTask(topic.thirdUrl, login.fkLoginId, topic.id);
|
53
|
-
const download = task.data;
|
54
|
-
// cha
|
55
|
-
const item = await db.manager.findOne(entities_1.FkDownloadTaskEntity, { where: { filename: download.filename } });
|
56
|
-
if (!item) {
|
57
|
-
const fkdownloadTask = new entities_1.FkDownloadTaskEntity();
|
58
|
-
fkdownloadTask.filename = download.filename;
|
59
|
-
fkdownloadTask.loginId = download.loginId;
|
60
|
-
fkdownloadTask.path = download.path;
|
61
|
-
fkdownloadTask.url = download.url;
|
62
|
-
fkdownloadTask.topicId = download.topicId;
|
63
|
-
fkdownloadTask.topicName = topic.topicName;
|
64
|
-
await db.manager.save(entities_1.FkDownloadTaskEntity, fkdownloadTask);
|
65
|
-
await manager.send(task);
|
66
|
-
}
|
67
|
-
else {
|
68
|
-
if (item.status === 0) {
|
69
|
-
}
|
70
|
-
else if (item.status === 1) {
|
71
|
-
}
|
72
|
-
else if (item.status === 2) {
|
73
|
-
}
|
74
|
-
else if (item.status === 3) {
|
75
|
-
}
|
76
|
-
}
|
77
|
-
}
|
78
|
-
});
|
79
|
-
// check status = 1
|
80
|
-
const waitUploadTask = await db.manager.find(entities_1.FkDownloadTaskEntity, { where: { status: 1 } });
|
81
|
-
// waitUploadTask.map(task => {
|
82
|
-
// taskService.createUploadTask()
|
83
|
-
// })
|
84
|
-
};
|
85
|
-
await run();
|
86
|
-
schedule.scheduleJob(task.name, task.rule, async (time) => {
|
87
|
-
console.log(`schedule run at ${time}`);
|
88
|
-
await run();
|
89
|
-
});
|
90
|
-
if (next)
|
91
|
-
await next();
|
92
|
-
}
|
93
|
-
}
|
94
|
-
exports.ScheduleTask = ScheduleTask;
|
@@ -1,11 +0,0 @@
|
|
1
|
-
import { Injector } from "@nger/core";
|
2
|
-
import { IDownloadTask, IUploadTask } from "./actions";
|
3
|
-
import { TaskEntity } from "@nger/rabbitmq";
|
4
|
-
export declare class TaskService {
|
5
|
-
private injector;
|
6
|
-
constructor(injector: Injector);
|
7
|
-
createEffectTask(filename: string, uploadUrl: string, topicId: number, path: string): Promise<TaskEntity<any>>;
|
8
|
-
createScheduleTask(name: string, rule: string, id?: number): Promise<TaskEntity<any>>;
|
9
|
-
createUploadTask(download: IDownloadTask, total: number, md5: string, injector: Injector): Promise<TaskEntity<IUploadTask>>;
|
10
|
-
createDownLoadTask(url: string, loginId: number, topicId: number): Promise<TaskEntity<IDownloadTask>>;
|
11
|
-
}
|