Просмотр исходного кода

Merge pull request #10128 from overleaf/bg-upgrade-socket-io

upgrade socket.io in real-time

GitOrigin-RevId: 263e52a838a438641690324fc8151445581fd3f3
Brian Gough 3 лет назад
Родитель
Сommit
ba68db6ba7
3 измененных файлов с 107 добавлено и 302 удалено
  1. 92 298
      package-lock.json
  2. 13 2
      services/real-time/app.js
  3. 2 2
      services/real-time/package.json

+ 92 - 298
package-lock.json

@@ -5132,14 +5132,11 @@
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "dev": true
       "dev": true
     },
     },
-    "node_modules/@socket.io/base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6.0"
-      }
+    "node_modules/@socket.io/component-emitter": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
+      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
+      "dev": true
     },
     },
     "node_modules/@szmarczak/http-timer": {
     "node_modules/@szmarczak/http-timer": {
       "version": "1.1.2",
       "version": "1.1.2",
@@ -5393,12 +5390,6 @@
       "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
       "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
       "dev": true
       "dev": true
     },
     },
-    "node_modules/@types/component-emitter": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
-      "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==",
-      "dev": true
-    },
     "node_modules/@types/connect": {
     "node_modules/@types/connect": {
       "version": "3.4.35",
       "version": "3.4.35",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
@@ -6703,17 +6694,6 @@
         "node": ">=0.4.0"
         "node": ">=0.4.0"
       }
       }
     },
     },
-    "node_modules/active-x-obfuscator": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz",
-      "integrity": "sha1-CJuJs3FF/x2ex0r2UwvlUmyuHxo=",
-      "dependencies": {
-        "zeparser": "0.0.5"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/addressparser": {
     "node_modules/addressparser": {
       "version": "1.0.1",
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
@@ -11902,9 +11882,9 @@
       }
       }
     },
     },
     "node_modules/engine.io": {
     "node_modules/engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
+      "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "@types/cookie": "^0.4.1",
         "@types/cookie": "^0.4.1",
@@ -11923,13 +11903,10 @@
       }
       }
     },
     },
     "node_modules/engine.io-parser": {
     "node_modules/engine.io-parser": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
-      "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
+      "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
       "dev": true,
       "dev": true,
-      "dependencies": {
-        "@socket.io/base64-arraybuffer": "~1.0.2"
-      },
       "engines": {
       "engines": {
         "node": ">=10.0.0"
         "node": ">=10.0.0"
       }
       }
@@ -18936,17 +18913,17 @@
       }
       }
     },
     },
     "node_modules/karma/node_modules/socket.io": {
     "node_modules/karma/node_modules/socket.io": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
-      "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
+      "version": "4.5.3",
+      "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
+      "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "accepts": "~1.3.4",
         "accepts": "~1.3.4",
         "base64id": "~2.0.0",
         "base64id": "~2.0.0",
         "debug": "~4.3.2",
         "debug": "~4.3.2",
-        "engine.io": "~6.1.0",
-        "socket.io-adapter": "~2.3.3",
-        "socket.io-parser": "~4.0.4"
+        "engine.io": "~6.2.0",
+        "socket.io-adapter": "~2.4.0",
+        "socket.io-parser": "~4.2.0"
       },
       },
       "engines": {
       "engines": {
         "node": ">=10.0.0"
         "node": ">=10.0.0"
@@ -22968,7 +22945,7 @@
     "node_modules/options": {
     "node_modules/options": {
       "version": "0.0.6",
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
       "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
-      "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=",
+      "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg==",
       "engines": {
       "engines": {
         "node": ">=0.4.0"
         "node": ">=0.4.0"
       }
       }
@@ -27438,12 +27415,11 @@
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
       "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
     },
     },
     "node_modules/socket.io": {
     "node_modules/socket.io": {
-      "version": "0.9.19-overleaf-6",
-      "resolved": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
+      "version": "0.9.19-overleaf-9",
+      "resolved": "git+ssh://git@github.com/overleaf/socket.io.git#98413354b8319f84c50268acfb67c46c30fce365",
       "dependencies": {
       "dependencies": {
         "base64id": "0.1.0",
         "base64id": "0.1.0",
-        "policyfile": "0.0.4",
-        "socket.io-client": "https://github.com/overleaf/socket.io-client/archive/0.9.17-overleaf-3.tar.gz"
+        "policyfile": "0.0.4"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.4.0"
         "node": ">= 0.4.0"
@@ -27453,65 +27429,29 @@
       }
       }
     },
     },
     "node_modules/socket.io-adapter": {
     "node_modules/socket.io-adapter": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
-      "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
+      "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
       "dev": true
       "dev": true
     },
     },
     "node_modules/socket.io-client": {
     "node_modules/socket.io-client": {
-      "version": "0.9.17-overleaf-3",
-      "resolved": "https://github.com/overleaf/socket.io-client/archive/0.9.17-overleaf-3.tar.gz",
-      "integrity": "sha512-EtKV6qGQjG/DwMXfLAiS559f07xjPVavYZ+amYwiEZ0FUHdLObuGH3zvoxghjbI6l8gFTflQhGt1foiHIGnDKg==",
+      "version": "0.9.17-overleaf-5",
+      "resolved": "git+ssh://git@github.com/overleaf/socket.io-client.git#805a73d2a2e2408982597d5986a401088b7aa588",
       "dependencies": {
       "dependencies": {
-        "active-x-obfuscator": "0.0.1",
-        "uglify-js": "1.2.5",
-        "ws": "0.4.x",
-        "xmlhttprequest": "1.4.2"
+        "ws": "^1.1.5",
+        "xmlhttprequest": "^1.8.0"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.4.0"
         "node": ">= 0.4.0"
       }
       }
     },
     },
-    "node_modules/socket.io-client/node_modules/commander": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
-      "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=",
-      "engines": {
-        "node": ">= 0.6.x"
-      }
-    },
-    "node_modules/socket.io-client/node_modules/nan": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
-      "integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg="
-    },
-    "node_modules/socket.io-client/node_modules/uglify-js": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
-      "integrity": "sha1-tULCx29477NLIAsgF3Y0Mw/3ArY=",
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/socket.io-client/node_modules/ws": {
     "node_modules/socket.io-client/node_modules/ws": {
-      "version": "0.4.32",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
-      "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=",
-      "hasInstallScript": true,
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+      "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
       "dependencies": {
       "dependencies": {
-        "commander": "~2.1.0",
-        "nan": "~1.0.0",
         "options": ">=0.0.5",
         "options": ">=0.0.5",
-        "tinycolor": "0.x"
-      },
-      "bin": {
-        "wscat": "bin/wscat"
-      },
-      "engines": {
-        "node": ">=0.4.0"
+        "ultron": "1.0.x"
       }
       }
     },
     },
     "node_modules/socket.io-mock": {
     "node_modules/socket.io-mock": {
@@ -27524,13 +27464,12 @@
       }
       }
     },
     },
     "node_modules/socket.io-parser": {
     "node_modules/socket.io-parser": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
-      "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
+      "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "@types/component-emitter": "^1.2.10",
-        "component-emitter": "~1.3.0",
+        "@socket.io/component-emitter": "~3.1.0",
         "debug": "~4.3.1"
         "debug": "~4.3.1"
       },
       },
       "engines": {
       "engines": {
@@ -29191,14 +29130,6 @@
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
     },
-    "node_modules/tinycolor": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
-      "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ=",
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/tlds": {
     "node_modules/tlds": {
       "version": "1.228.0",
       "version": "1.228.0",
       "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.228.0.tgz",
       "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.228.0.tgz",
@@ -29775,6 +29706,11 @@
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
       "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
       "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
     },
     },
+    "node_modules/ultron": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+      "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow=="
+    },
     "node_modules/umzug": {
     "node_modules/umzug": {
       "version": "2.3.0",
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
       "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
@@ -31300,9 +31236,9 @@
       "dev": true
       "dev": true
     },
     },
     "node_modules/xmlhttprequest": {
     "node_modules/xmlhttprequest": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz",
-      "integrity": "sha1-AUU6HZvtHo8XL2SVu/TIxCYyFQA=",
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==",
       "engines": {
       "engines": {
         "node": ">=0.4.0"
         "node": ">=0.4.0"
       }
       }
@@ -31530,14 +31466,6 @@
         "node": ">= 0.10"
         "node": ">= 0.10"
       }
       }
     },
     },
-    "node_modules/zeparser": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz",
-      "integrity": "sha1-A3JlYbwmjy5URPVMZlt/1KjAKeI=",
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/zip-stream": {
     "node_modules/zip-stream": {
       "version": "4.1.0",
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
       "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
@@ -33636,8 +33564,8 @@
         "express-session": "^1.17.1",
         "express-session": "^1.17.1",
         "proxy-addr": "^2.0.7",
         "proxy-addr": "^2.0.7",
         "request": "^2.88.2",
         "request": "^2.88.2",
-        "socket.io": "overleaf/socket.io#0.9.19-overleaf-6",
-        "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
+        "socket.io": "github:overleaf/socket.io#0.9.19-overleaf-9",
+        "socket.io-client": "github:overleaf/socket.io-client#0.9.17-overleaf-5",
         "underscore": "1.13.1"
         "underscore": "1.13.1"
       },
       },
       "devDependencies": {
       "devDependencies": {
@@ -33651,19 +33579,6 @@
         "uid-safe": "^2.1.5"
         "uid-safe": "^2.1.5"
       }
       }
     },
     },
-    "services/real-time/node_modules/commander": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
-      "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ==",
-      "engines": {
-        "node": ">= 0.6.x"
-      }
-    },
-    "services/real-time/node_modules/nan": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
-      "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA=="
-    },
     "services/real-time/node_modules/sandboxed-module": {
     "services/real-time/node_modules/sandboxed-module": {
       "version": "0.3.0",
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
       "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
@@ -33674,19 +33589,6 @@
         "stack-trace": "0.0.6"
         "stack-trace": "0.0.6"
       }
       }
     },
     },
-    "services/real-time/node_modules/socket.io-client": {
-      "version": "0.9.17-overleaf-3",
-      "resolved": "git+ssh://git@github.com/overleaf/socket.io-client.git#60e7aa96978e890dcfc244071de0284e9174e125",
-      "dependencies": {
-        "active-x-obfuscator": "0.0.1",
-        "uglify-js": "1.2.5",
-        "ws": "0.4.x",
-        "xmlhttprequest": "1.4.2"
-      },
-      "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
     "services/real-time/node_modules/stack-trace": {
     "services/real-time/node_modules/stack-trace": {
       "version": "0.0.6",
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
       "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
@@ -33702,40 +33604,11 @@
       "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
       "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
       "dev": true
       "dev": true
     },
     },
-    "services/real-time/node_modules/uglify-js": {
-      "version": "1.2.5",
-      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
-      "integrity": "sha512-Ps1oQryKOcRDYuAN1tGpPWd/DIRMcdLz4p7JMxLjJiFvp+aaG01IEu0ZSoVvYUSxIkvW7k2X50BCW2InguEGlg==",
-      "bin": {
-        "uglifyjs": "bin/uglifyjs"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "services/real-time/node_modules/underscore": {
     "services/real-time/node_modules/underscore": {
       "version": "1.13.1",
       "version": "1.13.1",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
       "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
       "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
     },
     },
-    "services/real-time/node_modules/ws": {
-      "version": "0.4.32",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
-      "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==",
-      "hasInstallScript": true,
-      "dependencies": {
-        "commander": "~2.1.0",
-        "nan": "~1.0.0",
-        "options": ">=0.0.5",
-        "tinycolor": "0.x"
-      },
-      "bin": {
-        "wscat": "bin/wscat"
-      },
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "services/references": {
     "services/references": {
       "name": "@overleaf/references",
       "name": "@overleaf/references",
       "dependencies": {
       "dependencies": {
@@ -41412,23 +41285,13 @@
         "request": "^2.88.2",
         "request": "^2.88.2",
         "sandboxed-module": "~0.3.0",
         "sandboxed-module": "~0.3.0",
         "sinon": "^9.2.4",
         "sinon": "^9.2.4",
-        "socket.io": "overleaf/socket.io#0.9.19-overleaf-6",
-        "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
+        "socket.io": "github:overleaf/socket.io#0.9.19-overleaf-9",
+        "socket.io-client": "github:overleaf/socket.io-client#0.9.17-overleaf-5",
         "timekeeper": "0.0.4",
         "timekeeper": "0.0.4",
         "uid-safe": "^2.1.5",
         "uid-safe": "^2.1.5",
         "underscore": "1.13.1"
         "underscore": "1.13.1"
       },
       },
       "dependencies": {
       "dependencies": {
-        "commander": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
-          "integrity": "sha512-J2wnb6TKniXNOtoHS8TSrG9IOQluPrsmyAJ8oCUJOBmv+uLBCyPYAZkD2jFvw2DCzIXNnISIM01NIvr35TkBMQ=="
-        },
-        "nan": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
-          "integrity": "sha512-Wm2/nFOm2y9HtJfgOLnctGbfvF23FcQZeyUZqDD8JQG3zO5kXh3MkQKiUaA68mJiVWrOzLFkAV1u6bC8P52DJA=="
-        },
         "sandboxed-module": {
         "sandboxed-module": {
           "version": "0.3.0",
           "version": "0.3.0",
           "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
           "resolved": "https://registry.npmjs.org/sandboxed-module/-/sandboxed-module-0.3.0.tgz",
@@ -41439,16 +41302,6 @@
             "stack-trace": "0.0.6"
             "stack-trace": "0.0.6"
           }
           }
         },
         },
-        "socket.io-client": {
-          "version": "git+ssh://git@github.com/overleaf/socket.io-client.git#60e7aa96978e890dcfc244071de0284e9174e125",
-          "from": "socket.io-client@overleaf/socket.io-client#0.9.17-overleaf-3",
-          "requires": {
-            "active-x-obfuscator": "0.0.1",
-            "uglify-js": "1.2.5",
-            "ws": "0.4.x",
-            "xmlhttprequest": "1.4.2"
-          }
-        },
         "stack-trace": {
         "stack-trace": {
           "version": "0.0.6",
           "version": "0.0.6",
           "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
           "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.6.tgz",
@@ -41461,26 +41314,10 @@
           "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
           "integrity": "sha1-kNt58X2Ni1NiFUOJSSuXJ2LP0nY=",
           "dev": true
           "dev": true
         },
         },
-        "uglify-js": {
-          "version": "1.2.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
-          "integrity": "sha512-Ps1oQryKOcRDYuAN1tGpPWd/DIRMcdLz4p7JMxLjJiFvp+aaG01IEu0ZSoVvYUSxIkvW7k2X50BCW2InguEGlg=="
-        },
         "underscore": {
         "underscore": {
           "version": "1.13.1",
           "version": "1.13.1",
           "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
           "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
           "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
           "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
-        },
-        "ws": {
-          "version": "0.4.32",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
-          "integrity": "sha512-htqsS0U9Z9lb3ITjidQkRvkLdVhQePrMeu475yEfOWkAYvJ6dSjQp1tOH6ugaddzX5b7sQjMPNtY71eTzrV/kA==",
-          "requires": {
-            "commander": "~2.1.0",
-            "nan": "~1.0.0",
-            "options": ">=0.0.5",
-            "tinycolor": "0.x"
-          }
         }
         }
       }
       }
     },
     },
@@ -44423,10 +44260,10 @@
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "dev": true
       "dev": true
     },
     },
-    "@socket.io/base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
+    "@socket.io/component-emitter": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
+      "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==",
       "dev": true
       "dev": true
     },
     },
     "@szmarczak/http-timer": {
     "@szmarczak/http-timer": {
@@ -44608,12 +44445,6 @@
       "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
       "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==",
       "dev": true
       "dev": true
     },
     },
-    "@types/component-emitter": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
-      "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==",
-      "dev": true
-    },
     "@types/connect": {
     "@types/connect": {
       "version": "3.4.35",
       "version": "3.4.35",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
@@ -45700,14 +45531,6 @@
       "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
       "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
       "dev": true
       "dev": true
     },
     },
-    "active-x-obfuscator": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz",
-      "integrity": "sha1-CJuJs3FF/x2ex0r2UwvlUmyuHxo=",
-      "requires": {
-        "zeparser": "0.0.5"
-      }
-    },
     "addressparser": {
     "addressparser": {
       "version": "1.0.1",
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
       "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
@@ -49833,9 +49656,9 @@
       }
       }
     },
     },
     "engine.io": {
     "engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz",
+      "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
         "@types/cookie": "^0.4.1",
         "@types/cookie": "^0.4.1",
@@ -49872,13 +49695,10 @@
       }
       }
     },
     },
     "engine.io-parser": {
     "engine.io-parser": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
-      "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
-      "dev": true,
-      "requires": {
-        "@socket.io/base64-arraybuffer": "~1.0.2"
-      }
+      "version": "5.0.4",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
+      "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
+      "dev": true
     },
     },
     "enhanced-resolve": {
     "enhanced-resolve": {
       "version": "5.9.2",
       "version": "5.9.2",
@@ -55225,17 +55045,17 @@
           }
           }
         },
         },
         "socket.io": {
         "socket.io": {
-          "version": "4.4.1",
-          "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.4.1.tgz",
-          "integrity": "sha512-s04vrBswdQBUmuWJuuNTmXUVJhP0cVky8bBDhdkf8y0Ptsu7fKU2LuLbts9g+pdmAdyMMn8F/9Mf1/wbtUN0fg==",
+          "version": "4.5.3",
+          "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
+          "integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
           "dev": true,
           "dev": true,
           "requires": {
           "requires": {
             "accepts": "~1.3.4",
             "accepts": "~1.3.4",
             "base64id": "~2.0.0",
             "base64id": "~2.0.0",
             "debug": "~4.3.2",
             "debug": "~4.3.2",
-            "engine.io": "~6.1.0",
-            "socket.io-adapter": "~2.3.3",
-            "socket.io-parser": "~4.0.4"
+            "engine.io": "~6.2.0",
+            "socket.io-adapter": "~2.4.0",
+            "socket.io-parser": "~4.2.0"
           }
           }
         },
         },
         "source-map": {
         "source-map": {
@@ -58555,7 +58375,7 @@
     "options": {
     "options": {
       "version": "0.0.6",
       "version": "0.0.6",
       "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
       "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
-      "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+      "integrity": "sha512-bOj3L1ypm++N+n7CEbbe473A414AB7z+amKYshRb//iuL3MpdDCLhPnw6aVTdKB9g5ZRVHIEp8eUln6L2NUStg=="
     },
     },
     "ordered-read-streams": {
     "ordered-read-streams": {
       "version": "1.0.1",
       "version": "1.0.1",
@@ -62551,13 +62371,12 @@
       }
       }
     },
     },
     "socket.io": {
     "socket.io": {
-      "version": "git+ssh://git@github.com/overleaf/socket.io.git#af96d1b68d9918ee0f9cb82c62990395b0a601fb",
-      "from": "socket.io@overleaf/socket.io#0.9.19-overleaf-6",
+      "version": "git+ssh://git@github.com/overleaf/socket.io.git#98413354b8319f84c50268acfb67c46c30fce365",
+      "from": "socket.io@github:overleaf/socket.io#0.9.19-overleaf-9",
       "requires": {
       "requires": {
         "base64id": "0.1.0",
         "base64id": "0.1.0",
         "policyfile": "0.0.4",
         "policyfile": "0.0.4",
-        "redis": "0.7.3",
-        "socket.io-client": "https://github.com/overleaf/socket.io-client/archive/0.9.17-overleaf-3.tar.gz"
+        "redis": "0.7.3"
       },
       },
       "dependencies": {
       "dependencies": {
         "redis": {
         "redis": {
@@ -62569,45 +62388,26 @@
       }
       }
     },
     },
     "socket.io-adapter": {
     "socket.io-adapter": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.3.tgz",
-      "integrity": "sha512-Qd/iwn3VskrpNO60BeRyCyr8ZWw9CPZyitW4AQwmRZ8zCiyDiL+znRnWX6tDHXnWn1sJrM1+b6Mn6wEDJJ4aYQ==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
+      "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
       "dev": true
       "dev": true
     },
     },
     "socket.io-client": {
     "socket.io-client": {
-      "version": "https://github.com/overleaf/socket.io-client/archive/0.9.17-overleaf-3.tar.gz",
-      "integrity": "sha512-EtKV6qGQjG/DwMXfLAiS559f07xjPVavYZ+amYwiEZ0FUHdLObuGH3zvoxghjbI6l8gFTflQhGt1foiHIGnDKg==",
+      "version": "git+ssh://git@github.com/overleaf/socket.io-client.git#805a73d2a2e2408982597d5986a401088b7aa588",
+      "from": "socket.io-client@github:overleaf/socket.io-client#0.9.17-overleaf-5",
       "requires": {
       "requires": {
-        "active-x-obfuscator": "0.0.1",
-        "uglify-js": "1.2.5",
-        "ws": "0.4.x",
-        "xmlhttprequest": "1.4.2"
+        "ws": "^1.1.5",
+        "xmlhttprequest": "^1.8.0"
       },
       },
       "dependencies": {
       "dependencies": {
-        "commander": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz",
-          "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E="
-        },
-        "nan": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz",
-          "integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg="
-        },
-        "uglify-js": {
-          "version": "1.2.5",
-          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz",
-          "integrity": "sha1-tULCx29477NLIAsgF3Y0Mw/3ArY="
-        },
         "ws": {
         "ws": {
-          "version": "0.4.32",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz",
-          "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=",
+          "version": "1.1.5",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz",
+          "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==",
           "requires": {
           "requires": {
-            "commander": "~2.1.0",
-            "nan": "~1.0.0",
             "options": ">=0.0.5",
             "options": ">=0.0.5",
-            "tinycolor": "0.x"
+            "ultron": "1.0.x"
           }
           }
         }
         }
       }
       }
@@ -62622,13 +62422,12 @@
       }
       }
     },
     },
     "socket.io-parser": {
     "socket.io-parser": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz",
-      "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==",
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.1.tgz",
+      "integrity": "sha512-V4GrkLy+HeF1F/en3SpUaM+7XxYXpuMUWLGde1kSSh5nQMN4hLrbPIkD+otwh6q9R6NOQBN4AMaOZ2zVjui82g==",
       "dev": true,
       "dev": true,
       "requires": {
       "requires": {
-        "@types/component-emitter": "^1.2.10",
-        "component-emitter": "~1.3.0",
+        "@socket.io/component-emitter": "~3.1.0",
         "debug": "~4.3.1"
         "debug": "~4.3.1"
       }
       }
     },
     },
@@ -63972,11 +63771,6 @@
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
     },
-    "tinycolor": {
-      "version": "0.0.1",
-      "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
-      "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ="
-    },
     "tlds": {
     "tlds": {
       "version": "1.228.0",
       "version": "1.228.0",
       "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.228.0.tgz",
       "resolved": "https://registry.npmjs.org/tlds/-/tlds-1.228.0.tgz",
@@ -64436,6 +64230,11 @@
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
       "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz",
       "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
       "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA=="
     },
     },
+    "ultron": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz",
+      "integrity": "sha512-QMpnpVtYaWEeY+MwKDN/UdKlE/LsFZXM5lO1u7GaZzNgmIbGixHEmVMIKT+vqYOALu3m5GYQy9kz4Xu4IVn7Ow=="
+    },
     "umzug": {
     "umzug": {
       "version": "2.3.0",
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
       "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz",
@@ -65634,9 +65433,9 @@
       "dev": true
       "dev": true
     },
     },
     "xmlhttprequest": {
     "xmlhttprequest": {
-      "version": "1.4.2",
-      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz",
-      "integrity": "sha1-AUU6HZvtHo8XL2SVu/TIxCYyFQA="
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA=="
     },
     },
     "xpath": {
     "xpath": {
       "version": "0.0.5",
       "version": "0.0.5",
@@ -65810,11 +65609,6 @@
         }
         }
       }
       }
     },
     },
-    "zeparser": {
-      "version": "0.0.5",
-      "resolved": "https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz",
-      "integrity": "sha1-A3JlYbwmjy5URPVMZlt/1KjAKeI="
-    },
     "zip-stream": {
     "zip-stream": {
       "version": "4.1.0",
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",
       "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz",

+ 13 - 2
services/real-time/app.js

@@ -24,6 +24,8 @@ const DrainManager = require('./app/js/DrainManager')
 const HealthCheckManager = require('./app/js/HealthCheckManager')
 const HealthCheckManager = require('./app/js/HealthCheckManager')
 const DeploymentManager = require('./app/js/DeploymentManager')
 const DeploymentManager = require('./app/js/DeploymentManager')
 
 
+const Path = require('path')
+
 // NOTE: debug is invoked for every blob that is put on the wire
 // NOTE: debug is invoked for every blob that is put on the wire
 const socketIoLogger = {
 const socketIoLogger = {
   error(...message) {
   error(...message) {
@@ -62,8 +64,8 @@ const sessionSockets = new SessionSockets(
 Metrics.injectMetricsRoute(app)
 Metrics.injectMetricsRoute(app)
 
 
 io.configure(function () {
 io.configure(function () {
-  io.enable('browser client minification')
-  io.enable('browser client etag')
+  // Don't use socket.io to serve client
+  io.disable('browser client')
 
 
   // Fix for Safari 5 error of "Error during WebSocket handshake: location mismatch"
   // Fix for Safari 5 error of "Error during WebSocket handshake: location mismatch"
   // See http://answers.dotcloud.com/question/578/problem-with-websocket-over-ssl-in-safari-with
   // See http://answers.dotcloud.com/question/578/problem-with-websocket-over-ssl-in-safari-with
@@ -81,6 +83,15 @@ io.configure(function () {
   ])
   ])
 })
 })
 
 
+// Serve socket.io.js client file from imported dist folder
+// The express sendFile method correctly handles conditional
+// requests using the last-modified time and etag (which is
+// a combination of mtime and size)
+const socketIOClientFolder = require('socket.io-client').dist
+app.get('/socket.io/socket.io.js', function (req, res) {
+  res.sendFile(Path.join(socketIOClientFolder, 'socket.io.min.js'))
+})
+
 // a 200 response on '/' is required for load balancer health checks
 // a 200 response on '/' is required for load balancer health checks
 // these operate separately from kubernetes readiness checks
 // these operate separately from kubernetes readiness checks
 app.get('/', function (req, res) {
 app.get('/', function (req, res) {

+ 2 - 2
services/real-time/package.json

@@ -32,8 +32,8 @@
     "express-session": "^1.17.1",
     "express-session": "^1.17.1",
     "proxy-addr": "^2.0.7",
     "proxy-addr": "^2.0.7",
     "request": "^2.88.2",
     "request": "^2.88.2",
-    "socket.io": "overleaf/socket.io#0.9.19-overleaf-6",
-    "socket.io-client": "overleaf/socket.io-client#0.9.17-overleaf-3",
+    "socket.io": "github:overleaf/socket.io#0.9.19-overleaf-9",
+    "socket.io-client": "github:overleaf/socket.io-client#0.9.17-overleaf-5",
     "underscore": "1.13.1"
     "underscore": "1.13.1"
   },
   },
   "devDependencies": {
   "devDependencies": {