diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml
index bddce0c0..e3491948 100644
--- a/.github/workflows/load-test.yml
+++ b/.github/workflows/load-test.yml
@@ -46,7 +46,7 @@ jobs:
run: src/bin/installDeps.sh
-
name: Install etherpad-load-test
- run: sudo npm install -g etherpad-load-test
+ run: sudo npm install -g etherpad-load-test-socket-io
-
name: Run load test
run: src/tests/frontend/travis/runnerLoadTest.sh 25 50
@@ -87,7 +87,7 @@ jobs:
run: pnpm config set auto-install-peers false
-
name: Install etherpad-load-test
- run: pnpm install -g etherpad-load-test
+ run: pnpm install -g etherpad-load-test-socket-io
-
name: Install etherpad plugins
# The --legacy-peer-deps flag is required to work around a bug in npm v7:
@@ -161,7 +161,7 @@ jobs:
run: src/bin/installDeps.sh
-
name: Install etherpad-load-test
- run: sudo npm install -g etherpad-load-test
+ run: sudo npm install -g etherpad-load-test-socket-io
-
name: Run load test
run: src/tests/frontend/travis/runnerLoadTest.sh 5000 5
diff --git a/settings.json.docker b/settings.json.docker
index 79f72f05..7fbda1ae 100644
--- a/settings.json.docker
+++ b/settings.json.docker
@@ -527,7 +527,7 @@
/*
* Restrict socket.io transport methods
*/
- "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
+ "socketTransportProtocols" : ["websocket", "polling"],
"socketIo": {
/*
diff --git a/settings.json.template b/settings.json.template
index 735b9d5e..9c915039 100644
--- a/settings.json.template
+++ b/settings.json.template
@@ -527,7 +527,7 @@
/*
* Restrict socket.io transport methods
*/
- "socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
+ "socketTransportProtocols" : ["websocket", "polling"],
"socketIo": {
/*
diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js
index 55894017..8b9d6e06 100644
--- a/src/node/handler/PadMessageHandler.js
+++ b/src/node/handler/PadMessageHandler.js
@@ -83,7 +83,7 @@ exports.socketio = () => {
const sessioninfos = {};
exports.sessioninfos = sessioninfos;
-stats.gauge('totalUsers', () => socketio ? Object.keys(socketio.sockets.sockets).length : 0);
+stats.gauge('totalUsers', () => socketio ? socketio.sockets.size : 0);
stats.gauge('activePads', () => {
const padIds = new Set();
for (const {padId} of Object.values(sessioninfos)) {
@@ -155,13 +155,13 @@ exports.handleConnect = (socket) => {
* Kicks all sessions from a pad
*/
exports.kickSessionsFromPad = (padID) => {
- if (typeof socketio.sockets.clients !== 'function') return;
+ if (typeof socketio.sockets.clients !== 'object') return;
// skip if there is nobody on this pad
if (_getRoomSockets(padID).length === 0) return;
// disconnect everyone from this pad
- socketio.sockets.in(padID).json.send({disconnect: 'deleted'});
+ socketio.in(padID).emit('message', {disconnect: 'deleted'});
};
/**
@@ -183,7 +183,7 @@ exports.handleDisconnect = async (socket) => {
` authorID:${session.author}` +
(user && user.username ? ` username:${user.username}` : ''));
/* eslint-enable prefer-template */
- socket.broadcast.to(session.padId).json.send({
+ socket.broadcast.to(session.padId).emit('message', {
type: 'COLLABROOM',
data: {
type: 'USER_LEAVE',
@@ -216,7 +216,7 @@ exports.handleMessage = async (socket, message) => {
messageLogger.warn(`Rate limited IP ${socket.request.ip}. To reduce the amount of rate ` +
'limiting that happens edit the rateLimit values in settings.json');
stats.meter('rateLimited').mark();
- socket.json.send({disconnect: 'rateLimited'});
+ socket.emit('message', {disconnect: 'rateLimited'});
throw err;
}
}
@@ -267,11 +267,11 @@ exports.handleMessage = async (socket, message) => {
const {accessStatus, authorID} =
await securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, user);
if (accessStatus !== 'grant') {
- socket.json.send({accessStatus});
+ socket.emit('message', {accessStatus});
throw new Error('access denied');
}
if (thisSession.author != null && thisSession.author !== authorID) {
- socket.json.send({disconnect: 'rejected'});
+ socket.emit('message', {disconnect: 'rejected'});
throw new Error([
'Author ID changed mid-session. Bad or missing token or sessionID?',
`socket:${socket.id}`,
@@ -393,10 +393,10 @@ exports.handleCustomObjectMessage = (msg, sessionID) => {
if (msg.data.type === 'CUSTOM') {
if (sessionID) {
// a sessionID is targeted: directly to this sessionID
- socketio.sockets.socket(sessionID).json.send(msg);
+ socketio.sockets.socket(sessionID).emit('message', msg);
} else {
// broadcast to all clients on this pad
- socketio.sockets.in(msg.data.payload.padId).json.send(msg);
+ socketio.sockets.in(msg.data.payload.padId).emit('message', msg);
}
}
};
@@ -416,7 +416,7 @@ exports.handleCustomMessage = (padID, msgString) => {
time,
},
};
- socketio.sockets.in(padID).json.send(msg);
+ socketio.sockets.in(padID).emit('message', msg);
};
/**
@@ -453,7 +453,7 @@ exports.sendChatMessageToPadClients = async (mt, puId, text = null, padId = null
// authorManager.getAuthorName() to resolve before saving the message to the database.
const promise = pad.appendChatMessage(message);
message.displayName = await authorManager.getAuthorName(message.authorId);
- socketio.sockets.in(padId).json.send({
+ socketio.sockets.in(padId).emit('message', {
type: 'COLLABROOM',
data: {type: 'CHAT_MESSAGE', message},
});
@@ -483,7 +483,7 @@ const handleGetChatMessages = async (socket, {data: {start, end}}) => {
};
// send the messages back to the client
- socket.json.send(infoMsg);
+ socket.emit('message', infoMsg);
};
/**
@@ -500,7 +500,7 @@ const handleSuggestUserName = (socket, message) => {
_getRoomSockets(padId).forEach((socket) => {
const session = sessioninfos[socket.id];
if (session && session.author === unnamedId) {
- socket.json.send(message);
+ socket.emit('message', message);
}
});
};
@@ -539,7 +539,7 @@ const handleUserInfoUpdate = async (socket, {data: {userInfo: {name, colorId}}})
};
// Send the other clients on the pad the update message
- socket.broadcast.to(padId).json.send(infoMsg);
+ socket.broadcast.to(padId).emit('message',infoMsg);
// Block until the authorManager has stored the new attributes.
await p;
@@ -654,12 +654,12 @@ const handleUserChanges = async (socket, message) => {
// The client assumes that ACCEPT_COMMIT and NEW_CHANGES messages arrive in order. Make sure we
// have already sent any previous ACCEPT_COMMIT and NEW_CHANGES messages.
assert.equal(thisSession.rev, r);
- socket.json.send({type: 'COLLABROOM', data: {type: 'ACCEPT_COMMIT', newRev}});
+ socket.emit('message', {type: 'COLLABROOM', data: {type: 'ACCEPT_COMMIT', newRev}});
thisSession.rev = newRev;
if (newRev !== r) thisSession.time = await pad.getRevisionDate(newRev);
await exports.updatePadClients(pad);
} catch (err) {
- socket.json.send({disconnect: 'badChangeset'});
+ socket.emit('message', {disconnect: 'badChangeset'});
stats.meter('failedChangesets').mark();
messageLogger.warn(`Failed to apply USER_CHANGES from author ${thisSession.author} ` +
`(socket ${socket.id}) on pad ${thisSession.padId}: ${err.stack || err}`);
@@ -716,7 +716,7 @@ exports.updatePadClients = async (pad) => {
},
};
try {
- socket.json.send(msg);
+ socket.emit('message', msg);
} catch (err) {
messageLogger.error(`Failed to notify user of new revision: ${err.stack || err}`);
return;
@@ -833,7 +833,7 @@ const handleClientReady = async (socket, message) => {
// fix user's counter, works on page refresh or if user closes browser window and then rejoins
sessioninfos[otherSocket.id] = {};
otherSocket.leave(sessionInfo.padId);
- otherSocket.json.send({disconnect: 'userdup'});
+ otherSocket.emit('message', {disconnect: 'userdup'});
}
}
@@ -899,7 +899,7 @@ const handleClientReady = async (socket, message) => {
apool: forWire.pool,
author: changesets[r].author,
currentTime: changesets[r].timestamp}};
- socket.json.send(wireMsg);
+ socket.emit('message', wireMsg);
}
if (startNum === endNum) {
@@ -907,7 +907,7 @@ const handleClientReady = async (socket, message) => {
data: {type: 'CLIENT_RECONNECT',
noChanges: true,
newRev: pad.getHeadRevisionNumber()}};
- socket.json.send(Msg);
+ socket.emit('message', Msg);
}
} else {
// This is a normal first connect
@@ -921,7 +921,7 @@ const handleClientReady = async (socket, message) => {
atext.attribs = attribsForWire.translated;
} catch (e) {
messageLogger.error(e.stack || e);
- socket.json.send({disconnect: 'corruptPad'}); // pull the brakes
+ socket.emit('message', {disconnect: 'corruptPad'}); // pull the brakes
throw new Error('corrupt pad');
}
@@ -1005,14 +1005,14 @@ const handleClientReady = async (socket, message) => {
socket.join(sessionInfo.padId);
// Send the clientVars to the Client
- socket.json.send({type: 'CLIENT_VARS', data: clientVars});
+ socket.emit('message', {type: 'CLIENT_VARS', data: clientVars});
// Save the current revision in sessioninfos, should be the same as in clientVars
sessionInfo.rev = pad.getHeadRevisionNumber();
}
// Notify other users about this new user.
- socket.broadcast.to(sessionInfo.padId).json.send({
+ socket.broadcast.to(sessionInfo.padId).emit('message', {
type: 'COLLABROOM',
data: {
type: 'USER_NEWINFO',
@@ -1062,7 +1062,7 @@ const handleClientReady = async (socket, message) => {
},
};
- socket.json.send(msg);
+ socket.emit('message', msg);
}));
await hooks.aCallAll('userJoin', {
@@ -1092,7 +1092,7 @@ const handleChangesetRequest = async (socket, {data: {granularity, start, reques
start = headRev;
const data = await getChangesetInfo(pad, start, end, granularity);
data.requestID = requestID;
- socket.json.send({type: 'CHANGESET_REQ', data});
+ socket.emit('message', {type: 'CHANGESET_REQ', data});
};
/**
@@ -1236,13 +1236,16 @@ const composePadChangesets = async (pad, startNum, endNum) => {
const _getRoomSockets = (padID) => {
const ns = socketio.sockets; // Default namespace.
- const adapter = ns.adapter;
// We could call adapter.clients(), but that method is unnecessarily asynchronous. Replicate what
// it does here, but synchronously to avoid a race condition. This code will have to change when
// we update to socket.io v3.
- const room = adapter.rooms[padID];
+ const room = ns.adapter.rooms?.get(padID);
+
if (!room) return [];
- return Object.keys(room.sockets).map((id) => ns.connected[id]).filter((s) => s);
+
+ return Array.from(room)
+ .map(socketId => ns.sockets.get(socketId))
+ .filter(socket => socket);
};
/**
diff --git a/src/node/hooks/express/socketio.ts b/src/node/hooks/express/socketio.ts
index ba1a6a31..be360b97 100644
--- a/src/node/hooks/express/socketio.ts
+++ b/src/node/hooks/express/socketio.ts
@@ -7,7 +7,7 @@ const express = require('../express');
const log4js = require('log4js');
const proxyaddr = require('proxy-addr');
const settings = require('../../utils/Settings');
-const socketio = require('socket.io');
+const {Server} = require('socket.io');
const socketIORouter = require('../../handler/SocketIORouter');
const hooks = require('../../../static/js/pluginfw/hooks');
const padMessageHandler = require('../../handler/PadMessageHandler');
@@ -48,12 +48,29 @@ exports.expressCloseServer = async () => {
logger.info('All socket.io clients have disconnected');
};
+exports.socketSessionMiddleware = (args: any) => (socket: any, next: Function) => {
+ const req = socket.request;
+ // Express sets req.ip but socket.io does not. Replicate Express's behavior here.
+ if (req.ip == null) {
+ if (settings.trustProxy) {
+ req.ip = proxyaddr(req, args.app.get('trust proxy fn'));
+ } else {
+ req.ip = socket.handshake.address;
+ }
+ }
+ if (!req.headers.cookie) {
+ // socketio.js-client on node.js doesn't support cookies, so pass them via a query parameter.
+ req.headers.cookie = socket.handshake.query.cookie;
+ }
+ express.sessionMiddleware(req, {}, next);
+};
+
exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Function) => {
// init socket.io and redirect all requests to the MessageHandler
// there shouldn't be a browser that isn't compatible to all
// transports in this list at once
// e.g. XHR is disabled in IE by default, so in IE it should use jsonp-polling
- io = socketio({
+ io = new Server(args.server, {
transports: settings.socketTransportProtocols,
}).listen(args.server, {
/*
@@ -79,33 +96,20 @@ exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Functio
maxHttpBufferSize: settings.socketIo.maxHttpBufferSize,
});
- io.on('connect', (socket:any) => {
+ io.on('connection', (socket:any) => {
sockets.add(socket);
socketsEvents.emit('updated');
+ // https://socket.io/docs/v3/faq/index.html
+ const session = socket.request.session;
+ session.connections++;
+ session.save();
socket.on('disconnect', () => {
sockets.delete(socket);
socketsEvents.emit('updated');
});
});
- io.use((socket:any, next: Function) => {
- const req = socket.request;
- // Express sets req.ip but socket.io does not. Replicate Express's behavior here.
- if (req.ip == null) {
- if (settings.trustProxy) {
- req.ip = proxyaddr(req, args.app.get('trust proxy fn'));
- } else {
- req.ip = socket.handshake.address;
- }
- }
- if (!req.headers.cookie) {
- // socketio.js-client on node.js doesn't support cookies (see https://git.io/JU8u9), so the
- // token and express_sid cookies have to be passed via a query parameter for unit tests.
- req.headers.cookie = socket.handshake.query.cookie;
- }
- // See: https://socket.io/docs/faq/#Usage-with-express-session
- express.sessionMiddleware(req, {}, next);
- });
+ io.use(exports.socketSessionMiddleware(args));
io.use((socket:any, next:Function) => {
socket.conn.on('packet', (packet:string) => {
diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js
index 7125607e..48955f29 100644
--- a/src/node/utils/Settings.js
+++ b/src/node/utils/Settings.js
@@ -126,7 +126,7 @@ exports.ssl = false;
/**
* socket.io transport methods
**/
-exports.socketTransportProtocols = ['xhr-polling', 'jsonp-polling', 'htmlfile'];
+exports.socketTransportProtocols = ['websocket', 'polling'];
exports.socketIo = {
/**
diff --git a/src/package.json b/src/package.json
index ff8915b7..784efd9f 100644
--- a/src/package.json
+++ b/src/package.json
@@ -36,7 +36,7 @@
"cookie-parser": "^1.4.6",
"cross-spawn": "^7.0.3",
"ejs": "^3.1.9",
- "etherpad-require-kernel": "^1.0.15",
+ "etherpad-require-kernel": "^1.0.16",
"etherpad-yajsml": "0.0.12",
"express": "4.18.2",
"express-rate-limit": "^7.1.5",
@@ -62,12 +62,13 @@
"resolve": "1.22.8",
"security": "1.0.0",
"semver": "^7.6.0",
- "socket.io": "^2.5.0",
+ "socket.io": "^3.1.2",
+ "socket.io-client": "^3.1.3",
"superagent": "^8.1.2",
"terser": "^5.27.1",
"threads": "^1.7.0",
"tinycon": "0.6.8",
- "tsx": "^4.7.0",
+ "tsx": "^4.7.1",
"ueberdb2": "^4.2.56",
"underscore": "1.13.6",
"unorm": "1.6.0",
@@ -78,14 +79,14 @@
"etherpad-lite": "node/server.ts"
},
"devDependencies": {
- "cypress": "^13.6.4",
"@types/async": "^3.2.24",
"@types/express": "^4.17.21",
"@types/node": "^20.11.19",
"@types/underscore": "^1.11.15",
+ "cypress": "^13.6.4",
"eslint": "^8.56.0",
"eslint-config-etherpad": "^3.0.22",
- "etherpad-cli-client": "^2.0.2",
+ "etherpad-cli-client": "^3.0.1",
"mocha": "^10.3.0",
"mocha-froth": "^0.2.10",
"nodeify": "^1.0.1",
diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml
index e8b14dff..72e07cfc 100644
--- a/src/pnpm-lock.yaml
+++ b/src/pnpm-lock.yaml
@@ -24,7 +24,7 @@ dependencies:
specifier: ^3.1.9
version: 3.1.9
etherpad-require-kernel:
- specifier: ^1.0.15
+ specifier: ^1.0.16
version: 1.0.16
etherpad-yajsml:
specifier: 0.0.12
@@ -102,8 +102,11 @@ dependencies:
specifier: ^7.6.0
version: 7.6.0
socket.io:
- specifier: ^2.5.0
- version: 2.5.0
+ specifier: ^3.1.2
+ version: 3.1.2
+ socket.io-client:
+ specifier: ^3.1.3
+ version: 3.1.3
superagent:
specifier: ^8.1.2
version: 8.1.2
@@ -117,7 +120,7 @@ dependencies:
specifier: 0.6.8
version: 0.6.8
tsx:
- specifier: ^4.7.0
+ specifier: ^4.7.1
version: 4.7.1
ueberdb2:
specifier: ^4.2.56
@@ -155,8 +158,8 @@ devDependencies:
specifier: ^3.0.22
version: 3.0.22(eslint@8.56.0)(typescript@5.3.3)
etherpad-cli-client:
- specifier: ^2.0.2
- version: 2.0.2
+ specifier: ^3.0.1
+ version: 3.0.1
mocha:
specifier: ^10.3.0
version: 10.3.0
@@ -535,8 +538,8 @@ packages:
'@jridgewell/trace-mapping': 0.3.22
dev: false
- /@jridgewell/resolve-uri@3.1.1:
- resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+ /@jridgewell/resolve-uri@3.1.2:
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'}
dev: false
@@ -559,7 +562,7 @@ packages:
/@jridgewell/trace-mapping@0.3.22:
resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
dependencies:
- '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
dev: false
@@ -633,12 +636,25 @@ packages:
'@types/node': 20.11.19
dev: true
+ /@types/component-emitter@1.2.14:
+ resolution: {integrity: sha512-lmPil1g82wwWg/qHSxMWkSKyJGQOK+ejXeMAAWyxNtVUD0/Ycj2maL63RAqpxVfdtvTfZkRnqzB0A9ft59y69g==}
+
/@types/connect@3.4.38:
resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
dependencies:
'@types/node': 20.11.19
dev: true
+ /@types/cookie@0.4.1:
+ resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==}
+ dev: false
+
+ /@types/cors@2.8.17:
+ resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==}
+ dependencies:
+ '@types/node': 20.11.19
+ dev: false
+
/@types/debug@4.1.12:
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
dependencies:
@@ -738,8 +754,8 @@ packages:
resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
dev: true
- /@types/semver@7.5.6:
- resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==}
+ /@types/semver@7.5.7:
+ resolution: {integrity: sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==}
/@types/send@0.17.4:
resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==}
@@ -901,7 +917,7 @@ packages:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@types/json-schema': 7.0.15
- '@types/semver': 7.5.6
+ '@types/semver': 7.5.7
'@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3)
@@ -945,9 +961,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- /after@0.8.2:
- resolution: {integrity: sha512-QbJ0NTQ/I9DI3uSJA4cbexiwQeRAfjPScqIbSjUDd9TOrcg6pTkdgziesOqxBMBzit8vFCTwrP27t13vFOORRA==}
-
/agent-base@7.1.0:
resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
engines: {node: '>= 14'}
@@ -1041,7 +1054,7 @@ packages:
resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
is-array-buffer: 3.0.4
dev: true
@@ -1053,9 +1066,9 @@ packages:
resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
get-intrinsic: 1.2.4
is-string: 1.0.7
dev: true
@@ -1069,9 +1082,9 @@ packages:
resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-array-method-boxes-properly: 1.0.0
is-string: 1.0.7
dev: true
@@ -1080,9 +1093,9 @@ packages:
resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-errors: 1.3.0
es-shim-unscopables: 1.0.2
dev: true
@@ -1091,9 +1104,9 @@ packages:
resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-shim-unscopables: 1.0.2
dev: true
@@ -1101,9 +1114,9 @@ packages:
resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-shim-unscopables: 1.0.2
dev: true
@@ -1112,18 +1125,15 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.1
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-errors: 1.3.0
get-intrinsic: 1.2.4
is-array-buffer: 3.0.4
is-shared-array-buffer: 1.0.2
dev: true
- /arraybuffer.slice@0.0.7:
- resolution: {integrity: sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==}
-
/asap@2.0.6:
resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
@@ -1223,9 +1233,6 @@ packages:
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
dev: true
- /blob@0.0.5:
- resolution: {integrity: sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==}
-
/bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
dev: true
@@ -1308,10 +1315,11 @@ packages:
engines: {node: '>=6'}
dev: true
- /call-bind@1.0.6:
- resolution: {integrity: sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==}
+ /call-bind@1.0.7:
+ resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
engines: {node: '>= 0.4'}
dependencies:
+ es-define-property: 1.0.0
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
@@ -1460,19 +1468,9 @@ packages:
engines: {node: '>=4.0.0'}
dev: true
- /component-bind@1.0.0:
- resolution: {integrity: sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw==}
-
- /component-emitter@1.2.1:
- resolution: {integrity: sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==}
- dev: false
-
/component-emitter@1.3.1:
resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
- /component-inherit@0.0.3:
- resolution: {integrity: sha512-w+LhYREhatpVqTESyGFg3NlP6Iu0kEKUHETY9GoZP/pQyW4mHFZuFWRUCIqVPZ36ueVLtoOEZaAqbCF2RDndaA==}
-
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -1526,6 +1524,14 @@ packages:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
dev: true
+ /cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+ dev: false
+
/cross-spawn@7.0.3:
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
engines: {node: '>= 8'}
@@ -1626,16 +1632,6 @@ packages:
ms: 2.0.0
dev: false
- /debug@3.1.0:
- resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.0.0
-
/debug@3.2.7(supports-color@8.1.1):
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
peerDependencies:
@@ -1648,18 +1644,6 @@ packages:
supports-color: 8.1.1
dev: true
- /debug@4.1.1:
- resolution: {integrity: sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==}
- deprecated: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
- dependencies:
- ms: 2.1.3
- dev: false
-
/debug@4.3.4(supports-color@8.1.1):
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
engines: {node: '>=6.0'}
@@ -1685,21 +1669,20 @@ packages:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
- /define-data-property@1.1.2:
- resolution: {integrity: sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==}
+ /define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
dependencies:
+ es-define-property: 1.0.0
es-errors: 1.3.0
- get-intrinsic: 1.2.4
gopd: 1.0.1
- has-property-descriptors: 1.0.1
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
dependencies:
- define-data-property: 1.1.2
- has-property-descriptors: 1.0.1
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
object-keys: 1.1.1
dev: true
@@ -1743,8 +1726,8 @@ packages:
engines: {node: '>=0.3.1'}
dev: true
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
+ /diff@5.2.0:
+ resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'}
dev: true
@@ -1803,15 +1786,14 @@ packages:
once: 1.4.0
dev: true
- /engine.io-client@3.5.3:
- resolution: {integrity: sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==}
+ /engine.io-client@4.1.4:
+ resolution: {integrity: sha512-843fqAdKeUMFqKi1sSjnR11tJ4wi8sIefu6+JC1OzkkJBmjtc/gM/rZ53tJfu5Iae/3gApm5veoS+v+gtT0+Fg==}
dependencies:
+ base64-arraybuffer: 0.1.4
component-emitter: 1.3.1
- component-inherit: 0.0.3
- debug: 3.1.0
- engine.io-parser: 2.2.1
+ debug: 4.3.4(supports-color@8.1.1)
+ engine.io-parser: 4.0.3
has-cors: 1.1.0
- indexof: 0.0.1
parseqs: 0.0.6
parseuri: 0.0.6
ws: 7.4.6
@@ -1822,24 +1804,22 @@ packages:
- supports-color
- utf-8-validate
- /engine.io-parser@2.2.1:
- resolution: {integrity: sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==}
- dependencies:
- after: 0.8.2
- arraybuffer.slice: 0.0.7
- base64-arraybuffer: 0.1.4
- blob: 0.0.5
- has-binary2: 1.0.3
-
- /engine.io@3.6.1:
- resolution: {integrity: sha512-dfs8EVg/i7QjFsXxn7cCRQ+Wai1G1TlEvHhdYEi80fxn5R1vZ2K661O6v/rezj1FP234SZ14r9CmJke99iYDGg==}
+ /engine.io-parser@4.0.3:
+ resolution: {integrity: sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==}
engines: {node: '>=8.0.0'}
+ dependencies:
+ base64-arraybuffer: 0.1.4
+
+ /engine.io@4.1.2:
+ resolution: {integrity: sha512-t5z6zjXuVLhXDMiFJPYsPOWEER8B0tIsD3ETgw19S1yg9zryvUfY3Vhtk3Gf4sihw/bQGIqQ//gjvVlu+Ca0bQ==}
+ engines: {node: '>=10.0.0'}
dependencies:
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.4.2
- debug: 4.1.1
- engine.io-parser: 2.2.1
+ cors: 2.8.5
+ debug: 4.3.4(supports-color@8.1.1)
+ engine.io-parser: 4.0.3
ws: 7.4.6
transitivePeerDependencies:
- bufferutil
@@ -1868,14 +1848,16 @@ packages:
engines: {node: '>=0.12'}
dev: false
- /es-abstract@1.22.3:
- resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+ /es-abstract@1.22.4:
+ resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==}
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.1
arraybuffer.prototype.slice: 1.0.3
available-typed-arrays: 1.0.6
- call-bind: 1.0.6
+ call-bind: 1.0.7
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
es-set-tostringtag: 2.0.2
es-to-primitive: 1.2.1
function.prototype.name: 1.1.6
@@ -1883,10 +1865,10 @@ packages:
get-symbol-description: 1.0.2
globalthis: 1.0.3
gopd: 1.0.1
- has-property-descriptors: 1.0.1
+ has-property-descriptors: 1.0.2
has-proto: 1.0.1
has-symbols: 1.0.3
- hasown: 2.0.0
+ hasown: 2.0.1
internal-slot: 1.0.7
is-array-buffer: 3.0.4
is-callable: 1.2.7
@@ -1899,7 +1881,7 @@ packages:
object-inspect: 1.13.1
object-keys: 1.1.1
object.assign: 4.1.5
- regexp.prototype.flags: 1.5.1
+ regexp.prototype.flags: 1.5.2
safe-array-concat: 1.1.0
safe-regex-test: 1.0.3
string.prototype.trim: 1.2.8
@@ -1917,6 +1899,12 @@ packages:
resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
dev: true
+ /es-define-property@1.0.0:
+ resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ get-intrinsic: 1.2.4
+
/es-errors@1.3.0:
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
engines: {node: '>= 0.4'}
@@ -1927,13 +1915,13 @@ packages:
dependencies:
get-intrinsic: 1.2.4
has-tostringtag: 1.0.2
- hasown: 2.0.0
+ hasown: 2.0.1
dev: true
/es-shim-unscopables@1.0.2:
resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
dependencies:
- hasown: 2.0.0
+ hasown: 2.0.1
dev: true
/es-to-primitive@1.2.1:
@@ -2019,7 +2007,7 @@ packages:
eslint-plugin-cypress: 2.15.1(eslint@8.56.0)
eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
- eslint-plugin-mocha: 10.2.0(eslint@8.56.0)
+ eslint-plugin-mocha: 10.3.0(eslint@8.56.0)
eslint-plugin-n: 16.6.2(eslint@8.56.0)
eslint-plugin-prefer-arrow: 1.2.3(eslint@8.56.0)
eslint-plugin-promise: 6.1.1(eslint@8.56.0)
@@ -2146,7 +2134,7 @@ packages:
eslint: 8.56.0
eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.56.0)
- hasown: 2.0.0
+ hasown: 2.0.1
is-core-module: 2.13.1
is-glob: 4.0.3
minimatch: 3.1.2
@@ -2161,8 +2149,8 @@ packages:
- supports-color
dev: true
- /eslint-plugin-mocha@10.2.0(eslint@8.56.0):
- resolution: {integrity: sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==}
+ /eslint-plugin-mocha@10.3.0(eslint@8.56.0):
+ resolution: {integrity: sha512-IWzbg2K6B1Q7h37Ih4zMyW+nhmw1JvUlHlbCUUUu6PfOOAUGCB0gxmvv7/U+TQQ6e8yHUv+q7KMdIIum4bx+PA==}
engines: {node: '>=14.0.0'}
peerDependencies:
eslint: '>=7.0.0'
@@ -2349,16 +2337,14 @@ packages:
engines: {node: '>= 0.6'}
dev: false
- /etherpad-cli-client@2.0.2:
- resolution: {integrity: sha512-yPsTD7cfGhnfd4fcrIW7Y8/ru+n93YpriP4Av83O35VYzMQVusgIaRWQ4xj+rbZkd5MBE+nmFaxIGkv0joJSSQ==}
- engines: {node: '>=12.17.0'}
+ /etherpad-cli-client@3.0.1:
+ resolution: {integrity: sha512-eV/HCQIz2atFYKaLh97NvJAbfmQgDmAjx30sNoOJE+wYwEB9nvYimkEiKdukdjp5U9C6lOUqs4ucO5B0wVnmTg==}
+ engines: {node: '>=18.0.0'}
hasBin: true
- peerDependencies:
- ep_etherpad-lite: '>=1.8.6'
dependencies:
async: 3.2.5
- socket.io-client: 2.5.0
- superagent: 7.1.5
+ socket.io-client: 3.1.3
+ superagent: 8.1.2
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -2697,9 +2683,9 @@ packages:
resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
functions-have-names: 1.2.3
dev: true
@@ -2720,7 +2706,7 @@ packages:
function-bind: 1.1.2
has-proto: 1.0.1
has-symbols: 1.0.3
- hasown: 2.0.0
+ hasown: 2.0.1
/get-stream@5.2.0:
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
@@ -2733,7 +2719,7 @@ packages:
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
es-errors: 1.3.0
get-intrinsic: 1.2.4
dev: true
@@ -2840,11 +2826,6 @@ packages:
resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
dev: true
- /has-binary2@1.0.3:
- resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==}
- dependencies:
- isarray: 2.0.1
-
/has-cors@1.1.0:
resolution: {integrity: sha512-g5VNKdkFuUuVCP9gYfDJHjK2nqdQJ7aDLTnycnc2+RvsOQbuLdF5pm7vuE5J76SEBIQjs4kQY/BWq74JUmjbXA==}
@@ -2852,10 +2833,10 @@ packages:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
- /has-property-descriptors@1.0.1:
- resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
+ /has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
dependencies:
- get-intrinsic: 1.2.4
+ es-define-property: 1.0.0
/has-proto@1.0.1:
resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
@@ -2872,8 +2853,8 @@ packages:
has-symbols: 1.0.3
dev: true
- /hasown@2.0.0:
- resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ /hasown@2.0.1:
+ resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
@@ -3015,8 +2996,8 @@ packages:
toidentifier: 1.0.1
dev: false
- /http-proxy-agent@7.0.0:
- resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
+ /http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
@@ -3034,8 +3015,8 @@ packages:
sshpk: 1.18.0
dev: true
- /https-proxy-agent@7.0.2:
- resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==}
+ /https-proxy-agent@7.0.4:
+ resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==}
engines: {node: '>= 14'}
dependencies:
agent-base: 7.1.0
@@ -3094,9 +3075,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /indexof@0.0.1:
- resolution: {integrity: sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==}
-
/inflight@1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
@@ -3117,7 +3095,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
es-errors: 1.3.0
- hasown: 2.0.0
+ hasown: 2.0.1
side-channel: 1.0.5
dev: true
@@ -3130,7 +3108,7 @@ packages:
resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
get-intrinsic: 1.2.4
dev: true
@@ -3151,7 +3129,7 @@ packages:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
has-tostringtag: 1.0.2
dev: true
@@ -3177,7 +3155,7 @@ packages:
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
- hasown: 2.0.0
+ hasown: 2.0.1
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
@@ -3260,14 +3238,14 @@ packages:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
has-tostringtag: 1.0.2
dev: true
/is-shared-array-buffer@1.0.2:
resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
dev: true
/is-stream@2.0.1:
@@ -3308,16 +3286,13 @@ packages:
/is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
dev: true
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
dev: true
- /isarray@2.0.1:
- resolution: {integrity: sha512-c2cu3UxbI+b6kR3fy0nRnAhodsvR9dx7U5+znCOzdj6IfP3upFURTr0Xl5BlQZNKZjEtxrmVyfSdeE3O57smoQ==}
-
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
dev: true
@@ -3369,8 +3344,8 @@ packages:
decimal.js: 10.4.3
form-data: 4.0.0
html-encoding-sniffer: 4.0.0
- http-proxy-agent: 7.0.0
- https-proxy-agent: 7.0.2
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.4
is-potential-custom-element-name: 1.0.1
nwsapi: 2.2.7
parse5: 7.1.2
@@ -3531,7 +3506,7 @@ packages:
'@types/fs-extra': 9.0.13
'@types/lockfile': 1.0.4
'@types/node-fetch': 2.6.11
- '@types/semver': 7.5.6
+ '@types/semver': 7.5.7
'@types/tar': 6.1.11
'@types/url-join': 4.0.1
debug: 4.3.4(supports-color@8.1.1)
@@ -3812,6 +3787,7 @@ packages:
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: false
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -3877,6 +3853,11 @@ packages:
resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==}
dev: false
+ /object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
/object-inspect@1.13.1:
resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
@@ -3889,7 +3870,7 @@ packages:
resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
has-symbols: 1.0.3
object-keys: 1.1.1
@@ -3899,18 +3880,18 @@ packages:
resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
dev: true
/object.groupby@1.0.2:
resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==}
dependencies:
array.prototype.filter: 1.0.3
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
es-errors: 1.3.0
dev: true
@@ -3918,9 +3899,9 @@ packages:
resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
dev: true
/observable-fns@0.6.1:
@@ -4237,15 +4218,6 @@ packages:
util-deprecate: 1.0.2
dev: true
- /readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
- dev: true
-
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -4253,12 +4225,13 @@ packages:
picomatch: 2.3.1
dev: true
- /regexp.prototype.flags@1.5.1:
- resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+ /regexp.prototype.flags@1.5.2:
+ resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
+ es-errors: 1.3.0
set-function-name: 2.0.1
dev: true
@@ -4375,7 +4348,7 @@ packages:
resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==}
engines: {node: '>=0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
get-intrinsic: 1.2.4
has-symbols: 1.0.3
isarray: 2.0.5
@@ -4392,7 +4365,7 @@ packages:
resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
es-errors: 1.3.0
is-regex: 1.1.4
dev: true
@@ -4482,20 +4455,20 @@ packages:
resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
engines: {node: '>= 0.4'}
dependencies:
- define-data-property: 1.1.2
+ define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
gopd: 1.0.1
- has-property-descriptors: 1.0.1
+ has-property-descriptors: 1.0.2
/set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
engines: {node: '>= 0.4'}
dependencies:
- define-data-property: 1.1.2
+ define-data-property: 1.1.4
functions-have-names: 1.2.3
- has-property-descriptors: 1.0.1
+ has-property-descriptors: 1.0.2
dev: true
/setimmediate@1.0.5:
@@ -4520,7 +4493,7 @@ packages:
resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
es-errors: 1.3.0
get-intrinsic: 1.2.4
object-inspect: 1.13.1
@@ -4534,7 +4507,7 @@ packages:
'@sinonjs/commons': 3.0.1
'@sinonjs/fake-timers': 11.2.2
'@sinonjs/samsam': 8.0.0
- diff: 5.1.0
+ diff: 5.2.0
nise: 5.1.9
supports-color: 7.2.0
dev: true
@@ -4562,58 +4535,49 @@ packages:
is-fullwidth-code-point: 3.0.0
dev: true
- /socket.io-adapter@1.1.2:
- resolution: {integrity: sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==}
+ /socket.io-adapter@2.1.0:
+ resolution: {integrity: sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==}
dev: false
- /socket.io-client@2.5.0:
- resolution: {integrity: sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==}
+ /socket.io-client@3.1.3:
+ resolution: {integrity: sha512-4sIGOGOmCg3AOgGi7EEr6ZkTZRkrXwub70bBB/F0JSkMOUFpA77WsL87o34DffQQ31PkbMUIadGOk+3tx1KGbw==}
+ engines: {node: '>=10.0.0'}
dependencies:
+ '@types/component-emitter': 1.2.14
backo2: 1.0.2
- component-bind: 1.0.0
component-emitter: 1.3.1
- debug: 3.1.0
- engine.io-client: 3.5.3
- has-binary2: 1.0.3
- indexof: 0.0.1
- parseqs: 0.0.6
+ debug: 4.3.4(supports-color@8.1.1)
+ engine.io-client: 4.1.4
parseuri: 0.0.6
- socket.io-parser: 3.3.3
- to-array: 0.1.4
+ socket.io-parser: 4.0.5
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- /socket.io-parser@3.3.3:
- resolution: {integrity: sha512-qOg87q1PMWWTeO01768Yh9ogn7chB9zkKtQnya41Y355S0UmpXgpcrFwAgjYJxu9BdKug5r5e9YtVSeWhKBUZg==}
- dependencies:
- component-emitter: 1.3.1
- debug: 3.1.0
- isarray: 2.0.1
- transitivePeerDependencies:
- - supports-color
-
- /socket.io-parser@3.4.3:
- resolution: {integrity: sha512-1rE4dZN3kCI/E5wixd393hmbqa78vVpkKmnEJhLeWoS/C5hbFYAbcSfnWoaVH43u9ToUVtzKjguxEZq+1XZfCQ==}
+ /socket.io-parser@4.0.5:
+ resolution: {integrity: sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==}
engines: {node: '>=10.0.0'}
dependencies:
- component-emitter: 1.2.1
- debug: 4.1.1
- isarray: 2.0.1
+ '@types/component-emitter': 1.2.14
+ component-emitter: 1.3.1
+ debug: 4.3.4(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
- dev: false
- /socket.io@2.5.0:
- resolution: {integrity: sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==}
+ /socket.io@3.1.2:
+ resolution: {integrity: sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==}
+ engines: {node: '>=10.0.0'}
dependencies:
- debug: 4.1.1
- engine.io: 3.6.1
- has-binary2: 1.0.3
- socket.io-adapter: 1.1.2
- socket.io-client: 2.5.0
- socket.io-parser: 3.4.3
+ '@types/cookie': 0.4.1
+ '@types/cors': 2.8.17
+ '@types/node': 20.11.19
+ accepts: 1.3.8
+ base64id: 2.0.0
+ debug: 4.3.4(supports-color@8.1.1)
+ engine.io: 4.1.2
+ socket.io-adapter: 2.1.0
+ socket.io-parser: 4.0.5
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -4685,25 +4649,25 @@ packages:
resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
dev: true
/string.prototype.trimend@1.0.7:
resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
dev: true
/string.prototype.trimstart@1.0.7:
resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.3
+ es-abstract: 1.22.4
dev: true
/string_decoder@1.1.1:
@@ -4712,12 +4676,6 @@ packages:
safe-buffer: 5.1.2
dev: true
- /string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
- dependencies:
- safe-buffer: 5.2.1
- dev: true
-
/stringify-entities@4.0.3:
resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
dependencies:
@@ -4747,25 +4705,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /superagent@7.1.5:
- resolution: {integrity: sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==}
- engines: {node: '>=6.4.0 <13 || >=14'}
- dependencies:
- component-emitter: 1.3.1
- cookiejar: 2.1.4
- debug: 4.3.4(supports-color@8.1.1)
- fast-safe-stringify: 2.1.1
- form-data: 4.0.0
- formidable: 2.1.2
- methods: 1.1.2
- mime: 2.6.0
- qs: 6.11.2
- readable-stream: 3.6.2
- semver: 7.6.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/superagent@8.1.2:
resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==}
engines: {node: '>=6.4.0 <13 || >=14'}
@@ -4889,9 +4828,6 @@ packages:
rimraf: 3.0.2
dev: true
- /to-array@0.1.4:
- resolution: {integrity: sha512-LhVdShQD/4Mk4zXNroIQZJC+Ap3zgLcDuwEdcmLv9CCO73NWockQDwyUnW/m8VX/EElfL6FcYx7EeutN4HJA6A==}
-
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -5014,7 +4950,7 @@ packages:
resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
es-errors: 1.3.0
is-typed-array: 1.1.13
dev: true
@@ -5023,7 +4959,7 @@ packages:
resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.13
@@ -5034,7 +4970,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.6
- call-bind: 1.0.6
+ call-bind: 1.0.7
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.13
@@ -5043,7 +4979,7 @@ packages:
/typed-array-length@1.0.4:
resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
for-each: 0.3.3
is-typed-array: 1.1.13
dev: true
@@ -5069,7 +5005,7 @@ packages:
/unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
dependencies:
- call-bind: 1.0.6
+ call-bind: 1.0.7
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
@@ -5282,7 +5218,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.6
- call-bind: 1.0.6
+ call-bind: 1.0.7
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.2
diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js
index 11a3a3dc..69c8e41f 100644
--- a/src/static/js/collab_client.js
+++ b/src/static/js/collab_client.js
@@ -156,7 +156,7 @@ const getCollabClient = (ace2editor, serverVars, initialUserInfo, options, _pad)
};
const sendMessage = (msg) => {
- getSocket().json.send(
+ getSocket().emit('message',
{
type: 'COLLABROOM',
component: 'pad',
diff --git a/src/static/js/pad.js b/src/static/js/pad.js
index 802f1d47..df409372 100644
--- a/src/static/js/pad.js
+++ b/src/static/js/pad.js
@@ -207,7 +207,7 @@ const sendClientReady = (isReconnect) => {
msg.reconnect = true;
}
- socket.json.send(msg);
+ socket.emit("message", msg);
};
const handshake = async () => {
diff --git a/src/static/js/timeslider.js b/src/static/js/timeslider.js
index 8c599314..4cc5d45a 100644
--- a/src/static/js/timeslider.js
+++ b/src/static/js/timeslider.js
@@ -95,7 +95,7 @@ const init = () => {
// sends a message over the socket
const sendSocketMsg = (type, data) => {
- socket.json.send({
+ socket.emit("message", {
component: 'pad', // FIXME: Remove this stupidity!
type,
data,
diff --git a/src/templates/pad.html b/src/templates/pad.html
index 54e1897d..69671ca1 100644
--- a/src/templates/pad.html
+++ b/src/templates/pad.html
@@ -442,7 +442,7 @@
<% e.begin_block("scripts"); %>
-
+
diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html
index e26cd11e..ee45f457 100644
--- a/src/templates/timeslider.html
+++ b/src/templates/timeslider.html
@@ -250,7 +250,7 @@
-
+
diff --git a/src/tests/backend/common.js b/src/tests/backend/common.js
index b331cf05..8172e1e8 100644
--- a/src/tests/backend/common.js
+++ b/src/tests/backend/common.js
@@ -147,7 +147,6 @@ exports.connect = async (res = null) => {
}
const socket = io(`${exports.baseUrl}/`, {
forceNew: true, // Different tests will have different query parameters.
- path: '/socket.io',
// socketio.js-client on node.js doesn't support cookies (see https://git.io/JU8u9), so the
// express_sid cookie must be passed as a query parameter.
query: {cookie: reqCookieHdr, padId},
@@ -172,7 +171,7 @@ exports.connect = async (res = null) => {
*/
exports.handshake = async (socket, padId, token = padutils.generateAuthorToken()) => {
logger.debug('sending CLIENT_READY...');
- socket.send({
+ socket.emit('message', {
component: 'pad',
type: 'CLIENT_READY',
padId,
@@ -189,7 +188,7 @@ exports.handshake = async (socket, padId, token = padutils.generateAuthorToken()
* Convenience wrapper around `socket.send()` that waits for acknowledgement.
*/
exports.sendMessage = async (socket, message) => await new Promise((resolve, reject) => {
- socket.send(message, (errInfo) => {
+ socket.emit('message', message, (errInfo) => {
if (errInfo != null) {
const {name, message} = errInfo;
const err = new Error(message);
diff --git a/src/tests/backend/specs/chat.js b/src/tests/backend/specs/chat.js
index aefa6418..88fda9d0 100644
--- a/src/tests/backend/specs/chat.js
+++ b/src/tests/backend/specs/chat.js
@@ -32,7 +32,7 @@ const checkHook = async (hookName, checkFn) => {
};
const sendMessage = (socket, data) => {
- socket.send({
+ socket.emit('message', {
type: 'COLLABROOM',
component: 'pad',
data,
diff --git a/src/tests/backend/specs/messages.js b/src/tests/backend/specs/messages.js
index 643005f1..827f7358 100644
--- a/src/tests/backend/specs/messages.js
+++ b/src/tests/backend/specs/messages.js
@@ -38,6 +38,7 @@ describe(__filename, function () {
res = await agent.get(`/p/${roPadId}`).expect(200);
roSocket = await common.connect(res);
await common.handshake(roSocket, roPadId);
+ await new Promise(resolve => setTimeout(resolve, 1000));
});
afterEach(async function () {
diff --git a/src/tests/backend/specs/socketio.js b/src/tests/backend/specs/socketio.js
index 15f56177..8a65213f 100644
--- a/src/tests/backend/specs/socketio.js
+++ b/src/tests/backend/specs/socketio.js
@@ -390,7 +390,7 @@ describe(__filename, function () {
handleMessage(socket, message) { assert.fail('wrong handler called'); }
}());
socket = await common.connect();
- socket.send(want);
+ socket.emit('message', want);
assert.deepEqual(await got, want);
});
@@ -398,7 +398,7 @@ describe(__filename, function () {
const AckErr = class extends Error {
constructor(name, ...args) { super(...args); this.name = name; }
};
- socket.send(message,
+ socket.emit('message', message,
(errj, val) => errj != null ? reject(new AckErr(errj.name, errj.message)) : resolve(val));
});