@nger/fk-upload 1.0.201 → 1.0.204

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/{templates → controllers}/code.d.ts +0 -0
  2. package/dist/{templates → controllers}/code.js +2 -1
  3. package/dist/controllers/relogin.d.ts +8 -0
  4. package/dist/controllers/relogin.js +42 -0
  5. package/dist/{templates → controllers}/verify.d.ts +0 -0
  6. package/dist/{templates → controllers}/verify.js +0 -0
  7. package/dist/entities/check-task.d.ts +13 -0
  8. package/dist/entities/check-task.js +221 -0
  9. package/dist/entities/download-task.d.ts +23 -0
  10. package/dist/entities/download-task.js +445 -0
  11. package/dist/entities/effect-task.d.ts +12 -0
  12. package/dist/entities/effect-task.js +207 -0
  13. package/dist/entities/fk-account.d.ts +16 -0
  14. package/dist/entities/fk-account.js +295 -0
  15. package/dist/entities/fk-jiqun.d.ts +5 -0
  16. package/dist/entities/fk-jiqun.js +56 -0
  17. package/dist/entities/upload-task.d.ts +15 -0
  18. package/dist/entities/upload-task.js +333 -0
  19. package/dist/entities/w7-account.d.ts +11 -0
  20. package/dist/entities/w7-account.js +126 -0
  21. package/dist/entities/w7.d.ts +10 -0
  22. package/dist/entities/w7.js +107 -0
  23. package/dist/entities/w7_chat_topic.d.ts +9 -0
  24. package/dist/entities/w7_chat_topic.js +58 -0
  25. package/dist/entities/w7_uni_account.d.ts +4 -0
  26. package/dist/entities/w7_uni_account.js +23 -0
  27. package/dist/fk-upload.module.d.ts +5 -0
  28. package/dist/fk-upload.module.js +76 -43
  29. package/dist/main.d.ts +1 -0
  30. package/dist/main.js +18 -29
  31. package/dist/services/check.service.d.ts +6 -0
  32. package/dist/services/check.service.js +32 -0
  33. package/dist/services/client.service.d.ts +6 -0
  34. package/dist/services/client.service.js +29 -0
  35. package/dist/services/download.service.d.ts +15 -0
  36. package/dist/services/download.service.js +139 -0
  37. package/dist/services/effect.service.d.ts +7 -0
  38. package/dist/services/effect.service.js +34 -0
  39. package/dist/services/fk.service.d.ts +24 -0
  40. package/dist/services/fk.service.js +323 -0
  41. package/dist/services/login.service.d.ts +17 -0
  42. package/dist/services/login.service.js +95 -0
  43. package/dist/services/upload.service.d.ts +13 -0
  44. package/dist/services/upload.service.js +100 -0
  45. package/dist/tasks/actions.d.ts +28 -0
  46. package/dist/tasks/actions.js +12 -0
  47. package/dist/{templates/tasks/schedule-task.d.ts → tasks/check-task.d.ts} +3 -5
  48. package/dist/tasks/check-task.js +205 -0
  49. package/dist/tasks/download-continue-task.d.ts +9 -0
  50. package/dist/tasks/download-continue-task.js +127 -0
  51. package/dist/{templates/tasks → tasks}/download-task.d.ts +0 -1
  52. package/dist/tasks/download-task.js +128 -0
  53. package/dist/{templates/tasks → tasks}/effect-task.d.ts +1 -1
  54. package/dist/tasks/effect-task.js +111 -0
  55. package/dist/{templates/tasks → tasks}/providers.d.ts +0 -0
  56. package/dist/{templates/tasks → tasks}/providers.js +11 -5
  57. package/dist/tasks/upload-continue-task.d.ts +8 -0
  58. package/dist/tasks/upload-continue-task.js +114 -0
  59. package/dist/{templates/tasks → tasks}/upload-task.d.ts +0 -0
  60. package/dist/tasks/upload-task.js +114 -0
  61. package/package.json +18 -14
  62. package/pnpm-lock.yaml +36 -1435
  63. package/dist/electon.d.ts +0 -3
  64. package/dist/electon.js +0 -80
  65. package/dist/entities/fk-download-task.entity.d.ts +0 -18
  66. package/dist/entities/fk-download-task.entity.js +0 -142
  67. package/dist/entities/fk-login-cookie.entity.d.ts +0 -7
  68. package/dist/entities/fk-login-cookie.entity.js +0 -46
  69. package/dist/entities/fk-login.entity.d.ts +0 -12
  70. package/dist/entities/fk-login.entity.js +0 -80
  71. package/dist/entities/index.d.ts +0 -3
  72. package/dist/entities/index.js +0 -6
  73. package/dist/login.controller.d.ts +0 -14
  74. package/dist/login.controller.js +0 -197
  75. package/dist/mq-runner.d.ts +0 -5
  76. package/dist/mq-runner.js +0 -19
  77. package/dist/static/task-manage.d.ts +0 -6
  78. package/dist/static/task-manage.js +0 -34
  79. package/dist/templates/add-fk-login.d.ts +0 -12
  80. package/dist/templates/add-fk-login.js +0 -93
  81. package/dist/templates/add-task.d.ts +0 -13
  82. package/dist/templates/add-task.js +0 -78
  83. package/dist/templates/check-upload.d.ts +0 -38
  84. package/dist/templates/check-upload.js +0 -195
  85. package/dist/templates/component.d.ts +0 -10
  86. package/dist/templates/component.js +0 -39
  87. package/dist/templates/error.d.ts +0 -4
  88. package/dist/templates/error.js +0 -27
  89. package/dist/templates/help.d.ts +0 -7
  90. package/dist/templates/help.js +0 -52
  91. package/dist/templates/player.d.ts +0 -4
  92. package/dist/templates/player.js +0 -23
  93. package/dist/templates/setting.d.ts +0 -13
  94. package/dist/templates/setting.js +0 -65
  95. package/dist/templates/task-manage.d.ts +0 -21
  96. package/dist/templates/task-manage.js +0 -314
  97. package/dist/templates/tasks/actions.d.ts +0 -44
  98. package/dist/templates/tasks/actions.js +0 -9
  99. package/dist/templates/tasks/check-task.d.ts +0 -8
  100. package/dist/templates/tasks/check-task.js +0 -89
  101. package/dist/templates/tasks/download-task.js +0 -130
  102. package/dist/templates/tasks/effect-task.js +0 -76
  103. package/dist/templates/tasks/fk.service.d.ts +0 -28
  104. package/dist/templates/tasks/fk.service.js +0 -254
  105. package/dist/templates/tasks/schedule-task.js +0 -94
  106. package/dist/templates/tasks/task.service.d.ts +0 -11
  107. package/dist/templates/tasks/task.service.js +0 -114
  108. package/dist/templates/tasks/upload-task.js +0 -97
  109. package/dist/templates/tasks/yasuo-task.d.ts +0 -0
  110. package/dist/templates/tasks/yasuo-task.js +0 -0
  111. package/dist/templates/upload-task.d.ts +0 -9
  112. package/dist/templates/upload-task.js +0 -141
  113. package/dist/templates/upload.d.ts +0 -16
  114. package/dist/templates/upload.js +0 -232
  115. package/dist/urlSafeBase64Decode.d.ts +0 -3
  116. package/dist/urlSafeBase64Decode.js +0 -32
  117. package/electron/.env +0 -32
  118. package/electron/package.json +0 -31
  119. package/electron/pnpm-lock.yaml +0 -2878
  120. package/fk-upload-pc/.vscode/extensions.json +0 -3
  121. package/fk-upload-pc/README.md +0 -16
  122. package/fk-upload-pc/index.html +0 -13
  123. package/fk-upload-pc/package.json +0 -19
  124. package/fk-upload-pc/pnpm-lock.yaml +0 -489
  125. package/fk-upload-pc/public/favicon.ico +0 -0
  126. package/fk-upload-pc/tsconfig.json +0 -18
  127. package/fk-upload-pc/tsconfig.node.json +0 -8
  128. 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,254 +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
- task.cookies = info.cookies;
107
- task.splitSize = info.splitSize;
108
- task.start = info.uploadedSize;
109
- task.uploadUrl = info.uploadUrl;
110
- task.index = Math.ceil(info.uploadedSize / info.splitSize);
111
- return await this.uploadFile(task);
112
- }
113
- async getSize(url) {
114
- const size = (0, core_1.defer)();
115
- const req = (0, request_1.get)(url, {
116
- headers: {
117
- 'Content-Type': 'application/octet-stream'
118
- }
119
- });
120
- req.on('response', async (resp) => {
121
- const headers = resp.headers;
122
- size.resolve(Number(headers["content-length"]));
123
- req.destroy();
124
- });
125
- return size;
126
- }
127
- async uploadFile(task) {
128
- const upload = async () => {
129
- const info = await this.getUploadInfo(task.loginId, task.filename, task.fileMd5, task.total);
130
- task.cookies = info.cookies;
131
- task.splitSize = info.splitSize;
132
- task.start = info.uploadedSize;
133
- task.uploadUrl = info.uploadUrl;
134
- task.index = Math.ceil(info.uploadedSize / info.splitSize);
135
- let complete = false;
136
- const max = task.total - 1;
137
- let index = task.index || 0;
138
- let uploadResult;
139
- do {
140
- let start = index * task.splitSize;
141
- let _end = start + task.splitSize - 1;
142
- let end = _end > max ? max : _end;
143
- if (end >= max) {
144
- complete = true;
145
- }
146
- const fileStream = (0, fs_extra_1.createReadStream)(task.path, { start: start, end: end });
147
- const formdata = new form_data_1.default();
148
- formdata.append('ctrl', fileStream);
149
- formdata.append('isFreeVer', this.encodeURIComponent(false));
150
- formdata.append('aid', this.encodeURIComponent(task.aid));
151
- formdata.append('folderId', this.encodeURIComponent(task.folderId));
152
- formdata.append('fileName', task.filename);
153
- formdata.append(`totalSize`, this.encodeURIComponent(task.total));
154
- formdata.append(`fileMd5`, task.fileMd5);
155
- formdata.append('index', this.encodeURIComponent(index));
156
- formdata.append('chunkSize', this.encodeURIComponent(task.splitSize));
157
- formdata.append('totalChunks', this.encodeURIComponent(task.totalChunks));
158
- formdata.append(`complete`, this.encodeURIComponent(complete));
159
- const bssInfo = {
160
- fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
161
- };
162
- formdata.append('bssInfo', JSON.stringify(bssInfo));
163
- const headers = formdata.getHeaders();
164
- uploadResult = await axios_1.default.post(task.uploadUrl, formdata, {
165
- headers: {
166
- ...headers,
167
- Cookie: task.cookies
168
- },
169
- timeout: 18000
170
- }).then(res => {
171
- return res.data;
172
- }).catch((e) => {
173
- console.log(`upload error`, e.message);
174
- return upload();
175
- });
176
- if (uploadResult.code !== 200) {
177
- if (uploadResult.data) {
178
- const data = uploadResult.data;
179
- if (data.limit) {
180
- // to big
181
- throw new Error(`to big`);
182
- }
183
- }
184
- throw new Error(`${task.filename}--${uploadResult.msg}`);
185
- }
186
- console.log(`upload ----- `, { index, max, start, end });
187
- if (uploadResult) {
188
- const data = uploadResult.data;
189
- const downUrl = data.fullDownUrl;
190
- if (downUrl) {
191
- if (downUrl.startsWith('https://site-upload')) {
192
- console.log(`upload fail`);
193
- throw new Error(`need re bind`);
194
- }
195
- const fullUrl = downUrl.startsWith('http') ? downUrl : `https:` + downUrl;
196
- task.uploadUrl = fullUrl;
197
- }
198
- }
199
- index = index + 1;
200
- } while (!complete);
201
- return uploadResult;
202
- };
203
- const result = await upload();
204
- console.log(`upload result: -----> `, result);
205
- // upload complete
206
- axios_1.default.post(`https://smr00.vip.webportal.top/ajax/advanceUpload.jsp?cmd=_report&_TOKEN=${task.token}`, this.encodeURIComponent({
207
- type: 1,
208
- size: task.total,
209
- time: NaN,
210
- flag: true,
211
- name: task.filename
212
- }), {
213
- headers: {
214
- [`Content-Type`]: `application/x-www-form-urlencoded; charset=UTF-8`,
215
- Cookie: task.cookies
216
- }
217
- });
218
- return task;
219
- }
220
- getBssInfo() {
221
- return {
222
- fromSite: true, siteId: 0, groupId: 0, fileSizeLimit: 1024
223
- };
224
- }
225
- getUploadInfourl(accessToken) {
226
- return `https://${accessToken.url}/${accessToken.visitType}/${accessToken.app}/advance/info?cmd=${accessToken.cmd}&token=${accessToken.token}`;
227
- }
228
- decode(base64Str) {
229
- if (!base64Str)
230
- return;
231
- const t = base64Str.replace(/_/g, "/").replace(/-/g, "+");
232
- const f = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
233
- let l = 0;
234
- let p = 0;
235
- let h = [];
236
- do {
237
- const o = f.indexOf(t.charAt(l++));
238
- const u = f.indexOf(t.charAt(l++));
239
- const a = f.indexOf(t.charAt(l++));
240
- const c = f.indexOf(t.charAt(l++));
241
- const s = o << 18 | u << 12 | a << 6 | c;
242
- const e = s >> 16 & 255;
243
- const r = s >> 8 & 255;
244
- const n = 255 & s;
245
- h[p++] = 64 === a ? String.fromCharCode(e) : 64 === c ? String.fromCharCode(e, r) : String.fromCharCode(e, r, n);
246
- } while (l < t.length);
247
- return h.join('');
248
- }
249
- };
250
- FkService = tslib_1.__decorate([
251
- (0, core_1.Injectable)(),
252
- tslib_1.__metadata("design:paramtypes", [typeorm_1.Db])
253
- ], FkService);
254
- 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
- }