jxp 3.0.0 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/.env.sample +43 -6
  2. package/README.md +27 -13
  3. package/dist/bin/init_db.d.ts +3 -0
  4. package/dist/bin/init_db.d.ts.map +1 -0
  5. package/dist/bin/init_db.js +48 -0
  6. package/dist/bin/init_db.js.map +1 -0
  7. package/dist/bin/server.d.ts +4 -0
  8. package/dist/bin/server.d.ts.map +1 -0
  9. package/dist/bin/server.js +132 -0
  10. package/dist/bin/server.js.map +1 -0
  11. package/dist/bin/setup.d.ts +3 -0
  12. package/dist/bin/setup.d.ts.map +1 -0
  13. package/dist/bin/setup.js +185 -0
  14. package/dist/bin/setup.js.map +1 -0
  15. package/dist/globals.d.ts +14 -0
  16. package/dist/globals.d.ts.map +1 -0
  17. package/dist/globals.js +3 -0
  18. package/dist/globals.js.map +1 -0
  19. package/dist/libs/aggregate_guard.d.ts +5 -0
  20. package/dist/libs/aggregate_guard.d.ts.map +1 -0
  21. package/dist/libs/aggregate_guard.js +58 -0
  22. package/dist/libs/aggregate_guard.js.map +1 -0
  23. package/dist/libs/bulkwrite_guard.d.ts +5 -0
  24. package/dist/libs/bulkwrite_guard.d.ts.map +1 -0
  25. package/dist/libs/bulkwrite_guard.js +44 -0
  26. package/dist/libs/bulkwrite_guard.js.map +1 -0
  27. package/dist/libs/cache.d.ts +2 -0
  28. package/dist/libs/cache.d.ts.map +1 -0
  29. package/dist/libs/cache.js +94 -0
  30. package/dist/libs/cache.js.map +1 -0
  31. package/dist/libs/call_guard.d.ts +3 -0
  32. package/dist/libs/call_guard.d.ts.map +1 -0
  33. package/dist/libs/call_guard.js +17 -0
  34. package/dist/libs/call_guard.js.map +1 -0
  35. package/dist/libs/connection_string.d.ts +3 -0
  36. package/dist/libs/connection_string.d.ts.map +1 -0
  37. package/dist/libs/connection_string.js +4 -0
  38. package/dist/libs/connection_string.js.map +1 -0
  39. package/dist/libs/datamunging.d.ts +2 -0
  40. package/dist/libs/datamunging.d.ts.map +1 -0
  41. package/dist/libs/datamunging.js +320 -0
  42. package/dist/libs/datamunging.js.map +1 -0
  43. package/dist/libs/docs-auth.d.ts +25 -0
  44. package/dist/libs/docs-auth.d.ts.map +1 -0
  45. package/dist/libs/docs-auth.js +205 -0
  46. package/dist/libs/docs-auth.js.map +1 -0
  47. package/dist/libs/docs.d.ts +2 -0
  48. package/dist/libs/docs.d.ts.map +1 -0
  49. package/dist/libs/docs.js +328 -0
  50. package/dist/libs/docs.js.map +1 -0
  51. package/dist/libs/groups.d.ts +2 -0
  52. package/dist/libs/groups.d.ts.map +1 -0
  53. package/dist/libs/groups.js +136 -0
  54. package/dist/libs/groups.js.map +1 -0
  55. package/dist/libs/jxp.d.ts +4 -0
  56. package/dist/libs/jxp.d.ts.map +1 -0
  57. package/dist/libs/jxp.js +1176 -0
  58. package/dist/libs/jxp.js.map +1 -0
  59. package/dist/libs/link_index.d.ts +14 -0
  60. package/dist/libs/link_index.d.ts.map +1 -0
  61. package/dist/libs/link_index.js +37 -0
  62. package/dist/libs/link_index.js.map +1 -0
  63. package/dist/libs/load-config.d.ts +16 -0
  64. package/dist/libs/load-config.d.ts.map +1 -0
  65. package/dist/libs/load-config.js +166 -0
  66. package/dist/libs/load-config.js.map +1 -0
  67. package/dist/libs/login.d.ts +2 -0
  68. package/dist/libs/login.d.ts.map +1 -0
  69. package/dist/libs/login.js +244 -0
  70. package/dist/libs/login.js.map +1 -0
  71. package/dist/libs/login_rate_limit.d.ts +16 -0
  72. package/dist/libs/login_rate_limit.d.ts.map +1 -0
  73. package/dist/libs/login_rate_limit.js +49 -0
  74. package/dist/libs/login_rate_limit.js.map +1 -0
  75. package/dist/libs/modeldir.d.ts +5 -0
  76. package/dist/libs/modeldir.d.ts.map +1 -0
  77. package/dist/libs/modeldir.js +15 -0
  78. package/dist/libs/modeldir.js.map +1 -0
  79. package/dist/libs/query_limits.d.ts +2 -0
  80. package/dist/libs/query_limits.d.ts.map +1 -0
  81. package/dist/libs/query_limits.js +84 -0
  82. package/dist/libs/query_limits.js.map +1 -0
  83. package/dist/libs/query_manipulation.d.ts +3 -0
  84. package/dist/libs/query_manipulation.d.ts.map +1 -0
  85. package/{libs → dist/libs}/query_manipulation.js +22 -21
  86. package/dist/libs/query_manipulation.js.map +1 -0
  87. package/dist/libs/query_sanitize.d.ts +5 -0
  88. package/dist/libs/query_sanitize.d.ts.map +1 -0
  89. package/dist/libs/query_sanitize.js +109 -0
  90. package/dist/libs/query_sanitize.js.map +1 -0
  91. package/dist/libs/response_sanitize.d.ts +7 -0
  92. package/dist/libs/response_sanitize.d.ts.map +1 -0
  93. package/dist/libs/response_sanitize.js +57 -0
  94. package/dist/libs/response_sanitize.js.map +1 -0
  95. package/dist/libs/safe_error.d.ts +3 -0
  96. package/dist/libs/safe_error.d.ts.map +1 -0
  97. package/dist/libs/safe_error.js +14 -0
  98. package/dist/libs/safe_error.js.map +1 -0
  99. package/dist/libs/schema.d.ts +14 -0
  100. package/dist/libs/schema.d.ts.map +1 -0
  101. package/dist/libs/schema.js +98 -0
  102. package/dist/libs/schema.js.map +1 -0
  103. package/dist/libs/schema_description.d.ts +3 -0
  104. package/dist/libs/schema_description.d.ts.map +1 -0
  105. package/{libs → dist/libs}/schema_description.js +12 -21
  106. package/dist/libs/schema_description.js.map +1 -0
  107. package/dist/libs/security.d.ts +2 -0
  108. package/dist/libs/security.d.ts.map +1 -0
  109. package/dist/libs/security.js +428 -0
  110. package/dist/libs/security.js.map +1 -0
  111. package/dist/libs/setup.d.ts +2 -0
  112. package/dist/libs/setup.d.ts.map +1 -0
  113. package/dist/libs/setup.js +87 -0
  114. package/dist/libs/setup.js.map +1 -0
  115. package/dist/libs/startup-deprecations.d.ts +2 -0
  116. package/dist/libs/startup-deprecations.d.ts.map +1 -0
  117. package/dist/libs/startup-deprecations.js +21 -0
  118. package/dist/libs/startup-deprecations.js.map +1 -0
  119. package/dist/libs/startup.d.ts +16 -0
  120. package/dist/libs/startup.d.ts.map +1 -0
  121. package/dist/libs/startup.js +63 -0
  122. package/dist/libs/startup.js.map +1 -0
  123. package/dist/libs/ws.d.ts +2 -0
  124. package/dist/libs/ws.d.ts.map +1 -0
  125. package/{libs → dist/libs}/ws.js +91 -73
  126. package/dist/libs/ws.js.map +1 -0
  127. package/dist/models/apikey_model.d.ts +10 -0
  128. package/dist/models/apikey_model.d.ts.map +1 -0
  129. package/dist/models/apikey_model.js +14 -0
  130. package/dist/models/apikey_model.js.map +1 -0
  131. package/dist/models/link_model.d.ts +9 -0
  132. package/dist/models/link_model.d.ts.map +1 -0
  133. package/dist/models/link_model.js +20 -0
  134. package/dist/models/link_model.js.map +1 -0
  135. package/dist/models/refreshtoken_model.d.ts +11 -0
  136. package/dist/models/refreshtoken_model.d.ts.map +1 -0
  137. package/dist/models/refreshtoken_model.js +22 -0
  138. package/dist/models/refreshtoken_model.js.map +1 -0
  139. package/dist/models/test_model.d.ts +24 -0
  140. package/dist/models/test_model.d.ts.map +1 -0
  141. package/dist/models/test_model.js +44 -0
  142. package/dist/models/test_model.js.map +1 -0
  143. package/dist/models/token_model.d.ts +14 -0
  144. package/dist/models/token_model.d.ts.map +1 -0
  145. package/dist/models/token_model.js +25 -0
  146. package/dist/models/token_model.js.map +1 -0
  147. package/dist/models/user_model.d.ts +15 -0
  148. package/dist/models/user_model.d.ts.map +1 -0
  149. package/dist/models/user_model.js +38 -0
  150. package/dist/models/user_model.js.map +1 -0
  151. package/dist/models/usergroups_model.d.ts +9 -0
  152. package/dist/models/usergroups_model.d.ts.map +1 -0
  153. package/dist/models/usergroups_model.js +18 -0
  154. package/dist/models/usergroups_model.js.map +1 -0
  155. package/dist/types/jxp-config.d.ts +151 -0
  156. package/dist/types/jxp-config.d.ts.map +1 -0
  157. package/dist/types/jxp-config.js +3 -0
  158. package/dist/types/jxp-config.js.map +1 -0
  159. package/dist/types/schema-fields.d.ts +43 -0
  160. package/dist/types/schema-fields.d.ts.map +1 -0
  161. package/dist/types/schema-fields.js +3 -0
  162. package/dist/types/schema-fields.js.map +1 -0
  163. package/docs/aggregations.md +40 -21
  164. package/docs/api.md +55 -15
  165. package/docs/authentication.md +60 -37
  166. package/docs/bulk_writes.md +11 -8
  167. package/docs/caching.md +28 -11
  168. package/docs/changelog.md +258 -31
  169. package/docs/configuration.md +126 -115
  170. package/docs/hooks.md +12 -8
  171. package/docs/index.md +17 -17
  172. package/docs/installation.md +23 -18
  173. package/docs/permissions.md +33 -19
  174. package/docs/queries.md +9 -5
  175. package/docs/schemas.md +21 -10
  176. package/docs/special.md +4 -4
  177. package/docs/typescript.md +86 -0
  178. package/docs/websocket.md +99 -1
  179. package/mkdocs.yml +1 -0
  180. package/package.json +121 -69
  181. package/templates/api.pug +32 -0
  182. package/templates/app-server.js +43 -0
  183. package/templates/app.env.sample +8 -0
  184. package/templates/assets/api-console.js +151 -0
  185. package/templates/assets/docs-login.js +66 -0
  186. package/templates/assets/docs.css +244 -0
  187. package/templates/index.pug +67 -2
  188. package/templates/layout.pug +21 -11
  189. package/templates/login.pug +39 -0
  190. package/templates/md.pug +1 -1
  191. package/templates/model.pug +117 -68
  192. package/templates/navbar.pug +25 -21
  193. package/templates/sidebar.pug +30 -0
  194. package/.env +0 -9
  195. package/.eslintrc.json +0 -20
  196. package/.jshintrc +0 -4
  197. package/.vscode/launch.json +0 -34
  198. package/.vscode/settings.json +0 -3
  199. package/Dockerfile +0 -7
  200. package/bin/init_db.js +0 -54
  201. package/bin/server.js +0 -131
  202. package/bin/setup.js +0 -190
  203. package/config_sample.json +0 -10
  204. package/docker-compose.yml +0 -32
  205. package/libs/cache.js +0 -92
  206. package/libs/connection_string.js +0 -24
  207. package/libs/datamunging.js +0 -335
  208. package/libs/docs.js +0 -162
  209. package/libs/groups.js +0 -133
  210. package/libs/jxp.js +0 -1208
  211. package/libs/login.js +0 -222
  212. package/libs/modeldir.js +0 -14
  213. package/libs/schema.js +0 -99
  214. package/libs/security.js +0 -410
  215. package/libs/setup.js +0 -90
  216. package/models/apikey_model.js +0 -10
  217. package/models/link_model.js +0 -17
  218. package/models/refreshtoken_model.js +0 -20
  219. package/models/test_model.js +0 -50
  220. package/models/token_model.js +0 -23
  221. package/models/user_model.js +0 -38
  222. package/models/usergroups_model.js +0 -15
  223. package/setup.sh +0 -3
  224. package/test/.eslintrc.json +0 -13
  225. package/test/auth.js +0 -190
  226. package/test/init.js +0 -92
  227. package/test/setup.test.js +0 -62
  228. package/test/test.js +0 -1527
  229. package/test/wstest.js.old +0 -124
@@ -0,0 +1,205 @@
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.DOCS_SESSION_COOKIE = void 0;
7
+ exports.parseDocsAccess = parseDocsAccess;
8
+ exports.getDocsAccess = getDocsAccess;
9
+ exports.isProtectedDocsPath = isProtectedDocsPath;
10
+ exports.isDocsLoginPath = isDocsLoginPath;
11
+ exports.verifyDocsSession = verifyDocsSession;
12
+ exports.init = init;
13
+ exports.docsAccessMiddleware = docsAccessMiddleware;
14
+ exports.loginPage = loginPage;
15
+ exports.establishSession = establishSession;
16
+ exports.getSession = getSession;
17
+ exports.logout = logout;
18
+ exports.logDocsAccessMode = logDocsAccessMode;
19
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
20
+ const restify_errors_1 = __importDefault(require("restify-errors"));
21
+ exports.DOCS_SESSION_COOKIE = "jxp_docs_session";
22
+ const SESSION_MAX_AGE_SEC = 86400;
23
+ let sharedSecret;
24
+ function parseDocsAccess(raw) {
25
+ const v = (raw ?? "protected").toLowerCase().trim();
26
+ if (v === "disabled" || v === "off" || v === "false" || v === "0")
27
+ return "disabled";
28
+ if (v === "public" || v === "open")
29
+ return "public";
30
+ return "protected";
31
+ }
32
+ function getDocsAccess(config) {
33
+ return config.docs?.access ?? "protected";
34
+ }
35
+ /** Routes that require a docs session (model browser + interactive API). */
36
+ function isProtectedDocsPath(pathname) {
37
+ return pathname === "/docs/api" || pathname.startsWith("/docs/model/");
38
+ }
39
+ function isDocsLoginPath(pathname) {
40
+ return pathname === "/docs/login";
41
+ }
42
+ function parseCookies(header) {
43
+ if (!header)
44
+ return {};
45
+ return header.split(";").reduce((acc, part) => {
46
+ const idx = part.indexOf("=");
47
+ if (idx === -1)
48
+ return acc;
49
+ const key = part.slice(0, idx).trim();
50
+ const val = part.slice(idx + 1).trim();
51
+ if (key)
52
+ acc[key] = decodeURIComponent(val);
53
+ return acc;
54
+ }, {});
55
+ }
56
+ function verifyDocsSession(req) {
57
+ if (!sharedSecret)
58
+ return null;
59
+ const cookies = parseCookies(req.headers.cookie);
60
+ const token = cookies[exports.DOCS_SESSION_COOKIE];
61
+ if (!token)
62
+ return null;
63
+ try {
64
+ return jsonwebtoken_1.default.verify(token, sharedSecret);
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ function signDocsSession(payload) {
71
+ if (!sharedSecret)
72
+ throw new Error("SHARED_SECRET is required for docs session");
73
+ return jsonwebtoken_1.default.sign(payload, sharedSecret, { expiresIn: SESSION_MAX_AGE_SEC });
74
+ }
75
+ function setSessionCookie(res, token) {
76
+ const secure = process.env.DOCS_COOKIE_SECURE === "1" || process.env.DOCS_COOKIE_SECURE === "true";
77
+ const parts = [
78
+ `${exports.DOCS_SESSION_COOKIE}=${encodeURIComponent(token)}`,
79
+ "Path=/",
80
+ "HttpOnly",
81
+ "SameSite=Lax",
82
+ `Max-Age=${SESSION_MAX_AGE_SEC}`,
83
+ ];
84
+ if (secure)
85
+ parts.push("Secure");
86
+ res.header("Set-Cookie", parts.join("; "));
87
+ }
88
+ function clearSessionCookie(res) {
89
+ res.header("Set-Cookie", `${exports.DOCS_SESSION_COOKIE}=; Path=/; HttpOnly; SameSite=Lax; Max-Age=0`);
90
+ }
91
+ /** Restify redirect() always requires next; use this in async route handlers. */
92
+ function sendRedirect(res, url) {
93
+ res.status(302);
94
+ res.header("Location", url);
95
+ res.end();
96
+ }
97
+ function init(config) {
98
+ sharedSecret = config.shared_secret;
99
+ }
100
+ function docsAccessMiddleware(req, res, next) {
101
+ const pathname = req.path();
102
+ if (!isProtectedDocsPath(pathname)) {
103
+ return next();
104
+ }
105
+ const access = getDocsAccess(req.config);
106
+ if (access === "public") {
107
+ return next();
108
+ }
109
+ if (access === "disabled") {
110
+ return next(new restify_errors_1.default.NotFoundError("Not found"));
111
+ }
112
+ const session = verifyDocsSession(req);
113
+ if (!session) {
114
+ if (req.method === "GET") {
115
+ const nextUrl = encodeURIComponent(pathname);
116
+ res.redirect(302, `/docs/login?next=${nextUrl}`, next);
117
+ return;
118
+ }
119
+ return next(new restify_errors_1.default.UnauthorizedError("Docs login required"));
120
+ }
121
+ req.docsSession = session;
122
+ return next();
123
+ }
124
+ async function loginPage(req, res, renderLogin) {
125
+ const access = getDocsAccess(req.config);
126
+ if (access === "disabled") {
127
+ throw new restify_errors_1.default.NotFoundError("Not found");
128
+ }
129
+ if (access === "public") {
130
+ sendRedirect(res, "/docs/api");
131
+ return;
132
+ }
133
+ const session = verifyDocsSession(req);
134
+ if (session) {
135
+ const nextPath = typeof req.query.next === "string" && req.query.next.startsWith("/")
136
+ ? req.query.next
137
+ : "/docs/api";
138
+ sendRedirect(res, nextPath);
139
+ return;
140
+ }
141
+ const nextDefault = typeof req.query.next === "string" && req.query.next.startsWith("/")
142
+ ? req.query.next
143
+ : "/docs/api";
144
+ renderLogin(res, {
145
+ docs_user_email: req.config.docs?.user_email ?? "",
146
+ docs_next: nextDefault,
147
+ });
148
+ }
149
+ /** Store docs session after a successful POST /login (client sends apikey from login response). */
150
+ async function establishSession(req, res) {
151
+ const access = getDocsAccess(req.config);
152
+ if (access !== "protected") {
153
+ throw new restify_errors_1.default.NotFoundError("Not found");
154
+ }
155
+ const apikey = String(req.body?.apikey ?? "").trim();
156
+ if (!apikey) {
157
+ throw new restify_errors_1.default.BadRequestError("apikey is required");
158
+ }
159
+ const security = require("./security");
160
+ let user;
161
+ try {
162
+ user = await security.apiKeyAuth(apikey);
163
+ }
164
+ catch {
165
+ throw new restify_errors_1.default.UnauthorizedError("Invalid apikey");
166
+ }
167
+ const token = signDocsSession({
168
+ user_id: String(user._id),
169
+ email: user.email,
170
+ apikey,
171
+ });
172
+ setSessionCookie(res, token);
173
+ res.send({ ok: true });
174
+ }
175
+ async function getSession(req, res) {
176
+ const access = getDocsAccess(req.config);
177
+ if (access !== "protected") {
178
+ res.send({ apikey: null });
179
+ return;
180
+ }
181
+ const docsSession = verifyDocsSession(req);
182
+ if (!docsSession) {
183
+ throw new restify_errors_1.default.UnauthorizedError("Not authenticated");
184
+ }
185
+ res.send({ apikey: docsSession.apikey });
186
+ }
187
+ async function logout(req, res) {
188
+ clearSessionCookie(res);
189
+ sendRedirect(res, "/");
190
+ }
191
+ function logDocsAccessMode(config) {
192
+ if (config.quiet_startup)
193
+ return;
194
+ const access = getDocsAccess(config);
195
+ if (access === "disabled") {
196
+ console.log("API docs browser: disabled (DOCS_ACCESS=disabled)");
197
+ }
198
+ else if (access === "public") {
199
+ console.log("API docs browser: public (no login for model explorer)");
200
+ }
201
+ else {
202
+ console.log("API docs browser: protected (login required for /docs/api and /docs/model/*)");
203
+ }
204
+ }
205
+ //# sourceMappingURL=docs-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-auth.js","sourceRoot":"","sources":["../../src/libs/docs-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../src/libs/docs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,328 @@
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 fs_1 = __importDefault(require("fs"));
7
+ const path_1 = __importDefault(require("path"));
8
+ const pug_1 = __importDefault(require("pug"));
9
+ const js_yaml_1 = __importDefault(require("js-yaml"));
10
+ const markdown_it_1 = __importDefault(require("markdown-it"));
11
+ const util_1 = __importDefault(require("util"));
12
+ const md = new markdown_it_1.default();
13
+ // Required for templates/index.pug (`include:markdown-it ../docs/index.md`)
14
+ pug_1.default.filters["markdown-it"] = (text) => md.render(text);
15
+ const getModelFileContents = require("./schema_description");
16
+ const restify_errors_1 = __importDefault(require("restify-errors"));
17
+ const docs_auth_1 = require("./docs-auth");
18
+ const readFile = util_1.default.promisify(fs_1.default.readFile);
19
+ const packageRoot = path_1.default.join(__dirname, "../..");
20
+ const assetsDir = path_1.default.join(packageRoot, "templates", "assets");
21
+ const ASSET_TYPES = {
22
+ css: "text/css; charset=utf-8",
23
+ js: "application/javascript; charset=utf-8",
24
+ };
25
+ const LANDING_FEATURES = [
26
+ { title: "Auth built in", description: "API keys, tokens, and password encryption without extra wiring." },
27
+ { title: "Smart population", description: "Load linked documents with URL-driven populate parameters." },
28
+ { title: "Powerful queries", description: "Search, sort, filter, field selection, and limits on GET requests." },
29
+ { title: "Schema-driven", description: "Add or change models by editing Mongoose schemas — the API updates automatically." },
30
+ { title: "Permissions", description: "Per-model CRUD rules by user group, owner, and admin." },
31
+ { title: "Hooks & logic", description: "pre/post hooks and custom handlers for business rules." },
32
+ ];
33
+ const buildEndpoints = (modelSlug) => {
34
+ const base = `/api/${modelSlug}`;
35
+ return [
36
+ {
37
+ method: "GET",
38
+ path: base,
39
+ description: "List documents in this collection.",
40
+ queryHint: "Supports filter, search, populate, fields, sort, limit, skip — see REST reference.",
41
+ },
42
+ {
43
+ method: "GET",
44
+ path: `${base}/{id}`,
45
+ description: "Get a single document by MongoDB _id.",
46
+ },
47
+ {
48
+ method: "POST",
49
+ path: base,
50
+ description: "Create a new document.",
51
+ hasBody: true,
52
+ },
53
+ {
54
+ method: "PUT",
55
+ path: `${base}/{id}`,
56
+ description: "Update a document (partial updates supported).",
57
+ hasBody: true,
58
+ },
59
+ {
60
+ method: "DELETE",
61
+ path: `${base}/{id}`,
62
+ description: "Delete a document (soft-delete when configured).",
63
+ },
64
+ ];
65
+ };
66
+ // Helper function to safely serialize schema fields
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ const serializeField = (field) => {
69
+ const safeField = {
70
+ path: field.path,
71
+ instance: field.instance,
72
+ options: { ...field.options },
73
+ validators: field.validators?.map(v => ({
74
+ type: v.type?.name,
75
+ message: v.message
76
+ })),
77
+ isRequired: field.isRequired
78
+ };
79
+ if (typeof field.defaultValue === 'function') {
80
+ safeField.defaultValue = '[Function]';
81
+ }
82
+ else if (field.defaultValue === undefined && field.options.default !== undefined) {
83
+ if (typeof field.options.default === 'function') {
84
+ safeField.defaultValue = '[Function]';
85
+ }
86
+ else {
87
+ safeField.defaultValue = field.options.default;
88
+ }
89
+ }
90
+ else {
91
+ safeField.defaultValue = field.defaultValue;
92
+ }
93
+ if (field.instance === 'Array' && field.caster) {
94
+ safeField.arrayType = field.caster.instance;
95
+ if (Array.isArray(safeField.defaultValue)) {
96
+ safeField.defaultValue = JSON.stringify(safeField.defaultValue);
97
+ }
98
+ }
99
+ if (field.instance === 'Embedded' || field.instance === 'DocumentArray') {
100
+ safeField.schema = Object.keys(field.schema.paths).map(p => ({
101
+ path: p,
102
+ type: field.schema.paths[p].instance
103
+ }));
104
+ }
105
+ return safeField;
106
+ };
107
+ class Docs {
108
+ config;
109
+ models;
110
+ mkdocs;
111
+ package;
112
+ constructor(opts) {
113
+ this.config = Object.assign({}, opts.config);
114
+ this.models = opts.models;
115
+ this.mkdocs = js_yaml_1.default.load(fs_1.default.readFileSync(path_1.default.join(packageRoot, "mkdocs.yml"), "utf8"));
116
+ this.package = require(path_1.default.join(process.cwd(), "package.json"));
117
+ }
118
+ getFirstGuideUrl() {
119
+ const nav = this.mkdocs.nav;
120
+ if (!nav || !nav.length)
121
+ return null;
122
+ const first = nav[0];
123
+ const file = Object.values(first)[0];
124
+ return `/docs/md/${file}`;
125
+ }
126
+ getBaseUrl(req) {
127
+ const host = req.headers?.host || "localhost";
128
+ const proto = req.connection?.encrypted ? "https" : "http";
129
+ return `${proto}://${host}`;
130
+ }
131
+ templateContext(req, extra = {}) {
132
+ const access = (0, docs_auth_1.getDocsAccess)(this.config);
133
+ const session = req ? (0, docs_auth_1.verifyDocsSession)(req) : undefined;
134
+ return {
135
+ docs_access: access,
136
+ docs_authenticated: access === "public" || Boolean(session),
137
+ docs_user_email: this.config.docs?.user_email ?? "",
138
+ docs_session_email: session?.email ?? "",
139
+ ...extra,
140
+ };
141
+ }
142
+ renderTemplate(res, template_file, data = {}, req) {
143
+ const template = pug_1.default.compileFile(path_1.default.join(packageRoot, `templates/${template_file}.pug`));
144
+ Object.assign(data, this.templateContext(req, data));
145
+ data.title = data.title || `${this.package.name} API Documentation`;
146
+ data.name = this.package.name;
147
+ data.version = this.package.version;
148
+ data.model_list = Object.keys(this.models).sort();
149
+ data.guide_nav = this.mkdocs.nav || [];
150
+ data.active_section = data.active_section || "";
151
+ data.active_guide = data.active_guide || "";
152
+ data.active_model = data.active_model || "";
153
+ data.first_guide_url = data.first_guide_url ?? this.getFirstGuideUrl();
154
+ const body = template(data);
155
+ res.writeHead(200, {
156
+ 'Content-Length': Buffer.byteLength(body),
157
+ 'Content-Type': 'text/html; charset=utf-8'
158
+ });
159
+ res.write(body);
160
+ res.end();
161
+ }
162
+ serveAsset(req, res, next) {
163
+ try {
164
+ const file = req.params.file;
165
+ if (!file || file.includes("..") || file.includes("/") || file.includes("\\")) {
166
+ return next(new restify_errors_1.default.NotFoundError("Asset not found"));
167
+ }
168
+ const ext = path_1.default.extname(file).slice(1).toLowerCase();
169
+ if (!ASSET_TYPES[ext]) {
170
+ return next(new restify_errors_1.default.NotFoundError("Asset not found"));
171
+ }
172
+ const resolved = path_1.default.resolve(assetsDir, file);
173
+ const relative = path_1.default.relative(assetsDir, resolved);
174
+ if (relative.startsWith("..") || path_1.default.isAbsolute(relative)) {
175
+ return next(new restify_errors_1.default.NotFoundError("Asset not found"));
176
+ }
177
+ if (!fs_1.default.existsSync(resolved)) {
178
+ return next(new restify_errors_1.default.NotFoundError("Asset not found"));
179
+ }
180
+ const body = fs_1.default.readFileSync(resolved);
181
+ res.writeHead(200, {
182
+ 'Content-Length': body.length,
183
+ 'Content-Type': ASSET_TYPES[ext],
184
+ 'Cache-Control': 'public, max-age=3600',
185
+ });
186
+ res.write(body);
187
+ res.end();
188
+ }
189
+ catch (err) {
190
+ console.error(err);
191
+ return next(new restify_errors_1.default.InternalServerError(err.toString()));
192
+ }
193
+ }
194
+ async metaModels(req, res) {
195
+ try {
196
+ const models = await getModelFileContents(this.config.model_dir);
197
+ res.send(models);
198
+ }
199
+ catch (err) {
200
+ console.error(err);
201
+ return new restify_errors_1.default.InternalServerError(err.toString());
202
+ }
203
+ }
204
+ metaModel(req, res, next) {
205
+ try {
206
+ if (!req.Model) {
207
+ return new restify_errors_1.default.NotFoundError("Model not found");
208
+ }
209
+ res.send(req.Model.schema.paths);
210
+ next();
211
+ }
212
+ catch (err) {
213
+ console.error(err);
214
+ return new restify_errors_1.default.InternalServerError(err.toString());
215
+ }
216
+ }
217
+ dbDiagram(req, res, next) {
218
+ try {
219
+ res.send(this.models);
220
+ next();
221
+ }
222
+ catch (err) {
223
+ return new restify_errors_1.default.InternalServerError(err.toString());
224
+ }
225
+ }
226
+ renderLogin(res, data = {}) {
227
+ this.renderTemplate(res, "login", {
228
+ active_section: "login",
229
+ hide_sidebar: true,
230
+ title: `Sign in · ${this.package.name}`,
231
+ ...data,
232
+ });
233
+ }
234
+ frontPage(req, res, next) {
235
+ try {
236
+ this.renderTemplate(res, "index", {
237
+ active_section: "home",
238
+ features: LANDING_FEATURES,
239
+ base_url: this.getBaseUrl(req),
240
+ }, req);
241
+ }
242
+ catch (err) {
243
+ console.error(err);
244
+ return next(new restify_errors_1.default.InternalServerError(err.toString()));
245
+ }
246
+ }
247
+ md(req, res, next) {
248
+ try {
249
+ const docFile = req.params.md_doc;
250
+ if (!docFile || docFile.includes("..") || docFile.includes("/") || docFile.includes("\\")) {
251
+ return next(new restify_errors_1.default.NotFoundError("Document not found"));
252
+ }
253
+ const filePath = path_1.default.join(packageRoot, "docs", docFile);
254
+ const body = fs_1.default.readFileSync(filePath, "utf8");
255
+ const md_contents = md.render(body);
256
+ const titleMatch = body.match(/^#\s+(.+)$/m);
257
+ this.renderTemplate(res, "md", {
258
+ md_contents,
259
+ active_section: "guides",
260
+ active_guide: docFile,
261
+ title: titleMatch ? `${titleMatch[1]} · ${this.package.name}` : undefined,
262
+ }, req);
263
+ }
264
+ catch (err) {
265
+ if (err.code === "ENOENT") {
266
+ return next(new restify_errors_1.default.NotFoundError("Document not found"));
267
+ }
268
+ console.error(err);
269
+ return next(new restify_errors_1.default.InternalServerError(err.toString()));
270
+ }
271
+ }
272
+ apiIndex(req, res, next) {
273
+ try {
274
+ const model_summaries = Object.keys(this.models).sort().map(slug => {
275
+ const model = this.models[slug];
276
+ const perms = model.schema.opts?.perms;
277
+ return {
278
+ slug,
279
+ collection: model.collection.name,
280
+ perms: perms || null,
281
+ };
282
+ });
283
+ this.renderTemplate(res, "api", {
284
+ active_section: "api",
285
+ model_summaries,
286
+ title: `API · ${this.package.name}`,
287
+ }, req);
288
+ }
289
+ catch (err) {
290
+ console.error(err);
291
+ return next(new restify_errors_1.default.InternalServerError(err.toString()));
292
+ }
293
+ }
294
+ model(req, res, next) {
295
+ try {
296
+ const model_slug = req.params.modelname;
297
+ const model = this.models[model_slug];
298
+ if (!model) {
299
+ return next(new restify_errors_1.default.NotFoundError(`Model ${model_slug} not found`));
300
+ }
301
+ const fields = Object.keys(model.schema.paths);
302
+ fields.sort();
303
+ const perms = model.schema.opts?.perms;
304
+ const safeFields = {};
305
+ fields.forEach(fieldName => {
306
+ safeFields[fieldName] = serializeField(model.schema.paths[fieldName]);
307
+ });
308
+ this.renderTemplate(res, "model", {
309
+ model,
310
+ model_slug,
311
+ collection_name: model.collection.name,
312
+ fields,
313
+ perms,
314
+ safeFields,
315
+ endpoints: buildEndpoints(model_slug),
316
+ active_section: "api",
317
+ active_model: model_slug,
318
+ title: `${model_slug} · API · ${this.package.name}`,
319
+ }, req);
320
+ }
321
+ catch (err) {
322
+ console.error(err);
323
+ return next(new restify_errors_1.default.InternalServerError(err.toString()));
324
+ }
325
+ }
326
+ }
327
+ module.exports = Docs;
328
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/libs/docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/libs/groups.ts"],"names":[],"mappings":""}