mira-app-core 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.
- package/dist/HttpRouter.d.ts +17 -0
- package/dist/HttpRouter.d.ts.map +1 -0
- package/dist/HttpRouter.js +217 -0
- package/dist/HttpRouter.js.map +1 -0
- package/dist/HttpServer.d.ts +24 -0
- package/dist/HttpServer.d.ts.map +1 -0
- package/dist/HttpServer.js +55 -0
- package/dist/HttpServer.js.map +1 -0
- package/dist/ILibraryServerData.d.ts +63 -0
- package/dist/ILibraryServerData.d.ts.map +1 -0
- package/dist/ILibraryServerData.js +3 -0
- package/dist/ILibraryServerData.js.map +1 -0
- package/dist/LibraryList.d.ts +9 -0
- package/dist/LibraryList.d.ts.map +1 -0
- package/dist/LibraryList.js +29 -0
- package/dist/LibraryList.js.map +1 -0
- package/dist/LibraryServerDataSQLite.d.ts +96 -0
- package/dist/LibraryServerDataSQLite.d.ts.map +1 -0
- package/dist/LibraryServerDataSQLite.js +683 -0
- package/dist/LibraryServerDataSQLite.js.map +1 -0
- package/dist/LibraryStorage.d.ts +14 -0
- package/dist/LibraryStorage.d.ts.map +1 -0
- package/dist/LibraryStorage.js +45 -0
- package/dist/LibraryStorage.js.map +1 -0
- package/dist/MessageHandler.d.ts +16 -0
- package/dist/MessageHandler.d.ts.map +1 -0
- package/dist/MessageHandler.js +35 -0
- package/dist/MessageHandler.js.map +1 -0
- package/dist/ServerExample.d.ts +33 -0
- package/dist/ServerExample.d.ts.map +1 -0
- package/dist/ServerExample.js +87 -0
- package/dist/ServerExample.js.map +1 -0
- package/dist/ServerPlugin.d.ts +20 -0
- package/dist/ServerPlugin.d.ts.map +1 -0
- package/dist/ServerPlugin.js +79 -0
- package/dist/ServerPlugin.js.map +1 -0
- package/dist/ServerPluginManager.d.ts +30 -0
- package/dist/ServerPluginManager.d.ts.map +1 -0
- package/dist/ServerPluginManager.js +112 -0
- package/dist/ServerPluginManager.js.map +1 -0
- package/dist/WebSocketRouter.d.ts +18 -0
- package/dist/WebSocketRouter.d.ts.map +1 -0
- package/dist/WebSocketRouter.js +31 -0
- package/dist/WebSocketRouter.js.map +1 -0
- package/dist/WebSocketServer.d.ts +23 -0
- package/dist/WebSocketServer.d.ts.map +1 -0
- package/dist/WebSocketServer.js +162 -0
- package/dist/WebSocketServer.js.map +1 -0
- package/dist/event-manager.d.ts +85 -0
- package/dist/event-manager.d.ts.map +1 -0
- package/dist/event-manager.js +142 -0
- package/dist/event-manager.js.map +1 -0
- package/dist/handlers/FileHandler.d.ts +10 -0
- package/dist/handlers/FileHandler.d.ts.map +1 -0
- package/dist/handlers/FileHandler.js +55 -0
- package/dist/handlers/FileHandler.js.map +1 -0
- package/dist/handlers/FolderHandler.d.ts +10 -0
- package/dist/handlers/FolderHandler.d.ts.map +1 -0
- package/dist/handlers/FolderHandler.js +59 -0
- package/dist/handlers/FolderHandler.js.map +1 -0
- package/dist/handlers/LibraryHandler.d.ts +10 -0
- package/dist/handlers/LibraryHandler.d.ts.map +1 -0
- package/dist/handlers/LibraryHandler.js +49 -0
- package/dist/handlers/LibraryHandler.js.map +1 -0
- package/dist/handlers/MessageHandler.d.ts +15 -0
- package/dist/handlers/MessageHandler.d.ts.map +1 -0
- package/dist/handlers/MessageHandler.js +32 -0
- package/dist/handlers/MessageHandler.js.map +1 -0
- package/dist/handlers/PluginMessageHandler.d.ts +10 -0
- package/dist/handlers/PluginMessageHandler.d.ts.map +1 -0
- package/dist/handlers/PluginMessageHandler.js +21 -0
- package/dist/handlers/PluginMessageHandler.js.map +1 -0
- package/dist/handlers/TagHandler.d.ts +10 -0
- package/dist/handlers/TagHandler.d.ts.map +1 -0
- package/dist/handlers/TagHandler.js +59 -0
- package/dist/handlers/TagHandler.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/package.json +32 -0
- package/src/HttpRouter.ts +236 -0
- package/src/HttpServer.ts +72 -0
- package/src/ILibraryServerData.ts +70 -0
- package/src/LibraryList.ts +26 -0
- package/src/LibraryServerDataSQLite.ts +778 -0
- package/src/LibraryStorage.ts +55 -0
- package/src/MessageHandler.ts +41 -0
- package/src/ServerExample.ts +72 -0
- package/src/ServerPlugin.ts +56 -0
- package/src/ServerPluginManager.ts +106 -0
- package/src/WebSocketRouter.ts +46 -0
- package/src/WebSocketServer.ts +206 -0
- package/src/event-manager.ts +191 -0
- package/src/handlers/FileHandler.ts +61 -0
- package/src/handlers/FolderHandler.ts +65 -0
- package/src/handlers/LibraryHandler.ts +55 -0
- package/src/handlers/MessageHandler.ts +37 -0
- package/src/handlers/PluginMessageHandler.ts +27 -0
- package/src/handlers/TagHandler.ts +66 -0
- package/src/index.ts +44 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Router, Handler } from 'express';
|
|
2
|
+
import { MiraBackend } from './ServerExample';
|
|
3
|
+
export declare class HttpRouter {
|
|
4
|
+
private router;
|
|
5
|
+
private registerdRounters;
|
|
6
|
+
private libraryServices;
|
|
7
|
+
backend: MiraBackend;
|
|
8
|
+
constructor(bakend: MiraBackend);
|
|
9
|
+
registerRounter(path: string, method: string, router: Handler): void;
|
|
10
|
+
unregisterRounter(path: string): void;
|
|
11
|
+
private setupRoutes;
|
|
12
|
+
private parseLibraryItem;
|
|
13
|
+
private getContentType;
|
|
14
|
+
getRouter(): Router;
|
|
15
|
+
close(): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=HttpRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpRouter.d.ts","sourceRoot":"","sources":["../src/HttpRouter.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,MAAM,EAAqB,OAAO,EAAE,MAAM,SAAS,CAAC;AAKtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAuB9C,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,iBAAiB,CAAoD;IAC7E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,EAAE,WAAW,CAAC;gBAET,MAAM,EAAE,WAAW;IAM/B,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAkB7D,iBAAiB,CAAC,IAAI,EAAE,MAAM;IAI9B,OAAO,CAAC,WAAW;YA6HL,gBAAgB;IAgB9B,OAAO,CAAC,cAAc;IAwBtB,SAAS,IAAI,MAAM;IAIb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HttpRouter = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const multer_1 = __importDefault(require("multer"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const fs_1 = __importDefault(require("fs"));
|
|
11
|
+
// 配置multer文件上传
|
|
12
|
+
const storage = multer_1.default.diskStorage({
|
|
13
|
+
destination: (req, file, cb) => {
|
|
14
|
+
const tempDir = path_1.default.join(__dirname, '../../temp');
|
|
15
|
+
if (!fs_1.default.existsSync(tempDir)) {
|
|
16
|
+
fs_1.default.mkdirSync(tempDir, { recursive: true });
|
|
17
|
+
}
|
|
18
|
+
cb(null, tempDir);
|
|
19
|
+
},
|
|
20
|
+
filename: (req, file, cb) => {
|
|
21
|
+
const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
|
|
22
|
+
cb(null, uniqueSuffix + path_1.default.extname(file.originalname));
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
const upload = (0, multer_1.default)({
|
|
26
|
+
storage: storage,
|
|
27
|
+
// limits: {
|
|
28
|
+
// fileSize: 100 * 1024 * 1024 // 限制100MB
|
|
29
|
+
// }
|
|
30
|
+
});
|
|
31
|
+
class HttpRouter {
|
|
32
|
+
constructor(bakend) {
|
|
33
|
+
this.registerdRounters = new Map();
|
|
34
|
+
this.libraryServices = [];
|
|
35
|
+
this.backend = bakend;
|
|
36
|
+
this.router = express_1.default.Router();
|
|
37
|
+
this.setupRoutes();
|
|
38
|
+
}
|
|
39
|
+
registerRounter(path, method, router) {
|
|
40
|
+
if (this.registerdRounters.has(path)) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.registerdRounters.set(path, router);
|
|
44
|
+
console.log('register rounter', path, method);
|
|
45
|
+
switch (method) {
|
|
46
|
+
case 'post':
|
|
47
|
+
this.router.post(path, router);
|
|
48
|
+
break;
|
|
49
|
+
case 'get':
|
|
50
|
+
this.router.get(path, router);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
throw new Error('不支持的方法');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
unregisterRounter(path) {
|
|
57
|
+
this.router.unlink(path);
|
|
58
|
+
}
|
|
59
|
+
setupRoutes() {
|
|
60
|
+
this.router.post('/libraries/:libraryId/connect', async (req, res) => {
|
|
61
|
+
});
|
|
62
|
+
this.router.get('/libraries/:libraryId/status', (req, res) => {
|
|
63
|
+
});
|
|
64
|
+
// 上传文件
|
|
65
|
+
this.router.post('/libraries/upload', upload.array('files'), async (req, res) => {
|
|
66
|
+
const { libraryId, sourcePath } = req.body; // sourcePath是用户的本地文件位置,用来验证是否上传成功
|
|
67
|
+
const clientId = req.body.clientId || null;
|
|
68
|
+
const fields = req.body.fields ? JSON.parse(req.body.fields) : null;
|
|
69
|
+
const payload = req.body.payload ? JSON.parse(req.body.payload) : null;
|
|
70
|
+
const library = this.backend.libraries.get(libraryId);
|
|
71
|
+
if (!library)
|
|
72
|
+
return res.status(404).send('Library not found');
|
|
73
|
+
// 解析上传的文件
|
|
74
|
+
const files = req.files;
|
|
75
|
+
if (!files || !files.length)
|
|
76
|
+
return res.status(400).send('No files uploaded.');
|
|
77
|
+
try {
|
|
78
|
+
const results = [];
|
|
79
|
+
for (const file of files) {
|
|
80
|
+
try {
|
|
81
|
+
// 确保临时目录存在
|
|
82
|
+
const tempDir = path_1.default.join(__dirname, '../../temp');
|
|
83
|
+
if (!fs_1.default.existsSync(tempDir)) {
|
|
84
|
+
fs_1.default.mkdirSync(tempDir, { recursive: true });
|
|
85
|
+
}
|
|
86
|
+
// 生成唯一文件名并保存文件
|
|
87
|
+
const originalName = Buffer.from(file.originalname, 'latin1').toString('utf8');
|
|
88
|
+
const tempFilePath = path_1.default.join(tempDir, `${Date.now()}-${originalName}`);
|
|
89
|
+
// 确保有有效的文件数据
|
|
90
|
+
if (file.buffer) {
|
|
91
|
+
await fs_1.default.promises.writeFile(tempFilePath, file.buffer);
|
|
92
|
+
}
|
|
93
|
+
else if (file.path) {
|
|
94
|
+
// 如果使用diskStorage,文件已保存到指定路径
|
|
95
|
+
await fs_1.default.promises.copyFile(file.path, tempFilePath);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw new Error('No valid file data available');
|
|
99
|
+
}
|
|
100
|
+
const { tags, folder_id } = payload.data || {};
|
|
101
|
+
const fileData = {
|
|
102
|
+
name: req.body.name || originalName,
|
|
103
|
+
tags: JSON.stringify(tags || []),
|
|
104
|
+
folder_id: folder_id || null,
|
|
105
|
+
};
|
|
106
|
+
const result = await library.createFileFromPath(tempFilePath, fileData, { importType: 'move' }); // 使用move上传完成后自动删除临时文件
|
|
107
|
+
results.push({
|
|
108
|
+
success: true,
|
|
109
|
+
file: tempFilePath,
|
|
110
|
+
result
|
|
111
|
+
});
|
|
112
|
+
// 发布公告
|
|
113
|
+
this.backend.webSocketServer.broadcastPluginEvent('file::created', {
|
|
114
|
+
message: {
|
|
115
|
+
type: 'file',
|
|
116
|
+
action: 'create',
|
|
117
|
+
fields, payload
|
|
118
|
+
}, result, libraryId
|
|
119
|
+
});
|
|
120
|
+
if (clientId) {
|
|
121
|
+
const ws = this.backend.webSocketServer.getWsClientById(libraryId, clientId);
|
|
122
|
+
ws && this.backend.webSocketServer.sendToWebsocket(ws, { eventName: 'file::uploaded', data: { path: sourcePath } });
|
|
123
|
+
this.backend.webSocketServer.broadcastLibraryEvent(libraryId, 'file::created', { ...result, libraryId });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
results.push({
|
|
128
|
+
success: false,
|
|
129
|
+
file: file.path,
|
|
130
|
+
error: error instanceof Error ? error.message : String(error)
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
res.send({ results });
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
console.error('Error uploading files:', error);
|
|
138
|
+
res.status(500).send('Internal server error while processing the upload.');
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
// 添加文件流路由
|
|
142
|
+
this.router.get('/thumb/:libraryId/:id', async (req, res) => {
|
|
143
|
+
try {
|
|
144
|
+
const ret = await this.parseLibraryItem(req, res);
|
|
145
|
+
if (ret) {
|
|
146
|
+
const thumbPath = await ret.library.getItemThumbPath(ret.item, { isNetworkImage: false });
|
|
147
|
+
if (!fs_1.default.existsSync(thumbPath))
|
|
148
|
+
return res.status(404).send('Thumbnail not found');
|
|
149
|
+
res.setHeader('Content-Type', 'image/png');
|
|
150
|
+
fs_1.default.createReadStream(thumbPath).pipe(res);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
console.error('Error serving thumbnail:', err);
|
|
155
|
+
res.status(500).send('Internal server error');
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
this.router.get('/file/:libraryId/:id', async (req, res) => {
|
|
159
|
+
const ret = await this.parseLibraryItem(req, res);
|
|
160
|
+
if (ret) {
|
|
161
|
+
const filePath = await ret.library.getItemFilePath(ret.item);
|
|
162
|
+
if (!filePath || !fs_1.default.existsSync(filePath)) {
|
|
163
|
+
return res.status(404).send('File not found');
|
|
164
|
+
}
|
|
165
|
+
const fileExt = path_1.default.extname(filePath).toLowerCase();
|
|
166
|
+
const contentType = this.getContentType(fileExt);
|
|
167
|
+
res.setHeader('Content-Type', contentType);
|
|
168
|
+
fs_1.default.createReadStream(filePath).pipe(res);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async parseLibraryItem(req, res) {
|
|
173
|
+
const { libraryId, id } = req.params;
|
|
174
|
+
const library = this.backend.libraries.get(libraryId);
|
|
175
|
+
if (!library) {
|
|
176
|
+
res.status(404).send('Library not found');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const item = await library.getFile(parseInt(id));
|
|
180
|
+
if (!item) {
|
|
181
|
+
res.status(404).send('Item not found');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
return { library, item };
|
|
185
|
+
}
|
|
186
|
+
getContentType(ext) {
|
|
187
|
+
const mimeTypes = {
|
|
188
|
+
'.png': 'image/png',
|
|
189
|
+
'.jpg': 'image/jpeg',
|
|
190
|
+
'.jpeg': 'image/jpeg',
|
|
191
|
+
'.gif': 'image/gif',
|
|
192
|
+
'.pdf': 'application/pdf',
|
|
193
|
+
'.txt': 'text/plain',
|
|
194
|
+
'.html': 'text/html',
|
|
195
|
+
'.json': 'application/json',
|
|
196
|
+
'.mp4': 'video/mp4',
|
|
197
|
+
'.mp3': 'audio/mpeg',
|
|
198
|
+
'.zip': 'application/zip',
|
|
199
|
+
'.doc': 'application/msword',
|
|
200
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
201
|
+
'.xls': 'application/vnd.ms-excel',
|
|
202
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
203
|
+
'.ppt': 'application/vnd.ms-powerpoint',
|
|
204
|
+
'.pptx': 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
|
205
|
+
};
|
|
206
|
+
return mimeTypes[ext] || 'application/octet-stream';
|
|
207
|
+
}
|
|
208
|
+
getRouter() {
|
|
209
|
+
return this.router;
|
|
210
|
+
}
|
|
211
|
+
async close() {
|
|
212
|
+
await Promise.all(this.libraryServices.map(service => service.close()));
|
|
213
|
+
this.libraryServices = [];
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
exports.HttpRouter = HttpRouter;
|
|
217
|
+
//# sourceMappingURL=HttpRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpRouter.js","sourceRoot":"","sources":["../src/HttpRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { HttpRouter } from "./HttpRouter";
|
|
2
|
+
import { Express } from 'express';
|
|
3
|
+
import http from 'http';
|
|
4
|
+
import { LibraryStorage } from "./LibraryStorage";
|
|
5
|
+
import { MiraBackend } from "./ServerExample";
|
|
6
|
+
export declare class MiraHttpServer {
|
|
7
|
+
httpRouter: HttpRouter;
|
|
8
|
+
server: http.Server;
|
|
9
|
+
port: number;
|
|
10
|
+
app: Express;
|
|
11
|
+
backend: MiraBackend;
|
|
12
|
+
libraries: LibraryStorage;
|
|
13
|
+
getRouter(): HttpRouter;
|
|
14
|
+
constructor(port: number, backend: MiraBackend);
|
|
15
|
+
request(options: {
|
|
16
|
+
method: string;
|
|
17
|
+
url: string;
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
data?: any;
|
|
20
|
+
}): Promise<any>;
|
|
21
|
+
getPublicURL(url: string): string;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=HttpServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpServer.d.ts","sourceRoot":"","sources":["../src/HttpServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,qBAAa,cAAc;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAE3B,SAAS,IAAI,UAAU;gBAEX,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW;IAoBxC,OAAO,CAAC,OAAO,EAAE;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBhB,YAAY,CAAC,GAAG,EAAE,MAAM;IAIlB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM9B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MiraHttpServer = void 0;
|
|
7
|
+
const HttpRouter_1 = require("./HttpRouter");
|
|
8
|
+
const http_1 = __importDefault(require("http"));
|
|
9
|
+
const express_1 = __importDefault(require("express"));
|
|
10
|
+
const axios_1 = __importDefault(require("axios"));
|
|
11
|
+
class MiraHttpServer {
|
|
12
|
+
getRouter() { return this.httpRouter; }
|
|
13
|
+
constructor(port, backend) {
|
|
14
|
+
this.port = port;
|
|
15
|
+
this.backend = backend;
|
|
16
|
+
this.libraries = backend.libraries;
|
|
17
|
+
// 创建Express应用
|
|
18
|
+
this.app = (0, express_1.default)();
|
|
19
|
+
this.port = port;
|
|
20
|
+
this.httpRouter = new HttpRouter_1.HttpRouter(backend);
|
|
21
|
+
this.app.use(express_1.default.json());
|
|
22
|
+
this.server = http_1.default.createServer(this.app);
|
|
23
|
+
this.app.use('/api', this.httpRouter.getRouter());
|
|
24
|
+
// 启动HTTP服务器
|
|
25
|
+
this.server.listen(this.port, () => {
|
|
26
|
+
console.log(`HTTP server running on port ${this.port}`);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async request(options) {
|
|
30
|
+
try {
|
|
31
|
+
const response = await axios_1.default.request({
|
|
32
|
+
method: options.method,
|
|
33
|
+
url: options.url,
|
|
34
|
+
headers: options.headers,
|
|
35
|
+
data: options.data
|
|
36
|
+
});
|
|
37
|
+
return response.data;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (axios_1.default.isAxiosError(error)) {
|
|
41
|
+
throw new Error(`Request failed: ${error.message}`);
|
|
42
|
+
}
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getPublicURL(url) {
|
|
47
|
+
return `http://127.0.0.1:${this.port}/${url}`;
|
|
48
|
+
}
|
|
49
|
+
async stop() {
|
|
50
|
+
this.server.close();
|
|
51
|
+
this.httpRouter.close();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.MiraHttpServer = MiraHttpServer;
|
|
55
|
+
//# sourceMappingURL=HttpServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpServer.js","sourceRoot":"","sources":["../src/HttpServer.ts"],"names":[],"mappings":";;;;;;AAAA,6CAA0C;AAE1C,gDAAwB;AACxB,sDAA8B;AAG9B,kDAA0B;AAG1B,MAAa,cAAc;IAQvB,SAAS,KAAiB,OAAO,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC;IAElD,YAAY,IAAY,EAAE,OAAoB;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAEnC,cAAc;QACd,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7B,IAAI,CAAC,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;QAElD,YAAY;QACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAKb;QACG,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,eAAK,CAAC,OAAO,CAAC;gBACjC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACrB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,eAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;IAED,YAAY,CAAC,GAAW;QACpB,OAAO,oBAAoB,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CAGJ;AA9DD,wCA8DC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { EventManager } from "./event-manager";
|
|
2
|
+
export interface ILibraryServerData {
|
|
3
|
+
initialize(): Promise<void>;
|
|
4
|
+
createFile(fileData: Record<string, any>): Promise<Record<string, any>>;
|
|
5
|
+
updateFile(id: number, fileData: Record<string, any>): Promise<boolean>;
|
|
6
|
+
deleteFile(id: number, options?: {
|
|
7
|
+
moveToRecycleBin: boolean;
|
|
8
|
+
}): Promise<boolean>;
|
|
9
|
+
recoverFile(id: number): Promise<boolean>;
|
|
10
|
+
getFile(id: number): Promise<Record<string, any> | null>;
|
|
11
|
+
getFiles(options?: {
|
|
12
|
+
select?: string;
|
|
13
|
+
filters?: Record<string, any>;
|
|
14
|
+
isUrlFile?: boolean;
|
|
15
|
+
}): Promise<{
|
|
16
|
+
result: Record<string, any>[];
|
|
17
|
+
limit: number;
|
|
18
|
+
offset: number;
|
|
19
|
+
total: number;
|
|
20
|
+
}>;
|
|
21
|
+
createFolder(folderData: Record<string, any>): Promise<number>;
|
|
22
|
+
updateFolder(id: number, folderData: Record<string, any>): Promise<boolean>;
|
|
23
|
+
deleteFolder(id: number): Promise<boolean>;
|
|
24
|
+
getFolder(id: number): Promise<Record<string, any> | null>;
|
|
25
|
+
getFolders(options?: {
|
|
26
|
+
parentId?: number;
|
|
27
|
+
limit?: number;
|
|
28
|
+
offset?: number;
|
|
29
|
+
}): Promise<Record<string, any>[]>;
|
|
30
|
+
createTag(tagData: Record<string, any>): Promise<number>;
|
|
31
|
+
updateTag(id: number, tagData: Record<string, any>): Promise<boolean>;
|
|
32
|
+
deleteTag(id: number): Promise<boolean>;
|
|
33
|
+
getTag(id: number): Promise<Record<string, any> | null>;
|
|
34
|
+
getTags(options?: {
|
|
35
|
+
parentId?: number;
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
}): Promise<Record<string, any>[]>;
|
|
39
|
+
beginTransaction(): Promise<void>;
|
|
40
|
+
commitTransaction(): Promise<void>;
|
|
41
|
+
rollbackTransaction(): Promise<void>;
|
|
42
|
+
close(): Promise<void>;
|
|
43
|
+
createFileFromPath(filePath: string, fileMeta: Record<string, any>, options?: {
|
|
44
|
+
importType: string;
|
|
45
|
+
}): Promise<Record<string, any>>;
|
|
46
|
+
getFileFolder(fileId: number): Promise<Record<string, any>[]>;
|
|
47
|
+
getFileTags(fileId: number): Promise<Record<string, any>[]>;
|
|
48
|
+
setFileFolder(fileId: number, folderId: string): Promise<boolean>;
|
|
49
|
+
setFileTags(fileId: number, tagIds: string[]): Promise<boolean>;
|
|
50
|
+
getAllTags(): Promise<Record<string, any>[]>;
|
|
51
|
+
getAllFolders(): Promise<Record<string, any>[]>;
|
|
52
|
+
getLibraryId(): string;
|
|
53
|
+
getItemPath(item: Record<string, any>): Promise<string>;
|
|
54
|
+
getItemFilePath(item: Record<string, any>, options?: {
|
|
55
|
+
isUrlFile: boolean;
|
|
56
|
+
}): Promise<string>;
|
|
57
|
+
getItemThumbPath(item: Record<string, any>, options?: {
|
|
58
|
+
isUrlFile: boolean;
|
|
59
|
+
}): Promise<string>;
|
|
60
|
+
getEventManager(): EventManager | undefined;
|
|
61
|
+
getLibraryInfo(): Promise<Record<string, any>>;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=ILibraryServerData.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILibraryServerData.d.ts","sourceRoot":"","sources":["../src/ILibraryServerData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ILibraryServerData.js","sourceRoot":"","sources":["../src/ILibraryServerData.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LibraryList.d.ts","sourceRoot":"","sources":["../src/LibraryList.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,iBAAe,eAAe,CAAC,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAgBnE;AAGD,OAAO,EAAC,eAAe,EAAC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getLibrarysJson = getLibrarysJson;
|
|
4
|
+
/**
|
|
5
|
+
* 获取目录下的librarys.json文件内容
|
|
6
|
+
* @param dirPath 目录路径
|
|
7
|
+
* @returns 返回解析后的JSON对象
|
|
8
|
+
* @throws 当文件不存在或JSON解析失败时抛出错误
|
|
9
|
+
*/
|
|
10
|
+
async function getLibrarysJson(dirPath = './') {
|
|
11
|
+
const fs = require('fs').promises;
|
|
12
|
+
const path = require('path');
|
|
13
|
+
try {
|
|
14
|
+
const filePath = path.join(dirPath, 'librarys.json');
|
|
15
|
+
try {
|
|
16
|
+
await fs.access(filePath);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
await fs.writeFile(filePath, '[]', 'utf8');
|
|
20
|
+
}
|
|
21
|
+
const data = await fs.readFile(filePath, 'utf8');
|
|
22
|
+
return JSON.parse(data);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(err);
|
|
26
|
+
return [];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=LibraryList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LibraryList.js","sourceRoot":"","sources":["../src/LibraryList.ts"],"names":[],"mappings":";;AAyBQ,0CAAe;AAzBvB;;;;;GAKG;AACH,KAAK,UAAU,eAAe,CAAC,UAAkB,IAAI;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACL,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ILibraryServerData } from './ILibraryServerData';
|
|
2
|
+
import { EventManager } from './event-manager';
|
|
3
|
+
import { ServerPluginManager } from './ServerPluginManager';
|
|
4
|
+
import { MiraHttpServer } from './HttpServer';
|
|
5
|
+
export declare class LibraryServerDataSQLite implements ILibraryServerData {
|
|
6
|
+
private db;
|
|
7
|
+
private inTransaction;
|
|
8
|
+
private enableHash;
|
|
9
|
+
private readonly websocketServer;
|
|
10
|
+
eventManager: EventManager | undefined;
|
|
11
|
+
readonly config: Record<string, any>;
|
|
12
|
+
pluginManager: ServerPluginManager | undefined;
|
|
13
|
+
httpServer: MiraHttpServer | undefined;
|
|
14
|
+
private initializePlugins;
|
|
15
|
+
constructor(config: Record<string, any>, opts: any);
|
|
16
|
+
initialize(): Promise<void>;
|
|
17
|
+
createFile(fileData: Record<string, any>): Promise<Record<string, any>>;
|
|
18
|
+
updateFile(id: number, fileData: Record<string, any>): Promise<boolean>;
|
|
19
|
+
deleteFile(id: number, options?: {
|
|
20
|
+
moveToRecycleBin: boolean;
|
|
21
|
+
}): Promise<boolean>;
|
|
22
|
+
recoverFile(id: number): Promise<boolean>;
|
|
23
|
+
getFile(id: number): Promise<Record<string, any> | null>;
|
|
24
|
+
getFiles(options?: {
|
|
25
|
+
select?: string;
|
|
26
|
+
filters?: Record<string, any>;
|
|
27
|
+
isUrlFile?: boolean;
|
|
28
|
+
}): Promise<{
|
|
29
|
+
result: Record<string, any>[];
|
|
30
|
+
limit: number;
|
|
31
|
+
offset: number;
|
|
32
|
+
total: number;
|
|
33
|
+
}>;
|
|
34
|
+
createFolder(folderData: Record<string, any>): Promise<number>;
|
|
35
|
+
updateFolder(id: number, folderData: Record<string, any>): Promise<boolean>;
|
|
36
|
+
deleteFolder(id: number): Promise<boolean>;
|
|
37
|
+
getFolder(id: number): Promise<Record<string, any> | null>;
|
|
38
|
+
findFolderByName(name: string, parentId?: number | null): Promise<Record<string, any> | null>;
|
|
39
|
+
getFolders(options?: {
|
|
40
|
+
parentId?: number;
|
|
41
|
+
limit?: number;
|
|
42
|
+
offset?: number;
|
|
43
|
+
}): Promise<Record<string, any>[]>;
|
|
44
|
+
createTag(tagData: Record<string, any>): Promise<number>;
|
|
45
|
+
updateTag(id: number, tagData: Record<string, any>): Promise<boolean>;
|
|
46
|
+
deleteTag(id: number): Promise<boolean>;
|
|
47
|
+
getTag(id: number): Promise<Record<string, any> | null>;
|
|
48
|
+
getTags(options?: {
|
|
49
|
+
parentId?: number;
|
|
50
|
+
limit?: number;
|
|
51
|
+
offset?: number;
|
|
52
|
+
}): Promise<Record<string, any>[]>;
|
|
53
|
+
beginTransaction(): Promise<void>;
|
|
54
|
+
commitTransaction(): Promise<void>;
|
|
55
|
+
rollbackTransaction(): Promise<void>;
|
|
56
|
+
close(): Promise<void>;
|
|
57
|
+
createFileFromPath(filePath: string, fileMeta: Record<string, any>, options?: {
|
|
58
|
+
importType: string;
|
|
59
|
+
}): Promise<Record<string, any>>;
|
|
60
|
+
getFileFolder(fileId: number): Promise<Record<string, any>[]>;
|
|
61
|
+
getFileTags(fileId: number): Promise<Record<string, any>[]>;
|
|
62
|
+
setFileFolder(fileId: number, folderId: string): Promise<boolean>;
|
|
63
|
+
setFileTags(fileId: number, tagIds: string[]): Promise<boolean>;
|
|
64
|
+
getAllTags(): Promise<Record<string, any>[]>;
|
|
65
|
+
getAllFolders(): Promise<Record<string, any>[]>;
|
|
66
|
+
getLibraryId(): string;
|
|
67
|
+
getItemPath(item: Record<string, any>): Promise<string>;
|
|
68
|
+
getItemFilePath(item: Record<string, any>, options?: {
|
|
69
|
+
isUrlFile: boolean;
|
|
70
|
+
}): Promise<string>;
|
|
71
|
+
getItemThumbPath(item: Record<string, any>, options?: {
|
|
72
|
+
isUrlFile: boolean;
|
|
73
|
+
}): Promise<string>;
|
|
74
|
+
getEventManager(): EventManager | undefined;
|
|
75
|
+
private rowToMap;
|
|
76
|
+
private calculateFileHashSync;
|
|
77
|
+
private handleFile;
|
|
78
|
+
private getFolderName;
|
|
79
|
+
private executeSql;
|
|
80
|
+
private runSql;
|
|
81
|
+
private getSql;
|
|
82
|
+
getLibraryPath(): Promise<string>;
|
|
83
|
+
query(sql: string, params?: any[]): Promise<any[]>;
|
|
84
|
+
getLibraryInfo(): Promise<Record<string, any>>;
|
|
85
|
+
queryFile(query: Record<string, any>, isUrlFile?: boolean): Promise<Record<string, any>[]>;
|
|
86
|
+
processingFiles(files: Record<string, any>[], isUrlFile?: boolean): Promise<{
|
|
87
|
+
thumb: string;
|
|
88
|
+
path: string;
|
|
89
|
+
}[]>;
|
|
90
|
+
queryFolder(query: Record<string, any>): Promise<Record<string, any>[]>;
|
|
91
|
+
queryLibrary(query: Record<string, any>): Promise<Record<string, any>>;
|
|
92
|
+
createLibrary(data: Record<string, any>): Promise<Record<string, any>>;
|
|
93
|
+
closeLibrary(): Promise<boolean>;
|
|
94
|
+
queryTag(query: Record<string, any>): Promise<Record<string, any>[]>;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=LibraryServerDataSQLite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LibraryServerDataSQLite.d.ts","sourceRoot":"","sources":["../src/LibraryServerDataSQLite.ts"],"names":[],"mappings":"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"}
|