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 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/libs/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/libs/setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rand_token = require("rand-token");
4
+ const path = require("path");
5
+ const errors = require("restify-errors");
6
+ const security = require("./security");
7
+ const ObjectID = require('mongodb').ObjectID;
8
+ var User = null;
9
+ const connection_string = require("./connection_string");
10
+ const init = config => {
11
+ const mod = require(path.join(config.model_dir, "user_model"));
12
+ User = mod.default || mod;
13
+ };
14
+ const checkUserDoesNotExist = async () => {
15
+ try {
16
+ const count = await User.countDocuments();
17
+ if (count) {
18
+ throw new errors.ConflictError("Cannot setup if user exists");
19
+ }
20
+ }
21
+ catch (err) {
22
+ console.error(err);
23
+ if (err.code)
24
+ throw err;
25
+ throw new errors.InternalServerError(err.toString());
26
+ }
27
+ };
28
+ const setup = async (req, res) => {
29
+ try {
30
+ const password = (req.body && req.body.password) ? req.body.password : rand_token.generate(12);
31
+ const user = new User({
32
+ password: security.encPassword(password),
33
+ email: req.body.email || "admin@example.com",
34
+ name: req.body.name || "admin",
35
+ admin: true
36
+ });
37
+ await user.save();
38
+ console.log("Created admin user", user.name, "<" + user.email + ">", ":", password);
39
+ res.send({
40
+ status: "success",
41
+ name: user.name,
42
+ email: user.email,
43
+ password
44
+ });
45
+ }
46
+ catch (err) {
47
+ console.error(err);
48
+ throw new errors.InternalServerError(err.toString());
49
+ }
50
+ };
51
+ // Unlike setup, which just automates user creation, you can upload any data you want
52
+ const data_setup = async (req, res) => {
53
+ try {
54
+ const { MongoClient } = require("mongodb");
55
+ const client = await MongoClient.connect(connection_string);
56
+ const db = client.db(client.databaseName);
57
+ const data = req.body;
58
+ const results = {};
59
+ const _id_reg = new RegExp("_id$");
60
+ for (let collection in data) {
61
+ for (let row of data[collection]) {
62
+ row.createdAt = new Date();
63
+ row._deleted = false;
64
+ // Ensure all _id's are of type id
65
+ for (let field in row) {
66
+ if (_id_reg.test(field)) {
67
+ row[field] = ObjectID(row[field]);
68
+ }
69
+ }
70
+ }
71
+ const result = await db.collection(collection).insertMany(data[collection]);
72
+ results[collection] = result;
73
+ }
74
+ res.send({ status: "success", results });
75
+ }
76
+ catch (err) {
77
+ console.error(err);
78
+ throw new errors.InternalServerError(err.toString());
79
+ }
80
+ };
81
+ module.exports = {
82
+ init,
83
+ checkUserDoesNotExist,
84
+ setup,
85
+ data_setup
86
+ };
87
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/libs/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=startup-deprecations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-deprecations.d.ts","sourceRoot":"","sources":["../../src/libs/startup-deprecations.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Restify pulls in `spdy` → `http-deceiver`, which uses deprecated
5
+ * process.binding('http_parser') on Node 22+. Harmless until upstream fixes lazy loading.
6
+ */
7
+ const originalEmit = process.emit.bind(process);
8
+ process.emit = function emit(name, data, ...args) {
9
+ if (name === "warning" &&
10
+ typeof data === "object" &&
11
+ data !== null &&
12
+ "name" in data &&
13
+ data.name === "DeprecationWarning" &&
14
+ "message" in data &&
15
+ typeof data.message === "string" &&
16
+ data.message.includes("process.binding('http_parser')")) {
17
+ return false;
18
+ }
19
+ return originalEmit(name, data, ...args);
20
+ };
21
+ //# sourceMappingURL=startup-deprecations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-deprecations.js","sourceRoot":"","sources":["../../src/libs/startup-deprecations.ts"],"names":[],"mappings":";;AAAA;;;GAGG;AACH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEhD,OAAO,CAAC,IAAI,GAAG,SAAS,IAAI,CAC3B,IAAqB,EACrB,IAAa,EACb,GAAG,IAAe;IAElB,IACC,IAAI,KAAK,SAAS;QAClB,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,KAAK,IAAI;QACb,MAAM,IAAI,IAAI;QACb,IAA8B,CAAC,IAAI,KAAK,oBAAoB;QAC7D,SAAS,IAAI,IAAI;QACjB,OAAQ,IAAc,CAAC,OAAO,KAAK,QAAQ;QAC1C,IAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,gCAAgC,CAAC,EACjE,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;AAC1C,CAAwB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface StartupContext {
2
+ name: string;
3
+ version: string;
4
+ mongoUri: string;
5
+ accessLog?: string;
6
+ maxPoolSize?: number;
7
+ }
8
+ export interface ReadyContext extends StartupContext {
9
+ url: string;
10
+ mongooseVersion: string;
11
+ mongoConnectedAt: Date;
12
+ }
13
+ export declare function printBanner(ctx: StartupContext): void;
14
+ export declare function printBooting(ctx: StartupContext): void;
15
+ export declare function printReady(ctx: ReadyContext): void;
16
+ //# sourceMappingURL=startup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../src/libs/startup.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,IAAI,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAWrD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAYtD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAiBlD"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printBanner = printBanner;
4
+ exports.printBooting = printBooting;
5
+ exports.printReady = printReady;
6
+ const c = {
7
+ reset: "\x1b[0m",
8
+ bold: "\x1b[1m",
9
+ dim: "\x1b[2m",
10
+ cyan: "\x1b[36m",
11
+ green: "\x1b[32m",
12
+ yellow: "\x1b[33m",
13
+ magenta: "\x1b[35m",
14
+ blue: "\x1b[34m",
15
+ gray: "\x1b[90m",
16
+ };
17
+ const BANNER = [
18
+ " ██╗██╗ ██╗██████╗ ",
19
+ " ██║╚██╗██╔╝██╔══██╗",
20
+ " ██║ ╚███╔╝ ██████╔╝",
21
+ "██ ██║ ██╔██╗ ██╔═══╝ ",
22
+ "╚█████╔╝██╔╝ ██╗██║ ",
23
+ " ╚════╝ ╚═╝ ╚═╝╚═╝ ",
24
+ ].join("\n");
25
+ function printBanner(ctx) {
26
+ const versionTag = `${ctx.name} v${ctx.version}`;
27
+ const bannerWidth = BANNER.split("\n")[0]?.length ?? versionTag.length;
28
+ const pad = Math.max(0, Math.floor((bannerWidth - versionTag.length) / 2));
29
+ console.log("");
30
+ console.log(`${c.cyan}${BANNER}${c.reset}`);
31
+ console.log(`${c.dim}${" ".repeat(pad)}${c.bold}${c.magenta}${versionTag}${c.reset}${c.dim} · REST API framework${c.reset}`);
32
+ console.log("");
33
+ }
34
+ function printBooting(ctx) {
35
+ const mongoDisplay = maskMongoCredentials(ctx.mongoUri);
36
+ console.log(`${c.gray} ┌─ booting${c.reset}`);
37
+ console.log(`${c.gray} │${c.reset} ${c.dim}MongoDB${c.reset} ${mongoDisplay}`);
38
+ if (ctx.accessLog) {
39
+ console.log(`${c.gray} │${c.reset} ${c.dim}Access log${c.reset} ${ctx.accessLog}`);
40
+ }
41
+ if (ctx.maxPoolSize) {
42
+ console.log(`${c.gray} │${c.reset} ${c.dim}Pool max${c.reset} ${ctx.maxPoolSize}`);
43
+ }
44
+ console.log(`${c.gray} └─${c.reset}`);
45
+ console.log("");
46
+ }
47
+ function printReady(ctx) {
48
+ const mongoDisplay = maskMongoCredentials(ctx.mongoUri);
49
+ const time = ctx.mongoConnectedAt.toLocaleTimeString();
50
+ console.log(`${c.green}${c.bold} ✓ Ready${c.reset}`);
51
+ console.log(`${c.gray} ├─${c.reset} ${c.dim}HTTP${c.reset} ${c.cyan}${ctx.url}${c.reset}`);
52
+ console.log(`${c.gray} ├─${c.reset} ${c.dim}MongoDB${c.reset} ${c.green}connected${c.reset} ${c.dim}at ${time}${c.reset}`);
53
+ console.log(`${c.gray} ├─${c.reset} ${c.dim}Database${c.reset} ${mongoDisplay}`);
54
+ if (ctx.accessLog) {
55
+ console.log(`${c.gray} ├─${c.reset} ${c.dim}Access log${c.reset} ${ctx.accessLog}`);
56
+ }
57
+ console.log(`${c.gray} └─${c.reset} ${c.dim}Mongoose${c.reset} v${ctx.mongooseVersion}${c.reset}`);
58
+ console.log("");
59
+ }
60
+ function maskMongoCredentials(uri) {
61
+ return uri.replace(/\/\/([^@/]+@)/, "//***@");
62
+ }
63
+ //# sourceMappingURL=startup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup.js","sourceRoot":"","sources":["../../src/libs/startup.ts"],"names":[],"mappings":";;AAmCA,kCAWC;AAED,oCAYC;AAED,gCAiBC;AA/ED,MAAM,CAAC,GAAG;IACT,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;CAChB,CAAC;AAEF,MAAM,MAAM,GAAG;IACd,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;IAC1B,0BAA0B;CAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAgBb,SAAgB,WAAW,CAAC,GAAmB;IAC9C,MAAM,UAAU,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CACV,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAC/G,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,SAAgB,YAAY,CAAC,GAAmB;IAC/C,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,QAAQ,YAAY,EAAE,CAAC,CAAC;IACrF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,SAAgB,UAAU,CAAC,GAAiB;IAC3C,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnG,OAAO,CAAC,GAAG,CACV,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAClH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,MAAM,YAAY,EAAE,CAAC,CAAC;IACrF,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,CAAC,GAAG,CACV,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,EAAE,CACzF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ws.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws.d.ts","sourceRoot":"","sources":["../../src/libs/ws.ts"],"names":[],"mappings":""}
@@ -1,33 +1,38 @@
1
+ "use strict";
1
2
  /*
2
3
  $auth
3
4
  $subscribe
4
5
  $fetch
5
6
  */
6
-
7
+ Object.defineProperty(exports, "__esModule", { value: true });
7
8
  const WS = require("ws");
8
9
  const url = require('url');
9
10
  const crypto = require("crypto");
10
11
  const security = require("./security");
11
12
  let client_count = 0;
12
13
  const EventEmitter = require("events");
13
-
14
- class Emitter extends EventEmitter { }
14
+ class Emitter extends EventEmitter {
15
+ }
15
16
  const emitter = new Emitter();
16
17
  emitter.setMaxListeners(500);
17
-
18
18
  let models = [];
19
-
20
19
  const md5 = s => {
21
20
  return crypto.createHash('md5').update(String(s)).digest("hex");
22
- }
23
-
21
+ };
24
22
  const wss = new WS.Server({ noServer: true });
25
-
26
23
  const init = (data) => {
27
24
  models = data.models;
28
- }
29
-
25
+ };
30
26
  class WSClient {
27
+ ws;
28
+ id_string;
29
+ id;
30
+ msg_count;
31
+ is_authed;
32
+ user;
33
+ groups;
34
+ actions;
35
+ listeners;
31
36
  constructor(ws) {
32
37
  this.ws = ws;
33
38
  this.id_string = `client-${client_count++}-${+new Date()}`;
@@ -40,33 +45,36 @@ class WSClient {
40
45
  auth: this.auth,
41
46
  subscribe: this.subscribe,
42
47
  unsubscribe: this.unsubscribe
43
- }
48
+ };
44
49
  this.listeners = {};
45
50
  }
46
-
47
51
  close() {
48
52
  this.is_authed = false;
49
53
  this.user = null;
50
- this.listeners = [];
54
+ this.listeners = {};
51
55
  }
52
-
53
56
  async receive(msg) {
54
57
  this.msg_count++;
55
58
  let parsed_msg = null;
56
59
  try {
57
60
  parsed_msg = JSON.parse(msg);
58
- } catch (err) {
61
+ }
62
+ catch (err) {
59
63
  console.log("Unable to parse message", msg);
60
64
  return {
61
65
  status: "error",
62
66
  message: "Unable to parse message"
63
- }
67
+ };
64
68
  }
65
69
  try {
66
- if (typeof parsed_msg !== "object") throw "msg should be an object";
67
- if (!parsed_msg.action) throw "missing action";
68
- if (!this.actions[parsed_msg.action]) throw `action ${parsed_msg.action} not implemented`;
69
- if (!parsed_msg.msg_id) throw `missing msg_id`;
70
+ if (typeof parsed_msg !== "object")
71
+ throw "msg should be an object";
72
+ if (!parsed_msg.action)
73
+ throw "missing action";
74
+ if (!this.actions[parsed_msg.action])
75
+ throw `action ${parsed_msg.action} not implemented`;
76
+ if (!parsed_msg.msg_id)
77
+ throw `missing msg_id`;
70
78
  parsed_msg.data = parsed_msg.data || {};
71
79
  const result = await this.actions[parsed_msg.action].call(this, parsed_msg.data);
72
80
  return {
@@ -75,21 +83,20 @@ class WSClient {
75
83
  client_id: this.id,
76
84
  msg_id: parsed_msg.msg_id,
77
85
  result
78
- }
79
- } catch (err) {
86
+ };
87
+ }
88
+ catch (err) {
80
89
  console.error(err);
81
90
  return {
82
91
  status: "error",
83
92
  message: err,
84
93
  msg_id: parsed_msg.msg_id
85
- }
94
+ };
86
95
  }
87
96
  }
88
-
89
97
  async ping() {
90
98
  return "pong!";
91
99
  }
92
-
93
100
  async auth(data) {
94
101
  let user = null;
95
102
  if (data.email && data.password) {
@@ -101,57 +108,66 @@ class WSClient {
101
108
  if (data.token) {
102
109
  user = await security.bearerAuth(data.token);
103
110
  }
104
- if (!user || !user.email) throw "Unable to authenticate";
111
+ if (!user || !user.email)
112
+ throw "Unable to authenticate";
105
113
  this.user = user;
106
114
  this.is_authed = true;
107
115
  this.groups = await security.getGroups(this.user._id);
108
- console.log(`Logged in ${user.name} <${user.email}>`)
116
+ console.log(`Logged in ${user.name} <${user.email}>`);
109
117
  return "Authed";
110
118
  }
111
-
112
119
  async subscribe(data) {
113
120
  try {
114
- if (!this.is_authed) throw ("User not authenticated");
121
+ if (!this.is_authed)
122
+ throw ("User not authenticated");
115
123
  if (data.id) {
116
- if (this.listeners[`put-${this.id}-${data.model}-${data.id}`]) return `Already subscribed`;
124
+ if (this.listeners[`put-${this.id}-${data.model}-${data.id}`])
125
+ return `Already subscribed`;
117
126
  await security.check_perms(this.user, this.groups, models[data.model], "r", data.id);
118
127
  // Put
119
128
  this.listeners[`put-${this.id}-${data.model}-${data.id}`] = {};
120
129
  this.listeners[`put-${this.id}-${data.model}-${data.id}`].fn = this.sendPut.bind(this);
121
- if (data.filter) this.listeners[`put-${this.id}-${data.model}-${data.id}`].filter = data.filter;
130
+ if (data.filter)
131
+ this.listeners[`put-${this.id}-${data.model}-${data.id}`].filter = data.filter;
122
132
  emitter.on(`put-${data.model}-${data.id}`, this.listeners[`put-${this.id}-${data.model}-${data.id}`].fn);
123
133
  // Delete
124
134
  this.listeners[`del-${this.id}-${data.model}-${data.id}`] = {};
125
135
  this.listeners[`del-${this.id}-${data.model}-${data.id}`].fn = this.sendPut.bind(this);
126
- if (data.filter) this.listeners[`del-${this.id}-${data.model}-${data.id}`].filter = data.filter;
136
+ if (data.filter)
137
+ this.listeners[`del-${this.id}-${data.model}-${data.id}`].filter = data.filter;
127
138
  emitter.on(`del-${data.model}-${data.id}`, this.listeners[`del-${this.id}-${data.model}-${data.id}`].fn);
128
139
  return `Subscribed to put-${this.id}-${data.model}-${data.id}`;
129
- } else {
130
- if (this.listeners[`post-${this.id}-${data.model}`]) return `Already subscribed`;
140
+ }
141
+ else {
142
+ if (this.listeners[`post-${this.id}-${data.model}`])
143
+ return `Already subscribed`;
131
144
  await security.check_perms(this.user, this.groups, models[data.model], "r");
132
145
  // Post
133
146
  this.listeners[`post-${this.id}-${data.model}`] = {};
134
- if (data.filter) this.listeners[`post-${this.id}-${data.model}`].filter = data.filter;
147
+ if (data.filter)
148
+ this.listeners[`post-${this.id}-${data.model}`].filter = data.filter;
135
149
  this.listeners[`post-${this.id}-${data.model}`].fn = this.sendPost.bind(this);
136
150
  emitter.on(`post-${data.model}`, this.listeners[`post-${this.id}-${data.model}`].fn);
137
151
  // Put
138
152
  this.listeners[`put-${this.id}-${data.model}`] = {};
139
153
  this.listeners[`put-${this.id}-${data.model}`].fn = this.sendPut.bind(this);
140
- if (data.filter) this.listeners[`put-${this.id}-${data.model}`].filter = data.filter;
154
+ if (data.filter)
155
+ this.listeners[`put-${this.id}-${data.model}`].filter = data.filter;
141
156
  emitter.on(`put-${data.model}`, this.listeners[`put-${this.id}-${data.model}`].fn);
142
157
  // Delete
143
158
  this.listeners[`del-${this.id}-${data.model}`] = {};
144
159
  this.listeners[`del-${this.id}-${data.model}`].fn = this.sendPut.bind(this);
145
- if (data.filter) this.listeners[`del-${this.id}-${data.model}`].filter = data.filter;
160
+ if (data.filter)
161
+ this.listeners[`del-${this.id}-${data.model}`].filter = data.filter;
146
162
  emitter.on(`del-${data.model}`, this.listeners[`del-${this.id}-${data.model}`].fn);
147
163
  return `Subscribed to post-${this.id}-${data.model}`;
148
164
  }
149
- } catch (err) {
165
+ }
166
+ catch (err) {
150
167
  console.error(err);
151
168
  return `Failed to subscribe to ${data.model} (${err})`;
152
169
  }
153
170
  }
154
-
155
171
  async unsubscribe(data) {
156
172
  if (data.id) {
157
173
  emitter.off(`put-${this.id}-${data.model}-${data._id}`, this.listeners[`put-${this.id}-${data.model}-${data._id}`].fn);
@@ -159,7 +175,8 @@ class WSClient {
159
175
  emitter.off(`del-${this.id}-${data.model}-${data._id}`, this.listeners[`del-${this.id}-${data.model}-${data._id}`].fn);
160
176
  delete (this.listeners[`del-${this.id}-${data.model}-${data._id}`]);
161
177
  return `Unsubscribed to ${data.model}-${data._id}`;
162
- } else {
178
+ }
179
+ else {
163
180
  emitter.off(`post-${this.id}-${data.model}`, this.listeners[`post-${this.id}-${data.model}`].fn);
164
181
  delete (this.listeners[`post-${this.id}-${data.model}`]);
165
182
  emitter.off(`put-${this.id}-${data.model}`, this.listeners[`put-${this.id}-${data.model}`].fn);
@@ -169,19 +186,20 @@ class WSClient {
169
186
  return `Unsubscribed to ${data.model}`;
170
187
  }
171
188
  }
172
-
173
189
  async send(data) {
174
190
  this.ws.send(JSON.stringify({ client_id: this.id, data }));
175
191
  }
176
-
177
192
  async sendPost(data) {
178
193
  if (this.listeners[`post-${this.id}-${data.modelname}`] && this.listeners[`post-${this.id}-${data.modelname}`].filter) {
179
194
  let passed = false;
180
- if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length) passed = true;
195
+ if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length)
196
+ passed = true;
181
197
  for (let filter in this.listeners[`post-${this.id}-${data.modelname}`].filter) {
182
- if (data.result[filter].toString() === this.listeners[`post-${this.id}-${data.modelname}`].filter[filter]) passed = true;
198
+ if (data.result[filter].toString() === this.listeners[`post-${this.id}-${data.modelname}`].filter[filter])
199
+ passed = true;
183
200
  }
184
- if (!passed) return;
201
+ if (!passed)
202
+ return;
185
203
  }
186
204
  this.send({
187
205
  event: "post",
@@ -192,15 +210,17 @@ class WSClient {
192
210
  user_email: data.user.email,
193
211
  });
194
212
  }
195
-
196
213
  async sendPut(data) {
197
214
  if (this.listeners[`put-${this.id}-${data.modelname}`] && this.listeners[`put-${this.id}-${data.modelname}`].filter) {
198
215
  let passed = false;
199
- if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length) passed = true;
216
+ if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length)
217
+ passed = true;
200
218
  for (let filter in this.listeners[`put-${this.id}-${data.modelname}`].filter) {
201
- if (data.result[filter].toString() === this.listeners[`put-${this.id}-${data.modelname}`].filter[filter]) passed = true;
219
+ if (data.result[filter].toString() === this.listeners[`put-${this.id}-${data.modelname}`].filter[filter])
220
+ passed = true;
202
221
  }
203
- if (!passed) return;
222
+ if (!passed)
223
+ return;
204
224
  }
205
225
  this.send({
206
226
  event: "put",
@@ -211,15 +231,17 @@ class WSClient {
211
231
  user_email: data.user.email,
212
232
  });
213
233
  }
214
-
215
234
  async sendDel(data) {
216
235
  if (this.listeners[`del-${this.id}-${data.modelname}`] && this.listeners[`del-${this.id}-${data.modelname}`].filter) {
217
236
  let passed = false;
218
- if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length) passed = true;
237
+ if (!Object.keys(this.listeners[`post-${this.id}-${data.modelname}`].filter).length)
238
+ passed = true;
219
239
  for (let filter in this.listeners[`del-${this.id}-${data.modelname}`].filter) {
220
- if (data.result[filter].toString() === this.listeners[`del-${this.id}-${data.modelname}`].filter[filter]) passed = true;
240
+ if (data.result[filter].toString() === this.listeners[`del-${this.id}-${data.modelname}`].filter[filter])
241
+ passed = true;
221
242
  }
222
- if (!passed) return;
243
+ if (!passed)
244
+ return;
223
245
  }
224
246
  this.send({
225
247
  event: "del",
@@ -231,13 +253,11 @@ class WSClient {
231
253
  });
232
254
  }
233
255
  }
234
-
235
256
  wss.on('connection', function connection(ws) {
236
257
  try {
237
258
  const client = new WSClient(ws);
238
259
  const startTime = Date.now();
239
260
  console.log(`New WebSocket connection established at ${new Date()}`);
240
-
241
261
  ws.on('message', async function message(msg) {
242
262
  const messageStartTime = Date.now();
243
263
  try {
@@ -245,22 +265,22 @@ wss.on('connection', function connection(ws) {
245
265
  const result = await client.receive(msg);
246
266
  ws.send(JSON.stringify(result));
247
267
  console.log(`Message processed in ${Date.now() - messageStartTime}ms`);
248
- } catch (err) {
268
+ }
269
+ catch (err) {
249
270
  console.error("message error", err);
250
271
  console.error(`Message processing failed after ${Date.now() - messageStartTime}ms`);
251
272
  }
252
273
  });
253
-
254
274
  ws.on('close', function close() {
255
275
  const connectionDuration = Date.now() - startTime;
256
276
  if (client.user) {
257
277
  console.log(`Connection closed for ${client.user.name} <${client.user.email}> after ${connectionDuration}ms`);
258
- } else {
278
+ }
279
+ else {
259
280
  console.log(`Anonymous connection closed after ${connectionDuration}ms`);
260
281
  }
261
282
  client.close();
262
283
  });
263
-
264
284
  // Add ping/pong monitoring
265
285
  const pingInterval = setInterval(() => {
266
286
  if (ws.readyState === ws.OPEN) {
@@ -274,45 +294,43 @@ wss.on('connection', function connection(ws) {
274
294
  });
275
295
  }
276
296
  }, 30000);
277
-
278
297
  ws.on('close', () => clearInterval(pingInterval));
279
- } catch (err) {
298
+ }
299
+ catch (err) {
280
300
  console.error("connection error", err);
281
301
  }
282
302
  });
283
-
284
303
  const upgrade = async (req, socket, head) => {
285
304
  try {
286
305
  const pathname = url.parse(req.url).pathname;
287
- if (pathname !== "/websocket") throw ("Only /websocket endpoint supported");
306
+ if (pathname !== "/websocket")
307
+ throw ("Only /websocket endpoint supported");
288
308
  wss.handleUpgrade(req, socket, head, function done(ws) {
289
309
  wss.emit('connection', ws, req);
290
310
  });
291
- } catch (err) {
311
+ }
312
+ catch (err) {
292
313
  console.log("Websocket Auth failed");
293
314
  socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
294
315
  socket.destroy();
295
316
  }
296
- }
297
-
317
+ };
298
318
  const postHook = async (modelname, result, user) => {
299
319
  emitter.emit(`post-${modelname}`, { modelname, result, user });
300
- }
301
-
320
+ };
302
321
  const putHook = async (modelname, result, user) => {
303
322
  emitter.emit(`put-${modelname}-${result._id}`, { modelname, result, user });
304
323
  emitter.emit(`put-${modelname}`, { modelname, result, user });
305
- }
306
-
324
+ };
307
325
  const delHook = async (modelname, result, user) => {
308
326
  emitter.emit(`del-${modelname}-${result._id}`, { modelname, result, user });
309
327
  emitter.emit(`del-${modelname}`, { modelname, result, user });
310
- }
311
-
328
+ };
312
329
  module.exports = {
313
330
  upgrade,
314
331
  postHook,
315
332
  putHook,
316
333
  delHook,
317
334
  init
318
- };
335
+ };
336
+ //# sourceMappingURL=ws.js.map