@daiyu-5577/buildsystem 1.0.0

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 (50) hide show
  1. package/README.md +485 -0
  2. package/dist/artifact.js +59 -0
  3. package/dist/artifact.js.map +1 -0
  4. package/dist/cli.js +25 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/build.js +39 -0
  7. package/dist/commands/build.js.map +1 -0
  8. package/dist/commands/server.js +28 -0
  9. package/dist/commands/server.js.map +1 -0
  10. package/dist/config.js +42 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/cron.js +163 -0
  13. package/dist/cron.js.map +1 -0
  14. package/dist/crypto.js +40 -0
  15. package/dist/crypto.js.map +1 -0
  16. package/dist/custError.js +10 -0
  17. package/dist/custError.js.map +1 -0
  18. package/dist/database/index.js +64 -0
  19. package/dist/database/index.js.map +1 -0
  20. package/dist/database/types.js +8 -0
  21. package/dist/database/types.js.map +1 -0
  22. package/dist/fsHelpers.js +93 -0
  23. package/dist/fsHelpers.js.map +1 -0
  24. package/dist/git.js +67 -0
  25. package/dist/git.js.map +1 -0
  26. package/dist/logger.js +80 -0
  27. package/dist/logger.js.map +1 -0
  28. package/dist/notifier.js +66 -0
  29. package/dist/notifier.js.map +1 -0
  30. package/dist/pm.js +21 -0
  31. package/dist/pm.js.map +1 -0
  32. package/dist/queue.js +273 -0
  33. package/dist/queue.js.map +1 -0
  34. package/dist/server/index.js +189 -0
  35. package/dist/server/index.js.map +1 -0
  36. package/dist/server/routes.js +395 -0
  37. package/dist/server/routes.js.map +1 -0
  38. package/dist/server/websocket.js +230 -0
  39. package/dist/server/websocket.js.map +1 -0
  40. package/dist/static/web/assets/index-BzSDdMyu.js +304 -0
  41. package/dist/static/web/assets/index-DptBjpyJ.css +1 -0
  42. package/dist/static/web/index.html +13 -0
  43. package/dist/types.js +33 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/utils.js +66 -0
  46. package/dist/utils.js.map +1 -0
  47. package/dist/web/assets/index-Ds-OtVY9.js +76 -0
  48. package/dist/web/assets/index-F5jE8yX9.css +1 -0
  49. package/dist/web/index.html +13 -0
  50. package/package.json +61 -0
@@ -0,0 +1,230 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import dayjs from 'dayjs';
11
+ import { Buffer } from 'node:buffer';
12
+ import { logger } from '../logger.js';
13
+ import { getWriteStream } from '../fsHelpers.js';
14
+ import { catchImagePath, baseRoute } from '../config.js';
15
+ import { decrypt } from '../crypto.js';
16
+ import { generateUid, updateDatabaseFile } from '../database/index.js';
17
+ import { formatMsg, IdType } from '../types.js';
18
+ import { getFormatTime, toSafeBuildTask } from '../utils.js';
19
+ import { DatabaseEntities } from '../database/types.js';
20
+ const getCommandMsg = (data) => {
21
+ return Object.assign(Object.assign({ socketId: '', msg: '', ctxType: 'ctx:txt' }, data), { id: generateUid(IdType.M), name: '系统消息', time: getFormatTime(), timestamp: +dayjs() });
22
+ };
23
+ /** 命令定义 */
24
+ export const commands = [
25
+ {
26
+ command: '/getAllCommand',
27
+ desc: '查询所有命令',
28
+ fn(buildServer, socket) {
29
+ const list = commands.map((v) => ({ command: v.command, desc: v.desc }));
30
+ socket.emit('on:msg-chat', formatMsg('on:msg-chat', getCommandMsg({
31
+ msg: JSON.stringify(list, null, 2),
32
+ })));
33
+ },
34
+ },
35
+ {
36
+ command: '/getAllTask',
37
+ desc: '查询任务队列',
38
+ fn(buildServer, socket) {
39
+ const buildTasks = buildServer.queue.runningTasks.map(toSafeBuildTask);
40
+ socket.emit('on:msg-chat', formatMsg('on:msg-chat', getCommandMsg({
41
+ msg: buildTasks.length ? JSON.stringify(buildTasks, null, 2) : '暂无任务队列',
42
+ })));
43
+ },
44
+ },
45
+ {
46
+ command: '/getCurTask',
47
+ desc: '查询当前执行任务',
48
+ fn(buildServer, socket) {
49
+ const curTasks = buildServer.queue.runningTasks;
50
+ socket.emit('on:msg-chat', formatMsg('on:msg-chat', getCommandMsg({
51
+ msg: curTasks.length ? JSON.stringify(curTasks, null, 2) : '当前暂无任务执行',
52
+ })));
53
+ },
54
+ },
55
+ {
56
+ command: '/getAllPackage',
57
+ desc: '查询当前可构建目录',
58
+ fn(buildServer, socket) {
59
+ const packages = buildServer.queue.packages;
60
+ socket.emit('on:msg-chat', formatMsg('on:msg-chat', getCommandMsg({
61
+ msg: packages.length ? JSON.stringify(packages, null, 2) : '当前暂无可构建目录',
62
+ })));
63
+ },
64
+ },
65
+ ];
66
+ export class WebsocketHandler {
67
+ constructor() {
68
+ this.buildServer = null;
69
+ this.chatMsgCache = new Set();
70
+ this.buildMsgCatch = new Set();
71
+ this.socketSet = new Set();
72
+ }
73
+ inject(inst) {
74
+ this.buildServer = inst;
75
+ return this;
76
+ }
77
+ start() {
78
+ var _a, _b;
79
+ if (!this.buildServer)
80
+ return;
81
+ const buildServer = this.buildServer;
82
+ const { io, database } = buildServer;
83
+ const chatTable = ((_a = database.get(DatabaseEntities['MessageChat'])) !== null && _a !== void 0 ? _a : []);
84
+ const buildTable = ((_b = database.get(DatabaseEntities['MessageBuild'])) !== null && _b !== void 0 ? _b : []);
85
+ for (const v of chatTable)
86
+ this.chatMsgCache.add(v);
87
+ for (const v of buildTable)
88
+ this.buildMsgCatch.add(v);
89
+ // 认证中间件
90
+ io.use((socket, next) => {
91
+ const token = socket.handshake.auth.token;
92
+ if (!token) {
93
+ return next(new Error('invalid token'));
94
+ }
95
+ decrypt(token)
96
+ .then((txt) => {
97
+ const { id, name, time } = JSON.parse(txt);
98
+ const table_user = database.get(DatabaseEntities['User']);
99
+ if (!table_user)
100
+ return next(new Error('user table not found'));
101
+ const curUser = table_user.find((v) => v.id === id);
102
+ if (!curUser) {
103
+ return next(new Error('invalid token'));
104
+ }
105
+ if (+dayjs() - time > 1000 * 60 * 60 * 24 * 7) {
106
+ return next(new Error('invalid token'));
107
+ }
108
+ socket.data.user = curUser;
109
+ this.socketSet.add(socket);
110
+ next();
111
+ })
112
+ .catch(() => {
113
+ next(new Error('invalid token'));
114
+ });
115
+ });
116
+ io.on('connection', (socket) => {
117
+ // 历史消息推送
118
+ const lastChatId = socket.handshake.auth.lastChatId;
119
+ const lastBuildId = socket.handshake.auth.lastBuildId;
120
+ if (lastChatId) {
121
+ const curMsgIndex = [...this.chatMsgCache].findIndex((v) => v.id === lastChatId);
122
+ if (curMsgIndex !== -1) {
123
+ socket.emit('on:msg-getAllChat', [...this.chatMsgCache].slice(curMsgIndex + 1));
124
+ }
125
+ }
126
+ else {
127
+ socket.emit('on:msg-getAllChat', [...this.chatMsgCache]);
128
+ }
129
+ if (lastBuildId) {
130
+ const curBuildMsgIndex = [...this.buildMsgCatch].findIndex((v) => v.id === lastBuildId);
131
+ if (curBuildMsgIndex !== -1) {
132
+ socket.emit('on:msg-getAllBuild', [...this.buildMsgCatch].slice(curBuildMsgIndex + 1));
133
+ }
134
+ }
135
+ else {
136
+ socket.emit('on:msg-getAllBuild', [...this.buildMsgCatch]);
137
+ }
138
+ // 日志
139
+ socket.onAny((event, data) => {
140
+ var _a, _b, _c;
141
+ let _data = data;
142
+ if ((data === null || data === void 0 ? void 0 : data.ctxType) === 'ctx:imgs' && ((_a = data === null || data === void 0 ? void 0 : data.files) === null || _a === void 0 ? void 0 : _a.length)) {
143
+ try {
144
+ const files = data.files || [];
145
+ _data = Object.assign(Object.assign({}, data), { files: files.map((v) => ({ name: v.name, size: v.size, type: v.type })) });
146
+ }
147
+ catch (error) {
148
+ console.log(error);
149
+ }
150
+ }
151
+ logger.log({
152
+ level: 'socket',
153
+ message: `OnEvent: ${event}`,
154
+ user: { name: (_b = socket.data.user) === null || _b === void 0 ? void 0 : _b.name, id: (_c = socket.data.user) === null || _c === void 0 ? void 0 : _c.id },
155
+ data: _data,
156
+ });
157
+ });
158
+ socket.on('disconnect', () => {
159
+ this.socketSet.delete(socket);
160
+ });
161
+ // on:msg-chat
162
+ socket.on('on:msg-chat', (data) => __awaiter(this, void 0, void 0, function* () {
163
+ var _a, _b, _c, _d;
164
+ const curCommand = commands.find((v) => v.command === (data === null || data === void 0 ? void 0 : data.msg));
165
+ if (curCommand) {
166
+ curCommand.fn(buildServer, socket);
167
+ return;
168
+ }
169
+ if ((data === null || data === void 0 ? void 0 : data.ctxType) === 'ctx:imgs') {
170
+ try {
171
+ const files = data.files;
172
+ const filePaths = [];
173
+ if (!(files === null || files === void 0 ? void 0 : files.length))
174
+ return;
175
+ for (const item of files) {
176
+ if (!Buffer.isBuffer(item.file))
177
+ continue;
178
+ const { writeStream, localFileName } = yield getWriteStream(catchImagePath, item.name);
179
+ writeStream.end(item.file);
180
+ filePaths.push(`${baseRoute}/api/showLog?type=image&name=${localFileName}`);
181
+ }
182
+ data.files = filePaths;
183
+ }
184
+ catch (error) {
185
+ console.log(error);
186
+ return;
187
+ }
188
+ }
189
+ this.sendMsg('on:msg-chat', formatMsg('on:msg-chat', Object.assign(Object.assign({ id: generateUid(IdType.M), userId: ((_b = (_a = socket.data) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.id) || '', socketId: socket.id, name: ((_d = (_c = socket.data) === null || _c === void 0 ? void 0 : _c.user) === null || _d === void 0 ? void 0 : _d.name) || '匿名用户' }, data), { time: getFormatTime(), timestamp: +dayjs() })));
190
+ }));
191
+ });
192
+ }
193
+ /** 广播消息并缓存 */
194
+ sendMsg(type, data) {
195
+ if (WebsocketHandler.catchTimer)
196
+ clearTimeout(WebsocketHandler.catchTimer);
197
+ if (!this.buildServer)
198
+ return;
199
+ const { io } = this.buildServer;
200
+ if (type === 'on:msg-chat') {
201
+ const _data = data;
202
+ this.chatMsgCache.add(_data);
203
+ if (this.chatMsgCache.size > 100) {
204
+ this.chatMsgCache = new Set([...this.chatMsgCache].slice(-100));
205
+ }
206
+ }
207
+ if (type === 'on:msg-build') {
208
+ const _data = data;
209
+ const curMsg = [...this.buildMsgCatch].find((v) => v.taskId === _data.taskId);
210
+ if (curMsg) {
211
+ curMsg.msg = curMsg.msg + _data.msg;
212
+ curMsg.task = _data.task;
213
+ }
214
+ else {
215
+ this.buildMsgCatch.add(data);
216
+ }
217
+ if (this.buildMsgCatch.size > 100) {
218
+ this.buildMsgCatch = new Set([...this.buildMsgCatch].slice(-50));
219
+ }
220
+ }
221
+ WebsocketHandler.catchTimer = setTimeout(() => {
222
+ updateDatabaseFile(DatabaseEntities['MessageChat'], [...this.chatMsgCache]);
223
+ updateDatabaseFile(DatabaseEntities['MessageBuild'], [...this.buildMsgCatch]);
224
+ }, 10000);
225
+ io.emit(type, data);
226
+ }
227
+ }
228
+ WebsocketHandler.catchTimer = null;
229
+ export const websocketHandler = new WebsocketHandler();
230
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../../src/server/websocket.ts"],"names":[],"mappings":"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"}