jxp 4.1.1 → 5.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/.env.sample +30 -0
- package/README.md +2 -0
- package/dist/bin/index_audit.d.ts +3 -0
- package/dist/bin/index_audit.d.ts.map +1 -0
- package/dist/bin/index_audit.js +66 -0
- package/dist/bin/index_audit.js.map +1 -0
- package/dist/bin/mcp-stdio-bridge.d.ts +3 -0
- package/dist/bin/mcp-stdio-bridge.d.ts.map +1 -0
- package/dist/bin/mcp-stdio-bridge.js +87 -0
- package/dist/bin/mcp-stdio-bridge.js.map +1 -0
- package/dist/bin/server.d.ts.map +1 -1
- package/dist/bin/server.js +8 -2
- package/dist/bin/server.js.map +1 -1
- package/dist/libs/builtin_models.d.ts +21 -0
- package/dist/libs/builtin_models.d.ts.map +1 -0
- package/dist/libs/builtin_models.js +125 -0
- package/dist/libs/builtin_models.js.map +1 -0
- package/dist/libs/docs-auth.d.ts.map +1 -1
- package/dist/libs/docs-auth.js +6 -2
- package/dist/libs/docs-auth.js.map +1 -1
- package/dist/libs/docs.js +105 -44
- package/dist/libs/docs.js.map +1 -1
- package/dist/libs/groups.js +3 -4
- package/dist/libs/groups.js.map +1 -1
- package/dist/libs/index_diagnostics.d.ts +144 -0
- package/dist/libs/index_diagnostics.d.ts.map +1 -0
- package/dist/libs/index_diagnostics.js +671 -0
- package/dist/libs/index_diagnostics.js.map +1 -0
- package/dist/libs/jxp.d.ts.map +1 -1
- package/dist/libs/jxp.js +97 -331
- package/dist/libs/jxp.js.map +1 -1
- package/dist/libs/load-config.d.ts +2 -0
- package/dist/libs/load-config.d.ts.map +1 -1
- package/dist/libs/load-config.js +10 -0
- package/dist/libs/load-config.js.map +1 -1
- package/dist/libs/login.js +3 -8
- package/dist/libs/login.js.map +1 -1
- package/dist/libs/mcp/auth.d.ts +4 -0
- package/dist/libs/mcp/auth.d.ts.map +1 -0
- package/dist/libs/mcp/auth.js +49 -0
- package/dist/libs/mcp/auth.js.map +1 -0
- package/dist/libs/mcp/config.d.ts +21 -0
- package/dist/libs/mcp/config.d.ts.map +1 -0
- package/dist/libs/mcp/config.js +66 -0
- package/dist/libs/mcp/config.js.map +1 -0
- package/dist/libs/mcp/context.d.ts +5 -0
- package/dist/libs/mcp/context.d.ts.map +1 -0
- package/dist/libs/mcp/context.js +14 -0
- package/dist/libs/mcp/context.js.map +1 -0
- package/dist/libs/mcp/describe.d.ts +13 -0
- package/dist/libs/mcp/describe.d.ts.map +1 -0
- package/dist/libs/mcp/describe.js +36 -0
- package/dist/libs/mcp/describe.js.map +1 -0
- package/dist/libs/mcp/docs_auth.d.ts +5 -0
- package/dist/libs/mcp/docs_auth.d.ts.map +1 -0
- package/dist/libs/mcp/docs_auth.js +36 -0
- package/dist/libs/mcp/docs_auth.js.map +1 -0
- package/dist/libs/mcp/dynamic_import.d.ts +6 -0
- package/dist/libs/mcp/dynamic_import.d.ts.map +1 -0
- package/dist/libs/mcp/dynamic_import.js +12 -0
- package/dist/libs/mcp/dynamic_import.js.map +1 -0
- package/dist/libs/mcp/execute_tool.d.ts +10 -0
- package/dist/libs/mcp/execute_tool.d.ts.map +1 -0
- package/dist/libs/mcp/execute_tool.js +65 -0
- package/dist/libs/mcp/execute_tool.js.map +1 -0
- package/dist/libs/mcp/guides/default.md +67 -0
- package/dist/libs/mcp/guides.d.ts +14 -0
- package/dist/libs/mcp/guides.d.ts.map +1 -0
- package/dist/libs/mcp/guides.js +127 -0
- package/dist/libs/mcp/guides.js.map +1 -0
- package/dist/libs/mcp/model_visibility.d.ts +31 -0
- package/dist/libs/mcp/model_visibility.d.ts.map +1 -0
- package/dist/libs/mcp/model_visibility.js +73 -0
- package/dist/libs/mcp/model_visibility.js.map +1 -0
- package/dist/libs/mcp/mount.d.ts +10 -0
- package/dist/libs/mcp/mount.d.ts.map +1 -0
- package/dist/libs/mcp/mount.js +68 -0
- package/dist/libs/mcp/mount.js.map +1 -0
- package/dist/libs/mcp/read_service.d.ts +23 -0
- package/dist/libs/mcp/read_service.d.ts.map +1 -0
- package/dist/libs/mcp/read_service.js +141 -0
- package/dist/libs/mcp/read_service.js.map +1 -0
- package/dist/libs/mcp/server.d.ts +23 -0
- package/dist/libs/mcp/server.d.ts.map +1 -0
- package/dist/libs/mcp/server.js +111 -0
- package/dist/libs/mcp/server.js.map +1 -0
- package/dist/libs/parse_byte_size.d.ts +10 -0
- package/dist/libs/parse_byte_size.d.ts.map +1 -0
- package/dist/libs/parse_byte_size.js +80 -0
- package/dist/libs/parse_byte_size.js.map +1 -0
- package/dist/libs/query_limits.js +99 -13
- package/dist/libs/query_limits.js.map +1 -1
- package/dist/libs/read_handlers.d.ts +13 -0
- package/dist/libs/read_handlers.d.ts.map +1 -0
- package/dist/libs/read_handlers.js +381 -0
- package/dist/libs/read_handlers.js.map +1 -0
- package/dist/libs/schema.js +2 -2
- package/dist/libs/schema.js.map +1 -1
- package/dist/libs/schema_serialize.d.ts +3 -0
- package/dist/libs/schema_serialize.d.ts.map +1 -0
- package/dist/libs/schema_serialize.js +45 -0
- package/dist/libs/schema_serialize.js.map +1 -0
- package/dist/libs/security.js +7 -11
- package/dist/libs/security.js.map +1 -1
- package/dist/libs/setup.js +3 -4
- package/dist/libs/setup.js.map +1 -1
- package/dist/libs/startup.d.ts +4 -0
- package/dist/libs/startup.d.ts.map +1 -1
- package/dist/libs/startup.js +17 -0
- package/dist/libs/startup.js.map +1 -1
- package/dist/models/indexquerylog_model.d.ts +19 -0
- package/dist/models/indexquerylog_model.d.ts.map +1 -0
- package/dist/models/indexquerylog_model.js +32 -0
- package/dist/models/indexquerylog_model.js.map +1 -0
- package/dist/types/jxp-config.d.ts +29 -0
- package/dist/types/jxp-config.d.ts.map +1 -1
- package/dist/types/schema-fields.d.ts +4 -0
- package/dist/types/schema-fields.d.ts.map +1 -1
- package/docs/api.md +16 -2
- package/docs/changelog.md +101 -1
- package/docs/configuration.md +39 -0
- package/docs/index.md +2 -0
- package/docs/index_diagnostics.md +127 -0
- package/docs/mcp.md +134 -0
- package/docs/schemas.md +3 -1
- package/mkdocs.yml +2 -0
- package/package.json +26 -9
- package/templates/assets/diagnostics.js +352 -0
- package/templates/assets/docs.css +107 -0
- package/templates/assets/mcp-console.js +343 -0
- package/templates/diagnostics.pug +94 -0
- package/templates/index.pug +38 -0
- package/templates/mcp.pug +112 -0
- package/templates/navbar.pug +2 -0
- package/templates/sidebar.pug +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index_diagnostics.js","sourceRoot":"","sources":["../../src/libs/index_diagnostics.ts"],"names":[],"mappings":"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"}
|
package/dist/libs/jxp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jxp.d.ts","sourceRoot":"","sources":["../../src/libs/jxp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"jxp.d.ts","sourceRoot":"","sources":["../../src/libs/jxp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAivBrD,QAAA,MAAM,GAAG,GAAa,SAAS,SAAS,QA4cvC,CAAC;AAEF,SAAS,GAAG,CAAC"}
|
package/dist/libs/jxp.js
CHANGED
|
@@ -17,7 +17,6 @@ const ws = require("./ws");
|
|
|
17
17
|
const modeldir = require("./modeldir");
|
|
18
18
|
const query_manipulation = require("./query_manipulation");
|
|
19
19
|
const corsMiddleware = require('restify-cors-middleware2');
|
|
20
|
-
const { Parser: CsvParser } = require('@json2csv/plainjs');
|
|
21
20
|
const cache = require("./cache");
|
|
22
21
|
const query_limits = require("./query_limits");
|
|
23
22
|
const query_sanitize = require("./query_sanitize");
|
|
@@ -28,6 +27,9 @@ const response_sanitize = require("./response_sanitize");
|
|
|
28
27
|
const link_index = require("./link_index");
|
|
29
28
|
const { safeErrorMessage } = require("./safe_error");
|
|
30
29
|
const { logRequestError, logAndThrow } = require("./request_log");
|
|
30
|
+
const index_diagnostics = require("./index_diagnostics");
|
|
31
|
+
const builtin_models = require("./builtin_models");
|
|
32
|
+
const read_handlers = require("./read_handlers");
|
|
31
33
|
const schemaModule = require("./schema");
|
|
32
34
|
global.JXPSchema = schemaModule.default || schemaModule;
|
|
33
35
|
var models = {};
|
|
@@ -127,25 +129,32 @@ const outputJSON = async (req, res) => {
|
|
|
127
129
|
};
|
|
128
130
|
// Outputs whatever is in res.result as CSV
|
|
129
131
|
const outputCSV = (req, res, next) => {
|
|
130
|
-
const opts = { "flatten": true };
|
|
131
132
|
if (!res.result.data) {
|
|
132
133
|
throw new errors.InternalServerError("Error generating CSV");
|
|
133
134
|
}
|
|
134
135
|
try {
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
136
|
+
const csv = read_handlers.resultToCsv(res.result);
|
|
137
|
+
const limits = query_limits.getLimits(req);
|
|
138
|
+
if (limits.max_response_bytes > 0) {
|
|
139
|
+
const size = Buffer.byteLength(csv, "utf8");
|
|
140
|
+
if (size > limits.max_response_bytes) {
|
|
141
|
+
const err = new errors.PayloadTooLargeError(`CSV export size ${size} bytes exceeds maximum ${limits.max_response_bytes} bytes. ` +
|
|
142
|
+
`Reduce ?limit= or narrow ?filter=.`);
|
|
143
|
+
logRequestError(req, res, err, "response_size", `${size}B max=${limits.max_response_bytes}B`);
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
138
146
|
}
|
|
139
147
|
res.writeHead(200, {
|
|
140
|
-
|
|
141
|
-
|
|
148
|
+
"Content-Type": "text/csv",
|
|
149
|
+
"Content-Disposition": "attachment; filename=export.csv",
|
|
142
150
|
});
|
|
143
|
-
const csv = new CsvParser(opts).parse(data);
|
|
144
151
|
res.end(csv);
|
|
145
152
|
next();
|
|
146
153
|
}
|
|
147
154
|
catch (err) {
|
|
148
|
-
|
|
155
|
+
if (!(err instanceof errors.PayloadTooLargeError)) {
|
|
156
|
+
logRequestError(req, res, err, "outputCSV");
|
|
157
|
+
}
|
|
149
158
|
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
150
159
|
}
|
|
151
160
|
};
|
|
@@ -153,136 +162,32 @@ const outputCSV = (req, res, next) => {
|
|
|
153
162
|
const actionGet = async (req, res) => {
|
|
154
163
|
const opname = `get ${req.modelname} ${ops++}`;
|
|
155
164
|
console.time(opname);
|
|
156
|
-
let filters = {};
|
|
157
|
-
try {
|
|
158
|
-
filters = parseFilter(req.query.filter);
|
|
159
|
-
filters = query_sanitize.sanitizeFilter(filters, getSecurityOpts(req));
|
|
160
|
-
}
|
|
161
|
-
catch (err) {
|
|
162
|
-
logRequestError(req, res, err, "filter");
|
|
163
|
-
if (err instanceof errors.BadRequestError) {
|
|
164
|
-
throw err;
|
|
165
|
-
}
|
|
166
|
-
if (err instanceof errors.ForbiddenError) {
|
|
167
|
-
throw err;
|
|
168
|
-
}
|
|
169
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
170
|
-
}
|
|
171
|
-
const search = query_sanitize.parseSearchObject(req.query.search);
|
|
172
|
-
for (const i in search) {
|
|
173
|
-
filters[i] = search[i];
|
|
174
|
-
}
|
|
175
|
-
let countquery = filters;
|
|
176
|
-
let qcount = req.Model.find(filters);
|
|
177
|
-
let q = req.Model.find(filters);
|
|
178
|
-
let checkDeleted = [{ _deleted: false }, { _deleted: null }];
|
|
179
|
-
if (!req.query.showDeleted) {
|
|
180
|
-
countquery = Object.assign({ $or: checkDeleted }, countquery);
|
|
181
|
-
qcount.or(checkDeleted);
|
|
182
|
-
q.or(checkDeleted);
|
|
183
|
-
}
|
|
184
|
-
if (req.query.search) {
|
|
185
|
-
// console.log({ search: req.query.search });
|
|
186
|
-
q = req.Model.find({ $text: { $search: req.query.search } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } });
|
|
187
|
-
countquery = Object.assign({ $text: { $search: req.query.search } }, countquery);
|
|
188
|
-
qcount = req.Model.find({ $text: { $search: req.query.search } });
|
|
189
|
-
}
|
|
190
|
-
if (res.user) {
|
|
191
|
-
q.options = ({ user: res.user });
|
|
192
|
-
}
|
|
193
165
|
try {
|
|
194
|
-
const estimatedCount = await req.Model.estimatedDocumentCount();
|
|
195
|
-
let count = -1;
|
|
196
|
-
if (query_limits.shouldRunCount(req)) {
|
|
197
|
-
if (estimatedCount < 100000 && Object.keys(countquery).length !== 0) {
|
|
198
|
-
count = await qcount.countDocuments();
|
|
199
|
-
}
|
|
200
|
-
else {
|
|
201
|
-
count = estimatedCount;
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
const result = {};
|
|
205
|
-
if (count >= 0) {
|
|
206
|
-
result.count = count;
|
|
207
|
-
}
|
|
208
|
-
const effectiveLimit = query_limits.enforceListLimit(req, estimatedCount, res);
|
|
209
|
-
query_limits.applyListPagination(q, result, req, effectiveLimit, count >= 0 ? count : 0, changeUrlParams);
|
|
210
|
-
if (req.query.sort) {
|
|
211
|
-
q.sort(req.query.sort);
|
|
212
|
-
result.sort = req.query.sort;
|
|
213
|
-
}
|
|
214
|
-
if (req.query.populate) {
|
|
215
|
-
if ((typeof req.query.populate === "object") && !Array.isArray(req.query.populate)) {
|
|
216
|
-
for (let i in req.query.populate) {
|
|
217
|
-
q.populate(i, req.query.populate[i].replace(/,/g, " "));
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
else {
|
|
221
|
-
q.populate(req.query.populate);
|
|
222
|
-
}
|
|
223
|
-
result.populate = req.query.populate;
|
|
224
|
-
}
|
|
225
166
|
if (req.query.autopopulate) {
|
|
226
167
|
res.header("jxp-autopopulate-warning", "expensive");
|
|
227
|
-
for (let key in req.Model.schema.paths) {
|
|
228
|
-
const dirpath = req.Model.schema.paths[key];
|
|
229
|
-
if (dirpath.instance == "ObjectID" && dirpath.options.link) {
|
|
230
|
-
q.populate(String(dirpath.options.map_to || dirpath.options.virtual || dirpath.options.link.toLowerCase()));
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
result.autopopulate = true;
|
|
234
|
-
}
|
|
235
|
-
if (req.query.fields) {
|
|
236
|
-
const fields = req.query.fields.split(",");
|
|
237
|
-
const select = {};
|
|
238
|
-
fields.forEach(field => {
|
|
239
|
-
select[field] = 1;
|
|
240
|
-
});
|
|
241
|
-
q.select(select);
|
|
242
|
-
}
|
|
243
|
-
if (req.query.search) {
|
|
244
|
-
result.search = req.query.search;
|
|
245
168
|
}
|
|
246
|
-
|
|
247
|
-
response_sanitize.sanitizeListResult(result, getStripFields(req));
|
|
248
|
-
res.result = result;
|
|
169
|
+
await read_handlers.executeList(req, res);
|
|
249
170
|
if (debug)
|
|
250
171
|
console.timeEnd(opname);
|
|
251
172
|
}
|
|
252
173
|
catch (err) {
|
|
253
174
|
if (debug)
|
|
254
175
|
console.timeEnd(opname);
|
|
255
|
-
|
|
256
|
-
!(err instanceof errors.ForbiddenError)) {
|
|
257
|
-
logRequestError(req, res, err, "get");
|
|
258
|
-
}
|
|
259
|
-
if (err instanceof errors.BadRequestError) {
|
|
260
|
-
throw err;
|
|
261
|
-
}
|
|
262
|
-
if (err instanceof errors.ForbiddenError) {
|
|
263
|
-
throw err;
|
|
264
|
-
}
|
|
265
|
-
if (err.code)
|
|
266
|
-
throw err;
|
|
267
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
176
|
+
throw err;
|
|
268
177
|
}
|
|
269
178
|
};
|
|
270
179
|
const actionGetOne = async (req, res) => {
|
|
271
180
|
const opname = `getOne ${req.modelname}/${req.params.item_id} ${ops++}`;
|
|
272
181
|
console.time(opname);
|
|
273
182
|
try {
|
|
274
|
-
|
|
275
|
-
res.result = { data };
|
|
183
|
+
await read_handlers.executeGetOne(req, res);
|
|
276
184
|
if (debug)
|
|
277
185
|
console.timeEnd(opname);
|
|
278
186
|
}
|
|
279
187
|
catch (err) {
|
|
280
|
-
logRequestError(req, res, err, "getOne");
|
|
281
188
|
if (debug)
|
|
282
189
|
console.timeEnd(opname);
|
|
283
|
-
|
|
284
|
-
throw err;
|
|
285
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
190
|
+
throw err;
|
|
286
191
|
}
|
|
287
192
|
};
|
|
288
193
|
const actionPost = async (req, res) => {
|
|
@@ -467,38 +372,15 @@ const actionDelete = async (req, res) => {
|
|
|
467
372
|
const actionCount = async (req, res) => {
|
|
468
373
|
const opname = `count ${req.modelname} ${ops++}`;
|
|
469
374
|
console.time(opname);
|
|
470
|
-
let filters = {};
|
|
471
375
|
try {
|
|
472
|
-
|
|
473
|
-
filters = query_sanitize.sanitizeFilter(filters, getSecurityOpts(req));
|
|
474
|
-
}
|
|
475
|
-
catch (err) {
|
|
476
|
-
logRequestError(req, res, err, "filter");
|
|
477
|
-
if (err instanceof errors.BadRequestError || err instanceof errors.ForbiddenError) {
|
|
478
|
-
throw err;
|
|
479
|
-
}
|
|
480
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
481
|
-
}
|
|
482
|
-
const search = query_sanitize.parseSearchObject(req.query.search);
|
|
483
|
-
for (const i in search) {
|
|
484
|
-
filters[i] = search[i];
|
|
485
|
-
}
|
|
486
|
-
if (!req.query.showDeleted) {
|
|
487
|
-
filters = Object.assign({ $or: [{ _deleted: false }, { _deleted: null }] }, filters);
|
|
488
|
-
}
|
|
489
|
-
try {
|
|
490
|
-
const count = await req.Model.countDocuments(filters).exec();
|
|
491
|
-
res.result = { count };
|
|
376
|
+
await read_handlers.executeCount(req, res);
|
|
492
377
|
if (debug)
|
|
493
378
|
console.timeEnd(opname);
|
|
494
379
|
}
|
|
495
380
|
catch (err) {
|
|
496
|
-
logRequestError(req, res, err, "count");
|
|
497
381
|
if (debug)
|
|
498
382
|
console.timeEnd(opname);
|
|
499
|
-
|
|
500
|
-
throw err;
|
|
501
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
383
|
+
throw err;
|
|
502
384
|
}
|
|
503
385
|
};
|
|
504
386
|
const actionCall = async (req, res) => {
|
|
@@ -570,16 +452,16 @@ const actionQuery = async (req, res) => {
|
|
|
570
452
|
let qcount = req.Model.find({ "$and": query });
|
|
571
453
|
let q = req.Model.find({ "$and": query });
|
|
572
454
|
try {
|
|
455
|
+
const estimatedCount = await req.Model.estimatedDocumentCount();
|
|
456
|
+
const result = {};
|
|
457
|
+
const { limit: effectiveLimit, limitCapped, filterExemption } = query_limits.enforceListLimit(req, estimatedCount, res, { result, bodyQuery: sanitizedQuery });
|
|
573
458
|
let count = -1;
|
|
574
|
-
if (query_limits.shouldRunCount(req)) {
|
|
459
|
+
if (query_limits.shouldRunCount(req, { filterExemption, limitCapped })) {
|
|
575
460
|
count = await qcount.countDocuments();
|
|
576
461
|
}
|
|
577
|
-
const result = {};
|
|
578
462
|
if (count >= 0) {
|
|
579
463
|
result.count = count;
|
|
580
464
|
}
|
|
581
|
-
const estimatedCount = await req.Model.estimatedDocumentCount();
|
|
582
|
-
const effectiveLimit = query_limits.enforceListLimit(req, estimatedCount, res);
|
|
583
465
|
query_limits.applyListPagination(q, result, req, effectiveLimit, count >= 0 ? count : 0, changeUrlParams);
|
|
584
466
|
if (req.query.sort) {
|
|
585
467
|
q.sort(req.query.sort);
|
|
@@ -615,6 +497,8 @@ const actionQuery = async (req, res) => {
|
|
|
615
497
|
}
|
|
616
498
|
result.data = await q.exec();
|
|
617
499
|
response_sanitize.sanitizeListResult(result, getStripFields(req));
|
|
500
|
+
query_limits.finalizeListPagination(result, req, Array.isArray(result.data) ? result.data.length : 0, effectiveLimit, count, changeUrlParams);
|
|
501
|
+
query_limits.enforceResponseSize(result, req, res);
|
|
618
502
|
res.result = result;
|
|
619
503
|
if (debug)
|
|
620
504
|
console.timeEnd(opname);
|
|
@@ -624,10 +508,13 @@ const actionQuery = async (req, res) => {
|
|
|
624
508
|
if (debug)
|
|
625
509
|
console.timeEnd(opname);
|
|
626
510
|
if (!(err instanceof errors.BadRequestError) &&
|
|
627
|
-
!(err instanceof errors.ForbiddenError)
|
|
511
|
+
!(err instanceof errors.ForbiddenError) &&
|
|
512
|
+
!(err instanceof errors.PayloadTooLargeError)) {
|
|
628
513
|
logRequestError(req, res, err, "query");
|
|
629
514
|
}
|
|
630
|
-
if (err instanceof errors.BadRequestError ||
|
|
515
|
+
if (err instanceof errors.BadRequestError ||
|
|
516
|
+
err instanceof errors.ForbiddenError ||
|
|
517
|
+
err instanceof errors.PayloadTooLargeError) {
|
|
631
518
|
throw err;
|
|
632
519
|
}
|
|
633
520
|
if (err.code)
|
|
@@ -746,175 +633,6 @@ const actionBulkWrite = async (req, res) => {
|
|
|
746
633
|
// });
|
|
747
634
|
// };
|
|
748
635
|
// Utitlities
|
|
749
|
-
const getOne = async (Model, item_id, params, options) => {
|
|
750
|
-
const query = Model.findById(item_id, {}, options);
|
|
751
|
-
if (params.populate) {
|
|
752
|
-
if ((typeof params.populate === "object") && !Array.isArray(params.populate)) {
|
|
753
|
-
for (let i in params.populate) {
|
|
754
|
-
query.populate(i, params.populate[i].replace(/,/g, " "));
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
else {
|
|
758
|
-
query.populate(params.populate);
|
|
759
|
-
}
|
|
760
|
-
}
|
|
761
|
-
if (params.autopopulate) {
|
|
762
|
-
for (let key in Model.schema.paths) {
|
|
763
|
-
var dirpath = Model.schema.paths[key];
|
|
764
|
-
if (dirpath.instance == "ObjectID" && dirpath.options.link) {
|
|
765
|
-
query.populate(String(dirpath.options.map_to || dirpath.options.virtual || dirpath.options.link.toLowerCase()));
|
|
766
|
-
}
|
|
767
|
-
}
|
|
768
|
-
}
|
|
769
|
-
try {
|
|
770
|
-
var item = await query.exec();
|
|
771
|
-
if (!item) {
|
|
772
|
-
// console.error("Could not find document");
|
|
773
|
-
throw new errors.NotFoundError(`Could not find document ${item_id} on ${Model.modelName}`);
|
|
774
|
-
}
|
|
775
|
-
if (item._deleted && !params.showDeleted) {
|
|
776
|
-
// console.error("Document is deleted");
|
|
777
|
-
throw new errors.NotFoundError(`Document ${item_id} is deleted on ${Model.modelName}`);
|
|
778
|
-
}
|
|
779
|
-
return response_sanitize.sanitizeDocument(item);
|
|
780
|
-
}
|
|
781
|
-
catch (err) {
|
|
782
|
-
if (err.code)
|
|
783
|
-
throw err;
|
|
784
|
-
throw new errors.InternalServerError(safeErrorMessage(err));
|
|
785
|
-
}
|
|
786
|
-
};
|
|
787
|
-
// Helper function to check if a string is an ISO date string
|
|
788
|
-
function isISODateString(str) {
|
|
789
|
-
if (typeof str !== 'string')
|
|
790
|
-
return false;
|
|
791
|
-
const isoDateRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?Z$/;
|
|
792
|
-
if (!isoDateRegex.test(str))
|
|
793
|
-
return false;
|
|
794
|
-
const date = new Date(str);
|
|
795
|
-
if (isNaN(date.getTime())) {
|
|
796
|
-
throw new errors.BadRequestError("Invalid date format");
|
|
797
|
-
}
|
|
798
|
-
return true;
|
|
799
|
-
}
|
|
800
|
-
const parseFilter = (filter, depth = 0) => {
|
|
801
|
-
const MAX_DEPTH = 10;
|
|
802
|
-
if (!filter)
|
|
803
|
-
return {};
|
|
804
|
-
if (depth > MAX_DEPTH) {
|
|
805
|
-
throw new errors.BadRequestError("Maximum filter depth exceeded");
|
|
806
|
-
}
|
|
807
|
-
if (typeof filter !== "object" || filter === null)
|
|
808
|
-
return filter;
|
|
809
|
-
// Handle arrays by merging their operators
|
|
810
|
-
if (Array.isArray(filter)) {
|
|
811
|
-
const result = {};
|
|
812
|
-
filter.forEach(item => {
|
|
813
|
-
if (typeof item === "string" && item.includes(":")) {
|
|
814
|
-
const parts = item.split(":");
|
|
815
|
-
const key = parts[0];
|
|
816
|
-
const value = parts.slice(1).join(":");
|
|
817
|
-
if (key.startsWith("$")) {
|
|
818
|
-
try {
|
|
819
|
-
if (isISODateString(value)) {
|
|
820
|
-
result[key] = new Date(value);
|
|
821
|
-
}
|
|
822
|
-
else {
|
|
823
|
-
result[key] = value;
|
|
824
|
-
}
|
|
825
|
-
}
|
|
826
|
-
catch (err) {
|
|
827
|
-
if (err instanceof errors.BadRequestError) {
|
|
828
|
-
throw err;
|
|
829
|
-
}
|
|
830
|
-
throw new errors.BadRequestError("Invalid date format");
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
}
|
|
834
|
-
});
|
|
835
|
-
return result;
|
|
836
|
-
}
|
|
837
|
-
// Create a new object to avoid modifying the input
|
|
838
|
-
const parsedFilter = {};
|
|
839
|
-
for (let i in filter) {
|
|
840
|
-
if (filter[i] === "false") {
|
|
841
|
-
parsedFilter[i] = false;
|
|
842
|
-
continue;
|
|
843
|
-
}
|
|
844
|
-
if (filter[i] === "true") {
|
|
845
|
-
parsedFilter[i] = true;
|
|
846
|
-
continue;
|
|
847
|
-
}
|
|
848
|
-
if (typeof filter[i] === "string") {
|
|
849
|
-
try {
|
|
850
|
-
if (isISODateString(filter[i])) {
|
|
851
|
-
parsedFilter[i] = new Date(filter[i]);
|
|
852
|
-
continue;
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
catch (err) {
|
|
856
|
-
if (err instanceof errors.BadRequestError) {
|
|
857
|
-
throw err;
|
|
858
|
-
}
|
|
859
|
-
throw new errors.BadRequestError("Invalid date format");
|
|
860
|
-
}
|
|
861
|
-
if (filter[i].includes(":")) {
|
|
862
|
-
const parts = filter[i].split(":");
|
|
863
|
-
const key = parts[0];
|
|
864
|
-
const value = parts.slice(1).join(":");
|
|
865
|
-
if (key.startsWith("$")) {
|
|
866
|
-
try {
|
|
867
|
-
if (isISODateString(value)) {
|
|
868
|
-
if (!parsedFilter[i])
|
|
869
|
-
parsedFilter[i] = {};
|
|
870
|
-
parsedFilter[i][key] = new Date(value);
|
|
871
|
-
}
|
|
872
|
-
else if (value.startsWith("[") && value.endsWith("]")) {
|
|
873
|
-
if (!parsedFilter[i])
|
|
874
|
-
parsedFilter[i] = {};
|
|
875
|
-
parsedFilter[i][key] = value.slice(1, -1).split(",");
|
|
876
|
-
}
|
|
877
|
-
else if (key === "$regex" && value.startsWith("/")) {
|
|
878
|
-
if (!parsedFilter[i])
|
|
879
|
-
parsedFilter[i] = {};
|
|
880
|
-
const match = value.match(/^\/(.+?)\/([gimy]*)$/);
|
|
881
|
-
if (match) {
|
|
882
|
-
parsedFilter[i][key] = new RegExp(match[1], match[2]);
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
else {
|
|
886
|
-
if (!parsedFilter[i])
|
|
887
|
-
parsedFilter[i] = {};
|
|
888
|
-
parsedFilter[i][key] = value;
|
|
889
|
-
}
|
|
890
|
-
}
|
|
891
|
-
catch (err) {
|
|
892
|
-
if (err instanceof errors.BadRequestError) {
|
|
893
|
-
throw err;
|
|
894
|
-
}
|
|
895
|
-
throw new errors.BadRequestError("Invalid date format");
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
else {
|
|
899
|
-
parsedFilter[i] = filter[i];
|
|
900
|
-
}
|
|
901
|
-
}
|
|
902
|
-
else {
|
|
903
|
-
parsedFilter[i] = filter[i];
|
|
904
|
-
}
|
|
905
|
-
}
|
|
906
|
-
else if (Array.isArray(filter[i])) {
|
|
907
|
-
parsedFilter[i] = parseFilter(filter[i], depth + 1);
|
|
908
|
-
}
|
|
909
|
-
else if (typeof filter[i] === "object") {
|
|
910
|
-
parsedFilter[i] = parseFilter(filter[i], depth + 1);
|
|
911
|
-
}
|
|
912
|
-
else {
|
|
913
|
-
parsedFilter[i] = filter[i];
|
|
914
|
-
}
|
|
915
|
-
}
|
|
916
|
-
return parsedFilter;
|
|
917
|
-
};
|
|
918
636
|
const _deSerialize = (data) => {
|
|
919
637
|
function assign(obj, keyPath, value) {
|
|
920
638
|
const MAX_DEPTH = 20; // Prevent excessive nesting
|
|
@@ -997,6 +715,8 @@ const changeUrlParams = (req, key, val) => {
|
|
|
997
715
|
return req.config.url + req.path() + "?" + querystring.stringify(q);
|
|
998
716
|
};
|
|
999
717
|
const JXP = function (options) {
|
|
718
|
+
// Must run before models load; reads QUERY_INDEX_MONITOR / INDEX_DIAGNOSTICS_ENABLED from env
|
|
719
|
+
index_diagnostics.registerQueryIndexMonitor(options.index_diagnostics);
|
|
1000
720
|
const server = restify.createServer();
|
|
1001
721
|
const model_dir = options.model_dir || modeldir.findModelDir(path.dirname(process.argv[1]));
|
|
1002
722
|
//Set up config with default
|
|
@@ -1047,6 +767,7 @@ const JXP = function (options) {
|
|
|
1047
767
|
default: 100,
|
|
1048
768
|
require_limit_always: true,
|
|
1049
769
|
skip_count_unless_paginated: true,
|
|
770
|
+
max_response_size: "10mb",
|
|
1050
771
|
},
|
|
1051
772
|
security: {
|
|
1052
773
|
strip_fields: ["password"],
|
|
@@ -1079,21 +800,14 @@ const JXP = function (options) {
|
|
|
1079
800
|
global.apikey = config.apikey;
|
|
1080
801
|
global.server = config.server;
|
|
1081
802
|
global.model_dir = config.model_dir;
|
|
1082
|
-
// Pre-load models
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
return fname.endsWith("_model.js");
|
|
1086
|
-
});
|
|
1087
|
-
modelnames.forEach(function (fname) {
|
|
1088
|
-
var modelname = fname.replace("_model.js", "");
|
|
1089
|
-
const mod = require(path.join(config.model_dir, fname));
|
|
1090
|
-
models[modelname] = mod.default || mod;
|
|
1091
|
-
});
|
|
803
|
+
// Pre-load app models, then jxp built-ins for any missing slugs
|
|
804
|
+
Object.assign(models, builtin_models.loadAllModels(config.model_dir));
|
|
805
|
+
index_diagnostics.wireQueryLogPersistence(models);
|
|
1092
806
|
link_index.buildLinkIndex(models);
|
|
1093
|
-
setup.init(config);
|
|
1094
|
-
security.init(config);
|
|
1095
|
-
login.init(config);
|
|
1096
|
-
groups.init(config);
|
|
807
|
+
setup.init(models, config);
|
|
808
|
+
security.init(models, config);
|
|
809
|
+
login.init(models, config);
|
|
810
|
+
groups.init(models, config);
|
|
1097
811
|
ws.init({ models });
|
|
1098
812
|
cache.init(config);
|
|
1099
813
|
const docs = new Docs({ config, models });
|
|
@@ -1200,6 +914,9 @@ const JXP = function (options) {
|
|
|
1200
914
|
server.post("/docs/logout", docsAuth.logout);
|
|
1201
915
|
server.get("/docs/assets/:file", docs.serveAsset.bind(docs));
|
|
1202
916
|
server.get("/docs/api", docsAuth.docsAccessMiddleware, docs.apiIndex.bind(docs));
|
|
917
|
+
server.get("/docs/mcp", docsAuth.docsAccessMiddleware, docs.mcpPlayground.bind(docs));
|
|
918
|
+
server.post("/docs/mcp/call", docsAuth.docsAccessMiddleware, docs.mcpCall.bind(docs));
|
|
919
|
+
server.get("/docs/diagnostics", docsAuth.docsAccessMiddleware, docs.diagnostics.bind(docs));
|
|
1203
920
|
server.get("/docs/md/:md_doc", docs.md.bind(docs));
|
|
1204
921
|
server.get("/docs/model/:modelname", docsAuth.docsAccessMiddleware, docs.model.bind(docs));
|
|
1205
922
|
server.get("/", docs.frontPage.bind(docs));
|
|
@@ -1216,6 +933,55 @@ const JXP = function (options) {
|
|
|
1216
933
|
/* Cache */
|
|
1217
934
|
server.get("/cache/stats", security.login, security.admin_only, cache.stats, outputJSON);
|
|
1218
935
|
server.get("/cache/clear", security.login, security.admin_only, cache.clearAll, outputJSON);
|
|
936
|
+
/* Index diagnostics (admin) */
|
|
937
|
+
const actionDiagnosticsIndexes = async (req, res) => {
|
|
938
|
+
const refresh = req.query?.refresh === "true" || req.query?.refresh === "1";
|
|
939
|
+
const includeUnused = req.query?.unused === "true" || req.query?.unused === "1";
|
|
940
|
+
res.result = await index_diagnostics.getCachedIndexAudit(models, {
|
|
941
|
+
refresh: !!refresh,
|
|
942
|
+
includeUnused: !!includeUnused,
|
|
943
|
+
});
|
|
944
|
+
};
|
|
945
|
+
const actionDiagnosticsQueries = async (req, res) => {
|
|
946
|
+
const limit = parseInt(String(req.query?.limit ?? "50"), 10);
|
|
947
|
+
const skip = parseInt(String(req.query?.skip ?? "0"), 10);
|
|
948
|
+
const severity = typeof req.query?.severity === "string" ? req.query.severity : undefined;
|
|
949
|
+
const modelRaw = typeof req.query?.model === "string"
|
|
950
|
+
? req.query.model
|
|
951
|
+
: typeof req.query?.model_name === "string"
|
|
952
|
+
? req.query.model_name
|
|
953
|
+
: undefined;
|
|
954
|
+
const model_name = modelRaw
|
|
955
|
+
? builtin_models.resolveModelFilterName(models, modelRaw)
|
|
956
|
+
: undefined;
|
|
957
|
+
res.result = await index_diagnostics.listQueryLogs({
|
|
958
|
+
limit: Number.isFinite(limit) ? limit : 50,
|
|
959
|
+
skip: Number.isFinite(skip) ? skip : 0,
|
|
960
|
+
severity,
|
|
961
|
+
model_name,
|
|
962
|
+
});
|
|
963
|
+
};
|
|
964
|
+
const actionDiagnosticsIndexesSync = async (req, res) => {
|
|
965
|
+
const confirm = typeof req.body?.confirm === "string"
|
|
966
|
+
? req.body.confirm
|
|
967
|
+
: typeof req.query?.confirm === "string"
|
|
968
|
+
? req.query.confirm
|
|
969
|
+
: undefined;
|
|
970
|
+
const who = res.user?.email || res.user?._id?.toString?.() || "unknown";
|
|
971
|
+
console.log(`[index-diagnostics] sync requested by ${who} confirm=${confirm === index_diagnostics.SYNC_CONFIRM_PHRASE ? "ok" : "invalid"}`);
|
|
972
|
+
try {
|
|
973
|
+
res.result = await index_diagnostics.syncAllModels(models, { confirm });
|
|
974
|
+
}
|
|
975
|
+
catch (err) {
|
|
976
|
+
logRequestError(req, res, err, "diagnostics/indexes/sync");
|
|
977
|
+
throw err;
|
|
978
|
+
}
|
|
979
|
+
};
|
|
980
|
+
server.get("/diagnostics/indexes", security.login, security.admin_only, actionDiagnosticsIndexes, outputJSON);
|
|
981
|
+
server.get("/diagnostics/queries", security.login, security.admin_only, actionDiagnosticsQueries, outputJSON);
|
|
982
|
+
server.post("/diagnostics/indexes/sync", security.login, security.admin_only, actionDiagnosticsIndexesSync, outputJSON);
|
|
983
|
+
const { mountMcp } = require("./mcp/mount");
|
|
984
|
+
mountMcp(server, { config, models });
|
|
1219
985
|
return server;
|
|
1220
986
|
};
|
|
1221
987
|
module.exports = JXP;
|