🎅📡 Checkpoint

./views/room.handlebars:530995/141
./views/audience.handlebars:530995/141
./room.js:530995/1434
./public/style.css:530995/111
./server.js:530995/205
./package.json:530995/690
This commit is contained in:
Glitch (hello-express) 2020-04-11 12:12:23 +00:00
parent ef0cfb7dbd
commit 67c8307179
7 changed files with 693 additions and 27 deletions

View File

@ -10,7 +10,8 @@
"express-handlebars": "^4.0.3",
"body-parser": "^1.19.0",
"express-fingerprint": "^1.1.3",
"ws": "^7.2.3"
"ws": "^7.2.3",
"random-words": "^1.1.0"
},
"engines": {
"node": "12.x"

View File

@ -24,6 +24,10 @@ form {
margin: 0 auto;
}
input[type=text] {
text-transform: lowercase;
}
input {
border: 1px solid silver;
display: block;

38
room.js
View File

@ -17,7 +17,8 @@ function getOrCreateRoom(roomId) {
roomId: roomId,
participants: [],
audience: [],
characters: shuffle(chars)
characters: shuffle(chars),
canBuzz: true
};
rooms[roomId] = room;
}
@ -56,23 +57,28 @@ function addAudienceWS(roomId, ws) {
function buzz(roomId, participant) {
let room = getOrCreateRoom(roomId);
participant = room.participants.find(p => p.participantId === participant.participantId);
room.participants.forEach(p => {
if (p.ws && p.participantId !== participant.participantId) {
p.ws.send(JSON.stringify({
if (room.canBuzz) {
room.canBuzz = false;
setTimeout(() => room.canBuzz = true, 5000);
participant = room.participants.find(p => p.participantId === participant.participantId);
room.participants.forEach(p => {
if (p.ws && p.participantId !== participant.participantId) {
p.ws.send(JSON.stringify({
type: "buzz",
participant: participant.participantName,
msg: `<img src="${participant.character}"><div>${participant.participantName} buzzed!</div>`
}));
}
});
room.audience.forEach(ws => {
ws.send(JSON.stringify({
type: "buzz",
participant: participant.participantName,
msg: `<img src="${participant.character}"><div>${participant.participantName} buzzed!</div>`
participant: participant
}));
}
});
room.audience.forEach(ws => {
ws.send(JSON.stringify({
type: "buzz",
participant: participant
}));
});
});
}
}
module.exports = {getOrCreateRoom, addParticipant, addParticipantWS, addAudienceWS, buzz, removeParticipant}

View File

@ -4,6 +4,7 @@ const bodyParser = require('body-parser');
const Fingerprint = require('express-fingerprint');
const WebSocket = require('ws');
const http = require('http');
const randomWords = require('random-words');
const rooms = require('./room');
@ -29,31 +30,31 @@ app.get("/", (request, response) => {
});
app.get("/:roomId/join", (request, response) => {
let room = rooms.getOrCreateRoom(request.params.roomId);
let room = rooms.getOrCreateRoom(request.params.roomId.toLowerCase());
let participant = room.participants.find(p => p.participantId === request.fingerprint.hash);
if (participant) {
response.render('room', {
layout: false,
room: request.params.roomId,
room: request.params.roomId.toLowerCase(),
name: participant.participantName,
participantName: participant.participantName,
participantId: participant.participantId,
character: participant.character,
});
} else {
response.render('join', {layout: false, room: request.params.roomId});
response.render('join', {layout: false, room: request.params.roomId.toLowerCase()});
}
});
app.get("/:roomId/audience", (request, response) => {
let room = rooms.getOrCreateRoom(request.params.roomId);
response.render('audience', {layout: false, room: request.params.roomId, participants: room.participants });
let room = rooms.getOrCreateRoom(request.params.roomId.toLowerCase());
response.render('audience', {layout: false, room: request.params.roomId.toLowerCase(), participants: room.participants });
});
app.post("/:roomId/join", (request, response) => {
rooms.addParticipant(request.params.roomId, request.fingerprint.hash, request.body.name);
response.redirect(`/${request.params.roomId}/join`);
rooms.addParticipant(request.params.roomId.toLowerCase(), request.fingerprint.hash, request.body.name);
response.redirect(`/${request.params.roomId.toLowerCase()}/join`);
});
server.listen(process.env.PORT, () => {
@ -63,7 +64,7 @@ server.listen(process.env.PORT, () => {
const wss = new WebSocket.Server({ server });
wss.on('connection', (ws, req) => {
let roomId = req.url.substring(1);
let roomId = req.url.substring(1).toLowerCase();
if (roomId.includes("/audience")) {
roomId = roomId.replace("/audience", "");

View File

@ -3,6 +3,7 @@ dependencies:
express: 4.17.1
express-fingerprint: 1.1.3
express-handlebars: 4.0.3
random-words: 1.1.1
ws: 7.2.3
packages:
/accepts/1.3.7:
@ -14,6 +15,47 @@ packages:
node: '>= 0.6'
resolution:
integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
/ansi-colors/3.2.3:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==
/ansi-regex/3.0.0:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
/ansi-regex/4.1.0:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
/ansi-styles/3.2.1:
dependencies:
color-convert: 1.9.3
dev: false
engines:
node: '>=4'
resolution:
integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
/anymatch/3.1.1:
dependencies:
normalize-path: 3.0.0
picomatch: 2.2.2
dev: false
engines:
node: '>= 8'
resolution:
integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
/argparse/1.0.10:
dependencies:
sprintf-js: 1.0.3
dev: false
resolution:
integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
/array-flatten/1.1.1:
dev: false
resolution:
@ -39,6 +81,12 @@ packages:
dev: false
resolution:
integrity: sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
/binary-extensions/2.0.0:
dev: false
engines:
node: '>=8'
resolution:
integrity: sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==
/body-parser/1.19.0:
dependencies:
bytes: 3.1.0
@ -63,6 +111,18 @@ packages:
dev: false
resolution:
integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
/braces/3.0.2:
dependencies:
fill-range: 7.0.1
dev: false
engines:
node: '>=8'
resolution:
integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
/browser-stdout/1.3.1:
dev: false
resolution:
integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
/buffer-crc32/0.2.13:
dev: false
resolution:
@ -73,6 +133,56 @@ packages:
node: '>= 0.8'
resolution:
integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
/camelcase/5.3.1:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
/chalk/2.4.2:
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
dev: false
engines:
node: '>=4'
resolution:
integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
/chokidar/3.3.0:
dependencies:
anymatch: 3.1.1
braces: 3.0.2
glob-parent: 5.1.1
is-binary-path: 2.1.0
is-glob: 4.0.1
normalize-path: 3.0.0
readdirp: 3.2.0
dev: false
engines:
node: '>= 8.10.0'
optionalDependencies:
fsevents: 2.1.2
resolution:
integrity: sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==
/cliui/5.0.0:
dependencies:
string-width: 3.1.0
strip-ansi: 5.2.0
wrap-ansi: 5.1.0
dev: false
resolution:
integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==
/color-convert/1.9.3:
dependencies:
color-name: 1.1.3
dev: false
resolution:
integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
/color-name/1.1.3:
dev: false
resolution:
integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
/colors/1.4.0:
dev: false
engines:
@ -124,6 +234,18 @@ packages:
dev: false
resolution:
integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
/debug/3.2.6:
dependencies:
ms: 2.1.2
dev: false
resolution:
integrity: sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
/decamelize/1.2.0:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
/define-properties/1.1.3:
dependencies:
object-keys: 1.1.1
@ -142,20 +264,71 @@ packages:
dev: false
resolution:
integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
/diff/3.5.0:
dev: false
engines:
node: '>=0.3.1'
resolution:
integrity: sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
/ee-first/1.1.1:
dev: false
resolution:
integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
/emoji-regex/7.0.3:
dev: false
resolution:
integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
/encodeurl/1.0.2:
dev: false
engines:
node: '>= 0.8'
resolution:
integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
/es-abstract/1.17.5:
dependencies:
es-to-primitive: 1.2.1
function-bind: 1.1.1
has: 1.0.3
has-symbols: 1.0.1
is-callable: 1.1.5
is-regex: 1.0.5
object-inspect: 1.7.0
object-keys: 1.1.1
object.assign: 4.1.0
string.prototype.trimleft: 2.1.2
string.prototype.trimright: 2.1.2
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==
/es-to-primitive/1.2.1:
dependencies:
is-callable: 1.1.5
is-date-object: 1.0.2
is-symbol: 1.0.3
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
/escape-html/1.0.3:
dev: false
resolution:
integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
/escape-string-regexp/1.0.5:
dev: false
engines:
node: '>=0.8.0'
resolution:
integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
/esprima/4.0.1:
dev: false
engines:
node: '>=4'
hasBin: true
resolution:
integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
/etag/1.8.1:
dev: false
engines:
@ -228,6 +401,14 @@ packages:
dev: false
resolution:
integrity: sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
/fill-range/7.0.1:
dependencies:
to-regex-range: 5.0.1
dev: false
engines:
node: '>=8'
resolution:
integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
/finalhandler/1.1.2:
dependencies:
debug: 2.6.9
@ -242,6 +423,21 @@ packages:
node: '>= 0.8'
resolution:
integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
/find-up/3.0.0:
dependencies:
locate-path: 3.0.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==
/flat/4.1.0:
dependencies:
is-buffer: 2.0.4
dev: false
hasBin: true
resolution:
integrity: sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==
/forwarded/0.1.2:
dev: false
engines:
@ -258,6 +454,15 @@ packages:
dev: false
resolution:
integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
/fsevents/2.1.2:
dev: false
engines:
node: ^8.16.0 || ^10.6.0 || >=11.0.0
optional: true
os:
- darwin
resolution:
integrity: sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==
/function-bind/1.1.1:
dev: false
resolution:
@ -276,6 +481,31 @@ packages:
node: '>=5.10.0'
resolution:
integrity: sha512-uhPTk7ndEAnqpvNhcSQh51dIrMTGOmOPKIi4KgIHtuJbgaAGgON1Q1UFGhu4YSCnN1DVWTLqcpoL9/746x6Nqg==
/get-caller-file/2.0.5:
dev: false
engines:
node: 6.* || 8.* || >= 10.*
resolution:
integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
/glob-parent/5.1.1:
dependencies:
is-glob: 4.0.1
dev: false
engines:
node: '>= 6'
resolution:
integrity: sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==
/glob/7.1.3:
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.0.4
once: 1.4.0
path-is-absolute: 1.0.1
dev: false
resolution:
integrity: sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
/glob/7.1.6:
dependencies:
fs.realpath: 1.0.0
@ -291,6 +521,12 @@ packages:
dev: false
resolution:
integrity: sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
/growl/1.10.5:
dev: false
engines:
node: '>=4.x'
resolution:
integrity: sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
/handlebars/4.7.6:
dependencies:
minimist: 1.2.5
@ -305,12 +541,31 @@ packages:
uglify-js: 3.8.1
resolution:
integrity: sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
/has-flag/3.0.0:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
/has-symbols/1.0.1:
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==
/has/1.0.3:
dependencies:
function-bind: 1.1.1
dev: false
engines:
node: '>= 0.4.0'
resolution:
integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
/he/1.2.0:
dev: false
hasBin: true
resolution:
integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
/http-errors/1.7.2:
dependencies:
depd: 1.1.2
@ -374,6 +629,86 @@ packages:
node: '>= 0.10'
resolution:
integrity: sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==
/is-binary-path/2.1.0:
dependencies:
binary-extensions: 2.0.0
dev: false
engines:
node: '>=8'
resolution:
integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
/is-buffer/2.0.4:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==
/is-callable/1.1.5:
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==
/is-date-object/1.0.2:
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==
/is-extglob/2.1.1:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
/is-fullwidth-code-point/2.0.0:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
/is-glob/4.0.1:
dependencies:
is-extglob: 2.1.1
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
/is-number/7.0.0:
dev: false
engines:
node: '>=0.12.0'
resolution:
integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
/is-regex/1.0.5:
dependencies:
has: 1.0.3
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==
/is-symbol/1.0.3:
dependencies:
has-symbols: 1.0.1
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==
/isexe/2.0.0:
dev: false
resolution:
integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
/js-yaml/3.13.1:
dependencies:
argparse: 1.0.10
esprima: 4.0.1
dev: false
hasBin: true
resolution:
integrity: sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
/jsbn/1.1.0:
dev: false
resolution:
@ -384,10 +719,27 @@ packages:
node: '>=0.2.0'
resolution:
integrity: sha1-2qBoIGKCVCwIgojpdcKXwa53tpA=
/locate-path/3.0.0:
dependencies:
p-locate: 3.0.0
path-exists: 3.0.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==
/lodash/4.17.15:
dev: false
resolution:
integrity: sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
/log-symbols/3.0.0:
dependencies:
chalk: 2.4.2
dev: false
engines:
node: '>=8'
resolution:
integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==
/lru-cache/4.1.5:
dependencies:
pseudomap: 1.0.2
@ -442,6 +794,46 @@ packages:
dev: false
resolution:
integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
/mkdirp/0.5.3:
dependencies:
minimist: 1.2.5
deprecated: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
dev: false
hasBin: true
resolution:
integrity: sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==
/mocha/7.1.1:
dependencies:
ansi-colors: 3.2.3
browser-stdout: 1.3.1
chokidar: 3.3.0
debug: 3.2.6
diff: 3.5.0
escape-string-regexp: 1.0.5
find-up: 3.0.0
glob: 7.1.3
growl: 1.10.5
he: 1.2.0
js-yaml: 3.13.1
log-symbols: 3.0.0
minimatch: 3.0.4
mkdirp: 0.5.3
ms: 2.1.1
node-environment-flags: 1.0.6
object.assign: 4.1.0
strip-json-comments: 2.0.1
supports-color: 6.0.0
which: 1.3.1
wide-align: 1.1.3
yargs: 13.3.2
yargs-parser: 13.1.2
yargs-unparser: 1.6.0
dev: false
engines:
node: '>= 8.0.0'
hasBin: true
resolution:
integrity: sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==
/ms/2.0.0:
dev: false
resolution:
@ -450,6 +842,10 @@ packages:
dev: false
resolution:
integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
/ms/2.1.2:
dev: false
resolution:
integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
/murmurhash3js/3.0.1:
dev: false
engines:
@ -466,6 +862,23 @@ packages:
dev: false
resolution:
integrity: sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
/node-environment-flags/1.0.6:
dependencies:
object.getownpropertydescriptors: 2.1.0
semver: 5.7.1
dev: false
resolution:
integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==
/normalize-path/3.0.0:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
/object-inspect/1.7.0:
dev: false
resolution:
integrity: sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==
/object-keys/1.1.1:
dev: false
engines:
@ -483,6 +896,15 @@ packages:
node: '>= 0.4'
resolution:
integrity: sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
/object.getownpropertydescriptors/2.1.0:
dependencies:
define-properties: 1.1.3
es-abstract: 1.17.5
dev: false
engines:
node: '>= 0.8'
resolution:
integrity: sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==
/on-finished/2.3.0:
dependencies:
ee-first: 1.1.1
@ -503,12 +925,40 @@ packages:
node: '>=0.10.0'
resolution:
integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
/p-limit/2.3.0:
dependencies:
p-try: 2.2.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
/p-locate/3.0.0:
dependencies:
p-limit: 2.3.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==
/p-try/2.2.0:
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
/parseurl/1.3.3:
dev: false
engines:
node: '>= 0.8'
resolution:
integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
/path-exists/3.0.0:
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
/path-is-absolute/1.0.1:
dev: false
engines:
@ -523,6 +973,12 @@ packages:
dev: false
resolution:
integrity: sha1-elfrVQpng/kRUzH89GY9XI4AelA=
/picomatch/2.2.2:
dev: false
engines:
node: '>=8.6'
resolution:
integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
/promise/8.1.0:
dependencies:
asap: 2.0.6
@ -548,6 +1004,12 @@ packages:
node: '>=0.6'
resolution:
integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
/random-words/1.1.1:
dependencies:
mocha: 7.1.1
dev: false
resolution:
integrity: sha512-Rdk5EoQePyt9Tz3RjeMELi2BSaCI+jDiOkBr4U+3fyBRiiW3qqEuaegGAUMOZ4yGWlQscFQGqQpdic3mAbNkrw==
/range-parser/1.2.1:
dev: false
engines:
@ -565,10 +1027,28 @@ packages:
node: '>= 0.8'
resolution:
integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
/readdirp/3.2.0:
dependencies:
picomatch: 2.2.2
dev: false
engines:
node: '>= 8'
resolution:
integrity: sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==
/regenerator-runtime/0.11.1:
dev: false
resolution:
integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
/require-directory/2.1.1:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
/require-main-filename/2.0.0:
dev: false
resolution:
integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
/rimraf/2.7.1:
dependencies:
glob: 7.1.6
@ -584,6 +1064,11 @@ packages:
dev: false
resolution:
integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
/semver/5.7.1:
dev: false
hasBin: true
resolution:
integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
/send/0.17.1:
dependencies:
debug: 2.6.9
@ -615,6 +1100,10 @@ packages:
node: '>= 0.8.0'
resolution:
integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
/set-blocking/2.0.0:
dev: false
resolution:
integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
/setprototypeof/1.1.1:
dev: false
resolution:
@ -625,6 +1114,10 @@ packages:
node: '>=0.10.0'
resolution:
integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
/sprintf-js/1.0.3:
dev: false
resolution:
integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
/sprintf-js/1.1.2:
dev: false
resolution:
@ -635,6 +1128,97 @@ packages:
node: '>= 0.6'
resolution:
integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
/string-width/2.1.1:
dependencies:
is-fullwidth-code-point: 2.0.0
strip-ansi: 4.0.0
dev: false
engines:
node: '>=4'
resolution:
integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
/string-width/3.1.0:
dependencies:
emoji-regex: 7.0.3
is-fullwidth-code-point: 2.0.0
strip-ansi: 5.2.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
/string.prototype.trimend/1.0.1:
dependencies:
define-properties: 1.1.3
es-abstract: 1.17.5
dev: false
resolution:
integrity: sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==
/string.prototype.trimleft/2.1.2:
dependencies:
define-properties: 1.1.3
es-abstract: 1.17.5
string.prototype.trimstart: 1.0.1
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==
/string.prototype.trimright/2.1.2:
dependencies:
define-properties: 1.1.3
es-abstract: 1.17.5
string.prototype.trimend: 1.0.1
dev: false
engines:
node: '>= 0.4'
resolution:
integrity: sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==
/string.prototype.trimstart/1.0.1:
dependencies:
define-properties: 1.1.3
es-abstract: 1.17.5
dev: false
resolution:
integrity: sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==
/strip-ansi/4.0.0:
dependencies:
ansi-regex: 3.0.0
dev: false
engines:
node: '>=4'
resolution:
integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=
/strip-ansi/5.2.0:
dependencies:
ansi-regex: 4.1.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
/strip-json-comments/2.0.1:
dev: false
engines:
node: '>=0.10.0'
resolution:
integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=
/supports-color/5.5.0:
dependencies:
has-flag: 3.0.0
dev: false
engines:
node: '>=4'
resolution:
integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
/supports-color/6.0.0:
dependencies:
has-flag: 3.0.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==
/tmp/0.0.33:
dependencies:
os-tmpdir: 1.0.2
@ -643,6 +1227,14 @@ packages:
node: '>=0.6.0'
resolution:
integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
/to-regex-range/5.0.1:
dependencies:
is-number: 7.0.0
dev: false
engines:
node: '>=8.0'
resolution:
integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
/toidentifier/1.0.0:
dev: false
engines:
@ -698,10 +1290,37 @@ packages:
node: '>= 0.8'
resolution:
integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
/which-module/2.0.0:
dev: false
resolution:
integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
/which/1.3.1:
dependencies:
isexe: 2.0.0
dev: false
hasBin: true
resolution:
integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
/wide-align/1.1.3:
dependencies:
string-width: 2.1.1
dev: false
resolution:
integrity: sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
/wordwrap/1.0.0:
dev: false
resolution:
integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
/wrap-ansi/5.1.0:
dependencies:
ansi-styles: 3.2.1
string-width: 3.1.0
strip-ansi: 5.2.0
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==
/wrappy/1.0.2:
dev: false
resolution:
@ -715,10 +1334,46 @@ packages:
utf-8-validate: ^5.0.2
resolution:
integrity: sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==
/y18n/4.0.0:
dev: false
resolution:
integrity: sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
/yallist/2.1.2:
dev: false
resolution:
integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
/yargs-parser/13.1.2:
dependencies:
camelcase: 5.3.1
decamelize: 1.2.0
dev: false
resolution:
integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
/yargs-unparser/1.6.0:
dependencies:
flat: 4.1.0
lodash: 4.17.15
yargs: 13.3.2
dev: false
engines:
node: '>=6'
resolution:
integrity: sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==
/yargs/13.3.2:
dependencies:
cliui: 5.0.0
find-up: 3.0.0
get-caller-file: 2.0.5
require-directory: 2.1.1
require-main-filename: 2.0.0
set-blocking: 2.0.0
string-width: 3.1.0
which-module: 2.0.0
y18n: 4.0.0
yargs-parser: 13.1.2
dev: false
resolution:
integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
/yauzl/2.10.0:
dependencies:
buffer-crc32: 0.2.13
@ -734,4 +1389,5 @@ specifiers:
express: ^4.17.1
express-fingerprint: ^1.1.3
express-handlebars: ^4.0.3
random-words: ^1.1.0
ws: ^7.2.3

View File

@ -44,7 +44,6 @@
function beep() {
window.navigator.vibrate(500);
new Audio("https://cdn.glitch.com/81aebabf-079d-4504-b844-d90d643962c4%2FGame-show-buzzer-sound-effect.mp3?v=1586451448374").play();
}
</script>
</body>

View File

@ -73,7 +73,6 @@
function beep() {
window.navigator.vibrate(500);
new Audio("https://cdn.glitch.com/81aebabf-079d-4504-b844-d90d643962c4%2FGame-show-buzzer-sound-effect.mp3?v=1586451448374").play();
}
</script>
</body>