@wxn0brp/db 0.0.4 → 0.0.6
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/README.md +3 -0
- package/dist/cjs/CollectionManager.d.ts +43 -0
- package/dist/cjs/CollectionManager.js +59 -0
- package/dist/cjs/action.d.ts +71 -0
- package/dist/cjs/action.js +199 -0
- package/dist/cjs/database.d.ts +77 -0
- package/dist/cjs/database.js +118 -0
- package/dist/cjs/executor.d.ts +28 -0
- package/{executor.js → dist/cjs/executor.js} +47 -54
- package/dist/cjs/file/find.d.ts +11 -0
- package/dist/cjs/file/find.js +80 -0
- package/dist/cjs/file/index.d.ts +3 -0
- package/dist/cjs/file/index.js +25 -0
- package/dist/cjs/file/remove.d.ts +7 -0
- package/dist/cjs/file/remove.js +61 -0
- package/dist/cjs/file/update.d.ts +7 -0
- package/dist/cjs/file/update.js +68 -0
- package/dist/cjs/file/utils.d.ts +8 -0
- package/dist/cjs/file/utils.js +23 -0
- package/dist/cjs/format.d.ts +18 -0
- package/dist/cjs/format.js +36 -0
- package/dist/cjs/gen.d.ts +5 -0
- package/dist/cjs/gen.js +78 -0
- package/dist/cjs/graph.d.ts +47 -0
- package/dist/cjs/graph.js +90 -0
- package/{index.d.ts → dist/cjs/index.d.ts} +2 -2
- package/dist/cjs/index.js +18 -0
- package/dist/cjs/relation.d.ts +64 -0
- package/{relation.js → dist/cjs/relation.js} +26 -45
- package/dist/cjs/remote/client/database.d.ts +71 -0
- package/dist/cjs/remote/client/database.js +145 -0
- package/dist/cjs/remote/client/function.d.ts +5 -0
- package/dist/cjs/remote/client/function.js +32 -0
- package/dist/cjs/remote/client/graph.d.ts +54 -0
- package/dist/cjs/remote/client/graph.js +93 -0
- package/dist/cjs/remote/client/remote.d.ts +16 -0
- package/dist/cjs/remote/client/remote.js +2 -0
- package/dist/cjs/remote/server/auth.d.ts +31 -0
- package/dist/cjs/remote/server/auth.js +99 -0
- package/dist/cjs/remote/server/db.d.ts +2 -0
- package/dist/cjs/remote/server/db.js +223 -0
- package/dist/cjs/remote/server/function.d.ts +2 -0
- package/dist/cjs/remote/server/function.js +89 -0
- package/dist/cjs/remote/server/graph.d.ts +2 -0
- package/dist/cjs/remote/server/graph.js +145 -0
- package/dist/cjs/remote/server/index.d.ts +1 -0
- package/dist/cjs/remote/server/index.js +66 -0
- package/dist/cjs/remote/server/initDataBases.d.ts +1 -0
- package/dist/cjs/remote/server/initDataBases.js +25 -0
- package/dist/cjs/remote/server/pathUtils.d.ts +1 -0
- package/dist/cjs/remote/server/pathUtils.js +12 -0
- package/dist/cjs/remote/server/secret.d.ts +1 -0
- package/dist/cjs/remote/server/secret.js +25 -0
- package/dist/cjs/remote/serverMgmt/index.d.ts +1 -0
- package/dist/cjs/remote/serverMgmt/index.js +87 -0
- package/dist/cjs/types/Id.d.ts +3 -0
- package/dist/cjs/types/Id.js +2 -0
- package/dist/cjs/types/arg.d.ts +6 -0
- package/dist/cjs/types/arg.js +2 -0
- package/dist/cjs/types/data.d.ts +4 -0
- package/dist/cjs/types/data.js +2 -0
- package/dist/cjs/types/options.d.ts +12 -0
- package/dist/cjs/types/options.js +2 -0
- package/dist/cjs/types/searchOpts.d.ts +61 -0
- package/dist/cjs/types/searchOpts.js +8 -0
- package/dist/cjs/types/types.d.ts +6 -0
- package/dist/cjs/types/types.js +2 -0
- package/dist/cjs/utils/hasFields.d.ts +8 -0
- package/dist/cjs/utils/hasFields.js +22 -0
- package/dist/cjs/utils/hasFieldsAdvanced.d.ts +5 -0
- package/dist/cjs/utils/hasFieldsAdvanced.js +182 -0
- package/dist/cjs/utils/updateFindObject.d.ts +11 -0
- package/dist/cjs/utils/updateFindObject.js +32 -0
- package/dist/cjs/utils/updateObject.d.ts +8 -0
- package/dist/cjs/utils/updateObject.js +18 -0
- package/dist/esm/CollectionManager.d.ts +43 -0
- package/dist/esm/CollectionManager.js +57 -0
- package/dist/esm/action.d.ts +71 -0
- package/dist/esm/action.js +194 -0
- package/dist/esm/database.d.ts +77 -0
- package/dist/esm/database.js +113 -0
- package/dist/esm/executor.d.ts +28 -0
- package/dist/esm/executor.js +45 -0
- package/dist/esm/file/find.d.ts +11 -0
- package/dist/esm/file/find.js +73 -0
- package/dist/esm/file/index.d.ts +3 -0
- package/{file → dist/esm/file}/index.js +1 -1
- package/dist/esm/file/remove.d.ts +7 -0
- package/dist/esm/file/remove.js +56 -0
- package/dist/esm/file/update.d.ts +7 -0
- package/dist/esm/file/update.js +63 -0
- package/dist/esm/file/utils.d.ts +8 -0
- package/{file → dist/esm/file}/utils.js +3 -11
- package/dist/esm/format.d.ts +18 -0
- package/{format.js → dist/esm/format.js} +29 -29
- package/dist/esm/gen.d.ts +5 -0
- package/dist/esm/gen.js +75 -0
- package/dist/esm/graph.d.ts +47 -0
- package/dist/esm/graph.js +85 -0
- package/dist/esm/index.d.ts +7 -0
- package/{index.js → dist/esm/index.js} +1 -9
- package/dist/esm/relation.d.ts +64 -0
- package/dist/esm/relation.js +65 -0
- package/dist/esm/remote/client/database.d.ts +71 -0
- package/dist/esm/remote/client/database.js +140 -0
- package/dist/esm/remote/client/function.d.ts +5 -0
- package/dist/esm/remote/client/function.js +30 -0
- package/dist/esm/remote/client/graph.d.ts +54 -0
- package/dist/esm/remote/client/graph.js +88 -0
- package/dist/esm/remote/client/remote.d.ts +16 -0
- package/dist/esm/remote/client/remote.js +1 -0
- package/dist/esm/remote/server/auth.d.ts +31 -0
- package/{remote → dist/esm/remote}/server/auth.js +31 -44
- package/dist/esm/remote/server/db.d.ts +2 -0
- package/dist/esm/remote/server/db.js +218 -0
- package/dist/esm/remote/server/function.d.ts +2 -0
- package/dist/esm/remote/server/function.js +87 -0
- package/dist/esm/remote/server/graph.d.ts +2 -0
- package/{remote → dist/esm/remote}/server/graph.js +62 -55
- package/dist/esm/remote/server/gui/css/main.css +130 -0
- package/dist/esm/remote/server/gui/css/scrool.css +81 -0
- package/dist/esm/remote/server/gui/css/style.css +61 -0
- package/dist/esm/remote/server/gui/favicon.svg +12 -0
- package/dist/esm/remote/server/gui/html/data.html +15 -0
- package/dist/esm/remote/server/gui/html/main.html +46 -0
- package/dist/esm/remote/server/gui/html/nav.html +25 -0
- package/dist/esm/remote/server/gui/html/popup.html +51 -0
- package/dist/esm/remote/server/gui/index.html +49 -0
- package/dist/esm/remote/server/gui/js/api.js +166 -0
- package/dist/esm/remote/server/gui/js/index.js +17 -0
- package/dist/esm/remote/server/gui/js/loadHTML.js +16 -0
- package/dist/esm/remote/server/gui/js/popUp.js +72 -0
- package/dist/esm/remote/server/gui/js/queryApi.js +51 -0
- package/dist/esm/remote/server/gui/js/queryDb.js +79 -0
- package/dist/esm/remote/server/gui/js/queryGraph.js +144 -0
- package/dist/esm/remote/server/gui/js/render.js +64 -0
- package/dist/esm/remote/server/gui/js/templates.js +31 -0
- package/dist/esm/remote/server/gui/js/utils.js +36 -0
- package/dist/esm/remote/server/gui/js/vars.js +9 -0
- package/dist/esm/remote/server/gui/libs/core.js +176 -0
- package/dist/esm/remote/server/gui/libs/d3.v7.min.js +2 -0
- package/dist/esm/remote/server/gui/libs/handlebars.min.js +29 -0
- package/dist/esm/remote/server/gui/libs/json5.min.js +1 -0
- package/dist/esm/remote/server/index.d.ts +1 -0
- package/dist/esm/remote/server/index.js +61 -0
- package/dist/esm/remote/server/initDataBases.d.ts +1 -0
- package/dist/esm/remote/server/initDataBases.js +20 -0
- package/dist/esm/remote/server/pathUtils.d.ts +1 -0
- package/{remote → dist/esm/remote}/server/pathUtils.js +2 -3
- package/dist/esm/remote/server/secret.d.ts +1 -0
- package/{remote → dist/esm/remote}/server/secret.js +3 -7
- package/dist/esm/remote/serverMgmt/index.d.ts +1 -0
- package/{remote → dist/esm/remote}/serverMgmt/index.js +27 -31
- package/dist/esm/types/Id.d.ts +3 -0
- package/dist/esm/types/Id.js +1 -0
- package/dist/esm/types/arg.d.ts +6 -0
- package/dist/esm/types/arg.js +1 -0
- package/dist/esm/types/data.d.ts +4 -0
- package/dist/esm/types/data.js +1 -0
- package/dist/esm/types/options.d.ts +12 -0
- package/dist/esm/types/options.js +1 -0
- package/dist/esm/types/searchOpts.d.ts +61 -0
- package/dist/esm/types/searchOpts.js +7 -0
- package/dist/esm/types/types.d.ts +6 -0
- package/dist/esm/types/types.js +1 -0
- package/dist/esm/utils/hasFields.d.ts +8 -0
- package/{utils → dist/esm/utils}/hasFields.js +4 -4
- package/dist/esm/utils/hasFieldsAdvanced.d.ts +5 -0
- package/dist/esm/utils/hasFieldsAdvanced.js +176 -0
- package/dist/esm/utils/updateFindObject.d.ts +11 -0
- package/{utils → dist/esm/utils}/updateFindObject.js +11 -16
- package/dist/esm/utils/updateObject.d.ts +8 -0
- package/{utils → dist/esm/utils}/updateObject.js +4 -4
- package/package.json +55 -36
- package/CollectionManager.js +0 -119
- package/action.js +0 -258
- package/database.d.ts +0 -44
- package/database.js +0 -203
- package/docs/database.md +0 -140
- package/docs/graph.md +0 -86
- package/docs/relation.md +0 -51
- package/docs/remote.md +0 -30
- package/docs/remote_server.md +0 -35
- package/docs/search_opts.md +0 -227
- package/file/find.js +0 -89
- package/file/remove.js +0 -74
- package/file/update.js +0 -83
- package/gen.d.ts +0 -1
- package/gen.js +0 -97
- package/graph.d.ts +0 -27
- package/graph.js +0 -140
- package/relation.d.ts +0 -23
- package/remote/client/database.d.ts +0 -41
- package/remote/client/database.js +0 -228
- package/remote/client/graph.d.ts +0 -31
- package/remote/client/graph.js +0 -148
- package/remote/server/db.js +0 -197
- package/remote/server/function.js +0 -43
- package/remote/server/index.js +0 -63
- package/remote/server/initDataBases.js +0 -20
- package/test/hasFieldsAdvanced.test.js +0 -70
- package/utils/hasFieldsAdvanced.js +0 -184
- /package/{remote → dist/cjs/remote}/server/gui/css/main.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/css/scrool.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/css/style.css +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/favicon.svg +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/data.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/main.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/nav.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/html/popup.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/index.html +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/api.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/index.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/loadHTML.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/popUp.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryApi.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryDb.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/queryGraph.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/render.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/templates.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/utils.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/js/vars.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/core.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/d3.v7.min.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/handlebars.min.js +0 -0
- /package/{remote → dist/cjs/remote}/server/gui/libs/json5.min.js +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const express_1 = require("express");
|
|
4
|
+
const pathUtils_js_1 = require("./pathUtils.js");
|
|
5
|
+
const router = (0, express_1.Router)();
|
|
6
|
+
router.use((req, res, next) => {
|
|
7
|
+
if (req.dbType == "graph")
|
|
8
|
+
return next();
|
|
9
|
+
return res.status(400).json({ err: true, msg: "Invalid data center type." });
|
|
10
|
+
});
|
|
11
|
+
router.post("/add", async (req, res) => {
|
|
12
|
+
const { collection, a, b } = req.body;
|
|
13
|
+
if (!collection || !a || !b)
|
|
14
|
+
return res.status(400).json({ err: true, msg: "collection & a & b is required" });
|
|
15
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
16
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
17
|
+
const db = req.dataCenter;
|
|
18
|
+
try {
|
|
19
|
+
const result = await db.add(collection, a, b);
|
|
20
|
+
res.json({ err: false, result });
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
router.post("/find", async (req, res) => {
|
|
27
|
+
const { collection, node } = req.body;
|
|
28
|
+
if (!collection || !node)
|
|
29
|
+
return res.status(400).json({ err: true, msg: "collection & node is required" });
|
|
30
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
31
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
32
|
+
const db = req.dataCenter;
|
|
33
|
+
try {
|
|
34
|
+
const result = await db.find(collection, node);
|
|
35
|
+
res.json({ err: false, result });
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
router.post("/findOne", async (req, res) => {
|
|
42
|
+
const { collection, nodeA, nodeB } = req.body;
|
|
43
|
+
if (!collection || !nodeA || !nodeB)
|
|
44
|
+
return res.status(400).json({ err: true, msg: "collection & nodeA & nodeB is required" });
|
|
45
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
46
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
47
|
+
const db = req.dataCenter;
|
|
48
|
+
try {
|
|
49
|
+
const result = await db.findOne(collection, nodeA, nodeB);
|
|
50
|
+
res.json({ err: false, result });
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
router.post("/getAll", async (req, res) => {
|
|
57
|
+
const { collection } = req.body;
|
|
58
|
+
if (!collection)
|
|
59
|
+
return res.status(400).json({ err: true, msg: "collection is required" });
|
|
60
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
61
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
62
|
+
const db = req.dataCenter;
|
|
63
|
+
try {
|
|
64
|
+
const result = await db.getAll(collection);
|
|
65
|
+
res.json({ err: false, result });
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
router.post("/remove", async (req, res) => {
|
|
72
|
+
const { collection, nodeA, nodeB } = req.body;
|
|
73
|
+
if (!collection || !nodeA || !nodeB)
|
|
74
|
+
return res.status(400).json({ err: true, msg: "collection & nodeA & nodeB is required" });
|
|
75
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
76
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
77
|
+
const db = req.dataCenter;
|
|
78
|
+
try {
|
|
79
|
+
const result = await db.remove(collection, nodeA, nodeB);
|
|
80
|
+
res.json({ err: false, result });
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
router.post("/getCollections", async (req, res) => {
|
|
87
|
+
try {
|
|
88
|
+
const db = req.dataCenter;
|
|
89
|
+
const result = await db.getCollections();
|
|
90
|
+
res.json({ err: false, result });
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
console.error(err);
|
|
94
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
router.post("/checkCollection", async (req, res) => {
|
|
98
|
+
const { collection } = req.body;
|
|
99
|
+
if (!collection)
|
|
100
|
+
return res.status(400).json({ err: true, msg: "collection is required" });
|
|
101
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
102
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
103
|
+
try {
|
|
104
|
+
const db = req.dataCenter;
|
|
105
|
+
await db.checkCollection(collection);
|
|
106
|
+
res.json({ err: false, result: true });
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(err);
|
|
110
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
router.post("/issetCollection", async (req, res) => {
|
|
114
|
+
const { collection } = req.body;
|
|
115
|
+
if (!collection)
|
|
116
|
+
return res.status(400).json({ err: true, msg: "collection is required" });
|
|
117
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
118
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
119
|
+
try {
|
|
120
|
+
const db = req.dataCenter;
|
|
121
|
+
const result = await db.issetCollection(collection);
|
|
122
|
+
res.json({ err: false, result });
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.error(err);
|
|
126
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
router.post("/removeCollection", async (req, res) => {
|
|
130
|
+
const { collection } = req.body;
|
|
131
|
+
if (!collection)
|
|
132
|
+
return res.status(400).json({ err: true, msg: "collection is required" });
|
|
133
|
+
if (!(0, pathUtils_js_1.isPathSafe)(global.baseDir, collection))
|
|
134
|
+
return res.status(400).json({ err: true, msg: "invalid collection" });
|
|
135
|
+
try {
|
|
136
|
+
const db = req.dataCenter;
|
|
137
|
+
const result = await db.removeCollection(collection);
|
|
138
|
+
res.json({ err: false, result });
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
console.error(err);
|
|
142
|
+
res.status(500).json({ err: true, msg: err.message });
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
exports.default = router;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "./initDataBases.js";
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
const express_1 = __importDefault(require("express"));
|
|
7
|
+
const body_parser_1 = __importDefault(require("body-parser"));
|
|
8
|
+
const auth_js_1 = require("./auth.js");
|
|
9
|
+
const db_js_1 = __importDefault(require("./db.js"));
|
|
10
|
+
const graph_js_1 = __importDefault(require("./graph.js"));
|
|
11
|
+
require("./initDataBases.js");
|
|
12
|
+
const cors_1 = __importDefault(require("cors"));
|
|
13
|
+
const dotenv_1 = require("dotenv");
|
|
14
|
+
(0, dotenv_1.configDotenv)({ path: ".db.env" });
|
|
15
|
+
const port = process.env.PORT || 14785;
|
|
16
|
+
global.baseDir = process.env.baseDir || process.cwd();
|
|
17
|
+
console.log("baseDir", global.baseDir);
|
|
18
|
+
global.app = (0, express_1.default)();
|
|
19
|
+
global.app.get("/", (req, res) => res.send("Server is running."));
|
|
20
|
+
global.app.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
21
|
+
global.app.use(body_parser_1.default.json());
|
|
22
|
+
global.app.use((0, cors_1.default)({
|
|
23
|
+
origin: "*",
|
|
24
|
+
}));
|
|
25
|
+
const apiDbRouter = express_1.default.Router();
|
|
26
|
+
apiDbRouter.use(auth_js_1.authMiddleware);
|
|
27
|
+
apiDbRouter.use(checkRequest);
|
|
28
|
+
function checkRequest(req, res, next) {
|
|
29
|
+
const dbName = req.body.db;
|
|
30
|
+
if (!global.dataCenter[dbName]) {
|
|
31
|
+
return res.status(400).json({ err: true, msg: "Invalid data center." });
|
|
32
|
+
}
|
|
33
|
+
req.dataCenter = global.dataCenter[dbName].db;
|
|
34
|
+
req.dbType = global.dataCenter[dbName].type;
|
|
35
|
+
next();
|
|
36
|
+
}
|
|
37
|
+
apiDbRouter.use("/database", db_js_1.default);
|
|
38
|
+
apiDbRouter.use("/graph", graph_js_1.default);
|
|
39
|
+
global.app.use("/db/", apiDbRouter);
|
|
40
|
+
global.app.post("/login", async (req, res) => {
|
|
41
|
+
const { login, password } = req.body;
|
|
42
|
+
if (!login || !password)
|
|
43
|
+
return res.json({ err: true, msg: "Login and password are required" });
|
|
44
|
+
const { err, token } = await (0, auth_js_1.loginFunction)(login, password);
|
|
45
|
+
if (err)
|
|
46
|
+
return res.json({ err: true, msg: "Invalid login or password." });
|
|
47
|
+
res.json({ err: false, token });
|
|
48
|
+
});
|
|
49
|
+
global.app.post("/getDbList", auth_js_1.authMiddleware, async (req, res) => {
|
|
50
|
+
const dbsKeys = Object.keys(global.dataCenter);
|
|
51
|
+
const dbs = dbsKeys.map(dbName => ({ name: dbName, type: global.dataCenter[dbName].type }));
|
|
52
|
+
res.json({ err: false, result: dbs });
|
|
53
|
+
});
|
|
54
|
+
if (process.env.gui) {
|
|
55
|
+
let path;
|
|
56
|
+
if (global.__dirname) {
|
|
57
|
+
// @ts-ignore
|
|
58
|
+
path = global.__dirname;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// @ts-ignore
|
|
62
|
+
path = import.meta.dirname;
|
|
63
|
+
}
|
|
64
|
+
global.app.use("/gui", express_1.default.static(path + "/gui"));
|
|
65
|
+
}
|
|
66
|
+
global.app.listen(port, () => console.log(`Server started on port ${port}`));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
const database_js_1 = __importDefault(require("../../database.js"));
|
|
7
|
+
const graph_js_1 = __importDefault(require("../../graph.js"));
|
|
8
|
+
global.db = new database_js_1.default("./serverDB");
|
|
9
|
+
global.dataCenter = {};
|
|
10
|
+
global.db.find("dbs", {}).then(databases => {
|
|
11
|
+
for (const db of databases) {
|
|
12
|
+
if (db.type === "database") {
|
|
13
|
+
global.dataCenter[db.name] = {
|
|
14
|
+
type: "database",
|
|
15
|
+
db: new database_js_1.default(db.folder, db.opts || {})
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
else if (db.type === "graph") {
|
|
19
|
+
global.dataCenter[db.name] = {
|
|
20
|
+
type: "graph",
|
|
21
|
+
db: new graph_js_1.default(db.folder)
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isPathSafe(baseDir: any, userPath: any): boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
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.isPathSafe = isPathSafe;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
function isPathSafe(baseDir, userPath) {
|
|
9
|
+
const resolvedBase = path_1.default.resolve(baseDir);
|
|
10
|
+
const resolvedUserPath = path_1.default.resolve(baseDir, userPath);
|
|
11
|
+
return resolvedUserPath.startsWith(resolvedBase + path_1.default.sep);
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function getSecret(): string;
|
|
@@ -0,0 +1,25 @@
|
|
|
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.default = getSecret;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const os_1 = __importDefault(require("os"));
|
|
9
|
+
function generateJwtSecret() {
|
|
10
|
+
const hostname = os_1.default.hostname();
|
|
11
|
+
const cpuModels = os_1.default.cpus().map(cpu => cpu.model).join("-");
|
|
12
|
+
const platform = os_1.default.platform();
|
|
13
|
+
const arch = os_1.default.arch();
|
|
14
|
+
const macAddresses = os_1.default.networkInterfaces();
|
|
15
|
+
const macAddress = Object.values(macAddresses)
|
|
16
|
+
.flat()
|
|
17
|
+
.filter(iface => iface.mac !== "00:00:00:00:00:00" && !iface.internal)
|
|
18
|
+
.map(iface => iface.mac)
|
|
19
|
+
.join("-");
|
|
20
|
+
const secretData = `${hostname}-${cpuModels}-${platform}-${arch}-${macAddress}`;
|
|
21
|
+
return crypto_1.default.createHash("sha256").update(secretData).digest("hex");
|
|
22
|
+
}
|
|
23
|
+
function getSecret() {
|
|
24
|
+
return process.env.JWT || generateJwtSecret();
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
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
|
+
let args = process.argv.slice(2);
|
|
7
|
+
if (args.length == 0) {
|
|
8
|
+
console.log("No arguments");
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const database_js_1 = __importDefault(require("../../database.js"));
|
|
12
|
+
const auth_js_1 = require("../server/auth.js");
|
|
13
|
+
global.db = new database_js_1.default("./serverDB");
|
|
14
|
+
switch (args.shift()) {
|
|
15
|
+
case "help":
|
|
16
|
+
console.log("commands:");
|
|
17
|
+
console.log(" add-db <type> <name> <folder> <opts>");
|
|
18
|
+
console.log(" rm-db <name>");
|
|
19
|
+
console.log(" list-dbs");
|
|
20
|
+
console.log(" add-user <login> <password>");
|
|
21
|
+
console.log(" rm-user <login>");
|
|
22
|
+
console.log(" list-users");
|
|
23
|
+
break;
|
|
24
|
+
case "add-db":
|
|
25
|
+
if (args.length < 3) {
|
|
26
|
+
console.log("usage: add-db <type> <name> <folder> <opts>");
|
|
27
|
+
console.log("*type: 'database' or 'graph'");
|
|
28
|
+
console.log("*opts: JSON object");
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const type = args[0];
|
|
32
|
+
const name = args[1];
|
|
33
|
+
const folder = args[2];
|
|
34
|
+
const opts = args[3] ? JSON.parse(args[3]) : {};
|
|
35
|
+
global.db.findOne("dbs", { name }).then(dbExists => {
|
|
36
|
+
if (dbExists) {
|
|
37
|
+
console.log("Database already exists");
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
global.db.add("dbs", {
|
|
41
|
+
type,
|
|
42
|
+
name,
|
|
43
|
+
folder,
|
|
44
|
+
opts
|
|
45
|
+
}, false).then(() => console.log("Done"));
|
|
46
|
+
});
|
|
47
|
+
break;
|
|
48
|
+
case "rm-db":
|
|
49
|
+
if (args.length < 1) {
|
|
50
|
+
console.log("No database name");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
global.db.removeOne("dbs", { name: args[0] }).then((res) => console.log(res ? "Done" : "Database not found"));
|
|
54
|
+
break;
|
|
55
|
+
case "list-dbs":
|
|
56
|
+
global.db.find("dbs", {}).then(dbs => console.log(dbs));
|
|
57
|
+
break;
|
|
58
|
+
case "add-user":
|
|
59
|
+
if (args.length < 2) {
|
|
60
|
+
console.log("usage: add-user <login> <password>");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const login = args[0];
|
|
64
|
+
const password = args[1];
|
|
65
|
+
(0, auth_js_1.addUserAccess)(login, password).then((res) => console.log(res.err ? res.msg : res.user._id));
|
|
66
|
+
break;
|
|
67
|
+
case "rm-user":
|
|
68
|
+
if (args.length < 1) {
|
|
69
|
+
console.log("No user login or id");
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
(0, auth_js_1.removeUser)(args[0]).then((res) => console.log(res ? "Done" : "User not found"));
|
|
73
|
+
break;
|
|
74
|
+
case "list-users":
|
|
75
|
+
global.db.find("user", {}).then(users => {
|
|
76
|
+
users = users.map(u => {
|
|
77
|
+
return {
|
|
78
|
+
login: u.login,
|
|
79
|
+
_id: u._id
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
console.log(users);
|
|
83
|
+
});
|
|
84
|
+
break;
|
|
85
|
+
default:
|
|
86
|
+
console.log("Invalid argument. Use help for more info");
|
|
87
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Predefined Search Options Quick Reference
|
|
3
|
+
*
|
|
4
|
+
* This module defines the types and structures for search operators used
|
|
5
|
+
* to validate and query data objects.
|
|
6
|
+
*/
|
|
7
|
+
/** Logical Operators */
|
|
8
|
+
export type LogicalOperators = {
|
|
9
|
+
/**
|
|
10
|
+
* Recursively applies multiple conditions, all of which must evaluate to true.
|
|
11
|
+
* Can include other operators such as $gt, $exists, or nested $and/$or conditions.
|
|
12
|
+
*/
|
|
13
|
+
$and?: Array<PredefinedSearchOperators>;
|
|
14
|
+
/**
|
|
15
|
+
* Recursively applies multiple conditions, at least one of which must evaluate to true.
|
|
16
|
+
* Can include other operators such as $lt, $type, or nested $and/$or conditions.
|
|
17
|
+
*/
|
|
18
|
+
$or?: Array<PredefinedSearchOperators>;
|
|
19
|
+
/**
|
|
20
|
+
* Negates a single condition.
|
|
21
|
+
* Can include any other operator as its value.
|
|
22
|
+
*/
|
|
23
|
+
$not?: PredefinedSearchOperators;
|
|
24
|
+
};
|
|
25
|
+
/** Comparison Operators */
|
|
26
|
+
export type ComparisonOperators = {
|
|
27
|
+
$gt?: Record<string, number>;
|
|
28
|
+
$lt?: Record<string, number>;
|
|
29
|
+
$gte?: Record<string, number>;
|
|
30
|
+
$lte?: Record<string, number>;
|
|
31
|
+
$in?: Record<string, any[]>;
|
|
32
|
+
$nin?: Record<string, any[]>;
|
|
33
|
+
$between?: Record<string, [number, number]>;
|
|
34
|
+
};
|
|
35
|
+
/** Type and Existence Operators */
|
|
36
|
+
export type TypeAndExistenceOperators = {
|
|
37
|
+
$exists?: Record<string, boolean>;
|
|
38
|
+
$type?: Record<string, string>;
|
|
39
|
+
};
|
|
40
|
+
/** Array Operators */
|
|
41
|
+
export type ArrayOperators = {
|
|
42
|
+
$arrinc?: Record<string, any[]>;
|
|
43
|
+
$arrincall?: Record<string, any[]>;
|
|
44
|
+
$size?: Record<string, number>;
|
|
45
|
+
};
|
|
46
|
+
/** String Operators */
|
|
47
|
+
export type StringOperators = {
|
|
48
|
+
$regex?: Record<string, RegExp>;
|
|
49
|
+
$startsWith?: Record<string, string>;
|
|
50
|
+
$endsWith?: Record<string, string>;
|
|
51
|
+
};
|
|
52
|
+
/** Other Operators */
|
|
53
|
+
export type OtherOperators = {
|
|
54
|
+
$subset?: Record<string, any>;
|
|
55
|
+
};
|
|
56
|
+
/** Predefined Search Operators */
|
|
57
|
+
export type PredefinedSearchOperators = LogicalOperators & ComparisonOperators & TypeAndExistenceOperators & ArrayOperators & StringOperators & OtherOperators;
|
|
58
|
+
/**
|
|
59
|
+
* SearchOptions can be either a function or an object with predefined operators.
|
|
60
|
+
*/
|
|
61
|
+
export type SearchOptions = PredefinedSearchOperators | ((doc: Record<string, any>) => boolean);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if an object matches the standard field comparison.
|
|
3
|
+
* @function
|
|
4
|
+
* @param {Object} obj - The object to check.
|
|
5
|
+
* @param {Object} fields - Criteria to compare.
|
|
6
|
+
* @returns {boolean} - Whether the object matches the criteria.
|
|
7
|
+
*/
|
|
8
|
+
export default function hasFields(obj: any, fields: any): any;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = hasFields;
|
|
4
|
+
/**
|
|
5
|
+
* Checks if an object matches the standard field comparison.
|
|
6
|
+
* @function
|
|
7
|
+
* @param {Object} obj - The object to check.
|
|
8
|
+
* @param {Object} fields - Criteria to compare.
|
|
9
|
+
* @returns {boolean} - Whether the object matches the criteria.
|
|
10
|
+
*/
|
|
11
|
+
function hasFields(obj, fields) {
|
|
12
|
+
const keys = Object.keys(fields);
|
|
13
|
+
return keys.every(key => {
|
|
14
|
+
if (obj[key] !== undefined) {
|
|
15
|
+
if (typeof fields[key] === "object" && fields[key] !== null) {
|
|
16
|
+
return hasFields(obj[key], fields[key]);
|
|
17
|
+
}
|
|
18
|
+
return obj[key] === fields[key];
|
|
19
|
+
}
|
|
20
|
+
return false;
|
|
21
|
+
});
|
|
22
|
+
}
|