├── .gitignore ├── package-lock.json ├── package.json ├── public ├── index.html └── script.js └── server.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "websockets", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.5", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 10 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 11 | "requires": { 12 | "mime-types": "~2.1.18", 13 | "negotiator": "0.6.1" 14 | } 15 | }, 16 | "after": { 17 | "version": "0.8.2", 18 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 19 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 20 | }, 21 | "array-flatten": { 22 | "version": "1.1.1", 23 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 24 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 25 | }, 26 | "arraybuffer.slice": { 27 | "version": "0.0.7", 28 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 29 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 30 | }, 31 | "async-limiter": { 32 | "version": "1.0.0", 33 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 34 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 35 | }, 36 | "backo2": { 37 | "version": "1.0.2", 38 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 39 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 40 | }, 41 | "base64-arraybuffer": { 42 | "version": "0.1.5", 43 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 44 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" 45 | }, 46 | "base64id": { 47 | "version": "1.0.0", 48 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 49 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" 50 | }, 51 | "better-assert": { 52 | "version": "1.0.2", 53 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 54 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 55 | "requires": { 56 | "callsite": "1.0.0" 57 | } 58 | }, 59 | "blob": { 60 | "version": "0.0.5", 61 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 62 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 63 | }, 64 | "body-parser": { 65 | "version": "1.18.3", 66 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", 67 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", 68 | "requires": { 69 | "bytes": "3.0.0", 70 | "content-type": "~1.0.4", 71 | "debug": "2.6.9", 72 | "depd": "~1.1.2", 73 | "http-errors": "~1.6.3", 74 | "iconv-lite": "0.4.23", 75 | "on-finished": "~2.3.0", 76 | "qs": "6.5.2", 77 | "raw-body": "2.3.3", 78 | "type-is": "~1.6.16" 79 | } 80 | }, 81 | "bytes": { 82 | "version": "3.0.0", 83 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 84 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 85 | }, 86 | "callsite": { 87 | "version": "1.0.0", 88 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 89 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 90 | }, 91 | "component-bind": { 92 | "version": "1.0.0", 93 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 94 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 95 | }, 96 | "component-emitter": { 97 | "version": "1.2.1", 98 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 99 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 100 | }, 101 | "component-inherit": { 102 | "version": "0.0.3", 103 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 104 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 105 | }, 106 | "content-disposition": { 107 | "version": "0.5.2", 108 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 109 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 110 | }, 111 | "content-type": { 112 | "version": "1.0.4", 113 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 114 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 115 | }, 116 | "cookie": { 117 | "version": "0.3.1", 118 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 119 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 120 | }, 121 | "cookie-signature": { 122 | "version": "1.0.6", 123 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 124 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 125 | }, 126 | "debug": { 127 | "version": "2.6.9", 128 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 129 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 130 | "requires": { 131 | "ms": "2.0.0" 132 | } 133 | }, 134 | "depd": { 135 | "version": "1.1.2", 136 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 137 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 138 | }, 139 | "destroy": { 140 | "version": "1.0.4", 141 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 142 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 143 | }, 144 | "ee-first": { 145 | "version": "1.1.1", 146 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 147 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 148 | }, 149 | "encodeurl": { 150 | "version": "1.0.2", 151 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 152 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 153 | }, 154 | "engine.io": { 155 | "version": "3.3.2", 156 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", 157 | "integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", 158 | "requires": { 159 | "accepts": "~1.3.4", 160 | "base64id": "1.0.0", 161 | "cookie": "0.3.1", 162 | "debug": "~3.1.0", 163 | "engine.io-parser": "~2.1.0", 164 | "ws": "~6.1.0" 165 | }, 166 | "dependencies": { 167 | "debug": { 168 | "version": "3.1.0", 169 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 170 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 171 | "requires": { 172 | "ms": "2.0.0" 173 | } 174 | } 175 | } 176 | }, 177 | "engine.io-client": { 178 | "version": "3.3.2", 179 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", 180 | "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", 181 | "requires": { 182 | "component-emitter": "1.2.1", 183 | "component-inherit": "0.0.3", 184 | "debug": "~3.1.0", 185 | "engine.io-parser": "~2.1.1", 186 | "has-cors": "1.1.0", 187 | "indexof": "0.0.1", 188 | "parseqs": "0.0.5", 189 | "parseuri": "0.0.5", 190 | "ws": "~6.1.0", 191 | "xmlhttprequest-ssl": "~1.5.4", 192 | "yeast": "0.1.2" 193 | }, 194 | "dependencies": { 195 | "debug": { 196 | "version": "3.1.0", 197 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 198 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 199 | "requires": { 200 | "ms": "2.0.0" 201 | } 202 | } 203 | } 204 | }, 205 | "engine.io-parser": { 206 | "version": "2.1.3", 207 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", 208 | "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", 209 | "requires": { 210 | "after": "0.8.2", 211 | "arraybuffer.slice": "~0.0.7", 212 | "base64-arraybuffer": "0.1.5", 213 | "blob": "0.0.5", 214 | "has-binary2": "~1.0.2" 215 | } 216 | }, 217 | "escape-html": { 218 | "version": "1.0.3", 219 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 220 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 221 | }, 222 | "etag": { 223 | "version": "1.8.1", 224 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 225 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 226 | }, 227 | "express": { 228 | "version": "4.16.4", 229 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", 230 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", 231 | "requires": { 232 | "accepts": "~1.3.5", 233 | "array-flatten": "1.1.1", 234 | "body-parser": "1.18.3", 235 | "content-disposition": "0.5.2", 236 | "content-type": "~1.0.4", 237 | "cookie": "0.3.1", 238 | "cookie-signature": "1.0.6", 239 | "debug": "2.6.9", 240 | "depd": "~1.1.2", 241 | "encodeurl": "~1.0.2", 242 | "escape-html": "~1.0.3", 243 | "etag": "~1.8.1", 244 | "finalhandler": "1.1.1", 245 | "fresh": "0.5.2", 246 | "merge-descriptors": "1.0.1", 247 | "methods": "~1.1.2", 248 | "on-finished": "~2.3.0", 249 | "parseurl": "~1.3.2", 250 | "path-to-regexp": "0.1.7", 251 | "proxy-addr": "~2.0.4", 252 | "qs": "6.5.2", 253 | "range-parser": "~1.2.0", 254 | "safe-buffer": "5.1.2", 255 | "send": "0.16.2", 256 | "serve-static": "1.13.2", 257 | "setprototypeof": "1.1.0", 258 | "statuses": "~1.4.0", 259 | "type-is": "~1.6.16", 260 | "utils-merge": "1.0.1", 261 | "vary": "~1.1.2" 262 | } 263 | }, 264 | "finalhandler": { 265 | "version": "1.1.1", 266 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 267 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 268 | "requires": { 269 | "debug": "2.6.9", 270 | "encodeurl": "~1.0.2", 271 | "escape-html": "~1.0.3", 272 | "on-finished": "~2.3.0", 273 | "parseurl": "~1.3.2", 274 | "statuses": "~1.4.0", 275 | "unpipe": "~1.0.0" 276 | } 277 | }, 278 | "forwarded": { 279 | "version": "0.1.2", 280 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 281 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 282 | }, 283 | "fresh": { 284 | "version": "0.5.2", 285 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 286 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 287 | }, 288 | "has-binary2": { 289 | "version": "1.0.3", 290 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 291 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 292 | "requires": { 293 | "isarray": "2.0.1" 294 | } 295 | }, 296 | "has-cors": { 297 | "version": "1.1.0", 298 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 299 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 300 | }, 301 | "http-errors": { 302 | "version": "1.6.3", 303 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 304 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 305 | "requires": { 306 | "depd": "~1.1.2", 307 | "inherits": "2.0.3", 308 | "setprototypeof": "1.1.0", 309 | "statuses": ">= 1.4.0 < 2" 310 | } 311 | }, 312 | "iconv-lite": { 313 | "version": "0.4.23", 314 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", 315 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", 316 | "requires": { 317 | "safer-buffer": ">= 2.1.2 < 3" 318 | } 319 | }, 320 | "indexof": { 321 | "version": "0.0.1", 322 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 323 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 324 | }, 325 | "inherits": { 326 | "version": "2.0.3", 327 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 328 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 329 | }, 330 | "ipaddr.js": { 331 | "version": "1.8.0", 332 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", 333 | "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" 334 | }, 335 | "isarray": { 336 | "version": "2.0.1", 337 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 338 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 339 | }, 340 | "media-typer": { 341 | "version": "0.3.0", 342 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 343 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 344 | }, 345 | "merge-descriptors": { 346 | "version": "1.0.1", 347 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 348 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 349 | }, 350 | "methods": { 351 | "version": "1.1.2", 352 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 353 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 354 | }, 355 | "mime": { 356 | "version": "1.4.1", 357 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 358 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 359 | }, 360 | "mime-db": { 361 | "version": "1.38.0", 362 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", 363 | "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" 364 | }, 365 | "mime-types": { 366 | "version": "2.1.22", 367 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", 368 | "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", 369 | "requires": { 370 | "mime-db": "~1.38.0" 371 | } 372 | }, 373 | "ms": { 374 | "version": "2.0.0", 375 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 376 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 377 | }, 378 | "negotiator": { 379 | "version": "0.6.1", 380 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 381 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 382 | }, 383 | "object-component": { 384 | "version": "0.0.3", 385 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 386 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" 387 | }, 388 | "on-finished": { 389 | "version": "2.3.0", 390 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 391 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 392 | "requires": { 393 | "ee-first": "1.1.1" 394 | } 395 | }, 396 | "parseqs": { 397 | "version": "0.0.5", 398 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 399 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 400 | "requires": { 401 | "better-assert": "~1.0.0" 402 | } 403 | }, 404 | "parseuri": { 405 | "version": "0.0.5", 406 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 407 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 408 | "requires": { 409 | "better-assert": "~1.0.0" 410 | } 411 | }, 412 | "parseurl": { 413 | "version": "1.3.2", 414 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 415 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 416 | }, 417 | "path-to-regexp": { 418 | "version": "0.1.7", 419 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 420 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 421 | }, 422 | "proxy-addr": { 423 | "version": "2.0.4", 424 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", 425 | "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", 426 | "requires": { 427 | "forwarded": "~0.1.2", 428 | "ipaddr.js": "1.8.0" 429 | } 430 | }, 431 | "qs": { 432 | "version": "6.5.2", 433 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 434 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 435 | }, 436 | "range-parser": { 437 | "version": "1.2.0", 438 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 439 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 440 | }, 441 | "raw-body": { 442 | "version": "2.3.3", 443 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", 444 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", 445 | "requires": { 446 | "bytes": "3.0.0", 447 | "http-errors": "1.6.3", 448 | "iconv-lite": "0.4.23", 449 | "unpipe": "1.0.0" 450 | } 451 | }, 452 | "safe-buffer": { 453 | "version": "5.1.2", 454 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 455 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 456 | }, 457 | "safer-buffer": { 458 | "version": "2.1.2", 459 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 460 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 461 | }, 462 | "send": { 463 | "version": "0.16.2", 464 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 465 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 466 | "requires": { 467 | "debug": "2.6.9", 468 | "depd": "~1.1.2", 469 | "destroy": "~1.0.4", 470 | "encodeurl": "~1.0.2", 471 | "escape-html": "~1.0.3", 472 | "etag": "~1.8.1", 473 | "fresh": "0.5.2", 474 | "http-errors": "~1.6.2", 475 | "mime": "1.4.1", 476 | "ms": "2.0.0", 477 | "on-finished": "~2.3.0", 478 | "range-parser": "~1.2.0", 479 | "statuses": "~1.4.0" 480 | } 481 | }, 482 | "serve-static": { 483 | "version": "1.13.2", 484 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 485 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 486 | "requires": { 487 | "encodeurl": "~1.0.2", 488 | "escape-html": "~1.0.3", 489 | "parseurl": "~1.3.2", 490 | "send": "0.16.2" 491 | } 492 | }, 493 | "setprototypeof": { 494 | "version": "1.1.0", 495 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 496 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 497 | }, 498 | "socket.io": { 499 | "version": "2.2.0", 500 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", 501 | "integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", 502 | "requires": { 503 | "debug": "~4.1.0", 504 | "engine.io": "~3.3.1", 505 | "has-binary2": "~1.0.2", 506 | "socket.io-adapter": "~1.1.0", 507 | "socket.io-client": "2.2.0", 508 | "socket.io-parser": "~3.3.0" 509 | }, 510 | "dependencies": { 511 | "debug": { 512 | "version": "4.1.1", 513 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 514 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 515 | "requires": { 516 | "ms": "^2.1.1" 517 | } 518 | }, 519 | "ms": { 520 | "version": "2.1.1", 521 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 522 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 523 | } 524 | } 525 | }, 526 | "socket.io-adapter": { 527 | "version": "1.1.1", 528 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", 529 | "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" 530 | }, 531 | "socket.io-client": { 532 | "version": "2.2.0", 533 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", 534 | "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", 535 | "requires": { 536 | "backo2": "1.0.2", 537 | "base64-arraybuffer": "0.1.5", 538 | "component-bind": "1.0.0", 539 | "component-emitter": "1.2.1", 540 | "debug": "~3.1.0", 541 | "engine.io-client": "~3.3.1", 542 | "has-binary2": "~1.0.2", 543 | "has-cors": "1.1.0", 544 | "indexof": "0.0.1", 545 | "object-component": "0.0.3", 546 | "parseqs": "0.0.5", 547 | "parseuri": "0.0.5", 548 | "socket.io-parser": "~3.3.0", 549 | "to-array": "0.1.4" 550 | }, 551 | "dependencies": { 552 | "debug": { 553 | "version": "3.1.0", 554 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 555 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 556 | "requires": { 557 | "ms": "2.0.0" 558 | } 559 | } 560 | } 561 | }, 562 | "socket.io-parser": { 563 | "version": "3.3.0", 564 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", 565 | "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", 566 | "requires": { 567 | "component-emitter": "1.2.1", 568 | "debug": "~3.1.0", 569 | "isarray": "2.0.1" 570 | }, 571 | "dependencies": { 572 | "debug": { 573 | "version": "3.1.0", 574 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 575 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 576 | "requires": { 577 | "ms": "2.0.0" 578 | } 579 | } 580 | } 581 | }, 582 | "statuses": { 583 | "version": "1.4.0", 584 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 585 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 586 | }, 587 | "to-array": { 588 | "version": "0.1.4", 589 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 590 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 591 | }, 592 | "type-is": { 593 | "version": "1.6.16", 594 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 595 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 596 | "requires": { 597 | "media-typer": "0.3.0", 598 | "mime-types": "~2.1.18" 599 | } 600 | }, 601 | "unpipe": { 602 | "version": "1.0.0", 603 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 604 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 605 | }, 606 | "utils-merge": { 607 | "version": "1.0.1", 608 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 609 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 610 | }, 611 | "vary": { 612 | "version": "1.1.2", 613 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 614 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 615 | }, 616 | "ws": { 617 | "version": "6.1.4", 618 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", 619 | "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", 620 | "requires": { 621 | "async-limiter": "~1.0.0" 622 | } 623 | }, 624 | "xmlhttprequest-ssl": { 625 | "version": "1.5.5", 626 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 627 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 628 | }, 629 | "yeast": { 630 | "version": "0.1.2", 631 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 632 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 633 | } 634 | } 635 | } 636 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "websockets", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "express": "^4.16.4", 14 | "socket.io": "^2.2.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |