From c556ac91463bc29e5bb3dae5e4a885c29a68c6e2 Mon Sep 17 00:00:00 2001 From: Chase Noel Date: Thu, 27 May 2021 21:41:18 -0400 Subject: [PATCH 1/7] upgrading socket.io server and client packages as well the koa-socket-2 package --- package-lock.json | 411 +++++++++++++++++++++------------------------- package.json | 6 +- 2 files changed, 186 insertions(+), 231 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3e62ea96a..96b60a38d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4026,6 +4026,11 @@ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + }, "@types/connect": { "version": "3.4.33", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", @@ -4039,6 +4044,11 @@ "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==" }, + "@types/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==" + }, "@types/cookies": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz", @@ -4050,6 +4060,11 @@ "@types/node": "*" } }, + "@types/cors": { + "version": "2.8.10", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", + "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==" + }, "@types/enzyme": { "version": "3.10.5", "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.5.tgz", @@ -4605,11 +4620,6 @@ "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", "dev": true }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, "airbnb-prop-types": { "version": "2.15.0", "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.15.0.tgz", @@ -4985,11 +4995,6 @@ } } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -5368,6 +5373,11 @@ } } }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -5433,11 +5443,6 @@ } } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -6226,22 +6231,12 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6398,6 +6393,15 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", @@ -7575,15 +7579,16 @@ } }, "engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz", + "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==", "requires": { "accepts": "~1.3.4", "base64id": "2.0.0", "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", "ws": "~7.4.2" }, "dependencies": { @@ -7593,40 +7598,33 @@ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.1.1.tgz", + "integrity": "sha512-jPFpw2HLL0lhZ2KY0BpZhIJdleQcUO9W1xkIpo0h3d6s+5D6+EV/xgQw9qWOmymszv2WXef/6KUUehyxEKomlQ==", "requires": { + "base64-arraybuffer": "0.1.4", "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.1", "has-cors": "1.1.0", - "indexof": "0.0.1", "parseqs": "0.0.6", "parseuri": "0.0.6", "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", "yeast": "0.1.2" }, "dependencies": { @@ -7635,45 +7633,27 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } }, - "xmlhttprequest-ssl": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.2.tgz", - "integrity": "sha512-tYOaldF/0BLfKuoA39QMwD4j2m8lq4DIncqj1yuNELX4vz9+z/ieG/vwmctjJce+boFHXstqhWnHSxc4W8f4qg==" + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" - } + "base64-arraybuffer": "0.1.4" } }, "enquirer": { @@ -9907,21 +9887,6 @@ } } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "requires": { - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - } - } - }, "has-cors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", @@ -10234,7 +10199,8 @@ "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true }, "inflation": { "version": "2.0.0", @@ -11986,12 +11952,43 @@ } }, "koa-socket-2": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-socket-2/-/koa-socket-2-1.2.0.tgz", - "integrity": "sha512-uv0MImrccpT3p9mpBtM+Jw4syBJ+EhkARI62ERvyXVQKJNdRW5OFwqRrb/DkxXAj6W/8tfGYb9rEwvkmp1efbg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/koa-socket-2/-/koa-socket-2-2.0.0.tgz", + "integrity": "sha512-YSy9nYtd4/CR9bChAeL9/3lb17ietphRFgNTAwOkhrCOHFZuOPv+dMORK3sxSJygiIqH5ugJyc2/4Ek1Hc5eVA==", "requires": { "koa-compose": "^4.1.0", - "socket.io": "^2.2.0" + "socket.io": "^3.0.2" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "socket.io": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz", + "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~4.1.0", + "socket.io-adapter": "~2.1.0", + "socket.io-parser": "~4.0.3" + } + } } }, "latest-version": { @@ -15648,151 +15645,107 @@ } }, "socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "requires": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.2.tgz", + "integrity": "sha512-xK0SD1C7hFrh9+bYoYCdVt+ncixkSLKtNLCax5aEy1o3r5PaO5yQhVb97exIe67cE7lAK+EpyMytXWTWmyZY8w==", + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.8", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.0", + "socket.io-adapter": "~2.3.0", + "socket.io-parser": "~4.0.3" }, "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "engine.io": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + } }, "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "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" - } - } - } + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "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": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - } - } + "socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==" } } }, "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz", + "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg==" }, "socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.1.2.tgz", + "integrity": "sha512-RDpWJP4DQT1XeexmeDyDkm0vrFc0+bUsHDKiVGaNISJvJonhQQOMqV9Vwfg0ZpPJ27LCdan7iqTI92FRSOkFWQ==", "requires": { - "backo2": "1.0.2", - "component-bind": "1.0.0", + "@types/component-emitter": "^1.2.10", + "backo2": "~1.0.2", "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", + "debug": "~4.3.1", + "engine.io-client": "~5.1.1", "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" + "socket.io-parser": "~4.0.4" }, "dependencies": { "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, "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==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", "requires": { + "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" + "debug": "~4.3.1" }, "dependencies": { "component-emitter": { @@ -15800,10 +15753,18 @@ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -16809,11 +16770,6 @@ "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", "dev": true }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -17513,8 +17469,7 @@ "ws": { "version": "7.4.5", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", - "dev": true + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==" }, "xdg-basedir": { "version": "3.0.0", diff --git a/package.json b/package.json index 62d8de317..f6008e4f2 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "koa": "^2.7.0", "koa-body": "^4.1.0", "koa-router": "^7.2.1", - "koa-socket-2": "^1.0.17", + "koa-socket-2": "^2.0.0", "lodash.isplainobject": "^4.0.6", "nanoid": "^3.1.20", "p-queue": "^6.6.2", @@ -165,8 +165,8 @@ "react-cookies": "^0.1.0", "redux": "^4.0.0", "rfc6902": "^4.0.1", - "socket.io": "^2.4.1", - "socket.io-client": "^2.4.0", + "socket.io": "^4.1.2", + "socket.io-client": "^4.1.2", "svelte": "^3.24.0", "svelte-json-tree-auto": "^0.1.0", "ts-toolbelt": "^6.3.6" From 2059eeceb79b6a5d92f0d69b2629dee02dbecda2 Mon Sep 17 00:00:00 2001 From: "vdf.dev" Date: Tue, 6 Jul 2021 15:18:06 -0700 Subject: [PATCH 2/7] Upgrades socketio types --- package-lock.json | 15 --------------- package.json | 2 -- src/client/transport/socketio.ts | 6 +++--- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index e7d14e634..33552104f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4287,21 +4287,6 @@ "@types/mime": "*" } }, - "@types/socket.io": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.4.tgz", - "integrity": "sha512-cI98INy7tYnweTsUlp8ocveVdAxENUThO0JsLSCs51cjOP2yV5Mqo5QszMDPckyRRA+PO6+wBgKvGvHUCc23TQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/socket.io-client": { - "version": "1.4.33", - "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.33.tgz", - "integrity": "sha512-m4LnxkljsI9fMsjwpW5QhRpMixo2BeeLpFmg0AE+sS4H1pzAd/cs/ftTiL60FLZgfFa8PFRPx5KsHu8O0bADKQ==", - "dev": true - }, "@types/stack-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz", diff --git a/package.json b/package.json index f6008e4f2..f265b7f11 100644 --- a/package.json +++ b/package.json @@ -97,8 +97,6 @@ "@types/node": "^14.0.24", "@types/react": "^16.9.36", "@types/react-dom": "^16.9.8", - "@types/socket.io": "^2.1.4", - "@types/socket.io-client": "^1.4.33", "@typescript-eslint/eslint-plugin": "^4.11.0", "@typescript-eslint/parser": "^4.11.0", "babel-core": "^7.0.0-bridge.0", diff --git a/src/client/transport/socketio.ts b/src/client/transport/socketio.ts index f0c21c6bb..199dca165 100644 --- a/src/client/transport/socketio.ts +++ b/src/client/transport/socketio.ts @@ -31,7 +31,7 @@ import type { interface SocketIOOpts { server?: string; - socketOpts?: SocketIOClient.ConnectOpts; + socketOpts?: ioNamespace.SocketOptions; } type SocketIOTransportOpts = TransportOpts & @@ -46,8 +46,8 @@ type SocketIOTransportOpts = TransportOpts & */ export class SocketIOTransport extends Transport { server: string; - socket: SocketIOClient.Socket; - socketOpts: SocketIOClient.ConnectOpts; + socket: ioNamespace.Socket; + socketOpts: ioNamespace.SocketOptions; callback: () => void; matchDataCallback: MetadataCallback; chatMessageCallback: ChatCallback; From fad7e6f525e74b6736cae8e63e4d282e6f9e85dc Mon Sep 17 00:00:00 2001 From: "vdf.dev" Date: Tue, 6 Jul 2021 15:31:31 -0700 Subject: [PATCH 3/7] Fix unit test --- src/client/transport/socketio.test.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/client/transport/socketio.test.ts b/src/client/transport/socketio.test.ts index 45c95bcc8..b78042f0e 100644 --- a/src/client/transport/socketio.test.ts +++ b/src/client/transport/socketio.test.ts @@ -8,6 +8,7 @@ import { createStore } from 'redux'; import { SocketIOTransport } from './socketio'; +import type * as ioNamespace from 'socket.io-client'; import { makeMove } from '../../core/action-creators'; import { CreateGameReducer } from '../../core/reducer'; import { InitializeGame } from '../../core/initialize'; @@ -51,7 +52,7 @@ test('defaults', () => { }); class TransportAdapter extends SocketIOTransport { - socket: SocketIOClient.Socket & { + declare socket: ioNamespace.Socket & { io: { engine: any }; }; @@ -297,7 +298,7 @@ describe('server option', () => { const server = 'http://' + hostname + ':' + port; const m = new SocketIOTransport({ server }); m.connect(); - expect(m.socket.io.uri).toEqual(server + '/default'); + expect((m.socket.io as any).uri).toEqual(server + '/default'); }); test('https', () => { From 95fce8a72e8744a3d98aa8941c1caa8c7284906a Mon Sep 17 00:00:00 2001 From: "vdf.dev" Date: Tue, 6 Jul 2021 16:01:15 -0700 Subject: [PATCH 4/7] Adds origins param to the Server API and fix CORS issue --- docs/documentation/api/Server.md | 13 ++++++++----- docs/documentation/multiplayer.md | 2 +- examples/react-web/server.js | 5 +++-- src/server/index.ts | 5 ++++- src/server/transport/socketio.ts | 9 ++++++++- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/docs/documentation/api/Server.md b/docs/documentation/api/Server.md index 8805285fa..b0f48112f 100644 --- a/docs/documentation/api/Server.md +++ b/docs/documentation/api/Server.md @@ -19,17 +19,20 @@ A config object with the following options: 1. `games` (_array_): a list of game implementations (each should be an object conforming to the [Game API](/api/Game.md)). -2. `db` (_object_): the [database connector](/storage). +2. `origins` (_array_): a list of allowed origins for CORS. + For instance, this could be [`https://example.com`], or in the case of our examples, [`http://localhost:3000`] + +3. `db` (_object_): the [database connector](/storage). If not provided, an in-memory implementation is used. -3. `transport` (_object_): the transport implementation. +4. `transport` (_object_): the transport implementation. If not provided, socket.io is used. -4. `uuid` (_function_): an optional function that returns a unique identifier, used to create new game IDs and — if `generateCredentials` is not specified — player credentials. Defaults to [nanoid](https://www.npmjs.com/package/nanoid). +5. `uuid` (_function_): an optional function that returns a unique identifier, used to create new game IDs and — if `generateCredentials` is not specified — player credentials. Defaults to [nanoid](https://www.npmjs.com/package/nanoid). -5. `generateCredentials` (_function_): an optional function that returns player credentials to store in the game metadata and validate against. If not specified, the `uuid` function will be used. +6. `generateCredentials` (_function_): an optional function that returns player credentials to store in the game metadata and validate against. If not specified, the `uuid` function will be used. -6. `authenticateCredentials` (_function_): an optional function that tests if a player’s move is made with the correct credentials when using the default socket.io transport implementation. +7. `authenticateCredentials` (_function_): an optional function that tests if a player’s move is made with the correct credentials when using the default socket.io transport implementation. #### Returns diff --git a/docs/documentation/multiplayer.md b/docs/documentation/multiplayer.md index 4e2270e44..44bc44f00 100644 --- a/docs/documentation/multiplayer.md +++ b/docs/documentation/multiplayer.md @@ -216,7 +216,7 @@ boardgame.io server module and provide it with our `TicTacToe` game object. const { Server } = require('boardgame.io/server'); const { TicTacToe } = require('./Game'); -const server = Server({ games: [TicTacToe] }); +const server = Server({ games: [TicTacToe], origins: ['http://localhost:300'] }); server.run(8000); ``` diff --git a/examples/react-web/server.js b/examples/react-web/server.js index a9ba2ef73..fb5bad157 100644 --- a/examples/react-web/server.js +++ b/examples/react-web/server.js @@ -11,7 +11,8 @@ import TicTacToe from './src/tic-tac-toe/game'; import Chess from './src/chess/game'; const PORT = process.env.PORT || 8000; -const server = Server({ games: [TicTacToe, Chess] }); +const origins = [`http://localhost:${PORT}`]; +const server = Server({ games: [TicTacToe, Chess], origins }); server.run(PORT, () => { - console.log(`Serving at: http://localhost:${PORT}/`); + console.log(`Serving at: ${origins[0]}`); }); diff --git a/src/server/index.ts b/src/server/index.ts index 93beac6e0..18b5fda4d 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -57,6 +57,7 @@ export const getPortFromServer = ( interface ServerOpts { games: Game[]; + origins?: string[]; db?: StorageAPI.Async | StorageAPI.Sync; transport?: SocketIO; uuid?: () => string; @@ -72,6 +73,7 @@ interface ServerOpts { * @param db - The interface with the database. * @param transport - The interface with the clients. * @param authenticateCredentials - Function to test player credentials. + * @param origins - Allowed origins to use this server, i.e. [http://localhost:300] * @param generateCredentials - Method for API to generate player credentials. * @param https - HTTPS configuration options passed through to the TLS module. * @param lobbyConfig - Configuration options for the Lobby API server. @@ -82,6 +84,7 @@ export function Server({ transport, https, uuid, + origins, generateCredentials = uuid, authenticateCredentials, }: ServerOpts) { @@ -100,7 +103,7 @@ export function Server({ if (transport === undefined) { transport = new SocketIO({ https }); } - transport.init(app, games); + transport.init(app, games, origins); const router = createRouter({ db, games, uuid, auth }); diff --git a/src/server/transport/socketio.ts b/src/server/transport/socketio.ts index d8662c85f..15e91e176 100644 --- a/src/server/transport/socketio.ts +++ b/src/server/transport/socketio.ts @@ -149,11 +149,18 @@ export class SocketIO { this.clientInfo.set(socket.id, client); } - init(app: Server.App & { _io?: IOTypes.Server }, games: Game[]) { + init( + app: Server.App & { _io?: IOTypes.Server }, + games: Game[], + origins: string[] = [] + ) { const io = new IO({ ioOptions: { pingTimeout: PING_TIMEOUT, pingInterval: PING_INTERVAL, + cors: { + origins, + }, ...this.socketOpts, }, }); From 246b9c5fa5d04a60814bd7d461b4bcf40c200b97 Mon Sep 17 00:00:00 2001 From: delucis Date: Wed, 7 Jul 2021 19:45:06 +0200 Subject: [PATCH 5/7] Use socket.io typing for origins server option --- src/server/index.ts | 3 ++- src/server/transport/socketio.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/index.ts b/src/server/index.ts index 18b5fda4d..6348e9c26 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -7,6 +7,7 @@ */ import Koa from 'koa'; +import type IOTypes from 'socket.io'; import { createRouter, configureApp } from './api'; import { DBFromEnv } from './db'; @@ -57,7 +58,7 @@ export const getPortFromServer = ( interface ServerOpts { games: Game[]; - origins?: string[]; + origins?: IOTypes.ServerOptions['cors']['origin']; db?: StorageAPI.Async | StorageAPI.Sync; transport?: SocketIO; uuid?: () => string; diff --git a/src/server/transport/socketio.ts b/src/server/transport/socketio.ts index 15e91e176..26e973765 100644 --- a/src/server/transport/socketio.ts +++ b/src/server/transport/socketio.ts @@ -152,7 +152,7 @@ export class SocketIO { init( app: Server.App & { _io?: IOTypes.Server }, games: Game[], - origins: string[] = [] + origins: IOTypes.ServerOptions['cors']['origin'] = [] ) { const io = new IO({ ioOptions: { From 2319f653f8fb72a1d39a7a308eac795d25b17a03 Mon Sep 17 00:00:00 2001 From: delucis Date: Thu, 8 Jul 2021 01:13:09 +0200 Subject: [PATCH 6/7] docs: Update origins documentation --- docs/documentation/api/Server.md | 14 +++++++++++--- docs/documentation/multiplayer.md | 17 ++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/docs/documentation/api/Server.md b/docs/documentation/api/Server.md index b0f48112f..470f8a4c0 100644 --- a/docs/documentation/api/Server.md +++ b/docs/documentation/api/Server.md @@ -16,11 +16,19 @@ be configured to run on a separate port. A config object with the following options: -1. `games` (_array_): a list of game implementations +1. `games` (_array_) (required): a list of game implementations (each should be an object conforming to the [Game API](/api/Game.md)). -2. `origins` (_array_): a list of allowed origins for CORS. - For instance, this could be [`https://example.com`], or in the case of our examples, [`http://localhost:3000`] +2. `origins` (_array_) (required): a list of allowed origins for + [CORS](https://a.lu "Cross-Origin Resource Sharing"). + + The list can contain strings or regular expressions, matching the origins + that are allowed to access the game server. For example, this could be + `['https://example.com']` if that’s where your game is running. While + developing locally you could set it to `[/localhost:\d+/]` to allow access for + any page running on localhost. + +[cors]: https://github.com/expressjs/cors#configuration-options 3. `db` (_object_): the [database connector](/storage). If not provided, an in-memory implementation is used. diff --git a/docs/documentation/multiplayer.md b/docs/documentation/multiplayer.md index 44bc44f00..b6e593774 100644 --- a/docs/documentation/multiplayer.md +++ b/docs/documentation/multiplayer.md @@ -208,19 +208,30 @@ a server at the location specified, which is discussed below. ### Setting up the server We’ll create a new file at `src/server.js` to write our server code. -In order to run the game master on a Node server, we import the -boardgame.io server module and provide it with our `TicTacToe` game object. + +boardgame.io provides a server module that simplifies running the game +master on a Node server. We import that module and configure it with our +`TicTacToe` game object and a list of URL origins we want to allow to +connect to the server. Later you would set `origins` with your game’s domain +name, but for now we’ll use a value that allows any locally served page +to connect. ```js // src/server.js const { Server } = require('boardgame.io/server'); const { TicTacToe } = require('./Game'); -const server = Server({ games: [TicTacToe], origins: ['http://localhost:300'] }); +const server = Server({ + games: [TicTacToe], + origins: [/localhost:\d+/], +}); server.run(8000); ``` +?> See [the Server reference page](api/Server.md) for more detail on + the various configuration options. + Because `Game.js` is an ES module, we will use [esm](https://github.com/standard-things/esm) which enables us to use `import` statements in a Node environment: From 4c00e036690da64e84512a48b51f8ed5c48503b3 Mon Sep 17 00:00:00 2001 From: delucis Date: Thu, 8 Jul 2021 01:48:06 +0200 Subject: [PATCH 7/7] feat: Log explanatory warning if origins option is undefined --- src/server/index.test.ts | 16 ++++++++++++++++ src/server/index.ts | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/src/server/index.test.ts b/src/server/index.test.ts index 328e8f18c..1047e5d77 100644 --- a/src/server/index.test.ts +++ b/src/server/index.test.ts @@ -13,6 +13,10 @@ import type { StorageAPI } from '../types'; const game = { seed: 0 }; +const warn = jest.spyOn(console, 'warn').mockImplementation(() => {}); +beforeEach(warn.mockReset); +afterAll(warn.mockRestore); + jest.mock('../core/logger', () => ({ info: () => {}, error: () => {}, @@ -80,6 +84,18 @@ describe('new', () => { const server = Server({ games: [game], authenticateCredentials }); expect(server.db).not.toBeNull(); }); + + test('logs a warning if origins not set', () => { + Server({ games: [{}] }); + expect(warn).toHaveBeenCalledWith( + expect.stringContaining('Server `origins` option is not set.') + ); + }); + + test('does not log a warning if origins set', () => { + Server({ games: [{}], origins: [] }); + expect(warn).not.toHaveBeenCalled(); + }); }); describe('run', () => { diff --git a/src/server/index.ts b/src/server/index.ts index 6348e9c26..7b385a931 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -104,6 +104,14 @@ export function Server({ if (transport === undefined) { transport = new SocketIO({ https }); } + if (origins === undefined) { + console.warn( + 'Server `origins` option is not set.\n' + + 'Since boardgame.io@0.45, CORS is not enabled by default and you must ' + + 'explicitly set the origins that are allowed to connect to the server.\n' + + 'See https://boardgame.io/documentation/#/api/Server' + ); + } transport.init(app, games, origins); const router = createRouter({ db, games, uuid, auth });