jxp 4.0.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.env.sample +12 -0
  2. package/dist/libs/bulkwrite_guard.d.ts +1 -0
  3. package/dist/libs/bulkwrite_guard.d.ts.map +1 -1
  4. package/dist/libs/bulkwrite_guard.js +43 -0
  5. package/dist/libs/bulkwrite_guard.js.map +1 -1
  6. package/dist/libs/docs-auth.d.ts +25 -0
  7. package/dist/libs/docs-auth.d.ts.map +1 -0
  8. package/dist/libs/docs-auth.js +205 -0
  9. package/dist/libs/docs-auth.js.map +1 -0
  10. package/dist/libs/docs.js +26 -5
  11. package/dist/libs/docs.js.map +1 -1
  12. package/dist/libs/jxp.d.ts.map +1 -1
  13. package/dist/libs/jxp.js +118 -53
  14. package/dist/libs/jxp.js.map +1 -1
  15. package/dist/libs/load-config.d.ts.map +1 -1
  16. package/dist/libs/load-config.js +11 -0
  17. package/dist/libs/load-config.js.map +1 -1
  18. package/dist/libs/login_rate_limit.d.ts +16 -0
  19. package/dist/libs/login_rate_limit.d.ts.map +1 -0
  20. package/dist/libs/login_rate_limit.js +49 -0
  21. package/dist/libs/login_rate_limit.js.map +1 -0
  22. package/dist/libs/query_limits.js +9 -3
  23. package/dist/libs/query_limits.js.map +1 -1
  24. package/dist/libs/request_log.d.ts +44 -0
  25. package/dist/libs/request_log.d.ts.map +1 -0
  26. package/dist/libs/request_log.js +229 -0
  27. package/dist/libs/request_log.js.map +1 -0
  28. package/dist/libs/security.js +18 -9
  29. package/dist/libs/security.js.map +1 -1
  30. package/dist/models/test_model.js +1 -1
  31. package/dist/models/test_model.js.map +1 -1
  32. package/dist/types/jxp-config.d.ts +17 -0
  33. package/dist/types/jxp-config.d.ts.map +1 -1
  34. package/docs/bulk_writes.md +9 -2
  35. package/docs/changelog.md +76 -1
  36. package/docs/configuration.md +30 -0
  37. package/package.json +2 -2
  38. package/templates/assets/api-console.js +19 -1
  39. package/templates/assets/docs-login.js +66 -0
  40. package/templates/assets/docs.css +17 -0
  41. package/templates/index.pug +9 -4
  42. package/templates/layout.pug +8 -4
  43. package/templates/login.pug +39 -0
  44. package/templates/navbar.pug +18 -7
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clientIp = clientIp;
4
+ exports.authHint = authHint;
5
+ exports.requestClientInfo = requestClientInfo;
6
+ exports.requestQueryHints = requestQueryHints;
7
+ exports.requestSummary = requestSummary;
8
+ exports.logRequestError = logRequestError;
9
+ exports.logAndThrow = logAndThrow;
10
+ const errors = require("restify-errors");
11
+ function filterLogUser(user) {
12
+ if (!user)
13
+ return "anonymous";
14
+ if (user.email)
15
+ return user.email;
16
+ if (user._id)
17
+ return user._id.toString();
18
+ return "unknown";
19
+ }
20
+ function headerValue(headers, name) {
21
+ if (!headers)
22
+ return undefined;
23
+ const v = headers[name] ?? headers[name.toLowerCase()];
24
+ if (v === undefined || v === null)
25
+ return undefined;
26
+ return Array.isArray(v) ? v[0] : String(v);
27
+ }
28
+ /** Client IP; prefers Restify `req.ip`, then first X-Forwarded-For hop, then socket address. */
29
+ function clientIp(req) {
30
+ if (req.ip)
31
+ return String(req.ip);
32
+ const xff = headerValue(req.headers, "x-forwarded-for");
33
+ if (xff) {
34
+ const first = xff.split(",")[0]?.trim();
35
+ if (first)
36
+ return first;
37
+ }
38
+ const xri = headerValue(req.headers, "x-real-ip");
39
+ if (xri)
40
+ return xri.trim();
41
+ return req.socket?.remoteAddress || req.connection?.remoteAddress || undefined;
42
+ }
43
+ function truncate(value, max = 120) {
44
+ const oneLine = value.replace(/[\r\n]+/g, " ").trim();
45
+ if (oneLine.length <= max)
46
+ return oneLine;
47
+ return `${oneLine.slice(0, max - 1)}…`;
48
+ }
49
+ /** How the request authenticated (no secrets logged). */
50
+ function authHint(req) {
51
+ if (req.query?.apikey)
52
+ return "apikey-query";
53
+ const apiHeader = headerValue(req.headers, "x-api-key") || headerValue(req.headers, "X-API-Key");
54
+ if (apiHeader)
55
+ return "apikey-header";
56
+ const auth = headerValue(req.headers, "authorization");
57
+ if (auth) {
58
+ const lower = auth.trim().toLowerCase();
59
+ if (lower.startsWith("bearer "))
60
+ return "bearer";
61
+ if (lower.startsWith("basic "))
62
+ return "basic";
63
+ }
64
+ return undefined;
65
+ }
66
+ function requestClientInfo(req) {
67
+ const parts = [];
68
+ const ip = clientIp(req);
69
+ if (ip)
70
+ parts.push(`ip=${ip}`);
71
+ const ua = headerValue(req.headers, "user-agent");
72
+ if (ua)
73
+ parts.push(`ua=${truncate(ua, 80)}`);
74
+ const auth = authHint(req);
75
+ if (auth)
76
+ parts.push(`auth=${auth}`);
77
+ return parts.length ? parts.join(" ") : undefined;
78
+ }
79
+ function summarizeBulkBody(body) {
80
+ if (!Array.isArray(body))
81
+ return undefined;
82
+ const counts = {};
83
+ for (const op of body) {
84
+ if (!op || typeof op !== "object") {
85
+ counts.invalid = (counts.invalid || 0) + 1;
86
+ continue;
87
+ }
88
+ const keys = Object.keys(op);
89
+ const name = keys.length === 1 ? keys[0] : "?";
90
+ counts[name] = (counts[name] || 0) + 1;
91
+ }
92
+ const parts = Object.entries(counts).map(([k, n]) => `${k}:${n}`);
93
+ return `bulk[${body.length} ${parts.join(" ")}]`;
94
+ }
95
+ function summarizeAggregatePipeline(body) {
96
+ let pipeline = body;
97
+ if (body && typeof body === "object" && !Array.isArray(body)) {
98
+ const q = body.query;
99
+ if (Array.isArray(q))
100
+ pipeline = q;
101
+ }
102
+ if (!Array.isArray(pipeline))
103
+ return undefined;
104
+ const counts = {};
105
+ for (const stage of pipeline) {
106
+ if (!stage || typeof stage !== "object")
107
+ continue;
108
+ for (const key of Object.keys(stage)) {
109
+ if (key.startsWith("$")) {
110
+ counts[key] = (counts[key] || 0) + 1;
111
+ }
112
+ }
113
+ }
114
+ const parts = Object.entries(counts).map(([k, n]) => `${k}:${n}`);
115
+ return `aggregate[${pipeline.length} ${parts.join(" ")}]`;
116
+ }
117
+ function summarizePostQueryBody(body) {
118
+ if (!body || typeof body !== "object")
119
+ return undefined;
120
+ const q = body.query;
121
+ if (!q || typeof q !== "object" || Array.isArray(q))
122
+ return "postQuery=invalid";
123
+ return `postQuery keys=${Object.keys(q).length}`;
124
+ }
125
+ function requestQueryHints(req) {
126
+ const q = req.query;
127
+ if (!q)
128
+ return undefined;
129
+ const parts = [];
130
+ if (q.limit !== undefined && q.limit !== "")
131
+ parts.push(`?limit=${q.limit}`);
132
+ if (q.page !== undefined && q.page !== "")
133
+ parts.push(`?page=${q.page}`);
134
+ if (q.count === true || q.count === "true")
135
+ parts.push("?count=true");
136
+ if (q.search)
137
+ parts.push("?search");
138
+ if (q.filter !== undefined && q.filter !== null && q.filter !== "") {
139
+ if (typeof q.filter === "object" && !Array.isArray(q.filter)) {
140
+ parts.push(`filterKeys=${Object.keys(q.filter).length}`);
141
+ }
142
+ else {
143
+ parts.push("?filter");
144
+ }
145
+ }
146
+ return parts.length ? parts.join(" ") : undefined;
147
+ }
148
+ function summarizeRequestDetail(req) {
149
+ const path = req.url || req.path || "";
150
+ const routePath = req.route?.path || "";
151
+ const route = path || routePath;
152
+ if (route.includes("/bulkwrite"))
153
+ return summarizeBulkBody(req.body);
154
+ if (route.includes("/aggregate"))
155
+ return summarizeAggregatePipeline(req.body);
156
+ if (route.includes("/query"))
157
+ return summarizePostQueryBody(req.body);
158
+ if (route.includes("/call/") && req.params?.method_name) {
159
+ return `call=${req.params.method_name}`;
160
+ }
161
+ if (req.method === "GET" &&
162
+ (route.includes("/api/") || route.includes("/csv/") || route.includes("/count/"))) {
163
+ return requestQueryHints(req);
164
+ }
165
+ if (req.method === "POST" && route.includes("/query")) {
166
+ return summarizePostQueryBody(req.body);
167
+ }
168
+ return requestQueryHints(req);
169
+ }
170
+ function requestSummary(req, res) {
171
+ const method = req.method || "?";
172
+ const path = req.url || req.path || "?";
173
+ const bits = [`${method} ${path}`];
174
+ const model = req.modelname || req.params?.modelname;
175
+ if (model)
176
+ bits.push(`model=${model}`);
177
+ if (req.params?.item_id)
178
+ bits.push(`id=${req.params.item_id}`);
179
+ bits.push(`user=${filterLogUser(res?.user)}`);
180
+ if (res?.user?.admin)
181
+ bits.push("admin");
182
+ return bits.join(" ");
183
+ }
184
+ function logRequestError(req, res, err, context, extra) {
185
+ const detail = extra || summarizeRequestDetail(req);
186
+ const errMsg = err instanceof Error
187
+ ? err.message
188
+ : typeof err === "string"
189
+ ? err
190
+ : String(err);
191
+ const headline = [
192
+ new Date().toISOString(),
193
+ requestClientInfo(req),
194
+ requestSummary(req, res),
195
+ context,
196
+ detail,
197
+ errMsg,
198
+ ]
199
+ .filter(Boolean)
200
+ .join(" | ");
201
+ console.error(headline);
202
+ if (err instanceof Error && err.stack) {
203
+ const skipStack = err instanceof errors.ForbiddenError ||
204
+ err instanceof errors.NotFoundError ||
205
+ err instanceof errors.BadRequestError;
206
+ if (!skipStack) {
207
+ console.error(err.stack);
208
+ }
209
+ }
210
+ }
211
+ function logAndThrow(req, res, err, context, extra) {
212
+ logRequestError(req, res, err, context, extra);
213
+ throw err;
214
+ }
215
+ module.exports = {
216
+ filterLogUser,
217
+ clientIp,
218
+ authHint,
219
+ requestClientInfo,
220
+ requestSummary,
221
+ requestQueryHints,
222
+ summarizeBulkBody,
223
+ summarizeAggregatePipeline,
224
+ summarizePostQueryBody,
225
+ summarizeRequestDetail,
226
+ logRequestError,
227
+ logAndThrow,
228
+ };
229
+ //# sourceMappingURL=request_log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request_log.js","sourceRoot":"","sources":["../../src/libs/request_log.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,8 @@ const loadModel = (modelDir, file) => {
14
14
  const mod = require(path.join(modelDir, file));
15
15
  return mod.default || mod;
16
16
  };
17
+ const bulkwrite_guard = require("./bulkwrite_guard");
18
+ const { logRequestError } = require("./request_log");
17
19
  const init = function (config) {
18
20
  APIKey = loadModel(config.model_dir, "apikey_model");
19
21
  Groups = loadModel(config.model_dir, "usergroups_model.js");
@@ -319,22 +321,25 @@ const auth = async (req, res) => {
319
321
  return await check_perms(res.user, res.groups, req.Model, method, req.params.item_id);
320
322
  }
321
323
  catch (err) {
322
- console.error(err);
324
+ logRequestError(req, res, err, "auth");
323
325
  if (err.code)
324
326
  throw err;
325
327
  throw new errors.ForbiddenError(err.toString());
326
328
  }
327
329
  };
328
- // Bulk auth requires all CRUD permissions
330
+ // Bulk auth: admins bypass; others need perms matching each operation (e.g. updateOne → create + update).
329
331
  const bulkAuth = async (req, res) => {
332
+ if (res.user?.admin) {
333
+ return;
334
+ }
330
335
  try {
331
- await check_perms(res.user, res.groups, req.Model, "c");
332
- await check_perms(res.user, res.groups, req.Model, "r");
333
- await check_perms(res.user, res.groups, req.Model, "u");
334
- await check_perms(res.user, res.groups, req.Model, "d");
336
+ const required = bulkwrite_guard.requiredPermsForBulkOps(req.body);
337
+ for (const method of required) {
338
+ await check_perms(res.user, res.groups, req.Model, method);
339
+ }
335
340
  }
336
341
  catch (err) {
337
- console.error(err);
342
+ logRequestError(req, res, err, "bulkAuth");
338
343
  if (err.code)
339
344
  throw err;
340
345
  throw new errors.ForbiddenError(err.toString());
@@ -392,10 +397,14 @@ const check_perms = async (user, groups, model, method, item_id) => {
392
397
  };
393
398
  const admin_only = (req, res, next) => {
394
399
  if (!res.user) {
395
- return next(new errors.ForbiddenError("User not logged in"));
400
+ const err = new errors.ForbiddenError("User not logged in");
401
+ logRequestError(req, res, err, "admin_only");
402
+ return next(err);
396
403
  }
397
404
  if (!res.user.admin) {
398
- return next(new errors.ForbiddenError("User not admin"));
405
+ const err = new errors.ForbiddenError("User not admin");
406
+ logRequestError(req, res, err, "admin_only");
407
+ return next(err);
399
408
  }
400
409
  next();
401
410
  };
@@ -1 +1 @@
1
- {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/libs/security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/libs/security.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACzC,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,IAAI,MAAM,GAAG,IAAI,CAAC;AAClB,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB,IAAI,YAAY,GAAG,IAAI,CAAC;AACxB,IAAI,QAAQ,GAAG,EAAE,CAAC;AAElB,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAE,EAAE;IACpD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACrD,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAErD,MAAM,IAAI,GAAG,UAAU,MAAM;IAC5B,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAC5D,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACjD,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACnD,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,GAAG;QAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,UAAU,GAAG;IAClC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EAAC,EAAE,EAAC,EAAE;IAC5B,IAAI,CAAC;QACJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,kCAAkC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,sCAAsC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,GAAG,CAAC,EAAE;IAC5B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,KAAK,EAAC,CAAC,EAAC,EAAE;IAC5B,IAAI,CAAC;QACJ,IAAI,CAAC,CAAC;YAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxE,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,CAAC,qBAAqB,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,KAAK,EAAC,MAAM,EAAC,EAAE;IACjC,IAAI,CAAC;QACJ,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI;YAAE,MAAM,CAAC,0CAA0C,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACjC,IAAI,CAAC;QACJ,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACpD,IAAI,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,QAAQ,CAAC,EAAE;IAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACtC,IAAI,CAAC;QACJ,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpF,IAAI,QAAQ,EAAE,CAAC;YACd,MAAM,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,IAAI,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,CAAC,EAAE;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IACxB,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAuD,EAAE,EAAE;IAChF,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;AAChF,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACrC,IAAI,CAAC;QACJ,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACxB,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5C,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC1B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,KAAK,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACnC,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACxF,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACpC,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IACnC,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7C,OAAO;AACR,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IAC5C,IAAI,CAAC;QACJ,IAAI,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,YAAY,CAAC,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACrB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IAC1C,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5F,IAAI,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,KAAK,EAAC,OAAO,EAAC,EAAE;IAC1C,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3C,OAAO;AACR,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAClC,IAAI,CAAC;QACJ,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzG,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAChG,IAAI,CAAC,aAAa;gBAAE,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACtD,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;gBAAE,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAClC,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAC9D,GAAG,CAAC,IAAI,CAAC;gBACR,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,KAAK,CAAC,YAAY;gBACzB,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC;gBAClC,aAAa,EAAE,iBAAiB,CAAC,aAAa;gBAC9C,qBAAqB,EAAE,YAAY,CAAC,iBAAiB,CAAC;aACtD,CAAC,CAAC;QACJ,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,uBAAuB,CAAC,CAAA;QAChC,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAA;AAED,MAAM,KAAK,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAChC,IAAI,CAAC;QACJ,MAAM,mBAAmB,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;YAChB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC;YAChB,OAAO;QACR,CAAC;QACD,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAC,GAAG,EAAC,EAAE;IAChC,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAChH,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxG,aAAa;QACb,IAAI,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChH,aAAa;QACb,IAAI,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;SAAM,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;SAAM,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACjE,UAAU;QACV,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAC9E,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,wCAAwC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,IAAI,EAAE,CAAC;QACX,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO;QACN,KAAK,EAAE,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;QAClC,aAAa,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC;QACjD,MAAM,EAAE,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;QACjC,QAAQ,EAAE,IAAI,CAAC,KAAK;QACpB,IAAI;KACJ,CAAA;AAEF,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/B,qEAAqE;IACrE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QAChB,kCAAkC;QAClC,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,CAAC;QACJ,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YACnH,MAAM,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,CAAC;QACd,CAAC;aAAM,CAAC;YACP,sDAAsD;YACtD,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,0BAA0B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAC;AAEF,0GAA0G;AAC1G,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAG,EAAE;IACpC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACrB,OAAO;IACR,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,eAAe,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;IACF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAgB,EAAE,EAAE;IAC3E,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,yDAAyD;QACzD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC5E,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC,4DAA4D,CAAC,CAAC;QACpG,CAAC;QACD,uEAAuE;QACvE,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtC,OAAO;YACR,CAAC;QACF,CAAC;QACD,0EAA0E;QAC1E,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACvD,CAAC;QACD,6DAA6D;QAC7D,aAAa;QACb,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/D,uDAAuD;YACvD,OAAO;QACR,CAAC;QACD,YAAY;QACZ,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,sDAAsD;YACtD,OAAO;QACR,CAAC;QACD,aAAa;QACb,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnD,+DAA+D;gBAC/D,OAAO;YACR,CAAC;QACF,CAAC;QACD,aAAa;QACb,IAAI,CAAC,OAAO;YAAE,MAAM,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO;QACxI,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,IAAI,GAAG,CAAC,IAAI;YAAE,MAAM,GAAG,CAAC;QACxB,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjD,CAAC;AACF,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACrC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QAC5D,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QACxD,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,CAAC;AACR,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG;IAChB,IAAI;IACJ,aAAa;IACb,SAAS;IACT,WAAW;IACX,cAAc;IACd,aAAa;IACb,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,oBAAoB;IACpB,kBAAkB;IAClB,kBAAkB;IAClB,KAAK;IACL,OAAO;IACP,YAAY;IACZ,IAAI;IACJ,UAAU;IACV,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,QAAQ;CACR,CAAC;AAEF,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC"}
@@ -24,7 +24,7 @@ const TestSchema = new schema_1.default({
24
24
  perms: {
25
25
  admin: "crud",
26
26
  owner: "crud",
27
- user: "cr",
27
+ user: "cur",
28
28
  all: "r",
29
29
  },
30
30
  callable_statics: ["test"],
@@ -1 +1 @@
1
- {"version":3,"file":"test_model.js","sourceRoot":"","sources":["../../src/models/test_model.ts"],"names":[],"mappings":";;;;;AAAA,oEAAoC;AACpC,4DAAuC;AAqBvC,MAAM,UAAU,GAAG,IAAI,gBAAS,CAC/B;IACC,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE;IACzE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC,KAAK;IAClB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACjD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;IAC5E,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9F,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CACvC,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,GAAG;KACR;IACD,gBAAgB,EAAE,CAAC,MAAM,CAAC;IAC1B,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;CACnE,CACD,CAAC;AAEF,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG;IACzB,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAEF,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI;IACpC,IAAI,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,wBAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC;AACR,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,gBAAS,CAAC,KAAK,CAAQ,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,kBAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"test_model.js","sourceRoot":"","sources":["../../src/models/test_model.ts"],"names":[],"mappings":";;;;;AAAA,oEAAoC;AACpC,4DAAuC;AAqBvC,MAAM,UAAU,GAAG,IAAI,gBAAS,CAC/B;IACC,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE;IACzE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,IAAI,EAAE,MAAM,CAAC,KAAK;IAClB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IACjD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE;IAC5E,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9F,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;CACvC,EACD;IACC,KAAK,EAAE;QACN,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,GAAG;KACR;IACD,gBAAgB,EAAE,CAAC,MAAM,CAAC;IAC1B,gBAAgB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;CACnE,CACD,CAAC;AAEF,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG;IACzB,OAAO,eAAe,CAAC;AACxB,CAAC,CAAC;AAEF,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI;IACpC,IAAI,IAAI,CAAC,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,wBAAM,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC;AACR,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,gBAAS,CAAC,KAAK,CAAQ,MAAM,EAAE,UAAU,CAAC,CAAC;AACxD,kBAAe,IAAI,CAAC"}
@@ -23,6 +23,18 @@ export interface JXPSecurityConfig {
23
23
  export interface JXPCorsConfig {
24
24
  origins?: string[];
25
25
  }
26
+ export interface LoginRateLimitConfig {
27
+ enabled?: boolean;
28
+ burst?: number;
29
+ per_minute?: number;
30
+ xff?: boolean;
31
+ }
32
+ export interface JXPDocsConfig {
33
+ /** protected (default) | disabled | public */
34
+ access?: "protected" | "disabled" | "public";
35
+ /** System user email for docs login (protected mode) */
36
+ user_email?: string;
37
+ }
26
38
  export interface JXPCacheConfig {
27
39
  enabled?: boolean;
28
40
  debug?: boolean;
@@ -63,6 +75,8 @@ export interface JXPConfig {
63
75
  smtp_password?: string;
64
76
  smtp_from?: string;
65
77
  cache?: JXPCacheConfig;
78
+ docs?: JXPDocsConfig;
79
+ login_rate_limit?: LoginRateLimitConfig;
66
80
  cache_timeout?: string;
67
81
  query_limits?: JXPQueryLimits;
68
82
  security?: JXPSecurityConfig;
@@ -124,6 +138,9 @@ export interface JXPResponse {
124
138
  result?: unknown;
125
139
  jxp_cache_key?: string;
126
140
  header(name: string, value?: string): unknown;
141
+ status(code: number): JXPResponse;
142
+ redirect(code: number, url: string, next?: () => void): void;
143
+ redirect(url: string, next?: () => void): void;
127
144
  send(body?: unknown): unknown;
128
145
  json(body?: unknown): unknown;
129
146
  writeHead(code: number, headers?: Record<string, unknown>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"jxp-config.d.ts","sourceRoot":"","sources":["../../src/types/jxp-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jxp-config.d.ts","sourceRoot":"","sources":["../../src/types/jxp-config.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  # Bulk Writes
2
2
 
3
- You can perform bulk writes through the `/bulkwrite/<modelname>` endpoint. **Disabled by default** unless the model opts in with `advanced_queries: { bulkwrite: true }`. Only allowlisted operations (`insertOne`, `updateOne`, `replaceOne`, `deleteOne`) are accepted; `updateMany` / `deleteMany` require admin.
3
+ You can perform bulk writes through the `/bulkwrite/<modelname>` endpoint. **Disabled by default** for non-admin users unless the model opts in with `advanced_queries: { bulkwrite: true }`. **Admin users** may use bulk write on any model. Only allowlisted operations (`insertOne`, `updateOne`, `replaceOne`, `deleteOne`) are accepted; `updateMany` / `deleteMany` require admin.
4
4
 
5
- Authorisation works a little differently — the user must have **create, read, update, and delete** permissions on the model.
5
+ Authorisation is checked **per operation** (admins bypass):
6
+
7
+ | Operation | Permissions required |
8
+ |-----------|---------------------|
9
+ | `insertOne` | create |
10
+ | `updateOne` / `replaceOne` | update; plus create when `upsert: true` |
11
+ | `deleteOne` | delete |
12
+ | `updateMany` / `deleteMany` | admin only (updateMany follows the same upsert rule for admins) |
6
13
 
7
14
  ***WARNING*** Be cautious when using bulk writes because you can destroy your data. Don't forget to back up!
8
15
 
package/docs/changelog.md CHANGED
@@ -2,6 +2,81 @@
2
2
 
3
3
  Notable changes to [JXP](https://github.com/WorkSpaceMan/jxp).
4
4
 
5
+ ## v4.1.1 — 2026-05-25
6
+
7
+ Bulk write authorization fixes (admins no longer need per-model opt-in) and structured request error logging for security guards (query limits, filters, aggregate, bulkwrite, auth).
8
+
9
+ ### Bulk write
10
+
11
+ #### Changed
12
+
13
+ - **POST `/bulkwrite`** — **Admin** users may bulk write any model without `advanced_queries.bulkwrite: true`. Non-admins still require model opt-in on the schema.
14
+ - **`bulkAuth`** — Replaces the previous “full CRUD required” rule with **per-operation** permission checks (admins bypass entirely).
15
+ - **Upsert-aware `updateOne` / `replaceOne`** — requires **update** only; **create** is also required when the operation includes `upsert: true` (same as a single-record upsert). `insertOne` → create; `deleteOne` → delete; `updateMany` / `deleteMany` remain admin-only (validated by `bulkwrite_guard`).
16
+ - **Middleware order** — `middlewareBulkWriteAllowed` runs before `bulkAuth` so non-admins without opt-in receive “disabled for model” before a permission mismatch.
17
+
18
+ #### Added
19
+
20
+ - **`bulkwrite_guard.requiredPermsForBulkOps()`** — derives required permission letters from each bulk op payload (including per-entry upsert flags).
21
+
22
+ ### Request error logging (`request_log`)
23
+
24
+ Structured one-line `console.error` entries for guard and handler failures, so production issues are traceable without reading stack traces.
25
+
26
+ #### Log line format
27
+
28
+ Each line includes (when available):
29
+
30
+ - **Client** — `ip=` (`req.ip`, first `X-Forwarded-For` hop, `X-Real-IP`, or socket address), truncated `ua=` (`User-Agent`), `auth=` (`apikey-query`, `apikey-header`, `bearer`, `basic`; credentials are never logged)
31
+ - **Request** — HTTP method and path, `model=`, `id=`, resolved `user=` (email or id), `admin` flag
32
+ - **Context** — guard or handler label (e.g. `query_limit`, `filter`, `query_sanitize`, `aggregate_guard`, `bulkwrite disabled`, `bulkAuth`, `auth`, `admin_only`)
33
+ - **Detail** — operation-specific summary: `?limit` / `?page` / `filterKeys=N`, `bulk[N updateOne:2 …]`, `aggregate[N $match:1 …]`, `postQuery keys=N`, `call=methodName`, collection size hints for query limits (`~N docs threshold=…`)
34
+ - **Message** — the HTTP error message
35
+
36
+ Unexpected errors (non-4xx) still log a stack trace; expected `BadRequest` / `Forbidden` / `NotFound` do not.
37
+
38
+ #### Wired into
39
+
40
+ - **`query_limits.enforceListLimit`** — missing limit on large collections, limit over max
41
+ - **Filter parsing and `query_sanitize`** — denied operators, depth, regex
42
+ - **POST `/query` and `/aggregate`** — model opt-in middleware, pipeline stage guard, invalid body
43
+ - **POST `/bulkwrite`** — opt-in, `bulkAuth`, validation, Mongo errors
44
+ - **`/call`** — callable static guard
45
+ - **`security.auth`**, **`security.bulkAuth`**, **`security.admin_only`**
46
+ - **`middlewareModel`** (unknown model), **`password_override`**
47
+ - Global **`restError`** handler (fallback for other HTTP errors)
48
+
49
+ #### Added
50
+
51
+ - **`src/libs/request_log.ts`** — `clientIp`, `authHint`, `requestClientInfo`, `logRequestError`, `logAndThrow`, and request detail helpers.
52
+ - **`middlewareAdvancedQueryAllowed`** — shared opt-in check for POST `/query` and `/aggregate` with logging.
53
+ - **Tests** — `test/bulkwrite_guard.test.js`, `test/request_log.test.js`; extended `/POST bulkwrite` and guard coverage in `test/test.js`.
54
+
55
+ ### Documentation
56
+
57
+ - [bulk_writes.md](bulk_writes.md) — admin bypass, per-op permissions, and upsert behaviour.
58
+
59
+ ## v4.1.0 — 2026-05-25
60
+
61
+ API docs browser security: gated model explorer, real API login, and brute-force limits.
62
+
63
+ ### Added
64
+
65
+ - **Docs access control** (`DOCS_ACCESS`) — `protected` (default), `disabled`, or `public`. Home (`/`) and usage guides (`/docs/md/*`) stay open; model explorer (`/docs/api`, `/docs/model/*`) requires sign-in.
66
+ - **Docs sign-in flow** — `/docs/login` calls `POST /login`, then `POST /docs/session` to store an HttpOnly cookie; API key auto-fills for “Try it” panels (`GET /docs/session`).
67
+ - **Login rate limiting** — per-IP token bucket on `POST /login` and `POST /docs/session` (default: burst 8, 12/min). Env: `LOGIN_RATE_LIMIT_*`; HTTP **429** when exceeded.
68
+ - **`src/libs/docs-auth.ts`**, **`src/libs/login_rate_limit.ts`** — middleware, session cookie, and throttle helpers.
69
+ - **Tests** — `test/docs_auth.test.js`, `test/login_rate_limit.test.js`.
70
+
71
+ ### Changed
72
+
73
+ - **Docs browser default** — model explorer is no longer world-readable; guides and landing page remain public in `protected` mode.
74
+ - **Configuration** — [configuration.md](configuration.md) documents `DOCS_*` and `LOGIN_RATE_LIMIT_*` variables.
75
+
76
+ ### Fixed
77
+
78
+ - **Restify async routes** — docs login/session handlers use `(req, res)` only; redirects use `sendRedirect()` where `res.redirect()` requires `next`.
79
+
5
80
  ## v4.0.0 — 2026-05-19
6
81
 
7
82
  Major release: complete TypeScript rewrite and configuration overhaul.
@@ -67,7 +142,7 @@ Consumer apps (e.g. RevEngine) should adjust clients and models as follows:
67
142
  | User PUT | Could set `admin` / `password` | Non-admins have privilege fields stripped |
68
143
  | `?filter[$where]=…` | Accepted | **400** — operator denied |
69
144
  | POST `/aggregate` | Any pipeline stage | Allowlisted stages; `$out` / `$merge` / `$function` need admin |
70
- | POST `/bulkwrite` | Open | **Disabled per model** unless `advanced_queries.bulkwrite: true`; op allowlist |
145
+ | POST `/bulkwrite` | Open | **Disabled per model** unless `advanced_queries.bulkwrite: true`; op allowlist; full CRUD required *(see v4.1.1)* |
71
146
  | List passwords | Could leak on `GET /api/user` | Stripped from list/query/aggregate responses |
72
147
 
73
148
  Example model opts:
@@ -42,6 +42,36 @@ MONGO_OPTIONS={"maxPoolSize":50}
42
42
  | `REFRESH_TOKEN_EXPIRY` | Refresh token TTL (seconds) | `2678400` |
43
43
  | `APIKEY` | Internal API key for schema helpers | — |
44
44
 
45
+ ## API docs browser
46
+
47
+ | `DOCS_ACCESS` | Behavior |
48
+ |---------------|----------|
49
+ | `protected` (default) | Home (`/`) and guides (`/docs/md/*`) are public; model explorer (`/docs/api`, `/docs/model/*`) requires sign-in |
50
+ | `disabled` | Model explorer routes return 404 |
51
+ | `public` | Model explorer open without sign-in |
52
+
53
+ Sign-in uses the normal `POST /login` endpoint (same credentials as the API). The docs UI then stores a session cookie via `POST /docs/session` and auto-fills the API key for “Try it” panels.
54
+
55
+ | Variable | Description |
56
+ |----------|-------------|
57
+ | `DOCS_USER_EMAIL` | Optional email pre-fill on the docs sign-in form |
58
+ | `DOCS_COOKIE_SECURE` | Set to `true` for `Secure` on the docs session cookie (HTTPS) |
59
+
60
+ You can also set `docs: { access, user_email }` on the object passed to `JXP()`.
61
+
62
+ ## Login rate limiting
63
+
64
+ Enabled by default on `POST /login` and `POST /docs/session` (docs sign-in after login):
65
+
66
+ | Variable | Default | Description |
67
+ |----------|---------|-------------|
68
+ | `LOGIN_RATE_LIMIT_ENABLED` | `true` | Set `false` to disable |
69
+ | `LOGIN_RATE_BURST` | `8` | Short burst of attempts per client |
70
+ | `LOGIN_RATE_PER_MINUTE` | `12` | Sustained attempts per minute per client |
71
+ | `LOGIN_RATE_LIMIT_XFF` | `false` | Use `X-Forwarded-For` when behind a reverse proxy |
72
+
73
+ Over-limit clients receive HTTP **429**. Response headers include rate-limit hints when supported by Restify.
74
+
45
75
  ## Cache
46
76
 
47
77
  ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "jxp",
3
3
  "description": "An opinionated RESTful API library based on Mongoose and Restify. Make an API by just writing Mongoose models.",
4
- "version": "4.0.0",
4
+ "version": "4.1.1",
5
5
  "private": false,
6
6
  "main": "dist/libs/jxp.js",
7
7
  "types": "dist/libs/jxp.d.ts",
@@ -47,7 +47,7 @@
47
47
  "prepare": "node -e \"require('fs').existsSync('src')&&require('child_process').execSync('npm run build',{stdio:'inherit'})\"",
48
48
  "start": "node dist/bin/server.js",
49
49
  "dev": "nodemon --watch src --ext ts --exec 'npm run build && node dist/bin/server.js'",
50
- "test": "npm run build && mocha --require test/env.js --timeout 1000 -b --exit",
50
+ "test": "npm run build && mocha --require test/env.js test/bulkwrite_guard.test.js test/request_log.test.js test/test.js --timeout 1000 -b --exit",
51
51
  "setup": "node dist/bin/setup.js"
52
52
  },
53
53
  "bin": {