cloudcms-server 3.3.1-beta.8 → 4.0.0-beta.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 (109) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/broadcast/broadcast.js +6 -3
  4. package/broadcast/providers/redis.js +24 -49
  5. package/clients/nrp.js +117 -0
  6. package/clients/redis.js +64 -0
  7. package/d1/index.js +629 -0
  8. package/d1/index.js.works +203 -0
  9. package/d1/package.json +86 -0
  10. package/d1/package.json.works +14 -0
  11. package/duster/helpers/sample/nyt.js +2 -1
  12. package/framework/controllers.js +4 -4
  13. package/index.js +26 -14
  14. package/insight/insight.js +1 -1
  15. package/launchpad/index.js +203 -11
  16. package/launchpad/launchers/cluster.js +103 -110
  17. package/launchpad/launchers/redis.js +70 -0
  18. package/launchpad/launchers/single.js +36 -22
  19. package/locks/locks.js +63 -9
  20. package/locks/providers/cluster.js +3 -1
  21. package/locks/providers/memory.js +10 -7
  22. package/locks/providers/redis.js +62 -82
  23. package/middleware/admin/admin.js +3 -3
  24. package/middleware/authentication/adapters/session.js +11 -8
  25. package/middleware/authentication/authentication.js +28 -16
  26. package/middleware/authentication/authenticators/default.js +5 -2
  27. package/middleware/authentication/authenticators/session.js +5 -2
  28. package/middleware/authentication/providers/saml.js +1 -1
  29. package/middleware/authorization/authorization.js +11 -8
  30. package/middleware/awareness/awareness.js +55 -31
  31. package/middleware/awareness/plugins/editorial.js +4 -4
  32. package/middleware/awareness/providers/abstract-async.js +107 -84
  33. package/middleware/awareness/providers/abstract.js +1 -1
  34. package/middleware/awareness/providers/memory.js +0 -14
  35. package/middleware/awareness/providers/redis.js +186 -279
  36. package/middleware/cache/cache.js +4 -2
  37. package/middleware/cache/providers/redis.js +127 -89
  38. package/middleware/cache/providers/shared-memory.js +3 -3
  39. package/middleware/cloudcms/cloudcms.js +22 -16
  40. package/middleware/form/form.js +3 -3
  41. package/middleware/modules/modules.js +63 -10
  42. package/middleware/proxy/proxy.js +8 -21
  43. package/middleware/stores/stores.js +48 -5
  44. package/middleware/themes/themes.js +49 -0
  45. package/middleware/virtual-config/virtual-config.js +11 -8
  46. package/middleware/wcm/wcm.js +4 -4
  47. package/notifications/notifications.js +27 -4
  48. package/package.json +30 -25
  49. package/server/index.js +508 -412
  50. package/server/standalone.js +9 -0
  51. package/temp/clusterlock/index.js +3 -3
  52. package/temp/clusterlock/package.json +1 -1
  53. package/temp/passport-saml/LICENSE +23 -0
  54. package/temp/passport-saml/README.md +406 -0
  55. package/temp/passport-saml/lib/node-saml/algorithms.d.ts +5 -0
  56. package/temp/passport-saml/lib/node-saml/algorithms.js +41 -0
  57. package/temp/passport-saml/lib/node-saml/algorithms.js.map +1 -0
  58. package/temp/passport-saml/lib/node-saml/index.d.ts +3 -0
  59. package/temp/passport-saml/lib/node-saml/index.js +6 -0
  60. package/temp/passport-saml/lib/node-saml/index.js.map +1 -0
  61. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.d.ts +45 -0
  62. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js +86 -0
  63. package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js.map +1 -0
  64. package/temp/passport-saml/lib/node-saml/saml-post-signing.d.ts +3 -0
  65. package/temp/passport-saml/lib/node-saml/saml-post-signing.js +15 -0
  66. package/temp/passport-saml/lib/node-saml/saml-post-signing.js.map +1 -0
  67. package/temp/passport-saml/lib/node-saml/saml.d.ts +77 -0
  68. package/temp/passport-saml/lib/node-saml/saml.js +1170 -0
  69. package/temp/passport-saml/lib/node-saml/saml.js.map +1 -0
  70. package/temp/passport-saml/lib/node-saml/types.d.ts +95 -0
  71. package/temp/passport-saml/lib/node-saml/types.js +8 -0
  72. package/temp/passport-saml/lib/node-saml/types.js.map +1 -0
  73. package/temp/passport-saml/lib/node-saml/utility.d.ts +3 -0
  74. package/temp/passport-saml/lib/node-saml/utility.js +19 -0
  75. package/temp/passport-saml/lib/node-saml/utility.js.map +1 -0
  76. package/temp/passport-saml/lib/node-saml/xml.d.ts +21 -0
  77. package/temp/passport-saml/lib/node-saml/xml.js +140 -0
  78. package/temp/passport-saml/lib/node-saml/xml.js.map +1 -0
  79. package/temp/passport-saml/lib/passport-saml/index.d.ts +6 -0
  80. package/temp/passport-saml/lib/passport-saml/index.js +11 -0
  81. package/temp/passport-saml/lib/passport-saml/index.js.map +1 -0
  82. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.d.ts +13 -0
  83. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js +63 -0
  84. package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js.map +1 -0
  85. package/temp/passport-saml/lib/passport-saml/strategy.d.ts +20 -0
  86. package/temp/passport-saml/lib/passport-saml/strategy.js +167 -0
  87. package/temp/passport-saml/lib/passport-saml/strategy.js.map +1 -0
  88. package/temp/passport-saml/lib/passport-saml/types.d.ts +51 -0
  89. package/temp/passport-saml/lib/passport-saml/types.js +11 -0
  90. package/temp/passport-saml/lib/passport-saml/types.js.map +1 -0
  91. package/temp/passport-saml/package.json +96 -0
  92. package/util/auth.js +6 -6
  93. package/util/cloudcms.js +85 -88
  94. package/util/proxy-factory.js +159 -268
  95. package/util/redis.js +113 -0
  96. package/util/renditions.js +12 -6
  97. package/util/request.js +48 -12
  98. package/util/util.js +16 -2
  99. package/launchpad/launchers/sticky-cluster.js +0 -43
  100. package/temp/memored/.jshintrc +0 -4
  101. package/temp/memored/README.md +0 -240
  102. package/temp/memored/demo/demo1.js +0 -37
  103. package/temp/memored/demo/demo2.js +0 -32
  104. package/temp/memored/gulpfile.js +0 -8
  105. package/temp/memored/index.js +0 -343
  106. package/temp/memored/package.json +0 -54
  107. package/temp/memored/spec/memored.spec.js +0 -265
  108. package/web/cms/ice.js +0 -109
  109. package/web/cms/preview.js +0 -106
@@ -28,6 +28,7 @@ var log = function(text, level)
28
28
  * "cache" the root of the cache
29
29
  * "public" the web host root (this might be public_build too)
30
30
  * "templates" the templates storage location (for client-side templates)
31
+ * "themes" the themes storage location (for client-side themes)
31
32
  * "modules" the deployed modules storage location (for client-side modules)
32
33
  * "config" the configuration storage location for static config (for client-side config)
33
34
  *
@@ -45,7 +46,7 @@ exports = module.exports = function()
45
46
  var engineId = storeConfiguration[storeType];
46
47
 
47
48
  var engine = ENGINES[engineId];
48
-
49
+
49
50
  var engineType = process.configuration.storeEngines[engineId].type;
50
51
  var engineConfiguration = process.configuration.storeEngines[engineId].config;
51
52
 
@@ -175,7 +176,7 @@ exports = module.exports = function()
175
176
  if (!stores) {
176
177
  return afterCheck();
177
178
  }
178
-
179
+
179
180
  return process.cache.read("module-descriptors-" + host, function(err, moduleDescriptorsForHost) {
180
181
 
181
182
  if (err) {
@@ -208,6 +209,7 @@ exports = module.exports = function()
208
209
  // these will get overwritten in the binding methods below
209
210
  stores["config"] = buildStore("config", host, "config");
210
211
  stores["templates"] = buildStore("templates", host, "templates");
212
+ stores["themes"] = buildStore("themes", host, "themes");
211
213
 
212
214
  var bindWebStore = function(done) {
213
215
 
@@ -482,7 +484,43 @@ exports = module.exports = function()
482
484
  callback();
483
485
  });
484
486
  };
485
-
487
+
488
+ var bindThemeStores = function(moduleDescriptors, callback)
489
+ {
490
+ // all theme stores
491
+ var themeStores = [];
492
+ for (var i = 0; i < moduleDescriptors.length; i++)
493
+ {
494
+ var moduleStoreType = moduleDescriptors[i].store;
495
+ var modulePath = moduleDescriptors[i].path;
496
+
497
+ var storePath = path.join(modulePath, "themes");
498
+ if (moduleStoreType === "modules")
499
+ {
500
+ storePath = path.join("modules", storePath);
501
+ }
502
+
503
+ var themeStore = buildStore(moduleStoreType, host, storePath);
504
+ themeStores.push(themeStore);
505
+ }
506
+
507
+ // trim back and only keep stores that are allocated
508
+ retainAllocatedStores(themeStores, function(err, allocatedStores) {
509
+
510
+ // all stores to be bound in
511
+ var bindingStores = [];
512
+ for (var i = 0; i < allocatedStores.length; i++) {
513
+ bindingStores.push(allocatedStores[i]);
514
+ }
515
+ bindingStores.push(stores.themes);
516
+
517
+ // bind into a multi-store
518
+ stores["themes"] = require("./multistore")(bindingStores);
519
+
520
+ callback();
521
+ });
522
+ };
523
+
486
524
  process.cache.read("module-descriptors-" + host, function(err, moduleDescriptors) {
487
525
 
488
526
  moduleDescriptors = null;
@@ -495,7 +533,9 @@ exports = module.exports = function()
495
533
 
496
534
  bindConfigStores(moduleDescriptors, function () {
497
535
  bindTemplateStores(moduleDescriptors, function() {
498
- done();
536
+ bindThemeStores(moduleDescriptors, function() {
537
+ done();
538
+ });
499
539
  });
500
540
  });
501
541
 
@@ -505,7 +545,9 @@ exports = module.exports = function()
505
545
  {
506
546
  bindConfigStores(moduleDescriptors, function() {
507
547
  bindTemplateStores(moduleDescriptors, function() {
508
- done();
548
+ bindThemeStores(moduleDescriptors, function() {
549
+ done();
550
+ });
509
551
  });
510
552
  });
511
553
  }
@@ -566,6 +608,7 @@ exports = module.exports = function()
566
608
  req.contentStore = stores["content"];
567
609
  req.webStore = stores["web"];
568
610
  req.templatesStore = stores["templates"];
611
+ req.themesStore = stores["themes"];
569
612
  req.modulesStore = stores["modules"];
570
613
 
571
614
  // sort the module descriptors by id
@@ -0,0 +1,49 @@
1
+ var path = require('path');
2
+ var util = require("../../util/util");
3
+
4
+ exports = module.exports = function()
5
+ {
6
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////
7
+ //
8
+ // RESULTING OBJECT
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////////////////////////////////////
11
+
12
+ var r = {};
13
+
14
+ /**
15
+ * Retrieves themes for the application.
16
+ *
17
+ * @return {Function}
18
+ */
19
+ r.handler = function()
20
+ {
21
+ return util.createHandler("themes", function(req, res, next, stores, cache, configuration) {
22
+
23
+ var themeStore = stores.themes;
24
+
25
+ var handled = false;
26
+
27
+ if (req.method.toLowerCase() === "get") {
28
+
29
+ if (req.url.indexOf("/_themes") === 0)
30
+ {
31
+ var filePath = req.path.substring(8);
32
+
33
+ themeStore.sendFile(res, filePath, null, function(err) {
34
+ next(err);
35
+ });
36
+
37
+ handled = true;
38
+ }
39
+ }
40
+
41
+ if (!handled)
42
+ {
43
+ next();
44
+ }
45
+ });
46
+ };
47
+
48
+ return r;
49
+ }();
@@ -33,9 +33,12 @@ exports = module.exports = function()
33
33
  // force key to "virtualdriver"
34
34
  configuration.virtualDriver.key = VIRTUAL_DRIVER_CACHE_KEY;
35
35
 
36
+ console.log("a1: " + JSON.stringify(configuration.virtualDriver, null, 2));
37
+
36
38
  // either connect anew or re-use an existing connection to Cloud CMS for this application
37
39
  Gitana.connect(configuration.virtualDriver, function(err) {
38
-
40
+
41
+ console.log("a2:" + err);
39
42
  if (err)
40
43
  {
41
44
  return callback(err);
@@ -83,7 +86,7 @@ exports = module.exports = function()
83
86
 
84
87
  var URL = configuration.virtualDriver.baseURL;
85
88
  if (!URL) {
86
- URL = util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT);
89
+ URL = util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT, process.env.GITANA_PROXY_PATH);
87
90
  }
88
91
  URL += "/virtual/driver/config";
89
92
  var requestConfig = {
@@ -143,10 +146,10 @@ exports = module.exports = function()
143
146
  }
144
147
  };
145
148
 
146
- var _LOCK = function(lockKey, workFunction)
147
- {
148
- process.locks.lock(lockKey, workFunction);
149
- };
149
+ // var _LOCK = function(lockKey, workFunction)
150
+ // {
151
+ // process.locks.lock(lockKey, workFunction);
152
+ // };
150
153
 
151
154
  var r = {};
152
155
 
@@ -213,7 +216,7 @@ exports = module.exports = function()
213
216
  }
214
217
  if (!gitanaJson.baseURL)
215
218
  {
216
- gitanaJson.baseURL = util.cleanupURL(util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT));
219
+ gitanaJson.baseURL = util.cleanupURL(util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT, process.env.GITANA_PROXY_PATH));
217
220
  }
218
221
 
219
222
  // mark as retrieved from virtual driver
@@ -336,7 +339,7 @@ exports = module.exports = function()
336
339
  // defaults
337
340
  if (!configuration.baseURL)
338
341
  {
339
- configuration.baseURL = util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT);
342
+ configuration.baseURL = util.asURL(process.env.GITANA_PROXY_SCHEME, process.env.GITANA_PROXY_HOST, process.env.GITANA_PROXY_PORT, process.env.GITANA_PROXY_PATH);
340
343
  }
341
344
  if (!configuration.key) {
342
345
  configuration.key = "virtual";
@@ -309,7 +309,7 @@ exports = module.exports = function()
309
309
  req.application(function (err, application) {
310
310
 
311
311
  var loadingPagesCacheKey = application._doc + "-wcm-loading-pages";
312
- _LOCK(null, loadingPagesCacheKey, function (releaseLockFn) {
312
+ _LOCK(null, loadingPagesCacheKey, function (err, releaseLockFn) {
313
313
 
314
314
  // check again inside lock in case another request preloaded this before we arrived
315
315
  req.cache.read(WCM_PAGES, function (err, cachedPages) {
@@ -716,7 +716,7 @@ exports = module.exports = function()
716
716
  var cacheFilePath = cloudcms.toCacheFilePath(pageFilePath);
717
717
 
718
718
  // take out a lock so that only one "request" can write to cache at a time for this path
719
- _LOCK(contentStore, _lock_identifier(pageBasePath), function(releaseLockFn) {
719
+ _LOCK(contentStore, _lock_identifier(pageBasePath), function(err, releaseLockFn) {
720
720
 
721
721
  // write page file
722
722
  contentStore.writeFile(pageFilePath, text, function (err) {
@@ -773,7 +773,7 @@ exports = module.exports = function()
773
773
  var cacheFilePath = cloudcms.toCacheFilePath(pageFilePath);
774
774
 
775
775
  // take out a lock so that only one "request" can read from cache at a time for this path
776
- _LOCK(contentStore, _lock_identifier(pageBasePath), function(releaseLockFn) {
776
+ _LOCK(contentStore, _lock_identifier(pageBasePath), function(err, releaseLockFn) {
777
777
 
778
778
  contentStore.readFile(cacheFilePath, function(err, cacheInfoString) {
779
779
 
@@ -858,7 +858,7 @@ exports = module.exports = function()
858
858
 
859
859
  var _handleCachePageInvalidate = function(contentStore, pageBasePath, callback)
860
860
  {
861
- _LOCK(contentStore, _lock_identifier(pageBasePath), function(releaseLockFn) {
861
+ _LOCK(contentStore, _lock_identifier(pageBasePath), function(err, releaseLockFn) {
862
862
 
863
863
  contentStore.existsDirectory(pageBasePath, function (exists) {
864
864
 
@@ -76,6 +76,7 @@ var handleNotificationMessages = function(items, callback) {
76
76
  return function(done) {
77
77
 
78
78
  //logFn("WORKING ON ITEM: " + i + ", item: " + JSON.stringify(item, null, " "));
79
+ console.log("WORKING ON ITEM: " + i + ", item: " + JSON.stringify(item, null, " "));
79
80
 
80
81
  var operation = item.operation;
81
82
 
@@ -183,7 +184,7 @@ var handleNotificationMessages = function(items, callback) {
183
184
  var platformId = obj.platformId;
184
185
  var applicationId = obj.applicationId;
185
186
  var themeId = obj.themeId;
186
- var templateKey = obj.templateKey;
187
+ var themeKey = obj.themeKey;
187
188
 
188
189
  // broadcast the "invalidate_theme" event
189
190
  process.broadcast.publish("invalidate_theme", {
@@ -191,7 +192,29 @@ var handleNotificationMessages = function(items, callback) {
191
192
  "platformId": platformId,
192
193
  "applicationId": applicationId,
193
194
  "themeId": themeId,
194
- "templateKey": templateKey
195
+ "themeKey": themeKey
196
+ }, z_done);
197
+ }
198
+ else if (type === "themeAssignment")
199
+ {
200
+ var platformId = obj.platformId;
201
+ var applicationId = obj.applicationId;
202
+ var projectId = obj.projectId;
203
+ var domainId = obj.domainId;
204
+ var principalId = obj.principalId;
205
+ var themeId = obj.themeId;
206
+ var operation = obj.operation;
207
+
208
+ // broadcast the "invalidate_theme_assignment" event
209
+ process.broadcast.publish("invalidate_theme_assignment", {
210
+ "host": host,
211
+ "platformId": platformId,
212
+ "applicationId": applicationId,
213
+ "projectId": projectId,
214
+ "domainId": domainId,
215
+ "principalId": principalId,
216
+ "themeId": themeId,
217
+ "operation": operation
195
218
  }, z_done);
196
219
  }
197
220
  else if (type === "tenant")
@@ -636,7 +659,7 @@ module.exports = function()
636
659
  var r = {};
637
660
 
638
661
  r.start = function(callback) {
639
-
662
+
640
663
  var config = process.configuration;
641
664
  if (!config["notifications"])
642
665
  {
@@ -663,7 +686,7 @@ module.exports = function()
663
686
  notifications.enabled = true;
664
687
  }
665
688
  }
666
-
689
+
667
690
  if (notifications.enabled)
668
691
  {
669
692
  if (process.env.CLOUDCMS_NOTIFICATIONS_TYPE)
package/package.json CHANGED
@@ -6,51 +6,60 @@
6
6
  },
7
7
  "name": "cloudcms-server",
8
8
  "description": "Cloud CMS Application Server Module",
9
- "version": "3.3.1-beta.8",
9
+ "version": "4.0.0-beta.1",
10
10
  "repository": {
11
11
  "type": "git",
12
12
  "url": "git://github.com/gitana/cloudcms-server.git"
13
13
  },
14
14
  "dependencies": {
15
- "accepts": "^1.3.7",
16
- "agentkeepalive": "^4.1.3",
15
+ "@socket.io/cluster-adapter": "^0.2.0",
16
+ "@socket.io/redis-adapter": "^7.2.0",
17
+ "@socket.io/sticky": "^1.0.1",
18
+ "accepts": "^1.3.8",
19
+ "agentkeepalive": "^4.2.1",
17
20
  "alpaca": "^1.5.27",
18
21
  "archiver": "^5.1.0",
19
- "async": "^3.2.0",
20
- "aws-sdk": "^2.807.0",
22
+ "async": "^3.2.3",
23
+ "async-lock": "^1.3.2",
24
+ "aws-sdk": "^2.1208.0",
21
25
  "axios": "^0.21.0",
22
26
  "basic-auth": "^2.0.1",
23
- "body-parser": "^1.19.0",
27
+ "body-parser": "^1.20.0",
24
28
  "bytes": "^3.1.0",
25
29
  "canoe": "^0.3.3",
26
30
  "clone": "^2.1.2",
27
31
  "connect-flash": "^0.1.1",
28
32
  "connect-multiparty": "^2.2.0",
29
- "connect-redis": "^5.0.0",
33
+ "connect-redis": "^6.1.3",
30
34
  "consolidate": "^0.16.0",
31
35
  "cookie-parser": "^1.4.5",
32
36
  "debug": "^4.3.1",
33
37
  "dustjs-helpers": "^1.7.4",
34
- "dustjs-linkedin": "^2.7.5",
38
+ "dustjs-linkedin": "^3.0.1",
35
39
  "errorhandler": "^1.5.1",
36
- "express": "^4.17.1",
37
- "express-session": "^1.17.1",
40
+ "express": "^4.18.1",
41
+ "express-session": "^1.17.3",
38
42
  "express-useragent": "^1.0.15",
39
43
  "extend-with-super": "^2.0.0",
40
- "gitana": "^1.0.320",
44
+ "finalhandler": "^1.2.0",
45
+ "form-data": "^2.3.3",
46
+ "gitana": "^1.0.322",
41
47
  "handlebars": "^4.7.6",
42
48
  "hbs": "^4.1.1",
43
- "http-proxy": "^1.18.1",
49
+ "helmet": "^4.6.0",
50
+ "http2-proxy": "^5.0.53",
51
+ "ioredis": "4.28.5",
44
52
  "json5": "^2.1.3",
45
53
  "jsonwebtoken": "^8.5.1",
46
54
  "klaw": "^3.0.0",
47
55
  "lru-cache": "^6.0.0",
48
- "marked": "^1.2.5",
56
+ "marked": "^4.0.14",
57
+ "memored": "^1.1.1",
49
58
  "memorystore": "^1.6.4",
50
59
  "mime": "^2.4.6",
60
+ "mkdirp": "^0.5.1",
51
61
  "moment": "^2.29.1",
52
62
  "morgan": "^1.10.0",
53
- "node-redis-pubsub": "^4.0.0",
54
63
  "object-hash": "^2.0.3",
55
64
  "object-merge": "^2.5.1",
56
65
  "on-headers": "^1.0.2",
@@ -62,31 +71,27 @@
62
71
  "passport-linkedin": "^1.0.0",
63
72
  "passport-local": "^1.0.0",
64
73
  "passport-oauth": "^1.0.0",
65
- "passport-saml": "^2.0.2",
66
- "passport-twitter": "^1.0.4",
74
+ "passport-saml": "^2.2.0",
75
+ "passport-twitter": "^0.1.5",
67
76
  "pkginfo": "^0.4.1",
68
- "q": "^1.5.1",
69
77
  "random-js": "^2.1.0",
70
78
  "recursive-readdir": "^2.2.2",
71
- "redis": "^3.0.2",
72
- "redislock": "^1.3.0",
79
+ "redis": "^4.2.0",
80
+ "redlock": "4.2.0",
73
81
  "request-param": "^1.0.1",
74
82
  "response-time": "^2.3.2",
75
- "rwlock": "^5.0.0",
76
- "semver": "^7.3.4",
83
+ "semver": "^7.3.7",
77
84
  "serve-favicon": "^2.5.0",
78
85
  "session-file-store": "^1.5.0",
79
86
  "sha1": "^1.1.1",
80
- "socket.io": "4.1.2",
87
+ "socket.io": "^4.5.1",
81
88
  "ssl-root-cas": "^1.3.1",
82
- "sticky-session": "^1.1.2",
83
89
  "stomp-client": "^0.9.0",
84
90
  "targz": "^1.0.1",
85
91
  "temp": "^0.9.4",
86
- "toobusy-js": "^0.5.1",
87
92
  "uuid": "^8.3.2",
88
93
  "vm2": "^3.9.2",
89
- "watch": "^1.0.2",
94
+ "watch": "^0.13.0",
90
95
  "winston": "^3.3.3"
91
96
  },
92
97
  "contributors": [