Compare commits
88 Commits
LINXD-2180
...
LINXD-2197
Author | SHA1 | Date | |
---|---|---|---|
a4d16998cd | |||
b0fad5f1db | |||
eb5aa12d65 | |||
52b4794a86 | |||
5f8f2ab44c | |||
55455be8e7 | |||
62a82dc3a5 | |||
ac078e72ff | |||
be396e1047 | |||
149876fc70 | |||
adbeb2071b | |||
a6681ffe40 | |||
efc9bfd114 | |||
a8afa8a532 | |||
507c131058 | |||
043f66eb0c | |||
cb5716dd5c | |||
ae39a45f6d | |||
0ec5769ee0 | |||
72ee3e43ab | |||
f20c7fada8 | |||
53a654c50f | |||
d54403299f | |||
177d54ec67 | |||
649c7a3767 | |||
08d6ccbb21 | |||
fd005351b5 | |||
fc111540d8 | |||
c4f4be0aa8 | |||
40c03592df | |||
a59cbcf8cc | |||
7cc3a95b38 | |||
05e3d997f1 | |||
9c731f4085 | |||
f6d862966e | |||
05ccd5cfd4 | |||
43eee11c7e | |||
0033cd528d | |||
5022d88b1d | |||
52b922825f | |||
07be8af9ae | |||
29737fe5d8 | |||
1f5755b72d | |||
a2c878f91c | |||
7b6f78725b | |||
41c6ad281d | |||
f5406f163f | |||
28497fda91 | |||
4a98a79630 | |||
22e8b4d364 | |||
575dbd69b0 | |||
a51a757d17 | |||
c059dd5afc | |||
19808da24e | |||
2f6c25c171 | |||
ead0069aa8 | |||
434c8f744c | |||
7198dc91b1 | |||
f629012712 | |||
41b50d2a11 | |||
b85ba68c9c | |||
6acd276324 | |||
294dbdf38d | |||
c3d50fdc4e | |||
c12ececf47 | |||
47eb302f5f | |||
accf960aa7 | |||
ab685270f1 | |||
6938e751fe | |||
031a7bc4c5 | |||
d7486d0fd6 | |||
38931f0654 | |||
bb684ca4db | |||
25a76c343b | |||
817a49204d | |||
91b4db1982 | |||
8562f6c58c | |||
5abc309502 | |||
ecb5a88a2c | |||
782b749ea3 | |||
b834016dcb | |||
523945271e | |||
0af7ddd786 | |||
ba5add489d | |||
d5cb144799 | |||
4e92f6cdd3 | |||
aaa1c5cea4 | |||
4f302570a2 |
10
README.md
10
README.md
@ -1,5 +1,11 @@
|
|||||||
# Video server
|
# Video server
|
||||||
|
|
||||||
|
### Generating certificates
|
||||||
|
|
||||||
|
##### To generate SSL certificates you must:
|
||||||
|
1. Go to `/server/ssl`
|
||||||
|
2. Execute `openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem`
|
||||||
|
|
||||||
|
|
||||||
### Development
|
### Development
|
||||||
|
|
||||||
@ -27,3 +33,7 @@ producer = it will always be true because you are the producer
|
|||||||
(it's possible to put false, but then you have to have another client with producer true)
|
(it's possible to put false, but then you have to have another client with producer true)
|
||||||
assetName = asset name of the unit on which you are doing the test
|
assetName = asset name of the unit on which you are doing the test
|
||||||
assetType = asset type of the unit on which you are doing the test
|
assetType = asset type of the unit on which you are doing the test
|
||||||
|
|
||||||
|
### Demo project
|
||||||
|
The demo project used initially and then modified for our needs `https://github.com/jamalag/mediasoup2`
|
||||||
|
|
||||||
|
495
app.js
495
app.js
@ -1,28 +1,38 @@
|
|||||||
import 'dotenv/config'
|
require('dotenv').config()
|
||||||
|
|
||||||
/**
|
const express = require('express');
|
||||||
* integrating mediasoup server with a node.js application
|
const app = express();
|
||||||
*/
|
const Server = require('socket.io');
|
||||||
|
const path = require('node:path');
|
||||||
/* Please follow mediasoup installation requirements */
|
const fs = require('node:fs');
|
||||||
/* https://mediasoup.org/documentation/v3/mediasoup/installation/ */
|
let https = require('https');
|
||||||
import express from 'express'
|
try {
|
||||||
const app = express()
|
https = require('node:https');
|
||||||
|
} catch (err) {
|
||||||
import https from 'httpolyglot'
|
console.log('https support is disabled!');
|
||||||
import fs from 'fs'
|
}
|
||||||
import path from 'path'
|
const mediasoup = require('mediasoup');
|
||||||
const __dirname = path.resolve()
|
|
||||||
|
|
||||||
import Server from 'socket.io'
|
|
||||||
import mediasoup, { getSupportedRtpCapabilities } from 'mediasoup'
|
|
||||||
|
|
||||||
let worker
|
let worker
|
||||||
let router = {}
|
/**
|
||||||
let producerTransport
|
* videoCalls
|
||||||
let consumerTransport
|
* |-> Router
|
||||||
let producer
|
* |-> Producer
|
||||||
let consumer
|
* |-> Consumer
|
||||||
|
* |-> Producer Transport
|
||||||
|
* |-> Consumer Transport
|
||||||
|
*
|
||||||
|
* '<callId>': {
|
||||||
|
* router: Router,
|
||||||
|
* producer: Producer,
|
||||||
|
* producerTransport: Producer Transport,
|
||||||
|
* consumer: Consumer,
|
||||||
|
* consumerTransport: Consumer Transport
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
let videoCalls = {}
|
||||||
|
let socketDetails = {}
|
||||||
|
|
||||||
app.get('/', (_req, res) => {
|
app.get('/', (_req, res) => {
|
||||||
res.send('Hello from mediasoup app!')
|
res.send('Hello from mediasoup app!')
|
||||||
@ -33,43 +43,44 @@ app.use('/sfu', express.static(path.join(__dirname, 'public')))
|
|||||||
// SSL cert for HTTPS access
|
// SSL cert for HTTPS access
|
||||||
const options = {
|
const options = {
|
||||||
key: fs.readFileSync('./server/ssl/key.pem', 'utf-8'),
|
key: fs.readFileSync('./server/ssl/key.pem', 'utf-8'),
|
||||||
cert: fs.readFileSync('./server/ssl/cert.pem', 'utf-8')
|
cert: fs.readFileSync('./server/ssl/cert.pem', 'utf-8'),
|
||||||
}
|
}
|
||||||
|
|
||||||
const httpsServer = https.createServer(options, app)
|
const httpsServer = https.createServer(options, app);
|
||||||
|
|
||||||
|
const io = new Server(httpsServer, {
|
||||||
|
allowEIO3: true,
|
||||||
|
origins: ["*:*"],
|
||||||
|
// allowRequest: (req, next) => {
|
||||||
|
// console.log('req', req);
|
||||||
|
// next(null, true)
|
||||||
|
// }
|
||||||
|
});
|
||||||
|
// const io = new Server(server, { origins: '*:*', allowEIO3: true });
|
||||||
|
|
||||||
httpsServer.listen(process.env.PORT, () => {
|
httpsServer.listen(process.env.PORT, () => {
|
||||||
console.log('Listening on port:', process.env.PORT)
|
console.log('Video server listening on port:', process.env.PORT)
|
||||||
})
|
})
|
||||||
|
|
||||||
const io = new Server(httpsServer)
|
const peers = io.of('/')
|
||||||
|
|
||||||
// socket.io namespace (could represent a room?)
|
|
||||||
const peers = io.of('/mediasoup')
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Worker
|
|
||||||
* |-> Router(s)
|
|
||||||
* |-> Producer Transport(s)
|
|
||||||
* |-> Producer
|
|
||||||
* |-> Consumer Transport(s)
|
|
||||||
* |-> Consumer
|
|
||||||
**/
|
|
||||||
|
|
||||||
const createWorker = async () => {
|
const createWorker = async () => {
|
||||||
|
try {
|
||||||
worker = await mediasoup.createWorker({
|
worker = await mediasoup.createWorker({
|
||||||
rtcMinPort: 2000,
|
rtcMinPort: 2000,
|
||||||
rtcMaxPort: 2020,
|
rtcMaxPort: 2020,
|
||||||
})
|
})
|
||||||
console.log(`[createWorker] worker pid ${worker.pid}`)
|
console.log(`[createWorker] worker pid ${worker.pid}`);
|
||||||
|
|
||||||
worker.on('died', error => {
|
worker.on('died', error => {
|
||||||
// This implies something serious happened, so kill the application
|
// This implies something serious happened, so kill the application
|
||||||
console.error('mediasoup worker has died', error)
|
console.error('mediasoup worker has died', error);
|
||||||
setTimeout(() => process.exit(1), 2000) // exit in 2 seconds
|
setTimeout(() => process.exit(1), 2000); // exit in 2 seconds
|
||||||
})
|
})
|
||||||
|
return worker;
|
||||||
return worker
|
} catch (error) {
|
||||||
|
console.log(`ERROR | createWorker | ${error.message}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We create a Worker as soon as our application starts
|
// We create a Worker as soon as our application starts
|
||||||
@ -96,148 +107,240 @@ const mediaCodecs = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
peers.on('connection', async socket => {
|
const closeCall = (callId) => {
|
||||||
console.log('[connection] socketId:', socket.id)
|
|
||||||
socket.emit('connection-success', {
|
|
||||||
socketId: socket.id,
|
|
||||||
existsProducer: producer ? true : false,
|
|
||||||
})
|
|
||||||
|
|
||||||
socket.on('disconnect', () => {
|
|
||||||
// do some cleanup
|
|
||||||
console.log('peer disconnected')
|
|
||||||
})
|
|
||||||
|
|
||||||
socket.on('createRoom', async ({ callId }, callback) => {
|
|
||||||
console.log('[createRoom] callId', callId);
|
|
||||||
console.log('Router length:', Object.keys(router).length);
|
|
||||||
if (router[callId] === undefined) {
|
|
||||||
// worker.createRouter(options)
|
|
||||||
// options = { mediaCodecs, appData }
|
|
||||||
// mediaCodecs -> defined above
|
|
||||||
// appData -> custom application data - we are not supplying any
|
|
||||||
// none of the two are required
|
|
||||||
router[callId] = await worker.createRouter({ mediaCodecs })
|
|
||||||
console.log(`[createRoom] Router ID: ${router[callId].id}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
getRtpCapabilities(callId, callback)
|
|
||||||
})
|
|
||||||
|
|
||||||
const getRtpCapabilities = (callId, callback) => {
|
|
||||||
const rtpCapabilities = router[callId].rtpCapabilities
|
|
||||||
|
|
||||||
callback({ rtpCapabilities })
|
|
||||||
}
|
|
||||||
|
|
||||||
// Client emits a request to create server side Transport
|
|
||||||
// We need to differentiate between the producer and consumer transports
|
|
||||||
socket.on('createWebRtcTransport', async ({ sender, callId }, callback) => {
|
|
||||||
console.log(`[createWebRtcTransport] Is this a sender request? ${sender} | callId ${callId}`)
|
|
||||||
// The client indicates if it is a producer or a consumer
|
|
||||||
// if sender is true, indicates a producer else a consumer
|
|
||||||
if (sender)
|
|
||||||
producerTransport = await createWebRtcTransportLayer(callId, callback)
|
|
||||||
else
|
|
||||||
consumerTransport = await createWebRtcTransportLayer(callId, callback)
|
|
||||||
})
|
|
||||||
|
|
||||||
// see client's socket.emit('transport-connect', ...)
|
|
||||||
socket.on('transport-connect', async ({ dtlsParameters }) => {
|
|
||||||
console.log('[transport-connect] DTLS PARAMS... ', { dtlsParameters })
|
|
||||||
await producerTransport.connect({ dtlsParameters })
|
|
||||||
})
|
|
||||||
|
|
||||||
// see client's socket.emit('transport-produce', ...)
|
|
||||||
socket.on('transport-produce', async ({ kind, rtpParameters, appData }, callback) => {
|
|
||||||
// call produce based on the prameters from the client
|
|
||||||
producer = await producerTransport.produce({
|
|
||||||
kind,
|
|
||||||
rtpParameters,
|
|
||||||
})
|
|
||||||
|
|
||||||
console.log(`[transport-produce] Producer ID: ${producer.id} | kind: ${producer.kind}`)
|
|
||||||
|
|
||||||
producer.on('transportclose', () => {
|
|
||||||
console.log('transport for this producer closed', callId)
|
|
||||||
|
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup/api/#producer-close
|
|
||||||
producer.close()
|
|
||||||
|
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-close
|
|
||||||
router[callId].close()
|
|
||||||
delete router[callId]
|
|
||||||
})
|
|
||||||
|
|
||||||
// Send back to the client the Producer's id
|
|
||||||
callback({
|
|
||||||
id: producer.id
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// see client's socket.emit('transport-recv-connect', ...)
|
|
||||||
socket.on('transport-recv-connect', async ({ dtlsParameters }) => {
|
|
||||||
console.log(`[transport-recv-connect] DTLS PARAMS: ${dtlsParameters}`)
|
|
||||||
await consumerTransport.connect({ dtlsParameters })
|
|
||||||
})
|
|
||||||
|
|
||||||
socket.on('consume', async ({ rtpCapabilities, callId }, callback) => {
|
|
||||||
try {
|
try {
|
||||||
console.log('consume', rtpCapabilities, callId);
|
if (videoCalls[callId]) {
|
||||||
// check if the router can consume the specified producer
|
videoCalls[callId].producer?.close();
|
||||||
if (router[callId].canConsume({
|
videoCalls[callId].consumer?.close();
|
||||||
producerId: producer.id,
|
videoCalls[callId]?.consumerTransport?.close();
|
||||||
rtpCapabilities
|
videoCalls[callId]?.producerTransport?.close();
|
||||||
})) {
|
videoCalls[callId]?.router?.close();
|
||||||
// transport can now consume and return a consumer
|
delete videoCalls[callId];
|
||||||
consumer = await consumerTransport.consume({
|
} else {
|
||||||
producerId: producer.id,
|
console.log(`The call with id ${callId} has already been deleted`);
|
||||||
rtpCapabilities,
|
|
||||||
paused: true,
|
|
||||||
})
|
|
||||||
|
|
||||||
consumer.on('transportclose', () => {
|
|
||||||
console.log('transport close from consumer', callId)
|
|
||||||
// closeRoom(callId)
|
|
||||||
delete router[callId]
|
|
||||||
})
|
|
||||||
|
|
||||||
consumer.on('producerclose', () => {
|
|
||||||
console.log('producer of consumer closed', callId)
|
|
||||||
|
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-close
|
|
||||||
router[callId].close()
|
|
||||||
delete router[callId]
|
|
||||||
})
|
|
||||||
|
|
||||||
// from the consumer extract the following params
|
|
||||||
// to send back to the Client
|
|
||||||
const params = {
|
|
||||||
id: consumer.id,
|
|
||||||
producerId: producer.id,
|
|
||||||
kind: consumer.kind,
|
|
||||||
rtpParameters: consumer.rtpParameters,
|
|
||||||
}
|
|
||||||
|
|
||||||
// send the parameters to the client
|
|
||||||
callback({ params })
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error.message)
|
console.log(`ERROR | closeCall | callid ${callId} | ${error.message}`);
|
||||||
callback({
|
|
||||||
params: {
|
|
||||||
error: error
|
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
|
const getRtpCapabilities = (callId, callback) => {
|
||||||
|
try {
|
||||||
|
console.log('[getRtpCapabilities] callId', callId);
|
||||||
|
const rtpCapabilities = videoCalls[callId].router.rtpCapabilities;
|
||||||
|
callback({ rtpCapabilities });
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | getRtpCapabilities | callId ${callId} | ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Handlers for WS events
|
||||||
|
- These are created only when we have a connection with a peer
|
||||||
|
*/
|
||||||
|
peers.on('connection', async socket => {
|
||||||
|
console.log('[connection] socketId:', socket.id);
|
||||||
|
|
||||||
|
// After making the connection successfully, we send the client a 'connection-success' event
|
||||||
|
socket.emit('connection-success', {
|
||||||
|
socketId: socket.id
|
||||||
|
});
|
||||||
|
|
||||||
|
// It is triggered when the peer is disconnected
|
||||||
|
socket.on('disconnect', () => {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log(`disconnect | socket ${socket.id} | callId ${callId}`);
|
||||||
|
delete socketDetails[socket.id];
|
||||||
|
closeCall(callId);
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- This event creates a room with the roomId and the callId sent
|
||||||
|
- It will return the rtpCapabilities of that room
|
||||||
|
- If the room already exists, it will not create it, but will only return rtpCapabilities
|
||||||
|
*/
|
||||||
|
socket.on('createRoom', async ({ callId }, callback) => {
|
||||||
|
try {
|
||||||
|
if (callId) {
|
||||||
|
console.log(`[createRoom] socket.id ${socket.id} callId ${callId}`);
|
||||||
|
if (!videoCalls[callId]) {
|
||||||
|
console.log('[createRoom] callId', callId);
|
||||||
|
videoCalls[callId] = { router: await worker.createRouter({ mediaCodecs }) }
|
||||||
|
console.log(`[createRoom] Router ID: ${videoCalls[callId].router.id}`);
|
||||||
|
}
|
||||||
|
socketDetails[socket.id] = callId;
|
||||||
|
getRtpCapabilities(callId, callback);
|
||||||
|
} else {
|
||||||
|
console.log(`[createRoom] missing callId ${callId}`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | createRoom | callId ${callId} | ${error.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Client emits a request to create server side Transport
|
||||||
|
- Depending on the sender, producerTransport or consumerTransport is created on that router
|
||||||
|
- It will return parameters, these are required for the client to create the RecvTransport
|
||||||
|
from the client.
|
||||||
|
- If the client is producer(sender: true) then it will use parameters for device.createSendTransport(params)
|
||||||
|
- If the client is a consumer(sender: false) then it will use parameters for device.createRecvTransport(params)
|
||||||
|
*/
|
||||||
|
socket.on('createWebRtcTransport', async ({ sender }, callback) => {
|
||||||
|
try {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log(`[createWebRtcTransport] sender ${sender} | callId ${callId}`);
|
||||||
|
if (sender) {
|
||||||
|
if (!videoCalls[callId].producerTransport) {
|
||||||
|
videoCalls[callId].producerTransport = await createWebRtcTransportLayer(callId, callback);
|
||||||
|
} else {
|
||||||
|
console.log(`producerTransport has already been defined | callId ${callId}`);
|
||||||
|
}
|
||||||
|
} else if (!sender) {
|
||||||
|
if (!videoCalls[callId].consumerTransport) {
|
||||||
|
videoCalls[callId].consumerTransport = await createWebRtcTransportLayer(callId, callback);
|
||||||
|
} else {
|
||||||
|
console.log(`consumerTransport has already been defined | callId ${callId}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | createWebRtcTransport | callId ${callId} | sender ${sender} | ${error.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- The client sends this event after successfully creating a createSendTransport(AS PRODUCER)
|
||||||
|
- The connection is made to the created transport
|
||||||
|
*/
|
||||||
|
socket.on('transport-connect', async ({ dtlsParameters }) => {
|
||||||
|
try {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log(`[transport-connect] socket.id ${socket.id} | callId ${callId}`)
|
||||||
|
await videoCalls[callId].producerTransport.connect({ dtlsParameters });
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | transport-connect | callId ${socketDetails[socket.id]} | ${error.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- The event sent by the client (PRODUCER) after successfully connecting to producerTransport
|
||||||
|
- For the router with the id callId, we make produce on producerTransport
|
||||||
|
- Create the handler on producer at the 'transportclose' event
|
||||||
|
*/
|
||||||
|
socket.on('transport-produce', async ({ kind, rtpParameters, appData }) => {
|
||||||
|
try {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log('[transport-produce] | socket.id', socket.id, '| callId', callId);
|
||||||
|
videoCalls[callId].producer = await videoCalls[callId].producerTransport.produce({
|
||||||
|
kind,
|
||||||
|
rtpParameters,
|
||||||
|
});
|
||||||
|
console.log(`[transport-produce] Producer ID: ${videoCalls[callId].producer.id} | kind: ${videoCalls[callId].producer.kind}`);
|
||||||
|
|
||||||
|
videoCalls[callId].producer.on('transportclose', () => {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log('transport for this producer closed', callId)
|
||||||
|
closeCall(callId);
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | transport-produce | callId ${socketDetails[socket.id]} | ${error.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- The client sends this event after successfully creating a createRecvTransport(AS CONSUMER)
|
||||||
|
- The connection is made to the created consumerTransport
|
||||||
|
*/
|
||||||
|
socket.on('transport-recv-connect', async ({ dtlsParameters }) => {
|
||||||
|
try {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log(`[transport-recv-connect] socket.id ${socket.id} | callId ${callId}`);
|
||||||
|
await videoCalls[callId].consumerTransport.connect({ dtlsParameters });
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | transport-recv-connect | callId ${socketDetails[socket.id]} | ${error.message}`);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/*
|
||||||
|
- The customer consumes after successfully connecting to consumerTransport
|
||||||
|
- The previous step was 'transport-recv-connect', and before that 'createWebRtcTransport'
|
||||||
|
- This event is only sent by the consumer
|
||||||
|
- The parameters that the consumer consumes are returned
|
||||||
|
- The consumer does consumerTransport.consume(params)
|
||||||
|
*/
|
||||||
|
socket.on('consume', async ({ rtpCapabilities }, callback) => {
|
||||||
|
try {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log('[consume] callId', callId);
|
||||||
|
|
||||||
|
// Check if the router can consume the specified producer
|
||||||
|
if (videoCalls[callId].router.canConsume({
|
||||||
|
producerId: videoCalls[callId].producer.id,
|
||||||
|
rtpCapabilities
|
||||||
|
})) {
|
||||||
|
console.log('[consume] Can consume', callId);
|
||||||
|
// Transport can now consume and return a consumer
|
||||||
|
videoCalls[callId].consumer = await videoCalls[callId].consumerTransport.consume({
|
||||||
|
producerId: videoCalls[callId].producer.id,
|
||||||
|
rtpCapabilities,
|
||||||
|
paused: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// https://mediasoup.org/documentation/v3/mediasoup/api/#consumer-on-transportclose
|
||||||
|
videoCalls[callId].consumer.on('transportclose', () => {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log('transport close from consumer', callId);
|
||||||
|
closeCall();
|
||||||
|
});
|
||||||
|
|
||||||
|
// https://mediasoup.org/documentation/v3/mediasoup/api/#consumer-on-producerclose
|
||||||
|
videoCalls[callId].consumer.on('producerclose', () => {
|
||||||
|
const callId = socketDetails[socket.id];
|
||||||
|
console.log('producer of consumer closed', callId);
|
||||||
|
closeCall();
|
||||||
|
});
|
||||||
|
|
||||||
|
// From the consumer extract the following params to send back to the Client
|
||||||
|
const params = {
|
||||||
|
id: videoCalls[callId].consumer.id,
|
||||||
|
producerId: videoCalls[callId].producer.id,
|
||||||
|
kind: videoCalls[callId].consumer.kind,
|
||||||
|
rtpParameters: videoCalls[callId].consumer.rtpParameters,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Send the parameters to the client
|
||||||
|
callback({ params });
|
||||||
|
} else {
|
||||||
|
console.log(`[canConsume] Can't consume | callId ${callId}`);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | consume | callId ${callId} | ${error.message}`)
|
||||||
|
callback({ params: { error } });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Event sent by the consumer after consuming to resume the pause
|
||||||
|
- When consuming on consumerTransport, it is initially done with paused: true, here we will resume
|
||||||
|
*/
|
||||||
socket.on('consumer-resume', async () => {
|
socket.on('consumer-resume', async () => {
|
||||||
console.log(`[consumer-resume]`)
|
try {
|
||||||
await consumer.resume()
|
const callId = socketDetails[socket.id];
|
||||||
})
|
console.log(`[consumer-resume] callId ${callId}`)
|
||||||
})
|
await videoCalls[callId].consumer.resume();
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`ERROR | consumer-resume | callId ${socketDetails[socket.id]} | ${error.message}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Called from at event 'createWebRtcTransport' and assigned to the consumer or producer transport
|
||||||
|
- It will return parameters, these are required for the client to create the RecvTransport
|
||||||
|
from the client.
|
||||||
|
- If the client is producer(sender: true) then it will use parameters for device.createSendTransport(params)
|
||||||
|
- If the client is a consumer(sender: false) then it will use parameters for device.createRecvTransport(params)
|
||||||
|
*/
|
||||||
const createWebRtcTransportLayer = async (callId, callback) => {
|
const createWebRtcTransportLayer = async (callId, callback) => {
|
||||||
try {
|
try {
|
||||||
console.log('[createWebRtcTransportLayer] callId', callId);
|
console.log('[createWebRtcTransportLayer] callId', callId);
|
||||||
@ -252,48 +355,40 @@ const createWebRtcTransportLayer = async (callId, callback) => {
|
|||||||
enableUdp: true,
|
enableUdp: true,
|
||||||
enableTcp: true,
|
enableTcp: true,
|
||||||
preferUdp: true,
|
preferUdp: true,
|
||||||
}
|
};
|
||||||
|
|
||||||
// console.log('webRtcTransport_options', webRtcTransport_options);
|
|
||||||
// console.log('router', router, '| router[callId]', router[callId]);
|
|
||||||
|
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-createWebRtcTransport
|
// https://mediasoup.org/documentation/v3/mediasoup/api/#router-createWebRtcTransport
|
||||||
let transport = await router[callId].createWebRtcTransport(webRtcTransport_options)
|
let transport = await videoCalls[callId].router.createWebRtcTransport(webRtcTransport_options)
|
||||||
console.log(`callId: ${callId} | transport id: ${transport.id}`)
|
console.log(`callId: ${callId} | transport id: ${transport.id}`)
|
||||||
|
|
||||||
|
// Handler for when DTLS(Datagram Transport Layer Security) changes
|
||||||
transport.on('dtlsstatechange', dtlsState => {
|
transport.on('dtlsstatechange', dtlsState => {
|
||||||
|
console.log(`transport | dtlsstatechange | calldId ${callId} | dtlsState ${dtlsState}`);
|
||||||
if (dtlsState === 'closed') {
|
if (dtlsState === 'closed') {
|
||||||
transport.close()
|
transport.close();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
|
// Handler if the transport layer has closed (for various reasons)
|
||||||
transport.on('close', () => {
|
transport.on('close', () => {
|
||||||
console.log('transport closed')
|
console.log(`transport | closed | calldId ${callId}`);
|
||||||
})
|
});
|
||||||
|
|
||||||
const params = {
|
const params = {
|
||||||
id: transport.id,
|
id: transport.id,
|
||||||
iceParameters: transport.iceParameters,
|
iceParameters: transport.iceParameters,
|
||||||
iceCandidates: transport.iceCandidates,
|
iceCandidates: transport.iceCandidates,
|
||||||
dtlsParameters: transport.dtlsParameters,
|
dtlsParameters: transport.dtlsParameters,
|
||||||
}
|
};
|
||||||
|
|
||||||
console.log('params', params);
|
// Send back to the client the params
|
||||||
|
callback({ params });
|
||||||
|
|
||||||
// send back to the client the following prameters
|
// Set transport to producerTransport or consumerTransport
|
||||||
callback({
|
return transport;
|
||||||
// https://mediasoup.org/documentation/v3/mediasoup-client/api/#TransportOptions
|
|
||||||
params
|
|
||||||
})
|
|
||||||
|
|
||||||
return transport
|
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('[createWebRtcTransportLayer] ERROR', JSON.stringify(error));
|
console.log(`ERROR | createWebRtcTransportLayer | callId ${callId} | ${error.message}`);
|
||||||
callback({
|
callback({ params: { error } });
|
||||||
params: {
|
|
||||||
error: error
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
BIN
doc/[video] Workflow.png
Normal file
BIN
doc/[video] Workflow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 571 KiB |
595
package-lock.json
generated
595
package-lock.json
generated
@ -12,7 +12,6 @@
|
|||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"dotenv": "^16.0.1",
|
"dotenv": "^16.0.1",
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
"httpolyglot": "^0.1.2",
|
|
||||||
"mediasoup": "^3.10.4",
|
"mediasoup": "^3.10.4",
|
||||||
"mediasoup-client": "^3.6.54",
|
"mediasoup-client": "^3.6.54",
|
||||||
"parcel": "^2.7.0",
|
"parcel": "^2.7.0",
|
||||||
@ -1792,27 +1791,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@pm2/agent/node_modules/ws": {
|
|
||||||
"version": "7.4.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
|
||||||
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
|
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8.3.0"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"bufferutil": "^4.0.1",
|
|
||||||
"utf-8-validate": "^5.0.2"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"bufferutil": {
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"utf-8-validate": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@pm2/io": {
|
"node_modules/@pm2/io": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@pm2/io/-/io-5.0.0.tgz",
|
||||||
@ -2388,11 +2366,6 @@
|
|||||||
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
|
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/async-limiter": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
|
|
||||||
},
|
|
||||||
"node_modules/async-listener": {
|
"node_modules/async-listener": {
|
||||||
"version": "0.6.10",
|
"version": "0.6.10",
|
||||||
"resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
|
"resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
|
||||||
@ -2455,9 +2428,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/base64-arraybuffer": {
|
"node_modules/base64-arraybuffer": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
|
||||||
"integrity": "sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g==",
|
"integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.6.0"
|
"node": ">= 0.6.0"
|
||||||
}
|
}
|
||||||
@ -2483,22 +2456,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/base64id": {
|
"node_modules/base64id": {
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
|
||||||
"integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw==",
|
"integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.4.0"
|
"node": "^4.5.0 || >= 5.9"
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/better-assert": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==",
|
|
||||||
"dependencies": {
|
|
||||||
"callsite": "1.0.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/binary-extensions": {
|
"node_modules/binary-extensions": {
|
||||||
@ -2875,14 +2837,6 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/callsite": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==",
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/callsites": {
|
"node_modules/callsites": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||||
@ -3051,9 +3005,9 @@
|
|||||||
"integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
|
"integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
|
||||||
},
|
},
|
||||||
"node_modules/component-emitter": {
|
"node_modules/component-emitter": {
|
||||||
"version": "1.2.1",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||||
"integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
|
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
||||||
},
|
},
|
||||||
"node_modules/component-inherit": {
|
"node_modules/component-inherit": {
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
@ -3629,36 +3583,36 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io": {
|
"node_modules/engine.io": {
|
||||||
"version": "3.1.5",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.0.tgz",
|
||||||
"integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
|
"integrity": "sha512-Kc8fo5bbg8F4a2f3HPHTEpGyq/IRIQpyeHu3H1ThR14XDD7VrLcsGBo16HUpahgp8YkHJDaU5gNxJZbuGcuueg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"accepts": "~1.3.4",
|
"accepts": "~1.3.4",
|
||||||
"base64id": "1.0.0",
|
"base64id": "2.0.0",
|
||||||
"cookie": "0.3.1",
|
"cookie": "~0.4.1",
|
||||||
"debug": "~3.1.0",
|
"debug": "~4.1.0",
|
||||||
"engine.io-parser": "~2.1.0",
|
"engine.io-parser": "~2.2.0",
|
||||||
"ws": "~3.3.1"
|
"ws": "~7.4.2"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"engines": {
|
||||||
"uws": "~9.14.0"
|
"node": ">=8.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io-client": {
|
"node_modules/engine.io-client": {
|
||||||
"version": "3.1.6",
|
"version": "3.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.3.tgz",
|
||||||
"integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
|
"integrity": "sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"component-inherit": "0.0.3",
|
"component-inherit": "0.0.3",
|
||||||
"debug": "~3.1.0",
|
"debug": "~3.1.0",
|
||||||
"engine.io-parser": "~2.1.1",
|
"engine.io-parser": "~2.2.0",
|
||||||
"has-cors": "1.1.0",
|
"has-cors": "1.1.0",
|
||||||
"indexof": "0.0.1",
|
"indexof": "0.0.1",
|
||||||
"parseqs": "0.0.5",
|
"parseqs": "0.0.6",
|
||||||
"parseuri": "0.0.5",
|
"parseuri": "0.0.6",
|
||||||
"ws": "~3.3.1",
|
"ws": "~7.4.2",
|
||||||
"xmlhttprequest-ssl": "~1.5.4",
|
"xmlhttprequest-ssl": "~1.6.2",
|
||||||
"yeast": "0.1.2"
|
"yeast": "0.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -3671,33 +3625,39 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io-parser": {
|
"node_modules/engine.io-parser": {
|
||||||
"version": "2.1.3",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
|
||||||
"integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
|
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"after": "0.8.2",
|
"after": "0.8.2",
|
||||||
"arraybuffer.slice": "~0.0.7",
|
"arraybuffer.slice": "~0.0.7",
|
||||||
"base64-arraybuffer": "0.1.5",
|
"base64-arraybuffer": "0.1.4",
|
||||||
"blob": "0.0.5",
|
"blob": "0.0.5",
|
||||||
"has-binary2": "~1.0.2"
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io/node_modules/cookie": {
|
"node_modules/engine.io/node_modules/cookie": {
|
||||||
"version": "0.3.1",
|
"version": "0.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
|
||||||
"integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==",
|
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/engine.io/node_modules/debug": {
|
"node_modules/engine.io/node_modules/debug": {
|
||||||
"version": "3.1.0",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
"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)",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ms": "2.0.0"
|
"ms": "^2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/engine.io/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
"node_modules/enquirer": {
|
"node_modules/enquirer": {
|
||||||
"version": "2.3.6",
|
"version": "2.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
|
||||||
@ -4603,14 +4563,6 @@
|
|||||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/httpolyglot": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/httpolyglot/-/httpolyglot-0.1.2.tgz",
|
|
||||||
"integrity": "sha512-ouHI1AaQMLgn4L224527S5+vq6hgvqPteurVfbm7ChViM3He2Wa8KP1Ny7pTYd7QKnDSPKcN8JYfC8r/lmsE3A==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/https-browserify": {
|
"node_modules/https-browserify": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
|
||||||
@ -5758,15 +5710,11 @@
|
|||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||||
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/object-component": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
|
||||||
"integrity": "sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA=="
|
|
||||||
},
|
|
||||||
"node_modules/object-inspect": {
|
"node_modules/object-inspect": {
|
||||||
"version": "1.12.2",
|
"version": "1.12.2",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
|
||||||
@ -6046,20 +5994,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/parseqs": {
|
"node_modules/parseqs": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||||
"integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==",
|
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
|
||||||
"dependencies": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/parseuri": {
|
"node_modules/parseuri": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
|
||||||
"integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==",
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
||||||
"dependencies": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"node_modules/parseurl": {
|
"node_modules/parseurl": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
@ -7061,16 +7003,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socket.io": {
|
"node_modules/socket.io": {
|
||||||
"version": "2.0.3",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz",
|
||||||
"integrity": "sha512-qya7+ILKQ9vbXwJ/bUkT5Oe4RCD8c7Z9bZSg3jDDnuNxl+thkzgYz4BB+Oe8hxh1pF2xRbZUnIbrFw7+lpp94w==",
|
"integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": "~2.6.6",
|
"debug": "~4.1.0",
|
||||||
"engine.io": "~3.1.0",
|
"engine.io": "~3.6.0",
|
||||||
"object-assign": "~4.1.1",
|
"has-binary2": "~1.0.2",
|
||||||
"socket.io-adapter": "~1.1.0",
|
"socket.io-adapter": "~1.1.0",
|
||||||
"socket.io-client": "~2.0.2",
|
"socket.io-client": "2.5.0",
|
||||||
"socket.io-parser": "~3.1.1"
|
"socket.io-parser": "~3.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socket.io-adapter": {
|
"node_modules/socket.io-adapter": {
|
||||||
@ -7079,37 +7021,24 @@
|
|||||||
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
|
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
|
||||||
},
|
},
|
||||||
"node_modules/socket.io-client": {
|
"node_modules/socket.io-client": {
|
||||||
"version": "2.0.3",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz",
|
||||||
"integrity": "sha512-Lx7dCP7xCLKNXB5IB5AH37YoIjxAHLxQxXPFx0uTj9juQAayWUIwS6VS9Qn3I3eESIoQzjvsatAW1w4qb3ek9A==",
|
"integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"backo2": "1.0.2",
|
"backo2": "1.0.2",
|
||||||
"base64-arraybuffer": "0.1.5",
|
|
||||||
"component-bind": "1.0.0",
|
"component-bind": "1.0.0",
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"debug": "~2.6.4",
|
"debug": "~3.1.0",
|
||||||
"engine.io-client": "~3.1.0",
|
"engine.io-client": "~3.5.0",
|
||||||
"has-cors": "1.1.0",
|
"has-binary2": "~1.0.2",
|
||||||
"indexof": "0.0.1",
|
"indexof": "0.0.1",
|
||||||
"object-component": "0.0.3",
|
"parseqs": "0.0.6",
|
||||||
"parseqs": "0.0.5",
|
"parseuri": "0.0.6",
|
||||||
"parseuri": "0.0.5",
|
"socket.io-parser": "~3.3.0",
|
||||||
"socket.io-parser": "~3.1.1",
|
|
||||||
"to-array": "0.1.4"
|
"to-array": "0.1.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/socket.io-parser": {
|
"node_modules/socket.io-client/node_modules/debug": {
|
||||||
"version": "3.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
|
|
||||||
"integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
|
|
||||||
"dependencies": {
|
|
||||||
"component-emitter": "1.2.1",
|
|
||||||
"debug": "~3.1.0",
|
|
||||||
"has-binary2": "~1.0.2",
|
|
||||||
"isarray": "2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/socket.io-parser/node_modules/debug": {
|
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
||||||
@ -7117,6 +7046,59 @@
|
|||||||
"ms": "2.0.0"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/socket.io-client/node_modules/socket.io-parser": {
|
||||||
|
"version": "3.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
|
||||||
|
"integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
|
||||||
|
"dependencies": {
|
||||||
|
"component-emitter": "~1.3.0",
|
||||||
|
"debug": "~3.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser": {
|
||||||
|
"version": "3.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
|
||||||
|
"integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
|
||||||
|
"dependencies": {
|
||||||
|
"component-emitter": "1.2.1",
|
||||||
|
"debug": "~4.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser/node_modules/component-emitter": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser/node_modules/debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"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)",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io-parser/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/socket.io/node_modules/debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"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)",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socket.io/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
"node_modules/socks": {
|
"node_modules/socks": {
|
||||||
"version": "2.7.0",
|
"version": "2.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
|
||||||
@ -7792,11 +7774,6 @@
|
|||||||
"node": ">=4.2.0"
|
"node": ">=4.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ultron": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
|
|
||||||
},
|
|
||||||
"node_modules/umd": {
|
"node_modules/umd": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
|
||||||
@ -7945,17 +7922,6 @@
|
|||||||
"uuid": "dist/bin/uuid"
|
"uuid": "dist/bin/uuid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/uws": {
|
|
||||||
"version": "9.14.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
|
|
||||||
"integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
|
|
||||||
"deprecated": "New code is available at github.com/uNetworking/uWebSockets.js",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/v8-compile-cache": {
|
"node_modules/v8-compile-cache": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
||||||
@ -8120,24 +8086,29 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/ws": {
|
"node_modules/ws": {
|
||||||
"version": "3.3.3",
|
"version": "7.4.6",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
||||||
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
|
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
|
||||||
"dependencies": {
|
"engines": {
|
||||||
"async-limiter": "~1.0.0",
|
"node": ">=8.3.0"
|
||||||
"safe-buffer": "~5.1.0",
|
},
|
||||||
"ultron": "~1.1.0"
|
"peerDependencies": {
|
||||||
|
"bufferutil": "^4.0.1",
|
||||||
|
"utf-8-validate": "^5.0.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"bufferutil": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"utf-8-validate": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ws/node_modules/safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
},
|
|
||||||
"node_modules/xmlhttprequest-ssl": {
|
"node_modules/xmlhttprequest-ssl": {
|
||||||
"version": "1.5.5",
|
"version": "1.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
|
||||||
"integrity": "sha512-/bFPLUgJrfGUL10AIv4Y7/CUt6so9CLtB/oFxQSHseSDNNCdC6vwwKEqwLN6wNPBg9YWXAiMu8jkf6RPRS/75Q==",
|
"integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
@ -9294,13 +9265,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.2.3.tgz",
|
||||||
"integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==",
|
"integrity": "sha512-utbW9Z7ZxVvwiIWkdOMLOR9G/NFXh2aRucghkVrEMJWuC++r3lCkBC3LwqBinyHzGMAJxY5tn6VakZGHObq5ig==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
|
||||||
"ws": {
|
|
||||||
"version": "7.4.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
|
||||||
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -9806,11 +9770,6 @@
|
|||||||
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
|
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"async-limiter": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
|
|
||||||
},
|
|
||||||
"async-listener": {
|
"async-listener": {
|
||||||
"version": "0.6.10",
|
"version": "0.6.10",
|
||||||
"resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
|
"resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
|
||||||
@ -9861,9 +9820,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"base64-arraybuffer": {
|
"base64-arraybuffer": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
|
||||||
"integrity": "sha512-437oANT9tP582zZMwSvZGy2nmSeAb8DW2me3y+Uv1Wp2Rulr8Mqlyrv3E7MLxmsiaPSMMDmiDVzgE+e8zlMx9g=="
|
"integrity": "sha512-a1eIFi4R9ySrbiMuyTGx5e92uRH5tQY6kArNcFaKBUleIoLjdjBg7Zxm3Mqm3Kmkf27HLR/1fnxX9q8GQ7Iavg=="
|
||||||
},
|
},
|
||||||
"base64-js": {
|
"base64-js": {
|
||||||
"version": "1.5.1",
|
"version": "1.5.1",
|
||||||
@ -9872,17 +9831,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"base64id": {
|
"base64id": {
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
|
||||||
"integrity": "sha512-rz8L+d/xByiB/vLVftPkyY215fqNrmasrcJsYkVcm4TgJNz+YXKrFaFAWibSaHkiKoSgMDCb+lipOIRQNGYesw=="
|
"integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog=="
|
||||||
},
|
|
||||||
"better-assert": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-bYeph2DFlpK1XmGs6fvlLRUN29QISM3GBuUwSFsMY2XRx4AvC0WNCS57j4c/xGrK2RS24C1w3YoBOsw9fT46tQ==",
|
|
||||||
"requires": {
|
|
||||||
"callsite": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"binary-extensions": {
|
"binary-extensions": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
@ -10214,11 +10165,6 @@
|
|||||||
"get-intrinsic": "^1.0.2"
|
"get-intrinsic": "^1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"callsite": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ=="
|
|
||||||
},
|
|
||||||
"callsites": {
|
"callsites": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
|
||||||
@ -10344,9 +10290,9 @@
|
|||||||
"integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
|
"integrity": "sha512-WZveuKPeKAG9qY+FkYDeADzdHyTYdIboXS59ixDeRJL5ZhxpqUnxSOwop4FQjMsiYm3/Or8cegVbpAHNA7pHxw=="
|
||||||
},
|
},
|
||||||
"component-emitter": {
|
"component-emitter": {
|
||||||
"version": "1.2.1",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
|
||||||
"integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
|
"integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
|
||||||
},
|
},
|
||||||
"component-inherit": {
|
"component-inherit": {
|
||||||
"version": "0.0.3",
|
"version": "0.0.3",
|
||||||
@ -10830,49 +10776,53 @@
|
|||||||
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
|
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
|
||||||
},
|
},
|
||||||
"engine.io": {
|
"engine.io": {
|
||||||
"version": "3.1.5",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.6.0.tgz",
|
||||||
"integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==",
|
"integrity": "sha512-Kc8fo5bbg8F4a2f3HPHTEpGyq/IRIQpyeHu3H1ThR14XDD7VrLcsGBo16HUpahgp8YkHJDaU5gNxJZbuGcuueg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"accepts": "~1.3.4",
|
"accepts": "~1.3.4",
|
||||||
"base64id": "1.0.0",
|
"base64id": "2.0.0",
|
||||||
"cookie": "0.3.1",
|
"cookie": "~0.4.1",
|
||||||
"debug": "~3.1.0",
|
"debug": "~4.1.0",
|
||||||
"engine.io-parser": "~2.1.0",
|
"engine.io-parser": "~2.2.0",
|
||||||
"uws": "~9.14.0",
|
"ws": "~7.4.2"
|
||||||
"ws": "~3.3.1"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cookie": {
|
"cookie": {
|
||||||
"version": "0.3.1",
|
"version": "0.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
|
||||||
"integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw=="
|
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
|
||||||
},
|
},
|
||||||
"debug": {
|
"debug": {
|
||||||
"version": "3.1.0",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.0.0"
|
"ms": "^2.1.1"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-client": {
|
"engine.io-client": {
|
||||||
"version": "3.1.6",
|
"version": "3.5.3",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.3.tgz",
|
||||||
"integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==",
|
"integrity": "sha512-qsgyc/CEhJ6cgMUwxRRtOndGVhIu5hpL5tR4umSpmX/MvkFoIxUTM7oFMDQumHNzlNLwSVy6qhstFPoWTf7dOw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"component-inherit": "0.0.3",
|
"component-inherit": "0.0.3",
|
||||||
"debug": "~3.1.0",
|
"debug": "~3.1.0",
|
||||||
"engine.io-parser": "~2.1.1",
|
"engine.io-parser": "~2.2.0",
|
||||||
"has-cors": "1.1.0",
|
"has-cors": "1.1.0",
|
||||||
"indexof": "0.0.1",
|
"indexof": "0.0.1",
|
||||||
"parseqs": "0.0.5",
|
"parseqs": "0.0.6",
|
||||||
"parseuri": "0.0.5",
|
"parseuri": "0.0.6",
|
||||||
"ws": "~3.3.1",
|
"ws": "~7.4.2",
|
||||||
"xmlhttprequest-ssl": "~1.5.4",
|
"xmlhttprequest-ssl": "~1.6.2",
|
||||||
"yeast": "0.1.2"
|
"yeast": "0.1.2"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -10887,13 +10837,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"engine.io-parser": {
|
"engine.io-parser": {
|
||||||
"version": "2.1.3",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz",
|
||||||
"integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==",
|
"integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"after": "0.8.2",
|
"after": "0.8.2",
|
||||||
"arraybuffer.slice": "~0.0.7",
|
"arraybuffer.slice": "~0.0.7",
|
||||||
"base64-arraybuffer": "0.1.5",
|
"base64-arraybuffer": "0.1.4",
|
||||||
"blob": "0.0.5",
|
"blob": "0.0.5",
|
||||||
"has-binary2": "~1.0.2"
|
"has-binary2": "~1.0.2"
|
||||||
}
|
}
|
||||||
@ -11558,11 +11508,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"httpolyglot": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/httpolyglot/-/httpolyglot-0.1.2.tgz",
|
|
||||||
"integrity": "sha512-ouHI1AaQMLgn4L224527S5+vq6hgvqPteurVfbm7ChViM3He2Wa8KP1Ny7pTYd7QKnDSPKcN8JYfC8r/lmsE3A=="
|
|
||||||
},
|
|
||||||
"https-browserify": {
|
"https-browserify": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
|
||||||
@ -12447,12 +12392,8 @@
|
|||||||
"object-assign": {
|
"object-assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||||
},
|
"dev": true
|
||||||
"object-component": {
|
|
||||||
"version": "0.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
|
|
||||||
"integrity": "sha512-S0sN3agnVh2SZNEIGc0N1X4Z5K0JeFbGBrnuZpsxuUh5XLF0BnvWkMjRXo/zGKLd/eghvNIKcx1pQkmUjXIyrA=="
|
|
||||||
},
|
},
|
||||||
"object-inspect": {
|
"object-inspect": {
|
||||||
"version": "1.12.2",
|
"version": "1.12.2",
|
||||||
@ -12671,20 +12612,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"parseqs": {
|
"parseqs": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz",
|
||||||
"integrity": "sha512-B3Nrjw2aL7aI4TDujOzfA4NsEc4u1lVcIRE0xesutH8kjeWF70uk+W5cBlIQx04zUH9NTBvuN36Y9xLRPK6Jjw==",
|
"integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w=="
|
||||||
"requires": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"parseuri": {
|
"parseuri": {
|
||||||
"version": "0.0.5",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz",
|
||||||
"integrity": "sha512-ijhdxJu6l5Ru12jF0JvzXVPvsC+VibqeaExlNoMhWN6VQ79PGjkmc7oA4W1lp00sFkNyj0fx6ivPLdV51/UMog==",
|
"integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow=="
|
||||||
"requires": {
|
|
||||||
"better-assert": "~1.0.0"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"parseurl": {
|
"parseurl": {
|
||||||
"version": "1.3.3",
|
"version": "1.3.3",
|
||||||
@ -13464,16 +13399,31 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"socket.io": {
|
"socket.io": {
|
||||||
"version": "2.0.3",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.5.0.tgz",
|
||||||
"integrity": "sha512-qya7+ILKQ9vbXwJ/bUkT5Oe4RCD8c7Z9bZSg3jDDnuNxl+thkzgYz4BB+Oe8hxh1pF2xRbZUnIbrFw7+lpp94w==",
|
"integrity": "sha512-gGunfS0od3VpwDBpGwVkzSZx6Aqo9uOcf1afJj2cKnKFAoyl16fvhpsUhmUFd4Ldbvl5JvRQed6eQw6oQp6n8w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"debug": "~2.6.6",
|
"debug": "~4.1.0",
|
||||||
"engine.io": "~3.1.0",
|
"engine.io": "~3.6.0",
|
||||||
"object-assign": "~4.1.1",
|
"has-binary2": "~1.0.2",
|
||||||
"socket.io-adapter": "~1.1.0",
|
"socket.io-adapter": "~1.1.0",
|
||||||
"socket.io-client": "~2.0.2",
|
"socket.io-client": "2.5.0",
|
||||||
"socket.io-parser": "~3.1.1"
|
"socket.io-parser": "~3.4.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"socket.io-adapter": {
|
"socket.io-adapter": {
|
||||||
@ -13482,34 +13432,21 @@
|
|||||||
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
|
"integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g=="
|
||||||
},
|
},
|
||||||
"socket.io-client": {
|
"socket.io-client": {
|
||||||
"version": "2.0.3",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.5.0.tgz",
|
||||||
"integrity": "sha512-Lx7dCP7xCLKNXB5IB5AH37YoIjxAHLxQxXPFx0uTj9juQAayWUIwS6VS9Qn3I3eESIoQzjvsatAW1w4qb3ek9A==",
|
"integrity": "sha512-lOO9clmdgssDykiOmVQQitwBAF3I6mYcQAo7hQ7AM6Ny5X7fp8hIJ3HcQs3Rjz4SoggoxA1OgrQyY8EgTbcPYw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"backo2": "1.0.2",
|
"backo2": "1.0.2",
|
||||||
"base64-arraybuffer": "0.1.5",
|
|
||||||
"component-bind": "1.0.0",
|
"component-bind": "1.0.0",
|
||||||
"component-emitter": "1.2.1",
|
"component-emitter": "~1.3.0",
|
||||||
"debug": "~2.6.4",
|
|
||||||
"engine.io-client": "~3.1.0",
|
|
||||||
"has-cors": "1.1.0",
|
|
||||||
"indexof": "0.0.1",
|
|
||||||
"object-component": "0.0.3",
|
|
||||||
"parseqs": "0.0.5",
|
|
||||||
"parseuri": "0.0.5",
|
|
||||||
"socket.io-parser": "~3.1.1",
|
|
||||||
"to-array": "0.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"socket.io-parser": {
|
|
||||||
"version": "3.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz",
|
|
||||||
"integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==",
|
|
||||||
"requires": {
|
|
||||||
"component-emitter": "1.2.1",
|
|
||||||
"debug": "~3.1.0",
|
"debug": "~3.1.0",
|
||||||
|
"engine.io-client": "~3.5.0",
|
||||||
"has-binary2": "~1.0.2",
|
"has-binary2": "~1.0.2",
|
||||||
"isarray": "2.0.1"
|
"indexof": "0.0.1",
|
||||||
|
"parseqs": "0.0.6",
|
||||||
|
"parseuri": "0.0.6",
|
||||||
|
"socket.io-parser": "~3.3.0",
|
||||||
|
"to-array": "0.1.4"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"debug": {
|
"debug": {
|
||||||
@ -13519,6 +13456,46 @@
|
|||||||
"requires": {
|
"requires": {
|
||||||
"ms": "2.0.0"
|
"ms": "2.0.0"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"socket.io-parser": {
|
||||||
|
"version": "3.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz",
|
||||||
|
"integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==",
|
||||||
|
"requires": {
|
||||||
|
"component-emitter": "~1.3.0",
|
||||||
|
"debug": "~3.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"socket.io-parser": {
|
||||||
|
"version": "3.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz",
|
||||||
|
"integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==",
|
||||||
|
"requires": {
|
||||||
|
"component-emitter": "1.2.1",
|
||||||
|
"debug": "~4.1.0",
|
||||||
|
"isarray": "2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"component-emitter": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA=="
|
||||||
|
},
|
||||||
|
"debug": {
|
||||||
|
"version": "4.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
|
||||||
|
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
|
||||||
|
"requires": {
|
||||||
|
"ms": "^2.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -14023,11 +14000,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"peer": true
|
"peer": true
|
||||||
},
|
},
|
||||||
"ultron": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
|
|
||||||
},
|
|
||||||
"umd": {
|
"umd": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz",
|
||||||
@ -14138,12 +14110,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||||
},
|
},
|
||||||
"uws": {
|
|
||||||
"version": "9.14.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz",
|
|
||||||
"integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"v8-compile-cache": {
|
"v8-compile-cache": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
|
||||||
@ -14273,26 +14239,15 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
"version": "3.3.3",
|
"version": "7.4.6",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
|
||||||
"integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
|
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
|
||||||
"requires": {
|
"requires": {}
|
||||||
"async-limiter": "~1.0.0",
|
|
||||||
"safe-buffer": "~5.1.0",
|
|
||||||
"ultron": "~1.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"xmlhttprequest-ssl": {
|
"xmlhttprequest-ssl": {
|
||||||
"version": "1.5.5",
|
"version": "1.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz",
|
||||||
"integrity": "sha512-/bFPLUgJrfGUL10AIv4Y7/CUt6so9CLtB/oFxQSHseSDNNCdC6vwwKEqwLN6wNPBg9YWXAiMu8jkf6RPRS/75Q=="
|
"integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q=="
|
||||||
},
|
},
|
||||||
"xregexp": {
|
"xregexp": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
@ -5,19 +5,17 @@
|
|||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"test": "echo \"Error: no test specified\" && exit 1",
|
||||||
"start:dev": "nodemon app.ts",
|
"start:dev": "nodemon app.js",
|
||||||
"start:prod": "pm2 start ./app.js -n video-server",
|
"start:prod": "pm2 start ./app.js -n video-server",
|
||||||
"watch": "watchify public/index.js -o public/bundle.js -v"
|
"watch": "watchify public/index.js -o public/bundle.js -v"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"type": "module",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^4.17.13",
|
"@types/express": "^4.17.13",
|
||||||
"dotenv": "^16.0.1",
|
"dotenv": "^16.0.1",
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
"httpolyglot": "^0.1.2",
|
|
||||||
"mediasoup": "^3.10.4",
|
"mediasoup": "^3.10.4",
|
||||||
"mediasoup-client": "^3.6.54",
|
"mediasoup-client": "^3.6.54",
|
||||||
"parcel": "^2.7.0",
|
"parcel": "^2.7.0",
|
||||||
|
Reference in New Issue
Block a user