@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,395 @@
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
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ /**
22
+ * REST API 路由 – 所有 HTTP 接口
23
+ */
24
+ import express from 'express';
25
+ import axios from 'axios';
26
+ import dayjs from 'dayjs';
27
+ import fs from 'fs-extra';
28
+ import path from 'node:path';
29
+ import { encrypt } from '../crypto.js';
30
+ import { generateUid, updateDatabaseFile } from '../database/index.js';
31
+ import { formatMsg, IdType } from '../types.js';
32
+ import { getFormatTime, toSafeBuildTask } from '../utils.js';
33
+ import { restoreDist } from '../artifact.js';
34
+ import { baseRoute, catchBuildLogPath, catchHttpLogPath, catchImagePath, catchWebDistPath } from '../config.js';
35
+ import { commands } from './websocket.js';
36
+ import { DatabaseEntities } from '../database/types.js';
37
+ export function createRouter(queue, io, database, wsHandler, noticeJson, port) {
38
+ const router = express.Router();
39
+ const inviteCodeExpireTime = 3 * 24 * 60 * 60 * 1000;
40
+ // POST /api/login
41
+ router.post('/login', (req, res) => __awaiter(this, void 0, void 0, function* () {
42
+ const { username, password } = req.body;
43
+ const table_user = database.get(DatabaseEntities.User);
44
+ if (!table_user) {
45
+ res.send({ message: 'table user not found', success: false });
46
+ return;
47
+ }
48
+ const curUser = table_user.find((v) => v.name === username && v.password === password);
49
+ if (!curUser) {
50
+ res.send({ message: '账号或密码错误', success: false });
51
+ return;
52
+ }
53
+ const token = yield encrypt(JSON.stringify({ id: curUser.id, name: curUser.name, role: curUser.role, time: +dayjs() }));
54
+ res.send({ data: { id: curUser.id, name: curUser.name, role: curUser.role, token }, message: 'login success', success: true });
55
+ }));
56
+ // POST /api/register
57
+ router.post('/register', (req, res) => __awaiter(this, void 0, void 0, function* () {
58
+ const { username, password, inviteCode = '' } = req.body;
59
+ const table_user = database.get(DatabaseEntities.User);
60
+ const table_inviteCode = database.get(DatabaseEntities.Invite);
61
+ if (!table_inviteCode) {
62
+ res.send({ message: 'table invite not found', success: false });
63
+ return;
64
+ }
65
+ const curInviteCode = table_inviteCode.find((v) => v.code === inviteCode);
66
+ if (!curInviteCode) {
67
+ res.send({ message: '邀请码不存在', success: false });
68
+ return;
69
+ }
70
+ if (curInviteCode.state !== 0) {
71
+ res.send({ message: '邀请码已被使用', success: false });
72
+ return;
73
+ }
74
+ if (+dayjs() - curInviteCode.timestamp > inviteCodeExpireTime) {
75
+ curInviteCode.state = 2;
76
+ updateDatabaseFile(DatabaseEntities.Invite, table_inviteCode);
77
+ res.send({ message: '邀请码已过期', success: false });
78
+ return;
79
+ }
80
+ const curUser = table_user.find((v) => v.name === username);
81
+ if (curUser) {
82
+ res.send({ message: '当前用户名已存在', success: false });
83
+ return;
84
+ }
85
+ let uid = generateUid();
86
+ while (table_user.find((v) => v.id === uid)) {
87
+ uid = generateUid();
88
+ }
89
+ table_user.push({ id: uid, name: username, password, role: 'user', timestamp: +dayjs(), byInviteCode: inviteCode });
90
+ curInviteCode.state = 1;
91
+ yield updateDatabaseFile(DatabaseEntities.Invite, table_inviteCode);
92
+ yield updateDatabaseFile(DatabaseEntities.User, table_user);
93
+ res.send({ message: 'register success', success: true });
94
+ }));
95
+ // POST /api/addTask
96
+ router.post('/addTask', (req, res) => __awaiter(this, void 0, void 0, function* () {
97
+ let { packagePaths = ['.'], branch = '', commit = '', notify = `http://127.0.0.1:${port}/api/notify` } = req.body;
98
+ packagePaths = typeof packagePaths === 'string' ? [packagePaths] : packagePaths;
99
+ if (!branch) {
100
+ res.send({ message: 'branch is required', success: false });
101
+ return;
102
+ }
103
+ for (const curPath of packagePaths) {
104
+ yield queue.addTask({ packagePath: curPath, branch, commit, notify, buildSourceType: 'buildServer' });
105
+ }
106
+ res.send({ message: 'add task success', success: true });
107
+ }));
108
+ // GET /api/getAllTask
109
+ router.get('/getAllTask', (_req, res) => {
110
+ const list = queue.runningTasks.map(toSafeBuildTask);
111
+ res.send({ list, success: true });
112
+ });
113
+ // GET /api/getPendingTasks – 获取排队中的任务列表
114
+ router.get('/getPendingTasks', (_req, res) => {
115
+ const list = queue.pending.map((t) => ({
116
+ taskId: t.taskId,
117
+ packagePath: t.packagePath,
118
+ branch: t.branch,
119
+ time: t.time,
120
+ status: t.status,
121
+ }));
122
+ res.send({ list, success: true });
123
+ });
124
+ // GET /api/getAllCommand
125
+ router.get('/getAllCommand', (_req, res) => {
126
+ const list = commands.map((v) => ({ command: v.command, desc: v.desc }));
127
+ res.send({ list, success: true });
128
+ });
129
+ // GET /api/refreshPackages
130
+ router.get('/refreshPackages', (req, res) => {
131
+ queue.refreshPackages();
132
+ res.send({ list: queue.packages, success: true });
133
+ });
134
+ // GET /api/getAllPackage
135
+ router.get('/getAllPackage', (_req, res) => {
136
+ res.send({ list: queue.packages, success: true });
137
+ });
138
+ // GET /api/getAllLog
139
+ router.get('/getAllLog', (_req, res) => {
140
+ const httpList = [];
141
+ const buildList = [];
142
+ const getDirFiles = (type, logDir, arr) => {
143
+ if (fs.existsSync(logDir)) {
144
+ const files = fs.readdirSync(logDir);
145
+ if (!files.length)
146
+ return;
147
+ files.sort((a, b) => fs.statSync(`${logDir}/${a}`).mtime.getTime() - fs.statSync(`${logDir}/${b}`).mtime.getTime());
148
+ for (const curFile of files) {
149
+ if (curFile.endsWith('.log')) {
150
+ arr.push({ name: curFile, path: `${baseRoute}/api/showLog?type=${type}&name=${curFile}` });
151
+ }
152
+ }
153
+ }
154
+ };
155
+ getDirFiles('log', catchHttpLogPath, httpList);
156
+ getDirFiles('buildLog', catchBuildLogPath, buildList);
157
+ res.send({ tabs: [{ title: 'httpLog', list: httpList }, { title: 'buildLog', list: buildList }], success: true });
158
+ });
159
+ // GET /api/getAllBackup
160
+ router.get('/getAllBackup', (_req, res) => {
161
+ const backupList = [];
162
+ if (fs.existsSync(catchWebDistPath)) {
163
+ const files = fs.readdirSync(catchWebDistPath);
164
+ files.sort((a, b) => fs.statSync(`${catchWebDistPath}/${a}`).mtime.getTime() - fs.statSync(`${catchWebDistPath}/${b}`).mtime.getTime());
165
+ backupList.push(...files);
166
+ }
167
+ res.send({ list: backupList, success: true });
168
+ });
169
+ // POST /api/restore
170
+ router.post('/restore', (req, res) => __awaiter(this, void 0, void 0, function* () {
171
+ const { fileName } = req.body;
172
+ if (!fileName) {
173
+ res.send({ message: 'fileName is required', success: false });
174
+ return;
175
+ }
176
+ try {
177
+ yield restoreDist(fileName);
178
+ wsHandler.sendMsg('on:msg-chat', formatMsg('on:msg-chat', {
179
+ id: generateUid(IdType.M),
180
+ socketId: '',
181
+ msg: `${req.userInfo ? `${req.userInfo.name} 操作 ` : ''}${fileName} 版本回退成功`,
182
+ name: '系统消息',
183
+ time: getFormatTime(),
184
+ timestamp: +dayjs(),
185
+ ctxType: 'ctx:txt',
186
+ }));
187
+ res.send({ message: '操作成功', success: true });
188
+ }
189
+ catch (e) {
190
+ res.send({ message: e.message, success: false });
191
+ }
192
+ }));
193
+ // GET /api/showLog
194
+ router.get('/showLog', (req, res, next) => {
195
+ const { type, name = '' } = req.query;
196
+ const logDirMap = new Map([
197
+ ['log', catchHttpLogPath],
198
+ ['buildLog', catchBuildLogPath],
199
+ ['image', catchImagePath],
200
+ ]);
201
+ if (!type || !name || !logDirMap.get(type)) {
202
+ res.send({ message: `${type} or ${name} 不存在`, success: false });
203
+ return;
204
+ }
205
+ const absLogPath = path.join(logDirMap.get(type), name);
206
+ if (!fs.existsSync(absLogPath)) {
207
+ res.send({ message: `文件: ${name} 不存在`, success: false });
208
+ return;
209
+ }
210
+ res.sendFile(absLogPath, { dotfiles: 'allow', maxAge: 14 * 24 * 60 * 60 * 1000 }, next);
211
+ });
212
+ // POST /api/cancelTask
213
+ router.post('/cancelTask', (req, res) => {
214
+ const { taskId } = req.body;
215
+ const ok = queue.cancelTask(taskId);
216
+ if (!ok) {
217
+ res.send({ message: `${taskId}任务不存在`, success: false });
218
+ return;
219
+ }
220
+ wsHandler.sendMsg('on:msg-chat', formatMsg('on:msg-chat', {
221
+ id: generateUid(IdType.M),
222
+ socketId: '',
223
+ msg: `${req.userInfo ? `${req.userInfo.name} ` : ''}已取消 ${taskId} 构建任务`,
224
+ name: '系统消息',
225
+ time: getFormatTime(),
226
+ timestamp: +dayjs(),
227
+ ctxType: 'ctx:txt',
228
+ }));
229
+ res.send({ message: 'cancel task success', success: true });
230
+ });
231
+ // POST /api/notify
232
+ router.post('/notify', (req, res) => {
233
+ const body = req.body;
234
+ if (body.type) {
235
+ wsHandler.sendMsg(body.type, body);
236
+ }
237
+ else {
238
+ io.emit('on:msg-chat', body);
239
+ }
240
+ res.send({ message: 'notify success', success: true });
241
+ });
242
+ // POST /api/github
243
+ router.post('/github', (req, res) => {
244
+ var _a, _b;
245
+ const body = req.body;
246
+ const curNotice = noticeJson.find((item) => { var _a; return item.httpsOrigin === ((_a = body === null || body === void 0 ? void 0 : body.repository) === null || _a === void 0 ? void 0 : _a.clone_url) && `refs/heads/${item.branch}` === (body === null || body === void 0 ? void 0 : body.ref); });
247
+ if (curNotice) {
248
+ axios({ url: curNotice.webhook, method: 'post', data: {}, headers: { 'Content-Type': 'application/json' } }).catch(() => { });
249
+ const commits = (body === null || body === void 0 ? void 0 : body.commits) || [];
250
+ const commitMsg = commits.map((v) => v.message).join('\n');
251
+ wsHandler.sendMsg('on:msg-chat', formatMsg('on:msg-chat', {
252
+ id: generateUid(IdType.M),
253
+ socketId: '',
254
+ msg: `用户:${((_a = body === null || body === void 0 ? void 0 : body.pusher) === null || _a === void 0 ? void 0 : _a.name) || ''}\n分支:${(body === null || body === void 0 ? void 0 : body.ref) || ''}\n仓库:${((_b = body === null || body === void 0 ? void 0 : body.repository) === null || _b === void 0 ? void 0 : _b.clone_url) || ''}\n提交信息:\n${commitMsg}`,
255
+ name: '系统消息',
256
+ time: getFormatTime(),
257
+ timestamp: +dayjs(),
258
+ ctxType: 'ctx:txt',
259
+ }));
260
+ }
261
+ res.send({ message: 'notify success', success: true });
262
+ });
263
+ // GET /api/getNoticeList
264
+ router.get('/getNoticeList', (_req, res) => {
265
+ const list = noticeJson.map((v) => ({ branch: v.branch, httpsOrigin: v.httpsOrigin, basename: path.basename(v.httpsOrigin || '') }));
266
+ res.send({ list, success: true });
267
+ });
268
+ // POST /api/manualTriggerNotice
269
+ router.post('/manualTriggerNotice', (req, res) => {
270
+ var _a, _b, _c;
271
+ const curNotice = noticeJson.find((item) => { var _a, _b; return item.httpsOrigin === ((_a = req.body) === null || _a === void 0 ? void 0 : _a.httpsOrigin) && item.branch === ((_b = req.body) === null || _b === void 0 ? void 0 : _b.branch); });
272
+ if (!curNotice) {
273
+ res.send({ message: 'notice not found', success: false });
274
+ return;
275
+ }
276
+ const msgData = formatMsg('on:msg-chat', {
277
+ id: generateUid(IdType.M),
278
+ socketId: '',
279
+ msg: `用户:${((_a = req.userInfo) === null || _a === void 0 ? void 0 : _a.name) || ''}\n分支:${((_b = req.body) === null || _b === void 0 ? void 0 : _b.branch) || ''}\n仓库:${((_c = req.body) === null || _c === void 0 ? void 0 : _c.httpsOrigin) || ''}\n`,
280
+ name: '系统消息',
281
+ time: getFormatTime(),
282
+ timestamp: +dayjs(),
283
+ ctxType: 'ctx:txt',
284
+ });
285
+ axios({ url: curNotice.webhook, method: 'post', data: {}, headers: { 'Content-Type': 'application/json' } })
286
+ .then(() => { msgData.msg += '通知成功'; wsHandler.sendMsg('on:msg-chat', msgData); })
287
+ .catch(() => { msgData.msg += '通知失败'; wsHandler.sendMsg('on:msg-chat', msgData); });
288
+ res.send({ message: 'notify success', success: true });
289
+ });
290
+ // POST /api/notice/aliyunxiao
291
+ router.post('/notice/aliyunxiao', (req, res) => {
292
+ var _a, _b, _c, _d, _e;
293
+ const query = req.query;
294
+ const body = req.body;
295
+ const sources = (body === null || body === void 0 ? void 0 : body.sources) || [];
296
+ const branchs = sources.map((v) => { var _a; return ((_a = v === null || v === void 0 ? void 0 : v.data) === null || _a === void 0 ? void 0 : _a.branch) || ''; }).join(',') || '';
297
+ const repos = sources.map((v) => { var _a; return ((_a = v === null || v === void 0 ? void 0 : v.data) === null || _a === void 0 ? void 0 : _a.repo) || ''; }).join(',') || '';
298
+ const msgData = formatMsg('on:msg-chat', {
299
+ id: generateUid(IdType.M),
300
+ socketId: '',
301
+ msg: `流水线通知\n`,
302
+ name: '系统消息',
303
+ time: getFormatTime(),
304
+ timestamp: +dayjs(),
305
+ ctxType: 'ctx:txt',
306
+ });
307
+ const msg = `流水线名称:${((_a = body === null || body === void 0 ? void 0 : body.task) === null || _a === void 0 ? void 0 : _a.pipelineName) || ''}\n流水线地址:${((_b = body === null || body === void 0 ? void 0 : body.task) === null || _b === void 0 ? void 0 : _b.pipelineUrl) || ''}\n分支:${branchs}\n仓库:${repos}\n阶段:${((_c = body === null || body === void 0 ? void 0 : body.task) === null || _c === void 0 ? void 0 : _c.stageName) || ''}\n状态:${((_d = body === null || body === void 0 ? void 0 : body.task) === null || _d === void 0 ? void 0 : _d.statusCode) === 'SUCCESS' ? '✅' : '⏸'}${((_e = body === null || body === void 0 ? void 0 : body.task) === null || _e === void 0 ? void 0 : _e.statusName) || ''}`;
308
+ if ((query === null || query === void 0 ? void 0 : query.appName) == 'enterpriseWeChat') {
309
+ axios({ url: decodeURIComponent(query.webhook), method: 'post', data: { msgtype: 'text', text: { content: msg } }, headers: { 'Content-Type': 'application/json' } }).catch(() => { });
310
+ }
311
+ msgData.msg += msg;
312
+ wsHandler.sendMsg('on:msg-chat', msgData);
313
+ res.send({ message: 'notify success', success: true });
314
+ });
315
+ // GET /api/getUserInfo
316
+ router.get('/getUserInfo', (req, res) => __awaiter(this, void 0, void 0, function* () {
317
+ var _a;
318
+ const { uid = ((_a = req.userInfo) === null || _a === void 0 ? void 0 : _a.id) || '' } = req.query;
319
+ const table_user = database.get(DatabaseEntities.User);
320
+ if (!table_user)
321
+ return res.send({ success: false, message: 'table user not found' });
322
+ if (!uid)
323
+ return res.send({ success: false, message: 'uid is required' });
324
+ let target = table_user.find(u => u.id === uid);
325
+ if (!target)
326
+ return res.send({ success: true, data: {} });
327
+ const { password } = target, safeUser = __rest(target, ["password"]);
328
+ res.send({ success: true, data: safeUser });
329
+ }));
330
+ // GET /api/getAllUsers
331
+ router.get('/getAllUsers', (req, res) => __awaiter(this, void 0, void 0, function* () {
332
+ const table_user = database.get(DatabaseEntities.User);
333
+ if (!table_user)
334
+ return res.send({ success: false, message: 'table user not found' });
335
+ const users = table_user.map((_a) => {
336
+ var { password } = _a, u = __rest(_a, ["password"]);
337
+ return u;
338
+ });
339
+ res.send({ success: true, data: users });
340
+ }));
341
+ // POST /api/updateUserRole
342
+ router.post('/updateUserRole', (req, res) => __awaiter(this, void 0, void 0, function* () {
343
+ const { userId, newRole } = req.body;
344
+ const table_user = database.get(DatabaseEntities.User);
345
+ if (!table_user)
346
+ return res.send({ success: false, message: 'table user not found' });
347
+ const current = table_user.find(u => { var _a; return u.id === ((_a = req.userInfo) === null || _a === void 0 ? void 0 : _a.id) || ''; });
348
+ if (!current)
349
+ return res.send({ success: false, message: 'invalid token' });
350
+ if (!['admin', 'super'].includes(current.role || '')) {
351
+ return res.send({ success: false, message: 'no permission to change roles' });
352
+ }
353
+ const target = table_user.find(u => u.id === userId);
354
+ if (!target)
355
+ return res.send({ success: false, message: `user not found: ${userId}` });
356
+ if (current.role === 'admin') {
357
+ if (target.role === 'super' || newRole === 'super') {
358
+ return res.send({ success: false, message: 'admin cannot modify super role' });
359
+ }
360
+ }
361
+ target.role = newRole;
362
+ yield updateDatabaseFile(DatabaseEntities.User, table_user);
363
+ res.send({ success: true, message: 'role updated' });
364
+ }));
365
+ // GET /api/inviteCodes
366
+ router.get('/inviteCodes', (req, res) => __awaiter(this, void 0, void 0, function* () {
367
+ const current = req.userInfo;
368
+ if (!current)
369
+ return res.send({ success: false, message: 'invalid token' });
370
+ const inviteTable = (database.get(DatabaseEntities.Invite) || []);
371
+ const list = inviteTable.filter(c => c.userId === current.id);
372
+ list.forEach(v => {
373
+ if (Date.now() - v.timestamp >= inviteCodeExpireTime)
374
+ v.state = 2;
375
+ });
376
+ yield updateDatabaseFile(DatabaseEntities.Invite, inviteTable);
377
+ res.send({ success: true, data: list });
378
+ }));
379
+ // POST /api/generateInviteCode
380
+ router.post('/generateInviteCode', (req, res) => __awaiter(this, void 0, void 0, function* () {
381
+ const current = req.userInfo;
382
+ if (!current)
383
+ return res.send({ success: false, message: 'invalid token' });
384
+ if (current.role !== 'super')
385
+ return res.send({ success: false, message: 'only super admins can generate codes' });
386
+ const code = 'INV_' + Math.random().toString(36).substr(2, 9).toUpperCase();
387
+ const newInvite = { code, userId: current.id, state: 0, timestamp: Date.now() };
388
+ const inviteTable = (database.get(DatabaseEntities.Invite) || []);
389
+ inviteTable.push(newInvite);
390
+ yield updateDatabaseFile(DatabaseEntities.Invite, inviteTable);
391
+ res.send({ success: true, data: newInvite });
392
+ }));
393
+ return router;
394
+ }
395
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}