jxp 3.0.0 → 4.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.
Files changed (219) hide show
  1. package/.env.sample +31 -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.d.ts +2 -0
  44. package/dist/libs/docs.d.ts.map +1 -0
  45. package/dist/libs/docs.js +307 -0
  46. package/dist/libs/docs.js.map +1 -0
  47. package/dist/libs/groups.d.ts +2 -0
  48. package/dist/libs/groups.d.ts.map +1 -0
  49. package/dist/libs/groups.js +136 -0
  50. package/dist/libs/groups.js.map +1 -0
  51. package/dist/libs/jxp.d.ts +4 -0
  52. package/dist/libs/jxp.d.ts.map +1 -0
  53. package/dist/libs/jxp.js +1157 -0
  54. package/dist/libs/jxp.js.map +1 -0
  55. package/dist/libs/link_index.d.ts +14 -0
  56. package/dist/libs/link_index.d.ts.map +1 -0
  57. package/dist/libs/link_index.js +37 -0
  58. package/dist/libs/link_index.js.map +1 -0
  59. package/dist/libs/load-config.d.ts +16 -0
  60. package/dist/libs/load-config.d.ts.map +1 -0
  61. package/dist/libs/load-config.js +155 -0
  62. package/dist/libs/load-config.js.map +1 -0
  63. package/dist/libs/login.d.ts +2 -0
  64. package/dist/libs/login.d.ts.map +1 -0
  65. package/dist/libs/login.js +244 -0
  66. package/dist/libs/login.js.map +1 -0
  67. package/dist/libs/modeldir.d.ts +5 -0
  68. package/dist/libs/modeldir.d.ts.map +1 -0
  69. package/dist/libs/modeldir.js +15 -0
  70. package/dist/libs/modeldir.js.map +1 -0
  71. package/dist/libs/query_limits.d.ts +2 -0
  72. package/dist/libs/query_limits.d.ts.map +1 -0
  73. package/dist/libs/query_limits.js +84 -0
  74. package/dist/libs/query_limits.js.map +1 -0
  75. package/dist/libs/query_manipulation.d.ts +3 -0
  76. package/dist/libs/query_manipulation.d.ts.map +1 -0
  77. package/{libs → dist/libs}/query_manipulation.js +22 -21
  78. package/dist/libs/query_manipulation.js.map +1 -0
  79. package/dist/libs/query_sanitize.d.ts +5 -0
  80. package/dist/libs/query_sanitize.d.ts.map +1 -0
  81. package/dist/libs/query_sanitize.js +109 -0
  82. package/dist/libs/query_sanitize.js.map +1 -0
  83. package/dist/libs/response_sanitize.d.ts +7 -0
  84. package/dist/libs/response_sanitize.d.ts.map +1 -0
  85. package/dist/libs/response_sanitize.js +57 -0
  86. package/dist/libs/response_sanitize.js.map +1 -0
  87. package/dist/libs/safe_error.d.ts +3 -0
  88. package/dist/libs/safe_error.d.ts.map +1 -0
  89. package/dist/libs/safe_error.js +14 -0
  90. package/dist/libs/safe_error.js.map +1 -0
  91. package/dist/libs/schema.d.ts +14 -0
  92. package/dist/libs/schema.d.ts.map +1 -0
  93. package/dist/libs/schema.js +98 -0
  94. package/dist/libs/schema.js.map +1 -0
  95. package/dist/libs/schema_description.d.ts +3 -0
  96. package/dist/libs/schema_description.d.ts.map +1 -0
  97. package/{libs → dist/libs}/schema_description.js +12 -21
  98. package/dist/libs/schema_description.js.map +1 -0
  99. package/dist/libs/security.d.ts +2 -0
  100. package/dist/libs/security.d.ts.map +1 -0
  101. package/dist/libs/security.js +428 -0
  102. package/dist/libs/security.js.map +1 -0
  103. package/dist/libs/setup.d.ts +2 -0
  104. package/dist/libs/setup.d.ts.map +1 -0
  105. package/dist/libs/setup.js +87 -0
  106. package/dist/libs/setup.js.map +1 -0
  107. package/dist/libs/startup-deprecations.d.ts +2 -0
  108. package/dist/libs/startup-deprecations.d.ts.map +1 -0
  109. package/dist/libs/startup-deprecations.js +21 -0
  110. package/dist/libs/startup-deprecations.js.map +1 -0
  111. package/dist/libs/startup.d.ts +16 -0
  112. package/dist/libs/startup.d.ts.map +1 -0
  113. package/dist/libs/startup.js +63 -0
  114. package/dist/libs/startup.js.map +1 -0
  115. package/dist/libs/ws.d.ts +2 -0
  116. package/dist/libs/ws.d.ts.map +1 -0
  117. package/{libs → dist/libs}/ws.js +91 -73
  118. package/dist/libs/ws.js.map +1 -0
  119. package/dist/models/apikey_model.d.ts +10 -0
  120. package/dist/models/apikey_model.d.ts.map +1 -0
  121. package/dist/models/apikey_model.js +14 -0
  122. package/dist/models/apikey_model.js.map +1 -0
  123. package/dist/models/link_model.d.ts +9 -0
  124. package/dist/models/link_model.d.ts.map +1 -0
  125. package/dist/models/link_model.js +20 -0
  126. package/dist/models/link_model.js.map +1 -0
  127. package/dist/models/refreshtoken_model.d.ts +11 -0
  128. package/dist/models/refreshtoken_model.d.ts.map +1 -0
  129. package/dist/models/refreshtoken_model.js +22 -0
  130. package/dist/models/refreshtoken_model.js.map +1 -0
  131. package/dist/models/test_model.d.ts +24 -0
  132. package/dist/models/test_model.d.ts.map +1 -0
  133. package/dist/models/test_model.js +44 -0
  134. package/dist/models/test_model.js.map +1 -0
  135. package/dist/models/token_model.d.ts +14 -0
  136. package/dist/models/token_model.d.ts.map +1 -0
  137. package/dist/models/token_model.js +25 -0
  138. package/dist/models/token_model.js.map +1 -0
  139. package/dist/models/user_model.d.ts +15 -0
  140. package/dist/models/user_model.d.ts.map +1 -0
  141. package/dist/models/user_model.js +38 -0
  142. package/dist/models/user_model.js.map +1 -0
  143. package/dist/models/usergroups_model.d.ts +9 -0
  144. package/dist/models/usergroups_model.d.ts.map +1 -0
  145. package/dist/models/usergroups_model.js +18 -0
  146. package/dist/models/usergroups_model.js.map +1 -0
  147. package/dist/types/jxp-config.d.ts +134 -0
  148. package/dist/types/jxp-config.d.ts.map +1 -0
  149. package/dist/types/jxp-config.js +3 -0
  150. package/dist/types/jxp-config.js.map +1 -0
  151. package/dist/types/schema-fields.d.ts +43 -0
  152. package/dist/types/schema-fields.d.ts.map +1 -0
  153. package/dist/types/schema-fields.js +3 -0
  154. package/dist/types/schema-fields.js.map +1 -0
  155. package/docs/aggregations.md +40 -21
  156. package/docs/api.md +55 -15
  157. package/docs/authentication.md +60 -37
  158. package/docs/bulk_writes.md +11 -8
  159. package/docs/caching.md +28 -11
  160. package/docs/changelog.md +237 -31
  161. package/docs/configuration.md +99 -118
  162. package/docs/hooks.md +12 -8
  163. package/docs/index.md +17 -17
  164. package/docs/installation.md +23 -18
  165. package/docs/permissions.md +33 -19
  166. package/docs/queries.md +9 -5
  167. package/docs/schemas.md +21 -10
  168. package/docs/special.md +4 -4
  169. package/docs/typescript.md +86 -0
  170. package/docs/websocket.md +99 -1
  171. package/mkdocs.yml +1 -0
  172. package/package.json +121 -69
  173. package/templates/api.pug +32 -0
  174. package/templates/app-server.js +43 -0
  175. package/templates/app.env.sample +8 -0
  176. package/templates/assets/api-console.js +133 -0
  177. package/templates/assets/docs.css +227 -0
  178. package/templates/index.pug +62 -2
  179. package/templates/layout.pug +17 -11
  180. package/templates/md.pug +1 -1
  181. package/templates/model.pug +117 -68
  182. package/templates/navbar.pug +14 -21
  183. package/templates/sidebar.pug +30 -0
  184. package/.env +0 -9
  185. package/.eslintrc.json +0 -20
  186. package/.jshintrc +0 -4
  187. package/.vscode/launch.json +0 -34
  188. package/.vscode/settings.json +0 -3
  189. package/Dockerfile +0 -7
  190. package/bin/init_db.js +0 -54
  191. package/bin/server.js +0 -131
  192. package/bin/setup.js +0 -190
  193. package/config_sample.json +0 -10
  194. package/docker-compose.yml +0 -32
  195. package/libs/cache.js +0 -92
  196. package/libs/connection_string.js +0 -24
  197. package/libs/datamunging.js +0 -335
  198. package/libs/docs.js +0 -162
  199. package/libs/groups.js +0 -133
  200. package/libs/jxp.js +0 -1208
  201. package/libs/login.js +0 -222
  202. package/libs/modeldir.js +0 -14
  203. package/libs/schema.js +0 -99
  204. package/libs/security.js +0 -410
  205. package/libs/setup.js +0 -90
  206. package/models/apikey_model.js +0 -10
  207. package/models/link_model.js +0 -17
  208. package/models/refreshtoken_model.js +0 -20
  209. package/models/test_model.js +0 -50
  210. package/models/token_model.js +0 -23
  211. package/models/user_model.js +0 -38
  212. package/models/usergroups_model.js +0 -15
  213. package/setup.sh +0 -3
  214. package/test/.eslintrc.json +0 -13
  215. package/test/auth.js +0 -190
  216. package/test/init.js +0 -92
  217. package/test/setup.test.js +0 -62
  218. package/test/test.js +0 -1527
  219. package/test/wstest.js.old +0 -124
package/libs/docs.js DELETED
@@ -1,162 +0,0 @@
1
- const fs = require("fs");
2
- const path = require("path");
3
- const pug = require("pug");
4
- const yaml = require('js-yaml');
5
- const md = require('jstransformer')(require('jstransformer-markdown-it'));
6
- const util = require('util');
7
- const readFile = util.promisify(fs.readFile);
8
- const schema_description = require("./schema_description");
9
- const errors = require("restify-errors");
10
-
11
- // Helper function to safely serialize schema fields
12
- const serializeField = (field) => {
13
- const safeField = {
14
- path: field.path,
15
- instance: field.instance,
16
- options: { ...field.options },
17
- validators: field.validators?.map(v => ({
18
- type: v.type?.name,
19
- message: v.message
20
- })),
21
- isRequired: field.isRequired
22
- };
23
-
24
- // Handle default value
25
- if (typeof field.defaultValue === 'function') {
26
- safeField.defaultValue = '[Function]';
27
- } else if (field.defaultValue === undefined && field.options.default !== undefined) {
28
- if (typeof field.options.default === 'function') {
29
- safeField.defaultValue = '[Function]';
30
- } else {
31
- safeField.defaultValue = field.options.default;
32
- }
33
- } else {
34
- safeField.defaultValue = field.defaultValue;
35
- }
36
-
37
- // Handle special cases for different field types
38
- if (field.instance === 'Array' && field.caster) {
39
- safeField.arrayType = field.caster.instance;
40
- // Handle array defaults specially
41
- if (Array.isArray(safeField.defaultValue)) {
42
- safeField.defaultValue = JSON.stringify(safeField.defaultValue);
43
- }
44
- }
45
- if (field.instance === 'Embedded' || field.instance === 'DocumentArray') {
46
- safeField.schema = Object.keys(field.schema.paths).map(p => ({
47
- path: p,
48
- type: field.schema.paths[p].instance
49
- }));
50
- }
51
-
52
- return safeField;
53
- };
54
-
55
- class Docs {
56
- constructor(opts) {
57
- this.config = Object.assign({}, opts.config);
58
- this.models = opts.models;
59
- this.mkdocs = yaml.load(fs.readFileSync(path.join(__dirname, `../mkdocs.yml`), 'utf8'));
60
- this.package = require(path.join(process.cwd(), "package.json"));
61
- }
62
-
63
- renderTemplate(res, template_file, data = {}) {
64
- try {
65
- const template = pug.compileFile(path.join(__dirname, `../templates/${template_file}.pug`));
66
- data.title = data.title || `${this.package.name} API Documentation`;
67
- data.name = this.package.name;
68
- data.version = this.package.version;
69
- data.model_list = Object.keys(this.models);
70
- data.guide_nav = this.mkdocs.nav;
71
- const body = template(data);
72
- res.writeHead(200, {
73
- 'Content-Length': Buffer.byteLength(body),
74
- 'Content-Type': 'text/html'
75
- });
76
- res.write(body);
77
- res.end();
78
- } catch (err) {
79
- console.error(err);
80
- return new errors.InternalServerError(err.toString());
81
- }
82
- }
83
-
84
- async metaModels(req, res) {
85
- try {
86
- const models = await schema_description(this.config.model_dir);
87
- res.send(models);
88
- } catch (err) {
89
- console.error(err);
90
- return new errors.InternalServerError(err.toString());
91
- }
92
- }
93
-
94
- metaModel(req, res, next) {
95
- try {
96
- if (!req.Model) {
97
- return new errors.NotFoundError("Model not found")
98
- }
99
- res.send(req.Model.schema.paths);
100
- next();
101
- } catch (err) {
102
- console.error(err);
103
- return new errors.InternalServerError(err.toString());
104
- }
105
- }
106
-
107
- dbDiagram(req, res, next) {
108
- try {
109
- res.send(this.models);
110
- next();
111
- } catch (err) {
112
- return new errors.InternalServerError(err.toString());
113
- }
114
- }
115
-
116
- frontPage(req, res, next) {
117
- try {
118
- this.renderTemplate(res, "index", {});
119
- next();
120
- } catch (err) {
121
- return new errors.InternalServerError(err.toString());
122
- }
123
- }
124
-
125
- async md(req, res) {
126
- try {
127
- const body = await readFile(path.join(__dirname, `../docs`, req.params.md_doc));
128
- const md_contents = md.render(body.toString()).body;
129
- this.renderTemplate(res, "md", { md_contents });
130
- } catch (err) {
131
- return new errors.InternalServerError(err.toString());
132
- }
133
- }
134
-
135
- model(req, res, next) {
136
- try {
137
- const model = this.models[req.params.modelname];
138
- const fields = Object.keys(model.schema.paths);
139
- fields.sort();
140
- const perms = model.schema.opts.perms;
141
-
142
- // Prepare safe field data for template
143
- const safeFields = {};
144
- fields.forEach(fieldName => {
145
- safeFields[fieldName] = serializeField(model.schema.paths[fieldName]);
146
- });
147
-
148
- this.renderTemplate(res, "model", {
149
- model,
150
- fields,
151
- perms,
152
- safeFields
153
- });
154
- next();
155
- } catch (err) {
156
- console.error(err);
157
- return new errors.InternalServerError(err.toString());
158
- }
159
- }
160
- }
161
-
162
- module.exports = Docs;
package/libs/groups.js DELETED
@@ -1,133 +0,0 @@
1
- const errors = require("restify-errors");
2
-
3
- let Groups = null;
4
-
5
- const init = config => {
6
- const path = require("path");
7
- Groups = require(path.join(config.model_dir, 'usergroups_model'));
8
- };
9
-
10
- const actionPut = async (req, res) => {
11
- const user_id = req.params.user_id;
12
- const group = req.body.group;
13
- if (!group) {
14
- console.error("Group required");
15
- return new errors.BadRequestError("Group required");
16
- }
17
- if (!user_id) {
18
- console.error("user_id required");
19
- return new errors.BadRequestError("user_id is required");
20
- }
21
- try {
22
- let userGroup = await Groups.findOne({ user_id: user_id });
23
- if (!userGroup) {
24
- userGroup = new Groups();
25
- userGroup.user_id = user_id;
26
- userGroup.groups = [];
27
- }
28
- if (Array.isArray(group)) {
29
- group.forEach(function(g) {
30
- if (userGroup.groups.indexOf(g) == -1) {
31
- userGroup.groups.push(g);
32
- }
33
- });
34
- } else {
35
- if (userGroup.groups.indexOf(group) == -1) {
36
- userGroup.groups.push(group);
37
- }
38
- }
39
- res.send(await userGroup.save());
40
- } catch(err) {
41
- console.error(err);
42
- return new errors.InternalServerError(err.toString());
43
- }
44
- };
45
-
46
- const actionPost = async (req, res) => {
47
- const user_id = req.params.user_id;
48
- const group = req.body.group;
49
- if (!group) {
50
- console.error("Group required");
51
- return new errors.BadRequestError("Group required");
52
- }
53
- if (!user_id) {
54
- console.error("user_id required");
55
- return new errors.BadRequestError("user_id required");
56
- }
57
- try {
58
- let userGroup = await Groups.findOne({ user_id: user_id });
59
- if (!userGroup) {
60
- userGroup = new Groups();
61
- userGroup.user_id = user_id;
62
- }
63
- userGroup.groups = [];
64
- if (Array.isArray(group)) {
65
- group.forEach(function (g) {
66
- if (userGroup.groups.indexOf(g) == -1) {
67
- userGroup.groups.push(g);
68
- }
69
- });
70
- } else {
71
- if (userGroup.groups.indexOf(group) == -1) {
72
- userGroup.groups.push(group);
73
- }
74
- }
75
- res.send(await userGroup.save());
76
- } catch (err) {
77
- console.error(err);
78
- return new errors.InternalServerError(err.toString());
79
- }
80
- };
81
-
82
- const actionGet = async (req, res) => {
83
- var user_id = req.params.user_id;
84
- if (!user_id) {
85
- console.error("user_id required");
86
- return new errors.BadRequestError("user_id required");
87
- }
88
- try {
89
- let userGroup = await Groups.findOne({ user_id });
90
- if (!userGroup) {
91
- res.send({ groups: [] });
92
- return;
93
- }
94
- res.send(userGroup);
95
- } catch (err) {
96
- console.error(err);
97
- return new errors.InternalServerError(err.toString());
98
- }
99
- };
100
-
101
- const actionDelete = async (req, res) => {
102
- const user_id = req.params.user_id;
103
- const group = req.query.group;
104
- if (!group) {
105
- return new errors.BadRequestError("Group required");
106
- }
107
- if (!user_id) {
108
- console.error("user_id required");
109
- return new errors.BadRequestError("user_id required");
110
- }
111
- try {
112
- let userGroup = await Groups.findOne({ user_id });
113
- if (!userGroup) {
114
- return new errors.BadRequestError("User not found");
115
- }
116
- let i = userGroup.groups.indexOf(group);
117
- if (i > -1) {
118
- userGroup.groups.splice(i, 1);
119
- }
120
- res.send(await userGroup.save());
121
- } catch (err) {
122
- console.error(err);
123
- return new errors.InternalServerError(err.toString());
124
- }
125
- };
126
-
127
- module.exports = {
128
- init,
129
- actionPut,
130
- actionPost,
131
- actionGet,
132
- actionDelete
133
- };